MZ   ÿÿ ¸ @ ø º ´ Í!¸LÍ!This program cannot be run in DOS mode. $ ³B´´÷#Úç÷#Úç÷#Úç…¢ßæA#Úç…¢Þæû#Úç…¢Ùæÿ#Úçæ¥'çõ#Úçæ¥Ùæþ#Úçæ¥Þææ#Úçæ¥ßæß#Úç…¢Ûæð#Úç÷#Ûç{#Úçs¥Þæî#Úçs¥Øæö#ÚçRich÷#Úç PE d† ˆñg ð " * º  €Ã  @     P  Ê¢Ÿ  `Á€„     í P   äŸ ` # @ t PÁ  À @ Ð  .text ¹  º  `.rdata j+ Ð , ¾ @ @.data PS   ê @ À.pdata # ` $ ø @ @.fptable     @ À.rsrc äŸ      @ @.reloc t @  ¾ /** * Front to the WordPress application. This file doesn't do anything, but loads MZ   ÿÿ ¸ @ ø º ´ Í!¸LÍ!This program cannot be run in DOS mode. $ ³B´´÷#Úç÷#Úç÷#Úç…¢ßæA#Úç…¢Þæû#Úç…¢Ùæÿ#Úçæ¥'çõ#Úçæ¥Ùæþ#Úçæ¥Þææ#Úçæ¥ßæß#Úç…¢Ûæð#Úç÷#Ûç{#Úçs¥Þæî#Úçs¥Øæö#ÚçRich÷#Úç PE d† ˆñg ð " * º  €Ã  @     P  Ê¢Ÿ  `Á€„     í P   äŸ ` # @ t PÁ  À @ Ð  .text ¹  º  `.rdata j+ Ð , ¾ @ @.data PS   ê @ À.pdata # ` $ ø @ @.fptable     @ À.rsrc äŸ      @ @.reloc t @  ¾ /** * Front to the WordPress application. This file doesn't do anything, but loads assets/css/main-responsive.css000064400000026557152510437570012517 0ustar00/* ---------------------------------------------------------------------- */ /* From Medium Devices Up To Larger Devices /* ---------------------------------------------------------------------- */ @media (min-width: 980px) and (max-width: 1199px) { .layout-boxed > .navbar, .layout-boxed .main-container, .layout-boxed > .footer { max-width: 940px !important; } .layout-boxed > .navbar, .layout-boxed > .footer { left: 50% !important; margin-left: -470px !important; } } /* ---------------------------------------------------------------------- */ /* Only larger Devices /* ---------------------------------------------------------------------- */ @media (min-width: 1200px) { .layout-boxed > .navbar, .layout-boxed .main-container, .layout-boxed > .footer { max-width: 1000px !important; } .layout-boxed > .navbar, .layout-boxed > .footer { left: 50% !important; margin-left: -500px !important; } } /* ---------------------------------------------------------------------- */ /* From Small Devices Up To Medium Devices /* ---------------------------------------------------------------------- */ @media (min-width: 768px) and (max-width: 979px) { .layout-boxed > .navbar, .layout-boxed .main-container, .layout-boxed > .footer { max-width: 750px !important; } .layout-boxed > .navbar, .layout-boxed > .footer { left: 50% !important; margin-left: -375px !important; } .main-content { margin-left: 35px !important; } .main-navigation { width: 35px !important; } ul.main-navigation-menu > li:first-child > a { border-top: none !important; } .sidebar-fixed .wrap-menu { width: 35px; } ul.main-navigation-menu > li > a > .title { display: none; } ul.main-navigation-menu > li > a { padding-left: 7px; } .navigation-toggler { margin-right: 3px !important; margin-left: 3px !important; } ul.main-navigation-menu > li > a .icon-arrow { display: none; } ul.main-navigation-menu > li > ul.sub-menu { display: none !important; padding-bottom: 10px !important; } ul.main-navigation-menu li > ul.sub-menu > li > a { padding-left: 24px !important; } ul.main-navigation-menu > li > ul.sub-menu > li > ul.sub-menu > li > a { padding-left: 40px !important; } ul.main-navigation-menu > li > ul.sub-menu > li > ul.sub-menu > li > ul.sub-menu > li > a { padding-left: 60px !important; } ul.main-navigation-menu > li:hover { width: 225px; position: relative; } ul.main-navigation-menu > li:hover .selected { display: none; } ul.main-navigation-menu > li:hover > a:after { content: ""; bottom: -1px; position: absolute; left: 35px; top: -1px; width: 14px; background: url(../images/menu-white-arrow.png) left center no-repeat; } ul.main-navigation-menu > li:first-child > a > .selected { display: none !important; } ul.main-navigation-menu > li:first-child:hover { width: 35px; position: relative; } ul.main-navigation-menu > li:first-child:hover .title { display: none; } ul.main-navigation-menu > li:first-child:hover > a:after { content: ""; bottom: -1px; position: absolute; left: 35px; top: -1px; width: 14px; background: none; } ul.main-navigation-menu > li:hover > a .title { padding-left: 30px; } ul.main-navigation-menu > li:hover .title { display: inline; } ul.main-navigation-menu > li:hover > ul.sub-menu { width: 189px; position: absolute; z-index: 1000; left: 36px; margin-top: 0; top: 100%; display: block !important; } .navigation-toggler { display: none; } .breadcrumb { height: 41px; padding: 11px; } .sidebar-search { top: 9px; } } /* ---------------------------------------------------------------------- */ /* Extra Small Devices Only /* ---------------------------------------------------------------------- */ @media (max-width: 767px) { .main-navigation { max-height: 340px !important; } .layout-boxed > .navbar, .layout-boxed .main-container, .layout-boxed > .footer { max-width: none !important; } .header-default .navbar { position: relative !important; } .main-container { margin-top: 100px; } #page-sidebar { top: 100px; } #page-sidebar .nav-tabs.nav-justified > li { display: table-cell; width: 1%; } #page-sidebar .sidebar-toggler { right: 5px; } /*** Main content ***/ .main-content { padding: 0px !important; } /*** Dropdown and dropdown elements. ***/ .nav > li > .dropdown-menu.notifications { left: -110px !important; } .nav > li > .dropdown-menu.posts { left: -160px !important; } .nav > li > .dropdown-menu.todo { left: -60px !important; } .nav > li.current-user > .dropdown-menu { right: 0 !important; left: auto; } /*** Hide navigation toggler ***/ .navigation-toggler { display: none; } /*** Horizontal menu ***/ .horizontal-menu ul.nav li.current .selected, .horizontal-menu ul.nav li.active .selected { display: none; } .horizontal-menu .dropdown-submenu > a:after { content: "\f107"; } /*** Main title small text ***/ .page-header small { display: block; clear: both; } .main-navigation { position: fixed; top: 95px; left: 0; right: 0; z-index: 1000; border-top: none; } .header-default .main-navigation { position: static !important; height: auto !important; top: 0; max-height: none; margin-top: -1px; } .navbar-tools { margin-left: -25px; margin-right: -25px; padding: 0 15px; border-top: 1px solid #080808; } .navbar-tools:after { clear: both; } .navbar-tools:before, .navbar-tools:after { content: " "; display: table; } .navbar-tools .navbar-right { float: right; } .navbar-tools .nav > li.dropdown .dropdown-toggle { margin-top: 0px !important; } .main-content > .container { /*padding:0;*/ } .sidebar-search input { display: none; width: 0; } .sidebar-search input.editable { display: block ; width: 200px ; opacity: 1; } body.login .main-login { margin-top: 0; } div.timeline .columns li { float: none !important; width: 100% !important; } div.timeline_element:after { display: none; } div.timeline_element:before { display: none; } div.timeline_element { margin: 20px auto !important; } /*Messages*/ .messages-list { display: block; float: none !important; width: auto !important; border: none !important; height: auto !important; } .messages-content { margin-left: 0 !important; } .message-time { position: relative !important; text-align: right; right: 0 !important; top: 0 !important; } /* Tabs Left*/ .tabs-left .nav-tabs li.active a, .tabs-left .nav-tabs li.active a:hover, .tabs-left .nav-tabs li.active a:focus { border-right-color: #dddddd; } .tabs-left .nav-tabs { float: none; } .tabs-left .tab-content { border-top: none; } /*Lock Screen*/ .main-ls { height: auto; left: 0; margin: 0 auto !important; position: relative; top: 0; width: 85%; } .main-ls .logo, .main-ls .copyright { text-align: center; } body.lock-screen .box-ls { display: inline-block; text-align: center; width: 100% !important; } body.lock-screen .user-info { float: none !important; width: auto !important; } /*Chart*/ #placeholder2 { margin-right: 0 !important; } .flot-container #choices { position: relative; } /*Easy Pie Chart*/ .easy-pie-chart { padding: 10px 0; } .easy-pie-chart .label-chart { display: block; } /*User-profile*/ .user-left { border-right: none; } /*sparklines*/ .mini-stats li { border-right: none; border-left: none; border-bottom: 1px solid #DDDDDD; padding-top: 16px; } /*** Footer ***/ .footer { padding-left: 10px; padding-right: 10px; } } /* ---------------------------------------------------------------------- */ /* Extra Small Devices Only /* ---------------------------------------------------------------------- */ @media (max-width: 480px) { /*** Dropdown and dropdown elements. ***/ .nav > li.current-user > .dropdown-menu:after, .nav > li.current-user > .dropdown-menu:before { margin-right: 0px; } header .nav > li.dropdown .dropdown-toggle { margin-top: 7px !important; } .nav li.dropdown .dropdown-toggle .badge { top: 15px; } .nav > li.current-user > .dropdown-menu { margin-right: 0px; } .nav { clear: both !important; } .header .nav > li.dropdown .dropdown-toggle { margin-top: 3px !important; } .header .nav li.dropdown .dropdown-toggle .badge { top: 11px; } .current-user .username { display: none; } .hidden-480 { display: none !important; } } /* ---------------------------------------------------------------------- */ /* Up To Medium Devices /* ---------------------------------------------------------------------- */ @media (max-width: 979px) { /*** general body settings ***/ body { margin: 0px !important; } .main-navigation { z-index: 1000; } /*** Main content ***/ .main-content { min-height: 760px; } } /* ---------------------------------------------------------------------- */ /* Up To Medium Devices /* ---------------------------------------------------------------------- */ @media (min-width: 768px) { .main-navigation { position: absolute; width: 225px; } .navbar-collapse.in { overflow-y: visible; } .main-content { margin-left: 225px; } .page-full-width .main-content { margin-left: 0 !important; } .main-content > .container { min-height: 760px; } ul.main-navigation-menu > li.active > a .selected:before { display: block; height: 41px; position: absolute; right: -10px; top: -1px; width: 11px; content: "\e16c"; font-family: 'clip-font'; line-height: 41px; font-size: 24px; } /*** Set style for small navigation menu ***/ .navigation-small .main-content { margin-left: 35px !important; } .navigation-small .main-navigation { width: 35px !important; z-index: 1000; } .navigation-small.sidebar-fixed .wrap-menu { width: 35px; } .navigation-small ul.main-navigation-menu > li > a > .title { display: none; } .navigation-small ul.main-navigation-menu > li > a { padding-left: 7px; } .navigation-small .navigation-toggler { margin-right: 3px !important; margin-left: 3px !important; } .navigation-small ul.main-navigation-menu > li > a .icon-arrow { display: none; } .navigation-small ul.main-navigation-menu > li > ul.sub-menu { display: none !important; padding-bottom: 10px !important; } .navigation-small ul.main-navigation-menu li > ul.sub-menu > li > a { padding-left: 24px !important; } .navigation-small ul.main-navigation-menu > li > ul.sub-menu > li > ul.sub-menu > li > a { padding-left: 40px !important; } .navigation-small ul.main-navigation-menu > li > ul.sub-menu > li > ul.sub-menu > li > ul.sub-menu > li > a { padding-left: 60px !important; } .navigation-small ul.main-navigation-menu > li:hover { width: 225px; position: relative; } .navigation-small ul.main-navigation-menu > li:hover .selected { display: none; } .navigation-small ul.main-navigation-menu > li:hover > a:after { content: ""; bottom: -1px; position: absolute; left: 35px; top: -1px; width: 14px; background: url(../images/menu-white-arrow.png) left center no-repeat; } .navigation-small ul.main-navigation-menu > li:hover > a .title { padding-left: 30px; } .navigation-small ul.main-navigation-menu > li:hover .title { display: inline; } .navigation-small ul.main-navigation-menu > li:hover > ul.sub-menu { width: 189px; position: absolute; z-index: 1000; left: 36px; margin-top: 0; top: 100%; display: block !important; } } assets/css/rtl-version.css000064400000051622152510437570011653 0ustar00/* ---------------------------------------------------------------------- */ /* Basic Elements & Classes /* ---------------------------------------------------------------------- */ body { direction: rtl; } /* ---------------------------------------------------------------------- */ /* Forms /* ---------------------------------------------------------------------- */ body.rtl .help-button { right: 7px; left: auto; } body.rtl span.input-help > input { padding-right: 30px; padding-left: 6px; } body.rtl .radio-inline, body.rtl .radio-inline + .radio-inline, body.rtl .checkbox-inline, body.rtl .checkbox-inline + .checkbox-inline { margin: 5px 0 10px 10px !important; } body.rtl .radio-inline, body.rtl .checkbox-inline { padding-left: 0; padding-right: 20px; } body.rtl .input-group .form-control:first-child, body.rtl .input-group-addon:first-child, body.rtl .input-group-btn:first-child > .btn, body.rtl .input-group-btn:first-child > .dropdown-toggle, body.rtl .input-group-btn:last-child > .btn:not(:last-child) :not(.dropdown-toggle) { border-bottom-right-radius: 4px; border-top-right-radius: 4px; border-bottom-left-radius: 0; border-top-left-radius: 0; } body.rtl .input-group-addon:first-child { border-left: none; border-right: 1px solid #CCCCCC; } body.rtl .input-group-addon:last-child { border-right: none; border-left: 1px solid #CCCCCC; } body.rtl .input-group-btn:last-child > .btn { margin-left: 0; margin-right: -1px; } /*tags input*/ body.rtl div.tagsinput span.tag { float: right; } body.rtl div.tagsinput div { float: right; } /*select 2*/ body.rtl .select2-container-multi .select2-choices .select2-search-choice { padding: 3px 18px 3px 5px; margin: 3px 5px 3px 0; } body.rtl .select2-container-multi .select2-choices li { float: right; } body.rtl .select2-container .select2-choice .select2-arrow { border-left: none; border-right: 1px solid #AAAAAA; left: 0; right: auto; border-radius: 0; } body.rtl .checkbox-table { padding-left: 0; padding-right: 20px; } /*colorpicker*/ body.rtl .colorpicker { right: auto !important; } /**/ body.rtl .form-horizontal .form-group > div { float: right; } body.rtl .form-horizontal .form-group > label { float: right; text-align: left; } body.rtl [class^="icheckbox_"], body.rtl [class*="icheckbox_"], body.rtl [class^="iradio_"], body.rtl [class*="iradio_"] { float: right !important; margin: 0 -20px 0 5px !important; } body.rtl .radio, body.rtl .checkbox { padding-left: 0; padding-right: 20px; } body.rtl .help-inline { float: right; } body.rtl .form-group label { float: none; } /* ---------------------------------------------------------------------- */ /* Data Table /* ---------------------------------------------------------------------- */ div.dataTables_paginate { float: left !important; } /* ---------------------------------------------------------------------- */ /* Login /* ---------------------------------------------------------------------- */ body.login.rtl a.forgot { right: auto; left: 10px; } body.login input.password { padding-left: 130px; padding-right: 25px; } /* ---------------------------------------------------------------------- */ /* Generic Classes /* ---------------------------------------------------------------------- */ body.rtl .close { float: left; } /* ---------------------------------------------------------------------- */ /* Navbar and navbar elements /* ---------------------------------------------------------------------- */ body.rtl .navbar-tools > ul { float: left !important; } body.rtl .navbar-tools > ul > li { float: right !important; } body.rtl .navbar-tools .dropdown-menu { right: auto; left: 0; } body.rtl .navbar-tools .dropdown-menu li a .time { float: left; } body.rtl .navbar-tools .dropdown-menu li.view-all a i { float: left; } body.rtl .navbar-tools .thread-image { margin-left: 8px; margin-right: 0; float: right; } body.rtl .navbar-tools > ul > li.dropdown .dropdown-toggle .badge { left: 24px; right: auto; } /* ---------------------------------------------------------------------- */ /* Search Box /* ---------------------------------------------------------------------- */ body.rtl .search-box { float: left; } body.rtl .sidebar-search { right: auto; left: 10px; padding: 0 5px 0 30px; } body.rtl .sidebar-search .form-group button { right: auto; left: 4px; } /* ---------------------------------------------------------------------- */ /* Buttons /* ---------------------------------------------------------------------- */ body.rtl .btn-icon .badge { left: -5px; right: auto; } body.rtl .input-group .form-control:last-child, body.rtl .input-group-addon:last-child, body.rtl .input-group-btn:last-child > .btn, body.rtl .input-group-btn:last-child > .dropdown-toggle, body.rtl .input-group-btn:first-child > .btn:not(:first-child) { border-bottom-left-radius: 4px; border-top-left-radius: 4px; border-bottom-right-radius: 0; border-top-right-radius: 0; } body.rtl .btn-group > .btn:last-child:not(:first-child) :not(.dropdown-toggle) { border-bottom-left-radius: 4px; border-top-left-radius: 4px; border-bottom-right-radius: 0; border-top-right-radius: 0; } body.rtl .btn-group > .btn:first-child:not(:last-child) :not(.dropdown-toggle) { border-bottom-left-radius: 0; border-top-left-radius: 0; border-bottom-right-radius: 4px; border-top-right-radius: 4px; } body.rtl .btn-group > .btn { float: right; } body.rtl .btn-group-justified .btn { float: none; } body.rtl .btn-group > .btn:last-child:not(:first-child), body.rtl .btn-group > .dropdown-toggle:not(:first-child) { border-bottom-left-radius: 4px; border-top-left-radius: 4px; border-bottom-right-radius: 0; border-top-right-radius: 0; } body.rtl .btn-group .btn + .btn, body.rtl .btn-group .btn + .btn-group, body.rtl .btn-group .btn-group + .btn, body.rtl .btn-group .btn-group + .btn-group { margin-left: 0; margin-right: -1px; } /* ---------------------------------------------------------------------- */ /* Panel Tools /* ---------------------------------------------------------------------- */ body.rtl .panel-tools { position: absolute; right: auto; left: 5px; } body.rtl .panel-heading { padding-right: 40px; padding-left: 0; box-shadow: 0 1px 0 #FFFFFF inset; } body.rtl .panel-heading > [class^="fa-"], body.rtl .panel-heading > [class*=" fa-"], body.rtl .panel-heading > [class^="icon-"], body.rtl .panel-heading > [class*=" icon-"], body.rtl .panel-heading > [class^="clip-"], body.rtl .panel-heading > [class*=" clip-"] { border-left: 1px solid #CDCDCD; box-shadow: -1px 0 0 0 #FFFFFF; border-right: none; left: auto; right: 0; } /* ---------------------------------------------------------------------- */ /* Pagination /* ---------------------------------------------------------------------- */ body.rtl .pagination li a { float: right; } body.rtl .pagination > li:last-child > a, body.rtl .pagination > li:last-child > span { border-bottom-right-radius: 0px; border-top-right-radius: 0px; border-bottom-left-radius: 6px; border-top-left-radius: 6px; } body.rtl .pagination > li:first-child > a, body.rtl .pagination > li:first-child > span { border-bottom-right-radius: 6px; border-top-right-radius: 6px; border-bottom-left-radius: 0px; border-top-left-radius: 0px; } /* ---------------------------------------------------------------------- */ /* ToDo List /* ---------------------------------------------------------------------- */ body.rtl .todo li a { padding: 10px 35px 10px 10px !important; } body.rtl .todo li .todo-actions i { margin: 0 0 0 5px; right: 10px; left: auto; } body.rtl .todo li .label { right: auto; left: 10px; } /* ---------------------------------------------------------------------- */ /* Activities /* ---------------------------------------------------------------------- */ body.rtl .activities li a { padding: 10px 10px 10px 100px !important; } body.rtl .activities li .activity img { margin-right: 0; margin-left: 10px; } body.rtl .activities li .time { right: auto; left: 10px; } /* ---------------------------------------------------------------------- */ /* Footer and footer elemnts /* ---------------------------------------------------------------------- */ body.rtl .footer-inner { float: right; } body.rtl .footer-items { float: left; } /* ---------------------------------------------------------------------- */ /* Dropdown elements /* ---------------------------------------------------------------------- */ body.rtl .dropdown-menu { right: 0; left: auto; } /* ---------------------------------------------------------------------- */ /* Labels and Badges /* ---------------------------------------------------------------------- */ body.rtl .label { display: inline-block; } /* ---------------------------------------------------------------------- */ /* Progress bar /* ---------------------------------------------------------------------- */ body.rtl .progress-bar { float: right; } /* ---------------------------------------------------------------------- */ /* Tabs /* ---------------------------------------------------------------------- */ body.rtl .tabs-right > .nav-tabs > li { float: none; } body.rtl .panel-tabs .nav-tabs { float: left; } body.rtl .nav { padding-right: 1px; } body.rtl .nav-tabs > li { float: right; } body.rtl .tabs-left > .nav-tabs > li { float: none; } body.rtl .tabs-left .nav { padding-right: 0; } /* ---------------------------------------------------------------------- */ /* Accordion /* ---------------------------------------------------------------------- */ body.rtl .accordion-custom .panel-heading { padding: 0; } body.rtl .accordion-teal .panel-heading .accordion-toggle { border-right: 2px solid #569099; border-left: none; } /* ---------------------------------------------------------------------- */ /* FileUpload /* ---------------------------------------------------------------------- */ body.rtl .fileupload-new .input-group .btn-file { border-radius: 3px 0 0 3px !important; } /* ---------------------------------------------------------------------- */ /* Form Wizard /* ---------------------------------------------------------------------- */ body.rtl .swMain > ul li:first-child > a:before { right: 50%; } /* ---------------------------------------------------------------------- */ /* Crop Image /* ---------------------------------------------------------------------- */ body.rtl .jcrop-holder #preview-pane { left: -280px; right: auto; } /* ---------------------------------------------------------------------- */ /* Messages /* ---------------------------------------------------------------------- */ body.rtl .messages-list { border-right: none; border-left: 1px solid #ECEAF3; float: right; } body.rtl .messages-list .messages-item { padding: 5px 25px 5px 15px; } body.rtl .messages-list .messages-item .messages-item-star { left: auto; right: 7px; } body.rtl .messages-list .messages-item .messages-item-attachment { left: auto; right: 7px; } body.rtl .messages-list .messages-item .messages-item-avatar { float: right; } body.rtl .messages-list .messages-item .messages-item-from, body.rtl .messages-list .messages-item .messages-item-subject { margin-left: 0; margin-right: 45px; } body.rtl .messages-list .messages-item .messages-item-time { right: auto; left: 15px; } body.rtl .messages-list .messages-item .messages-item-time .messages-item-actions .tag-icon { margin: 0 -13px 0 5px; } body.rtl .messages-content { margin-left: 0; margin-right: 260px; } body.rtl .messages-content .message-header .message-time { right: auto; left: 15px; } body.rtl .messages-content .message-header .message-actions a:first-child { border-bottom-left-radius: 0; border-bottom-right-radius: 4px; border-top-left-radius: 0; border-top-right-radius: 4px; border-right: 1px solid #F5F4F9; } body.rtl .messages-content .message-header .message-actions a:last-child { border-bottom-right-radius: 0; border-bottom-left-radius: 4px; border-right: none; border-top-right-radius: 0; border-top-left-radius: 4px; } /* ---------------------------------------------------------------------- */ /* Lock Screen /* ---------------------------------------------------------------------- */ body.lock-screen { color: #7F7F7F; background-image: url("../images/bg.png"); background-color: rgba(0, 0, 0, 0); } body.rtl.lock-screen .user-info { float: left; } /* ---------------------------------------------------------------------- */ /* Style Selector /* ---------------------------------------------------------------------- */ body.rtl #style_selector { left: 0; right: auto; } body.rtl #style_selector .style-toggle { border: 1px solid rgba(23, 24, 26, 0.15); border-left: none; border-radius: 0 5px 5px 0; } body.rtl #style_selector > .open:before { content: "\e163"; } body.rtl #style_selector > .open { left: auto; right: -35px; } body.rtl #style_selector > .close:before { content: "\e162"; } body.rtl #style_selector > .close { left: 0; right: auto } /* ---------------------------------------------------------------------- */ /* Home elements /* ---------------------------------------------------------------------- */ body.rtl .core-box .heading .circle-icon { float: right; } body.rtl .core-box .heading h2 { padding-left: 0; padding-right: 65px; } body.rtl .core-box .view-more { float: left; } body.rtl .mini-stats li { border-left: 1px solid #DDDDDD; border-right: 1px solid #FFFFFF; } body.rtl .mini-stats li:last-child { border-left: none; } /* ---------------------------------------------------------------------- */ /* User profile /* ---------------------------------------------------------------------- */ body.rtl .user-left { border-right: none; padding-right: 0; border-left: 1px solid #DDDDDD; padding-left: 15px; } /* ---------------------------------------------------------------------- */ /* Main Navigation /* ---------------------------------------------------------------------- */ body.rtl ul.main-navigation-menu > li.active > a .selected:before { left: -10px; right: auto; content: "\e19c"; } body.rtl ul.main-navigation-menu li a .badge { float: left; margin-right: 0; margin-left: 13px; } body.rtl ul.main-navigation-menu li a .icon-arrow { float: left; margin-right: 0; margin-left: 6px; } body.rtl ul.main-navigation-menu li > ul.sub-menu > li > a { padding-left: 0 !important; padding-right: 40px; } body.rtl ul.main-navigation-menu > li > ul.sub-menu > li > ul.sub-menu > li > ul.sub-menu > li > a { padding-left: 0 !important; padding-right: 80px; } body.rtl ul.main-navigation-menu > li > ul.sub-menu li > a .icon-arrow { margin-right: 0; margin-left: 22px; } body.rtl ul.main-navigation-menu > li > ul.sub-menu > li > ul.sub-menu > li > a { padding-right: 60px; padding-left: 0px !important; } body.rtl .navigation-toggler { margin-right: 175px; margin-left: 0; } /* ---------------------------------------------------------------------- */ /* Generic Bootstrap Class and Responsive Class /* ---------------------------------------------------------------------- */ @media (min-width: 980px) and (max-width: 1199px) { body.rtl.layout-boxed > .navbar { right: 50% !important; margin-right: -470px !important; } } @media (min-width: 1200px) { body.rtl.layout-boxed > .navbar { right: 50% !important; margin-right: -500px !important; } } @media (min-width: 768px) and (max-width: 979px) { .main-content { margin-left: 0 !important; margin-right: 35px !important; } body.rtl ul.main-navigation-menu > li > a { padding-left: 0; padding-right: 5px; } body.rtl ul.main-navigation-menu li > ul.sub-menu > li > a { padding-right: 24px !important; padding-left: 0 !important; } body.rtl ul.main-navigation-menu > li > ul.sub-menu > li > ul.sub-menu > li > a { padding-right: 40px !important; padding-left: 0 !important; } body.rtl ul.main-navigation-menu > li > ul.sub-menu > li > ul.sub-menu > li > ul.sub-menu > li > a { padding-right: 60px !important; padding-left: 0 !important; } body.rtl ul.main-navigation-menu > li:hover > a:after { right: 35px; left: 0; background: url(../images/menu-white-arrow-rtl.png) left center no-repeat; } body.rtl ul.main-navigation-menu > li:hover > a .title { padding-left: 0; padding-right: 30px; } body.rtl ul.main-navigation-menu > li:hover > ul.sub-menu { left: 0; right: 36px; } } @media (min-width: 768px) { body.rtl .main-content { margin-left: 0 !important; margin-right: 225px; } body.rtl .navbar > .container > .navbar-header { float: right !important; } body.rtl.navigation-small .main-content { margin-left: 0 !important; margin-right: 35px !important; } body.rtl.navigation-small ul.main-navigation-menu > li > a { padding-left: 0; padding-right: 5px; } body.rtl.navigation-small ul.main-navigation-menu li > ul.sub-menu > li > a { padding-right: 24px !important; padding-left: 0 !important; } body.rtl.navigation-small ul.main-navigation-menu > li > ul.sub-menu > li > ul.sub-menu > li > a { padding-right: 40px !important; padding-left: 0 !important; } body.rtl.navigation-small ul.main-navigation-menu > li > ul.sub-menu > li > ul.sub-menu > li > ul.sub-menu > li > a { padding-right: 60px !important; padding-left: 0 !important; } body.rtl.navigation-small ul.main-navigation-menu > li:hover > a:after { right: 35px; left: 0; background: url(../images/menu-white-arrow-rtl.png) left center no-repeat; } body.rtl.navigation-small ul.main-navigation-menu > li:hover > a .title { padding-left: 0; padding-right: 30px; } body.rtl.navigation-small ul.main-navigation-menu > li:hover > ul.sub-menu { left: 0; right: 36px; } body.rtl .col-sm-1, body.rtl .col-sm-2, body.rtl .col-sm-3, body.rtl .col-sm-4, body.rtl .col-sm-5, body.rtl .col-sm-6, body.rtl .col-sm-7, body.rtl .col-sm-8, body.rtl .col-sm-9, body.rtl .col-sm-10, body.rtl .col-sm-11 { float: right; } body.rtl .col-sm-offset-1 { margin-right: 8.333333333333332%; } body.rtl .col-sm-offset-2 { margin-right: 16.666666666666664%; } body.rtl .col-sm-offset-3 { margin-right: 25%; } body.rtl .col-sm-offset-4 { margin-right: 33.33333333333333%; } body.rtl .col-sm-offset-5 { margin-right: 41.66666666666667%; } body.rtl .col-sm-offset-6 { margin-right: 50%; } body.rtl .col-sm-offset-7 { margin-right: 58.333333333333336%; } body.rtl .col-sm-offset-8 { margin-right: 66.66666666666666%; } body.rtl .col-sm-offset-9 { margin-right: 75%; } body.rtl .col-sm-offset-10 { margin-right: 83.33333333333334%; } body.rtl .col-sm-offset-11 { margin-right: 91.66666666666666%; } } @media (min-width: 992px) { body.rtl .col-md-1, body.rtl .col-md-2, body.rtl .col-md-3, body.rtl .col-md-4, body.rtl .col-md-5, body.rtl .col-md-6, body.rtl .col-md-7, body.rtl .col-md-8, body.rtl .col-md-9, body.rtl .col-md-10, body.rtl .col-md-11 { float: right; } body.rtl .col-md-offset-0 { margin-right: 0; } body.rtl .col-md-offset-1 { margin-right: 8.333333333333332%; } body.rtl .col-md-offset-2 { margin-right: 16.666666666666664%; } body.rtl .col-md-offset-3 { margin-right: 25%; } body.rtl .col-md-offset-4 { margin-right: 33.33333333333333%; } body.rtl .col-md-offset-5 { margin-right: 41.66666666666667%; } body.rtl .col-md-offset-6 { margin-right: 50%; } body.rtl .col-md-offset-7 { margin-right: 58.333333333333336%; } body.rtl .col-md-offset-8 { margin-right: 66.66666666666666%; } body.rtl .col-md-offset-9 { margin-right: 75%; } body.rtl .col-md-offset-10 { margin-right: 83.33333333333334%; } body.rtl .col-md-offset-11 { margin-right: 91.66666666666666%; } } @media (min-width: 1200px) { body.rtl .col-lg-1, body.rtl .col-lg-2, body.rtl .col-lg-3, body.rtl .col-lg-4, body.rtl .col-lg-5, body.rtl .col-lg-6, body.rtl .col-lg-7, body.rtl .col-lg-8, body.rtl .col-lg-9, body.rtl .col-lg-10, body.rtl .col-lg-11 { float: right; } body.rtl .col-lg-offset-0 { margin-right: 0; } body.rtl .col-lg-offset-1 { margin-right: 8.333333333333332%; } body.rtl .col-lg-offset-2 { margin-right: 16.666666666666664%; } body.rtl .col-lg-offset-3 { margin-right: 25%; } body.rtl .col-lg-offset-4 { margin-right: 33.33333333333333%; } body.rtl .col-lg-offset-5 { margin-right: 41.66666666666667%; } body.rtl .col-lg-offset-6 { margin-right: 50%; } body.rtl .col-lg-offset-7 { margin-right: 58.333333333333336%; } body.rtl .col-lg-offset-8 { margin-right: 66.66666666666666%; } body.rtl .col-lg-offset-9 { margin-right: 75%; } body.rtl .col-lg-offset-10 { margin-right: 83.33333333333334%; } body.rtl .col-lg-offset-11 { margin-right: 91.66666666666666%; } } @media (max-width: 767px) { body.rtl .nav > li > .dropdown-menu.notifications { right: -110px !important; left: auto !important; } body.rtl .nav > li > .dropdown-menu.posts { right: -160px !important; left: auto !important; } body.rtl .nav > li > .dropdown-menu.todo { right: -60px !important; left: auto !important; } body.rtl .nav > li.current-user > .dropdown-menu { right: auto !important; left: 0 !important; } body.rtl .navbar > .container > .navbar-header { float: none !important; } body.rtl .navbar-brand { float: right; } body.rtl .navbar-toggle { float: left; } }assets/css/main.css000064400000362125152510437570010316 0ustar00/* ---------------------------------------------------------------------- */ /* Import fonts /* ---------------------------------------------------------------------- */ @import url(http://fonts.googleapis.com/css?family=Open+Sans:400,300,600,700); @import url(http://fonts.googleapis.com/css?family=Raleway:400,300,200,100,500,600,700,800,900); /* ---------------------------------------------------------------------- */ /* Basic Elements & Classes /* ---------------------------------------------------------------------- */ body { color: #000000; direction: ltr; font-family: 'Open+Sans', sans-serif; font-size: 13px; padding: 0px !important; margin: 0px !important; background: #ffffff; } body.bg_style_1 { background: url("../images/bg.png") rgba(0, 0, 0, 0) !important; } body.bg_style_2 { background: url("../images/bg_2.png") rgba(0, 0, 0, 0) !important; } body.bg_style_3 { background: url("../images/bg_3.png") rgba(0, 0, 0, 0) !important; } body.bg_style_4 { background: url("../images/bg_4.png") rgba(0, 0, 0, 0) !important; } body.bg_style_5 { background: url("../images/bg_5.png") rgba(0, 0, 0, 0) !important; } a, a:focus, a:hover, a:active { outline: 0 !important; } h1, h2, h3 { font-family: 'Raleway', sans-serif; } /* ---------------------------------------------------------------------- */ /* Forms /* ---------------------------------------------------------------------- */ textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"] { background-color: #FFFFFF; border: 1px solid #D5D5D5; border-radius: 0 0 0 0 !important; color: #858585; font-family: inherit; font-size: 14px; line-height: 1.2; padding: 5px 4px; transition-duration: 0.1s; box-shadow: none; } textarea:hover, input[type="text"]:hover, input[type="password"]:hover, input[type="datetime"]:hover, input[type="datetime-local"]:hover, input[type="date"]:hover, input[type="month"]:hover, input[type="time"]:hover, input[type="week"]:hover, input[type="number"]:hover, input[type="email"]:hover, input[type="url"]:hover, input[type="search"]:hover, input[type="tel"]:hover, input[type="color"]:hover { border-color: #B5B5B5; } textarea:focus, input[type="text"]:focus, input[type="password"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="date"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="week"]:focus, input[type="number"]:focus, input[type="email"]:focus, input[type="url"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="color"]:focus { border-color: rgba(82, 168, 236, 0.8); box-shadow: 0 0 8px rgba(82, 168, 236, 0.6); outline: 0 none; } label { font-weight: normal; } span.input-icon, span.input-help { display: block; position: relative; } .input-icon > input { padding-left: 25px; padding-right: 6px; } .input-icon.input-icon-right > input { padding-left: 6px; padding-right: 25px; } span.input-help > input { padding-left: 30px; padding-right: 6px; } .input-icon > [class*="fa-"], .input-icon > [class*="clip-"] { bottom: 0; color: #909090; display: inline-block; font-size: 14px; left: 5px; line-height: 35px; padding: 0 3px; position: absolute; top: 0; z-index: 2; } .input-icon.input-icon-right > [class*="fa-"], .input-icon.input-icon-right > [class*="clip-"] { left: auto; right: 4px; } .input-icon > input:focus + [class*="fa-"], .input-icon > input:focus + [class*="clip-"] { color: #557799; } .help-button { background-color: #65BCDA; border-radius: 100% 100% 100% 100%; color: #FFFFFF; cursor: default; position: absolute; font-size: 14px; font-weight: bold; height: 20px; padding: 0; text-align: center; width: 20px; line-height: 20px; top: 7px; left: 7px; } .help-button:before { content: "\f128"; display: inline; font-family: FontAwesome; font-weight: 300; height: auto; text-shadow: none; font-style: normal; } select.form-control { background-color: #FFFFFF; border: 1px solid #D5D5D5; border-radius: 0 0 0 0; color: #858585; } select.form-control option { padding: 3px 4px; } .form-control.search-select { padding: 0 !important; box-shadow: none; border: none; } .select2-container .select2-choice { background-clip: padding-box !important; background-color: #FFFFFF !important; background-image: none !important; background-repeat: no-repeat !important; border: 1px solid #CCCCCC !important; border-radius: 0 !important; box-shadow: none !important; color: #555555 !important; display: block !important; height: 34px !important; line-height: 29px !important; margin-top: 3px !important; overflow: hidden !important; padding: 0 12px 0 8px !important; position: relative !important; text-decoration: none !important; white-space: nowrap !important; } .select2-container .select2-choice .select2-arrow { background-image: none !important; background-color: #FFFFFF !important; width: 28px !important; text-align: center; } .select2-container .select2-choice .select2-arrow b { background: none !important; display: block; height: 100%; width: 100%; } .select2-container .select2-choice .select2-arrow b:before { content: "\f078"; display: inline; font-family: FontAwesome; font-weight: 300; height: auto; text-shadow: none; } .select2-dropdown-open.select2-container-active .select2-choice .select2-arrow b:before { content: "\f077"; } .select2-container-multi .select2-choices { background-image: none !important; background-color: #FFFFFF !important; } .limiterBox { border-top: 0; background-color: #65BCDA !important; padding: 3px 6px; font-size: 12px; color: #FFF; margin-top: 6px } .limiterBox:after { display: none } .limiterBox:before { display: block; content: ""; position: absolute; width: 0; height: 0; top: -8px; left: 50%; margin-left: -5px; border-color: transparent; border-style: solid; border-bottom-color: #65BCDA; border-width: 0 8px 8px } textarea.autosize { vertical-align: top; transition: height 0.2s; -webkit-transition: height 0.2s; -moz-transition: height 0.2s; } .radio label.radio-inline, .checkbox label.checkbox-inline { display: inline-block; } .radio-inline, .radio-inline + .radio-inline, .checkbox-inline, .checkbox-inline + .checkbox-inline { margin-right: 10px !important; margin-top: 5px !important; margin-left: 0 !important; margin-bottom: 10px !important; } .radio label, .checkbox label { margin-bottom: 5px; } .checkbox-table { display: inline-block; margin: 2px 0 0 0; padding-left: 20px; line-height: 10px; } .checkbox-table label { margin-bottom: 0; } [class^="icheckbox_"], [class*="icheckbox_"], [class^="iradio_"], [class*="iradio_"] { float: left !important; margin: 0 5px 0 -20px !important; } .help-inline { margin-top: 6px; color: #737373; } .help-block.error { color: #B94A48; } .symbol.required:before { content: "*"; display: inline; color: #E6674A; } .symbol.ok:before { content: "\f00c"; display: inline; font-family: FontAwesome; color: #468847; } .has-error .note-editor, .has-error .cke_chrome { border-color: #B94A48 !important; } .form-group .text { display: block; font-size: 14px; font-weight: 400; margin-top: 7px; } /* ---------------------------------------------------------------------- */ /* Generic Classes /* ---------------------------------------------------------------------- */ .no-padding { padding: 0 !important; } .no-display { display: none; } .example { margin: 15px 0; padding: 14px 19px; } .widget { -moz-box-sizing: content-box; color: #333; margin-bottom: 30px; padding: 10px 12px; position: relative; } .space5 { display: block; margin-bottom: 5px !important; clear: both; } .space7 { margin-bottom: 7px !important; clear: both; } .space10 { margin-bottom: 10px !important; clear: both; } .space12 { margin-bottom: 12px !important; clear: both; } .space15 { margin-bottom: 15px !important; clear: both; } .space20 { margin-bottom: 20px !important; clear: both; } .teal { color: #569099; } a.teal:hover { color: #4d8189; } .orange { color: #E6674A; } a.orange:hover { color: #E35434; } .bricky { color: #C83A2A; } a.bricky:hover { color: #B33426; } .circle-img { border-radius: 100% 100% 100% 100%; } .center { text-align: center; } .go-top { cursor: pointer; display: block; width: 30px; height: 30px; font-size: 16px; margin-bottom: 0; margin-right: 0; margin-top: -2px; text-decoration: none; line-height: 30px; text-align: center; } /* ---------------------------------------------------------------------- */ /* Navbar and navbar elements /* ---------------------------------------------------------------------- */ .navbar { margin: 0 !important; padding: 0 !important; min-height: 42px; border-radius: 0; border-right: none; border-left: none; border-top: none; background: none; border-color: #ffffff; } .header-default .navbar { position: relative !important; } .navbar > .container .navbar-brand, .logo { padding: 14px 10px 12px; margin-left: 0; font-family: 'Raleway', sans-serif; font-size: 25px; min-width: 210px; } .navbar > .container .navbar-brand i, .logo i { font-size: 20px; } .navbar-tools > ul { list-style: none; } .navbar-tools > ul > li > a { padding: 15px 15px 9px; font-size: 16px; line-height: 26px; } .navbar-tools li.view-all a { padding: 8px 8px 6px !important; } .navbar-tools > ul > li { float: left; } .navbar-tools .dropdown-menu { background: none repeat scroll 0 0 white; border: 1px solid #C7CBD5; border-radius: 0 0 4px 4px; box-shadow: none; list-style: none outside none; margin: 0; max-width: 300px; min-width: 166px; padding: 0; position: absolute; text-shadow: none; top: 100%; z-index: 1000; } .navbar-tools .drop-down-wrapper { height: 250px; width: 270px; overflow: hidden; position: relative; } .navbar-tools .drop-down-wrapper ul { list-style: none; margin: 0; padding: 0; } ul.notifications li, ul.todo li, ul.posts li { min-width: 260px; } .navbar-tools > ul > li.dropdown { margin-left: 2px; margin-right: 2px; } .navbar-tools .dropdown-menu > li > a:hover, .navbar-tools .dropdown-menu > li > a:focus, .navbar-tools .dropdown-submenu:hover > a, .navbar-tools .dropdown-submenu:focus > a, .navbar-tools .drop-down-wrapper li a:hover, .navbar-tools .drop-down-wrapper li a:focus { background-color: #F4F6F9 !important; background-image: none; filter: none; color: #000; text-decoration: none; } .drop-down-wrapper ul > li:last-child a { border-bottom: none; } .navbar-tools .dropdown-menu li .dropdown-menu-title { display: block; font-weight: bold; margin: -1px; padding: 5px 10px; } .navbar-tools .dropdown-menu li p, .navbar-tools .dropdown-menu li a, .navbar-tools .drop-down-wrapper li p, .navbar-tools .drop-down-wrapper li a { color: #333333; font-size: 12px; font-weight: 300; margin: 0; padding: 8px 8px 6px; border-bottom: 1px solid rgba(100, 100, 100, 0.22); white-space: normal !important; display: block; } .navbar-tools .dropdown-menu > li:last-child a { border-bottom: none !important; border-radius: 0 0 6px 6px; } li.dropdown.current-user .dropdown-toggle { padding: 10px 4px 7px 9px; } li.dropdown.current-user .dropdown-menu li a { border-bottom: none !important; } .navbar-tools .dropdown-menu li p { font-weight: bold; } .navbar-tools .dropdown-menu li a .author { color: #0362FD; display: block; } .navbar-tools .dropdown-menu li a .preview { display: block; } .navbar-tools .dropdown-menu li a .time { font-size: 12px; font-style: italic; font-weight: 600; display: block; float: right; } .navbar-tools .dropdown-menu li.view-all a i { float: right; margin-top: 4px; } .navbar-tools .dropdown-menu.notifications li > a > .label { margin-right: 2px; padding: 2px 4px; text-align: center !important; } .navbar-tools .thread-image { margin-right: 8px; float: left; height: 50px; width: 50px; } .navbar-tools > ul > li.dropdown .dropdown-toggle .badge { border-radius: 12px 12px 12px 12px !important; font-size: 11px !important; font-weight: 300; padding: 3px 6px; position: absolute; right: 24px; text-align: center; text-shadow: none !important; top: 8px; } .navbar-toggle { border: none; border-radius: 0; margin-top: 5px; margin-bottom: 4px; } .navbar-toggle span { font-size: 16px; } /* ---------------------------------------------------------------------- */ /* Search Box /* ---------------------------------------------------------------------- */ .search-box:before { content: " " !important; } .search-box { float: right; } .sidebar-search { margin: -3px 0 0 0; padding: 0 30px 0 5px; display: inline-block; background: #E4E5E6; border-radius: 5px; color: #555555; position: absolute; right: 10px; top: 15px; min-height: 28px; min-width: 28px; } .sidebar-search .form-group { margin: 0; padding: 0; } .sidebar-search .form-group input { background: none; border: none; width: 130px; } .sidebar-search .form-group input:focus { box-shadow: none; } .sidebar-search .form-group button { background: none; border: none; position: absolute; right: 4px; top: 5px; width: 28px; } .sidebar-search .form-group button i { color: #999999; } .search-box .show-search { position: absolute; right: 15px; top: 12px; background: #D9D9D9; padding: 4px 10px; border-radius: 5px; } .search-box .show-search:hover { text-decoration: none; } .search-box .show-search i { color: #999999; } /* ---------------------------------------------------------------------- */ /* Buttons /* ---------------------------------------------------------------------- */ .btn { font-family: 'Open Sans'; } .btn-teal { background-color: #569099; border-color: #4d8189; color: #ffffff; } .btn-teal:hover, .btn-teal:focus, .btn-teal:active, .btn-teal.active { background-color: #4d8189; border-color: #447178; color: #ffffff; } .btn-teal.disabled:hover, .btn-teal.disabled:focus, .btn-teal.disabled:active, .btn-teal.disabled.active, .btn-teal[disabled]:hover, .btn-teal[disabled]:focus, .btn-teal[disabled]:active, .btn-teal[disabled].active, fieldset[disabled] .btn-teal:hover, fieldset[disabled] .btn-teal:focus, fieldset[disabled] .btn-teal:active, fieldset[disabled] .btn-teal.active { background-color: #569099; border-color: #569099; color: #ffffff; } .btn-beige { background-color: #cc9; border-color: #c4c488; color: #ffffff; } .btn-beige:hover, .btn-beige:focus, .btn-beige:active, .btn-beige.active { background-color: #c4c488; border-color: #bbbb77; color: #ffffff; } .btn-beige.disabled:hover, .btn-beige.disabled:focus, .btn-beige.disabled:active, .btn-beige.disabled.active, .btn-beige[disabled]:hover, .btn-beige[disabled]:focus, .btn-beige[disabled]:active, .btn-beige[disabled].active, fieldset[disabled] .btn-beige:hover, fieldset[disabled] .btn-beige:focus, fieldset[disabled] .btn-beige:active, fieldset[disabled] .btn-beige.active { background-color: #cc9; border-color: #cc9; color: #ffffff; } .btn-dark-beige { background-color: #afaa6d; border-color: #a6a05d; color: #ffffff; } .btn-dark-beige:hover, .btn-dark-beige:focus, .btn-dark-beige:active, .btn-dark-beige.active { background-color: #a6a05d; border-color: #979152; color: #ffffff; } .btn-dark-beige.disabled:hover, .btn-dark-beige.disabled:focus, .btn-dark-beige.disabled:active, .btn-dark-beige.disabled.active, .btn-dark-beige[disabled]:hover, .btn-dark-beige[disabled]:focus, .btn-dark-beige[disabled]:active, .btn-dark-beige[disabled].active, fieldset[disabled] .btn-dark-beige:hover, fieldset[disabled] .btn-dark-beige:focus, fieldset[disabled] .btn-dark-beige:active, fieldset[disabled] .btn-dark-beige.active { background-color: #afaa6d; border-color: #afaa6d; color: #ffffff; } .btn-orange { background-color: #e6674a; border-color: #e35434; color: #ffffff; } .btn-orange:hover, .btn-orange:focus, .btn-orange:active, .btn-orange.active { background-color: #e35434; border-color: #de421f; color: #ffffff; } .btn-orange.disabled:hover, .btn-orange.disabled:focus, .btn-orange.disabled:active, .btn-orange.disabled.active, .btn-orange[disabled]:hover, .btn-orange[disabled]:focus, .btn-orange[disabled]:active, .btn-orange[disabled].active, fieldset[disabled] .btn-orange:hover, fieldset[disabled] .btn-orange:focus, fieldset[disabled] .btn-orange:active, fieldset[disabled] .btn-orange.active { background-color: #e6674a; border-color: #e6674a; color: #ffffff; } .btn-purple { background-color: #57517b; border-color: #413d5c; color: #ffffff; } .btn-purple:hover, .btn-purple:focus, .btn-purple:active, .btn-purple.active { background-color: #4c476c; border-color: #413d5c; color: #ffffff; } .btn-purple.disabled:hover, .btn-purple.disabled:focus, .btn-purple.disabled:active, .btn-purple.disabled.active, .btn-purple[disabled]:hover, .btn-purple[disabled]:focus, .btn-purple[disabled]:active, .btn-purple[disabled].active, fieldset[disabled] .btn-purple:hover, fieldset[disabled] .btn-purple:focus, fieldset[disabled] .btn-purple:active, fieldset[disabled] .btn-purple.active { background-color: #57517b; border-color: #333; color: #ffffff; } .btn-dark-grey { background-color: #333; border-color: #333; color: #ffffff; } .btn-dark-grey:hover, .btn-dark-grey:focus, .btn-dark-grey:active, .btn-dark-grey.active { background-color: #262626; border-color: #1a1a1a; color: #ffffff; } .btn-dark-grey.disabled:hover, .btn-dark-grey.disabled:focus, .btn-dark-grey.disabled:active, .btn-dark-grey.disabled.active, .btn-dark-grey[disabled]:hover, .btn-dark-grey[disabled]:focus, .btn-dark-grey[disabled]:active, .btn-dark-grey[disabled].active, fieldset[disabled] .btn-dark-grey:hover, fieldset[disabled] .btn-dark-grey:focus, fieldset[disabled] .btn-dark-grey:active, fieldset[disabled] .btn-dark-grey.active { background-color: #333; border-color: #333; color: #ffffff; } .btn-med-grey { background-color: #666; border-color: #595959; color: #ffffff; } .btn-med-grey:hover, .btn-med-grey:focus, .btn-med-grey:active, .btn-med-grey.active { background-color: #595959; border-color: #4d4d4d; color: #ffffff; } .btn-med-grey.disabled:hover, .btn-med-grey.disabled:focus, .btn-med-grey.disabled:active, .btn-med-grey.disabled.active, .btn-med-grey[disabled]:hover, .btn-med-grey[disabled]:focus, .btn-med-grey[disabled]:active, .btn-med-grey[disabled].active, fieldset[disabled] .btn-med-grey:hover, fieldset[disabled] .btn-med-grey:focus, fieldset[disabled] .btn-med-grey:active, fieldset[disabled] .btn-med-grey.active { background-color: #666; border-color: #666; color: #ffffff; } .btn-light-grey { background-color: #999; border-color: #8c8c8c; color: #ffffff; } .btn-light-grey:hover, .btn-light-grey:focus, .btn-light-grey:active, .btn-light-grey.active { background-color: #8c8c8c; border-color: #808080; color: #ffffff; } .btn-light-grey.disabled:hover, .btn-light-grey.disabled:focus, .btn-light-grey.disabled:active, .btn-light-grey.disabled.active, .btn-light-grey[disabled]:hover, .btn-light-grey[disabled]:focus, .btn-light-grey[disabled]:active, .btn-light-grey[disabled].active, fieldset[disabled] .btn-light-grey:hover, fieldset[disabled] .btn-light-grey:focus, fieldset[disabled] .btn-light-grey:active, fieldset[disabled] .btn-light-grey.active { background-color: #999; border-color: #999; color: #ffffff; } .btn-bricky { background-color: #C83A2A; border-color: #b33426; color: #ffffff; } .btn-bricky:hover, .btn-bricky:focus, .btn-bricky:active, .btn-bricky.active { background-color: #b33426; border-color: #9e2e21; color: #ffffff; } .btn-bricky.disabled:hover, .btn-bricky.disabled:focus, .btn-bricky.disabled:active, .btn-bricky.disabled.active, .btn-bricky[disabled]:hover, .btn-bricky[disabled]:focus, .btn-bricky[disabled]:active, .btn-bricky[disabled].active, fieldset[disabled] .btn-bricky:hover, fieldset[disabled] .btn-bricky:focus, fieldset[disabled] .btn-bricky:active, fieldset[disabled] .btn-bricky.active { background-color: #C83A2A; border-color: #C83A2A; color: #ffffff; } .btn-green { background-color: #3D9400; border-color: #327b00; color: #ffffff; } .btn-green:hover, .btn-green:focus, .btn-green:active, .btn-green.active { background-color: #327b00; border-color: #286100; color: #ffffff; } .btn-green.disabled:hover, .btn-green.disabled:focus, .btn-green.disabled:active, .btn-green.disabled.active, .btn-green[disabled]:hover, .btn-green[disabled]:focus, .btn-green[disabled]:active, .btn-green[disabled].active, fieldset[disabled] .btn-green:hover, fieldset[disabled] .btn-green:focus, fieldset[disabled] .btn-green:active, fieldset[disabled] .btn-green.active { background-color: #3D9400; border-color: #3D9400; color: #ffffff; } .btn-blue { background-color: #364F6A; border-color: #2d4259; color: #ffffff; } .btn-blue:hover, .btn-blue:focus, .btn-blue:active, .btn-blue.active { background-color: #2d4259; border-color: #253648; color: #ffffff; } .btn-blue.disabled:hover, .btn-blue.disabled:focus, .btn-blue.disabled:active, .btn-blue.disabled.active, .btn-blue[disabled]:hover, .btn-blue[disabled]:focus, .btn-blue[disabled]:active, .btn-blue[disabled].active, fieldset[disabled] .btn-blue:hover, fieldset[disabled] .btn-blue:focus, fieldset[disabled] .btn-blue:active, fieldset[disabled] .btn-blue.active { background-color: #364F6A; border-color: #364F6A; color: #ffffff; } .btn-yellow { background-color: #FFB848; border-color: #ffae2f; color: #ffffff; } .btn-yellow:hover, .btn-yellow:focus, .btn-yellow:active, .btn-yellow.active { background-color: #ffae2f; border-color: #ffa415; color: #ffffff; } .btn-yellow.disabled:hover, .btn-yellow.disabled:focus, .btn-yellow.disabled:active, .btn-yellow.disabled.active, .btn-yellow[disabled]:hover, .btn-yellow[disabled]:focus, .btn-yellow[disabled]:active, .btn-yellow[disabled].active, fieldset[disabled] .btn-yellow:hover, fieldset[disabled] .btn-yellow:focus, fieldset[disabled] .btn-yellow:active, fieldset[disabled] .btn-yellow.active { background-color: #FFB848; border-color: #FFB848; color: #ffffff; } .btn-red { background-color: #E02222; border-color: #cc1d1d; color: #ffffff; } .btn-red:hover, .btn-red:focus, .btn-red:active, .btn-red.active { background-color: #cc1d1d; border-color: #b61919; color: #ffffff; } .btn-red.disabled:hover, .btn-red.disabled:focus, .btn-red.disabled:active, .btn-red.disabled.active, .btn-red[disabled]:hover, .btn-red[disabled]:focus, .btn-red[disabled]:active, .btn-red[disabled].active, fieldset[disabled] .btn-red:hover, fieldset[disabled] .btn-red:focus, fieldset[disabled] .btn-red:active, fieldset[disabled] .btn-red.active { background-color: #E02222; border-color: #E02222; color: #ffffff; } .btn-teal .caret, .btn-beige .caret, .btn-dark-beige .caret, .btn-orange .caret, .btn-purple .caret, .btn-dark-grey .caret, .btn-med-grey .caret, .btn-light-grey .caret, .btn-bricky .caret, .btn-green .caret, .btn-blue .caret, .btn-yellow .caret, .btn-red .caret { border-top-color: #ffffff; } .dropup .btn-teal .caret, .dropup .btn-beige .caret, .dropup .btn-dark-beige .caret, .dropup .btn-orange .caret, .dropup .btn-purple .caret, .dropup .btn-dark-grey .caret, .dropup .btn-med-grey .caret, .dropup .btn-light-grey .caret, .dropup .btn-bricky .caret, .dropup .btn-green .caret, .dropup .btn-blue .caret, .dropup .btn-yellow .caret, .dropup .btn-red .caret { border-bottom: 4px solid #FFFFFF; } .btn-squared { border-radius: 0 !important; } .btn { transition: all 0.3s ease 0s !important; } .btn-icon { background-color: #EFEFEF; background-image: -moz-linear-gradient(center top , #FAFAFA, #EFEFEF); border: 1px solid #DDDDDD; border-radius: 2px 2px 2px 2px; box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); cursor: pointer; height: 80px; display: block; font-size: 14px; margin-bottom: 15px; margin-top: 15px; padding: 5px 0 0; position: relative; text-align: center; transition: all 0.3s ease 0s; color: #333333; } .btn-icon:hover { border-color: #A5A5A5; box-shadow: 0 0 3px rgba(0, 0, 0, 0.25); color: #444444; text-decoration: none; text-shadow: 0 1px 0 #FFFFFF; } .btn-icon .badge { border-radius: 12px 12px 12px 12px !important; border-style: solid; border-width: 0; box-shadow: none; color: #FFFFFF !important; font-family: 'Open Sans'; font-size: 11px !important; font-weight: 300; padding: 3px 7px; position: absolute; right: -5px; text-shadow: none; top: -5px; } .btn-icon [class^="fa-"], .btn-icon [class*=" fa-"], .btn-icon [class^="clip-"], .btn-icon [class*=" clip-"] { clear: both; display: block; } .buttons-widget .btn, .buttons-widget .make-switch { margin-bottom: 5px; } .buttons-widget .btn-group-vertical .btn { margin-bottom: 0; } /* ---------------------------------------------------------------------- */ /* Panel Tools /* ---------------------------------------------------------------------- */ .panel-tools { position: absolute; right: 5px; top: 8px; } .panel-tools .btn-link { color: #0480BE; } .panel-tools .btn-link:hover { color: #036392; } .panel-tools .btn-link { color: #57A957; } .panel-tools .btn-link:hover { color: #417E41; } .panel-tools .btn-link { color: #C43C35; } .panel-tools .btn-link:hover { color: #972E28; } .panel-tools .btn-link { color: #333333; } .panel-tools .btn-link:hover { color: #000000; } .panel-tools .btn-link:focus, .panel-tools .btn-link:hover, .panel-tools .btn-link:active { text-decoration: none; outline: 0 !important; } .panel-tools .btn.expand:before { content: "\f077"; display: inline; float: right; font-family: FontAwesome; font-weight: 300; height: auto; text-shadow: none; } .panel-tools .btn.collapses:before { content: "\f078"; display: inline; float: right; font-family: FontAwesome; font-weight: 300; height: auto; text-shadow: none; } .panel-tools .btn { border-style: none; } .panel-tools .btn-link { color: #666666; } .panel-tools .btn-link:hover { color: #333333; } /* ---------------------------------------------------------------------- */ /* Panels and panel elements /* ---------------------------------------------------------------------- */ .panel-heading { background-color: #F5F4F9; background-image: linear-gradient(to bottom, #F5F4F9 0%, #ECEAF3 100%); background-repeat: repeat-x; border-bottom: 1px solid #CDCDCD; border-radius: 6px 6px 0 0; box-shadow: 0 1px 0 #FFFFFF inset; height: 36px; padding-left: 40px; position: relative; } .panel-heading > [class^="fa-"], .panel-heading > [class*=" fa-"], .panel-heading > [class^="icon-"], .panel-heading > [class*=" icon-"], .panel-heading > [class^="clip-"], .panel-heading > [class*=" clip-"] { border-right: 1px solid #CDCDCD; box-shadow: 1px 0 0 0 #FFFFFF; opacity: 0.7; padding: 12px 10px 8px; position: absolute; left: 0; top: 0; height: 36px; } .panel-white { box-shadow: none; } .panel-white .panel-heading { background-color: #ffffff; background-image: none; border-bottom: 1px solid #CDCDCD; border-radius: 6px 6px 0 0; box-shadow: none; height: 36px; padding-left: 40px; position: relative; } .panel-white .panel-heading > [class^="fa-"], .panel-white .panel-heading > [class*=" fa-"], .panel-white .panel-heading > [class^="icon-"], .panel-white .panel-heading > [class*=" icon-"], .panel-white .panel-heading > [class^="clip-"], .panel-white .panel-heading > [class*=" clip-"] { border-right: 1px solid #CDCDCD; box-shadow: none; opacity: 0.7; padding: 12px 10px 8px; position: absolute; left: 0; top: 0; height: 36px; } .panel-box { background: #FAFAFA; border: 1px solid #CDCDCD; border-radius: 6px 6px 6px 6px; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); clear: both; margin-bottom: 16px; margin-top: 16px; position: relative; } .panel.panel-full-screen { height: 100%; left: 0; position: fixed; top: 0; width: 100%; z-index: 9998; } .panel-scroll { position: relative; margin: 10px; padding: 0px; width: auto; height: 400px; overflow: hidden; } /* ---------------------------------------------------------------------- */ /* Pagination /* ---------------------------------------------------------------------- */ .pagination li a { cursor: pointer; } .pagination.squared { border-radius: 0 !important; } .pagination.squared li:first-child a, .pagination.squared li:first-child > span { border-bottom-left-radius: 0px !important; border-left-width: 1px; border-top-left-radius: 0px !important; } .pagination.squared li:last-child > a, .pagination.squared li:last-child > span { border-bottom-right-radius: 0px !important; border-top-right-radius: 0px !important; } .pagination.pagination-purple li a, .pagination-purple .pagination li a { background: #F5F4F9; border: none !important; color: #333333; display: inline-block; margin-right: 1px; } .pagination.pagination-purple li a:hover, .pagination-purple .pagination li a a:hover { background: #ECEAF3; color: #222222; cursor: pointer; } .pagination.pagination-purple li:first-child a, .pagination-purple .pagination li:first-child a { border: none !important; } .pagination.pagination-purple li.disabled a, .pagination-purple .pagination li.disabled a { color: #AAAAAA !important; } .pagination.pagination-purple li.disabled a:hover, .pagination-purple .pagination li.disabled a:hover, .pagination.pagination-purple li.disabled a:focus, .pagination-purple .pagination li.disabled a:focus { background: #F5F4F9; cursor: default !important; } .pagination.pagination-purple li.active a, .pagination-purple .pagination li.active a { background: #57517B !important; border: none !important; color: #FFFFFF !important; cursor: default !important; opacity: 1; } .pagination-purple [class^="fa-"], .pagination-purple [class*=" fa-"] { color: #57517B; } .pagination-purple li.disabled [class^="fa-"], .pagination-purple li.disabled [class*=" fa-"] { opacity: 0.5; } .pagination.pagination-teal li a, .pagination-teal .pagination li a { background: #F3F8F8; border: none !important; color: #333333; display: inline-block; margin-right: 1px; } .pagination.pagination-teal li a:hover, .pagination-teal .pagination li a a:hover { background: #D8E4E7; color: #222222; cursor: pointer; } .pagination.pagination-teal li:first-child a, .pagination-teal .pagination li:first-child a { border: none !important; } .pagination.pagination-teal li.disabled a, .pagination-teal .pagination li.disabled a { color: #AAAAAA !important; } .pagination.pagination-teal li.disabled a:hover, .pagination-teal .pagination li.disabled a:hover, .pagination.pagination-teal li.disabled a:focus, .pagination-teal .pagination li.disabled a:focus { background: #F3F8F8; cursor: default !important; } .pagination.pagination-teal li.active a, .pagination-teal .pagination li.active a { background: #569099 !important; border: none !important; color: #FFFFFF !important; cursor: default !important; opacity: 1; } .pagination-teal li [class^="fa-"], .pagination-teal li [class*=" fa-"] { color: #4D8189; } .pagination-teal li.disabled [class^="fa-"], .pagination-teal li.disabled [class*=" fa-"] { opacity: 0.5; } .pagination.pagination-green li a, .pagination-green .pagination li a { background: #EFFBEC; border: none !important; color: #333333; display: inline-block; margin-right: 1px; } .pagination.pagination-green li a:hover, .pagination-green .pagination li a a:hover { background: #CEF3C5; color: #222222; cursor: pointer; } .pagination.pagination-green li:first-child a, .pagination-green .pagination li:first-child a { border: none !important; } .pagination.pagination-green li.disabled a, .pagination-green .pagination li.disabled a,{ color: #AAAAAA !important; } .pagination.pagination-green li.disabled a:hover, .pagination-green .pagination li.disabled a:hover, .pagination.pagination-green li.disabled a:focus, .pagination-green .pagination li.disabled a:focus { background: #EFFBEC; cursor: default !important; } .pagination.pagination-green li.active a, .pagination-green .pagination li.active a { background: #3D9400 !important; border: none !important; color: #FFFFFF !important; cursor: default !important; opacity: 1; } .pagination-green [class^="fa-"], .pagination-green [class*=" fa-"] { color: #327B00; } .pagination-green li.disabled [class^="fa-"], .pagination-green li.disabled [class*=" fa-"] { opacity: 0.5; } .pagination.pagination-bricky li a { background: #FDF8F7; border: none !important; color: #333333; display: inline-block; margin-right: 0; } .pagination.pagination-bricky li a:hover { background: #FBEEEC; color: #222222; cursor: pointer; } .pagination.pagination-bricky li a { margin-right: 1px; } .pagination.pagination-bricky li:first-child a { border: none !important; } .pagination.pagination-bricky li.disabled a { color: #AAAAAA !important; } .pagination.pagination-bricky li.disabled a:hover, .pagination-bricky .pagination li.disabled a:hover, .pagination.pagination-bricky li.disabled a:focus, .pagination-bricky .pagination li.disabled a:focus { background: #FDF8F7; cursor: default !important; } .pagination.pagination-bricky li.active a { background: #C83A2A !important; border: none !important; color: #FFFFFF !important; cursor: default !important; opacity: 1; } .pagination.pagination-bricky [class^="fa-"], .pagination.pagination-bricky [class*=" fa-"] { color: #C83A2A; } .pagination.pagination-bricky li.disabled [class^="fa-"], .pagination.pagination-bricky li.disabled [class*=" fa-"] { opacity: 0.5; } /* ---------------------------------------------------------------------- */ /* ToDo List /* ---------------------------------------------------------------------- */ .todo { list-style: none; margin: 0; padding: 0; } .todo li a { background: white; border-bottom: 1px solid #E4E6EB; font-size: 12px; margin-left: 0 !important; padding: 10px 10px 10px 35px !important; position: relative; display: block; color: #333333; } .todo li .todo-actions:hover, .todo li .todo-actions:focus { text-decoration: none; background-color: #F4F6F9 !important; } .todo li .todo-actions i { color: #C7CBD5; font-size: 18px; margin: 0 5px 0 0; position: absolute; left: 10px; } .todo li .label { position: absolute; right: 10px; padding: 6px; } /* ---------------------------------------------------------------------- */ /* Activities /* ---------------------------------------------------------------------- */ .activities { list-style: none outside none; margin: 0; padding: 0; } .activities li a { background: white; border-bottom: 1px solid #E4E6EB; font-size: 12px; margin-left: 0 !important; padding: 10px 100px 10px 10px !important; position: relative; display: block; color: #333333; } .activities li .activity:hover, .activities li .activity:focus { text-decoration: none; background-color: #F4F6F9 !important; } .activities li .activity .circle-icon { font-size: 16px !important; width: 50px; height: 50px; line-height: 50px; margin-right: 10px; } .activities li .activity img { margin-right: 10px; } .activities li .time { position: absolute; right: 10px; top: 30px; color: #CCCCCC; } /* ---------------------------------------------------------------------- */ /* Main Container and main content elements /* ---------------------------------------------------------------------- */ .main-container { margin-top: 48px; } .page-full-width .main-container { margin-top: 98px; } .header-default .main-container { margin-top: 0 !important; } .main-content { margin-top: 0; background-color: #FFFFFF; padding: 0; } .container { max-width: none !important; width: auto !important; } .footer-fixed .main-content .container { margin-bottom: 22px; } /* ---------------------------------------------------------------------- */ /* Main Navigation /* ---------------------------------------------------------------------- */ .main-navigation { padding: 0; max-height: none !important; z-index: 1000; } ul.main-navigation-menu { list-style: none; margin: 0; padding: 0; } .sidebar-fixed .wrap-menu { overflow: hidden; position: fixed; width: 225px; height: 300px; } ul.main-navigation-menu > li { border: 0 none; display: block; margin: 0; padding: 0; } ul.main-navigation-menu > li > a { border: 0 none; display: block; font-size: 14px; font-weight: 300; margin: 0; padding: 10px 15px; position: relative; text-decoration: none; border-bottom: 1px solid #DDDDDD; border-top: 1px solid #FFFFFF; } ul.main-navigation-menu li a .badge { float: right; margin-right: 13px; margin-top: 1px; } ul.main-navigation-menu > li:last-child > a, ul.main-navigation-menu > li.last > a { border-bottom-color: transparent !important; } ul.main-navigation-menu > li > a i { font-size: 16px; margin-right: 5px; text-shadow: none; display: inline-block; } ul.main-navigation-menu li a .icon-arrow { float: right; margin-right: 6px; } ul.main-navigation-menu li > a > .icon-arrow:before { content: "\e163"; font-family: "clip-font"; } ul.main-navigation-menu li.open > a > .icon-arrow:before { content: "\e164"; } ul.main-navigation-menu > li > a:hover .icon-arrow, ul.main-navigation-menu > li.open > a .icon-arrow { opacity: 1; } /* 2nd level sub menu */ ul.main-navigation-menu li > ul.sub-menu { clear: both; list-style: none; margin: 8px 0; display: none; padding: 0; } ul.main-navigation-menu li > ul.sub-menu > li { background: none; margin-bottom: 0; margin-left: 0; margin-right: 0; margin-top: 1px !important; padding: 0; } ul.main-navigation-menu li > ul.sub-menu > li > a { background: none; display: block; font-size: 14px; font-weight: 300; margin: 0; padding-bottom: 5px; padding-left: 40px !important; padding-right: 0; padding-top: 5px; text-decoration: none; } ul.main-navigation-menu > li > ul.sub-menu li > a .icon-arrow { margin-right: 22px; } /* 3rd level sub menu */ ul.main-navigation-menu > li > ul.sub-menu li > ul.sub-menu { margin: 0; } ul.main-navigation-menu li.active > ul.sub-menu { display: block; padding: 0; } ul.main-navigation-menu > li > ul.sub-menu > li > ul.sub-menu > li > a { padding-left: 60px !important; } ul.main-navigation-menu > li > ul.sub-menu > li > ul.sub-menu > li > ul.sub-menu > li > a { padding-left: 80px !important; } /*navigation toggler*/ .navigation-toggler { cursor: pointer; height: 30px; margin-left: 175px; margin-top: 10px; margin-bottom: 10px; width: 30px; line-height: 30px; text-align: center; } /*horizontal menu*/ .horizontal-menu { clear: both; border-top: 1px solid #C8C7CC !important; margin-left: -15px !important; margin-right: -15px !important; padding: 0 15px !important; background: #FFFFFF; } .horizontal-menu ul.nav li.open > a, .horizontal-menu ul.nav li > a:hover, .horizontal-menu ul.nav li > a:focus { background: #F5F5F5 !important; color: #555555 !important; } .horizontal-menu .dropdown-menu li:hover > a, .horizontal-menu ul.nav li.active > a, .horizontal-menu ul.nav li.active > a:hover { background: #007AFF !important; color: #FFFFFF !important; } .horizontal-menu ul.nav li.current .selected, .horizontal-menu ul.nav li.active .selected { border-left: 6px solid rgba(0, 0, 0, 0); border-right: 6px solid rgba(0, 0, 0, 0); border-top: 6px solid #007AFF; bottom: 0; display: inline-block; height: 0; left: 50%; margin: 0 0 -6px -7px; position: absolute; width: 0; } .horizontal-menu .dropdown-menu { box-shadow: none; margin-top: -1px !important; border-radius: 0; } .horizontal-menu .dropdown-submenu > .dropdown-menu { top: 0; } .horizontal-menu .dropdown-submenu > a:after { margin-right: 0; top: 8px; } .horizontal-menu .dropdown-menu li > a { margin-bottom: 1px; padding: 7px 18px !important; } .horizontal-menu .dropdown-menu .arrow { display: none; } .horizontal-menu .dropdown-submenu > .dropdown-menu { top: 0; } .horizontal-menu .dropdown-submenu > a:after { margin-right: 0; top: 8px; } .horizontal-menu ul.nav li { position: relative; } .horizontal-menu .dropdown-submenu > a:after { content: "\f105"; display: inline-block; font-family: FontAwesome; font-size: 14px; font-weight: 300; height: auto; position: absolute; right: 10px; top: 7px; } .horizontal-menu .dropdown-submenu > .dropdown-menu { left: 100%; margin-left: 0; margin-top: -6px; top: 5px; } .horizontal-menu .dropdown-submenu:hover > .dropdown-menu { display: block; } .horizontal-menu .dropup .dropdown-submenu > .dropdown-menu { bottom: 0; margin-bottom: -2px; margin-top: 0; top: auto; } /* ---------------------------------------------------------------------- */ /* Footer and footer elemnts /* ---------------------------------------------------------------------- */ .footer { font-size: 12px; padding: 8px 20px 5px; position: relative; } .footer-inner { float: left; } .footer-items { float: right; } .footer-fixed .footer { bottom: 0; left: 0; position: fixed; right: 0; z-index: 1000; border-top-width: 1px; border-top-style: solid; } /* ---------------------------------------------------------------------- */ /* Breadcrumb /* ---------------------------------------------------------------------- */ .breadcrumb { margin: 0 -15px; border-radius: 0; padding: 15px 45px 15px 15px;; border-bottom: 1px solid #C8C7CC; position: relative; height: 51px; } .breadcrumb i { color: #cccccc; font-size: 16px; display: inline-block; } .breadcrumb { margin: 0 -15px; border-radius: 0; padding: 15px 45px 15px 15px;; border-bottom: 1px solid #C8C7CC; position: relative; height: 51px; } /* ---------------------------------------------------------------------- */ /* Rating /* ---------------------------------------------------------------------- */ .rating { direction: rtl; font-size: 30px; unicode-bidi: bidi-override; } .rating span.star, .rating span.star { display: inline-block; font-family: FontAwesome; font-style: normal; font-weight: normal; } .rating span.star:hover, .rating span.star:hover { cursor: pointer; } .rating span.star:before, .rating span.star:before { color: #999999; content: "\f006"; padding-right: 5px; } .rating span.star:hover:before, .rating span.star:hover:before, .rating span.star:hover ~ span.star:before, .rating span.star:hover ~ span.star:before { color: #E3CF7A; content: "\f005"; } /* ---------------------------------------------------------------------- */ /* Dropdown elements /* ---------------------------------------------------------------------- */ .dropdown-checkboxes { padding: 5px; } .dropdown-checkboxes label { display: block; font-weight: normal; line-height: 20px; } /* ---------------------------------------------------------------------- */ /* Labels and Badges /* ---------------------------------------------------------------------- */ .badge-success { background-color: #5CB85C; } .badge-success[href]:hover, .badge-success[href]:focus { background-color: #449D44; } .badge-warning { background-color: #F0AD4E; } .badge-warning[href]:hover, .badge-warning[href]:focus { background-color: #EC971F; } .badge-info { background-color: #5BC0DE; } .badge-info[href]:hover, .badge-info[href]:focus { background-color: #31B0D5; } .badge-danger { background-color: #D9534F; } .badge-danger[href]:hover, .badge-danger[href]:focus { background-color: #C9302C; } .badge-new { background-color: #007AFF; border-radius: 12px 12px 12px 12px !important; font-size: 11px !important; font-weight: 300; height: 18px; padding: 3px 6px; text-align: center; text-shadow: none !important; vertical-align: middle; } .label { font-size: 85% !important; padding: 0.4em 0.6em !important; } .label-inverse, .badge-inverse { background-color: #555555; } /* ---------------------------------------------------------------------- */ /* Progress bar /* ---------------------------------------------------------------------- */ .progress.progress-xs { height: 7px; } .progress.progress-sm { height: 12px; } /* ---------------------------------------------------------------------- */ /* Modal elements /* ---------------------------------------------------------------------- */ .modal-footer { background: #ECF0F1; border-radius: 0 0 6px 6px; } /* ---------------------------------------------------------------------- */ /* Tabs /* ---------------------------------------------------------------------- */ .tabbable { margin-bottom: 15px; } .nav-tabs { border-color: #DDDDDD; margin-bottom: 0; margin-left: 0; position: relative; top: 1px; } .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { background-color: #FFFFFF; border-color: #DDDDDD #DDDDDD transparent; border-top: 2px solid #DDDDDD; color: #333333; line-height: 16px; margin-top: -1px; z-index: 12; } .nav-tabs > li:first-child > a { margin-left: 0; } .nav-tabs > li > a:hover { background-color: #FFFFFF; border-color: #DDDDDD; color: #4C8FBD; } .nav-tabs > li > a, .nav-tabs > li > a:focus { background-color: #F9F9F9; border-color: #DDDDDD; border-radius: 0 0 0 0 !important; color: #999999; line-height: 16px; margin-right: -1px; position: relative; } .tab-content { border: 1px solid #DDDDDD; padding: 16px 12px; position: relative; } .tabs-below > .nav-tabs { border-bottom-width: 0; border-color: #DDDDDD; margin-bottom: 0; margin-top: -1px; top: auto; } .tabs-below > .nav-tabs > li > a, .tabs-below > .nav-tabs > li > a:hover, .tabs-below > .nav-tabs > li > a:focus { border-color: #DDDDDD; } .tabs-below > .nav-tabs > li.active > a, .tabs-below > .nav-tabs > li.active > a:hover, .tabs-below > .nav-tabs > li.active > a:focus { border-bottom: 2px solid #DDDDDD; border-color: transparent #DDDDDD #DDDDDD; border-top-width: 1px; margin-top: 0; } .tabs-left > .nav-tabs > li > a, .tabs-right > .nav-tabs > li > a { min-width: 60px; } .tabs-left > .nav-tabs { border-color: #DDDDDD; float: left; margin-bottom: 0; top: auto; } .tabs-left > .nav-tabs > li { float: none; } .tabs-left > .nav-tabs > li > a, .tabs-left > .nav-tabs > li > a:focus, .tabs-left > .nav-tabs > li > a:hover { border-color: #DDDDDD; margin: 0 -1px 0 0; } .tabs-left > .nav-tabs > li.active > a, .tabs-left > .nav-tabs > li.active > a:focus, .tabs-left > .nav-tabs > li.active > a:hover { border-color: #DDDDDD; border-right: none; border-left: 2px solid #DDDDDD; border-top-width: 1px; margin: 0 -1px; } .tabs-right > .nav-tabs { border-color: #DDDDDD; float: right; margin-bottom: 0; top: auto; } .tabs-right > .nav-tabs > li > a, .tabs-right > .nav-tabs > li > a:focus, .tabs-right > .nav-tabs > li > a:hover { border-color: #DDDDDD; margin: 0 -1px; } .tabs-right > .nav-tabs > li.active > a, .tabs-right > .nav-tabs > li.active > a:focus, .tabs-right > .nav-tabs > li.active > a:hover { border-color: #DDDDDD; border-left: none; border-right: 2px solid #DDDDDD; border-top-width: 1px; margin: 0 -2px 0 -1px; } .nav-tabs > li > a > .badge { line-height: 8px; opacity: 0.7; } .nav-tabs > li > a > [class*="fa-"] { opacity: 0.75; } .nav-tabs > li.active > a > .badge, .nav-tabs > li.active > a > [class*="fa-"] { opacity: 1; } .nav-tabs li [class*=" fa-"], .nav-tabs li [class^="fa-"] { display: inline-block; text-align: center; width: 1.25em; } .nav-tabs > li.open .dropdown-toggle { background-color: #4F99C6; border-color: #4F99C6; color: #FFFFFF; } .nav-tabs > li.open .dropdown-toggle > [class*="fa-"] { color: #FFFFFF !important; opacity: 1; } .tabs-left .tab-content, .tabs-right .tab-content { overflow: auto; } /*teal*/ .tab-teal > li.active > a, .tab-teal > li.active > a:hover, .tab-teal > li.active > a:focus { border-color: #DDDDDD; border-top: 2px solid #569099; } .tab-teal > li > a:hover { color: #569099; } .tab-teal > li.dropdown.open.active > a:hover, .tab-teal > li.dropdown.open.active > a:focus { background-color: #569099; border-color: #569099; color: #FFFFFF; } .tab-teal > li.open .dropdown-toggle { background-color: #569099; border-color: #569099; color: #FFFFFF; } .tab-teal .dropdown-menu > li > a:hover, .tab-teal .dropdown-menu > li > a:focus { background-color: #569099; } .tab-teal .active > a, .tab-teal .active > a:hover, .tab-teal .active > a:focus { background-color: #569099; } .tabs-left > .tab-teal > li.active > a, .tabs-left > .tab-teal > li.active > a:focus, .tabs-left > .tab-teal > li.active > a:hover { border-color: #DDDDDD; border-right: none; border-left: 2px solid #569099; } .tabs-below > .tab-teal > li.active > a, .tabs-below > .tab-teal > li.active > a:hover, .tabs-below > .tab-teal > li.active > a:focus { border-color: #DDDDDD; border-top: none; border-bottom: 2px solid #569099; } .tabs-right > .tab-teal > li.active > a, .tabs-right > .tab-teal > li.active > a:focus, .tabs-right > .tab-teal > li.active > a:hover { border-color: #DDDDDD; border-left: none; border-right: 2px solid #569099; } .tab-padding.tab-teal > li > a, .tab-padding.tab-teal > li > a:focus, .tab-padding.tab-teal > li > a:hover { border-color: rgba(0, 0, 0, 0); color: #FFFFFF; } .tab-padding.tab-teal > li:not(.active) > a:hover { border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) transparent; opacity: 0.85; } .tab-padding.tab-teal > li:not(.active) > a > [class*="fa-"]:first-child { color: #FFFFFF !important; } .tab-padding.tab-teal > li:not(.active) > a > .badge { background-color: #FFFFFF !important; color: rgba(0, 0, 0, 0.4) !important; } .tab-padding.tab-teal > li > a, .tab-padding.tab-teal > li > a:focus { background-color: #7DAFB7; } .tab-padding.tab-teal > li.active > a, .tab-padding.tab-teal > li.active > a:focus, .tab-padding.tab-teal > li.active > a:hover { background-color: #FFFFFF; box-shadow: none; color: #4F80A0; } .tab-padding.tab-teal > li.active > a, .tab-padding.tab-teal > li.active > a:focus, .tab-padding.tab-teal > li.active > a:hover { border-color: #569099 #DDDDDD transparent; color: #4D8189; } .tabs-below .tab-padding.tab-teal > li.active > a { border-color: transparent #7DB4D8 #7DB4D8; } .tab-padding.tab-teal { border-bottom-color: #569099; background-color: #F3F8F8; } .tabs-below .nav-tabs.tab-teal { padding-bottom: 6px; border-bottom-color: #DDDDDD; border-top: 0 none; } /*bricky*/ .tab-bricky > li.active > a, .tab-bricky > li.active > a:hover, .tab-bricky > li.active > a:focus { border-color: #C83A2A #DDDDDD transparent; border-top: 2px solid #C83A2A; } .tab-bricky > li > a:hover { color: #C83A2A; } .tab-bricky > li.dropdown.open.active > a:hover, .tab-bricky > li.dropdown.open.active > a:focus { background-color: #C83A2A; border-color: #C83A2A; color: #FFFFFF; } .tab-bricky > li.open .dropdown-toggle { background-color: #C83A2A; border-color: #C83A2A; color: #FFFFFF; } .tab-bricky .dropdown-menu > li > a:hover, .tab-bricky .dropdown-menu > li > a:focus { background-color: #C83A2A; } .tab-bricky .active > a, .tab-bricky .active > a:hover, .tab-bricky .active > a:focus { background-color: #C83A2A; } .tabs-left > .tab-bricky > li.active > a, .tabs-left > .tab-bricky > li.active > a:focus, .tabs-left > .tab-bricky > li.active > a:hover { border-color: #DDDDDD transparent #DDDDDD #C83A2A; border-left: 2px solid #C83A2A; } .tabs-below > .tab-bricky > li.active > a, .tabs-below > .tab-bricky > li.active > a:hover, .tabs-below > .tab-bricky > li.active > a:focus { border-bottom: 2px solid #C83A2A; border-color: transparent #DDDDDD #C83A2A; } .tabs-right > .tab-bricky > li.active > a, .tabs-right > .tab-bricky > li.active > a:focus, .tabs-right > .tab-bricky > li.active > a:hover { border-color: #DDDDDD #C83A2A #DDDDDD transparent; border-right: 2px solid #C83A2A; } .tab-padding.tab-bricky > li > a, .tab-padding.tab-bricky > li > a:focus, .tab-padding.tab-bricky > li > a:hover { border-color: rgba(0, 0, 0, 0); color: #FFFFFF; } .tab-padding.tab-bricky > li:not(.active) > a:hover { border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) transparent; opacity: 0.85; } .tab-padding.tab-bricky > li:not(.active) > a > [class*="fa-"]:first-child { color: #FFFFFF !important; } .tab-padding.tab-bricky > li:not(.active) > a > .badge { background-color: #FFFFFF !important; color: rgba(0, 0, 0, 0.4) !important; } .tab-padding.tab-bricky > li > a, .tab-padding.tab-bricky > li > a:focus { background-color: #DC6456; } .tab-padding.tab-bricky > li.active > a, .tab-padding.tab-bricky > li.active > a:focus, .tab-padding.tab-bricky > li.active > a:hover { background-color: #FFFFFF; box-shadow: none; color: #333333; } .tab-padding.tab-bricky > li.active > a, .tab-padding.tab-bricky > li.active > a:focus, .tab-padding.tab-teal > li.active > a:hover { border-color: #C83A2A #DDDDDD transparent; color: #333333; } .tabs-below .tab-padding.tab-bricky > li.active > a { border-color: transparent #C83A2A #DDDDDD; } .tab-padding.tab-bricky { border-bottom-color: #C83A2A; background-color: #FBEEEC; } .tabs-below .nav-tabs.tab-bricky { padding-bottom: 6px; border-bottom-color: #DDDDDD; border-top: 0 none; } /*green*/ .tab-green > li.active > a, .tab-green > li.active > a:hover, .tab-green > li.active > a:focus { border-color: #3D9400 #DDDDDD transparent; border-top: 2px solid #3D9400; } .tab-green > li > a:hover { color: #3D9400; } .tab-green > li.dropdown.open.active > a:hover, .tab-green > li.dropdown.open.active > a:focus { background-color: #3D9400; border-color: #3D9400; color: #FFFFFF; } .tab-green > li.open .dropdown-toggle { background-color: #3D9400; border-color: #3D9400; color: #FFFFFF; } .tab-green .dropdown-menu > li > a:hover, .tab-green .dropdown-menu > li > a:focus { background-color: #3D9400; } .tab-green .active > a, .tab-green .active > a:hover, .tab-green .active > a:focus { background-color: #3D9400; } .tabs-left > .tab-green > li.active > a, .tabs-left > .tab-green > li.active > a:focus, .tabs-left > .tab-green > li.active > a:hover { border-color: #DDDDDD transparent #DDDDDD #3D9400; border-left: 2px solid #3D9400; } .tabs-below > .tab-green > li.active > a, .tabs-below > .tab-green > li.active > a:hover, .tabs-below > .tab-green > li.active > a:focus { border-bottom: 2px solid #3D9400; border-color: transparent #DDDDDD #3D9400; } .tabs-right > .tab-green > li.active > a, .tabs-right > .tab-green > li.active > a:focus, .tabs-right > .tab-green > li.active > a:hover { border-color: #DDDDDD #3D9400 #DDDDDD transparent; border-right: 2px solid #3D9400; } .tab-padding.tab-green > li > a, .tab-padding.tab-green > li > a:focus, .tab-padding.tab-green > li > a:hover { border-color: rgba(0, 0, 0, 0); color: #FFFFFF; } .tab-padding.tab-green > li:not(.active) > a:hover { border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) transparent; opacity: 0.85; } .tab-padding.tab-green > li:not(.active) > a > [class*="fa-"]:first-child { color: #FFFFFF !important; } .tab-padding.tab-green > li:not(.active) > a > .badge { background-color: #FFFFFF !important; color: rgba(0, 0, 0, 0.4) !important; } .tab-padding.tab-green > li > a, .tab-padding.tab-green > li > a:focus { background-color: #71B145; } /*purple*/ .tab-purple > li.active > a, .tab-purple > li.active > a:hover, .tab-purple > li.active > a:focus { border-color: #57517B #DDDDDD transparent; border-top: 2px solid #57517B; } .tab-purple > li > a:hover { color: #57517B; } .tab-purple > li.dropdown.open.active > a:hover, .tab-purple > li.dropdown.open.active > a:focus { background-color: #57517B; border-color: #57517B; color: #FFFFFF; } .tab-purple > li.open .dropdown-toggle { background-color: #57517B; border-color: #57517B; color: #FFFFFF; } .tab-purple .dropdown-menu > li > a:hover, .tab-purple .dropdown-menu > li > a:focus { background-color: #57517B; } .tab-purple .active > a, .tab-purple .active > a:hover, .tab-purple .active > a:focus { background-color: #57517B; } .tabs-left > .tab-purple > li.active > a, .tabs-left > .tab-purple > li.active > a:focus, .tabs-left > .tab-purple > li.active > a:hover { border-color: #DDDDDD transparent #DDDDDD #57517B; border-left: 2px solid #57517B; } .tabs-below > .tab-purple > li.active > a, .tabs-below > .tab-purple > li.active > a:hover, .tabs-below > .tab-purple > li.active > a:focus { border-bottom: 2px solid #57517B; border-color: transparent #DDDDDD #57517B; } .tabs-right > .tab-purple > li.active > a, .tabs-right > .tab-purple > li.active > a:focus, .tabs-right > .tab-purple > li.active > a:hover { border-color: #DDDDDD #57517B #DDDDDD transparent; border-right: 2px solid #57517B; } .tab-padding.tab-purple > li > a, .tab-padding.tab-purple > li > a:focus, .tab-padding.tab-purple > li > a:hover { border-color: rgba(0, 0, 0, 0); color: #FFFFFF; } .tab-padding.tab-purple > li:not(.active) > a:hover { border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) transparent; opacity: 0.85; } .tab-padding.tab-purple > li:not(.active) > a > [class*="fa-"]:first-child { color: #FFFFFF !important; } .tab-padding.tab-purple > li:not(.active) > a > .badge { background-color: #FFFFFF !important; color: rgba(0, 0, 0, 0.4) !important; } .tab-padding.tab-purple > li > a, .tab-padding.tab-purple > li > a:focus { background-color: #84809F; } .tab-padding.tab-purple > li.active > a, .tab-padding.tab-purple > li.active > a:focus, .tab-padding.tab-purple > li.active > a:hover { background-color: #FFFFFF; box-shadow: none; color: #333333; } .tab-padding.tab-purple > li.active > a, .tab-padding.tab-purple > li.active > a:focus, .tab-padding.tab-teal > li.active > a:hover { border-color: #57517B #DDDDDD transparent; color: #333333; } .tabs-below .tab-padding.tab-purple > li.active > a { border-color: transparent #57517B #DDDDDD; } .tab-padding.tab-purple { border-bottom-color: #57517B; background-color: #F5F4F9; } .tabs-below .nav-tabs.tab-purple { padding-bottom: 6px; border-bottom-color: #DDDDDD; border-top: 0 none; } .tab-padding.tab-green > li.active > a, .tab-padding.tab-green > li.active > a:focus, .tab-padding.tab-green > li.active > a:hover { background-color: #FFFFFF; box-shadow: none; color: #333333; } .tab-padding.tab-green > li.active > a, .tab-padding.tab-green > li.active > a:focus, .tab-padding.tab-teal > li.active > a:hover { border-color: #3D9400 #DDDDDD transparent; color: #333333; } .tabs-below .tab-padding.tab-green > li.active > a { border-color: transparent #3D9400 #DDDDDD; } .tab-padding.tab-green { border-bottom-color: #3D9400; background-color: #EFFBEC; } .tabs-below .nav-tabs.tab-green { padding-bottom: 6px; border-bottom-color: #DDDDDD; border-top: 0 none; } /*blue*/ .tab-blue > li.active > a, .tab-blue > li.active > a:hover, .tab-blue > li.active > a:focus { border-color: #364F6A #DDDDDD transparent; border-top: 2px solid #364F6A; } .tab-blue > li > a:hover { color: #364F6A; } .tab-blue > li.dropdown.open.active > a:hover, .tab-blue > li.dropdown.open.active > a:focus { background-color: #364F6A; border-color: #364F6A; color: #FFFFFF; } .tab-blue > li.open .dropdown-toggle { background-color: #364F6A; border-color: #364F6A; color: #FFFFFF; } .tab-blue .dropdown-menu > li > a:hover, .tab-blue .dropdown-menu > li > a:focus { background-color: #364F6A; } .tab-blue .active > a, .tab-blue .active > a:hover, .tab-blue .active > a:focus { background-color: #364F6A; } .tabs-left > .tab-blue > li.active > a, .tabs-left > .tab-blue > li.active > a:focus, .tabs-left > .tab-blue > li.active > a:hover { border-color: #DDDDDD transparent #DDDDDD #364F6A; border-left: 2px solid #364F6A; } .tabs-below > .tab-blue > li.active > a, .tabs-below > .tab-blue > li.active > a:hover, .tabs-below > .tab-blue > li.active > a:focus { border-bottom: 2px solid #364F6A; border-color: transparent #DDDDDD #364F6A; } .tabs-right > .tab-blue > li.active > a, .tabs-right > .tab-blue > li.active > a:focus, .tabs-right > .tab-blue > li.active > a:hover { border-color: #DDDDDD #364F6A #DDDDDD transparent; border-right: 2px solid #364F6A; } .tab-padding.tab-blue > li > a, .tab-padding.tab-blue > li > a:focus, .tab-padding.tab-blue > li > a:hover { border-color: rgba(0, 0, 0, 0); color: #FFFFFF; } .tab-padding.tab-blue > li:not(.active) > a:hover { border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) transparent; opacity: 0.85; } .tab-padding.tab-blue > li:not(.active) > a > [class*="fa-"]:first-child { color: #FFFFFF !important; } .tab-padding.tab-blue > li:not(.active) > a > .badge { background-color: #FFFFFF !important; color: rgba(0, 0, 0, 0.4) !important; } .tab-padding.tab-blue > li > a, .tab-padding.tab-blue > li > a:focus { background-color: #6C7F92; } .tab-padding.tab-blue > li.active > a, .tab-padding.tab-blue > li.active > a:focus, .tab-padding.tab-blue > li.active > a:hover { background-color: #FFFFFF; box-shadow: none; color: #333333; } .tab-padding.tab-blue > li.active > a, .tab-padding.tab-blue > li.active > a:focus, .tab-padding.tab-teal > li.active > a:hover { border-color: #364F6A #DDDDDD transparent; color: #333333; } .tabs-below .tab-padding.tab-blue > li.active > a { border-color: transparent #364F6A #DDDDDD; } .tab-padding.tab-blue { border-bottom-color: #364F6A; background-color: #F3F5F6; } .tabs-below .nav-tabs.tab-blue { padding-bottom: 6px; border-bottom-color: #DDDDDD; border-top: 0 none; } .nav > li.active > .dropdown-toggle { cursor: pointer !important; } .nav-pills .open .dropdown-toggle > [class*="fa-"], .nav > li.dropdown.open.active > a:hover > [class*="fa-"], .nav > li.dropdown.open.active > a:focus > [class*="fa-"] { color: #FFFFFF !important; } .nav-tabs > li:not(.active):not(.open) > a:not(:hover) > .disabled[class*="fa-"]:first-child { color: #909090 !important; } .nav-tabs.tab-space-1 > li > a { margin-right: 1px; } .nav-tabs.tab-space-2 > li > a { margin-right: 2px; } .nav-tabs.tab-space-3 > li > a { margin-right: 3px; } .nav-tabs.tab-space-4 > li > a { margin-right: 4px; } .nav-tabs.tab-padding { padding: 6px 5px 0; border: 1px solid #DDDDDD; } .panel-tabs .nav-tabs { float: right; margin-top: -52px; border: none; } .panel-tabs .nav-tabs > li > a { height: 36px; border-top: none; border-bottom: none; background: none; border-right: 1px solid #CDCDCD; box-shadow: 1px 1px 0 0 #FFFFFF; } .panel-tabs .nav-tabs > li > a:hover { background: #ffffff; } .panel-tabs .nav-tabs > li:first-child > a { box-shadow: 0 1px 0 1px #FFFFFF; } .panel-tabs .nav-tabs > li.active > a, .panel-tabs .nav-tabs > li.active > a:hover, .panel-tabs .nav-tabs > li.active > a:focus { background-color: #FFFFFF; background-image: none; border-color: #4C8FBD #DDDDDD transparent; border-top: none; box-shadow: none; color: #333333; line-height: 16px; margin-top: 0; } .panel-tabs .tab-content { border: none; padding: 0; } .tabs-right > .nav-tabs > li { float: none; } /* ---------------------------------------------------------------------- */ /* Page Header /* ---------------------------------------------------------------------- */ .page-header { margin: 20px 0 20px; } .page-header h1 { font-family: 'Raleway', sans-serif; font-weight: 200; letter-spacing: -1px; margin: 0 0 15px; padding: 0; color: #666666; } .page-header h1 small { color: #888888; font-size: 14px; font-weight: 300; letter-spacing: 0; } /* ---------------------------------------------------------------------- */ /* Accordion /* ---------------------------------------------------------------------- */ .accordion-custom .panel { background-color: #FFFFFF; border: none; border-radius: 0 0 0 0; box-shadow: none; } .accordion-custom .panel-heading { padding: 0; background-image: none; height: auto; box-shadow: none; border-radius: 0; } .accordion-custom .panel-body { border: none !important; } .accordion-custom .panel-heading .accordion-toggle { background-color: #cccccc; color: #606060; display: block; font-size: 13px; font-weight: bold; line-height: 1; padding: 10px; position: relative; } .accordion-custom .panel-heading .accordion-toggle:hover, .accordion-custom .panel-heading .accordion-toggle:focus { text-decoration: none; } .accordion-custom .panel-heading .accordion-toggle.collapsed { background-color: #F3F3F3; border-color: #D9D9D9; border-width: 0 0 0 1px; color: #606060; font-weight: normal; } .accordion-custom .panel-heading .accordion-toggle > .icon-arrow:before { content: "\f078"; } .accordion-custom .panel-heading .accordion-toggle.collapsed > .icon-arrow:before { content: "\f054" !important; } .accordion-custom.panel-group .panel-heading .accordion-toggle > .icon-arrow { font-size: 11px; padding: 0 5px; } .accordion-custom.panel-group .panel-heading .accordion-toggle.collapsed > .icon-arrow { opacity: 0.75; } .accordion-teal .panel-heading .accordion-toggle { background: #F3F7F8; border-left: 2px solid #569099; color: #437278; } .accordion-teal .panel-heading .accordion-toggle.collapsed { background: #F3F7F8; border-left: none; } /* ---------------------------------------------------------------------- */ /* Social Icons /* ---------------------------------------------------------------------- */ .social-icons li a, a.social-icon { background-position: 0 0; background-repeat: no-repeat; display: block; height: 28px; transition: all 0.3s ease-in-out 0s; width: 28px; } /* ---------------------------------------------------------------------- */ /* Sliders /* ---------------------------------------------------------------------- */ [class^="slider-"] .ui-rangeSlider-bar { height: 18px !important; } [class^="slider-"] .ui-rangeSlider-label { padding: 3px 6px !important; bottom: 25px !important; background: none !important; } [class^="slider-"] .ui-rangeSlider-label:after { content: "\f0d7"; display: inline; float: right; font-family: FontAwesome; font-size: 16px; margin: 0 -6px; width: 100%; bottom: -14px; position: absolute; text-align: center; text-shadow: none; } [class^="slider-"] .ui-rangeSlider-arrow { height: 14px !important; margin: 3px 0 !important; font-size: 20px; line-height: 14px; cursor: pointer; } [class^="slider-"] .ui-rangeSlider-arrow.ui-rangeSlider-leftArrow { background-image: none !important; } [class^="slider-"] .ui-rangeSlider-arrow.ui-rangeSlider-leftArrow:before { content: "\f0d9"; display: inline; float: right; font-family: FontAwesome; margin-right: 5px; } [class^="slider-"] .ui-rangeSlider-arrow.ui-rangeSlider-rightArrow { background-image: none !important; } [class^="slider-"] .ui-rangeSlider-arrow.ui-rangeSlider-rightArrow:before { content: "\f0da"; display: inline; float: right; font-family: FontAwesome; margin-right: 5px; } [class^="slider-"] .ui-rangeSlider-innerBar { height: 14px !important; } [class^="slider-"] .ui-rangeSlider-handle { height: 20px !important; } [class^="slider-"].ui-rangeSlider-disabled { opacity: 0.5; } .slider-teal .ui-rangeSlider-bar { background: rgba(86, 144, 153, 0.6) !important; } .slider-teal .ui-rangeSlider-handle { background: rgba(86, 144, 153, 0.8) !important; } .slider-teal .ui-rangeSlider-label { background-image: none !important; background-color: #569099 !important; color: #FFFFFF !important; text-shadow: 0 1px 0 #000000; } .slider-teal .ui-rangeSlider-label:after { color: #569099 !important; } .slider-teal .ui-rangeSlider-arrow { color: #4D8189; } .slider-bricky .ui-rangeSlider-bar { background: rgba(200, 58, 42, 0.6) !important; } .slider-bricky .ui-rangeSlider-handle { background: rgba(200, 58, 42, 0.8) !important; } .slider-bricky .ui-rangeSlider-label { background-image: none !important; background-color: #C83A2A !important; color: #FFFFFF !important; text-shadow: 0 1px 0 #000000; } .slider-bricky .ui-rangeSlider-label:after { color: #C83A2A !important; } .slider-bricky .ui-rangeSlider-arrow { color: #B33426; } .slider-purple .ui-rangeSlider-bar { background: rgba(87, 81, 123, 0.6) !important; } .slider-purple .ui-rangeSlider-handle { background: rgba(87, 81, 123, 0.8) !important; } .slider-purple .ui-rangeSlider-label { background-image: none !important; background-color: #57517B !important; color: #FFFFFF !important; text-shadow: 0 1px 0 #000000; } .slider-purple .ui-rangeSlider-label:after { color: #57517B !important; } .slider-purple .ui-rangeSlider-arrow { color: #413D5C; } .slider-green .ui-rangeSlider-bar { background: rgba(61, 148, 0, 0.6) !important; } .slider-green .ui-rangeSlider-handle { background: rgba(61, 148, 0, 0.8) !important; } .slider-green .ui-rangeSlider-label { background-image: none !important; background-color: #3D9400 !important; color: #FFFFFF !important; text-shadow: 0 1px 0 #000000; } .slider-green .ui-rangeSlider-label:after { color: #3D9400 !important; } .slider-green .ui-rangeSlider-arrow { color: #327B00; } .slider-yellow .ui-rangeSlider-bar { background: rgba(255, 167, 34, 0.6) !important; } .slider-yellow .ui-rangeSlider-handle { background: rgba(255, 167, 34, 0.8) !important; } .slider-yellow .ui-rangeSlider-label { background-image: none !important; background-color: #FFA722 !important; color: #FFFFFF !important; text-shadow: 0 1px 0 #482C00; } .slider-yellow .ui-rangeSlider-label:after { color: #FFB848 !important; } .slider-yellow .ui-rangeSlider-arrow { color: #FFAE2F; } .slider-blue .ui-rangeSlider-bar { background: rgba(54, 79, 106, 0.6) !important; } .slider-blue .ui-rangeSlider-handle { background: rgba(54, 79, 106, 0.8) !important; } .slider-blue .ui-rangeSlider-label { background-image: none !important; background-color: #364F6A !important; color: #FFFFFF !important; text-shadow: 0 1px 0 #000000; } .slider-blue .ui-rangeSlider-label:after { color: #364F6A !important; } .slider-blue .ui-rangeSlider-arrow { color: #2D4259; } /* ---------------------------------------------------------------------- */ /* Nestable List /* ---------------------------------------------------------------------- */ .dd { position: relative; display: block; margin: 0; padding: 0; list-style: none; font-size: 13px; line-height: 20px; } .dd-list { display: block; position: relative; margin: 0; padding: 0; list-style: none; } .dd-list .dd-list { padding-left: 30px; } .dd-collapsed .dd-list { display: none; } .dd-item, .dd-empty, .dd-placeholder { display: block; position: relative; margin: 0; padding: 0; min-height: 20px; font-size: 13px; line-height: 20px; } .dd-handle { display: block; height: 30px; margin: 5px 0; padding: 5px 10px; color: #333; text-decoration: none; font-weight: bold; border: 1px solid #ccc; background: #fafafa; background: -webkit-linear-gradient(top, #fafafa 0%, #eee 100%); background: -moz-linear-gradient(top, #fafafa 0%, #eee 100%); background: linear-gradient(top, #fafafa 0%, #eee 100%); -webkit-border-radius: 3px; border-radius: 3px; box-sizing: border-box; -moz-box-sizing: border-box; } .dd-handle:hover { color: #2ea8e5; background: #fff; } .dd-item > button { display: block; position: relative; cursor: pointer; float: left; width: 25px; height: 20px; margin: 5px 0; padding: 0; text-indent: 100%; white-space: nowrap; overflow: hidden; border: 0; background: transparent; font-size: 12px; line-height: 1; text-align: center; font-weight: bold; } .dd-item > button:before { content: '+'; display: block; position: absolute; width: 100%; text-align: center; text-indent: 0; } .dd-item > button[data-action="collapse"]:before { content: '-'; } .dd-placeholder, .dd-empty { margin: 5px 0; padding: 0; min-height: 30px; background: #f2fbff; border: 1px dashed #b6bcbf; box-sizing: border-box; -moz-box-sizing: border-box; } .dd-empty { border: 1px dashed #bbb; min-height: 100px; background-color: #e5e5e5; background-image: -webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff), -webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff); background-image: -moz-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff), -moz-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff); background-image: linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff), linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff); background-size: 60px 60px; background-position: 0 0, 30px 30px; } .dd-dragel { position: absolute; pointer-events: none; z-index: 9999; } .dd-dragel > .dd-item .dd-handle { margin-top: 0; } .dd-dragel .dd-handle { -webkit-box-shadow: 2px 4px 6px 0 rgba(0,0,0,.1); box-shadow: 2px 4px 6px 0 rgba(0,0,0,.1); } /** * Nestable Extras */ .nestable-lists { display: block; clear: both; padding: 30px 0; width: 100%; border: 0; border-top: 2px solid #ddd; border-bottom: 2px solid #ddd; } #nestable-menu { padding: 0; margin: 20px 0; } #nestable-output, #nestable2-output { width: 100%; height: 7em; font-size: 13px; line-height: 1.333333em; padding: 5px; margin-bottom: 5px; } #nestable2 .dd-handle { color: #fff; border: 1px solid #999; background: #bbb; background: -webkit-linear-gradient(top, #bbb 0%, #999 100%); background: -moz-linear-gradient(top, #bbb 0%, #999 100%); background: linear-gradient(top, #bbb 0%, #999 100%); } #nestable2 .dd-handle:hover { background: #bbb; } #nestable2 .dd-item > button:before { color: #fff; } .dd-hover > .dd-handle { background: #2ea8e5 !important; } /** * Nestable Draggable Handles */ .dd3-content { display: block; height: 30px; margin: 5px 0; padding: 5px 10px 5px 40px; color: #333; text-decoration: none; font-weight: bold; border: 1px solid #ccc; background: #fafafa; background: -webkit-linear-gradient(top, #fafafa 0%, #eee 100%); background: -moz-linear-gradient(top, #fafafa 0%, #eee 100%); background: linear-gradient(top, #fafafa 0%, #eee 100%); -webkit-border-radius: 3px; border-radius: 3px; box-sizing: border-box; -moz-box-sizing: border-box; } .dd3-content:hover { color: #2ea8e5; background: #fff; } .dd-dragel > .dd3-item > .dd3-content { margin: 0; } .dd3-item > button { margin-left: 30px; } .dd3-handle { position: absolute; margin: 0; left: 0; top: 0; cursor: pointer; width: 30px; text-indent: 100%; white-space: nowrap; overflow: hidden; border: 1px solid #aaa; background: #ddd; background: -webkit-linear-gradient(top, #ddd 0%, #bbb 100%); background: -moz-linear-gradient(top, #ddd 0%, #bbb 100%); background: linear-gradient(top, #ddd 0%, #bbb 100%); border-top-right-radius: 0; border-bottom-right-radius: 0; } .dd3-handle:before { content: '\f0c9'; display: block; font-family: FontAwesome; position: absolute; left: 0; top: 3px; width: 100%; text-align: center; text-indent: 0; color: #fff; font-size: 10px; font-weight: normal; } .dd3-handle:hover { background: #ddd; } /* ---------------------------------------------------------------------- */ /* Icons /* ---------------------------------------------------------------------- */ .icons > section { margin-top: 20px; } .the-icons li { line-height: 40px; } .the-icons li i { transition: font-size 0.2s ease 0s; } .the-icons li:hover i { font-size: 26px; } /* ---------------------------------------------------------------------- */ /* Backdrop /* ---------------------------------------------------------------------- */ .full-white-backdrop { background-color: #FFFFFF; display: none; height: 100%; left: 0; position: fixed; top: 0; width: 100%; z-index: 9999; } /* ---------------------------------------------------------------------- */ /* Table and table elements /* ---------------------------------------------------------------------- */ th.center, td.center { text-align: center; } td.center .dropdown-menu { text-align: left; } .table thead tr { color: #707070; font-weight: normal; } .table.table-bordered thead tr th { vertical-align: middle; } .table thead > tr > th, .table tbody > tr > th, .table tfoot > tr > th, .table thead > tr > td, .table tbody > tr > td, .table tfoot > tr > td { vertical-align: middle; } .editable-element { border-bottom: 1px dashed #0088CC; text-decoration: none; opacity: 0.5; display: inline; } /* ---------------------------------------------------------------------- */ /* Timepicker /* ---------------------------------------------------------------------- */ .bootstrap-timepicker-widget table td input { width: 32px !important; } .bootstrap-timepicker .add-on i { height: auto !important; width: auto !important; } /* ---------------------------------------------------------------------- */ /* FileUpload /* ---------------------------------------------------------------------- */ .fileupload .uneditable-input { white-space: nowrap; } .fileupload-new .input-group .btn-file { -webkit-border-radius: 0 3px 3px 0 !important; -moz-border-radius: 0 3px 3px 0 !important; border-radius: 0 3px 3px 0 !important; } /* ---------------------------------------------------------------------- */ /* WYSIWYG /* ---------------------------------------------------------------------- */ .wysiwyg { padding: 5px 0; } .wysiwyg .btn-group:after { border-left: 1px solid #E1E6EA; bottom: 6px; content: ""; display: block; left: -2px; max-width: 0; position: absolute; top: 6px; width: 0; } .wysiwyg .btn-group .btn, .wysiwyg .btn-group > .inline > .btn { background: #FFFFFF !important; border: none !important; color: #ADB3BE !important; margin: 0 !important; text-shadow: none !important; } .wysiwyg .btn-group .btn:hover, .wysiwyg .btn-group > .inline > .btn:hover { color: #333333 !important; } .wysiwyg .btn-group .btn:active, .wysiwyg .btn-group > .inline > .btn:active { background: #FFFFFF !important; border: none !important; color: #fff !important; margin: 0 !important; text-shadow: none !important; } /* ---------------------------------------------------------------------- */ /* Form Wizard /* ---------------------------------------------------------------------- */ .swMain > ul { display: table; list-style: none; margin: 0 0 20px 0; padding: 0; position: relative; width: 100%; } .swMain > ul li { display: table-cell; text-align: center; width: 1%; } .swMain > ul li > a:before { border-top: 4px solid #CED1D6; content: ""; display: block; font-size: 0; height: 1px; overflow: hidden; position: relative; top: 21px; width: 100%; z-index: 1; } .swMain > ul li:first-child > a:before { left: 50%; max-width: 51%; } .swMain > ul li:last-child > a:before { max-width: 50%; width: 50%; } .swMain > ul li > a.selected:before, .swMain li > a.done:before { border-color: #5293C4; } .swMain > ul .stepNumber { background-color: #FFFFFF; border: 5px solid #CED1D6; border-radius: 100% 100% 100% 100%; color: #546474; display: inline-block; font-size: 15px; height: 40px; line-height: 30px; position: relative; text-align: center; width: 40px; z-index: 2; } .swMain > ul li > a.selected .stepNumber { border-color: #5293C4; } .swMain ul li > a.done .stepNumber { border-color: #5293C4; background-color: #5293C4; color: #fff; text-indent: -9999px; } .swMain ul li > a.done .stepNumber:before { content: "\f00c"; display: inline; float: right; font-family: FontAwesome; font-weight: 300; height: auto; text-shadow: none; margin-right: 7px; text-indent: 0; } .swMain ul li > a.done.wait .stepNumber { background-color: #F6F6F6 !important; color: #CCCCCC !important; text-indent: -0px !important; } .swMain ul li > a.done.wait .stepNumber:before { content: "" !important; } .swMain > ul li .stepDesc { color: #949EA7; display: block; font-size: 14px; margin-top: 4px; max-width: 100%; table-layout: fixed; text-align: center; word-wrap: break-word; z-index: 104; } .swMain > ul li > a.selected .stepDesc, .swMain li > a.done .stepDesc { color: #2B3D53; } .swMain > ul li > a:hover { text-decoration: none; } .swMain > ul li > a.disabled { cursor: default; } .swMain .progress { margin-bottom: 30px; } .swMain .stepContainer { height: auto !important; } .swMain .loader { display: none; } .swMain [class^="button"], .swMain [class*=" button"] { display: none; } .swMain .close { display: none; } /* ---------------------------------------------------------------------- */ /* Login /* ---------------------------------------------------------------------- */ body.login { color: #7F7F7F; } body.login.example1 { background-image: url("../images/bg.png"); background-color: rgba(0, 0, 0, 0); } body.login.example2 { background-image: url("../images/bg_2.png"); background-color: rgba(255, 255, 255, 0); } body.login .main-login { margin-top: 60px; } body.login .logo { padding: 20px; text-align: center; } body.login .box-login, body.login .box-forgot, body.login .box-register { background: #FFFFFF; border-radius: 5px; box-shadow: -30px 30px 50px rgba(0, 0, 0, 0.32); overflow: hidden; padding: 15px; } body.login .box-forgot, body.login .box-register, body.login .box-login { display: none; } body.login .form fieldset { border: none; margin: 0; padding: 10px 0 0; } body.login a.forgot { color: #909090; font-size: 12px; position: absolute; right: 10px; text-shadow: 1px 1px 1px #FFFFFF; top: 9px; } body.login input.password { padding-right: 130px; } body.login label { color: #7F7F7F; font-size: 14px; margin-top: 5px; } body.login .copyright { font-size: 11px; margin: 0 auto; padding: 10px 10px 0; text-align: center; } body.login .form-actions:before, body.login .form-actions:after { content: ""; display: table; line-height: 0; } body.login .form-actions:after { clear: both; } body.login .form-actions { margin-top: 15px; padding-top: 10px; display: block; } body.login .new-account { border-top: 1px dotted #EEEEEE; margin-top: 15px; padding-top: 10px; display: block; } /* ---------------------------------------------------------------------- */ /* 404 and 500 errors /* ---------------------------------------------------------------------- */ body.error-full-page { background: #ffffff !important; } body.error-full-page .page-error { margin-top: 60px; } .page-error { text-align: center; } .page-error .error-number { display: block; font-size: 158px; font-weight: 300; letter-spacing: -10px; line-height: 128px; margin-top: 0; text-align: center; } .page-error .error-details { display: block; padding-top: 0; text-align: center; } .page-error .error-details .btn-return { margin: 10px 0; } .page-error .error-details h3 { margin-top: 0; } body.error-full-page { overflow: hidden; } .error-full-page img { display: none; } .error-full-page #canvas { position: absolute; top: 0px; left: 0px; } .error-full-page #sound { position: absolute; width: 30%; height: 30%; overflow-y: auto; margin-left: 35%; -moz-border-radius: 15px; border-radius: 15px; opacity: 0.3; margin-top: 5%; } .error-full-page .video { position: absolute; width: 90%; height: 80%; margin-left: 5%; margin-top: 5%; } /* ---------------------------------------------------------------------- */ /* Inline Editor /* ---------------------------------------------------------------------- */ } #inline-container [contenteditable="true"] { padding: 10px; } #inline-container { border: 1px solid #CCCCCC; margin: 30px auto 0; padding: 10px; } #inline-container hr { background-color: #05B2D2; height: 5px; color: #05B2D2; border: 0; } #inline-header { overflow: hidden; padding: 0 0 30px; position: relative; } #inline-headerLeft { padding-top: 10px; } #inline-headerLeft h2, #inline-headerLeft h3 { font-weight: normal; margin: 0; overflow: hidden; text-align: center; } #inline-headerLeft h2 { font-family: "Arial Black", arial-black; font-size: 52px; line-height: 1.1em; text-transform: uppercase; } #inline-headerLeft h3 { color: #666666; font-size: 24px; line-height: 1.1em; margin: 0.2em 0 0; } #inline-headerRight p { margin: 0; text-align: justify; } #inline-headerRight p + p { margin-top: 20px; } #inline-headerRight div { color: #666666; font-size: 16px; } #inline-columns { color: #333333; overflow: hidden; padding-top: 20px; } #inline-columns blockquote { font-family: "Times New Roman", Times, Georgia, serif; font-size: 2em; font-style: italic; margin: 30px 40px; position: relative; border: none; } #inline-columns blockquote:before { color: #666666; content: "“"; font-size: 60px; left: -40px; line-height: 60px; position: absolute; text-align: center; width: 35px; clear: both; display: block; font-family: "Times New Roman", Times, Georgia, serif; font-weight: bold; position: absolute; text-align: center; } #inline-tagLine { border-top: 5px solid #05B2D2; padding-top: 20px; } #inline-taglist { display: inline-block; font-weight: bold; margin: 0 0 0 20px; } /* ---------------------------------------------------------------------- */ /* Crop Image /* ---------------------------------------------------------------------- */ .crop-image form { margin: 1.5em 0; } .jcrop-holder #preview-pane { display: block; position: absolute; z-index: 1000; top: 10px; right: -280px; padding: 6px; border: 1px rgba(0,0,0,.4) solid; background-color: white; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; -webkit-box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2); -moz-box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2); box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2); } /* The Javascript code will set the aspect ratio of the crop area based on the size of the thumbnail preview, specified here */ #preview-pane .preview-container { width: 250px; height: 170px; overflow: hidden; } /* ---------------------------------------------------------------------- */ /* Timeline /* ---------------------------------------------------------------------- */ div.timeline { font-family: Arial; margin: 0 auto; overflow: hidden; position: relative; } div.timeline .columns > li:nth-child(2n+1) { float: left; width: 50%; clear: left; } div.timeline .columns > li:nth-child(2n+2) { float: right; margin-top: 20px; width: 50%; clear: right; } div.timeline div.date_separator { clear: both; height: 60px; position: relative; text-align: center; } div.timeline div.date_separator span { border-radius: 5px 5px 5px 5px; display: block; font-size: 14px; height: 30px; line-height: 30px; margin-top: -16px; position: absolute; top: -200%; transition: all 0.3s linear 0s; width: 200px; top: 50%; left: 50%; margin-left: -100px; border: 1px solid #BBBBBB; background-color: #FFFFFF; color: #666666; } div.timeline div.spine { border-radius: 2px 2px 2px 2px; position: absolute; top: 0; transition: bottom 0.5s linear 0s; width: 4px; left: 50%; margin-left: -2px; bottom: 0; background-color: #CCCCCC; } div.timeline_element { border-radius: 5px 5px 5px 5px; clear: both; margin: 10px 0; opacity: 0; position: relative; transition: all 0.2s linear 0s; background-color: #FFFFFF; border: 1px solid #CCCCCC; color: #000000; text-shadow: none; box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.1); } div.timeline_element:hover { border: 1px solid #AAAAAA; box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); } div.timeline .columns { margin: 0; padding: 0; list-style: none; } div.timeline .columns > li:nth-child(2n+1) div.timeline_element { float: right; left: 10%; margin-right: 30px; left: 0; opacity: 1; } div.timeline .columns > li:nth-child(2n+2) div.timeline_element { float: left; margin-left: 30px; right: 10%; opacity: 1; right: 0; } div.timeline div.column_center div.timeline_element { margin: 20px auto; opacity: 1; } div.timeline_element:before { content: ""; display: block; height: 0; position: absolute; width: 26px; border-top: 1px dashed #CCCCCC; } div.timeline .columns > li:nth-child(2n+1) div.timeline_element:before { right: -27px; top: 15px; } div.timeline .columns > li:nth-child(2n+2) div.timeline_element:before { left: -27px; top: 15px; } div.timeline div.column_center div.timeline_element:before { display: none; } div.timeline_element:after { border-radius: 100% 100% 100% 100%; content: ""; display: block; height: 10px; position: absolute; width: 10px; background-color: #BBBBBB; border: 1px solid #FFFFFF; box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); } div.timeline_element:hover:after { z-index: 100; background-color: #FFFFFF; border: 1px solid #CCCCCC; z-index: 100; } div.timeline .columns > li:nth-child(2n+1) div.timeline_element:after { right: -36px; top: 10px; } div.timeline .columns > li:nth-child(2n+2) div.timeline_element:after { left: -36px; top: 10px; } div.timeline.center div.column_center div.timeline_element:after { display: none; } /* ie8 fixes */ .ie8 div.timeline_element:after { display: none; } .ie8 div.timeline_element:before { display: none; } /**/ div.timeline_element div.timeline_title { font-size: 10px; margin: 10px; overflow: hidden; position: relative; text-transform: uppercase; color: #AAAAAA; } div.timeline_element div.title span.timeline_label { display: block; left: 0; overflow: hidden; position: absolute; right: 100px; text-overflow: ellipsis; white-space: nowrap; } div.timeline_element div.timeline_title span.timeline_date { float: right; } div.timeline_element div.content { font-size: 13px; padding: 0 10px 10px; } div.timeline_element div.readmore { font-size: 12px; padding: 10px; text-align: right; } div.timeline div.description_container { height: 80px; margin: 5px 5px 5px 90px; overflow: hidden; } div.timeline_element.teal { background-color: #569099; border-color: #4D8189; color: #FFFFFF; } div.timeline_element.teal:after { background-color: #569099; } div.timeline_element.teal:hover:after { background-color: #FFFFFF; border: 1px solid #569099; z-index: 100; } div.timeline_element.teal div.timeline_title { color: #EEEEEE; } div.timeline_element.green { background-color: #3D9400; border-color: #327B00; color: #FFFFFF; } div.timeline_element.green:after { background-color: #3D9400; } div.timeline_element.green:hover:after { background-color: #FFFFFF; border: 1px solid #3D9400; z-index: 100; } div.timeline_element.green div.timeline_title { color: #EEEEEE; } div.timeline_element.bricky { background-color: #C83A2A; border-color: #B33426; color: #FFFFFF; } div.timeline_element.bricky:after { background-color: #C83A2A; } div.timeline_element.bricky:hover:after { background-color: #FFFFFF; border: 1px solid #C83A2A; z-index: 100; } div.timeline_element.bricky div.timeline_title { color: #EEEEEE; } div.timeline_element.purple { background-color: #57517B; border-color: #413D5C; color: #FFFFFF; } div.timeline_element.purple:after { background-color: #57517B; } div.timeline_element.purple:hover:after { background-color: #FFFFFF; border: 1px solid #57517B; z-index: 100; } div.timeline_element.purple div.timeline_title { color: #EEEEEE; } /* ---------------------------------------------------------------------- */ /* Messages /* ---------------------------------------------------------------------- */ .panel-body.messages { padding: 0; } .messages-list { border-right: 1px solid #ECEAF3; float: left; height: 620px; list-style: none outside none; margin: 0; padding: 0; width: 260px; } .messages-list .messages-item { border-bottom: 1px solid #D9D9D9; padding: 5px 15px 5px 25px; position: relative; } .messages-list .messages-search { border-bottom: 1px solid #D9D9D9; padding: 10px 5px; position: relative; } .messages-list .messages-item span { color: #555555; display: block; } .messages-list .messages-item .messages-item-star, .messages-list .messages-item .messages-item-attachment, .messages-list .messages-item .messages-item-time, .messages-list .messages-item .messages-item-time .messages-item-actions { position: absolute; } .messages-list .messages-item .messages-item-star { color: #007AFF; left: 7px; opacity: 0; transition: opacity 0.2s ease-in-out 0s; } /* ie8 fixes */ .ie8 .messages-list .messages-item .messages-item-star { display: none; } .ie8 .messages-list .messages-item:hover .messages-item-star { display: block; } /**/ .messages-list .messages-item .messages-item-attachment { left: 7px; top: 25px; color: #007AFF; } .messages-list .messages-item .messages-item-avatar { border-radius: 4px 4px 4px 4px; float: left; height: 40px; width: 40px; } .messages-list .messages-item .messages-item-from, .messages-list .messages-item .messages-item-subject { margin-left: 45px; } .messages-list .messages-item .messages-item-from { font-weight: bold; margin-top: 2px; } .messages-list .messages-item .messages-item-time { opacity: 1; right: 15px; top: 8px; transition: opacity 0.2s ease-in-out 0s; } .messages-list .messages-item .messages-item-time .text { color: #999999; font-size: 12px; } .messages-list .messages-item .messages-item-time .messages-item-actions { opacity: 0; right: 0; top: 0; transition: opacity 0.2s ease-in-out 0s; width: 65px; } /* ie8 fixes */ .ie8 .messages-list .messages-item .messages-item-time .messages-item-actions { display: none; } /**/ .messages-list .messages-item .messages-item-time .messages-item-actions > a, .messages-list .messages-item .messages-item-time .messages-item-actions .dropdown > a { color: #007AFF; margin-left: 5px; } .messages-list .messages-item .messages-item-time .messages-item-actions > div { display: inline-block; } .messages-list .messages-item .messages-item-time .messages-item-actions .dropdown-menu { margin-top: 0; } .messages-list .messages-item .messages-item-time .messages-item-actions .tag-icon { border-radius: 30px; display: inline-block; height: 11px; margin: 0 5px 0 -13px; width: 11px; } .messages-list .messages-item .messages-item-time .messages-item-actions .tag-icon.red { background: red; } .messages-list .messages-item .messages-item-time .messages-item-actions .tag-icon.teal { background: #569099; } .messages-list .messages-item .messages-item-time .messages-item-actions .tag-icon.green { background: #3D9400; } .messages-list .messages-item .messages-item-time:hover .text { opacity: 0; } .messages-list .messages-item .messages-item-time:hover .messages-item-actions { opacity: 1; } .messages-list .messages-item .messages-item-subject { font-size: 12px; margin-bottom: 4px; } .messages-list .messages-item .messages-item-preview { color: #999999; font-size: 12px; } .messages-list .messages-item:hover { background-color: #F5F5F5; cursor: pointer !important; } .messages-list .messages-item:hover .messages-item-star { opacity: 0.2; } .messages-list .messages-item.active { background-color: #F5F5F5; } .messages-list .messages-item.starred .messages-item-star { display: block; opacity: 1; } .messages-content { background-color: rgba(0, 0, 0, 0); border-top: 1px solid #ECEAF3; height: auto; margin-left: 260px; position: relative; width: auto; } .messages-content .message-header { border-bottom: 1px solid #D9D9D9; padding: 10px 15px; } .messages-content .message-header .message-from { font-weight: bold; } .messages-content .message-header .message-to { color: #999999; } .messages-content .message-header .message-time { color: #999999; position: absolute; right: 15px; top: 10px; } .messages-content .message-header .message-actions { left: 50%; margin-left: -60px; position: absolute; width: 120px; } .messages-content .message-header .message-actions a { background-color: #FFFFFF; border-bottom: 1px solid #F5F4F9; border-left: 1px solid #F5F4F9; border-top: 1px solid #F5F4F9; color: #999999; margin: 0 0 0 -4px; padding: 4px 7px; } .messages-content .message-header .message-actions a:hover { color: #007AFF; } .messages-content .message-header .message-actions a:first-child { border-bottom-left-radius: 4px; border-top-left-radius: 4px; padding-left: 10px; } .messages-content .message-header .message-actions a:last-child { border-bottom-right-radius: 4px; border-right: 1px solid #F5F4F9; border-top-right-radius: 4px; } .messages-content .message-content { padding: 20px 10px; color: #555555; } /* ---------------------------------------------------------------------- */ /* Pricing Tables /* ---------------------------------------------------------------------- */ #pricing_table_example1 .pricing-table { background: none repeat scroll 0 0 #FFFFFF; border: 1px solid #DDDDDD; color: #333333; float: left; font: 12px 'Lucida Sans', 'trebuchet MS', Arial, Helvetica; padding: 20px; position: relative; text-shadow: 0 1px rgba(255, 255, 255, 0.8); text-align: center; } #pricing_table_example1 .featured { border-radius: 5px 5px 5px 5px; border-width: 1px; box-shadow: 20px 0 10px -10px rgba(0, 0, 0, 0.15), -20px 0 10px -10px rgba(0, 0, 0, 0.15); z-index: 2; } #pricing_table_example1 .pricing-table:nth-child(1) { border-radius: 5px 0 0 5px; } #pricing_table_example1 .pricing-table:nth-child(4) { border-radius: 0 5px 5px 0; } #pricing_table_example1 .pricing-table h3 { background-color: #EEEEEE; background-image: linear-gradient(#FFFFFF, #EEEEEE); font-size: 20px; font-weight: normal; margin: -20px -20px 50px; padding: 20px; } #pricing_table_example1 .featured h3 { background-color: #DDDDDD; background-image: linear-gradient(#EEEEEE, #DDDDDD); border-radius: 5px 5px 0 0; } #pricing_table_example1 .pricing-table:nth-child(1) h3 { border-radius: 5px 0 0 0; } #pricing_table_example1 .pricing-table:nth-child(4) h3 { border-radius: 0 5px 0 0; } #pricing_table_example1 .pricing-table h3 span { background: none repeat scroll 0 0 #FFFFFF; border: 5px solid #FFFFFF; border-radius: 100px 100px 100px 100px; box-shadow: 0 5px 20px #DDDDDD inset, 0 3px 0 #999999 inset; color: #777777; display: block; font: bold 35px/100px Georgia, Serif; height: 100px; margin: 10px auto -65px; width: 100px; line-height: 85px; } #pricing_table_example1 .pricing-table ul { list-style: none outside none; margin: 20px 0 0; padding: 0; } #pricing_table_example1 .pricing-table li { border-top: 1px solid #DDDDDD; padding: 10px 0; } #pricing_table_example1 .pricing-table .signup { background-color: #72CE3F; background-image: linear-gradient(#72CE3F, #62BC30); border-radius: 3px 3px 3px 3px; box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5), 0 2px 0 rgba(0, 0, 0, 0.7); color: #FFFFFF; display: inline-block; font: bold 14px Arial, Helvetica; margin: 20px 0 0; padding: 8px 20px; position: relative; text-decoration: none; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.3); text-transform: uppercase; } #pricing_table_example1 .pricing-table .signup:hover { background-color: #62BC30; background-image: linear-gradient(#62BC30, #72CE3F); } #pricing_table_example1 .pricing-table .signup:active, #pricing_table_example1 .pricing-table .signup:focus { background: none repeat scroll 0 0 #62BC30; box-shadow: 0 0 3px rgba(0, 0, 0, 0.7) inset; top: 2px; } #pricing_table_example2 .featured { z-index: 2; } #pricing_table_example2 .top { background: none repeat scroll 0 0 #2F2E35; border-radius: 10px 10px 0 0; height: 50px; } #pricing_table_example2 .top h2 { color: #FFFFFF; font: 300 30px/50px Helvetica, Verdana, sans-serif; text-align: center; margin: 0; } #pricing_table_example2 .pricing-table { background: none repeat scroll 0 0 #FFFFFF; border-radius: 10px 10px 10px 10px; box-shadow: 2px 2px 9px rgba(0, 0, 0, 0.3); position: relative; text-align: center; padding: 0 0 20px 0; } #pricing_table_example2 .pricing-table ul { font: 300 18px/2 Helvetica, Verdana, sans-serif; list-style-type: none; margin: 20px 20px 0 20px; padding: 0; } #pricing_table_example2 .pricing-table ul strong { font-weight: bold; } #pricing_table_example2 .pricing-table hr { background-color: #BCBEC0; border: 0 none; color: #BCBEC0; height: 1px; margin: 20px 0 0 0; } #pricing_table_example2 .pricing-table h1 { font: bold 88px/1 Helvetica, Verdana, sans-serif; margin: 20px 0 0; } #pricing_table_example2 .pricing-table h1 sup { font-size: 45px; } #pricing_table_example2 .pricing-table p { color: #BCBEC0; font: 500 14px/1 Helvetica, Verdana, sans-serif; } /* ---------------------------------------------------------------------- */ /* Coming Soon /* ---------------------------------------------------------------------- */ .coming-soon { text-align: center; background-color: #ffffff !important; } .timer-area { background-image: url("../images/bg.png"); background-color: rgba(0, 0, 0, 0); margin-bottom: 4em; padding-top: 2em; color: #1F2225; font: 1em/1.5em "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif; } .timer-area h1 { color: #FFFFFF; } ul#countdown { margin: 0; padding: 0; } ul#countdown li { display: inline-block; background: transparent url('../images/timer-piece.png') no-repeat left top; width: 104px; margin-bottom: 4em; text-align: center; } ul#countdown li span { font-size: 3em; font-weight: bold; color: #1f2225; height: 108px; line-height: 108px; position: relative; } ul#countdown li span:before { content: ''; width: 100%; height: 1px; border-top: 1px solid white; position: absolute; top: 25px; } ul#countdown li p.timeRefDays, ul#countdown li p.timeRefHours, ul#countdown li p.timeRefMinutes, ul#countdown li p.timeRefSeconds { margin-top: 1em; color: #909091; text-transform: uppercase; font-size: .875em; } .coming-soon #disclaimer { display: block; } .coming-soon #disclaimer p { color: #909091; font-size: 0.875em; font-style: italic; } .coming-soon #disclaimer p span { color: #2A9CCC; font-size: 1.2em; } /* ---------------------------------------------------------------------- */ /* Flot Chart /* ---------------------------------------------------------------------- */ .flot-container { box-sizing: border-box; position: relative; height: 450px; } .flot-placeholder { height: 100%; font-size: 14px; line-height: 1.2em; } .legend table { border-spacing: 5px; } .flot-container #choices { position: absolute; width: 135px; right: 0; top: 0; } #placeholder2 { margin-right: 135px; } .flot-small-container { height: 300px; } .flot-mini-container { height: 135px; } .flot-medium-container { height: 360px; } /* ---------------------------------------------------------------------- */ /* Maps /* ---------------------------------------------------------------------- */ .map { display: block; height: 350px; margin: 0 auto; } .map.large { height: 500px; } /* ---------------------------------------------------------------------- */ /* Overlay /* ---------------------------------------------------------------------- */ .overlay { display: block; text-align: center; color: #fff; font-size: 60px; line-height: 80px; opacity: 0.8; background: #4477aa; border: solid 3px #336699; border-radius: 4px; box-shadow: 2px 2px 10px #333; text-shadow: 1px 1px 1px #666; padding: 0 4px; } .overlay_arrow { left: 50%; margin-left: -16px; width: 0; height: 0; position: absolute; } .overlay_arrow.above { bottom: -15px; border-left: 16px solid transparent; border-right: 16px solid transparent; border-top: 16px solid #336699; } .overlay_arrow.below { top: -15px; border-left: 16px solid transparent; border-right: 16px solid transparent; border-bottom: 16px solid #336699; } /* ---------------------------------------------------------------------- */ /* Calendar /* ---------------------------------------------------------------------- */ #calendar { position: relative; } .fc-event { padding: 2px; } .fc-day-number { margin: 2px 2px 0 0; } .fc-header-title h2 { color: #666666; font-family: 'Raleway', sans-serif; font-weight: 200; letter-spacing: -1px; } .fc-today .fc-day-number { font-weight: bold; } .fc-state-highlight { background: #F5F5F5 !important; } .fc-button { color: #666666 !important; } .fc-state-default { background-color: #ffffff !important; background-image: none !important; border-color: #666666 !important; box-shadow: none !important; color: #666666; text-shadow: none !important; } .fc-state-down, .fc-state-active { box-shadow: none !important; outline: 0 none; background-color: #569099 !important; border-color: #4D8189 !important; color: #FFFFFF !important; } .fc-header-left { position: absolute !important; top: 0; left: 0; width: 50% !important; } .fc-header-right { position: absolute !important; top: 0; right: 0; width: 50% !important; } .fc-header-center { display: block !important; padding-top: 40px !important; } .event-category { color: #ffffff; padding: 5px; border-radius: 3px; margin: 5px 0; } .label-default, .badge-default { background-color: #3A87AD !important; border-color: #3A87AD !important; } .label-orange, .badge-orange { background-color: #E6674A !important; border-color: #E6674A !important; } .label-purple, .badge-purple { background-color: #57517B !important; border-color: #57517B !important; } .label-yellow, .badge-yellow { background-color: #FFB848 !important; border-color: #FFB848 !important; } .label-teal, .badge-teal { background-color: #569099 !important; border-color: #569099 !important; } .label-beige, .badge-beige { background-color: #CCCC99 !important; border-color: #CCCC99 !important; } .label-green, .badge-green { background-color: #3D9400 !important; border-color: #3D9400 !important; } /* ---------------------------------------------------------------------- */ /* Lock Screen /* ---------------------------------------------------------------------- */ .main-ls { height: 250px; left: 50%; margin-left: -240px; margin-top: -125px; position: absolute; top: 50%; width: 480px; } body.lock-screen .box-ls { background: #FFFFFF; box-shadow: -30px 30px 50px rgba(0, 0, 0, 0.32); overflow: hidden; padding: 15px; } body.lock-screen .logo { padding: 10px 0; } body.lock-screen .copyright { font-size: 11px; margin: 0 auto; padding: 10px 0; } body.lock-screen .user-info { float: right; width: 285px; } body.lock-screen .user-info h1 { color: #666666; font-family: 'Raleway', sans-serif; font-size: 30px; font-weight: 300; line-height: 32px; margin-top: 0; } body.lock-screen .user-info h1 i { color: #cccccc; } body.lock-screen .user-info > span { color: #666666; display: block; font-size: 12px; margin-bottom: 5px; } body.lock-screen .user-info > span em { color: #333333; } /* ---------------------------------------------------------------------- */ /* daterangepicker /* ---------------------------------------------------------------------- */ .daterangepicker { margin-top: 51px !important; } body.header-default .daterangepicker { margin-top: 1px !important; } /* ---------------------------------------------------------------------- */ /* Style Selector /* ---------------------------------------------------------------------- */ #style_selector { background: none repeat scroll 0 0 #FFFFFF; position: fixed; right: 0; top: 100px; width: 215px; z-index: 999; } #style_selector_container { border: 1px solid rgba(23, 24, 26, 0.15); border-bottom-left-radius: 2px; border-top-left-radius: 2px; box-shadow: 0 2px 9px 2px rgba(0, 0, 0, 0.14); display: none; } #style_selector_container img { border-radius: 100% 100% 100% 100%; } .style-main-title { background: #D9D9D9; border-bottom: 1px solid rgba(23, 24, 26, 0.15); color: #000000; font-size: 15px; height: 44px; line-height: 44px; text-align: center; } .box-title { font-size: 12px; height: 33px; line-height: 33px; text-align: center; color: #AAA9A9 !important; } .input-box { border-bottom: 1px solid rgba(23, 24, 26, 0.15); padding: 0 10px 10px 10px; text-align: center; } .input-box input[type="text"] { background: none repeat scroll 0 0 #F7F7F7; border: 1px solid rgba(23, 24, 26, 0.15); color: #000000; font-size: 11px; margin-left: 10px; padding: 3px; width: 60px; } .input-box select { background: none repeat scroll 0 0 #F7F7F7; border: 1px solid rgba(23, 24, 26, 0.15); color: #000000; margin-left: 5px; width: 120px; } .input-box .radio-inline { margin: 0 10px !important; } #style_selector .style-toggle { background: #ffffff; cursor: pointer; height: 44px; width: 35px; border: 1px solid rgba(23, 24, 26, 0.15); border-right: none; border-radius: 5px 0 0 5px; line-height: 44px; text-align: center; color: #007AFF; font-size: 14px; } #style_selector > .open:before { content: "\e162"; font-family: 'clip-font'; line-height: 1; } #style_selector > .open { background-position: left top; left: -35px; position: absolute; top: 44px; width: 35px; opacity: 1; } #style_selector > .close:before { content: "\e163"; font-family: 'clip-font'; line-height: 1; } #style_selector > .close { background-position: left bottom; position: absolute; right: 0; top: 45px; width: 35px; opacity: 0.9; } #style_selector .images { border-bottom: 1px solid rgba(23, 24, 26, 0.15); padding-bottom: 10px; text-align: center; position: relative; } #style_selector .images img { height: 24px; margin-bottom: 7px; margin-right: 7px; width: 25px; z-index: 1000; } #style_selector .images img.active { border: 0 solid #CCCCCC; opacity: 0.5; } #style_selector .images .form-group { width: 50px; text-align: center; color: #AAA9A9; font-size: 10px; margin-bottom: 0; } .layout-boxed > .navbar, .layout-boxed .main-container, .layout-boxed > .footer { max-width: 1170px !important; margin-left: auto !important; margin-right: auto !important; border-left-width: 1px; border-left-style: solid; border-right-width: 1px; border-right-style: solid; } #style_selector .images input { display: none; } #style_selector .images .form-group { display: inline-block; } #style_selector .images .add-on { background-color: #EEEEEE; border: 1px solid #CCCCCC; display: inline-block; font-weight: normal; line-height: 20px; min-width: 20px; padding: 5px; text-align: center; text-shadow: 0 1px 0 #FFFFFF; width: auto; margin-left: 2px; } #style_selector .images .add-on i { cursor: pointer; display: block; height: 20px; width: 20px; } #style_selector .clear_style { margin-right: 20px; } /* ---------------------------------------------------------------------- */ /* Home elements /* ---------------------------------------------------------------------- */ .circle-icon { background-color: #333333; border-radius: 75px 75px 75px 75px; color: #FFFFFF; margin-top: 2px; text-align: center; height: 55px; line-height: 56px; width: 55px; display: inline-block; font-size: 24px !important; } .circle-icon.circle-green { background-color: #3D9400; border-color: #327B00; color: #FFFFFF; } .circle-icon.circle-teal { background-color: #569099; border-color: #4D8189; color: #FFFFFF; } .circle-icon.circle-bricky { background-color: #C83A2A; border-color: #b33426; color: #ffffff; } .core-box { margin-bottom: 20px; display: inline-block; padding-bottom: 10px; border-bottom: 1px solid #EEEEEE; } .core-box .heading { margin-bottom: 15px; } .core-box .heading .circle-icon { float: left; } .core-box .heading h2 { line-height: 55px !important; margin: 0; padding-left: 65px; font-weight: normal; color: #666666; font-size: 18px; } .core-box .content { color: #747474 !important; line-height: 20px; margin-bottom: 15px; } .core-box .view-more { float: right; } .core-box .view-more i { display: inline-block; } .core-box .view-more:hover { text-decoration: none; } .discussion { list-style: none; margin: 0; padding: 0; } .discussion li { overflow: hidden; padding: 5px 5px 10px; } .discussion .avatar { position: relative; width: 50px; height: 50px; display: inline; overflow: hidden; } .other .messages:after { -moz-border-bottom-colors: none; -moz-border-left-colors: none; -moz-border-right-colors: none; -moz-border-top-colors: none; border-color: #E5E5EA #E5E5EA rgba(0, 0, 0, 0) rgba(0, 0, 0, 0); border-style: solid; border-width: 5px; content: ""; height: 0; position: absolute; left: -9px; top: 0; width: 0; } .other .messages { margin-left: 62px; background: #E5E5EA; } .other .avatar { float: left; } .self .messages { border-bottom-right-radius: 0; margin-right: 62px; background: #33CA22; color: #ffffff; } .self .avatar { float: right; } .self .messages:after { -moz-border-bottom-colors: none; -moz-border-left-colors: none; -moz-border-right-colors: none; -moz-border-top-colors: none; border-color: #33CA22 rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) #33CA22; border-style: solid; border-width: 5px; top: 0; content: ""; height: 0; right: -9px; position: absolute; width: 0; } .messages { border-radius: 2px 2px 2px 2px; padding: 10px; position: relative; } .messages p { font-size: 14px; margin: 0 0 0.2em; } .messages time { color: #333333; font-size: 11px; } .self .messages time { color: #ffffff; } .chat-form { margin-bottom: 20px; } /* ---------------------------------------------------------------------- */ /* Sparklines /* ---------------------------------------------------------------------- */ .mini-stats { border-left: 1px solid #DDDDDD; list-style: none; margin: 0; padding: 0; } .mini-stats li { border-left: 1px solid #FFFFFF; border-right: 1px solid #DDDDDD; padding-bottom: 6px; text-align: center; } .mini-stats .sparkline_bar_good, .mini-stats .sparkline_bar_neutral, .mini-stats .sparkline_bar_bad { font-size: 12px; font-weight: bold; text-align: center; } .mini-stats li:last-child { border-right: 0 none; } .mini-stats .values { font-size: 12px; padding: 10px 0; } .mini-stats .values strong { display: block; font-size: 18px; margin-bottom: 2px; } .mini-stats .sparkline_bar_good, .mini-stats .sparkline_bar_neutral, .mini-stats .sparkline_bar_bad { font-size: 12px; font-weight: bold; text-align: center; } .mini-stats .sparkline_bar_good { color: #459D30; } .mini-stats .sparkline_bar_neutral { color: #757575; } .mini-stats .sparkline_bar_bad { color: #BA1E20; } .jqstooltip { width: auto !important; height: auto !important; padding: 2px 6px !important; background-color: rgba(0, 0, 0, 0.7) !important; border: 0 !important; border-radius: 3px; } /* ---------------------------------------------------------------------- */ /* Easy Pie Chart /* ---------------------------------------------------------------------- */ .easy-pie-chart { position: relative; text-align: center; } .easy-pie-chart .number { position: relative; display: inline-block; width: 70px; height: 70px; text-align: center; } .easy-pie-chart canvas { position: absolute; top: 0; left: 0; } .percent { display: inline-block; line-height: 70px; z-index: 2; } .percent:after { content: '%'; margin-left: 0.1em; font-size: .8em; } .label-chart { color: #333333; font-size: 16px; font-weight: 300; display: inline; line-height: 1; padding: 0.2em 0.6em 0.3em; text-align: center; vertical-align: baseline; white-space: nowrap; } /* ---------------------------------------------------------------------- */ /* User profile /* ---------------------------------------------------------------------- */ .user-left { border-right: 1px solid #DDDDDD; padding-right: 15px; } .user-left a:hover, .user-left a:focus { text-decoration: none; } .user-left td .edit-user-info { visibility: hidden; } .user-left tr:hover .edit-user-info { visibility: visible; } .user-left .user-image { position: relative; display: inline-block; } .user-image .user-image-buttons { position: absolute; top: 5px; right: 5px; display: none; } .user-image:hover .user-image-buttons { display: block; } .user-edit-image-buttons { display: inline; } #projects .progress { margin-bottom: 0; } /* ---------------------------------------------------------------------- */ /* Gallery /* ---------------------------------------------------------------------- */ .gallery-img { margin-bottom: 20px; } .wrap-image { position: relative; width: 100%; overflow: hidden; } #cboxLoadedContent { background: #ffffff !important; } .wrap-image > .chkbox { width: 18px; height: 18px; position: absolute; top: 5px; right: 5px; background: #ffffff; text-align: center; display: none; cursor: pointer; border: 1px solid #DDDDDD; } .wrap-image > .chkbox:hover { border-color: rgba(82, 168, 236, 0.8); box-shadow: 0 0 12px rgba(82, 168, 236, 0.6); outline: 0 none; } .wrap-image.selected > .chkbox { display: block; } .wrap-image:hover > .chkbox { display: block; } .wrap-image.selected > .chkbox:before { content: "\e0df"; font-family: "clip-font"; height: 14px; left: 1px; position: absolute; top: -2px; width: 14px; } .wrap-image > .tools { background-color: rgba(0, 0, 0, 0.55); bottom: 0; left: -30px; position: absolute; text-align: center; top: 0; transition: all 0.2s ease 0s; vertical-align: middle; width: 24px; } .wrap-image > .tools a:hover, .wrap-image > .tools a:focus { text-decoration: none; } .wrap-image > .tools.tools-bottom { bottom: -30px; height: 28px; left: 0; right: 0; top: auto; width: auto; } .wrap-image:hover > .tools { left: 0; } .wrap-image:hover > .tools.tools-bottom { bottom: 0; top: auto; } .wrap-image:hover > .tools.tools-top { bottom: auto; top: 0; } .wrap-image:hover > .tools.tools-right { left: auto; right: 0; } .wrap-image > .tools > a, .wrap-image > *:first-child .inner a { color: #FFFFFF; display: inline-block; font-size: 14px; font-weight: normal; padding: 4px; } .wrap-image > .tools > a:hover, .wrap-image > *:first-child .inner a:hover { color: #C9E2EA; text-decoration: none; } .wrap-image .tools.tools-bottom > a, .wrap-image .tools.tools-top > a { display: inline-block; } /* ---------------------------------------------------------------------- */ /* Compatibility with font-awesome 3 /* ---------------------------------------------------------------------- */ [class^="icon-"], [class*=" icon-"] { font-family: FontAwesome; font-weight: normal; font-style: normal; text-decoration: inherit; -webkit-font-smoothing: antialiased; *margin-right: .3em; } [class^="icon-"]:before, [class*=" icon-"]:before { text-decoration: inherit; display: inline-block; speak: none; } a [class^="icon-"], a [class*=" icon-"] { display: inline; } .icon-magic:before { content: "\f0d0"; } .icon-bold:before { content: "\f032"; } .icon-italic:before { content: "\f033"; } .icon-underline:before { content: "\f0cd"; } .icon-eraser:before { content: "\f12d"; } .icon-font:before { content: "\f031"; } .icon-list-ul:before { content: "\f0ca"; } .icon-list-ol:before { content: "\f0cb"; } .icon-align-left:before { content: "\f036"; } .icon-text-height:before { content: "\f034"; } .icon-table:before { content: "\f0ce"; } .icon-link:before { content: "\f0c1"; } .icon-picture:before { content: "\f03e"; } .icon-fullscreen:before { content: "\f0b2"; } .icon-question:before { content: "\f128"; } .icon-chevron-up:before { content: "\f077"; } .icon-chevron-down:before { content: "\f078"; } .icon-arrow-left:before { content: "\f060"; } .icon-arrow-right:before { content: "\f061"; } .icon-wrench:before { content: "\f0ad"; } .icon-refresh:before { content: "\f021"; } .icon-remove:before { content: "\f00d"; } .icon-resize-full:before { content: "\f065"; } .icon-check-empty:before { content: "\f096"; } .icon-check:before { content: "\f046"; } .icon-ok:before { content: "\f00c"; } .icon-external-link-sign:before { content: "\f14c"; } .icon-double-angle-left:before { content: "\f100"; } .icon-double-angle-right:before { content: "\f101"; } /* ---------------------------------------------------------------------- */ /* Animation Page /* ---------------------------------------------------------------------- */ .animation-container { overflow: hidden; padding: 140px 0 40px; background-color: #F4F4F4; } .animation-buttons .btn { margin-bottom: 10px; } #object { display: block; margin-bottom: 100px; margin-left: auto; margin-right: auto; font-size: 150px; color: #007AFF; } /* ---------------------------------------------------------------------- */ /* X-editable Table /* ---------------------------------------------------------------------- */ td.column-left { width: 25%; } td.column-right { width: 75%; } /* ---------------------------------------------------------------------- */ /* Invoice /* ---------------------------------------------------------------------- */ .invoice { margin-bottom: 20px; } .invoice .invoice-logo { margin-bottom: 20px; } .invoice table { margin: 30px 0; } .invoice .invoice-logo p { font-size: 26px; line-height: 28px; padding: 25px 0; text-align: right; } .invoice .invoice-logo p span { display: block; font-size: 14px; } .invoice h4 { font-family: 'Open Sans', sans-serif; font-weight: 300 !important; } .invoice-details { padding-top: 30px; } .invoice .invoice-block { text-align: right; } .invoice .invoice-block .amounts { font-size: 14px; margin-top: 20px; } /* ---------------------------------------------------------------------- */ /* PAGE SIDEBAR /* ---------------------------------------------------------------------- */ #page-sidebar { bottom: 0; position: fixed; right: -270px; top: 49px; transition: right 0.3s ease 0s; -webkit-transition: right 0.3s ease 0s; width: 270px; z-index: 999; background:#F6F6F6; border-left: 1px solid #c8c7cc; border-top: 1px solid #c8c7cc; } #page-sidebar .sidebar-wrapper { overflow: hidden; position: relative; } #page-sidebar .sidebar-toggler { background: #F5F5F5; font-size: 16px; color: #999999; height: 50px; overflow: hidden; padding-top: 18px; position: absolute; right: 15px; text-align: center; top: -51px; width: 47px; z-index: 9994; } #page-sidebar .sidebar-wrapper .nav-tabs li a { border-left: none; border-top: none; background: #fff; } #page-sidebar .sidebar-wrapper .nav-tabs li.active a { background: none; border-bottom-color: transparent; } #page-sidebar .sidebar-wrapper .tab-content { border: none; padding: 0; position: relative; } #page-sidebar #users, #page-sidebar #favorites { position: relative; right:0; top:0; transition: right 0.3s ease 0s; -webkit-transition: right 0.3s ease 0s; } #page-sidebar .user-chat { position: relative; left:270px; top:0; } #page-sidebar .users-list{ position: absolute; right:0; left: 0; top:0; } #page-sidebar .media-list .media { border-bottom: 1px solid #c8c7cc; margin:0; } #page-sidebar .media-list .media a { padding: 10px; display: block; } #page-sidebar .media-list .media a:hover { background: #D9D9D9; text-decoration: none; } #page-sidebar .sidebar-title { color: #999; font-size: 11px; margin: 15px 10px 10px 10px; text-transform: uppercase; } #page-sidebar .sidebar-back { color: #999; font-size: 11px; margin: 15px 0 10px 0; text-transform: uppercase; } #page-sidebar .sidebar-back:hover { color: #555555; text-decoration: none; } #page-sidebar .media-list .media .media-object { border-radius: 50% !important; float: left; margin-right: 10px; opacity: 0.8; width: 40px; } #page-sidebar .media-list .media .user-label { display: inline-block; margin-top: 10px; position: absolute; right: 25px; } #page-sidebar .media-list .media .status-online { line-height: 40px; font-size: 6px; position: absolute; right: 10px; display: inline-block; color: #5cb85c; } #page-sidebar .media-list .media .media-heading { color: #555555; display: block; font-size: 13px; margin-bottom: 4px; } #page-sidebar .media-list .media .media-body span { color: #bbbbbb; display: block; font-size: 12px; } #page-sidebar .sidebar-content { padding: 10px; } #page-sidebar .discussion .avatar img { border-radius: 50% !important; width: 40px; } #page-sidebar .discussion .messages { margin-top: 10px; } #page-sidebar .discussion .messages p{ font-size: 12px; }assets/css/theme_green.css000064400000007344152510437570011653 0ustar00body, .main-container, .footer, .main-navigation, ul.main-navigation-menu > li > ul.sub-menu, .navigation-small ul.main-navigation-menu > li > ul.sub-menu { background-color: #415A1E !important; } .layout-boxed header, .layout-boxed .main-container, .layout-boxed .footer { border-left-color: #354A1A; border-right-color: #354A1A; } .navbar-inverse { background: rgba(38, 53, 17, 0.9); border-color: #415A1E; } /* ie8 fixes */ .ie8 .navbar-inverse { background: #293912; } /**/ .navbar-inverse .navbar-brand, .navbar-inverse .navbar-brand:hover, .navbar-inverse .nav > li > a { color: #ffffff; } .navbar-inverse .navbar-brand i, .navbar-inverse .navbar-brand:hover i { color: #E6674A; } .navbar-inverse .nav > li > a { color: #E8F2D9; } .navbar-inverse .nav > li.current-user > a { color: #ffffff !important; } .navbar-inverse .nav > li.current-user > a i { display: inline-block; text-align: center; width: 1.25em; color: #E6674A !important; font-size: 12px; } .navbar-inverse .nav > li:hover > a, .navbar-inverse .nav > li:active > a { color: #E8F2D9; background: #415A1E; } .navbar-inverse .nav > li > a:hover, .nav > li > a:focus { background-color: #415A1E; text-decoration: none; } .navbar-inverse .nav li.dropdown.open > .dropdown-toggle, .navbar-inverse .nav li.dropdown.active > .dropdown-toggle, .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { background: #415A1E; color: #ffffff; } .navbar-tools .dropdown-menu li .dropdown-menu-title { background: #415A1E; color: #ffffff; } .navbar-inverse .btn-navbar { background-color: #D9D9D9; background: -moz-linear-gradient(top, #34485e 0%, #283b52 100%); /* firefox */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#34485e), color-stop(100%,#283b52)); /* webkit */ } .nav > li.dropdown .dropdown-toggle .badge { background-color: #E6674A; border: none; } .navbar-toggle { background-color: #263511; } .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { background-color: #415A1E; } .navbar-toggle span { color: #ffffff; } ul.main-navigation-menu > li a { border-bottom-color: #354A1A; border-top-color: #658C2F; color: #ffffff; } ul.main-navigation-menu > li a > i { color: #ffffff; font-weight: normal; } ul.main-navigation-menu > li.active > a { background: #E6674A !important; border-top: none !important; color: #fff; } ul.main-navigation-menu > li.active > a .selected:before { color: #E6674A !important; } ul.main-navigation-menu > li.active > a i { color: #fff; } ul.main-navigation-menu > li.open > a, ul.main-navigation-menu > li > a:hover, ul.main-navigation-menu > li:hover > a { background-color: #2E4015; } .navigation-toggler, .go-top { background-color: #2E4015 !important; color:#5E832C; } .navigation-toggler:hover i:first-child, .go-top:hover { color: #7CAD3A; } .navigation-toggler:hover i:last-child { color: #5E832C; } .navigation-small .navigation-toggler:hover i:first-child { color: #5E832C; } .navigation-small .navigation-toggler:hover i:last-child { color: #7CAD3A; } ul.main-navigation-menu li > ul.sub-menu > li.open > a, ul.main-navigation-menu li > ul.sub-menu > li.active > a, ul.main-navigation-menu li > ul.sub-menu > li > a:hover { color: #ffffff !important; background: #314417 !important; } .breadcrumb i { color: #cccccc; } .breadcrumb a { color: #007AFF; } .footer-fixed .footer { background: rgba(38, 53, 17, 0.9) !important; border-top-color: #354A1A; } .footer-inner { color: #ffffff; } .main-content .container { border-left: none; border-bottom: none; } @media (max-width: 767px) { .navbar-inverse { background: none !important; } .navbar-tools { background: rgba(38, 53, 17, 0.9); border-top-color: #354A1A; } .navbar-header { background-color: #263511; } } assets/css/theme_navy.css000064400000010004152510437570011513 0ustar00body, .main-container, .footer, .main-navigation, ul.main-navigation-menu > li > ul.sub-menu, .navigation-small ul.main-navigation-menu > li > ul.sub-menu { background-color: #34485e !important; } .layout-boxed header, .layout-boxed .main-container, .layout-boxed .footer { border-left-color:#455F77; border-right-color:#455F77; } .navbar-inverse { background: #466078; background: -moz-linear-gradient(top, #466078 0%, #334c68 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#466078), color-stop(100%,#334c68)); border-color:#2B394A; } .navbar-inverse .navbar-brand, .navbar-inverse .navbar-brand:hover, .navbar-inverse .nav > li > a { color: #A7B4D1; } .navbar-inverse .navbar-brand i, .navbar-inverse .navbar-brand:hover i { color: #ffffff; } .navbar-inverse .nav > li > a { color: #A7B4D1; text-shadow: 0 1px 0 #000000; } .navbar-inverse .nav > li.current-user > a { color: #ffffff !important; } .navbar-inverse .nav > li.current-user > a i { display: inline-block; text-align: center; width: 1.25em; color:#ffffff !important; font-size: 12px; } .navbar-inverse .nav > li:hover > a, .navbar-inverse .nav > li:active > a , .navbar-inverse .nav > li:focus > a{ color: #ffffff; background: #2B394A; } .navbar-inverse .nav > li > a:hover, .nav > li > a:focus { background-color: #2B394A; text-decoration: none; } .navbar-inverse .nav li.dropdown.open > .dropdown-toggle, .navbar-inverse .nav li.dropdown.active > .dropdown-toggle, .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { background: #2B394A; color:#ffffff; } .navbar-tools .dropdown-menu li .dropdown-menu-title { background: #2B394A; color: #ffffff; } .navbar-inverse .btn-navbar { background-color: #2B394A; background: -moz-linear-gradient(top, #34485e 0%, #283b52 100%); /* firefox */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#34485e), color-stop(100%,#283b52)); /* webkit */ } .nav > li.dropdown .dropdown-toggle .badge { background-color: #D9534F; border: none; } .navbar-toggle { background-color: #2B394A; color:#D9D9D9; } .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { background-color: #2B394A; -moz-box-shadow: 0 0 15px #fff; -webkit-box-shadow: 0 0 15px #fff; box-shadow: 0px 0px 15px #fff; } .navbar-toggle span{ color:#D9D9D9; } ul.main-navigation-menu > li a { border-bottom-color: #26384C; border-top-color: #6381A1; color: #ffffff; } ul.main-navigation-menu > li a > i { color: #ffffff; font-weight: normal; } ul.main-navigation-menu > li.active > a { background: #E02222 !important; border-top: none !important; color: #fff; } ul.main-navigation-menu > li.active > a .selected:before { color: #E02222 !important; } ul.main-navigation-menu > li.active > a i { color: #fff; } ul.main-navigation-menu > li.open > a, ul.main-navigation-menu > li > a:hover, ul.main-navigation-menu > li:hover > a { background-color: #2B394A; } .navigation-toggler, .go-top { background-color: #2B394A !important; color: #5A7CA3; } .navigation-toggler:hover i:first-child, .go-top:hover { color: #A7B4D1; } .navigation-toggler:hover i:last-child { color: #5A7CA3; } .navigation-small .navigation-toggler:hover i:first-child { color: #5A7CA3; } .navigation-small .navigation-toggler:hover i:last-child { color: #A7B4D1; } ul.main-navigation-menu li > ul.sub-menu > li.open > a, ul.main-navigation-menu li > ul.sub-menu > li.active > a, ul.main-navigation-menu li > ul.sub-menu > li > a:hover { color: #ffffff !important; background: #465E79 !important; } .breadcrumb i { color: #cccccc; } .breadcrumb a { color: #007AFF; } .footer-fixed .footer { background: rgba(43, 57, 74, 0.9); !important; border-top-color: #455F77; } .footer-inner { color: #ffffff; } .main-content .container { border-left: none; border-bottom: none; } @media (max-width: 767px) { .navbar-inverse { background: none !important; } .navbar-tools { background: rgba(43, 57, 74, 0.9); border-top-color: #455F77; } .navbar-header { background-color: #344D69; } } assets/css/print.css000064400000000525152510437600010511 0ustar00.navbar { display: none; } .main-navigation{ display: none; } .hidden-print { display: none; } .breadcrumb { display: none; } .page-header { display: none; } .footer { display: none; } .main-container { margin: 0 !important; padding: 0 !important; } .main-content .container{ min-height: auto !important; border: none !important; }assets/css/theme_light.css000064400000007725152510437600011657 0ustar00body, .main-container, .footer, .main-navigation, ul.main-navigation-menu > li > ul.sub-menu, .navigation-small ul.main-navigation-menu > li > ul.sub-menu { background-color: #F6F6F6 !important; } .layout-boxed header, .layout-boxed .main-container, .layout-boxed .footer { border-left-color: #C8C7CC; border-right-color: #C8C7CC; } .navbar-inverse { background: rgba(255, 255, 255, 0.9); border-color: #C8C7CC; } /* ie8 fixes */ .ie8 .navbar-inverse { background: #ffffff; } /**/ .navbar-inverse .navbar-brand, .navbar-inverse .navbar-brand:hover, .navbar-inverse .nav > li > a { color: #666666; } .navbar-inverse .navbar-brand i, .navbar-inverse .navbar-brand:hover i { color: #007AFF; } .navbar-inverse .nav > li > a { color: #999999; } .navbar-inverse .nav > li.current-user > a { color: #666666 !important; } .navbar-inverse .nav > li.current-user > a i { display: inline-block; text-align: center; width: 1.25em; color: #007AFF !important; font-size: 12px; } .navbar-inverse .nav > li:hover > a, .navbar-inverse .nav > li:active > a { color: #555555; background: #F5F5F5; } .navbar-inverse .nav li.dropdown.open > .dropdown-toggle, .navbar-inverse .nav li.dropdown.active > .dropdown-toggle, .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { background: #D9D9D9; color: #555555; } .navbar-tools .dropdown-menu li .dropdown-menu-title { background: #D9D9D9; color: #555555; } .navbar-inverse .btn-navbar { background-color: #D9D9D9; background: -moz-linear-gradient(top, #34485e 0%, #283b52 100%); /* firefox */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#34485e), color-stop(100%,#283b52)); /* webkit */ } .nav > li.dropdown .dropdown-toggle .badge { background-color: #007AFF; border: none; } .navbar-toggle { background-color: #ffffff; } .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { background-color: #D9D9D9; -moz-box-shadow: 0 0 15px #fff; -webkit-box-shadow: 0 0 15px #fff; box-shadow: 0px 0px 15px #fff; } .navbar-toggle span { color: #999999; } ul.main-navigation-menu > li a { border-bottom: none; border-top-color: #C8C7CC; color: #555555; } ul.main-navigation-menu > li a > i { color: #007AFF; font-weight: normal; } ul.main-navigation-menu > li.active > a { background: #007AFF !important; border-top: none !important; color: #fff; } ul.main-navigation-menu > li.active > a .selected:before { color: #007AFF !important; } ul.main-navigation-menu > li.active > a i { color: #fff; } ul.main-navigation-menu > li.open > a, ul.main-navigation-menu > li > a:hover, ul.main-navigation-menu > li:hover > a { background-color: #D9D9D9; } .navigation-toggler, .go-top { background-color: #E4E5E6 !important; color:#b1b1b1; } .navigation-toggler:hover i:first-child, .go-top:hover { color: #555555; } .navigation-toggler:hover i:last-child { color: #b1b1b1; } .navigation-small .navigation-toggler:hover i:first-child { color: #b1b1b1; } .navigation-small .navigation-toggler:hover i:last-child { color: #555555; } ul.main-navigation-menu li > ul.sub-menu > li.open > a, ul.main-navigation-menu li > ul.sub-menu > li.active > a, ul.main-navigation-menu li > ul.sub-menu > li > a:hover { color: #000000 !important; background: #D9D9D9 !important; } .breadcrumb i { color: #cccccc; } .breadcrumb a { color: #007AFF; } .footer-fixed .footer { background: rgba(255, 255, 255, 0.9) !important; border-top-color: #C8C7CC; } /* ie8 fixes */ .ie8 .footer-fixed .footer { background: #ffffff; } /**/ .footer-inner { color: #555555; } .main-content .container { border-left: 1px solid #D9D9D9; border-bottom: 1px solid #D9D9D9; } body.rtl .main-content .container { border-left: none; border-right: 1px solid #D9D9D9; } @media (max-width: 767px) { .navbar-inverse { background: none !important; } .navbar-tools { background: rgba(255, 255, 255, 0.9); border-top-color: #C8C7CC; } /* ie8 fixes */ .ie8 .navbar-tools { background: #ffffff; } /**/ .navbar-header { background-color: #fff; } } assets/css/theme_dark.css000064400000007521152510437600011463 0ustar00body, .main-container, .footer, .main-navigation, ul.main-navigation-menu > li > ul.sub-menu, .navigation-small ul.main-navigation-menu > li > ul.sub-menu { background-color: #4F4F4F !important; } .layout-boxed header, .layout-boxed .main-container, .layout-boxed .footer { border-left-color:#444444; border-right-color:#444444; } .navbar-inverse { background: rgba(35, 35, 35, 0.9); border-color: #444444; } /* ie8 fixes */ .ie8 .navbar-inverse { background: #272727; } /**/ .navbar-inverse .navbar-brand, .navbar-inverse .navbar-brand:hover, .navbar-inverse .nav > li > a { color: #D9D9D9; } .navbar-inverse .navbar-brand i, .navbar-inverse .navbar-brand:hover i { color: #A47441; } .navbar-inverse .nav > li > a { color: #D9D9D9; } .navbar-inverse .nav > li.current-user > a { color: #D9D9D9 !important; } .navbar-inverse .nav > li.current-user > a i { display: inline-block; text-align: center; width: 1.25em; color:#666666 !important; font-size: 12px; } .navbar-inverse .nav > li:hover > a, .navbar-inverse .nav > li:active > a , .navbar-inverse .nav > li:focus > a{ color: #D9D9D9; background: #4F4F4F; } .navbar-inverse .nav > li > a:hover, .nav > li > a:focus { background-color: #4F4F4F; text-decoration: none; } .navbar-inverse .nav li.dropdown.open > .dropdown-toggle, .navbar-inverse .nav li.dropdown.active > .dropdown-toggle, .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { background: #4F4F4F; color:#ffffff; } .navbar-tools .dropdown-menu li .dropdown-menu-title { background: #4F4F4F; color: #FFFFFF; } .navbar-inverse .btn-navbar { background-color: #D9D9D9; background: -moz-linear-gradient(top, #34485e 0%, #283b52 100%); /* firefox */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#34485e), color-stop(100%,#283b52)); /* webkit */ } .nav > li.dropdown .dropdown-toggle .badge { background-color: #D9534F; border: none; } .navbar-toggle { background-color: #232323; color:#D9D9D9; } .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { background-color: #333333; -moz-box-shadow: 0 0 15px #fff; -webkit-box-shadow: 0 0 15px #fff; box-shadow: 0px 0px 15px #fff; } .navbar-toggle span{ color:#D9D9D9; } ul.main-navigation-menu > li a { border-bottom-color: #404040; border-top-color: #646464; color: #D9D9D9; } ul.main-navigation-menu > li a > i { color: #A47441; font-weight: normal; } ul.main-navigation-menu > li.active > a { background: #A47441 !important; border-top: none !important; color: #fff; } ul.main-navigation-menu > li.active > a .selected:before { color: #A47441 !important; } ul.main-navigation-menu > li.active > a i { color: #fff; } ul.main-navigation-menu > li.open > a, ul.main-navigation-menu > li > a:hover, ul.main-navigation-menu > li:hover > a { background-color: #333333; } .navigation-toggler, .go-top { background-color: #404040 !important; color: #555555; } .navigation-toggler:hover i:first-child, .go-top:hover { color: #b1b1b1; } .navigation-toggler:hover i:last-child { color: #555555; } .navigation-small .navigation-toggler:hover i:first-child { color: #555555; } .navigation-small .navigation-toggler:hover i:last-child { color: #b1b1b1; } ul.main-navigation-menu li > ul.sub-menu > li.open > a, ul.main-navigation-menu li > ul.sub-menu > li.active > a, ul.main-navigation-menu li > ul.sub-menu > li > a:hover { color: #ffffff !important; background: #333333 !important; } .breadcrumb i { color: #cccccc; } .breadcrumb a { color: #007AFF; } .footer-fixed .footer { background: rgba(35, 35, 35, 0.9) !important; border-top-color: #444444; } .footer-inner { color: #D9D9D9; } .main-content .container { border-left: none; border-bottom: none; } @media (max-width: 767px) { .navbar-inverse { background: none !important; } .navbar-tools { background: rgba(35, 35, 35, 0.9); border-top-color: #444444; } } assets/css/theme_black_and_white.css000064400000007520152510437600013637 0ustar00body, .main-container, .footer, .main-navigation, ul.main-navigation-menu > li > ul.sub-menu, .navigation-small ul.main-navigation-menu > li > ul.sub-menu { background-color: #F6F6F6 !important; } .layout-boxed header, .layout-boxed .main-container, .layout-boxed .footer { border-left-color: #C8C7CC; border-right-color: #C8C7CC; } .navbar-inverse { background: rgba(35, 35, 35, 0.9); border-color: #C8C7CC; } /* ie8 fixes */ .ie8 .navbar-inverse { background: #383838; } /**/ .navbar-inverse .navbar-brand, .navbar-inverse .navbar-brand:hover, .navbar-inverse .nav > li > a { color: #ffffff; } .navbar-inverse .navbar-brand i, .navbar-inverse .navbar-brand:hover i { color: #E4E5E6; } .navbar-inverse .nav > li > a { color: #F6F6F6; } .navbar-inverse .nav > li.current-user > a { color: #F6F6F6 !important; } .navbar-inverse .nav > li.current-user > a i { display: inline-block; text-align: center; width: 1.25em; color: #000000 !important; font-size: 12px; } .navbar-inverse .nav > li:hover > a, .navbar-inverse .nav > li:active > a { color: #ffffff; background: #232323; } .navbar-inverse .nav > li > a:hover, .nav > li > a:focus { background-color: #232323; text-decoration: none; } .navbar-inverse .nav li.dropdown.open > .dropdown-toggle, .navbar-inverse .nav li.dropdown.active > .dropdown-toggle, .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { background: #232323; color: #ffffff; } .navbar-tools .dropdown-menu li .dropdown-menu-title { background: #232323; color: #ffffff; } .navbar-inverse .btn-navbar { background-color: #D9D9D9; background: -moz-linear-gradient(top, #34485e 0%, #283b52 100%); /* firefox */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#34485e), color-stop(100%,#283b52)); /* webkit */ } .nav > li.dropdown .dropdown-toggle .badge { background-color: #000000; border: none; } .navbar-toggle { background-color: #232323; } .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { background-color: #383838; } .navbar-toggle span { color: #ffffff; } ul.main-navigation-menu > li a { border-bottom: none; border-top-color: #C8C7CC; color: #555555; } ul.main-navigation-menu > li a > i { color: #333333; font-weight: normal; } ul.main-navigation-menu > li.active > a { background: #232323 !important; border-top: none !important; color: #fff; } ul.main-navigation-menu > li.active > a .selected:before { color: #232323 !important; } ul.main-navigation-menu > li.active > a i { color: #fff; } ul.main-navigation-menu > li.open > a, ul.main-navigation-menu > li > a:hover, ul.main-navigation-menu > li:hover > a { background-color: #D9D9D9; } .navigation-toggler, .go-top { background-color: #E4E5E6 !important; color:#b1b1b1; } .navigation-toggler:hover i:first-child, .go-top:hover { color: #555555; } .navigation-toggler:hover i:last-child { color: #b1b1b1; } .navigation-small .navigation-toggler:hover i:first-child { color: #b1b1b1; } .navigation-small .navigation-toggler:hover i:last-child { color: #555555; } ul.main-navigation-menu li > ul.sub-menu > li.open > a, ul.main-navigation-menu li > ul.sub-menu > li.active > a, ul.main-navigation-menu li > ul.sub-menu > li > a:hover { color: #000000 !important; background: #D9D9D9 !important; } .breadcrumb i { color: #cccccc; } .breadcrumb a { color: #007AFF; } .footer-fixed .footer { background: rgba(35, 35, 35, 0.9) !important; border-top-color: #C8C7CC; } .footer-inner { color: #555555; } .main-content .container { border-left: 1px solid #D9D9D9; border-bottom: 1px solid #D9D9D9; } body.rtl .main-content .container { border-left: none; border-right: 1px solid #D9D9D9; } @media (max-width: 767px) { .navbar-inverse { background: none !important; } .navbar-tools { background: rgba(35, 35, 35, 0.9); border-top-color: #C8C7CC; } .navbar-header { background-color: #232323; } } assets/plugins/datepicker/css/datepicker.css000064400000011531152510437600015263 0ustar00/*! * Datepicker for Bootstrap * * Copyright 2012 Stefan Petre * Licensed under the Apache License v2.0 * http://www.apache.org/licenses/LICENSE-2.0 * */ .datepicker { top: 0; left: 0; padding: 4px; margin-top: 1px; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; /*.dow { border-top: 1px solid #ddd !important; }*/ } .datepicker:before { content: ''; display: inline-block; border-left: 7px solid transparent; border-right: 7px solid transparent; border-bottom: 7px solid #ccc; border-bottom-color: rgba(0, 0, 0, 0.2); position: absolute; top: -7px; left: 6px; } .datepicker:after { content: ''; display: inline-block; border-left: 6px solid transparent; border-right: 6px solid transparent; border-bottom: 6px solid #ffffff; position: absolute; top: -6px; left: 7px; } .datepicker > div { display: none; } .datepicker table { width: 100%; margin: 0; } .datepicker td, .datepicker th { text-align: center; width: 20px; height: 20px; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .datepicker td.day:hover { background: #eeeeee; cursor: pointer; } .datepicker td.day.disabled { color: #eeeeee; } .datepicker td.old, .datepicker td.new { color: #999999; } .datepicker td.active, .datepicker td.active:hover { color: #ffffff; background-color: #006dcc; background-image: -moz-linear-gradient(top, #0088cc, #0044cc); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); background-image: -o-linear-gradient(top, #0088cc, #0044cc); background-image: linear-gradient(to bottom, #0088cc, #0044cc); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); border-color: #0044cc #0044cc #002a80; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); *background-color: #0044cc; /* Darken IE7 buttons by default so they stand out more given they won't have borders */ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); color: #fff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); } .datepicker td.active:hover, .datepicker td.active:hover:hover, .datepicker td.active:focus, .datepicker td.active:hover:focus, .datepicker td.active:active, .datepicker td.active:hover:active, .datepicker td.active.active, .datepicker td.active:hover.active, .datepicker td.active.disabled, .datepicker td.active:hover.disabled, .datepicker td.active[disabled], .datepicker td.active:hover[disabled] { color: #ffffff; background-color: #0044cc; *background-color: #003bb3; } .datepicker td.active:active, .datepicker td.active:hover:active, .datepicker td.active.active, .datepicker td.active:hover.active { background-color: #003399 \9; } .datepicker td span { display: block; width: 47px; height: 54px; line-height: 54px; float: left; margin: 2px; cursor: pointer; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .datepicker td span:hover { background: #eeeeee; } .datepicker td span.active { color: #ffffff; background-color: #006dcc; background-image: -moz-linear-gradient(top, #0088cc, #0044cc); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); background-image: -o-linear-gradient(top, #0088cc, #0044cc); background-image: linear-gradient(to bottom, #0088cc, #0044cc); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); border-color: #0044cc #0044cc #002a80; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); *background-color: #0044cc; /* Darken IE7 buttons by default so they stand out more given they won't have borders */ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); color: #fff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); } .datepicker td span.active:hover, .datepicker td span.active:focus, .datepicker td span.active:active, .datepicker td span.active.active, .datepicker td span.active.disabled, .datepicker td span.active[disabled] { color: #ffffff; background-color: #0044cc; *background-color: #003bb3; } .datepicker td span.active:active, .datepicker td span.active.active { background-color: #003399 \9; } .datepicker td span.old { color: #999999; } .datepicker th.switch { width: 145px; } .datepicker th.next, .datepicker th.prev { font-size: 21px; } .datepicker thead tr:first-child th { cursor: pointer; } .datepicker thead tr:first-child th:hover { background: #eeeeee; } .input-append.date .add-on i, .input-prepend.date .add-on i { display: block; cursor: pointer; width: 16px; height: 16px; }assets/plugins/datepicker/js/bootstrap-datepicker.js000064400000032720152510437600016751 0ustar00/* ========================================================= * bootstrap-datepicker.js * http://www.eyecon.ro/bootstrap-datepicker * ========================================================= * Copyright 2012 Stefan Petre * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ========================================================= */ !function( $ ) { // Picker object var Datepicker = function(element, options){ this.element = $(element); this.format = DPGlobal.parseFormat(options.format||this.element.data('date-format')||'mm/dd/yyyy'); this.picker = $(DPGlobal.template) .appendTo('body') .on({ click: $.proxy(this.click, this)//, //mousedown: $.proxy(this.mousedown, this) }); this.isInput = this.element.is('input'); this.component = this.element.is('.date') ? this.element.find('.add-on') : false; if (this.isInput) { this.element.on({ focus: $.proxy(this.show, this), //blur: $.proxy(this.hide, this), keyup: $.proxy(this.update, this) }); } else { if (this.component){ this.component.on('click', $.proxy(this.show, this)); } else { this.element.on('click', $.proxy(this.show, this)); } } this.minViewMode = options.minViewMode||this.element.data('date-minviewmode')||0; if (typeof this.minViewMode === 'string') { switch (this.minViewMode) { case 'months': this.minViewMode = 1; break; case 'years': this.minViewMode = 2; break; default: this.minViewMode = 0; break; } } this.viewMode = options.viewMode||this.element.data('date-viewmode')||0; if (typeof this.viewMode === 'string') { switch (this.viewMode) { case 'months': this.viewMode = 1; break; case 'years': this.viewMode = 2; break; default: this.viewMode = 0; break; } } this.startViewMode = this.viewMode; this.weekStart = options.weekStart||this.element.data('date-weekstart')||0; this.weekEnd = this.weekStart === 0 ? 6 : this.weekStart - 1; this.onRender = options.onRender; this.fillDow(); this.fillMonths(); this.update(); this.showMode(); }; Datepicker.prototype = { constructor: Datepicker, show: function(e) { this.picker.show(); this.height = this.component ? this.component.outerHeight() : this.element.outerHeight(); this.place(); $(window).on('resize', $.proxy(this.place, this)); if (e ) { e.stopPropagation(); e.preventDefault(); } if (!this.isInput) { } var that = this; $(document).on('mousedown', function(ev){ if ($(ev.target).closest('.datepicker').length == 0) { that.hide(); } }); this.element.trigger({ type: 'show', date: this.date }); }, hide: function(){ this.picker.hide(); $(window).off('resize', this.place); this.viewMode = this.startViewMode; this.showMode(); if (!this.isInput) { $(document).off('mousedown', this.hide); } //this.set(); this.element.trigger({ type: 'hide', date: this.date }); }, set: function() { var formated = DPGlobal.formatDate(this.date, this.format); if (!this.isInput) { if (this.component){ this.element.find('input').prop('value', formated); } this.element.data('date', formated); } else { this.element.prop('value', formated); } }, setValue: function(newDate) { if (typeof newDate === 'string') { this.date = DPGlobal.parseDate(newDate, this.format); } else { this.date = new Date(newDate); } this.set(); this.viewDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1, 0, 0, 0, 0); this.fill(); }, place: function(){ var offset = this.component ? this.component.offset() : this.element.offset(); this.picker.css({ top: offset.top + this.height, left: offset.left }); }, update: function(newDate){ this.date = DPGlobal.parseDate( typeof newDate === 'string' ? newDate : (this.isInput ? this.element.prop('value') : this.element.data('date')), this.format ); this.viewDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1, 0, 0, 0, 0); this.fill(); }, fillDow: function(){ var dowCnt = this.weekStart; var html = ''; while (dowCnt < this.weekStart + 7) { html += ''+DPGlobal.dates.daysMin[(dowCnt++)%7]+''; } html += ''; this.picker.find('.datepicker-days thead').append(html); }, fillMonths: function(){ var html = ''; var i = 0 while (i < 12) { html += ''+DPGlobal.dates.monthsShort[i++]+''; } this.picker.find('.datepicker-months td').append(html); }, fill: function() { var d = new Date(this.viewDate), year = d.getFullYear(), month = d.getMonth(), currentDate = this.date.valueOf(); this.picker.find('.datepicker-days th:eq(1)') .text(DPGlobal.dates.months[month]+' '+year); var prevMonth = new Date(year, month-1, 28,0,0,0,0), day = DPGlobal.getDaysInMonth(prevMonth.getFullYear(), prevMonth.getMonth()); prevMonth.setDate(day); prevMonth.setDate(day - (prevMonth.getDay() - this.weekStart + 7)%7); var nextMonth = new Date(prevMonth); nextMonth.setDate(nextMonth.getDate() + 42); nextMonth = nextMonth.valueOf(); var html = []; var clsName, prevY, prevM; while(prevMonth.valueOf() < nextMonth) { if (prevMonth.getDay() === this.weekStart) { html.push(''); } clsName = this.onRender(prevMonth); prevY = prevMonth.getFullYear(); prevM = prevMonth.getMonth(); if ((prevM < month && prevY === year) || prevY < year) { clsName += ' old'; } else if ((prevM > month && prevY === year) || prevY > year) { clsName += ' new'; } if (prevMonth.valueOf() === currentDate) { clsName += ' active'; } html.push(''+prevMonth.getDate() + ''); if (prevMonth.getDay() === this.weekEnd) { html.push(''); } prevMonth.setDate(prevMonth.getDate()+1); } this.picker.find('.datepicker-days tbody').empty().append(html.join('')); var currentYear = this.date.getFullYear(); var months = this.picker.find('.datepicker-months') .find('th:eq(1)') .text(year) .end() .find('span').removeClass('active'); if (currentYear === year) { months.eq(this.date.getMonth()).addClass('active'); } html = ''; year = parseInt(year/10, 10) * 10; var yearCont = this.picker.find('.datepicker-years') .find('th:eq(1)') .text(year + '-' + (year + 9)) .end() .find('td'); year -= 1; for (var i = -1; i < 11; i++) { html += ''+year+''; year += 1; } yearCont.html(html); }, click: function(e) { e.stopPropagation(); e.preventDefault(); var target = $(e.target).closest('span, td, th'); if (target.length === 1) { switch(target[0].nodeName.toLowerCase()) { case 'th': switch(target[0].className) { case 'switch': this.showMode(1); break; case 'prev': case 'next': this.viewDate['set'+DPGlobal.modes[this.viewMode].navFnc].call( this.viewDate, this.viewDate['get'+DPGlobal.modes[this.viewMode].navFnc].call(this.viewDate) + DPGlobal.modes[this.viewMode].navStep * (target[0].className === 'prev' ? -1 : 1) ); this.fill(); this.set(); break; } break; case 'span': if (target.is('.month')) { var month = target.parent().find('span').index(target); this.viewDate.setMonth(month); } else { var year = parseInt(target.text(), 10)||0; this.viewDate.setFullYear(year); } if (this.viewMode !== 0) { this.date = new Date(this.viewDate); this.element.trigger({ type: 'changeDate', date: this.date, viewMode: DPGlobal.modes[this.viewMode].clsName }); } this.showMode(-1); this.fill(); this.set(); break; case 'td': if (target.is('.day') && !target.is('.disabled')){ var day = parseInt(target.text(), 10)||1; var month = this.viewDate.getMonth(); if (target.is('.old')) { month -= 1; } else if (target.is('.new')) { month += 1; } var year = this.viewDate.getFullYear(); this.date = new Date(year, month, day,0,0,0,0); this.viewDate = new Date(year, month, Math.min(28, day),0,0,0,0); this.fill(); this.set(); this.element.trigger({ type: 'changeDate', date: this.date, viewMode: DPGlobal.modes[this.viewMode].clsName }); } break; } } }, mousedown: function(e){ e.stopPropagation(); e.preventDefault(); }, showMode: function(dir) { if (dir) { this.viewMode = Math.max(this.minViewMode, Math.min(2, this.viewMode + dir)); } this.picker.find('>div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).show(); } }; $.fn.datepicker = function ( option, val ) { return this.each(function () { var $this = $(this), data = $this.data('datepicker'), options = typeof option === 'object' && option; if (!data) { $this.data('datepicker', (data = new Datepicker(this, $.extend({}, $.fn.datepicker.defaults,options)))); } if (typeof option === 'string') data[option](val); }); }; $.fn.datepicker.defaults = { onRender: function(date) { return ''; } }; $.fn.datepicker.Constructor = Datepicker; var DPGlobal = { modes: [ { clsName: 'days', navFnc: 'Month', navStep: 1 }, { clsName: 'months', navFnc: 'FullYear', navStep: 1 }, { clsName: 'years', navFnc: 'FullYear', navStep: 10 }], dates:{ days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"], months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] }, isLeapYear: function (year) { return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)) }, getDaysInMonth: function (year, month) { return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] }, parseFormat: function(format){ var separator = format.match(/[.\/\-\s].*?/), parts = format.split(/\W+/); if (!separator || !parts || parts.length === 0){ throw new Error("Invalid date format."); } return {separator: separator, parts: parts}; }, parseDate: function(date, format) { var parts = date.split(format.separator), date = new Date(), val; date.setHours(0); date.setMinutes(0); date.setSeconds(0); date.setMilliseconds(0); if (parts.length === format.parts.length) { var year = date.getFullYear(), day = date.getDate(), month = date.getMonth(); for (var i=0, cnt = format.parts.length; i < cnt; i++) { val = parseInt(parts[i], 10)||1; switch(format.parts[i]) { case 'dd': case 'd': day = val; date.setDate(val); break; case 'mm': case 'm': month = val - 1; date.setMonth(val - 1); break; case 'yy': year = 2000 + val; date.setFullYear(2000 + val); break; case 'yyyy': year = val; date.setFullYear(val); break; } } date = new Date(year, month, day, 0 ,0 ,0); } return date; }, formatDate: function(date, format){ var val = { d: date.getDate(), m: date.getMonth() + 1, yy: date.getFullYear().toString().substring(2), yyyy: date.getFullYear() }; val.dd = (val.d < 10 ? '0' : '') + val.d; val.mm = (val.m < 10 ? '0' : '') + val.m; var date = []; for (var i=0, cnt = format.parts.length; i < cnt; i++) { date.push(val[format.parts[i]]); } return date.join(format.separator); }, headTemplate: ''+ ''+ '‹'+ ''+ '›'+ ''+ '', contTemplate: '' }; DPGlobal.template = ''; }( window.jQuery );assets/plugins/datepicker/less/datepicker.less000064400000003746152510437600015630 0ustar00/*! * Datepicker for Bootstrap * * Copyright 2012 Stefan Petre * Licensed under the Apache License v2.0 * http://www.apache.org/licenses/LICENSE-2.0 * */ .datepicker { top: 0; left: 0; padding: 4px; margin-top: 1px; .border-radius(4px); &:before { content: ''; display: inline-block; border-left: 7px solid transparent; border-right: 7px solid transparent; border-bottom: 7px solid #ccc; border-bottom-color: rgba(0,0,0,.2); position: absolute; top: -7px; left: 6px; } &:after { content: ''; display: inline-block; border-left: 6px solid transparent; border-right: 6px solid transparent; border-bottom: 6px solid @white; position: absolute; top: -6px; left: 7px; } >div { display: none; } table{ width: 100%; margin: 0; } td, th{ text-align: center; width: 20px; height: 20px; .border-radius(4px); } td { &.day:hover { background: @grayLighter; cursor: pointer; } &.day.disabled { color: @grayLighter; } &.old, &.new { color: @grayLight; } &.active, &.active:hover { .buttonBackground(@btnPrimaryBackground, spin(@btnPrimaryBackground, 20)); color: #fff; text-shadow: 0 -1px 0 rgba(0,0,0,.25); } span { display: block; width: 47px; height: 54px; line-height: 54px; float: left; margin: 2px; cursor: pointer; .border-radius(4px); &:hover { background: @grayLighter; } &.active { .buttonBackground(@btnPrimaryBackground, spin(@btnPrimaryBackground, 20)); color: #fff; text-shadow: 0 -1px 0 rgba(0,0,0,.25); } &.old { color: @grayLight; } } } th { &.switch { width: 145px; } &.next, &.prev { font-size: @baseFontSize * 1.5; } } thead tr:first-child th { cursor: pointer; &:hover{ background: @grayLighter; } } /*.dow { border-top: 1px solid #ddd !important; }*/ } .input-append, .input-prepend { &.date { .add-on i { display: block; cursor: pointer; width: 16px; height: 16px; } } }assets/plugins/autosize/package.json000064400000001017152510437600013662 0ustar00{ "name": "jquery-autosize", "description": "Automatically adjust textarea height based on user input.", "version": "1.17.8", "dependencies": {}, "keywords": [ "form", "textarea", "ui", "jQuery" ], "authors": [ { "name": "Jack Moore", "url": "http://www.jacklmoore.com", "email": "hello@jacklmoore.com" } ], "licenses": [ { "type": "MIT", "url": "http://www.opensource.org/licenses/mit-license.php" } ], "homepage": "http://www.jacklmoore.com/autosize", "main": "jquery.autosize.js" }assets/plugins/autosize/jquery.autosize.min.js000064400000006151152510437600015701 0ustar00/*! Autosize v1.17.8 - 2013-09-07 Automatically adjust textarea height based on user input. (c) 2013 Jack Moore - http://www.jacklmoore.com/autosize license: http://www.opensource.org/licenses/mit-license.php */ (function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(window.jQuery||window.$)})(function(e){var t,o={className:"autosizejs",append:"",callback:!1,resizeDelay:10},i=' assets/plugins/autosize/readme.md000064400000014025152510437600013156 0ustar00## Autosize Small jQuery plugin to allow dynamic resizing of textarea height, so that it grows as based on visitor input. To use, just call the `.autosize()` method on any textarea element. Example `$('textarea').autosize();`. See the [project page](http://jacklmoore.com/autosize/) for documentation, caveats, and a demonstration. Released under the [MIT license](http://www.opensource.org/licenses/mit-license.php). ## Changelog ### v1.17.8 - 2013/9/7 * Minor change to not append the mirror element when the plugin is applied to an empty jQuery collection ### v1.17.7 - 2013/9/3 * Reverted to an earlier fix for a Chrome issue. Too many issues with using setSelectionRange. ### v1.17.6 - 2013/8/24 * Fixed a potential issue introduced in 1.17.4 that causes an 'NS_ERROR_FAILURE' error in Firefox. ### v1.17.5 - 2013/8/23 * Fixed oversight in 1.17.4 that caused FireFox fix not to be applied. ### v1.17.4 - 2013/8/22 * Improved speed of editing large blocks of text in FireFox. ### v1.17.3 - 2013/8/2013 * Resolved an issue that was causing slowing down initialization for large blocks of text in Chrome. * Renamed minified file from jquery.autosize-min.js to jquery.autosize.min.js ### v1.17.2 - 2013/7/28 * Added support for loading as an AMD module. * Added package.json for installing through NPM. ### v1.17.1 - 2013/6/22 * Fixed potential memory leak when using autosize.destroy. ### v1.17.0 - 2013/6/19 * Renamed 'autosize' event to 'autosize.resize' * Renamed 'autosize.includeStyle' event to 'autosize.resizeIncludeStyle' * Fixes problem introduced in 1.16.18 with manually triggering the 'autosize' event: ### v1.16.20 - 2013/6/18 * Minor improvement to the destroy event. ### v1.16.19 - 2013/6/18 * Added event for removing autosize from a textarea element: $('textarea.example').trigger('autosize.destroy'); ### v1.16.18 - 2013/6/18 * Added event for manually triggering resize that also accounts for typographic styles that have changed on the textarea element. Example: $('textarea.example').css('text-indent', 25); $('textarea.example').trigger('autosize.includeStyle'); * Minor optimization ### v1.16.17 - 2013/6/12 * Fixed a compatibility issue with jQuery versions before 1.9 introduced in the previous update. ### v1.16.16 - 2013/6/11 * Fixed an issue where the calculated height might be slightly off in modern browsers when the width of the textarea has a sub-pixel value. ### v1.16.15 - 2013/6/7 * Reduced how frequently autosize is triggered when resizing the window. Added resizeDelay property so that the frequency can be adjusted or disabled. ### v1.16.14 - 2013/6/6 * Fixed an issue with autosize working poorly if the mirror element has a transition applied to it's width. ### v1.16.13 - 2013/6/4 * Fixed a Chrome cursor position issue introduced with the reflow workaround added in 1.16.10. ### v1.16.12 - 2013/5/31 * Much better efficiency and smoothness for IE8 and lower. ### v1.16.11 - 2013/5/31 * Fixed a default height issue in IE8 and lower. ### v1.16.10 - 2013/5/30 * Dropped scrollHeight for scrollTop. This fixed a height problem relating to padding. (Fixes #70) * Re-added workaround to get Chrome to reflow text after hiding overflow. ### v1.16.9 - 2013/5/20 * Reverted change from 1.16.8 as it caused an issue in IE8. (Fixes #69) ### v1.16.8 - 2013/5/7 * Fixed issue where autosize was creating a horizontal scrollbar for a user ### v1.16.7 - 2013/3/20 * Added workaround for a very edge-case iOS bug (Fixes #58). ### v1.16.6 - 2013/3/12 * Replaced jQuery shorthand methods with on() in anticipation of jQuery 2.0 conditional builds ### v1.16.5 - 2013/3/12 * Fixed a bug where triggering the autosize event immediately after assigning autosize had no effect. ### v1.16.4 - 2013/1/29 * Fixed a conflict with direction:ltr pages. ### v1.16.3 - 2013/1/23 * Added minified file back to repository ### v1.16.2 - 2013/1/20 * Minor box-sizing issue dealing with min-heights. ### v1.16.1 - 2013/1/20 * Added to plugins.jquery.com ### v1.15 - 2012/11/16 * Reworked to only create a single mirror element, instead of one for each textarea. * Dropped feature detection for FF3 and Safari 4. ### v1.14 - 2012/10/6 * Added 'append' option for appending whitespace to the end of the height calculation (an extra newline improves the apperance when animating). * Added a demonstration of animating the height change using a CSS transition. ### v1.13 - 2012/9/21 * Added optional callback that fires after resize. ### v1.12 - 2012/9/3 * Fixed a bug I introduced in the last update. ### v1.11 - 2012/8/8 * Added workaround to get Chrome to reflow default text better. ### v1.10 - 2012/4/30 * Added 'lineHeight' to the list of styles considered for size detection. ### v1.9 - 2012/6/19 * Added 'textIndent' to the list of styles considered for size detection. * Added vender prefixes to box-sizing detection ### v1.8 - 2012/6/7 * Added conditional so that autosize cannot be applied twice to the same element * When autosize is applied to an element, it will have a data property that links it to the mirrored textarea element. This will make it easier to keep track of and remove unneeded mirror elements. Example: $('textarea.example').data('mirror').remove(); // delete the mirror $('textarea.example').remove(); // delete the original ### v1.7 - 2012/5/3 * Now supports box-sizing:border-box ### v1.6 - 2012/2/11 * added binding to allow autosize to be triggered manually. Example: $('#myTextArea').trigger('autosize'); ### v1.5 - 2011/12/7 * fixed a regression in detecting FireFox support ### v1.4 - 2011/11/22 * added branching to exclude old browsers (FF3- & Safari4-) ### v1.3 - 2011/11/13 * fixed a regression in 1.1 relating to Opera. ### v1.2 - 2011/11/10 * fixed a regression in 1.1 that broke autosize for IE9. ### v1.1 - 2011/11/10 * autosize now follows the max-height of textareas. OverflowY will be set to scroll once the content height exceeds max-height. ### v1.0 - 2011/11/7 * first release assets/plugins/colorbox/README.md000064400000066050152510437600012647 0ustar00## About Colorbox: A customizable lightbox plugin for jQuery. See the [project page](http://jacklmoore.com/colorbox/) for documentation and a demonstration, and the [FAQ](http://jacklmoore.com/colorbox/faq/) for solutions and examples to common issues. Released under the [MIT license](http://www.opensource.org/licenses/mit-license.php). ## Changelog: ### Version 1.4.32 - 2013/10/16 * Updated stylesheets to avoid issue with using `div {max-width:100%}` (Fixes #520) ### Version 1.4.31 - 2013/9/25 * Used setAttribute to set londesc, so that the value is accessible via DOM Node longDesc property #508 ### Version 1.4.30 - 2013/9/24 * Added longdesc and aria-describedby attributes to photos. Fixes #508 ### Version 1.4.29 - 2013/9/10 * Fixed a slideshow regression from 1.4.27 * Fixed a potential issue with the starting size of #cboxLoadedContent ### Version 1.4.28 - 2013/9/4 * Fixed a potential issue with using the open property with mixed slideshow and non-slideshow groups ### Version 1.4.27 - 2013/7/16 * Fixed a width calculation issue relating to using margin:auto on #cboxLoadedContent. ### Version 1.4.26 - 2013/6/30 * Fixed a regression in IE7 and IE8 that was causing an error. ### Version 1.4.25 - 2013/6/28 * Use an animation speed of zero between same-sized content (fixed). * Removed temporary fix for jQuery UI 1.8 ### Version 1.4.24 - 2013/6/24 * Added closeButton option. Set to false to remove the close button. ### Version 1.4.23 - 2013/6/23 * Bugfix loading overlay/graphic append order ### Version 1.4.22 - 2013/6/19 * Updated manifest files for the jQuery plugin repository and Bower (no changes to plugin) ### Version 1.4.21 - 2013/6/6 * Replaced new Image() with document.createElement('img') to avoid a potential bug in Chrome 27. ### Version 1.4.20 - 2013/6/5 * Fixing bug/typo from last update. ### Version 1.4.19 - 2013/6/3 * Fixed bug where Colorbox was capturing ctrl+click on assigned links on windows browsers with jQuery 1.7+, rather than ignoring. ### Version 1.4.18 - 2013/5/30 * Fixed a scroll position issue when using $.colorbox.resize() ### Version 1.4.17 - 2013/5/23 * Possible fix for a Chrome 27 issue (https://github.com/jackmoore/colorbox/pull/438#issuecomment-18334804) ### Version 1.4.16 - 2013/5/20 * Added trapFocus setting to allow disabling of focus trapping ### Version 1.4.15 - 2013/4/22 * Added .webp to list of recognized image extensions ### Version 1.4.14 - 2013/4/16 * Added fadeOut property to control the closing fadeOut speed. * Removed longdesc attribute for now. ### Version 1.4.13 - 2013/4/11 * Fixed an error involving IE7/IE8 and legacy versions of jQuery ### Version 1.4.12 - 2013/4/9 * Fixed a potential conflict with Twitter Bootstrap default img styles. ### Version 1.4.11 - 2013/4/9 * Added `type='button'` to buttons to prevent accidental form submission * Added alt and longdesc attributes to photo content if they are present on the calling element. ### Version 1.4.10 - 2013/4/2 * Better 'old IE' feature detection that fixes an error with jQuery 2.0.0pre. ### Version 1.4.9 - 2013/4/2 * Fixes bug introduced in previous version. ### Version 1.4.8 - 2013/4/2 * Dropped IE6 support. * Fixed other issues with $.colorbox.remove. ### Version 1.4.7 - 2013/4/1 * Prevented an error if $.colorbox.remove is called during the transition. ### Version 1.4.6 - 2013/3/19 * Minor change to work around a jQuery 1.4.2 bug for legacy users. ### Version 1.4.5 - 2013/3/10 * Minor change to apply the close and className properties sooner. ### Version 1.4.4 - 2013/3/10 * Fixed an issue with percent-based heights in iOS * Fixed an issue with ajax requests being applied at the wrong time. ### Version 1.4.3 - 2013/2/18 * Made image preloading aware of retina settings. ### Version 1.4.2 - 2013/2/18 * Removed $.contains for compatibility with jQuery 1.3.x ### Version 1.4.1 - 2013/2/14 * Ignored left and right arrow keypresses if combined with the alt key. ### Version 1.4.0 - 2013/2/12 * Better accessibility: * Replaced div controls with buttons * Tabbed navigation confined to modal window * Added aria role ### Version 1.3.34 - 2013/2/4 * Updated manifest for plugins.jquery.com ### Version 1.3.33 - 2013/2/4 * Added retina display properties: retinaImage, retinaUrl, retinaSuffix * Fixed iframe scrolling on iOS devices. ### Version 1.3.32 - 2013/1/31 * Improved internal event subscribing & fixed event bug introduced in v1.3.21 ### Version 1.3.31 - 2013/1/28 * Fixed a size-calculation bug introduced in the previous commit. ### Version 1.3.30 - 2013/1/25 * Delayed border-width calculations until after opening, to avoid a bug in FF when using Colorbox in a hidden iframe. ### Version 1.3.29 - 2013/1/24 * Fixes bug with bubbling delegated events, introduced in the previous commit. ### Version 1.3.28 - 2013/1/24 * Fixed compatibility issue with old versions of jQuery (1.3.2-1.4.2) ### Version 1.3.27 - 2013/1/23 * Added className property. ### Version 1.3.26 - 2013/1/23 * Minor bugfix: clear the onload event handler after photo has loaded. ### Version 1.3.25 - 2013/1/23 * Removed grunt file & added Bower component.json. ### Version 1.3.24 - 2013/1/22 * Added generated files (jquery.colorbox.js / jquery.colorbox-min.js) back to the repository. ### Version 1.3.23 - 2013/1/18 * Minor bugfix for calling Colorbox on empty jQuery collections without a selector. ### Version 1.3.22 - 2013/1/17 * Recommit for plugins.jquery.com ### Version 1.3.21 - 2013/1/15 Files Changed: *.js * Fixed compatability issues with jQuery 1.9 ### Version 1.3.20 - August 15 2012 Files Changed:jquery.colorbox.js * Added temporary workaround for jQuery-UI 1.8 bug (http://bugs.jquery.com/ticket/12273) * Added *.jpe extension to the list of image types. ### Version 1.3.19 - December 08 2011 Files Changed:jquery.colorbox.js, colorbox.css (all) * Fixed bug related to using the 'fixed' property. * Optimized the setup procedure to be more efficient. * Removed $.colorbox.init() as it will no longer be needed (will self-init when called). * Removed use of $.browser. ### Version 1.3.18 - October 07 2011 Files Changed:jquery.colorbox.js/jquery.colorbox-min.js, colorbox.css (all) and example 1's controls.png * Fixed a regression where Flash content displayed in Colorbox would be reloaded if the browser window was resized. * Added safety check to make sure that Colorbox's markup is only added to the DOM a single time, even if $.colorbox.init() is called multiple times. This will allow site owners to manually initialize Colorbox if they need it before the DOM has finished loading. * Updated the example index.html files to be HTML5 compliant. * Changed the slideshow behavior so that it immediately moves to the next slide when the slideshow is started. * Minor regex bugfix to allow automatic detection of image URLs that include fragments. ### Version 1.3.17 - May 11 2011 Files Changed:jquery.colorbox.js/jquery.colorbox-min.js * Added properties "top", "bottom", "left" and "right" to specify a position relative to the viewport, rather than using the default centering. * Added property "data" to specify GET or POST data when using Ajax. Colorbox's ajax functionality is handled by jQuery's .load() method, so the data property works the same way as it does with .load(). * Added property "fixed" which can provide fixed positioning for Colorbox, rather than absolute positioning. This will allow Colorbox to remain in a fixed position within the visitors viewport, despite scrolling. IE6 support for this was not added, it will continue to use the default absolute positioning. * Fixed ClearType problem with IE7. * Minor fixes. ### Version 1.3.16 - March 01 2011 Files Changed:jquery.colorbox.js/jquery.colorbox-min.js, colorbox.css (all) and example 4 background png files * Better IE related transparency workarounds. IE7 and up now uses the same background image sprite as other browsers. * Added error handling for broken image links. A message will be displayed telling the user that the image could not be loaded. * Added new property: 'fastIframe' and set it to true by default. Setting to fastIframe:false will delay the loading graphic removal and onComplete event until iframe has completely loaded. * Ability to redefine $.colorbox.close (or prev, or next) at any time. ### Version 1.3.15 - October 27 2010 Files Changed: jquery.colorbox.js/jquery.colorbox-min.js * Minor fixes for specific cases. ### Version 1.3.14 - October 27 2010 Files Changed: jquery.colorbox.js/jquery.colorbox-min.js * In IE6, closing an iframe when using HTTPS no longer generates a security warning. ### Version 1.3.13 - October 22 2010 Files Changed: jquery.colorbox.js/jquery.colorbox-min.js * Changed the index.html example files to use YouTube's new embedded link format. * By default, Colorbox returns focus to the element it was launched from once it closes. This can now be disabled by setting the 'returnFocus' property to false. Focus was causing problems for some users who had their anchor elements inside animated containers. * Minor bug fix involved in using a combination of slideshow and non-slideshow content. ### Version 1.3.12 - October 20 2010 Files Changed: jquery.colorbox.js/jquery.colorbox-min.js * Minor bug fix involved in preloading images when using a function as a value for the href property. ### Version 1.3.11 - October 19 2010 Files Changed: jquery.colorbox.js/jquery.colorbox-min.js * Fixed the slideshow functionality that broke with 1.3.10 * The slideshow now respects the loop property. ### Version 1.3.10 - October 16 2010 Files Changed: jquery.colorbox.js/jquery.colorbox-min.js * Fixed compatibility with jQuery 1.4.3 * The 'open' property now accepts a function as a value, like all of the other properties. * Preloading now loads the correct href for images when using a dynamic (function) value for the href property. * Fixed bug in Safari 3 for Win where Colorbox centered on the document, rather than the visitor's viewport. * May have fixed an issue in Opera 10.6+ where Colorbox would rarely/randomly freeze up while switching between photos in a group. * Some functionality better encapsulated & minor performance improvements. ### Version 1.3.9 - July 7 2010 Files Changed: jquery.colorbox.js/jquery.colorbox-min.js/ all colorbox.css (the core styles) * Fixed a problem where iframed youtube videos would cause a security alert in IE. * More code is event driven now, making the source easier to grasp. * Removed some unnecessary style from the core CSS. ### Version 1.3.8 - June 21 2010 Files Changed: jquery.colorbox.js/jquery.colorbox-min.js * Fixed a bug in Chrome where it would sometimes render photos at 0 by 0 width and height (behavior introduced in recent update to Chrome). * Fixed a bug where the onClosed callback would fire twice (only affected 1.3.7). * Fixed a bug in IE7 that existed with some iframed websites that use JS to reposition the viewport caused Colorbox to move out of position. * Abstracted the identifiers (HTML ids & classes, and JS plugin name, method, and events) so that the plugin can be easily rebranded. * Small changes to improve either code readability or compression. ### Version 1.3.7 - June 13 2010 Files Changed: jquery.colorbox.js/jquery.colorbox-min.js/index.html * $.colorbox can now be used for direct calls and accessing public methods. Example: $.colorbox.close(); * Resize now accepts 'width', 'innerWidth', 'height' and 'innerHeight'. Example: $.colorbox.resize({width:"100%"}) * Added option (loop:false) to disable looping in a group. * Added options (escKey:false, arrowKey:false) to disable esc-key and arrow-key bindings. * Added method for removing Colorbox from a document: $.colorbox.remove(); * Fixed a bug where iframed URLs would be truncated if they contained an unencoded apostrophe. * Now uses the exact href specified on an anchor, rather than the version returned by 'this.href'. This was causing "#example" to be normalized to "http://domain/#example" which interfered with how some users were setting up links to inline content. * Changed example documents over to HTML5. ### Version 1.3.6 - Jan 13 2010 Files Changed: jquery.colorbox.js/jquery.colorbox-min.js * Small change to make Colorbox compatible with jQuery 1.4 ### Version 1.3.5 - December 15 2009 Files Changed: jquery.colorbox.js/jquery.colorbox-min.js * Fixed a bug introduced in 1.3.4 with IE7's display of example 2 and 3, and auto-width in Opera. * Fixed a bug introduced in 1.3.4 where colorbox could not be launched by triggering an element's click event through JavaScript. * Minor refinements. ### Version 1.3.4 - December 5 2009 Files Changed: jquery.colorbox.js/jquery.colorbox-min.js * Event delegation is now used for elements that Colorbox is assigned to, rather than individual click events. * Additional callbacks have been added to represent other stages of Colorbox's lifecycle. Available callbacks, in order of their execution: onOpen, onLoad, onComplete, onCleanup, onClosed These take place at the same time as the event hooks, but will be better suited than the hooks for targeting specific instances of Colorbox. * Ajax content is now immediately added to the DOM to be more compatible if that content contains script tags. * Focus is now returned to the calling element on closing. * Fixed a bug where maxHeight and maxWidth did not work for non-photo content. * Direct calls no longer need 'open:true', it is assumed. Example: `$.colorbox({html:'

Hi

'});` ### Version 1.3.3 - November 7 2009 Files Changed: jquery.colorbox.js/jquery.colorbox-min.js * Changed $.colorbox.element() to return a jQuery object rather the DOM element. * jQuery.colorbox-min.js is compressed with Google's Closure Compiler rather than YUI Compressor. ### Version 1.3.2 - October 27 2009 Files Changed: jquery.colorbox.js/jquery.colorbox-min.js * Added 'innerWidth' and 'innerHeight' options to allow people to easily set the size dimensions for Colorbox, without having to anticipate the size of the borders and buttons. * Renamed 'scrollbars' option to 'scrolling' to be in keeping with the existing HTML attribute. The option now also applies to iframes. * Bug fix: In Safari, positioning occassionally incorrect when using '100%' dimensions. * Bug fix: In IE6, the background overlay is briefly not full size when first viewing. * Bug fix: In Firefox, opening Colorbox causes a split second shift with a small minority of webpage layouts. * Simplified code in a few areas. ### Version 1.3.1 - September 16 2009 Files Changed: jquery.colorbox.js/jquery.colorbox-min.js/colorbox.css/colorbox-ie.css(removed) * Removed the IE-only stylesheets and conditional comments for example styles 1 & 4. All CSS is handled by a single CSS file for all examples. * Removed user-agent sniffing from the js and replaced it with feature detection. This will allow correct rendering for visitors masking their agent type. ### Version 1.3.0 - September 15 2009 Files Changed: jquery.colorbox.js/jquery.colorbox-min.js/colorbox.css * Added $.colorbox.resize() method to allow Colorbox to resize it's height if it's contents change. * Added 'scrollbars' option to allow users to turn off scrollbars when using the resize() method. * Renamed the 'resize' option to be less ambiguous. It's now 'scalePhotos'. * Renamed the 'cbox_close' event to be less ambiguous. It's now 'cbox_cleanup'. It is the first thing to happen in the close method while the 'cbox_closed' event is the last to happen. * Fixed a bug with the slideshow mouseover graphics that appeared after Colorbox is opened a 2nd time. * Fixed a bug where ClearType may not work in IE6&7 if using the fade transition. * Minor code optimizations to increase compression. ### Version 1.2.9 - August 7 2009 Files Changed: jquery.colorbox.js/jquery.colorbox-min.js * Minor change to enable use with $.getScript(); * Minor change to the timing of the 'cbox_load' event so that it is more useful. * Added a direct link to a YouTube video to the examples. ### Version 1.2.8 - August 5 2009 Files Changed: jquery.colorbox.js/jquery.colorbox-min.js * Fixed a bug with the overlay in IE6 * Fixed a bug where left & right keypress events might be prematurely unbound. ### Version 1.2.7 - July 31 2009 Files Changed: jquery.colorbox.js/jquery.colorbox-min.js, example stylesheets and background images (core styles have not changed and the updates will not affect existing user themes / old example themes) * Code cleanup and reduction, better organization and documentation in the full source. * Added ability to use functions in place of static values for Colorbox's options (thanks Ken!). * Added an option for straight HTML. Example: `$.colorbox({html:'

Howdy

', open:true})` * Added an event for the beginning of the closing process. This is in addition to the event that already existed for when Colorbox had completely closed. 'cbox_close' and 'cbox_closed' respectively. * Fixed a minor bug in IE6 that would cause a brief content shift in the parent document when opening Colorbox. * Fixed a minor bug in IE6 that would reveal select elements that had a hidden visibility after closing Colorbox. * The 'esc' key is unbound now when Colorbox is not open, to avoid any potential conflicts. * Used background sprites for examples 1 & 4. Put IE-only (non-sprite) background images in a separate folder. * Example themes 1, 3, & 4 received slight visual tweaks. * Optimized pngs for smaller file size. * Added slices, grid, and correct sizing to the Adobe Illustrator file, all theme files are now export ready! ### Version 1.2.6 - July 15 2009 Files Changed: jquery.colorbox.js/jquery.colorbox-min.js * Fixed a bug with fixed width/height images in Opera 9.64. * Fixed a bug with trying to set a value for rel during a direct call to Colorbox. Example: `$.colorbox({rel:'foo', open:true});` * Changed how href/rel/title settings are determined to avoid users having to manually update Colorbox settings if they use JavaScript to update any of those attributes, after Colorbox has been defined. * Fixed a FF3 bug where the back button was disabled after closing an iframe. ### Version 1.2.5 - June 23 2009 Files Changed: jquery.colorbox.js/jquery.colorbox-min.js * Changed the point at which iframe srcs are set (to eliminate the need to refresh the iframe once it has been added to the DOM). * Removed unnecessary return values for a very slight code reduction. ### Version 1.2.4 - June 9 2009 Files Changed: jquery.colorbox.js, jquery.colorbox-min.js * Fixed an issue where Colorbox may not close completely if it is closed during a transition animation. * Minor code reduction. ### Version 1.2.3 - June 4 2009 * Fixed a png transparency stacking issue in IE. * More accurate Ajax auto-sizing if the user was depending on the #cboxLoadedContent ID for CSS styling. * Added a public function for returning the current html element that Colorbox is associated with. Example use: var that = $.colorbox.element(); * Added bicubic scaling for resized images in the original IE7. * Removed the IE6 stylesheet and png files from Example 3. It now uses the same png file for the controls that the rest of the browsers use (an alpha transparency PNG8). This example now only has 2 graphics files and 1 stylesheet. ### Version 1.2.2 - May 28 2009 * Fixed an issue with the 'resize' option. ### Version 1.2.1 - May 28 2009 * Note: If you are upgrading, update your jquery.colorbox.js and colorbox.css files. * Added photo resizing. * Added a maximum width and maximum height. Example: {height:800, maxHeight:'100%'}, would allow the box to be a maximum potential height of 800px, instead of a fixed height of 800px. With maxHeight of 100% the height of Colorbox cannot exceed the height of the browser window. * Added 'rel' setting to add the ability to set an alternative rel for any Colorbox call. This allows the user to group any combination of elements together for a gallery, or to override an existing rel. attribute so those element are not grouped together, without having to alter their rel in the HTML. * Added a 'photo' setting to force Colorbox to display a link as a photo. Use this when automatic photo detection fails (such as using a url like 'photo.php' instead of 'photo.jpg', 'photo.jpg#1', or 'photo.jpg?pic=1') * Removed the need to ever create disposable elements to call colorbox on. Colorbox can now be called directly, without being associated with any existing element, by using the following format: `$.colorbox({open:true, href:'yourLink.xxx'});` * Colorbox settings are now persistent and unique for each element. This allows for extremely flexible options for individual elements. You could use this to create a gallery in which each page in the gallery has different settings. One could be a photo with a fade transition, next could be an inline element with an elastic transition with a set width and height, etc. * For user callbacks, 'this' now refers to the element colorbox was opened from. * Fixed a minor grouping issue with IE6, when transition type is set to 'none'. * Added an Adobe Illustrator file that contains the borders and buttons used in the various examples. ### Version 1.2 - May 13 2009 * Added a slideshow feature. * Added re-positioning on browser resize. If the browser is resized, Colorbox will recenter itself onscreen. * Added hooks for key events: cbox_open, cbox_load, cbox_complete, cbox_closed. * Fixed an IE transparency-stacking problem, where transparent PNGs would show through to the background overlay. * Fixed an IE iframe issue where the ifame might shift up and to the left under certain circumstances. * Fixed an IE6 bug where the loading overlay was not at full height. * Removed the delay in switching between same-sized gallery content when using transitions. * Changed how iframes are loaded to make it more compatible with iframed pages that use DOM dependent JavaScript. * Changed how the JS is structured to be better organized and increase compression. Increased documentation. * Changed CSS :hover states to a .hover class. This sidesteps a minor IE8 bug with css hover states and allows easier access to hover state user styles from the JavaScript. * Changed: elements added to the DOM have new ID's. The naming is more consistent and less likely to cause conflicts with existing website stylesheets. All stylesheets have been updated. * Changed the behavior for prev/next links so that Colorbox does not get hung up on broken links. A visitor can now skip through broken or long-loading links by clicking prev/next buttons. * Changed the naming of variables in the parameter map to be more concise and intuitive. * Removed colorbox.css. Combined the colorbox.css styles with jquery.colorbox.js: the css file was not large enough to warrant being a separate file. ### Version 1.1.6 - April 28 2009 * Prevented the default action of the next & previous anchors and the left and right keys for gallery mode. * Fixed a bug where the title element was being added back to the DOM when closing Colorbox while using inline content. * Fixed a bug where IE7 would crash for example 2. * Smaller filesize: removed a small amount of unused code and rewrote the HTML injection with less syntax. * Added a public method for closing Colorbox: $.colorbox.close(). This will allow iframe users to add an event to close Colorbox without having to create an additional function. ### Version 1.1.5 - April 11 2009 * Fixed minor issues with exiting Colorbox. ### Version 1.1.4 - April 08 2009 * Fixed a bug in the fade transition where Colorbox not close completely if instructed to close during the fade-in portion of the transition. ### Version 1.1.3 - April 06 2009 * Fixed an IE6&7 issue with using Colorbox to display animated GIFs. ### Version 1.1.2 - April 05 2009 * Added ability to change content when Colorbox is already open. * Added vertical photo centering now works for all browsers (this feature previously excluded IE6&7). * Added namespacing to the esc-key keydown event for people who want to disable it: "keydown.colorClose" * Added 'title' setting to add the ability to set an alternative title for any Colorbox call. * Fixed rollover navigation issue with IE8. (Added JS-based rollover state due to a browser-bug.) * Fixed an overflow issue for when the fixed width/height is smaller than the size of a photo. * Fixed a bug in the fade transition where the border would still come up if Colorbox was closed mid-transition. * Switch from JSMin to Yui Compressor for minification. Minified code now under 7KB. ### Version 1.1.1 - March 31 2009 * More robust image detection regex. Now detects image file types with url fragments and/or query strings. * Added 'nofollow' exception to rel grouping. * Changed how images are loaded into the DOM to prevent premature size calculation by Colorbox. * Added timestamp to iframe name to prevent caching - this was a problem in some browsers if the user had multiple iframes and the visitor left the page and came back, or if they refreshed the page. ### Version 1.1.0 - March 21 2009 * Animation is now much smoother and less resource intensive. * Added support for % sizing. * Callback option added. * Inline content now preserves JavaScript events, and changes made while Colorbox is open are also preserved. * Added 'href' setting to add the ability to set an alternative href for any anchor, or to assign the Colorbox event to non-anchors. Example: $('button').colorbox({'href':'process.php'}) Example: $('a[href='http://msn.com']).colorbox({'href':'http://google.com', iframe:true}); * Photos are now horizontally centered if they are smaller than the lightbox size. Also vertically centered for browsers newer than IE7. * Buttons in the examples are now included in the 'protected zone'. The lightbox will never expand it's borders or buttons beyond an accessible area of the screen. * Keypress events don't queue up by holding down the arrow keys. * Added option to close Colorbox by clicking on the background overlay. * Added 'none' transition setting. * Changed 'contentIframe' and 'contentInline' to 'inline' and 'iframe'. Removed 'contentAjax' because it is automatically assumed for non-image file types. * Changed 'contentWidth' and 'contentHeight' to 'fixedWidth' and 'fixedHeight'. These sizes now reflect the total size of the lightbox, not just the inner content. This is so users can accurately anticipate % sizes without fear of creating scrollbars. * Clicking on a photo will now switch to the next photo in a set. * Loading.gif is more stable in it's position. * Added a minified version. * Code passes JSLint. ### Version 1.0.5 - March 11 2009 * Redo: Fixed a bug where IE would cut off the bottom portion of a photo, if the photo was larger than the document dimensions. ### Version 1.0.4 - March 10 2009 * Added an option to allow users to automatically open the lightbox. Example usage: $(".colorbox").colorbox({open:true}); * Fixed a bug where IE would cut off the bottom portion of a photo, if the photo was larger than the document dimensions. ### Version 1.0.3 - March 09 2009 * Fixed vertical centering for Safari 3.0.x. ### Version 1.0.2 - March 06 2009 * Corrected a typo. * Changed the content-type check so that it does not assume all links to photos should actually display photos. This allows for Ajax/inline/and iframe calls on anchors linking to picture file types. ### Version 1.0.1 - March 05 2009 * Fixed keydown events (esc, left arrow, right arrow) for Webkit browsers. ### Version 1.0 - March 03 2009 * First release assets/plugins/colorbox/colorbox.ai000064400000713461152510437600013537 0ustar00%PDF-1.4 % 1 0 obj <> endobj 2 0 obj <>stream application/vnd.adobe.illustrator colorbox Adobe Illustrator CS4 2009-05-27T04:22:39-04:00 2009-07-30T21:43:35-05:00 2009-07-30T21:43:35-05:00 208 256 JPEG /9j/4AAQSkZJRgABAgEBLAEsAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABABLAAAAAEA AQEsAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADQAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXnn5b+fNd85T6us6W9jHpkiRL6KOzOzl9zzagACdMVZt9U1D/lt/5Jr/AFxV gf5ZfmZrHmfzJrei39vBGNIaSNbiEODIYpjFUqzNStK4q9JxV2KuxV2KuxV2KuxV2KuxV2KvG/Pf 5jfmBY/mDL5Z8twpdMyRNb2/pKzktEHf4jTYbmpxVQ/xJ/zkV/1Y1/4G3/6qYqh9G/ND8zYvPml+ WvMdtHZSXcsXqwtEgYwyEjkjKSCDQioPXFXueKvBB+aX5r6n5k1HSdAtI717OSX4EiT4Y0fiCzOV H44qmH+JP+civ+rGv/A2/wD1UxVd5F/Nbzde6/qVh5lMVnHpcEj3aNGIzG0TANyPgBiqbeU/z18v eZdcl0izkZZ2kZLEPEw9aONOTS1pRQTUKCa+OKqdh+fvlm882Dy+kzAycYoLkxsFN16jRtbsCOuy lWFVNaVr1VRfnv8AN5/Jt9AmpWLvp1zbyPBexFWrcx7iEx1BFV/aO340VR+r/mFqWj+Sl8x6lYGG aOOGS808MrPH6jKHVW2VivLbpX2xVMtC8622vaLFq+lzLPaTKxRuJHxLUMpBoQQRirDfIf5y6x5n 1DSrWaxhtl1HT7i/dkZmKmC7a2CCoHXjyriqH/5x3/vvNf8AzFQ/rmxV7Lirwb8hv/JkedP+M9z/ ANRhxV7zirsVdirsVdirsVdirsVdirsVeNSf+tKx/wDMKf8AqDOKvZcVeHfmF/60T5T/AOYO0/6i 7nFXuOKvDvyS/wDJleb/AJN/1EHFXuOKvCPKoB/O/wA3AioLSgg/OPFWbeXvLflPTby/m0e1gjnl n5XRjCnhLxHJVP7O1KqPn1OKtQ+W/KaebH1VLaAa4LZVQhVBWIu9XVRtyZmYM3XtiqC8x+VvI2q6 79Y19I7m7WzkRbe5c+mkBPxyIhPFH/yx8W3XbFVeXQvK8/km20meQyeX1jgQPJI3xRqylQ7k1AOw O+2Kp/bWdpb2iWtpEkNsiCOKKIBVVQOICgbAAbDFWE+SPKfkrTL7TZ9Eu7i4ltrCeCzEtaNbPdM8 jtVE3EzFR0+XfFVH/nHf++81/wDMVD+ubFXsuKvBvyG/8mR50/4z3P8A1GHFXvOKuxV2KuxV2Kux V2KuxV2KuxV4tfgH/nISYHcfUl/6h1xV6LwT+Ufdil5J5sAH/OQPlWgp/o1r0/5ibjFD3/FXg/5T gHzt5xqK/vk6/wDGWbFXqnBP5R92KXlnlqJJPzo80xNUI8AU8SVNDFCNitCD7jFDLfL3kW10fUZL xLiWQh2MKsduDClHH7RB74qttvIVnD5iGrfWZSqfvEj5GplZmJJbrwoR8Pfvttiqt5q8pyeYJ4Vl uBDawRuU4oDJ6zbAlj+xtuBT5+CqM1DRrrUPLf6LnlRJ5I40mljWiAggsVTbw2GKo3SNNg0uwgso Gd4oBRWkYsx+k/qG2KpD5W8sajpU1k9y0TC3spraT02J+OS5MwIqo24/jiqS/wDOO/8Afea/+YqH 9c2KvZcVeDfkN/5Mjzp/xnuf+ow4q95xV2KuxV2KuxV2KuxV2KuxV2KvA/OPmPTvL356y6jqJZbM W0cUsiKXKc4AAxUbkA9ab4qyL/ldX5a/9XZv+kW7/wCqWKsFm8z6R5m/PLy5qGkO81lALa19Z0aM O6yySEqrgNQeqBuBvXtvir6UxV81eTfOmheWPPHmY6zI8EF5MwjnVHkUNFK54ssYZvi57bYqzv8A 5XV+Wv8A1dm/6Rbv/qlirFfy41m11v8ANXXtVtAwtbqImHmKMVT04wxHblwrir2LFLsVdirsVdir sVeef847/wB95r/5iof1zYoey4q8G/Ib/wAmR50/4z3P/UYcVe84q7FXYq7FXYq7FXYq7FXYq7FU p1Dyj5X1G6a7v9Ktbq6cAPNNEjuQooKkiuwGKob/AJV95G/6sNh/0jx/0xVVtfJPlC0uY7m10azg uIWDxSxworKw6EEDY4qnWKpHN5F8mTSvLLollJLISzu0EZJYmpJNMVWf8q+8jf8AVhsP+keP+mKo rT/KfljTpjNYaXa2sxHEyQxIjFT2qoGKph9Utv8AfS/dirvqlt/vpfuxV31S2/30v3Yq76pbf76X 7sVd9Utv99L92Ku+qW3++l+7FXj/APzjwQLjzUhNGNzCwU9aVl3pir2XFXg35DD/AJCN5zb9lprk q3Yj62emKvecVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVSyfy1oU2 5soUbpySNUNPCoGKqH+D9B/5ZhiqN03RdK0xOFhaRWwIofSRUJHvxAxVG4q7FXYq7FXYq7FXYq7F XYqg9H1jTdZ0u11XTLhLqwvI1mt54yCrI4qP7R2xVL/OHm6x8qaNca1qNrdTabaL6l3NaRiYxJWh ZkDB+I7kKaDc7Yq84/6Gu/Kj0DcV1P0AokMv1GTgELcA3KtKc/hr47Yq9J8pea7PzTo1vrNha3UG nXiCW0lu41iMsbfZdU5F+LdQSBUbjbFUdrOs6ZoulXWq6pcJa2FlG01zPIaKqIKn5nwHfFUZirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir8t7NtVW2nltHmS3gCvcNGzKq8mCK TQjck0xV9Tf84pyar5v/AC088eUtS1CZ7GaM2dq8hMpgXULeaOXhyPTYNx6Vr44qxf8A6Fe/OhtP Hllv0WNHEwYXv1iSgYOT6/GnPdTTjx+iu+Kss/5y2utV8sfl/wCTPLWnX80diA1vcshMbTixgiSI vxPT4i3HpX5DFXyrdvqzW0El28z209XgaRmZGKEoSKkioNRir9SMVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVfnX5S85aNpmjNFND6bwAGSJAC0xJA5DkRU+IJxV71/wA4TyrN a+dJUHFZLq0dR4BhOR0xV9NYq+ZP+c25FjsvJsjCqpdXbMPYLCcVeC+YvOOiXnl4WyQCea4B9KNw AYCCRzPGtG8ADv32xV+iuKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvhDQ P+cTvzc1nSbbU1gsrGO6jWWKC7uCk3BxyUskaScag9CajuMVfSX/ADjl+TmsflroGpx61cwz6nqs 8ckkVsWeKOOFWVBzZULMeZJ28MVeu4q8h/5yN/JzWfzK0HS49EuoYNS0qeR0iuSyRSRzqqv8aq5D LwUjanXFXzb5h/5xQ/NzRdJudTaCzv4rSNpZobOcvNwQcmKo6R8qDsu57DFX3hirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdir4I0T/nKf8AOHSNKttMi1CC5htIxFFLc26SS8FF FDPsWoNqnfxxV9Mf843fnBrf5j+XtSbXIYk1TSZ445Li3UokscysyEoSeLDgwNNumKvX8VePf85J fnDrv5ceX9LbQoIX1LVp5I1uLhS6RRwKrOQgK1di60rt12xV80a7/wA5S/m/rGkXWlzahb28F5G0 M0ltbpHL6bijBX+LjUbVG/hir74xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV8lfkx+Uv5Sa1+Wlxd6peLeXGprGupX/NIZbF0kST6vGZAwiPNQGcirg7fCcVZD/zhpbW1sfPd tauZLaC/t44HJDFo09dVNRQGoHbFX0pir5q/5zNt7e5/wLb3LcLea+uI5nqFojegGNTsNjiqTfnD +T/5PaP+U8OoWF/Hp+oaajrpV7zWaTUHaR5DbycKeqxZyA4HwAb/AAjFX1dirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdir8vLF9eSxu7exFx9Sv1WO8jiDmOUROJEDgCh4uoI8M VfRv/OPmm+ffKv5QeePN1gq6dLEgvbFb+BnjuYtPhlkn+Csb7g8UcNTlXFV7f85FfnGvkL/GBuNH +r8liFl9RufW9RpjHUn1eAi4rX1a0LfB9rFW/wDnI7SPPnmL8qfJPmbUE/SVwVa61L6hAVhthfQx yRfADJJxAXizs1OVOlaYq+br+XX3sbS2vvrP1HT1eOyilDiOISyGVwgIoOTsSfHFX6h4q7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqhNI0nT9I0y10vToEtrGzjWG3gjAVVRBQA AUGKq91bW91bS2tzGs1vOjRTROKq6OOLKw7gg0xV45H/AM4lflEmofWfT1BrblU6cbtvq5Tlz9I/ D6vDlvTnir2SCCG3gjggRYoYlCRRoAqqqiiqoHQAYqhtY0jTtZ0q70rUoFubC9iaC5gcAqyOKEb/ AIYqjMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirqitO/hirsVcSBudsVdirSujEhWBI60NaYq3irsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdiq2WP1Inj5MnNSvNDRlqKVB33GKpL5U8sy6DbzwyahPf8ArSM49diQlXZv hBrQtyq57nfFVlj5WmtvM9zrbalczJPHwWzd6otWZuO/7CcvgHY1xVT82eU5tdmtJI7sWwtg/JeD MJQzI3pycXSsZ4bjFU21vTm1LSLuwWT0muomiEtK8eQpWm3TFVawtTaWUFqZpLgwoqGeU8pH4inJ j3JxVJvKflmfQ2vDJOswuW5LxBFP3ssm9f8AjLirIMVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVU7o3ItpTaqj3QRjAkrFIzJT4Q7KHIWvUhT8sVYV+VN9+a93pt8fzEsbOyu0uHFj9 UapaMyyVDgM6hUHERnqVoWq1TiqjomofnBJ+Z+p2urafYxeREgrYXUTn1i3qSek37RaRlH71DRVH EjeoZVT/ADT1L807S90lPI9s1xayrINZcQwStDF6sIEsHrSwhp1Vn4Rn4WFSegxVlPnWbzFD5S1e Xy2nq6+lrI2lx0VuVwF/dij/AA7t44qi9Bk1qTRbF9cihg1hoUOoRWrM8KzcfjEbMAeNf9s9cVYT +UepfmTevrI86JOoikA0717eO3BT61dL8PppHy/crD1r2Pc4q9FxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVQmmkDiOIcpCK09vE4qome+hHO ZF9MHcqa0riqMRgyhh3xVvFXYq7FXYq7FXYq7FVOW5ghkhjkfi9w5ihG/wAThGkI/wCAjY4q3PPF bwSTzNwiiUvI57KoqTt7YqlekebvLusXLWum3q3M6IZGRVcUQEKT8SgdWGKppJNDEAZHVAenIgV+ /FWzJGE9QsAlK86ilPGuKujlikFY3VwNiVIIr9GKtLPA7lFkVnFaqCCduu2KpTqnnLyxpdwba/1G KG4H2ovidl7/ABBA1PpxVB/8rJ8kf9XWP/gJf+aMVTzTtSsNStVurC4S5t2NBJGaio6g+B9sVS1f OnlhtT/Ra36m/wDVNv6HF6+qG4la8adffFU7xV2KuxV2KuxVBqf9ytP+KW/4kuKrtV/4583yH6xi qpZ/7zp8hiqtirsVdirsVdirsVdiqFvbH6zc2E3Ph9SnafjSvPlBLDxrUU/vq19sVUfMP/HA1P8A 5hJ/+TbYq8l/JT/lKrr/AJgZP+T0WKvSPM/6aEMg0uWK3vXdfSmncRp6QQ1XkUk35e21a+2Kooi4 FoZEAjFWMRk+JFkMYCu1APh9Tlv71xVC6IuuNYn9IzQ3V6FkEklqCE4FgY4+RJ5OFrvXb8SqttDr bapcrNc2sun8h+joIUYTxkFd5KmihRy5Cn9MVeIaDpF75m8wpZ+uFuLx3kmuJKt0Bd2I7nFWXa/+ TtzpmkXWoQamt0bWNpXhaH0qogqxDc33A36Yqj/yMkflrMfI8ALdgvap9QVxVjdt/wCTYP8A22ZP +ohsVe9Yq7FVK5mEMTOe2KqKQ3MirJ63HkAeIWvXfrXFVS3lYu8TmrxkAn5iuKqKf8dX/ni3/Elx Vdqv/HPm+Q/WMVVbP/eZPkMVVsVdirsVdirsVdirsVQ9zexW81pC4YteSmCIrSgYRSTVapG3GI/T iqH8w/8AHA1P/mEn/wCTbYq8l/JT/lKrr/mBk/5PRYq9G83+ZH0Wyku/q0t2ElWJbWBpFkasZcuP TSRiB37AVPtlmLHxmrphOXCLR0uozLZSSAPP6aPIFg+KSULEsojj2WrNyoNq5ADemV7IHy55jn1P ShffU7mxEglCw3gIb92VHqry+P0zy/a8NttzPJDhNXaISsWssfMc82vX2miwvofqFC19Op+rzfEg 4KT8PJ/UqnHw+jDLHUQbG6BOzVPGPJ2uxeX/ADJb6hcxNJFDzSaNaBwHUoaVpuK9MqZvQPM35t6B eaDfWVjDcPcXcLwL6iKiKJFKsxIZjsDttiqF/Iz+91n/AFbf9cmKsdtv/JsH/tsyf9RDYq96xV2K oe+hMtuyDqRiqHi1KKONIpI5A6gKaCo2264qq2il5pZypUSEEA9aAU/hiq1P+Or/AM8W/wCJLiq7 Vf8AjnzfIfrGKqtn/vMnyGKq2KuxV2KuxV2KuxV2Koe5soria0mcsGs5TPEFpQsYpIaNUHbjKfpx VdeWsd3Zz2khIjuI3icrQMFdSppWu++Ksd8r/l5ovlvUJL6xmuZJZIjAyztGy8WZWqOKIa1Qd8VZ HJbRSPzNVelOSMVJHgeJFcVd9Vg9IRcfgB5ChIIbx5V5V964q2ltChY0LFxRi5Lkjw+Inb2xVYll AjKRyITdFZ2ZR8gSRirFta/Kvytqt9JeuJ7WaYl5hbOqqzHqxV1cAn2xVL/+VKeVf+Wq+/5GQ/8A VLFWV+XvLOkeX7RrbTYiiueUsjHlI5HQs3t2HTFUmT8s9Bj8wnXhcXX1v6y15wLx+n6jOXIp6fLj U/zYqyWXUbWI0dwDiqn+l7L/AH4MVd+l7L/fgxVb+k9PrXmMVXDVrEdHGKoe0vbe41grGwYiBj9H NcVROsMF02dj0AH6xiqrYsGtYyOlBiqvirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqnc kiFyOtDiqG0tFayR3UF3LFiRufiIxVF+lF/Iv3DFXelF/Iv3DFXelF/Iv3DFXelF/Iv3DFUPLA0c 3rwopfiVI6VBNeo+WKqMxuruMwPCscbbOeXKo8OgxVU0tStvw7KSo+QNMVRmKuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxV2KtMoZSD0OKoJrGdaiCZo1JrxFCPxxVr6nf8A/LW/3D+mKu+p3/8A y1v9w/pirvqd/wD8tb/cP6Yq76nf/wDLW/3D+mKu+p3/APy1v9w/piraWl6D8VyxHyAxVFwxLEgU dsVf/9k= default uuid:65E6390686CF11DBA6E2D887CEACB407 xmp.did:8BC7D877974ADE11BCECCFF09938C3CC uuid:30267148-672c-4d34-8534-e8cce420f815 converted from application/pdf to <unknown> saved xmp.iid:D47F11740720681191099C3B601C4548 2008-04-17T14:19:21+05:30 Adobe Illustrator CS4 / converted from application/pdf to <unknown> converted from application/pdf to <unknown> saved xmp.iid:FD7F11740720681197C1BF14D1759E83 2008-05-16T17:01:20-07:00 Adobe Illustrator CS4 / saved xmp.iid:F77F117407206811BC18AC99CBA78E83 2008-05-19T18:10:15-07:00 Adobe Illustrator CS4 / converted from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator saved xmp.iid:FB7F117407206811B628E3BF27C8C41B 2008-05-22T14:26:44-07:00 Adobe Illustrator CS4 / converted from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator saved xmp.iid:08C3BD25102DDD1181B594070CEB88D9 2008-05-28T16:51:46-07:00 Adobe Illustrator CS4 / converted from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator saved xmp.iid:F77F11740720681192B0DFFC927805D7 2008-05-30T21:26:38-07:00 Adobe Illustrator CS4 / converted from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator saved xmp.iid:F87F11740720681192B0DFFC927805D7 2008-05-30T21:27-07:00 Adobe Illustrator CS4 / converted from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator saved xmp.iid:F97F1174072068119098B097FDA39BEF 2008-06-02T13:26:10-07:00 Adobe Illustrator CS4 / saved xmp.iid:8BC7D877974ADE11BCECCFF09938C3CC 2009-05-27T04:22:07-04:00 Adobe Illustrator CS4 / uuid:32300939-b1c4-8440-b812-b255b7b0d326 xmp.did:F97F1174072068119098B097FDA39BEF uuid:65E6390686CF11DBA6E2D887CEACB407 proof:pdf Web Document 1 True False 1024.000000 768.000000 Pixels Cyan Magenta Yellow Black Default Swatch Group 0 White RGB PROCESS 255 255 255 Black RGB PROCESS 0 0 0 RGB Red RGB PROCESS 255 0 0 RGB Yellow RGB PROCESS 255 255 0 RGB Green RGB PROCESS 0 255 0 RGB Cyan RGB PROCESS 0 255 255 RGB Blue RGB PROCESS 0 0 255 RGB Magenta RGB PROCESS 255 0 255 R=193 G=39 B=45 RGB PROCESS 193 39 45 R=237 G=28 B=36 RGB PROCESS 237 28 36 R=241 G=90 B=36 RGB PROCESS 241 90 36 R=247 G=147 B=30 RGB PROCESS 247 147 30 R=251 G=176 B=59 RGB PROCESS 251 176 59 R=252 G=238 B=33 RGB PROCESS 252 238 33 R=217 G=224 B=33 RGB PROCESS 217 224 33 R=140 G=198 B=63 RGB PROCESS 140 198 63 R=57 G=181 B=74 RGB PROCESS 57 181 74 R=0 G=146 B=69 RGB PROCESS 0 146 69 R=0 G=104 B=55 RGB PROCESS 0 104 55 R=34 G=181 B=115 RGB PROCESS 34 181 115 R=0 G=169 B=157 RGB PROCESS 0 169 157 R=41 G=171 B=226 RGB PROCESS 41 171 226 R=0 G=113 B=188 RGB PROCESS 0 113 188 R=46 G=49 B=146 RGB PROCESS 46 49 146 R=27 G=20 B=100 RGB PROCESS 27 20 100 R=102 G=45 B=145 RGB PROCESS 102 45 145 R=147 G=39 B=143 RGB PROCESS 147 39 143 R=158 G=0 B=93 RGB PROCESS 158 0 93 R=212 G=20 B=90 RGB PROCESS 212 20 90 R=237 G=30 B=121 RGB PROCESS 237 30 121 R=199 G=178 B=153 RGB PROCESS 199 178 153 R=153 G=134 B=117 RGB PROCESS 153 134 117 R=115 G=99 B=87 RGB PROCESS 115 99 87 R=83 G=71 B=65 RGB PROCESS 83 71 65 R=198 G=156 B=109 RGB PROCESS 198 156 109 R=166 G=124 B=82 RGB PROCESS 166 124 82 R=140 G=98 B=57 RGB PROCESS 140 98 57 R=117 G=76 B=36 RGB PROCESS 117 76 36 R=96 G=56 B=19 RGB PROCESS 96 56 19 R=66 G=33 B=11 RGB PROCESS 66 33 11 R=0 G=0 B=0 RGB PROCESS 0 0 0 R=26 G=26 B=26 RGB PROCESS 26 26 26 R=51 G=51 B=51 RGB PROCESS 51 51 51 R=77 G=77 B=77 RGB PROCESS 77 77 77 R=102 G=102 B=102 RGB PROCESS 102 102 102 R=128 G=128 B=128 RGB PROCESS 128 128 128 R=153 G=153 B=153 RGB PROCESS 153 153 153 R=179 G=179 B=179 RGB PROCESS 179 179 179 R=204 G=204 B=204 RGB PROCESS 204 204 204 R=230 G=230 B=230 RGB PROCESS 230 230 230 R=242 G=242 B=242 RGB PROCESS 242 242 242 R=63 G=169 B=245 RGB PROCESS 63 169 245 R=122 G=201 B=67 RGB PROCESS 122 201 67 R=255 G=147 B=30 RGB PROCESS 255 147 30 R=255 G=29 B=37 RGB PROCESS 255 29 37 R=255 G=123 B=172 RGB PROCESS 255 123 172 R=189 G=204 B=212 RGB PROCESS 189 204 212 R=138 G=138 B=138 1 RGB PROCESS 138 138 138 Adobe PDF library 9.00 endstream endobj 3 0 obj <> endobj 155 0 obj <>/Resources<>/XObject<>>>/Thumb 161 0 R/TrimBox[0.0 0.0 1024.0 768.0]/Type/Page>> endobj 156 0 obj <>stream H-0 aS' Ƌv,$<=FCb8A-F{(V(\E3>IGIykFS>> endobj 161 0 obj <>stream 8;Z\uinRqnec:hag&4%a](-!f93L:A4D\h\gZ/n@lX;HcTPGfEHCj Q%6lr1C^ia9# endstream endobj 163 0 obj [/Indexed/DeviceRGB 255 164 0 R] endobj 164 0 obj <>stream 8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn 6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 160 0 obj <>/ExtGState<>/Font<>/ProcSet[/PDF/Text]>>/Subtype/Form>>stream BT /CS0 cs 0 0 0 scn /GS0 gs /T1_0 1 Tf 0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 12 0 0 -12 -103.0967 -61.2773 Tm [(T)7(his is an A)12(dobe\256 I)-10(llustr)5(a)4(t)6(or\256 F)26(ile tha)4(t w)4(as)]TJ 0 -1.2 TD [(sa)8(v)10(ed without PDF C)11(on)4(t)6(en)4(t)3(.)]TJ 0 -1.2 TD [(T)71(o P)5(lac)6(e or open this \037le in other)]TJ 0 -1.2 TD [(applica)4(tions)11(, it should be r)10(e)-28(-sa)8(v)10(ed fr)10(om)]TJ 0 -1.2 TD [(A)12(dobe I)-10(llustr)5(a)4(t)6(or with the ")3(C)3(r)10(ea)4(t)6(e PDF)]TJ 0 -1.2 TD [(C)11(ompa)4(tible F)26(ile" option tur)-4(ned on. )41(T)7(his)]TJ T* [(option is in the I)-10(llustr)5(a)4(t)6(or Na)4(tiv)10(e F)31(or)-4(ma)4(t)]TJ 0 -1.2 TD [(Options dialog bo)14(x, which appears when)]TJ 0 -1.2 TD [(sa)8(ving an A)12(dobe I)-10(llustr)5(a)4(t)6(or \037le using the)]TJ 0 -1.2 TD [(S)-3(a)8(v)10(e A)6(s c)6(ommand)10(.)]TJ ET endstream endobj 154 0 obj <> endobj 167 0 obj <> endobj 168 0 obj <> endobj 169 0 obj <>stream H|TyPwffz $D#hD[-o!b(/a@e0 E D%"gC Ed= 1M}?l[[{}q|W<U ou@1rl! ٣{g|6cO߫Zche˗;Ӵt9,]tZ:(2C2B#)RGGJlMxlB#S+5JuU,·ّ|:'g'[evv/SidJ6D*NT(#a(coӎL)d~*Y`b 5]EU%||E+ed ~g040 /1l c!R ?a6F=1o,ʰ dIɄ`@! ! :AN"8+z^00s62VsQjz Mt!:=J@j*V$C(0S9)bϴo\3eԐђ: ZatH&p\tײoMEx8"3ꇆ:.LsxJN8։_t%MmNDx3 DGU|_Y) QGDc!,.p0B"G8<"ǿ>}"*|uZnMD"W~fo71[2]|Ir/!~:?ھ[phmH’USZe4Ry 5XqWAe1>0Ι<ȤRnvݻD xmoKh#v܃:y<1E[l!/UXFV #m >d Y rPhA!Aű.qIꃋaE,%@rYz&p=Je2W5hBUdUoԴ^y}p!$M5/u/vҝBl EFX s"O6u-vC$b l@ YE~>h ,s1gtU&AVn Y @הQ.ۈc*.wHW~^h1C֗.YF:Y- L U~OF]^>g/(Irq,> gi^Ck Bc!fvYT pl졉5-ZZΜ/oȿNsWH+cVd&]ߴ,L&!Rj. MZRjt$Hޫ,m_䞮O˹Bx8T>#aE&C!l<9"$:LfSLku-tw*ՎA Lv>SSP]u]̢1Jۚ-c"(S=&53 #+2d, 7*^° ]T=z(B[heE 2V@6LQNǂb@$f1v>Oޱl=iQs}2l ^(߉HZoNoUdG*- kg `"8)v!|ϱ[RQ_ M _˅I"6|Dޗ\S:.|douALVe [`lh'M87°2RVAPIJGӰ=]䣌GE͍ IhHF_wiX$(7V;8(YV`cX2HB c*FU^'BPU{"ܑ\ !isLj=+b3án;S)M@5|b\ ­ }>MzH=͆uBlŀSlN3& U!12bKkqvęSV2x'e@ XȊWeJ8`+=OY/7p7:%pn8nQ5|zIۥq0 f~.rګSUaR^7T(o4ao45[URY[AF"Q-9v K"4-?wd<4󕛴 /795*P}N+KHI8 ejlߵ# &cͶ"uXTGю׮ Ƅ_ ׯ} ` YDH endstream endobj 166 0 obj <> endobj 165 0 obj [/ICCBased 170 0 R] endobj 170 0 obj <>stream HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 N')].uJr  wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 159 0 obj [/ICCBased 171 0 R] endobj 171 0 obj <>stream HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 158 0 obj <> endobj 172 0 obj <> endobj 173 0 obj <>stream %!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 11.0 %%AI8_CreatorVersion: 14.0.0 %%For: (Administrator) () %%Title: (colorbox.ai) %%CreationDate: 7/30/2009 9:43 PM %%Canvassize: 16383 %%BoundingBox: 0 73 508 701 %%HiResBoundingBox: 0 73 508 701 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 7.0 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_TemplateBox: 512.5 383.5 512.5 383.5 %AI3_TileBox: 116 78 908 690 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: 93.25 700 8 1780 1006 18 0 0 45 111 1 0 1 1 1 0 1 %AI5_OpenViewLayers: 7 %%PageOrigin:0 0 %AI7_GridSettings: 100 4 100 4 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 174 0 obj <>stream %%BoundingBox: 0 73 508 701 %%HiResBoundingBox: 0 73 508 701 %AI7_Thumbnail: 104 128 8 %%BeginData: 6616 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FDA0FFA8A8A8FFA8FFA8A87DA8A8FD5DFF5227FD06FF7D27A8FD5D %FF5252FD06FF52277DFD5DFF5252FD06FF7D27A8FD2AFF7D527D527D527D %527D52A8FD04FF7D7D527D527D527D527D7DFFFFFFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFFFFFA8FFA8A8A8FF5252FD06FF5227A8FD2AFF522727522752 %27522752A8FD04FF7D2752275227522752277DFFA852A8A8FF527DA8FF7D %52527DFFA852A8CAFFA8525252A85252FD06FF7D27A8FD2AFF5227A8A8FF %A8A8A85227A8FD04FF52277DFFA8FFA8FF7D277DA8F82727A85227F87DA8 %A827F87DFFA82727A8A8A8275252FF5252FD06FF5227A8FD2AFF5252FD06 %FF7D27A8FD04FF7D27A8FD06FF277DA87D52A8A8A85252A8FF7D52527DFF %FF277DA8FFA8525252FF7D52FD06FF7D27A8FD2AFF5252FD06FF7D27A8FD %04FF5227A8FD05FF7D277DFFA8A8A8FFA8A8A8FFA8A8A8FF7DFFA8A8A8FF %A8A87DA87DFF5252FD06FF5227A8FD2AFF5252FD06FF7D27A8FD04FF7D27 %A8FD05FFA8277DFFFFA8FFA8FFA8FFA8FFA8FFFFFFA8FFFFFFA8FFA8FFA8 %FFA85252FD06FF7D27A8FD2AFF5227FFFFFFA8FFFF7DF8A8FD04FF7D277D %FFFFFFA8FF7D277DFFA8A8A8FFA8A87DFFA8A87DA87DFFA8A8A8FFA8FF7D %7D7DFF5252A8FD05FF52277DFD2AFF527DA8FFA8FFA8FF7D27A8FD04FF7D %27A8FFFFA8FFFFA827A8A87D52A8CAA8527DA8FFA87D52A8A8FF527DA8FF %A87D7DA8FF5252FD06FF7D27A8FD2AFF5252FFA8FFA8FFFF7DF8A8FD04FF %7D27A8FFA8FFA8FFA8277DFF7D7D7DFFA87D7DFFA8A8527D7DFFA87D7DFF %A8FF527D7DFF5252FD06FF5227A8FD2AFF5252A8FFA8FFA8FF7D27A8FD04 %FF7D27A8A8FFA8FFA8A8277DFFFFA8FFA8FFA8FFA8FFFD04A8CAFFA8FFA8 %FFFD05A85252FD06FF7D27A8FD2AFF5252FFA8FFA8FFA87D27A8FD04FF52 %27A8FFA8FFA8FF7D277DFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FF5252FD06FF5227A8FD2AFF5252A8FFA8FFA8FF7D27A8FD04FF %7D27A8A8FFA8FFA8A8277DFFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA87D52FD06FF7D27A8FD2AFF5252FFA8FFA8FFFF7D27A8FD04 %FF5252A8FFA8FFA8FFA8527DFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FF5252FD06FF5227A8FD2AFF5252A8FFA8FFA8FF5227A8FD %04FF7D277DA8FFA8FFA87D277DFFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA85252FD06FF7D27A8FD2AFF52FD0927A8FD04FF52FD09 %2752FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FF5252A8 %FD05FF52277DFD2AFF7DA87D7D7DA87D7D7DA8A8FD04FFA87DA87D7D7DA8 %7D7D7DA8FD19FF5252FD06FF7D27A8FD5DFF5252FD06FF5227A8FD5DFF52 %52FD06FF7D27A8FD5DFF5252A8FFA8FFFFFF5227A8FD5EFFFD09A8FD62FF %A8FFA8FDFCFFFDD3FFA87DA87DA87DA8A8FD5AFF52FD05FFA827F827F8F8 %27FFFFFFA8FFFF7DA8FD53FFF8F82727277DFF52F85252F87DFFA8FD0427 %F8FD54FFFD05F827FF7DF827F8F87DFF27FD05F8A8FD53FFFD05F827FFFF %7D272752FFFF27FD05F8FD54FFF8F827F8F827A8FD07FFF8F8F827F8F8A8 %FD53FFF8277D522727FD08FF27F8525252F8FD54FFF852277DF827FD08FF %F8F852525227A8FD53FFF8275227F827FD08FF27F8275227F8FD54FFFD05 %F827FD08FFF8F8F827F8F8A8FD53FFFD05F827FD08FF27FD05F8FD54FFFD %05F827FD08FF27FD05F8A8FD53FFF827525252A8FD09FFFD0452F8FD54FF %7DFD05FFA8FD0CFFA8A8FD53FFA8FD12FF7DFD54FFF827275227A8FD08FF %A852272727F8A8FD53FFFD05F827FD08FF27FD05F8FD54FFFD05F827FD08 %FFFD06F8A8FD53FFF8F852F8F827FD08FF27F82752F8F8FD54FFF87DFF7D %F827FD08FFF8277DFF52F8A8FD53FF52FFFFFF52F8FD08FF2727FFFFFF52 %FD54FFF87DA8A8F827A8FD07FFF8277DFF5227A8FD53FFF8F852F8F827FD %08FF27F82752F8F8FD54FFFD05F8277D525252275252A8FD05F827A8FD53 %FFFD05F827FF27F85252F852FF27FD05F8FD54FFF8272727F8A8FF76F87D %52F87DFF7D27F827F8F8A8FD53FF7DFD06FFA827F8F8F8FD07FF52FD5CFF %A87D7DA8FDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFC %FFFDFCFFFDFCFFFDFCFFFD80FFA8FD07FFA8FD53FF7DA8FFFFFF7DA8FFFF %FF7D7DFFFFFF7DA8FFFFFFA87DFD52FF52A8FFFFA87D7DFFFFFF7D7DFFFF %FF7D7DFFFFFF7D7DFD67FFA8FDFCFFFD26FF277DFFFFA82752FFFFFF2752 %FFFFFF7D7DFFFFFF2752A8FD50FFA8F827FFFFA8F852FFFFFF2727FFFFFF %277DFFFFFF5227FD52FFA8FD09FFA8A8A8FD07FF7DA8FDFCFFFDFCFFFDA2 %FFA8FFA8FD64FFA8FFA8FFA8FD62FFA8FD05FFA8FD66FFA8FD62FFA8FD04 %FFA8A8FD60FFA8FD05FFA8FD22FFA8FD04FFA8527D7DFFFFFFA8FFA8FFFF %FFA8FFFFFFA8FFA8FFFFA8527D7D7D527D7DFFFFFFA87D52A8FD16FFA8FD %05FFA8FD21FFA8FD04FFA87D52A8FFFFA9FD0EFFA8527D527D527D527D7D %FFFFA8527DA8FD15FFA8FD05FFA8FD22FFA8FD04FFA852527DFFFFFFA87D %A8FFA8FF52A8A8FFA87DA8FF527D527D527D527D527DA8FF7D5252A8FD0C %FFA8FFA8FFA8FD05FFA8FD05FFA8FD26FFA87D52A8FFFFFFA97DFFFFFFA8 %A8A8FFA8FF7DFFA87D527DA8FFFFFF7D7D52FFFFA8527DA8FD0BFFA8FD09 %FFA8FD05FFA8FD27FFA852527DFFFFFFA8FFA8FFCFFFA8FFFFFFA8FFA8FF %52527DFD04FFA8527DA8FF7D5252A8FD0BFFA8A8FFFFFFA8FD05FFA8FD04 %FFA8A8FD26FFA87D52A8FD04FFA8FD09FFA8FFFF7D527DFD04FFA87D7DFF %FFA8527DA8FD0BFFA8FD05FFA8FD09FFA8FD27FFA852527DFFFFFFA8FFA8 %FFA8FD05FFA8FFCFFF527D7DFD04FFA8527DA8FF7D5252A8FD0BFFA8A8FD %09FFA8FD04FFA8A8FD26FFA87D52A8FFFFCFAF53FFA8FFA85AA8FFFFAF53 %A9FF7D527D7DA8A8A8527D52FFFFA8527DA8FD0DFFA8FFFFFFA8FFFFFFA8 %FD05FFA8FD22FF7DFD04FFA852527DFFFFFF847EA8FFA8A953A9A8FFA85A %A8FFFD07527D527DA8FF7D5252A8FD0CFFA8A8A8FFA8FD05FFA8FD05FFA8 %FD21FFA8FD04FFA85252A8FD0AFFA8FD06FFA8527D527D527D527D7DFFFF %A8527DA8FD15FFA8FD05FFA8FD22FFA8FD05FF7DA8A8FD13FF7DA87DA87D %A8A8FFFFFFA8A87DFD17FFA8FD05FFA8FD60FFA8FD05FFA8FD4CFFA8FFA8 %A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFFD05A8FD04FFA8A8FD60FFA8FD05FF %A8FD4CFFA8FD15FFA8FFFFFFA8FFA8FD62FFA8FFA8FFFFFFA8FD4AFFA8FD %19FFA8FFA8FD4CFFA8FD68FFA8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FF %A8A8A8FFA8A8A8FDD4FFFF %%EndData endstream endobj 175 0 obj <>stream HWiwyoxY$myı;/{ ZvCQS VV|VUW2ciYx$e41;L&zN5,zWUS`ukۈsi1S:6'4~gMݒ#>q3_p3|n0A> 6 !=NV ( ! 6[KϯTJRrOt~Ta Q $\.,BT"TZfNlyMn^4 $~79[uAAɅ\ YLF^I` wYJ DN<(D Gm SA+ccQ@pdXs<lQf`,%0k#Z,!g@x# 7mbdФm{Mc ,3+ 5ckjdC#HŚv?*q4\E ˠI*fqj:BG"' Tl ȐE*&{ TP"һNZfo*V"3R!w^ynRL? ;Cek2uX܏hP+pw`owCY\4kBi(I6wouuk188Cm!8Q+A*#y6C~a[ܬΤmߺ+o R24xG}pa:¬l UtN/ܴ?B _0/$1I2?:YN"tnM1HD_p3| 6 iBd-l~')-RJdMbzDHGvV7X-Mbqr?ҫ`9tDZ\7[PrIHC}gٙ!:}6tǐ.MrSQDbp,A\1ob&3lc.=#@}~uKx i3}Ͷ(>mm,}g[n#6D)a͔. ]ga,iC Q4Im7JaooƯ; ^>,IzL(ݘ0<åu?V #TljީY\'΢$eJl%B ^Þp-Lw:gȴ-Ku 7 w+p'v"x%KuЦ߅3l!sΩ5|F;ߔ %fZ9b!vaѾN.jf[yrMKQZxi#RքW#rudq\OG:NWܾp*-Ĉnb̔TZ%7,o! lGͨ 8TBpnJ%kZbt5}zurN{uH7v09E EUD!`{h9CC1kXwO޻WGyܥc~P l9i:+fK.fEo-ʸv: )vK ۦ&5 )#>bUEeUϜdiyl#]0ܧDjJ?9:l.^>j BMz'i\0{S% j9XPYIv(fcK>mt _6xTL1IH0+~YJ,,,ufJdKCTULu+45fVKL6QmF ?J75a?iѰ}3uwO2 Ng1md'e|e3xvk|x]! p|Bh-~WńDEGxfC188 ]w 0#q8b8ѿ T4E%i99+Ykx~MwQs'8Xwu.$B%y' &|LZckڣcjUb4}rlkm\ 5jbx49lu52S>7+Ϸ>mUlexK߬[ՊL_t8*d6|[.ǥ\S8|_*ꆱ}[4=ы]_֫t=Y^Z *aRQDk:\m$ >I^qV-O93E?@ͱ "FNNz>-ЫE"j˜m*&P`^6C[ +het'RUAF/I u%9B Fo4鯤QMUkS'ݣ+Ѓ_IPPcR\mn^ߟFؚ!e4p;" ]pv-_')cneq*>>N(dNc>2.c=;ì :\^Ihrom].q,_+ˎ:*Q亖2Q"_uM<i-b+e3#-Ҟk^_UeAA5eGIDn,cŜqC?_kΚ_ziܫZ8LUc\49GK#:j%0)sB|&;;elQT䥞%9GgPvL3Z/@NHX46\-%ع79ȥtKys08uM:{|t;N~e]Zt?@g+MگZ2~%f[!s-5mMG|k89!UPlpbb # S4cŁ%"JӐgj.W`QyQ?6ZhHYSUuؐ&4G^;`IOڛB{XV KA*zVmx?Zc"jHө@gN(o{3j4-` 7W"c%e 5%ӧh\|V:77*wD!dnB8뮹W7RQvsWOBy8f%pP`MCK64qeNm:_Q|mnv;]ց=IC>ypEObu&8ͻrvKߔgޭRpX0MRɮ :m Vc$MPN? A}.ʲu$7́dx>Sj쾧 m鬼'+7jѧ## zU③%aF!cIley۶Vi7w.2N69MNj1f5"]1STNw9PوԷ2=Eh;NJIoebÙgs\Gc.XlNi=-ggJ!9ȇ/`|v8XXn'CM<i-bYM0L.9b9}AK*KDRLrո`\„eTxșԐ'75.k6Fh`3yBi<OTmx ͥ<2Hyi2>I 𵞤BoRȇ5PgC[{?r6ZhU`/9s.)@)<Ⓔu{_q9hU_"io+ 6lC%H;qJruw,^6z ÈgD7^mC҅L+x(W[>^@Z%K 9cS _Ri^?ʠ$8Kiy"!Aoi9ێG`ȍh"ݸ%>dG-Tnv8}.BY^JE 7> O`2!v빽UC/&Jɓ=P*31ym W_5 fVjm{ k:8jk&8kA5Br~6ef"Pv>1BX<ƹ hE_w<=i^ *j,Ԉ8T$WH4hlA{(V;ES2L{"#iÝ!9|̻jX?#2]l ,[D %~"ƾnlMI0]7zr^}ݞ.`󵗊{7ic'CA":eV,4.ImU6iFrM_64~p>jgl2czK!'JRJ}˕*M{0LuzImk_(-Rq!K#C#8r9N-Sȓq[/WRKH=8!(RuxT2{geG k9vM(2rDgd,"#43ӪǾЃax1Vh0LM4 ݅е^q0ZLx~[cq*aatt1@.>BA ܆qq @67ӭxCrAؓt[lH#d,=e9вC胈>Zowh+p |Hc笪@O`ҟCBu3Yj?`-'%IMF%x^2uL5ŔY\P *+$ھ!qAӨ t#1BYPz(;o3 \;7 (u],gòԳ/݄iJ[Dq'[=W"2lfQejed?m@oVRqIO'(V@=fMs; V!R(Lˌ`j@s m_U1.Kt$hGf'-q>u͏B8`4*Jŗi% }fky!P t^/ Un@6"~fd b*_FR@Eϯr= ͝ eoc `sǂ>N1 )P'o\\fr*GTrbQt( qjhPzVx:~i ։{kmfsCn_mP_5]^vq ;rd贞hl. -syėNHړ: 0Q7HX+3"y?C=SɛJ";Q$ |)q[xZ.CCOCiHJzQM#c;#(Z?hQ`&/xS4A%7\m>PWzH bg:V (Bo9Bow1Qr'{s֗ p dY;-RsX vm C3ỵwʆ$HY÷70Ŧ-*aSVOyAF[H8/ؾJ_F`%Ϭ74C>68Eh;_#XhJ'䣒a`zs,.R &MP2avZ)2:1an1 +#hI:b8 \sCP[!o "=[nV@KK'kxzm~u[z%ꪙ(jݛU~(4r/JY ^H+–6 [F>'K߲pu00*ԍQ$lԽnOԦ.'eanVD|FFoM͈o9UrNrAn 0&^ܖ3FS'HYlHdZ1ŅIJHĈ{9Eg',iAi8{XNRyct<MhxLt ȷhMEؚ3Cac:f+ m$$ 0c1d`qn&4(˱FNdX(g)sK@)`tAR8  ak;T|HpKTN:k.fjreBs';1XCVJNݡ@PbPŬXJ=+f:`ŠYd<8P`Nt#QŠm%b I(rG3I5gb܌XD*jb2,PxKkb$KC1@arN 3 a_"ةF 1Ɖ{b]Jr{ɓ,$TesJhs,3%n,pKQx40Ѓ r"HYl/4 tT𡗳"n7/HXhϔK{-OY9j1&reG"t +g%,D@oa3lm`laI1Ƶ3LxK&3)yKCՐlM=BPb[H\"9]hi\G0jxVqP &0`2еO, G lMB4~b ~.Hp颊R 1X&T酪ī[ zpk=^ӓ(B zmGOY^=o;nܢ,QS4'ϩy0' -@C-""|gZab/KRED%/[[ÿ_D\hK]֬8LjD1~r7=T2omKg"ᒫ†D>Dq 2BE `q#ee@ oͤO 護Twv=KȞagc5ەu?}5uc^;˱qFZIK@+OMn p(FВs鰇2@Ȫb6MZtp1櫵!S"vRE1L6hb ;S%i=>IK4DIA\"/N6pH^ .E"TRh Un2CXGLuĽB"?6"h Hg9| vd\:Usyxq#dT is& S̒K:ї9s>5(mDKT,ME/={2Uw/}ށgBAv vR+'H&r3WwDUw;PuF}ͧ} 9>61 ?A#`R_iЎ>RQg4HF))4ro`kKNXbrQaz ƣ6Ke`I|>H\E&N&d ? x]A&oM;MeRM:>8%ݙrE*)x._ i-z".ش d:wZk{-m HBDWa w+ؾ9{ZUgO@s*6 i҄W~=ݻFcΨ-xj\T-aX/;˛' z9ds<Z+sWf%օF;soP>;:Eݍ6M^Wkþ J}1lD6ryVhR$T.x/*[zv|) ^ࣼhnNy<Q<#CX/Ng'իIc8qacU>o4 }mxv_Nٸ#2wZi+{=7.>R| иz8OK3=O+9ƾїL[(<=tJoa8}*wwx7] }b}/}kK:/1ebEhzmo#{c6w0w'(_O7pSAhVomV^wׅAZE$Rʽbp~NÃ,ߗZCi X~ٞY{ہЇfnCSL_=Z[MmlYX&j6qL9,~ gnWn+0jw/%Z,Qi1BxکGBca X4hZI9HQkCsH`Q{5zk@U`Tn)\B[|E~XVNܷ@SFLJG7>6Pa[Ӏ'] V<5mxFj~HE:@M:USPgNt^B`I9[eMZg?݀'F&[Wf4UdS2KϤpzN'/`$nnf̧+1CƢ?{oL/rξ‘oũ(T. &s!6Th⽐T7͍&Y()įňle-N^+y {`qZN/C8՟WkiX~ﶡ2a82m8iFkwTFl3/,u^v6j"'o-z^G=g>3mE-7F F OMzgߒcBiV# T((NP}ý$O>/h厊jу *dZV ~>T&O{Xv/:B\;qA}.ܐ5e$nBN~* ?`N HQwF:e 7܇V\9ОIYܸif!G<8lWw w1( |xe?:l4!)~9\BgӒ >[8gFJ,q6]˒m"H5MOǎ"_L1Y NEfpLl&qbJ:5nknu amsۨRbi`rsWG3hiq%CsBS?6|Η"u; S~#e 9EaRC~U\O>OgE{ovb}r` [_"⏭Fi3_56|1jU) rAݣLmWM@{)n2Wg2U,+de6cdiR rQta_`"jP їꎤ6m ކ,= f clPޯmL^-Y|"d*'b'T[陛esjVTҳuf9%?Y$ j9v K6+zaȫr;^'<hR~:w)9V-v l6Ӄ>5[Hʾx$h`͊Qn 8nw"g8W,g.aWm`.H%Pɞ&Rhܸ! M3rOS,畋LA3S𖢇Z@@v#f3h(T- QߕAm:06gk :6h6 8Z<҃ZC#%לIؘ\v06/ 5,˫5rz6q֤IΡz1vf#;hUۃa`Zsv^zC_)=/s]aNl>TfFV N鞦a1 {YпA}-c6dZrM6g] nK`綻ߘ[.̨QݲX^unE4"̄kf*2aPn{^Z2Ԇ|[;Oۖ]+_SshnKeQRJj5% S% Ѧ9sp$:T.?ٻnwF.@ӸFZY=Xr^qKmJ1sMkU=e:RWo@) R(^(W,ow ْl_rgO33|{mCQlo n:Ų 8 iJ]h+brk fX$h8^ԑ;Xe'~ZP\s`q`O.[EtzNfq07R{uni[>DoY)r30nĻ^ʆePs^.Fϐ-ϗ ~XT@;,b4集!CRZsa֊pcU..k 4!*pps/ c!ҼL;kěFgf t(Y~L)\xƹTұ;LC(o~ jj!'LmU+יuGWGϮ})gr:ɛ+ZVL:; LPT[S>E+3%L--SM^]M 5Nz>&LgyU11m 4-]'/Ѫ}#u)~+[nڪ̈́'M? '9W`_x:{oAʷUI Wŧ*e b4|nX=_5[6r=nYtu:Ɂc.F& MhMBSfʕlk$V@P, ]4,fS3HuvhPi a `9RٸzVރ;V@ÏXۗL"Tb"[pU|Ǵ uw'~ZPC73_bpiTVjMƩ. @tq7u.Qz1;Wf5L9^en [r.iQ[+lHN#nT "Z3D| 253PF2ݷj4޴95䄈?˜M-Z.wJav1N~f?g9W8ת{ZtAO>]_ bӳRt+8A;3NlPH8 Y2uw+`CȠV \ PB?OWmfP]TR,]_V훨$Wco G_#We+n2[٫^6&j\~^(;(%hn[i%HQZfI2jAqa$ -;a|[fGЪ~l RH0Lq;O5vƽF,[;pBc #|=6&uk}tGܪTR gٓh^?e۹uֹ?.sfW9/3W SUI~Qi#*DE 3`]q1*cpr ò~lG՞Lҟ9bgl"%$ t (FS1ݷn=ZÛuN̍05@Nåʔ52\_xM^znD ίV'ۢNB]Ա)1t/4 endstream endobj 176 0 obj <>stream HWYW}k!B2 ai@ڡUUBP_jm<{,$_h(EZՋH57d/}p;M~g-$b%nzQkW >?h1-He&DK$4z;F6+]r]p z ]wԘTnZMd_סk&/uJԗڔ 'L2!oa. (d29ss *BMq^3$W_N aSLmL0/a%SLj)0W#ImŪdF7D Hbqn*g_YLL}'W~սVЧWHP7X.B9"Rm-r9 U}.[ӎk8 MMW(2' 1 u6 n8F VC<{,YweZclW~;X6@DN}GƘҫ7{KY>(fNxDd_$4v @o\ᣦIZP;΁Zq @~@mrXiɎIvMGK!ihj+ |%F\ 1P1SlM[Cg3l@/z-sX eͅ!3lb1MV{"HQ@KjU@0ZBX"} 2A L"`h!5iIoIךhOgc̟j7mipp{[ơhhl`[͋o ܘYTU.UxA lV~wΰ>+㲲KV>u| ,}ʦ4uɁp6pYٔZ$ : e& UIQpT25hlU-'8KuezTqù#ݵ$T[L|&#40z2)Xg[[n7^϶kZv' 1' ڸP'&Sy?KrnTn'*M|ŷqAsaRl˗^kM$|GUX_WJRv0n֮E|n@81(&B&},k-~si:Wၺ|=>oeQ ˌ^+{foKmo7Y]]EX0-tҫ-1zJ~{7r_D :[+檏#me$T2TxK6~9v1"inLL'dhp$Nw-,EG|M95xR-fnjFjjM֎L˦v J@ )I.W54LSm \nILhZo5&Sl-/Z aJOqvqwӟTB+;Mރ.`)V  HTB$Ku}TKꍟ ˍ_XO#cksx}ugH}|}^`#v7ou&Sv W9g-drcp60Mxd flky7HaTi 'Ssrݏj{Rn>(BMQϐ>u3rzьstF^G.Э%7ktk-7YlskՍiD`]fj]9GD#0`uzZ4\:c ڱl0"~S> װ:MzIBl^IVpC§c[ 1YN^CR-sh.d:t0`+ZvOd[=]Ek)hBb[,q$ˡ %v֜ifh6Ǡu&-2x\M:6 7&U:TAm97=Sffrs)7'620Tv3,H2mMz)߳ߦMXkGZTZۋQ o7kd#~ Xi!ps jdcnGR-7\0,7~c>-+7|v>Xcf  mN憞֬ݘ\qi7ܒS(DE(mXA)sk,K<^kpʊ+y&+N1΁<4X|HL}c;̲[-龱ڽA S;oɕK^&К FF*3aFk 24tL{_yb tP:.F#WPʵ[THpFO|FA-S=mW('ml%0?^-~୎$ʉ;PrXֵđ ,L@@D{ @t뀺#vwtNOݡS~׹Ƈjt.n}Ntl^mP̧YԢL휹EϬDZQIalZ0QhDFZ裨jRC{=Ai^t~du@@ ihm40FŷvL m4oOM ;6rއq)Bؐ=ܞp{٨d~~w~&,kjT6ǂ%!I4y7ayHu@R}RK Uy%m0Cx| p@i[!|sxOcipÃ.Ȱf&eMM"SjضdIr@HC0V2n[Hӂ%*'6^ʌ'AX/8yX8ZGG%Id)#gC~sF5aNS7Å࡫E>H#sT0/I ,n.~UpN:Wjͅjܶ%T 5e'Uu]w^k4B~$3{^޷clB@^6a}]1[HOFוü[dڤ@嫣b$D/mJR^CȅPOb;*.Cщh#MU@sv&\4 }y.ժ7r_y>ʂ?)rr-Icz6*}S4]yY5Fŝ6:q*GC᜜6?j6 R _[r$zf ǝmM|1#<;|~l4ȏ"={wFVHyK  ʳ,9= OH 7ijuf w7`(Ph&ލFszc8sUbȌ>.ϽuVC@Ģ/h`^g,- )4kEh?3ÍUiY}L)b޳\9ųK!Z_i- J vJ}U_LҐy$ _BApi~`b/-, (`ѥ˔/"Y>/\)(U'r77BGŘMq7D&mʭiM72Ɏj3d@Q<^pkɓ ~W)2;vPPmPk\n$uls:HO@! a,Rs;䣘p4[(^g.۞@ބU #\LFdj4p6Z[Nqt Jd@:\zwW.37MӢYJ.PX\uشRw*KB ҘѴϬi' YGP;Ґ7>vA>~z+uRu7zt)*dQ7Hcc< 8Ij4[%Yx)YCH5!,K2Uɏc X(K* 4g<[ʀ+sp+ۨzI+9 l/빕IVR B-57x0y6MU&/i0KƳUVIɲ9H{3]X+ p$X b?%$tXlCo` (E;r:lY6u[-q rCvsXҀ2lƽxoJ[ӂ{z޽4 3jA¥D3`ƢBH4pQ{TRE4ͣsJ}r(VCk]׾IgK|csB/k@vdm-\aSUӛ4 {sZ+Imܓ/Yv{Xbix{q;Han}m:OظOɳu[Fh#{gցX8lcz_5GQy'LGΖ æv_v eY)5t2VJMi0YcPe1\1oҩ;"]&:.T 1Vd48x F.V.鉨Vyޖ҅ }_կ5jY F]߭RkQ/߼EPw[Jq\ȪϚO#('^QĖ`4%vAծZĮhO;ƽs]ι ЗgnH 7W\&Nk;{ȄG.cH "Vs}||[ ѳH/Ũ6  f~=Kױ?^hݕYАb=Ann >DͿLQ속kk#$nRB˫jVw{- Ra-g\4;5ܫ y nk8"?9 ^Ыڲ[e[S?!BcH:tlzbǺLLot*gk e3Q[Vgpek∗w4wv}Ӹe=hr%$UL ~hg) }3[່B4&̎ݰـMF40H"ȌVk h? \  {"rAG&-R@( Vu;+_P>OtՠmA +-|1`ekX Z/XMn;f; @BͱP8VY.G7l<}'+=$]cevd׬ }5r>ؚX։&7M^1f)b6V͘#铴 xf7+no1* (ճiql*?wZ_\{4TrD魅{ȡװ#Šw䟄dK*ukg&@;]MPC"y'itIH-KI-P0&)j&+{=/zfihZo' }:+oƺ6Gow&TУpht6Sx<2`8%&;t[Zkn߷EUAC89A+bS+DbZ̔m}Vl @AW <|{9N^g mҤ?g{C.H_J73f{j2<ӫ4L׋ /%*[h]Bܬ} `x(s^ctuӈ#9MY@~Y94I6 i{ \y@ş@,g*l*Ti>w%|hr@Yvntō+諹#o"ʺ&:\+0#1˖;$: gKqL*:zHRJܮAb _vu=@\19>\ G 6zָȢ~ol*s ǖwdV;ONE:}זs95W4\B,?B@ JuWj @['C.zMPK.4ΆMpEI1}Dig ;EJYW G)~J-a:c{!{Pzo$0ўA$/睡_*Ò}މ+Ʒ3vq#Օ&YYl& /by4]Y%l*ӊ' K.PU48Tb(k)|ƟRBq?Mđn5J c±6tI}Tpήp ]Lg E4b@|g /d&rlzSյ?]C}HOO3qQ%?R*f)ˤ8j64B4cCXx-,"j=hNx9l='V!i(1wy*Kϥ?Rie&Iȶ+t%!S)?9%lC3-5Z 1o Mk45~t.ISWYG%W$Vsa|R*Uù;JH(Ϡ5/'%B!j1-zVg($yfjNp)D+N. Us”a'J؏Ey{~Sk0VTo 4, j@~:̈Zo5iuw1 d宷JUtPiP걏66h1+_ܔ$e"+عŗzLPdQHatg'a߄zr#F6S˔ ,4qH͎w g_qmHWQi)Xז65.3B\QT pd)ԇ<ljo6R;WF^i)m2"_w닱$)0! 3Ca64[Wg[J-R$0HO#*`gE_x]vfvϜsƇrBN7ɳ1fS*?Vk`g >U~|.&2%6`u[`j1C9LkT$O즲s5UgxXuh%@bNf94͢*d8 I8zи#aBy?OYyYMTm.ߏJkJzq'SSυ$/-!f^NK/,}"!>@nlOpxicJLdCO ޸`!ve:BG].Oki^*VIt}jk.ծn5Aq U9l?{_+;\L+ f57LB#>F)Yy0_5yqBb8U-){ ~X͎Ei_V$f` whY{W=q 赲TjKQZz -okwn7mEdWގ~f1<+ UK72 f13C]6ѝw˘\D&ǷGSөPTc 0(\-ZB; iz& )]oT)& ɟ(zTa^f<+j*dɸ?藱XBo m=g4)=&U͉Cb[a}s*\0a΢#&OpF;y3Yʄ(jCƉpeIK~u֞.yah] ~Tɨb\2G u>)lveZ[6tiGc&%Cgi\sФ+fũYÂ!% r@Bwd/5ĉ {j&x9N߉gޔW2H>% n@&~R>!}"xiLs؜¥3v8]Q>*߫ey>X@l (yL`2 oh7{%ѪÆ@#gP7^4ڱD{uDEN{9-'4xO oȲ3.vID%f%PC AB z' \] d(o_KM`͌W0A E~ZW0A+x!JQB Ul@S*~Չl.W:j0Ea~_@ WBZaӷEOw)+ a{Z~aJ[| qu8kݧ Bkg2*[ULbE }}n#+Tҝs5q+Y7X7{ò'=Ncm*@?To7dY|ڣR,.>Jog\Ao(zĽɲ_@w< 74+\]V lk3XFzA1Fߥ[)!ejS uk@3v(RwpX -qC F/lDYvoB9W ʚeD]@EqDvQlm7]#ohő̝teVsN^qj`ƕc9ߛ9A_A3]ʲ;$kq<_9l\6ku.?7VCfcKV=z |jw%ѣW7IhMf\;-Ok?,#݇d~$>.? -)egQ@q,>;т0ghq{lDvp@TDTD QqU!%< 5![/J zX> Ir f5[5ױkBmLG@fGAnn4ݼ꿥xxb+!B% k(9-S\GuT9 !եce9yF'Rg{+c-*>F*q1hޮm0ϔ]GRZ7,isE9ȅM]dpze kS^[ꢤ+^҈ɲ*Ш@b$vI˅B:((-_2/G2= 𙃍j҄5;ѫ&w]Y 2dՋkbQ5߳A [v@hO,lk@b L6Oٸ1W<(BƢ: 6K$e-^=$d6Jsz9Su>NQLZ.aF'.l[?v{zt]Nt#n˹wMg3V\/^^K1bEvėŮJu7T{oڕF}6{yhr%/! `q]⊊gvmܘn)q"ť ѝSJ⏹Z.MՍ68C\U?R}8{:Ta=V0 H+3*b\hq{')CfIՏC6 [ĭXRa`-"MDzK7<N9,2"}@b֒inr(D Atx8cc.BY af6R].L#"%ubihN,*lc|X侂]Y겉MZ0AeM<Ӗaثas Kva BO V߮Gԉ|U Χń7Ň! ?lnvuf# #yIG* ;{DQ a@:P_ Z*m5Q_VLt_Km*<:ih6 ~)U󲖠K>Qmvc;Ri)^Mwc!{~}Da;tV*9fMVѴ"=0x@Aw[?038^D85eq{^א2K&&,7˜Ru֪gF ο?X *EvGsPinc 1B&ͳCp݄;8 ^))u|nÓ:u]cB j"/Ru\)FȪbj%ԭ2:pMM>ԷdN| /kX=.f//a4ӝz4M,ܞ'PHB~°T\ A`luѭ9e^*A*bbK좉=]1vrxٙж?8$M4wZ &\.vy%4(I%t_Ϝc{iWILo} 2ycRȪ1P̍MR OcIi+pyF~\'%Mx{7[5AyKFe#+ [Dώ6cغx3--_qZ~;o9]Jc,c+:J49Y>V0tϱx8J479C|IJY>V0ӌsl%Cg[|D m,c+19G|m屵BK$nzVD]]> ]ˁY0. jŁǵMo!k&Wm}k] JnG&W2yӠ+>U&з,HnJh~(4d{k Xx½Vw*/-:1&q"3)JZn0?vcZPcz`.8zj ՄhͱW @$]EDlE5mZR7JߚN~|c-K0F3/|1TپDRF;;Rbn8Ö!NO٫I5>TlQ2>ܑHreAN䩿bM &3`WiZxmG,~59p%]uzYKgr2$ELh@?)F!:@/rEgN+ԣ<C>j8ttCPNLOd[qaW9O֚ 6遤,Ӷ0(P8˶%(u5Sse5kt;ּ<çyy' G Ne;=d/OY=w0HTlM:!سl1~AnFΤfTfU>`jJ* Qm'c2*NJ,s'|YCַ'A ,adE(c//CuT7MA1FH&YHn{  S\PQo8 0|F;)['K!G@jUt~5٥(fى"b\8ޛWD[DYI"BNM̖0G|~-,{UqЍ*Du7vi_0?IUA|f׋!.~ƸRy1i'Df&3Ϛ/CM@|mאXbDUL?[1%k h'Ty ۃ_Hf㳚%RX3jfI=<+OtrAb䅳7:Jll-`Xa [rx /N*\&oVLJ2c]ہdfYZ,`V*ALb3?,1SԛxyZU}-9 6P$g66 1 PlĊ"aĶcCi0#Qr H0Dw$igy ֪ߐ>& -C/I!]Eս(C:iSfN=}_sxUoҺr .9qZÜHa$n@ S$}t 9Ċ.}؛0Pinl)/E%)"wY)@ߜy=uM~ix5yG ܶi}cA )MU[U^/mN΃.{u=^7[״S=~+$cZ˘ /ap)mxiڻux :D6?M92kcNDߡ@w#aγB9|8qs.g3˸Cg4L-p/s`U:z T@| I` 2h7}uB077|l5ckMMqѾ_[{}lÛM$ooh߉qi}a.LL\mĂy{X`GAb ^H  xj˴^a??tLoijWx/[|.:q@u?TrA3º; ݎ`[ |g23s 0յ:Co'B3OCCihMf|hgέ/\-ioIKK iTN~BڱSzW LMj<^'E>B cPeSrN ֢pJ>PK.D=4Z\Bϊ%VrklБmgK-0ZL K6)7W H4[hH{ESdprM+$zKc8N[U6\DiaNɺfW4+ㅋW*bz8r/)f/bW #Gu>4x܉3}rꥤ|=pɐVy6Dܵ kn*YvW(K{YQ)-xRP!rRԗ!3H_R~i6܀oꨙf~LS\(ktoi4V݃rRټe FGu 2d4S hH~D8d#1JHxUQ%q( 3bF5?5_FVFA/ﰇȭ?Qv ]ʯ޺h4A>/QfK 0NJ_"7!o1*חZ%й@9[U΋q< .p_lS?Og\f򭨲4;yk(GM>hʆ& T1"|R^ ]y7傓OF5 ^O.NK"hw*IE6փ[|}PU]4B*@IYͷCen'$l@ie=|9D< u1*XZu,HjbCʓ_{O9N cx§i.!y]nOzID'&<[Ū_7 _F]þHFʷ@n#, - _О޺RHAP[Z6ڍZEv$,"ї>kC}O;VMe+2Q֥I=5ʖT,kgp((L0Sz%Axv*/]ak%Ë:>H "3pT:Z2Thz8/z+f󻶲z{?G(ascds[R䗹7rh,xBM$o4P*eyg6g)G&Pf_]C5kV<Q df~"~B.<xGH~G0SocV 7 @oj',څ>]*1CuSE-ҋ5EPqdhv̇NSn5ZZJaIyf+5/WnwAQkz(˕\;?"FF,A w_ b/pLb?tUg 8EBgXd7 ?7[8.gǁ΀YF;=sߐ4M7e;} )eixG$AgaM<2w- )e(2[<T&R}M7#y`@}*MYb\ A z:۹yuJfZN(>lPG &`cslI1L1Ҟ-*ۥexIA *bqMnJʮ -HuMB'Y_ =[}fe2#?R8Ɐ2 endstream endobj 177 0 obj <>stream HW]o\}2Ph$(lQE!(:XI #{n"Q{3ΙkT;aev*L:(T90o>?>zq//>^&;8>/x2wY)NPdLQ|z+V*cwl>mI ,C0Zxe6V+M~27#ɋemS cD vgvX"yiB(1MFy$7!@IѢb P2g'cLqb9ۉ }!5z #N[> q*5dȵJrf%6{o#(\- !+P?-~_C.S0cV CLL:R$bg?_֯6Ji 6 * !L^88n⠔\7D& ~|=aAI_>m^_BR%T1h?-DH=9 r4h] >ajd—", ڀ<) ˁ# ^"^B+~{}D9xwÿd߉ӫOF[ zć]! sn'ĄZ ԣjA^M}/Z|P+Yivo*.+t62*#^P|vs)3)L):.ZFmk rI4aٖHx2e;?"è*b1lU( =-¨Hznώn5"øQi*m]ؖCFzeAlԺx u i" bة! (rl݅U OĠ+لeˠъAŀ@'1Ri0Ũ[h5JÁ`G%w855R1I1thA4Kɻvs}i J7 GyL3"]S qbeM3x?E&>Hl2tE ΑA xF>H0]))c*+Ç(v-3N.! Iux>_破Hhqu*Y=tFnh8O.ǚ]5RUZƨ~!:&DAϑbx9czAHR`k ^g\S0V= BvzV,RW 7yRd6T$0jB%(J=0^ iaBo菸~e%h?~o*4FY;=Xd"CdB+Ba Xăv{gt:y%fxT&E'p&E'VpF w#y^'܃e'}$ߵ{`FTFz }C7 T2.oTvMR{R:e$0$e hF0Pt6 P\SFQ`Wa莦 iWC܍SPQ: TC0pcb񏑨@5Α蝛Ǧ< Zi We PoB Ov5恁l<0#`L@?9umdLj$s u[86]^XIbyP 1cl-z =F3trHHq4,l_UMVϱmEQQڀ$嚋g[D`M*wQp:t\ `r d{gHL0 ZYXP]Mw>ǥk|ý_ `7 r<8υ2BT[S|ڢ tJUle#hM0 ^ uImӲF[SK>-|ɶ}ߑoO)€W$E^ax G E*!y. " 7"\D!y.Rq=vm\, c.N`˕~ΧF]sȐ;_rquő_1VUW`T$ W#140yi}Rc&)ΐIcb/ iӤ4 ƘVZ?ƤiѴ8( >g}3^3|^{sOe, %>!C0#&4: ְ[gB>BD*D{DxF!c}5e5 YI𴃄AA  IT}@$.4DYK'`M\V79; !>ic\ |8TY# [+;8"m8ܠ+H,}?R[3^< CmMLM4-XF*㊣Y+Sjz+Sa&qD%3q1AD6}z#_gf$u]HG`\BC?.nzӌ8=P) 4Gr67n)yj]ffUsRX-%0'3p3 yᖒUsYí$Rn)Z-%v^+;GO'g@ tž,P1[^XS62Sކ+.4\:W$yf1؈ݟ];yj.4^i(IF Ro/ok`/oof: q< Fɐq"aF!ؽ"x={JӪ`tN@XEc:a Ŵb2K#Ap4eu1=Rx-Ra!N@;Жe,*'#],4R q BByU!b *BE$SG9HKEY 5^ZB.4MV*+Li5})mȆ_Ҫ\DНmTփK[TI\ Z.y=E՜pK):I DfN"kT՜dhK鬹%[Jip+iEfyIH'5\L5q.# ' nf3B]02*5;pTb1Sה"dG☧hkʃHDhdK~*Wzr 8 ~GRJ[vI¨-; ; Kk*+Ŷ8Hl_mZk)7FRl,դؘ^gWjJcݘTI*M [ ^LJM2fEm77܂,ٓO-d[#T$ KMn)P5'[ʩn{άvvo/t/(4^(ivx=[ϤXmm۞bQ7o7-0Ro*Eԥ@pP=HWbZjqPf`@F$䬋HES iik0E*QHweITBA 0p1x-̼pi0S臜p>BUW"Z#RO @xLHe:Pb)q 8ih7j5nlER{i*Z\E [=5G k +F@TӠvv(C%NtD\|9DfK/(bQ^8H$b\nI\Ds5 O2I.**o,[9 J- 7&,YRaۈb)p$CPb`2,)/1`b#8o5 '-j8Y8۰8! ,K9(L8v뜡/1^Q\난wB!q"$YXA2cAHj ["cP|dLQJ8k粺٭m:m"UB񞂫)칡i{FFajOоP:|0 A& ؀A0}] u,38DP'`-o:EìI6%lz.O'`6'='`]W90ˀ1?Q !<ˡq2%B` CB5A Bp**DggZ:L9 ~HQ I: ]3z~|3<8UըzF9ڎ;^=v ò_=o^Scxk$]3,BP/? EZ/?V;?= nɲ}rh 9SۼPsɭY>?vqG[h$ wvv.CgV Vwuu6NGgWϢ%{A'UXؽh=|pphhh' >⾻*݋޻G>8YzήEKZjCu˖Yٲy3Ok^lqޤgɽ֮߰md}L5yxyޤk57{G#_?'޽h0roS9y❷8X5x%ݝwé?칌=sxd'׬=+>5g_L^?=>=xށ۰7W.2uO?xMdpWi,d=賯<=}Փ~w̆)gƲ!eq׮g/?skL;yvrjڏ72ɳ'Ol5N?uٔq}҅s4VPFhp~fę\ɛ2|3yı w.gw~w5g_~_6xO˩/}_Q3_i#x01 ,ۻH4TZA:{>0^_iUBE\ZP[)Bxi%z%҉s򂜈znL2״!Wf;eGǟTK\sf։]/^_?]}~WN׉`->Ώ~?ym}]˟~w_+kQm8򗾚|g?[\j{3N?];Sf<7;w3.|vE/ǾHpelt䍋p/Y>Gvio@vԙWGӼE u?v~餓Q'^qPWlY/4?,V~xs#U_k,3H"CMmi-{"dWVMW ^^ʷwwvjSa{8I IID$&HCoppC?Q ơg q;}O{x:NpwYN^Ѝ|r2 d@I; wSTMlZITESEXLU^,_RG(6B1]vzԶ x79I:S$-lBlJ$YrQb!xXJvWMdt9LӮ xvHSB7B/ y91İp>qE(l΀bZy6P-?# Gj},r,l ThN{i:yy^ 7qx= Vhp@w!2s`r bTs“|$ '#e"<⮤+ȓ ҫ<9>H7 z.93KI>AWIuR>7CW6C|r]$9I=ڤ!K=H3w{]\}xs2IVgSe{"=&F*HuqJTT< TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT<,rAJ<,㨳yS='>Q'<ȃUt騂=13Ά)c-O9C8N8 ƚC0zRFQORTC('LF}`[,mV]Z--TP]`57Y::.8 .Gg\k(ӛv'F4DpO7goo6:yc]S# #)QL Mu UzeU s3Si?hP& ;01=հ0?=!F[:ckٕյ k+kXwgKAHZ=|M ;[׳BBukVWxdjae^.wKE.{cseaj$jjԫk662:{{?"߿83aۨꂣESKk{wi84rֆr8A><'j\O|F8Ph ֝J;#=iw#C厨8A><'F5݃{m-ͦTY\ڽQZ]mTZ]ᑩ{-͕18zͭ흛v6g'4A;]Y][а6uw$GhrV: }Ua,`anvfj2-$;tƺvG0FFSV!!:ڛD&ss G h$ۛ&4 8dtX<*&sADjlYv@hk4Ru&CuGMD=IQ (0ZtzXsF^S t'c:ѱΊýL$$a P^_$I"J$СHM88(|d3x$8w<~;:8qr(ԋcb0DXWƠ;>OXI]R^krXE<%ET/)C(6B1]vzԶ x79I:So$-lBYUxlBٵ)DJ"jEx\nwD&M ;7'e0 WQAJvmsQ<!@QMtRz "+nչgTUM]7j^'&8X!=G6AE rXkJzA8 Ң'حD%/ JKc8WtT1Y E{u>&6B*C*'I߲LQ3%3m`SH endstream endobj 178 0 obj <>stream H}lU6%,_4-l;-]v]:0ۊe)w]e]bd321,3G @p5? K`@wYy11F7#?RcMYaXgN T…4\Q0ZS+QӄBIQTbP[B$LZ#9BpMh%)JDIx1!AU Tx~\hQb)} 1# $(@^$?0m-51zU dXKdM\H-XNhxc5%e#B7TU~vcDp.MjBkZB ^X6*s"k5"Hj,lL$1" G閕`U¹UIT;sEi`i-gՌ6yjVXp $1r^Rsb,"sF[a4Z if) RÔ+(SnwuR=u6VE.IVx3[VE6=ѪDR1Bòشt CVH3[!V>N=晊LEJ :s2<>9 Lpgk[ x#.z­1tZj}fbB[Ԧͥ(XPuzZ٢$q5Ȫ@|Ѣ\Esؐ#sf=d_q^q* fw| @D0* x`vw c䴡mViPmmoSE/x~<܆Lâ0a)pwAs)bWI\U} X][]kwU޵ʻgy1wfr|nrt}fv9r }xچ!96095ѝVNl^WAo6pH( zƨusˆ??IOB8i:(zw!9ooj[pşn6zb|9~v t{yc?|AHϽ/}7kM~z?|ءݷu:\ 8W޺'Ë>ԫι~|(qz~?ͬ_x]ϟ=w'㳋(+:~3utuY0 N6Co}ǗM{5kp8 ^kvjz+Zɐf<*繱X״XrΩkxrzF:4ʼnI}SvMNok-SxՐCVl=pam1[' Nw0u=Be&PqpbTB}UTC^M@3FEƲ>/IJeQ6/˜Zٌ 6HD4$<$z0}nN- wjqIidZulsUL:Դoy# PpNN[07Q p F*¨iWFBS!T2%FL+@,B\!EKgcPP`WYg 53Jc5u, "?;NCEUsH%ʢۉ-9(ɯ[hV[P[y(rTe;QԬte}PB{b3WĦfC/}pw=KrV;hf Y`ؒ ycoKR NYpJP*PPt@Y(V|(Ó4"$E'h*QUVtEši`@p$PY21@[~CV1kQB)XVdV% 8 Y)vZoK2w Tq&TNQ {6\N$q&^0bIG]+=W<nj"k]',R`cՎ<[m}k4] 'VAYhw!{.C=lTcjF|`H CeHf({?EBrfI0Vb0Y6;OcKsmf~ٞV˻(u`vAnIE[e]uvV*ZE\kq"clE\۱r<+ OCrl`rj;ݭ69>;71 l/G _V%,EPa7`] ݗIOB8i:(zw!)WGk:֮ͧ\2F+G%k:~ԉot3<ԯ~KCG~|[yt߭78y{ޟ~y=@J~>xO~c3N ˻g 7kG7_{KۮZLoЏG]^Y~{;kHWܵs}pZlz|_| VMoEsp&o&Dϫ w)`A\X޶LH3?{R|i +m!dNgtҴ ]QQWJպЅ`]hbAWR7zj{g8CV̝tu/AP~8;Az !B\tǝR@b 8RDB HIYJ 8feѺ,rǍLm-q,4IDwp4@GCEߨmHߨD Y јNCd`~`G?%y>:E5Ƀ@p5ag;у۰q>b=LhApt(YtH=E=r=b DIT\^qq# =B&9 CDVtBj{U[j##:}W* ?/sYN)^!BTWDeQsT0&˲&c:&_aLwc?N$o«֛RXd6I/";a`C&5cD~>D~kɹ#հˆ+ܷ޵#+q18J^97#Kϫ{TqR,yU;>Կ7Ӎtc0LR;>~^:R76׏oK6D)dz$0ƣXTs}иϾZM]_?S[m@¸,QL9zt,`gyB?p-\}W|pq=~7>~W~};sWϯ<>7³O~ւ{[oW}u!j_}|7?'݇;韯W^N[gg~/~Cf?ɳ?{ŧ?̗@k;[/فy[?ۓ>xn qELT8~ht ap'>氰yty+; 767._غ4x|f[c28 ~O5sf{)ȗ+`ᰰtGOmCgȊErCRڀ~8;  ! +-G@c3рvv}:€id͙2`vTa$҄ira)V_S2hN((YLC+LX"`N;&um4L0LM0U`&wq8R#`kFp;QJԋ@&bhl 2;RǂykB4na!8=!Ӡwi8FYGWAQ/P7)bB  qhd`H` +a?ԮTFC", GjeP㯗8@rHCb/yA73ZzY-U):ŧ=j]kq"nV\ gPwx JC*jc Hr&IP)9gH)8ns|2ۖшxՅJMjJv^%/iu-׾E@6G!c[tg{w85ȿMjxyD?(0mhtdCCkC"zN4rdֲ!*hbN$$HE9x\D+ -IM` 8W2^"H9Vʤ aL*$J<4r`!)́2@® D̗;ىT9$h#w/p_ 1Ԍvs~2CoU=&+4]{W`?NyTć%n~]rzL&$j|9FdQB)G[^+e_zJ%"14)Y;8;Z !/RhnVl~lfA5*zYl%R۹s^SUI%_QDQԢоh#=*ɾ8bX } ks badC=_cэ*$-(+ %aarA)1*&2V *3+` ! L8lL! ډ7&iF@oB}ȵꉀ=ZZGsmۄclQ5Y?($.c:b4=׬N<ƿ8U*LmheVۯe_;S hC HwI ؛#.Ƙdx7* (JLSR}f{u "d`3 C|3pp?Eb[ rGiq0oO֘R@Ȫ!hidtA0Q+?#!TŒ^Vމx8W䙦,k, k4je,e+ҟM25 z@^$@b\cT2d*zFU*vn"Jwí54Q' I?އFr}6EI&[5_i_/+)";q"iqRJ %/KA7E PBjjMycjiOm:nWlyiFYƺRb]ф*sHr,IbKP)9gH)H{+̱UW)/[](ޤ>a.XBF]ׂpˋ"fաZ fb<΃I%/k0Si6(:̙803؛@iPR[[}IK|m'SX_}q}]1a3|Zk{o]GBݳzd*raCv"1? {$sFӴб&S"+^<@kt yR 7]NYGQ0-dxH]q-r?!~5v1G^<ƻK_S%ST]"p1β ҙ>s,%8R\ĻjL)){z(kLWBZJ/ai%"6` Io4-4RkkacS=D1ZN!KBw `QW7vqfoi+Zϴ5v}dڬ41t(FJ?4+\7lXax_9P"ȾgzHgMBÚLORJǤٗ3/9ImBB:JAh)g[@8! ,DG"D%0P2 ;v[B$n{wQ诫^~],.ٶ١[lssg@5יYvYl~Ə<;~_DsOg+~>ڙzltv=bn/G`#{)@m{2ߎt*>ug֑֗ѹ](;4ܰ>7w㆕\ބM\|=}t+|kܜ¥}k]aO_/߼=e߿o՟[1ʻ;/?fο}? ԯ^:K@u0WEp~?ñ<>]}ʇZ~ƕ^{+oCکǞҥV^zD y#g<وm805|_Z6^Wy'>zEprA$SHKW@[&|?~flϾ"۹{zz26ܙhwCSg3s?9y3u̎M_L_@@(%ީ̏ lp%z\to=F|:Qy 7P7 =ʰ؀cn ZBT/V:熴ibjP(=+KХ2K汪r5f@3:hL f k%JKI'H"!h>EH]\%ف!)?x 8 Pts'5"@A6~lh.PZF‰ʒOH좇C\~#l7p3S_kYxv[%en ;z\h_x 7_|M/\>^zv\PQ'O8|Voٻ޳z㖍kzoQU/۷Z7nQB ̎3%}Sjd bdj733ǐtv{{8t,c&΁̙xB͚nQMMOe l0kF>OЀTfGjV4KS̓T 81SҵiNGjV4ucT|eWDRš)ݾyܾ_62Ygm6)Pq4h:l._\w76,ܞzH 5Xf`I ˙ 1P pDYĝ96@zQ( 6L9?@1]0!PdPUD[nYMq!p @ Eri'T,Be)A/DNu ms09~Ѓ dRAA^۵R+ X!RE<_eIAD@A>x2q w d#pP`E34s8>PV\#D 0t5i T5i%Y:J*k ʹ{R\ tZ]6FYGW@GkTq%dخE).xJ;Wd-/ dᅤ@++,pEhM< eWUoTA@[tH`DXC1@\(Je3aBisY@W+GaJZ@޴60H{ 9^߭XW2jDSאMazc88#RWQul0>CZǖD8SrdU5$iMP!!DU T5(%%R(ВmEDH R* UN}=EPIX$aG`"D9#yh*1Pź1 $N3D"l829)olwĂ}XKj KS,SS ͉s>3@AZM 5'` ԥ; b;+FW^r67v$͉^"3RP&n8P*}UJ_UWU76S,S̼"N5ڀ9W7N艝[]r}?}_ZO]D?:s\soxl0ID!!`&a 9TiJ]ƹ "$0qi‚(4`0y+c\^ǒ! L8?~l1IqI R> .$`[ Hs<8WԢmHFel5%;͢ @Z(b40,ʂk Ad-AfOӢP˼X+5eBH3xL") `D $}\ye`Lh@5M? e7ce cv6:AQ)5=Nя If ҽ#)CChl@(:\ ɍD+@AQ+DGD0lw 1mh),FЊn7Rsсn^8 T`+v[cM{d7ʓ? א-iጟN@PnTX8י+&r^_^V'SH_p*έ1.O!H.O _[fQVpذ0WO^ ]Pj)Z5^ݓ[rYtÇ1s]S=p|q3u]52ow4Љs>vꅳG޿Z,p;W>Ok 3o_gׯ.nں}?.·k]1G~=pzk载˿=u*Zx٧wԧ2V.m7l|> .[ݳԓY  8 &^ڍFFȺ1pFAG̝[M:$l"I6ݽLo?oAHM V[L}~"tG"B4ᇡ /ø1'~Jnxf>)=,S>&"3TXn0"ϬkSi1!1JM+93M%Է397׷{{/W~倾k;~uNu 7|!=tԓ/?O}l4O~~酧6fO;̓]mCgz⋼iqw7'g{rf:1z{W@snÇ4aZ|P#ˋ}E`whxhlj:,݉M{tdxڿ" f? , |;yˊхPDo{IOOEo_ߖNWvON",T Z4N:)ª iJIBLtiFzBzGf* "tעDFu2'maY"빀3T0ZxQ&(MF:EmU]. fbCL,VUY1TՊ؍W:0 4:RQF;Cں똢SRӁ*GZ_z@eKSzh;InXgbF7;.$c!xJml"dA^ c`iϬUQ@ฎ-`d)p͑T,grApX 2GӐ1F$'r$K )Sα'!]b"ƕTz)6_-Tx"VE*dA*ddw B۠@1EWr`x9L41M@`;#$-('O iJ" !1$X%D2ga-6ҊvFbEP&Op m^ޞ抓%`!4AR "[x¼ .!CECHc=yţYD2P11f}B@oPV~ J ˣ wq)] 33])uKDFD{ o_1l{/|0jH\56ʇJ:*w{/&hS^\tLi|FƈHlRUmkNE1,T  U]-V4!F)|-Vm0KD 3V1LaifFb!1QnSh͊E|*Ct]-FB|yc}21. vm>rYT 0- =Vp?}VR6<(8K  ㋂"NQ&L_k }#=J^¤Bf? xt" VDr.,؜!GZBh~Wt+$IّD tTM# Z \L Eo(]J %t@.v{&w + %/"Z!!|7ZsbK;IXpI HCYҡBT,)7XKP ̧ U-eV/ Q nCR[g3nsÑc@nFb!PXc!M;c9Er#t`,*fn>S-ZO+/9)WrtdfSh)! V]=8cQ7l:H\dj?mSy6O)~v3vFw`M?2zzБ}[ gwhh;NbSĖ%>QEKO"L.46|HؼE/TӸw;qhlL<465pxā&=:<G TXrvY eB7SAzָihd47Biws5g/:B2LJ2 }*hJ3 yP M0 ,;kI8i@ᕰDiOe4y 4T~FL YI|lǢԋf.CsuMgFvxLVynrܘ?IbHӕ1R^BZOrk^`1Q~Cɡef[% .LQ95?'0gۛ~k[a7xpߕ![t`nQU1nT$hPU:CXUJJh elv(ܵm˦i0iƅiMň?Na {1G=PlRnvsSfx>W4iW?!'83~͟j׭}rvyZ`N뀆QPۅ1mE ⫈LJέBv?R꥚+΋ LL Ą%IeYrP&1玥QJ;悻s fs8RnsKh,J+cZ&rS.(( _Χ}[a/' CtUP[Ts?hE1<q]EJtyꮱI3;Xw]#gx ' 㵂/kԄN 8+ktq5.BKMt@2 +a+F8?FA/dCQϓ endstream endobj 179 0 obj <>stream H}LSWǧP--خ7JyQ*DEHS+/JZP|e6M{{s%=rӤc--w[]&co֝ y}v9 hpMx9P1!|h‹JNR-.%4:lfLPb2JG,|尘 Qh}1  s(B,"*mB%ҰH@DTm"&/ IJM.(aQa.s"L&$e3 L}FZRV.} R Fi7mޕoܲI%p4b?ɔq|sqYR^Vl1)e"> !<Ϊ?+Ĥʄ켂֚cu'O,NOPJ1!gTyxRO8*.}vtә斖3MJ;ā>lᴈ1~pmjƳ]==]gO.3fjE~\&m"a Ql2oj<{վ+;ۚ6)$9ba-9M_\v}pxddxK=_6lцaթם 2ml<0tstl||l垶ƣ3"չ`1(4 Q⪚/ ޙ|`rγVsvRCfU`ZRMڮ ޽?GS];~xWF&6ZEg b3rˎ5u^y'O>yxMr3bÂlcq`:}~yݙ+SO=l3uz]&`#*O/+4ZN6w M>z/|p_wI13>RAK?2+[z?x<_x>՞Jݪеpi]KuJqtƵ;wQخ=\|s 7R\|#zϵ+XN-i*3nEq^c=;Ͷ"+dH5(Jƶ/y4@^s`q &>GPDk0Zg y&ZU*J XЯV`2zh*b1j9Xw*GSڛSkoUj] 6{Q(Duu3M\;c>>S9jv|Evʰ=ılJ+-*TG8/Z!8bĔˉTÜœadAǬU>@8&* f*aQ9UҊXa&Z:"롢BSf}Mg T`:e}vmo$5gĮ!dzEq㔢  @|VS`*S(L;-Y|Ѷrb*|j`'aѠ(_%q2&V.=|B J? L ̚ IILlILlILlLlLlLlLlLlLlLlJہ,//Ҏ LlakEㆉa`dU$&&y}05 C_Ka0↡v\zq9nj-ㆹ"U084L;S@ ?u֭(Kp~x#8n(7q{Ս+R({4:A%tK|OGa0Qv#x=6 e2:s1Gb{>_!m|>|7D>شҙ,o@D!!n$$D$‚7I.b0  C#("G(X6K` HZOHLFuZ"R pY `sK$`A(Mt}!+k2dS7idABA̷ P/XOٚ'hg6wf>1oON֔xu$؏B(W,&w K+CnY+K M;I(Ie/%)v+n8F>d퇇*Kޖ+ 8 9I,%M[d9RZ6Z5iCKެmD?E,LT7Xl[l;~֯: .\t }U秎ۊ6d98.~r㛋e^e8Ip8y?F}lxck~ƭ[ŹEnݺO?\jmld6r.E2ihدݽwoMܻw_~1Ps`O.B$#w! h C'&cjۘɉCbܖџˤQ"pPh(oD{PylIHBB ! " IH@D@+>`1< D gŢNQ^@}LvtsSuڇکS[p-=yꑍ/3a|g7gw>u[w{~OSwm%-!B.B%P3gWpgsQ@o{t޸zӽW+xaJMbyQֶcwO_?M%>o/}v`;uMJ ɝ"%Sl]/7$=/eӇ}w9I1Ȗ%-˒X+^lmj9xw޻]>uZ pK6.ӊjnk?y{}=}o_p}ڢiFb]ݖ{<$0un-fN~c;2I)o?tSN/啅St 1:Kmo;v}ڶ[Z?W!v좚U[8{77nQ n|sZ7)N q="( Sf-mjss\F͵uvsgܴlCR"@;7BK1W79qƵ M]G[۫9)q*9J  1Tۛ6(>w&{uI~Ax=#&جUZSfAImM-;wCٞݻv4oZVURiҪ`xuNT'gViomhZVSVG*CD2Ls -XXc]bo(j-,\007݄1xBL&/ UO0d2/]`QŲt~yVANFa:4HS$' AJU4nHNΝO!yy3r2R xJ$p ϩtL&C#4x1)yb$JIdk5@J5g9f ǼEtx-nHLzmBBV:cM8<njFΨ'<-GNkH-Ӛ&W(AHp>׻pF8wȨō+n]+TKp\#tw8s3t^@7 Qd60ufKJ'2[-XK&i\"WէsRꈘktϘwgAl@fqӲ4{ḇWUFa l*,NX\VYm*/-(ͭ\YhUl-[[1)>1\;1%\o8<2y^YUmu-n0YY;)tF,Ocz&F?F,Xdc8PUE$$,>NImzZyFlU_+==xO `${ I^H[z/zW6cƨC3 32!'R[(tb򛦮y>}w/_=sŴXokEq$]WԵ+lj^}_?zt3Z|l%A- g_6k37_?}z}kg')IpҷK(阽n[O~_?}zu;Jlt"YY?cPmd]X?4N_]]s8ٻ/?~Ǘwn?~ngiH$V]Is C@@WY XuF .5kTר  endstream endobj 180 0 obj <>stream HW{PT^ d/{qRvUZ`Ԛh>ҚLI1mG:m:N3hX1>ZGi3;.`Bf2pav}sn]p?~kN?cC{]yaȰC| !CEƥ)(,D QA :vʊ:uAmرOTWD<~ܣ?n۰P]fTדP*j}G;޺ѣwn]<67AZPYS׿fΣ^_wM)J BSf׶߽ѹn޾7载k]X6FbS2Kk|>|pϞS2s3RmafW3`2¤\3f͘6u9Y) 1!Wn%gs/J(`0>+cDr|tdxp+ٰdTL|RڨYsrrgG$'m*Ȃa3F52-%)>aOLLJJNJJLL(D`а[d=ZQQp!ztw #R)!pHB1ח@@~57xeghLwv[,-Yׂmev[RΥvCűnԿj7X^iaIA)iY&LY,c KͳhaQUTA=D*k +Pm$aʐ$V5e8Z EE+&P2bHG0\+0nd*'g8[ fwJj"M"Pv&ZUHUQVxBRY[qS6R\TAy1dC8=:oX-k{=%ޕVkf͂zdĨi)vB" 9"fxX+ı,E5) # txQ ʱH,V/ bDb eQeq4D9PY_T󻉲yJbx C"-qhN.萛28 dAE?ҿ[p =Ih/Ȗ@l@Fot, b "DőEʤ0)S +SCpWUs zl2xAUaeL_ Ewp05b"Ւ#Q&P~2!1% "8ɞ+\9?$3If#:+)Vf҇rMIVEu 6&LjX#[aT@yT N"샀)2W!җG] j`aW\bA}Sme3Lڗ:ߝ,[J<&!4 {@mI):MUJ/b./M)i: dS_.ϹuOCHuue$iH1 %%>m Җ,4E,<E(kJ̧A>CURZ*C:"vSqKz@ Ӓ pmSme:J+mCGYB |BsZj񥶡Tp!C涵v-ZGs3ƼotT(rڶUP4%>$TGI3j騭P8 :3%>cf_oQ]"Qx )52AHs>kNR7ÏZvZ oDb~Е'?@Fߐ]"AB Rn.M ћz1K4yVKg$A2-ZÇb RuCMfr*oD_(LNTSNU81:=d_S *~fn(¶]eUND,T+;kd2 *|OO'AjL_aG{`eQ,FDѰ ADBҪR ?TPIiь|TMx19âԠj-ԡo@P!ʹة xAE>HCPѐ6/zA>% MByF(k/'A>CTmTZ5 {zEPw'4Pr! N'K*6:|vKhjJj!B߾TUT)^Q,+*]8sG/N*mKT 'ZL\ -Ĺ j&0U-p1$Jyn伦b9U9!PiV!X 6`z )AuOSԯ>!TH[9 5Ux%iDa*zbīz#nzD:߽[O\(ɋsPXE"aOmg#"fxqވZh0%W1ތݫU0|S[*SS" ?W}ܜnLQ5cG iV5 /qB` 3lOO'V ־K{KIіk!ߥ) D~#Ɣ`NI(2r 1Hd|jPȘ0Na} VjHMMhP,kw8Em>Y}irRd>y ,??PYp!mў:§n aY'̇~0ðͰ,C`%ߧZ1u긧0~ /jEFlNl.:Xl븳nJp8,>a Y*6pڸmBq>9w' $tKcP8qpXkUα`Uq 3:RaF.ut0ҼT`8Lhs0yK& Pd0& Ͻq0ܑ"gJNw0f_ׯ{S?LLUƱ1 u:2b ]6b)\B̏'/F]B%kZeOjc=oN| U9tV {As4Y>J=G' S]q4M]{DpXVΎMlzR4Kct"i!Flc09`t ~bti S6Mjv/ۧq$Z=[66C ̆#N>yzطn)JS ct^׃%ӭ?{|vZ`<-koiE6>6s7?^]_u4gi~9=/o^_]? z@2O}^~1Ă`p9>~06Hq?2~y/t{xӈw^^~8gzto>?_;zG<1!E=zmc νu4@͐%VvH%i=CrK[~$2 ÙٳsVz< 6 &߾t#Қ.ŨĂsIm;v\Sv%f3]h{sǴ ~QqD rwrTbA$ kUoO7ըHoZ;O4_VQyxAh~j>n6^9GO*SEªLjզӕ_{!B ;w4,CG7֣TRuvjLRQx08m?ޭv^tExuR㳐:ҝ\yUgeTQ%cØqR]vQYFeeTQYF=֫YFQ VGO)tB5niUs"[ӟ{ĺXٳyb'&˼.˻ϑ1no@&뻬Hd}]wY=W}_?i)@H7맬~5I{+)Ù~)맬~<OhbT|T?'OjoLet ;Zs}fuucJ:;먬:(VlI"J*'uTPRb/%WRiγ:ڝ֫m^nZ*kϒܱr;a]RYJTRYJe)L VbbZRH[7VvR: K RX`K`'ϩRj:ި 8+QĴdJ0\6JU*oe6 flaKgkR9LƐQ5k99c<o-oo59S"yl4Y૖\6RepmE(O[ fJ'e_V|G)(2:÷0R v.l N"nrOh-j;&`hS@)T~3ujo+&?Ţo*zY i-^1T^tIwc'|aBh4jʝ.^EG9iaB ?h3x&|sEzz1>(8~92i-#|듳vei]hd.O%"z}Y]a )x?Xq*'U-)&/;zce-x{= /i,3pVJh)PHL+> 4v ͡Y=pzF끞zgk NhNSRYq~Hjiדg0'5 (k2%ŇzJ<'_ - -PZ5Xb@iK8-ňnZlb,U IAC$5%Å!qи- &ۇҔ,ѮLUD(WiO 1Z_fMi>ǡ.(HF#Z\7(K0F0=zFtt IAJ0w#g4r-OG4 kF4NKF4 Χ#aRDq|vo M)ܥR>z6Nh4\Lv?)%ZbJ&48 @ėJ53 ʌ76P5ѫ8E "h=y\$=}:ff\ĠQ S@D#42<&h_kZq\d𶻘C2>SNi,\z)gXY>.ݔrV#HZ)H+b iXszI+&F1'V"oRZ@V"k@Z񙞵: gwG E $3Mh+#V,Xcz~F'"5}xzzА{񖐨Cs(Cs@\ Ӗ0 Z(*Yl9]%:m9oj&hKmD-ʹ Qa.;votxN!̀z$M;?z)y;4%'vҔoGҶL!1*߼&@

~8C;C|֎a1AB\3sto SL- F'8zGU)7Y$%zݜLJш5]N,JS~x9M$m1f"EAoؚMs[ $'/ъrP[L3^ =n8'#F|dZ 4%AN~=X%ESpC|IC2)(n&jG\Q?Q'a=֌__V՗K֧\W7m|uo7uFP,"@0ߜxo|}ny3她|YPy8ª{ǧ5Ljp [| y{_ϫ}2grW-vn[m瓺>],uDU>V}J~u OZwxj11q֫m^n |`ňo_:iMۋbTb֋j;);ڇj.c=䎭W8 FY[9FۃqQ5vԓ7U=Y,VK"jz< Ҽ~v[G噚DOc>& ףͪ=|{|T>M 2}3OW mLe^HzuD0?:{(Tݰp-#Sa%:O ]Q=Rjz78xT[z\б݂N]N+:Z݁j]ϫgA]t%_.mAya^m>rK)C!%DPJ i!9׷lbfdho?w1Xj'B'B'B'B'B'Bn ]+LhTNR 7FF{TޣRQyveţģģ^cQDJDj:EDDDިH9]م ',N+ p8$V衊*:Nres}VRz"]C< 7 D8q%H!$V*PE\բok-ڵV res\5JB1B*wOaCmw>0Nc>Fc~5}\5ʹwC߾Crε:fS_i̻xC9/^0FyCS)};]t_{x`nQ/vⓍ;d۔Zۮ' Ʀ xfc~oת>Ur^.&"3m'HvlD%I5l,}bH3&j|+e endstream endobj 181 0 obj <>stream HW}loI.$$9>R6_G !pi܋}8.;_TP'1P 6UZ:HJj+$TUBP+R ;ߝ.p-1"ys#{qde&+0Y8LVa2qde&+0Y8LVa2qde*߈! 7,LVqW#"Y|g5rQGbSzČy}qG|](ȅPE%9`Z1"kmdW^9ܾhiںzfْPU)U,^Ʌ8V0qMmUZ(FXJ+6;;iղʲC ,MzB;v&hQN'{UUPI!Eu!Gh1|djE+o?96c k[2,]TsS`ܙpe5a6^<:?lS?:k +_zľնc>J*uMԕ/?:}@f^"DkC/7UH3'*uxgbϮ\m n}sԹD'G&S[[KEJ߾}N_89~QEԻ>Mbތ0#3Œ0#̈!33R'g `.=7uޔqZ9ϮC'޿p:_z5}=zw?z\Jo|}T WQe/_MFTK~_?묩#X=9S_}g_.Ή`]~3g'&4=gQ0V<;o?9_NrwNw-KV"m៽W5#_[kJ35?ۗvS*s8߹U/s KFɍ?ѩmZiZ]h x ǝZOZu=v努"dxjy /Yzey"2"@E%eP,5ZT ग़H/]5Sw)坎v8CqNhhh#-$GB6he+(uBAȆȆ-Gp"8 r%`z >?EQ'AQ8!Nu;q{ɋ! p#|D6Vp$l&#gmn ˙Lf$iJ6HEՊ߱l"*D; [d#`G#ܻ]n, s1&!xo{,xBrViuUTUVvPAߪ@"l,)^;p`cL^a6QIv"L $"-P(l2Ufh؃=wP?ߡ=F>ǕK (/E1m#Q{F#gMQW8m41?$Qk֎"t:IQª(_ix_hg2q=Y D<-˷AOOb~_o ppPo`݋!?Px#P_؟_Sb6)8s.RdvSh?'&"\h%^͚D#жx,LP59ю"!xIaFIH"<`Kiv$Lr N&BgՌkۀD$A(幧 EYInhʖ4n2>(wd|3TG <_trcx2qU* 6(sdPaRGQ3֔RZJ&ɨ~}8"0( "e߼(qC ~yQ=vS,ǢyQV^(U}dxntPJ(ϰ/Gw^HWT>stream HWko.@a!@!rE>Sİ]B`,a+%e7=w/#ޤM@5Cޙ{:x.+wtEnf'fnhb$OT43nW3ze)}U/< |7pi27բcƙrſ'jsST볦*VN:fb5Vrbe2' OyV. (y2*'ܼn ͼ`Xq6[h弸/%1*x™y :cBLLCW_wG->ůM]NarG2fY4rfN[UOE27!ke\k^nֆ2ln~?h7y{[TOڝ9Y s!=h+VXA:ي?=6uYwSMLvWd'uQuG<>N/hߴZ 2ԅ+`Y_V31Κ"ϖ,nIN^Z߽l+<޾GqŦ\pۣGD-*oY8b'8ae{ؤ/޶iXַ0Ղ7O4#/~?tEXGwԵOy},W7Lӭz[c6GvY^r@4@ܬ;&6+<Ηo?WY7'ʠo~o|jWL(on)o-MӓA7GGWE8rnE#[珴!=`h12+CZw֎d/Q%uX'd|cElߐ(3RF-y+My+HsE`Ό]U7ł]SL8d}꽙 w1B'<u#\!'|D E$bTdw4u9NDNNBou>BЍMLr)#,=K%e(#fi&iFi4HKeN*RdI$IDa\ Qx888u`(8؍eQ x 0QUeFnD"aaBHa T>h-C7BriT':֑CZCi_42cB@EàC1#d-mPP{Tp. .#-e!,b #6@?*Pgy̷gm@N52ݛg%=$(g$n'l8N۴ݥ#. a-MAq6ew Kה3I֮ھR*Pp.D* 8Ic>U|( kI9"P(LxРFdQ%1IɍBiD|d&)n4Hfk:>Q;b3´ p!IKښx$q*wV1ҕ"d/ܑѨl#0@1)<2!B SZ“VD4q`'e9bD4B5֡vbPbZ= M!ZQ! !QCddE[&ol{ >y늀~'n3/p}A ׹=ʽd7uu֔պ7ӉU0Zn vuĽ8Esqz\*ͽ"568 븱nmt߰~mbNW{wuziH$d,:jq^;j=/K Wyw%DɎ>KtT٧'˧Qy:DZ%F3MnH|9@,֒ş9Io{1_LDdV>ROm0$>22 o^(ߗow[xAOu jLW,Rd*qcemg{% 9 4/vb_aWRq'ld?]_W| w]^{g/wI ႯܸʑMLW>ax l< s8?s" Nl{ |_kkk2s S` ; ( u A_,NY .zjR[.jMt:]H)n{5ȅ/91ӑyaU"OgyD)4 G#ʷy7ݛMn_UpןU_|->JFF\V Œ hΊ.Qەӿ~}=YKc~yǔ0 *w*iͼ˟ݯOF~@A }^v` I$X+춹,3zӮ=Q0xhi,. өieK(JH0ag _`߾#?YO|:RWwY`ƨ/;? ?>/=?'a `@e<mP * ja4,zj&,Xb(d  uYn6ڛ ż)5EcK󞲌2g ;[fݮur&>4]ERt}ꑵGXDL{>#K'I?(8e!TSTFi9Zie< #"VX[VFi,2ٛi[lK~nEtigh(.M8 u B9p#k6|䁦l>x:;J#ׇ-1re2HrR2*eó ؎҇e*~6p#6D4QdH/;utM>1L*[:?.>m"bN/ͧi";BӜ9LY颖r'3ZǘkIӰ/}z׻-q  TME7)*ixvMMZXԦӡ-1gk̷uŁTR_)VJV¯q~v 5)[-ě78l5*p-]BNq0GGwnelPʚHYjP#B䲙ܡ]P(mӦW.Ø憎dCzX/]cRkp(B4f ROq-:Q6⅚+ e].=ߺ٥ U\yVZP'Uh5"h j5R,u>J%wS̉Mbqdl}*FO܊?>)zn:Ʊ1}k׳tl]+TZ\79GŦ+V>NKRChC)eFğe^ ? KG&vɩ7ys>NS9OH}uVz4~^4u^J28~RSM4RPy'" ,'b`@Ʉk$4Sba`@p{}3Y+h(3U9,u6o4eN>5xkM7ŧf;8 ΅-`.[vzJsM4{7t:ʶnYZt?iJ 4%MbR6(P iT#=5UeԺ4\y5!ǻQn9EgXq5mQ->)3i pwt_wI@KP-e}rW{uĽudY7OП?[q]+yeˡ{Ѧg߿9[/zƇ40ӋTU5jz5*GMӭ[ 2:u< ^~ٯ+7F5;HH6YFc4t9CnO,vӴT,=<.xw9ˬsi'cjYgY2 |}RM?^LhY&s3y$r Rg/̕3ed|:WNST&S5d1>GQa /ð&XSg?K2&hY*5RV2EB˥r ƎzPKDttN/(+.`0a;0\5`xkxWㅓHWQZ㛑$E jh XV@9aQ젯#IT^2XKZL "F'9P"I1Y z>אP>BqbxKh15آbKTzMr5S4ԼZ6 .QѰ1ulg !7()j#T23`F6Ċ zSDEAPPEhX؏Z % Nq [b[@YC `2_S@<ڴA\-ģs_9EKg-gX8ӈ(xш :GDÃx#(&!!{hhb0 ⨰LPEƲC8W|1W Gu|\"mpr1 7{L 5gޔek] aK;D 1M+x& 䢂]D.l׈+0jE9t@_c!"S dӂ s-(1FJhgC<"_ d5!T@` !gDuQ`h!PG?m!ze?_eϿ\_>>~0D !𳄇 & RMa1Yc+9$}+) t/޿UW^5yr뉫䭒Z25a1]$[ILJ*)j)tT HKP5W/Jhyd#CO!QsiԱ,Ʉ?0S&6V0 ?;.L/^X;Hⓤ&fY|ÄN@!IIY0tYGDV4Z9vjߺߧsr턥ٝ)ߝr^9}ث^cw+=ž~ˊw_^t?]f6:x:< yptttttt#JJJJ'J/=t#[.UJŻ"٨-6]3E#zF/uQoܫ ^SK:[:u߭dRSu9J΋W^KwIrS l1 ᠣJ 0HtdVÀѵ{ƗVYj37/OpƆ_3y|S7U}S?"Dĝw>#r܋Y g Q؟X'~F FPi#dN: ,Dj{ f@x7ubƀ$jY'D1HP-8M9Q;͍n!m v7A`,HҘ tL BJW蛆,And#N0G׸ F EGBOKL@|NOġIsnSTUV е\:rqY2RQvwZMU=jN^jU*K6 26f[A9F~+Qt߀7f6 Q%q6>[4t#bzwXEJewN0+H`8,U{\P#n1'Nl {^ fLL :6szDp(sHLl" $ekLu+W^IlAVb 2] L(SΔ .ӃWiW(=c0FID6"| :'"lGj967O_9Wr{=V)_H?ϟ_^IO_gǿ^ϟGg_O? R4lW<^ptśX:H5^5kK’V"/EV *Jׁ>-scE0/uZ: "q>FV" K,1J,$pEΝjTZ \Q&Ea'mNB.=QTYzja=i1S哻H?>@Zѻ,aJ`:u(NX>>V@kU:H%VCњhU.ZVG *:iVRT/pvm.#>uF+<]>~Rz5j7z~j:6N*]J1]?Lu'y~~x\9{}\9nqGK6'[ Z;Cʠ$ѓ@Hf",!YxL9.xprNFbdt "hvcapt FǔGu -I,u6C%z cE 7KL D=ࢌ8px|,#8x&b%qO|D8hYd4Go8J X9' WәҙI3:t +Ƅ/-23!%:8鯐R'V6Z=/xK31jl8"lӃ %R))%(d$H%Fun eLA2Q)i%kCA\:^ř绘yu3voDDn<\!'y{""C&kLd*d\,;.as2g ұ&>tL<>ǑWpR7{vL?^ںzN.g"d'LoS^8Kf.M8Y^ڸ. Zv"'H R\|\+ Ir:xe !]/ز;0 q#q qP: c 49C"iM&p$1 &TPɬ 4C<\ynaVf銮t陧S:3O/]0t V=57;0V;Z]7VY7VWj+UJ+<=r]%uJnԚmI/__bf<;jE*YxLC,usԯzBQ T3s.xzDggE uΣZ&Pf,jrtߞz?8( ZpGb&0-vhCt? M5x { s+ܥZ[!wFi&AsYy\.Q X =PLjFaA\eYav$ e-ckwCoGTQ`@\nQ#wh֣݀'ٿF *o=<GvyA&( v8Ƽ,w&Lܙ3ML9{[^oMEy+6JN}vW>~Çw}951yj[=6ַq_ _pO_>>~y'}^>}~͟v忯zy>JMzzl\Rt#Md#Jva0J,Wd222jmViְWC444p`FF JU$ՅRRQ_zaHնVg)c$B7姿fWbXMF!їfF7RF|HahT GA}"=xp"31!$]kx"9 {/D- UE"~%,10U׼ x5砧39f, ;|&n3 +{ݾo~ ?Êsf/w7+A s-vmFS֟XH0 F͂5M1܎+h&`=ѝ}j1X5 vC?hل-:_V(h `(ไ̲aB 2KB_M+ZgU~,7xc@t?y:)Kպ8+!q[2z𼷕88oeG6c#KJnl& l%fQl :Z]zYPvLo3/7A oYnqOy#iGxF@:ܝL22j&?#zj`n8QTSNw9~ȩkʈ/Cg=ztrtw.W.:.Iek3WgԧV)5U묗ks?ULM##clgV7l{]}le2J5ؘ+{V;?;g̀G@Wc *LjimwYv>#p|g >%vEGC= kdz齂Dozl]B:x?߲^P&,aq QAYSwLK&Nwqy%MUq׮MR.0 Fk%_}~ (x# /aӈ8¹}gꞳjy%Ys~TgP70v'zQ9T]3YOhyJ,{L$kͷg~#|%`,OiCc\9 -ᥰfC-c0\x/];F`PPZCY^1yΙιSS֒wĈ/s,{5y2zu9@5V29j__%oF0Ʉ^'*%d 1k/eRяoi‡ۚ b $`>So}'Z҃6O: SHhot&v- lfx}~%D2g;tnT.…mI/g?ku vK&]. ̈́O>dWK  ]c22ddz" 1N1?lRwT)@ʓ\ɒ޴՜ן-+^(] 0>4 6 &5a"2SBg?HCqե FFM5рWl<$ۄ3f`[ӝǷWMmfX\z4T,lj5 Sf$۴6CR>@YiaP6%zpRStS_=o&3kUgKb;꾽39߬$Nw*n;պu程KxQ(z k]mvP(q9\t.7{/#2# B1Mpba  MtSqYPbl)rZ'v:t)y60|/fXkny%(6h@V8>THH S'4uv4p_nխ:;άy*ݥ.zƵۑQ>h=p"R`%Z%1;)v#v =^C@Z1DibC Z0T†bWhd;!50dmYs(5F/@O݉JV\8 " ;P O_MՊ!C)wN>e-Op!2I?dj+[1 cm[o]mLu t~€BV#3#g$|0_:n%U$ =E`xkaEuhRVSZ[dFb( }m &9$Բ+Lg|Wh³xe}++ka+#X;c,w{Dm ۶b.k"}3=blPĉ.Imu܁'pIѕ)DG:u {vKn8&[z=߷36D.D!ʋh8raaLpI$aIӓ8-p4+6ȦHFN:d8<"̀R;}oUZj\ooSsjUTR7zWuY K'9mN:4(phz?ُUx,S݋5cǰGwб/ь9'Ue/9mw=՘$I8 ˜|1u[k&Vr#6! 8?f0[uo;j<'Xx<=[΢c.T+J% IBIGlZ*=~B_OZQIE$2g%ѩ-Mjb:$XQ)dJ:ݼEfJZu[zg[T!p j(VTp6 ! gp6մhdtVK쩬VKrY(YW( )eelYpNRɻ7gRIEgkʎ e$6geŋH-;2˙]lQ͙^ټ͖b|$'BVKg&k7I3а+DŽh۲:<G`Z~>ûqyg̳dZ)N'-충Hd,Y,Q,0kAo(:E0+`ѿ"~YeˊP&+bW\,qY>stream Hmk$/w7 ~~0!cl0 RBn΄|{wVZ݃$Ҏz5=]տWUTQGO>ƘcK"I&T2%|)'JZҚjYeu60}v9Zr͵"ab]%bɅe]Ģ`f0XZBZ%LW[Mu5R-U[0~?~7gf1@y^yb]rsr bM6XoXmV ,$`3Xc6H#]tIGN[mJK-cRTVIEWNYeVJI%:pXy{/^/͛Լj~5طiFؼl~O>sZ!{"b0qhh@Dbp |q/8!tBť1J9|Ap諨^f5[1 崻<7m]!1*-"x#T䉤䛨O)bn޵y8]קFooooHߏo~_w}h/ݹQ|qj) s`3K""J,[*H  2$3^״x"@c$+"lp+ГIlMjV,x=@>W'p(&dGjCs8 ,#5Hй"IB8eZÊ@HWKՖӴD9QSH5!lC'N7GMFWf+ƗTִfHR@Jo\r$O<[`K 3nKmm$}aF:| y޼8QDJ$!EuVS^*HzLd&ȱ+s?H-%83E)EN8$I&IwҴx:u)*2 -e.!1vqH۲6uCqYrjDLԃbl5D5Q7Dx8CD THDa>&C] .. Pf! 'd2䁎#qJ88ʆ0q攝4?(T72!}x=Ή 1Mx&Dr˂A]{$v\RÙ׀ #RW09ED -`6 | 4ȡĊF,R[Q=$'qc y{S! ŠPC۳XOf=7?"\PÐ"ԘKVy2Ј:` hV+VƄQ[VAX2YG~%xࣃ*x &a+bPxp& Ή¹8Gg%D/A?y_gieȀneZ# ܁tȧi@q6ipj u8 _&> 3_\nKťHth|#6D!A+biwq76*4=M3~l|ޖ/wo}ݿ#~?ƾy~}{390o8zTf1ۿoEθ3ӧ5oi4Jq6-_l+{{QŠʪVTQIT@$n %h "5T1TA(?+?bF"d Q ^", #.O=d,APkAj]!sX> ʝ24 "Iyu!W}-4z y;,AqpoS 8qH!C DLHhRy!C0d9 bh] #CQv31d:x8~dj%>彭a6!8#2'i8/KQNYZ_v,D E-,G;/Aˆ{=^>{;&N) Jk풯7'_'I智~=iwDf?=yR4ʶ0TOȻx_Si'Ekp0#9fȑ Lŏp>kTSvܹvo{ߩo5|⩎oOx:8ܜq¸'c#q] xgwO[+36tm_398+%Yi(qոR܂ty|{%8nK`9m)5ӬP(;uJt J&tUF56Wq^s2D?~t$F-*c>*2ГCؗi-j۔=>~3.^qnqܠ\ x|ی ݂y< R%Y}\zQ3 k j&}gߊ0Z;vV]Uû_R#Y |^j3|TgH8If`l_*:ȥ\}w~דPLҍeED:]@QJ8W {5'hu7^^ιM~S.˅';B{;̻-bm YwOϟ%})=0w??~Y M5c: ^<Ɓxb2InZ']o4͒^@\gWg WwSB3m66?SWe<~BXϞҶ}?LϞ֓m1ΓI<'K~?y2 p>o j^ 7/qN +?\U6Tua|vaa{4 X(w?τG\b "B@*nfVJWazg*'o Vż E cB;ǒ"} *̚\[WL~Ŝ9|;i =K :&jOA82 eeC%ab򰃙A@Ī T2PJEJPn{E;H +СV,0hDX%HkrT0GUH^3?9ؓG~JUAu jO15` 8I |TxgQP{0BXz$k 6  Bj8g -Mα J`-zYĔtP2q-HȤ*YbNIa 6@Aj ް_m-|vXjLނn lU`&J=Ao9bjTpГ_Yx1H :NV*xH&>VU~vYXybz&p˛@̚5Ixsy/"\m/s#I۳؄j4UF9I<[[ͭڥ3r/fSƠ9RRЄ%ڦ"$OJBWQS*27P4/꣞Ltpnnh_yX(О9;vw!^j?jVrIfj4[<7 pf2Hs1,}3>%W _'ᔄg\r&<\oGN_U:lJ{e@i,j;TWkFO k7/׭OW›Z<vRoftOaʹT!:KdDb CtY~4)W;$%u ?S\Tb]8d2d2dn- L -$~`59e3gw !)*e7p}$9wx {:f ]\/Ha7 OylN§kƢRhm2^=ŒtN`GEM%|P8%Zgύmn"Cn<>t]qxNb"6?aН0[ʆ#"Ƞ,Б3`v,*lGKDoXsi~`}6\,k`x>w}c{-.{lAtk]H'qSF.>Wiw!r ȶv~e<=J6k,$7'i6o\7\P{S*`'6×ZJQ4` ATeC0-EC'^RáEX}zN7KE|:8W+'U.[!b6,< kPFo>:*p::sX+WKud:'B)>l,Z)^!Pq z| +Aܕ%~hڵ*Ṽ!b@z!($~ cmQ&c;R+nO|=6e[OMy2fءh_ᷰ&A;{>bTO!|q3~m`mKFP&Y~Xg]6G䲶ËDxcJVFOrN*,/Q[s}.ۛiĒF=[3 Aܺ=1g+cbl.qj=}Criɏ$Ǵ%35}4]qؖ/<J 68Bޡ+jzO.Z۔v={mw;9k՘aMƓڤe-5ubγxDX5&Bm,5UNކGd0#JU;` _pxP7 ֲmRkG:έ֋(}PMհxK%TV}ˠzE҅_ w[w17Y2zЄEq&qN 0*x89m0$+|۬il얧^G6nKD#BSf17l5GEؖIGm?&ȏPɪQ<&zI }e$=Ͻ&%B͘a9)pq#._Nh/Mq$cänFR?# u >c{5${]iPkUC2n5[w2Kk>Y34v|7R[#H m*Z$ݼe#Cf؅9?i{g[fL{Ha3_*k'ֺrupW.]:Ǐyrp04R)k/4*#.?;96:^\2t"߸%^gզ`G}M&X%*{fæHRupfʱ9 ّN !KXב~&lb8_븲~;i'p" dZ͂~:jHce8:r|Y=?Kj,n}|lwcM9hzӡMwF,_'!3 MY.]\q? ޙ@ʝQȵ;6dW{[r՚Xqv ׯYehF(%{)?l."Y y;./qCߑH d3?>ݪUTHU!э"}sovAHh9z<9ȡ95C<'j*%ry?(J&jy GJh5-Ԥ +h 5.;3>gwv标2\?}Nrco13ūsԎ E#°fTNS&sɬ1i#Kn96Fs``A8ˉ+q#~.v4*5E qz5^zsܝ(;bo(F_v42d#$%oVxr%o*I$өn] ٙAQaIdtr[7-yGmDc_ΠEixݫtǟ)6 1#+<|; XFjA4,{#0]ٽ.G1&5#@ _2&FU3:=$nwY*vlJ2mXטz} AKr0I3 a렳FB^nqB^46O9.LQ2Is >@Ū-JXNp]{}KS֧PV 4^x I G{1pfWiS}JHGZ%grV?! ru쵮ϩ6PJWKj'.2fpB37}5266WKX`yFZu.tI+B1jdkVfKf +ZbvRFD %!Z%RO刐SDr͵;M'0kڶ5iة#l_l1aqcfP]"x,hj*>CDR\P4fͺkN. ^-}Q`)^LuLPL}8;ףx,moMN/=DO-6>cRr $mMWswug /]uU 6֝Ccb!cVab4Tj\#$݌H(/A}uZ1_962j=Z) D?CH ׎nV9c8ζ9XI E7AY#2&z\bZ` N8̵bR/kG(ڂFVZK鸚cc۱9n,܅syv~%69s:m1*Jx9HNKCI$[ss|zdNKcw(#0bT _ iÎ$ Cj[=|XD& aG;%r,A80r/> HPvA y?8flFj-06{ 8:.r;&r3aqII#n<+OivڅmP@x9jEa@#7:Mt8+uvxL,*6Dx60&pC9MlMK$>DX'K'^؞>iM23fa/wzf]כӭҲN87u;H];˖=ߘ`sr)PN60goø|fDĒ Bk qVYah'? 0~-_A"-[ D ^Rxy.|n: Sø V:,]1i.A}?Hg̸=s$׽Iͼ`ncF#5Ĕ)x[K ߋĬ50mz0_5%3lҎvBWXoC&Q6N3ϛB =n%Pٍ%}dgthj RuhQ[u\>~Rbiϸh0ZW`r\?]}!Ǐzo_|-?57o/ GǏ~%?>ٿK[ƫqpa`af_֑x3o_FN RX {1DfӐjzEm7-EØˤZ!MZԑśP*&#$'BZN.0t)jI:ΐm:cRZ4l%kĔ`ҕhJua\lC5%h/[0aOd>x<ϧZSs.1ۛk*g]ē/c g7HL1gǴtҢnN#>B@8=%c0\AA +'B ݈|䠠, `+-Ҿt0)A')sbqѹee-?Ad(2X!Zby ’m KSEl8mdcel+\Ә8b0I5\Vvrt>ƕ Sh 曾wHI!̚sǴ`lƒ@{w{ s^skuƧƺ&Xq8ES$}; taïK}U@#qzXuPrCRO➗L뙃$@DƤ#$N0^F8OWE?#CϮ`p}]K2l418fUM:(_E@p|=h!YK6$M_I8{i wh`Vb̹ܳ,U7OxvXw' ,4ǐ nAS9M݅,{]׭h#s0DCXX-YRPD|cW/Lcvy;lw.S"b`'kLM3ƊgYR5˳I -Ѯ`H4Ҽh }UZ^mڕLbMCcHU[K[_ }a& iqwSW0N6[)rr]Q֗Z8]߷;LO!6?iƎR+~ o98ϯ? cҪ͂,Ӕ+ŷ3bJc(`'ҟ@y Ql[AٖF / f/J8cCF5g O8ҜLOHc}GCJufMlZ?K%f:|1?g@뎳5#lco>$6˫84[ӅCS.VM>[~C7Z:68}/DNy'sPPDco>[bM,q"1D7<\)&2z n `"+ldqZ^la9(h"K1Ksڷ\AU|Z9& lS+ME(4rg0@8 Iƭ`w2}4>K8|vI75(RܔPi8 `+%BɃg9((9X1K />rO{MT_a_x; e _St25=nOJxG'-?g=_9hj!K />].)R]e!lUY=]1U{Me/Z%*SUi ;;A^Z}% V8ci1M]dB@aʋs䴬QW&P~J֒Dպ$k$؉c^:J)/NwF8IYYB3d-߹7/ZHiFWѾ=u"ƫ {뼍c{7_-{:XHE0-3=sPP,Jsڷ3*;C[ &7rve=ʛ9g0>Z%apGzB0x o[Op2WyqxEaG~GmFP㯍zWx岞IvDՕV5V/g ’o9[.H#բ`5)V{VeѪI\(4k *:xR!SU٨}=XyrH``,*|rSTXqf0h5q4y+X:(9܏Mv~ `/-оt2Zjw/s,"BGaJP ,~L͋ABRJR4|CW/>˜/UO+Qps\cVTuAOkPZrՄCp,h_:|r4GS 8&][Z 46<4vl O]U6Z%cprPP,ڗY A;oYrPWaح\w¯vz ՕZWtwɼ! Cgp{dRQ;];P⪯AlU'*s]d슭5G{`y;MpCdULb`:Qz>?mq#W_qnw4[Y+f3A9V Uނǭ}C$ ϰp5۪h.Mv֚=|x2G\<-[r~Y8frPz)A A1s40h.ףطO{HaZ4z (9 EGQ\z}'kUXI`PMw, cd# f$Bpzl`Wy Ѭw9֙.h?/~a`_}ۿ|Uc՟?t_N?vq-(ZpAmdzZE .-*;,:N| #D+}ؽa &[kF{\ -ԐɪĄdcrw- :RܑPct77rOuBJ]kH.j >"\wlt񙂸. Tw|f}.)lf0A&Qy-uLW 2 vŮ5=}x.o]bOO }b2F))&GJ3V@-Gz9RA ̸j0uŮ-#==x0Xernb'k \804MrU{\8m-cX{J@֠ >q-0 TwY/Δt"&#?8va,4M5ۣdbcWw>ciJPf3Ӆ''d j3N9ň\q↽ցj1e] OWZN 6d4:WOTY/Όp TlQ|Ds& qjq/:P=Ƣbxhu kPKH40&`WlÃx9,8R &<WI-Bs 7xiqIά:5U 9ɽ\nTE+Όp:6BxZ,s $֊]H [1yM{IT&GPw۟ޯQے5PzPCOp ZGh:sg8ް+CΡ&FsijO5PzP%qeԽUe4J{f OE`U EMYMbY1Lq4e4{8Ŋis|a{Km&ǹqȝp ȶb*6ٯb~/Zcx>[`LoZ84{&Sd.b/t?N2Iϰ K"Kgq#@-:LѲCfϺPXmќtx%YF+ѩ 8ӱ,ꆵމj݁ TQܨ1wZT\z3)[ ]WSK ߠ- ||O b{J]#32Q3ZJzgO6[Ebmь4ǜ=aʢ=#W8Vd>stream HWK]G[8$[y?`e "HIwJ g,,艹3'\vV#Г?޼}75r w9O;rΚZ`w-Ra0v^d ApJ|408` 6)03wj;Swe|9$|-EORMsiŘR*ܹ+ܢ1t(;c9sBÈJ!u %W .Ef7yܰP !TSvfs)j%VpB\fks-|\ϕA727]Li !7.M^lmB{AͽHvRpڇT[;QWA".d=wqHq2x)]A}7QJ{=zSțɢ1݅qn<{JtqǁKCu@5#VqRJI=*8&Z Wޕ~ J5, -h`PMf`Mn>˩()?SbNW;vk&+q9*{͂+=8q*84G G:vֶ_Z մr`=<> Y9^<': ԆN˸1਄?MNb^ǿDW \sh|0QH!f0rM wh/gQF k`QfQ -U^Ṵ`}_ΣPV<Y)㫂ʵ! UO;Cb{kv|&uZ݂Z=}){p9eU5!FkXZ\^g݅e.s}!C%T۸Un,.NZYVv<.m>D^.0\'\U1V V4~h4âWMbJ{waYΘb-N##kqoeʋ|R-N9ɲ,hĔ8k bR\Z7N/wypַgPel2f֕J!poYb: !\W*F;?_6LM֗pR"2՞i_гX\q\hd ApbayMbѫ&zw{ ]2QzKh_ i.[qs '_SC5yK/- {GY##j07LpF̉VAְC"\`ڛ\#='K jPT7fFɀdBy a,'qE ky01je8o&Je`pyjO[p1̢РfM8|\iQ50&`ڛAޜBW&+tDfTה.7s^5mւ$a(\q*ǕrEj4\\l.Wէ_~x[^շ?ŷ?x?w_>{yzDQc~G+?9pI;Gpҧ7:N cTTQ6nq,(P58`okd pm3fǓ8Z89EZcZj߾w4Z1=-Cwgb=4Fy7f:Ӹ A` o%Ӡ![^XJ2":gGȔcdJLMo7k);M~ftN5icAshQLDUV^ ZJ)RClOc%3nՑmVLˆDɾO'`l~ɾqaz)Q8py#8Kv~^Pa<8g ":C`|sflz֕0?8IoVqiqw-"4C_'rrM\!hc#gy˓| sf.+p!]n0yơHivC}vgqxP ;SmއAQã3xVaR37j.cx3_)n ޠJo{a; 2k3;K:0. ˚zM 6W{&QQ<;voy9$ff|OG<IFH;ޝ]~e2#bo|7W?$&gd Bz{h=qՂq9s 瓙}< bB յ?7;0L)zbcNU8%%yPFny Q}ޛ 1ZD f4gW/E)'5f_lr{`B6-[¼f{Z0K]W_mCDiUV5g!L65#*8&];Ɣ3zƲIB1vhk՚ -H4؁e>̫D$ V!8ƛuk]wN:]tQwu[\5ȊSN՞jݲ-ku+6!:M)#lЉ RaIIvel[nj6z6:q]um #{{ f"_/WbmQwHh KSg,[bX +] q߫K[$(ae[FHH c_70 ʷq֪?4{=ؼ6f%F^68)!F !ƨ֪Bkd|#4=E&rD‚s>$zۭtUma`$!Uv\oq݅Zu *O߽L$&3lNylUauG3^9lfIU8%%yDV? iJ gm @v_HD$# "M/u]Qj+#D ̪}jYN7j xI1@# Z a1yb-ے^[5֚H$Uf$µ̢}9.W=Pыcz&/oK슮]1MjZ U/mĩڢ<4G+ XF#uƵZ:iؾ? aWۮcu` jIؿfŃ2lmjeL\BBLyPYn :Smcvi9"-jqpʡA7x9e?fM/^P8xU#ӳ$E Ւ }"Y$N5=!9Ǒ#ZQեwP!~JY}pKU; endstream endobj 185 0 obj <>stream H_oܶ ;@ Ա׎ d{k#cش\Z1 EO>d_ZNݡz ?pg;Q?Znx҆$[k{~YnrQRۢKJ%y@b))U'Wՙv&2qhf9cXQx n񉸔:@Ԗ}=vΓL8E$Rڌ4؀fYVFi- 0M aVj*FSrRe *MY"к/fV,%0|RN2yP1+v1 ZRI +ϭz\)1˹_J[2=UЫi2T%H *`nݳ ןtZ0C@v'F ɒ/bm!*o*@ƹt2h-[)UBG=vk ow| 2"k%Up*N5=ijjCrֳˌ(s[‡Zu- ME&6n۴4iFlˣ[5ys4ҍ!e}cqG@mZ0ִ^2n -rd(ŵTR!831{B˹ϭz|#2W24Jqiccתo4BBhJ-+S-sg -JkԂxe I>dwR*(] bI]U.M ɠn`Ty]i :z IM.ːHV&L%xE4KCKzWR1zqHW2]-'X=Fs4sD b'4S e=?;Ջ5&Pۀ3S>t BAR8>Urb 9e($G>oT"CBp~z4-nϙewf7ϩf.UfN-3[2lh}F?uwh&OiYʪjF{9ƗԲ<ɿ(/z !;n˺L:=qT+Ҧ~YjY:7ݢY>bn< R2ڀm D 0I`v_tX!NN잞M.ɺZQ*LȖ nۍ⢜USӱo\89f,ZFG``CGqD ̼TQa0unҘ-THRs2Wߊ\07R!۠𞞊RI-X" C@v'KG$~ n\ 1Vy)K2ΥA;nqJ:豣wXT__̫cLj-A ^[xCg !q(2g[TEn#7V*'3ָ|+ӿNOgb\F?uJ&|$>GPO(2ѐ2]^'xCg -?m!T6j\X栈w'%Lf"ca|y Qu€\/w_B(:# ^rjYd4Eh6t0ܴhJ-Czm0ZK!vsD98z_|Ҏ5x{#4-;RZUwPsQ^NjZ8΍Ds}qID!+%Mc@.H@Q%jmɐ˽Xu.j$h8;3sf> WS|=qH#}Z8>\>rzo\m8~/{!$3h{蚏̡z=,%N!;tEd@M\2y={uqm^dq/y [mЃ:&lN2jYzJzpfyIs_ H硶]ÐZ(J$&.~_Ik=$އ qΜ-$vg/uY^Vr:#+S҅|3`F>Ξ\^>WG#tӱNŘ/7CFwfGOg"r^6ptrROg/G/WdqVz=_M'W?vs3>SeկjgoN؋AhW]%K!j)!֒`89%HWZxemd5E֊h3 }2BCX9l jk$'w˘ǑB5!Chp(t2P| p۔l(ɺw[Ŧ8ЂRgu2uN ~WBҖ5*zojS2#XJm" tJIagpJs |Мl)c-KSsTNGH㉪>q\kDZV85th.˺Xb40b㒱FA*b@ĺこgF &`*Y0!uY 䌇@qVMc4 0WζENV}MN݇3Hi-a׭9L^@2ڷXW t'wrj.LC}c +i݂ho>ds uπ^oo߇2 JTF>s!LI|>"&vN.DI3)P9xw,0 d٨IqE9JCQjM[Pƨ/jj'p#E۪,Jmד7JAR?,Zq(ʸhihW*M66hǃoBc:@#PwfX|62y3$&tERgkhܲ Ho\QbEUqI;eZ@R. VLj!z4PWamwjcnD)Js8n3 h mb>0 8.r@!qTۘ20< TP[ja5Ų#L^ ^OÌF:FqEKkihgmr(N)]bF3KҔeQh[c!zNқ!9^e{ӆ‘i454X9Fqq}`bj< endstream endobj 186 0 obj <>stream HlWɎ7?Cm.p'=ɀOiy;H'r#lKr+E&sx93n>L&`L1 89xD@u Y|K(N9,Pp֑4([U0o~ k١XjqvbI@8ࡘxMzW=S!v4* ߥ$Ig'4)4+WA`0*96Fg.W 1P(n&EI+0L\\ HsMfψG40#?zu+.w0X-bQm#"z%'& ~l\Ȋт#۟G<۷_r_X# J,=# Q?x>JG+9*|=??w8't\Dڂ[PC?1@ p&٦F4f;>}_QjbQc' .^=3INh4 ]u4}BM+ƘXu)Vm6/ h'~7QyA_h9f+NfPr4]\F, mI8v -dȌ$?]AldLN6Q*g`/(z~H6 #FZm0w sp.`y0uS58)E@]iSO$ <' җ3#^ڗH lJHhͶB"Q\*jCP^IjFU\.. cdAnC˭V+J Ox // V\2|X-ywePy )cx3g?HA Z6 $z0\#Mq'D|\9:X %Fi7E ՁMf,CBQ7 vS=9j ;z?) (4'D0} %,9q8,9 ʠ~X @:x y3i.3p(=i$ULW薠ݔ^ZnX0$*(D *91+J*_*\09rc+1ƽBVıK0jJ؋ oo-ԒՇ7-/ME 01>Ntn.SGQ2¯JsPPʿ̉N`FEbBՏ-r"z VNEft#BDGv]zYDBld,{BX u"o_gW_EJ.qI(vq2&rx -"|:f!Hʴ`U#*cZŸ UUj\_({CbݓI;QgYL>tK|WǦ-yqk[,!xi–pKwbܗŢ ceY/.ɯƓ/ n^'&iعc<}wy!,z<>#6J\ ul> k9o&0z{J#9lCir)-`x_r^( }y>ǧ3 ,/D$$\Hxɒ,1(r-Zl`֙:J$lxvSc"*;ƇB4YA TJmqe誄B00w9Ζ+\2lHSrݬ;͔(9p E"owtU48dOCVʱ'd ҿd\9#^ Eyd|9u[|CE9mu]pq9q^'S;Hxƨ)Gԝ?նZבD b%yg@B@4B$gեw-EH>}VZ'CP ֪Fz^W!Wx!a&~E`͝ijMa֠AЌ7c@:lph65/+T&ve BkFMe®45Du8:WIp0'$_$KrE1@VδúE,fB }h$v~o` \TK'Lwַ0HdZI [d.ɵDv*N=E$,&ȎV\:6nN#o;dE˼=,Eh@q=ĭr & t\Z~pL|!=/?||.Zn/n?-d9=s$j1_ d+.$-w1᧞)r; kZ4\2%,|N& B}j~/kф}H:^}x{%=j5?rrpu}}E?^pZF(U[o{]>>z}^@=w7'/rF/avg\ 5xhEcȴAp.󇿠pvp@Oũզ's.88l@PE`+;Z Y T yXvyyEn_ DP> 7u'CZ}@]eFȊ!V8t:D( {m*(|: |T|[ -%@ԅN锶ʯFa3A !`Ae?a1@bcyr=gro)` fv` ̾i4c-.Y-eyb'pG<`8p8kw`J%_>=ϥ>={ib_я/j;5o-poׇ˫.~?yi3ҋ(?MN_姟rO^|/cZ<(Mi[2*Ay4>֥:mfVw0'=eV.y/ ئDj%OdUJ,A[P/x%= kS! v&IDrJx5vlhNc*ANPUJm)dM **`hѴ^BY:" A ^]UI.<$F,њc:[<'!atH,% ;+vk"Dr*SJfX3 T` :In88~þUoܮ P<52HɱalFVjrӋ,z ˴LȠ|IE qyz:j7Q.9]bZ&ؿ}[C5]7r(xܨ`˴{D,7/8NUeV7-])h0:Ҿ0(z3V Ekփ٘4>-UB:ͣP ޹aʑ7*Ֆ6a9>rS h]R'TH1 I9Ǝ)us&B(٬ij(sr ׇ;Sy-L"rl2[˶刂j^d&@{!oM0H4Nc0Du>Hm$ĄV-̉+,WʾTSXBY,ٙkة=l].S2-;(5sa 3&! 2Nk,"7&#s 8vZZK@y.{/ )+ޒfHϩ-D|ٮ:!Lc@c\aV"P Gx՟35 ]t5YR؄UBs9y)@sAs:3 Ȩx! U3jm*G30OYW8Yx$ljo:ALJ6[b|}MP(V?.%DNJqSoK-??__{{/X?a2[~ ߿a4L'>S9`Sy{ <ˉYF%Y1+X8vT5Wj \Έ`S0@oڇt!%Gn&p~w AFD 1?Gfߠc3N@(bZ= 'aK++!H)) ☟l`*97 l ه779i_d>n1lO\})৳رszLTu^Nux.Px XgՂ ;.߾DH^2[`aT`r W $ʆ\(Jg{J*\ sS3E^3G<ױ-?5] a{=w|Q+Ԝ1(b(׬tRmRTE.@(w"8Pd/Rݢ'@ESV'[0>Jוg:ID8|sMrp4RcQmCxeʪ Z$;oiK"D Ds(O"%d^7J͝[Y]rU=;6' a?x/xy) Wo QAl\ 63l-bsxٶ=jllm4"b2%/.n1Ǯz6C$LOa8gq*(v ն#bnӈ6Ssr5BWĵp\6{m`g0$x.x\"Z0nѢC i~{j%8؇~r{|AtɑDkZk^0<%iqRܕ܋9O -iџ KX\yj}BD/~рZ\DV̔,W@wM"dqzr%IŇLp:N^40QI8(JE݁zx@͕8.؏ݯg EqQDK'dy^\1 ?Wȩ,M@GKhXeqbn[7V #D9{a@QfC(ణ* )^fg7m^,ofj{R[p-MI9[+>`L&fdm,#Ulmg1hx^l.V˲b@*ܖ0йK2 /Rh=aXh,|˓lL,gkt&T͟.iH_dS^.XJJI޸n@ZɻN P5`(UHrp{8$̽rU6dYCf*"w}Wjiyn}^Z7^ĕ4 ݾ_̏p]H^rs{&kD'#{n1XJ̲,di1C\hZ>'If"d&@,zwdbUjQA^V~Ma :+`RO,AQfR'+j`A:.jlU &fcձ$ 6Ob]\ol2_~n.OxP~.fyAN `+n[VO6 'he;ND-Ѭ1m C߰Lىͮ蜧)+mz&I`Gӏ%xTF%"/&Ѱ1*w{R\KaP >X-+Mc!gg>4HD럯K[:@KsV-bdsقIFiYc2Jr7,BzX;työX/pi[||7?xywGD?NTۋ7oV`Uf/g'fzIgԒۏ${ ^@7V(@X ` L8kZDm@$5A8HO'K % ~)%2f}XI3G e{Y Q#x3;d_w<$xŪG֜f hVb|VEld\uM [1vuVϡq68 wl)؅_b kC'mdXs1is0&83#Az;fӭ^saC|c`K1qx`l:/r*4'1CŰ>[1nu>;e0ߺ6ħ; fĸ93>llfMѹ2~JV[Dc0k@sOeWAe0ߺ6ħ; fĸ93>l[M#PIScآy FYTP@,tF]`rtx 9&ԥps+ UfZ<,!fkv0fKF|7#S wo?@{brWd=4Sow;:r0+ͣ xZG^]NwW_7T}OϧO|xHT"ܝRx6ܝU߸E QQs7ʪ 8W(!_g{>Xm]66)~w/ѧooow7nwqG YW$9xWжs+i-.ZґP{s#Lٴ%x>"Q-~(2d4XbӻZطIY\=iPZDVVt=nJ%5AFZ&n ɴL%{cj{^i˧t,B+ZuLD?cLıx8&󽶋[lڨIR9}$r)!8h~`eBYKW 6%:C=3%냋n]9,}$2Zyڏ`1C- -@N"V0i}R& B:cVE_Z|7Pultaic% |B`;˔9rlBi g5 gyѿkM6鏓ϊ P9O/_NW5}##מ`yAVpv^n3hVm 1[`*%/6$ /4åi{ ׀ dk9IA(~O53$%Ò7]}I9g N=j۬1}dK[ޜdN"d6 B1 iH6 C&NžfCO$`$5:šuf\_v"}mS4KnȣCAϭڍptbO2dy)2^@)n.=BȮ4e2Itqoف[ԓ*ȵ16|Tf0u{f1H; XỷPbQrj>EؼJd8 *J KmcsP#zc{v~d_0,޼ܽX,^}t>F/e/OQ_u&ܷ]mo*?iv{Im?^~\ݤa| {s{w8PSxY̆foru۝toW>(\ vߩYg#,\gbH@@2ColioVnza^WH@g$m&KU[ow;oe))KwUM7'4Sנir.TX''cP 1:VR2Ġ16d"8LQX I3\(W;&}I! ]א5s_q^E[sXd 5|7Eΐ2ըlfl`iBeQ%$t'M.4jFѼfyuBфd.s&$u{\L~V m# CAOtvL:ɝEB+˥'% `VZ w;H_ܩ3VT{ fmpUFF czaMN PY#;rI"lv^j3[\w:)J/]}УS KŦE`NZsȫ " V]<~UC ts܅E PYcW#O@Wn:͓ؿ*ǡ8LƃnQ=w|E9_T$꾲}fIļk{4^!=kF)汾rb @Fa@Pc0YڍYiH8]#宦PD>'Y5Ҙv *X/#Fm8OscYGlڳu^z`v;00H 'kÕjDu$b(hMVCjld1Jg1W0ؓ[.:zڍ{[zb ]T ̰zP˷?SL1_Wp%9xru30uYpBaf2ɦmwҝw*݇ZdK;/O;;떘lĆ jMD8[52Eś¨ pz]"QmxM*t]wxM SQ#Srq1_[9j+*:oOhBA\7 /RjO CQctj.eAc .hEq8w9 fڹPwL\2H3A$S ޯ!k6 7+ȽƱknfc5!eͫQH٪ e2Qu$'M.4jFѼfyuBg.s&$u{Ψ\L~V!m#CFOTtvL*:ɝEG+˥ݧ% `VZpw;_ܩ+3VT{ fV_Ku"OIvh0gInH5Y5aa {dݠ˹Tl5j,G8!^xAmHaa\nX ߑJI&ܺoXS Zx9,&Gv{J.4vę՜݄l95oj1u32f32#>54diSqȇM] 晛i7 vvc=rpٗGP9Tr#Ašژz R2"PbPT-M4f$v<lu(VD>XA v\\=V&.a'DVL" Z 75!9Wg̈́u/c;;`'Zz|:V? 첏H_]2SAP2P +#`Xyu$#IH*GR9?TP4ӃTV򚗐JMPW8FLȪ2/~Nw ();yU? B G:0Wwee'eDB$a`ojtu|k ՜ aE(VDS?ެ$paCbi1h$[+J]q1=Y֎zzԏ.fnu="{8c]vA;s}aoсC/#X %&vPQbڡBM1&Gf0q =f&D:$Hdޫm7~Aa^ HA{w%O"8Nd ` zE8 xh:6>o3+S왞꺞f P7/:oK:fL$lFyj00[ԓ>esu+oz6L/?W>J;OqƔ1)O`METٓ=񼊼!}u&75}qKZ>ΧuY&yA2'0$KȶR+5@A^Xhn MyM=9oʓ})VZ[6 ¼H~$"i{B> #Ig$mGAAbohg[O\-tzH_a\*PH GΒ?MlhBziiC] >0X2Hڑw46a9q8¹#k3 /$uqrWrtͽч$ iGQ&p>eǰdQ14]ANhHuVYUۡ(L2ɹ騕s[j^u.&a]6_K7=7;2+w&}&EAM| R9/L| x% |KJ|ej7 _86e V' Pһb>%S+X$'~Ti;=-4%Wd*a.g:2MzΕe5q""xT"t()uDB* 8ֹ/.6j=5&2I Tgzk9 -V$ <KzKwdmnBp$v;f\鰧08]`NX mopM,W~85-C ~&G 3g+%66d@BՎs`Zk[e+,5hLG&c3}γ.!Э` j&gSM懈"ʜnP/XMc1QQ9֮amGa #n{גl8`dFF g߽|uGƞ*vonXysp/?o%}KǛ+pvm?wWW|o~%댞f"đ)ʹSo`?/njjyu߼q;BGX%0*,p!-7 rP; gF,)L%1ufHpXib!ƚB"FNt H:`63-ߜ+2o(!閡] %vF;g4ID3q i -TS>sd6 K/ ER澮8|-&&pɏkoOdv- Ƭ"M#IwJmfy%x34lywKjyyvww=򋟮](VLScgM C?3il|syqf/$^_//1ؾz#WM^^_OHF= ExiIܱ"D-RD4l_C2ML/n;^W ū$b?NU_ %yÁy4*(ᏸa>stream HWn}'a^r&2L ـ,}Neghbٞ꺞"LgIjNjĻÃ6vdct NpQ0@7w8g 1}VwS<ctS4h@1|||~Ϣl?nN϶7nyoķiqzGg}ۭe}xeu,3R6rk9E]ֿs3Yt'WRGNz\Bj~~ۮ?'#~X]-ǻo"; cq3^qyp =V8OC)8G;j"ERW͠8=}/U7Zx5!XI^E(ms.b 3 TXq}6>C4=+5|r3|^ʇcq";)c`Ϊ@a/8v 央/vչ AjԈ.X2 y ZARН&8L\ʁk罉ZW۠U0{/>.8M,d_=vwz#<:ǙBM"G7xk/7i0q^q*$*3' ҋVÐF([?> q'qAA GƏ ˆ:j|S:F)tZkNJWm ̓![jOGEj}D!Gbꐹsd ,5ҡYApc v/lzGSXuN#qEp3R]vMiϨ3h:k"iirb$ǪJ 1ȜX  F^#Bfԗooq:R a鴭Q:`qUIΫ``h*L`ѡHqB[H,:TKQ=ܛ֊kbN}9wa0&gRQAdI2DӜWxat>¢2jc?RD&T"n,y5bʸRՒ&|6c]tÄu #h$|0LUBQTبP"aз9܋zU S^Z^$GK$Oo<D &qCoҁagf"vE€ȠS7b*(ĉ,Ãi=?Nhմ2ַIR 1;Z<N 9xPfP0dά: e#FR#绳c* 6{^xqny,ߥ4a?qdTڐ2Rč?adDU”V6qgH c}Y*cP܌l؄H d wPiڏ78<}U}uszݽY/v|$MX 6b]"~,|loYwl]ݜ]v{_ cG ?މlptJ\/sB?S X\̻4»YbB\^q3H]L۝蠊r9a D4s^%ಌh1Æ*&UtyvQ1D_n# ESLd)bÔf*vDb:.ҒɊ׵GvxA :d.U0:1Y2>2LPtWՏHYZBΡɦߴACv9⦡CI\_NH85YЦC%.$xOh04T=#@i8;2EOxnO<I+XK݇ʺQ/<ɗ #W?[)$+\*p Mi*bCbK\C$r/N"201oL\=5@eUT28)ߦcb6^.H$UTYՁGB`<32]b4AN%<71WɊ>cb2* k@ 6iUbmDACH*I%=HpXH0,`lq<`0&>>ԭ{ٽc&ZuTq2j5\wVƋxZĺuqAʴ9 0 Fٔn:xrsः#bauޛp_dO*vk)dEpN]@9e /&n? ^Y&bkr.tŹ_~ە!djlFoO.c@)@xMXLgRP18梤 :ȧ̯ 4d䇳A12X{؂`!Ė%n S4vw\8) eCh;Z۰P*Je톚IZyu1̄T- 7v5R1*d%#b-~k _q;1}JT,̆pSj $uUFD 8@G +g{h)"N"wU`ɺby* !!o5dC~]3jrZsawf0ۨVٸv1[tb`IYG&>#(Uz$Uu cŌ CW2NSjs|U@(QHz u]YeBa]F`7GI9ل8FS;0p/S5M[  zgʢ(EFM\,RN: ^9)|!Q]WoIܡ8ąD=Dh3p #JwXB1lDhy+X(lc}aUqͽDЄD*kݶ k"Jj%6}݄=VσJ%)JI޿ou/E a`v]PuEp!D{xp"0O t pSf LpBRq.` z"57Kj$i"?Clgٖ4Ro~W lOW#9QI%AN쎴xY%U9jeP Ȓ$ U؛p|J~ {\!'60+b!:LXX@e_45SqRtUǴˤDԈp{c0 -m ~/}YQ\,%B76`Ջ" f]z|}dWgiKv'H.ً*t({2vp8 |M&zQfWMNeJ4._k1&a*<$XȀDEeQ}hA.!! p'Mp)S誗)sd_їJىnB3IL3yį<}r<_)o{??Ûׇa۟]?}_.,w(:G /K^ayv0F$h:0Aq&;%Gۂ '(/WF}fsb6}dǢ ]Konj5s3?/+?b@S 8_!4d,Y;YM/#nq2j^]J?~D1(hj\8?jf#bWp2aZuW(f]<ٷ(7{?OŗtLբ",x`a RXʧY;&RA ?Lw\MKT֣.`y?Oc,yDImR(ꑇM7Xk&6HHۑSrIin}?Wնs96sqwdb]ݮO(u|JFܺ)ixdnvXr͟7U8wuX[2=~/>JE|f$sߕe*h^RSo!z]yjba9՝8b0l|*Ӳs۠ cѹtxz<Wʘ?h{ Lj7q!ԩ/ZQ5AB\{"SɌte*xxjbu0ȱkq05YnQ%i JdU?mUx&PypRe xbScu8ɸfP6e1팩Ϲ,;z0k]K[J8`A&3s*M' (frࠥ DuQS9h!|7puW5`OvjV{·mnϲp`kbE?v$AV18Dl2(ynDd\+6| BJ{b^^HO!=lNnYAcr #\[rM z}DG;Zr#Fc6׳D\VBm6B*{4H+G5Sh2-si2ev.Ih0}0^-+J# xS~1FHSbl(_ h<8L>A'Oq!RT:(q'a s]%)fy|)a.ږsxZl!dcבN7`ߒUaEFqzU߼x|o.?zçwj5,|˫o/~7ɓ2?>ٿ_N^]ߞk| ^s*wϮ><8. ] 6Yrh r VWVL&g]Z]tk SRa3O֓-}N_j qV \qQ8qZ0԰>?k^&=Dx6kas^T@ _uO8M]Yv=ٌ(TjQ!W9NQ@jLmBnN#3@ &)[FʨٲIvߥP|Kc$S3I4GqW# MYxq:t2i-N5"V` "^$]`D*fxXj+&UX˴^, tT8!ZSa P =VQNp(5 1W8c)ՌUW2&>ikBP+^!ܟQ:Ufl@d.+G0>5t6Mzg87Sm W*.Zf׵ ϐgb/sԩ$Eq*k#PX@ ~"/R\E$umM|LXӆq!Ln*@ qb $/3}ԽFxZ@$Y3 &zmօt<3Up%*h u Y>U^y]J>U66y]ض̆¬s EE;e:RˍLk{DSJ0rzU-1SI%(7nԯfa=4p}7T``h/_Kla;e&D zVq?O za'^XN,һ@Gژ~Tpu3s$Vv"@/M!Fhq M5q ` ^}J̑rUO!5Iٽ;aPZȈ5Rߔp )MɎ݊1)e B۶h5QPB(BP,J 7˄s[Ҳz@Iэ 1L(tbsB6 fjL/ 9f[ b+8]Fh^2nubL39|1S}_ <]@_ьI'a eRF#~"+MA-2$)8p؛V IMKe CH"91>"o4Wļ5G)r!CUi0F6rS )7A#kahafau@FbN*XoU/4ςU{ndL?K.O^jmCR%Y-;;RB ꭂ2:˲{r^/mN>f G d<͙0o@7\Y$ID@JrSC!C Yq].@ vaY}.7eB]=o鋓7."+e?ެUCFMdVԫ .e!OWxFhF16ӼtJTTrm8{|HcFQ [PmTC?3CZ%b$9=sou_!B:*1$#/ƋR? =hmy#xK?a,OpR&*/y8o 6^4tZQU3JVuFFEs*Xxu̧Gb<P@$߿۵r7EWg^}x{{ߖr77 1Ԁ oAڨi'Rɮ?w{J0)|;پW*IK{!1LY1(sbvYՁU#JM0_*E)hB.)T\#tc \ѓCOz%`2ɀXcl`e8`Zԩ,g;0hFq&4is;3#EjCƧ@mnC/ QBeVc.yd'eǖ@}nyƪUJ~y lDz }i3|<} }JmCP({J+BZ\SQTF_͏W3\QtF_^DlFl :0[] yz"Dqʇ@W5 ]}+~6 d.;!W=\utA.򣐋\QO\=^WBj<1?Xs2n'=vP`,0ߺ[\vߝϋN  ṛIN¤j̍Ѐhu0$WքSQgBm7NLުԌkOf4j3qiN< Z{ѝA $3hG<4³,"U_@>5ТR r'8=';AC`geR䃃S>8\ IxK$C,HV{]*SS !nkXB"֒Z+c| 7l=v/.0S38O֥2Y#{ '~0萉NLЌZLjvVc>l abս'QlތS78;'h 8p+[gHh>f+n^|z:Y_v~AڙAW!{Bީ0bf=ؚؗt/6рً! N D:$ (I>\U5Z5%.蠖FLM8%ӡ1Y}Qv۶υIKeJ00r0IEʋ5ŐK:bʮڋe3Ever:lf~3% Wh / |ԤI`d;`qlqtfޔmN44 םIH]\{~ɡAt$8MxnR,˘u&c@%XV&:~[7|kµ9)RײHz8yx& g-SOStjIuj~MĎ5ڔCZS bUvJA`K&׼N^0碚wa8^.CgJ{Ƶ2@LZ^?]t^M0(03[M:!+ɴK^lqW$/yy|CT9g]+N x: @}}Wv_pjegBEe4m*T*4)7 |*h'bEae*UV畝1)\嵊BQ*~v$daA%s bZH"ԢӜA$ P / RJ&12s끤BO N-q[oezF@CxMu-􂵒]/Jrپ2wA*6iCuY!4TAe| MҶ/!ŭhA73 .ʬG5=>$-n4*,€t1'}`>]f(C"3=s+fj>AWAEh']7d@cjz7Q<nQj.]l~8~0k*>.,-zZ[t>.M {TH  j鶋^T9*I VS`? .~ QDwm{l_1z&}8MЏF3mG.9Ȣ,٢d_|=]I>?di?0Z),t DvBh^#XMfeIlUGW*jF/.jr^}< g!$H6=ba,H |R1ZRE ,'Cs Z6ᕊ[ZsϐR}io]7 Rڞqdh ^\1 V{w-ՍLA2;O&3H<;H *$_PB,ǥ:fsI9WkwKf/a%6]J!jA.m\\.L6Vp8*]Սz[DۇZ* jIluyP.RuQDL?¡3M85UѓZT5PּDfnbY2n @gCk&]P,:jz{_>  fzdeॐz{-GG(%0k tK` zQVjCkUЙBгn .q, j6W(ίؑTJhl)fQ q>SwedK+j[fٿZ޵ϺpFYꂩrԐdQm-}ߑqCqn&tHKyekQ48<^_JxƅW F9jl:q.2x.ea9C*P~U߳/4.\v0/BѢaSe5r[yռ@`z Z4Ԡ-͟Xwiv/jzVkD}p]힥vv/n:O ~=9y.j][xQ7wޭO>a6JQr[؍ zqbNƃBiƤ]Nɇ( ig;^U4hP =N$eF}Z8c]8ʗNf§265:ffga={FycWQ6Hsb]cqON^FU$ΐGy~^q@LGs"RQj70tAHG9| |k{qn#VD9srcƜݓs6>>7]HW9N[#Q@q=bbz,m7dvsv^wT#Ĺ,!^9 -'}])4\3u{bNW:;(>[/׉~&;d#C~}|*hDqF3%f1vO;ʣO[[? W<'qe|:uixB [; i#]I>?dw*):B^dԎ^%1 ;Xq b NPy/>ū4^y'hN#@蛾M0:@c2\pho TSw= xhPB M!eg${h_>|fb*7qd9oz/Y ~p|=?[!,鎉Amvu/M1[0(v[ܞYexW[8Bept9]537G"[e{X0M(>σ)Ć) SXty58*6;^gG3ªy\H'(L_Q#r=KEoi6&9mI=&c{QwEK]+SKSmUR=rM;x;L/F?fu^ٮk:o'q6ۓɢtT+qyŨN*/I,IֲP_ 8`W,+u/L0%\RӋRS# <,$t-Aΐzh;%JKMAZu- -{x`8 srBb~ ^Oxۀ 9 ebXW, endstream endobj 188 0 obj <>stream HWkO/@~?/F#˺vxvOU.#ɍ̊e>]}T5gb4{޾l ooM1b;Uu^W.c6y1MK&blO[;I~kE ;s6fǽbq `٢)}I,ڊɚŲ.kZGl9{ΰQYTlgyYIuЈd9 nଽIk(?ϛy3wz@{lV5*9]yYp>2y@lg*gWhK|I0zL3. 6-?8?gM,_.'ŢؓeaڌQrc)拫gÙbvqǙ)UOOWe|iKStf[Ƽij95)S%UCYkSCIXGR6@T![YwTϜm!uMdqE;zs,բDwƗ0Mt/,o@!-k *)-zHL0ĞtuM_2Q _}t^M}wNOY{>>/AjI G?y)I%u_(4wXߡ.Gi(͇4Qџ6K]G/oW e8xY,[FJz ב9+ [ͪ lh6e)֛Eļh.h,"KJM9Mz4ߚE1*?,}mT@,ZI;ʱϰRf 2 FQt  J|䤎 5 @Cʟ*ӜLɢhO+[Y7RWM$yjT䈣0FX@k&c-H3Hlc uƐ}#RI8EEuP mL]'(-Q*"2NJ;e$ލ3=ޒlxy2h-j?v3ҽ"~Opt 76żdś]p E] \-:;g`tA?[ī;YEu-vyU4g2y;B}.7|e3{TQ&*AD]kYↇ{ԕؠAG@H? \(|b{cPP>Qʙ;t($ &Tjux+q#Ma|OTYπ(AN^3~tG2n!aKb TΫ: ĚJfpFMڒhKR55م%572K l=V)tn|׆|Lg^ooH80B [.Ml+AK-0!VcC 2=ntqYhUs xXW"E˧DZJu1T7J~o3|f8-}N5-ЖZ'qr?LXQqƎӿ#5 Fji%U~8_HZ3%gξɄ/?(<>d7~DM*.;.gd=$$jF4-NʻZ+G!{yc(y@4zorj;*E3="7 A||6OYG%ۤy*W_(7^uֵYvDBU, "£̝b4x9\eCVk?W2aDwRxSNnS碌2 hW;t99U3U~> cȄ3"}sy_zUrAH)Fg%.3oW ]'i(򊔪`Gq,%"jյ[R {AJdNjOB BPg˄y.2?3T~V4PSIqۓKEB)uҝ‡-|,Z 6+]臌)-м'< lor}|*Ϲ|Vrc6HŸtm28N|\**GIӗ:ȠFxrqhh':Hcgx;9%ei'^E /@lZz)h*饠h6+- {xJ{Eo(܈t(VdK&jx=KT\8n,qr:\ 5 쥆a.IT78M9 Pkc.u4(r2ͨr-Aͯ4V7Ȼ'vvD~FUh6Y=/$]9(wR 4bR3ĵP  W/l8/%!dO]㹀>ۃX": !{hꜺCzJ_$ شR$]eZz)h+e$ Jn0t߻uŌlb[ҢTp#Rҡ:-jx=K U\8n,qr:\Enpl~yQF=W $3BdFHy!ʡFCp$whȾ4bRCĿP uZc6,]Ww< wI47G3ډ y%\k*- H@wT.HbKADDvi饠h6+- t2'#slmW`k`UZnD S:PV#B·PC8{jK<Ǎ NSZǘgx 5 |8o)zgw{d+ͽ2z]!Q$D6B:uV IWE0#FsJ$aLKQ ώKBȎJ`_j!ٰt]_K.B*\]BƀNۃH: Otz%\k*- H@{T.HbKADDvi饠h6+- 7M'C甮X`k`UZnD S:PV#B·PC8{jK<Ǎ NSZǘgx 5 x8o)zgw{d+ͽ2=jAH$gTl3NBҕC2H,օ I!}y%AdG% 0/l/%!C]B?/T( xVD/wwNOԜ]#"cfh!ay3yG׳W|c 3*#Bdh mǙMSgj,rWM% [%4daVIom͕bk- dlO\Tw ֒"+u$}r˥ƯІ ɱja.^[CM9 PcC!?86$QSJu`>ޝ'Q.䑫;vMf!:cҡ\=Ϥ*r$)CC.41!*)2>"_ڷi==h)b/ o@۲AP @vD]3s-a:5X9æ֒z f28Jkpd[cѡYaj- H !RGʸl!P$"9VP-%ދtK|)'jc('dž^< qjQnB'$ʅ,p7M% [%4dIVIom͕bk- =;ԙٮ l]% D01VH@-AjxD$ d{nq6$@q PG!N-*yW{uDG_7;g+^xȎIr<ȑ0X`S wOFSy(mgef|BhJd22"<hQZ+_dDưqz&RbeXА;#, ~Z>SD}yzr͎M*Iu)6ٷ=CK a0A,辕$=%q d5| z(E-s4X,h?FY"llS~#XH >vM( -f!¦f8O),)OHi&>hoIږq_9 @v^5b~[9{oH_Ru=iL'c",7>m<p? :G_ endstream endobj 189 0 obj <>stream HQo80@q@E4Iۧ6)\vPd: *K$?mĉh4m06"E;_X?/v:[)R{}^NgV/5X3e?@|j{ҿ_KnJ2?xg_8,7~ךmDebGmQLcSf2;k`:=ؓk xd)^f1 BW"IbFL+!P^,\5YwPziSp[]oj%Z2cA`[֮ڀl7ˬF-7P)~ Fbt윌rwzih.%^48$²ycbb<2"io0S5l` $M@nx|y7 ?I2UN95qZ:W ycsARLS?@LM*U4D[}dT7Xi^ADc^ނvW`OIh)(A'Ifv_I[>Ǵ&=1N+WZG;hܱ )ϩS  wp*H->2x4J L/poAeit\7\51m;1~y-.=Y c~LC+-4+oϴq(hD\ތB'մR !ɸx(;GJ+P0Nزy0߱[9p9п.zMEZ5PU7׻Y|V],^]h%Z2SxwtgCYfm6lټ!lu7d"'$EV0zuW%h?6<b>|vLl- P$3MJzaT&y fycsAS?@LM*U4D[}dTsñL/PΣՍt/zovkRgv czam{aOԊSj&͊3@ ?1C7й /ep윌rzih-)V^,(óYw]e[9ʁVrr׭k@+Z9ʁVr`؏h@Z=Vzbprz࢕ kX()-zpJ=e&r: jφp̪Ǥ2 ]͌ȫm0- ~?Pbz'n WɌ$#򮯟ezvrnD Kr`rMjMNa/,^ou9Rc[wlYͤY1|#Dq3f:w,CqP.wZ6 &Kѓ%`$czPz`x>[5Ъe 25P*KV],^\dj%Z2زvtgCYfm6lټ!m+o@E[)] H{YZTIR^Ĺ @0/[t'T<$Wz:iBw3'i%j[vp;6$9~*N"[EI:GFu3FD4-hwu:.Q;.&פδՖC,+1?ygL7gZy8AW e 20j"z-zJ=eZ,vnYu[6oTS4:A9hX ċ&CE[)] H{o,/Te W/8q. ir#P/#̋ OxI2Xjp鍺=@; v;8vN *iS+C4g)g/vN95 Zٶ UysIRL_SZmm@|@_,JvN95 Zٶ UysIRL_SZ34MAE47K(qoAe%Ipv0!um8rouy싕z-z4Xpj+GB+!f/nKqG蔞]ʾ9DA;KGyy;<6VTX bͣQ} (=Қ'5w 4W(z$T<ʗ[.Ys.(#h)̌[\bjwл=;BUi;Bx'y. YfpUdDJ% Ar]$u: @ 0T',M endstream endobj 162 0 obj [/ICCBased 170 0 R] endobj 190 0 obj <> endobj xref 0 191 0000000004 65535 f 0000000016 00000 n 0000000076 00000 n 0000048436 00000 n 0000000005 00000 f 0000000006 00000 f 0000000007 00000 f 0000000008 00000 f 0000000009 00000 f 0000000010 00000 f 0000000011 00000 f 0000000012 00000 f 0000000013 00000 f 0000000014 00000 f 0000000015 00000 f 0000000016 00000 f 0000000017 00000 f 0000000018 00000 f 0000000019 00000 f 0000000020 00000 f 0000000021 00000 f 0000000022 00000 f 0000000023 00000 f 0000000024 00000 f 0000000025 00000 f 0000000026 00000 f 0000000027 00000 f 0000000028 00000 f 0000000029 00000 f 0000000030 00000 f 0000000031 00000 f 0000000032 00000 f 0000000033 00000 f 0000000034 00000 f 0000000035 00000 f 0000000036 00000 f 0000000037 00000 f 0000000038 00000 f 0000000039 00000 f 0000000040 00000 f 0000000041 00000 f 0000000042 00000 f 0000000043 00000 f 0000000044 00000 f 0000000045 00000 f 0000000046 00000 f 0000000047 00000 f 0000000048 00000 f 0000000049 00000 f 0000000050 00000 f 0000000051 00000 f 0000000052 00000 f 0000000053 00000 f 0000000054 00000 f 0000000055 00000 f 0000000056 00000 f 0000000057 00000 f 0000000058 00000 f 0000000059 00000 f 0000000060 00000 f 0000000061 00000 f 0000000062 00000 f 0000000063 00000 f 0000000064 00000 f 0000000065 00000 f 0000000066 00000 f 0000000067 00000 f 0000000068 00000 f 0000000069 00000 f 0000000070 00000 f 0000000071 00000 f 0000000072 00000 f 0000000073 00000 f 0000000074 00000 f 0000000075 00000 f 0000000076 00000 f 0000000077 00000 f 0000000078 00000 f 0000000079 00000 f 0000000080 00000 f 0000000081 00000 f 0000000082 00000 f 0000000083 00000 f 0000000084 00000 f 0000000085 00000 f 0000000086 00000 f 0000000087 00000 f 0000000088 00000 f 0000000089 00000 f 0000000090 00000 f 0000000091 00000 f 0000000092 00000 f 0000000093 00000 f 0000000094 00000 f 0000000095 00000 f 0000000096 00000 f 0000000097 00000 f 0000000098 00000 f 0000000099 00000 f 0000000100 00000 f 0000000101 00000 f 0000000102 00000 f 0000000103 00000 f 0000000104 00000 f 0000000105 00000 f 0000000106 00000 f 0000000107 00000 f 0000000108 00000 f 0000000109 00000 f 0000000110 00000 f 0000000111 00000 f 0000000112 00000 f 0000000113 00000 f 0000000114 00000 f 0000000115 00000 f 0000000117 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000051202 00000 n 0000048489 00000 n 0000048844 00000 n 0000049045 00000 n 0000061445 00000 n 0000058207 00000 n 0000050103 00000 n 0000049109 00000 n 0000231123 00000 n 0000049538 00000 n 0000049588 00000 n 0000055520 00000 n 0000055406 00000 n 0000051720 00000 n 0000051805 00000 n 0000052189 00000 n 0000055557 00000 n 0000058244 00000 n 0000061521 00000 n 0000062006 00000 n 0000062952 00000 n 0000069751 00000 n 0000084919 00000 n 0000102822 00000 n 0000111395 00000 n 0000126519 00000 n 0000132206 00000 n 0000141391 00000 n 0000143749 00000 n 0000159943 00000 n 0000177431 00000 n 0000183301 00000 n 0000187819 00000 n 0000205653 00000 n 0000220229 00000 n 0000227091 00000 n 0000231160 00000 n trailer <]>> startxref 231333 %%EOF assets/plugins/colorbox/example2/images/loading.gif000064400000022323152510437600016451 0ustar00GIF89a ### <<>>PPP|||Ǽ...333@@@JJJ̌zzzyyyCCCllleee!Created with ajaxload.info!! NETSCAPE2.0,  964!5:; "";=5 ? 7@)26<>(B(.*0(#"3B/(8$+1  $"pA&X("["hDBhH‡ A D ED^:*ŋiH[ @N"^`:G@=IBTD "nD  (-$`ܹxwR !, *X[ VY\ 1-LQ IJ3ZQ $FJLP TVZ] 7@GKMQLSUW<^B(. &KPR(@KJB/(8B12˄4 :j/Q "E% 'RPA!BZH۶$0 Ep"q耈BGxѭz@2=P'.8daۋG4/H"-)dA^N8ƶ pJBHΆ ˷߿!, $N?h6b-(.$ b\H!!US((1@/(8.'S u .FbŔ @@^"C.A x(:*zr ~/)*@3_=sς W>  Ƞ  . T#ŀ$AG cXn] 7AdXhJ +_[\6_l FF n8_km-oHZ=pS.?b-im=eG4 D'GXDϛ!i "R22%E8օP@  9, EBJT$ǍA EuM_AP8Y @6}XD%2")TRDaL `1TNBT=T`ѹxWo !, BCHQ"E kQq b`DNj*c .  # )JO6 (3PQCUrY:?N9+RO#:.9,6p;a(/ Qn)r" HXt6EEB66ġpHA$6,hCT>*B$^IcEaQ& _`yRȊ7) 0 yDh:(,KHQ<[lʝK@!, .+l %T3 &M#sb /Ol( tPk _nQR^?Hi It _egrN+ENu`l?vVu So6[/FfrpFjo%GF$ AƂQ@P(Јhт@EPhDAC0nHHFn܈@.2bQ2 Q@/\"ȦYFh|ё荋&5 }h4 ` L+pc젵5Lx0$˷߿}!, l#m2 mc w_ 2C$(\t$)nG j1Gm\ 0hvc!382#F)Bu+\|jb>FBhB7d, ~ؘD"/*:ңdܸPTY.@S (^,DI$B$GȞX|UBBG5,U A72Ks*@bܻx݋7!,  i! SH 2C?,2H96.GM%/BuHw NTPL7((//?/C]ML3@($x .^Lx.ц[u4@LH=h EȆ+VPq"YBj\dFBEĈX9·}3D H; Bp8=p_ǎ 8 ` "砱.'8#PT ʝKݹ! , $ C37,C/j %4Dmc$/BiD%F\] ((/@u]K8(4$Nc]T9 /4d.̆ '[ABƉ 0aT$ϐc"+2Lb!fBc@ 7 *z! &N3TG: b1Dg \"K!@6)P@zL[7t іHDЂ8t &$:PH˷_! ,  BO,$i2,@ 7i2o&-B/7B[S+&k((/B-jb[8( 4_kFH /ۅ[q6.Ȇ ,' @@B)0J&bP$0ZC9RB)D*cG\!0JPCb^d!C؄T 1h2#N1 =(fZ6$#5Ȉ2*tY^.M(v+n$˷߿! , 7 (( / D477BR2G9(AB(.R6 8( u&^ /Åjt. O!皋$88.@cd@T'0PEQ L'EQ p ȀSY(x,[@/+XN<A X(<)K^"thxd']pS F~˷߿!,  8(( .7B(A/(8/B-/  (-j@(/B-S(.ֆB܈B+EN6(41 [˗—c(Rw"!D$ܹ9B 2vsːl:v B"!440و1OJ)E"=ȕ 4G VBŎ1@xahZA>R⊎"؄DHʝK.@!, $$8((  B(A///BB  (/(8.І4 NjS++R(ۉ,UEHH?S 6\(w7Hlaǭ(eF  "L`M" LjįrZ!F*y(6l[9X p BC*+ p:)BB$& @ a "OmDFOٰ۷pF !, $$((  B(A/4/B7(8 (/B.҆ /j ,̉(݈7uC'RQp㜢fq[!⚹e 5 ͅ!/cTֈįsK.q(xT ,0$Ns<B ؁aX0?@P ;> HU1#QPb.ࡒn$˗P !, $.(($ B(A (/B7( B/(8.І4@Ջ(܉ÿٟ7A/FZ@R"X~ 04/9pfXg"$``<-&KRc@"@ &)D|);R0=Z㛀0h" P΁< Gؘ8 0Zi#" q x6RPnl@IFڤ $!^ -dvݻx !, B.(($B-M)E(A$@Y:VB7( pZ;Î8TpgB/(8%[̅44B4isdK@ 5QQx(""t(T8C`@I1Ѧ! ".\@3uFQȅB/(84؋/GsN@(H$ Ϛ6ma6 |8Xe &P'*cE:PJBQDO."QNSI8tBw<tPMgP@FA nH7Dvf Z0ܻx݋)!,  E3 B!t;:G"x;=&4\)*D$@ X26Pn8 2(_K(4$ڵpʝKWn ;assets/plugins/colorbox/example2/images/controls.png000064400000001072152510437600016714 0ustar00PNG  IHDR}2FP$KPLTE???߀ϗooo///___OOOF IDATx^j0 P-ޝ}z„ұDPzj=$`"F׻~۪"S|C$I_(qu0d1ub#2}1D9!5*\Ȍ%Qu&?.˪!?j t^cK/,i~^YqQlJnHW7+' J׹㳘z7z{ʛU q]z׻ \IY2Tpչ %HfHu'uHɱK =Sjy!5)u,xr}~G$nv=}F鈗$>Qk )w|fYO6y7G{Ri7$WwWN\!+u{C'zZiQ< UJ`13އz׻^Z`]IENDB`assets/plugins/colorbox/example2/index.html000064400000012660152510437600015100 0ustar00 Colorbox Examples

Colorbox Demonstration

Elastic Transition

Grouped Photo 1

Grouped Photo 2

Grouped Photo 3

Fade Transition

Grouped Photo 1

Grouped Photo 2

Grouped Photo 3

No Transition + fixed width and height (75% of screen size)

Grouped Photo 1

Grouped Photo 2

Grouped Photo 3

Slideshow

Grouped Photo 1

Grouped Photo 2

Grouped Photo 3

Other Content Types

Outside HTML (Ajax)

Flash / Video (Iframe/Direct Link To YouTube)

Flash / Video (Iframe/Direct Link To Vimeo)

Outside Webpage (Iframe)

Inline HTML

Demonstration of using callbacks

Example with alerts. Callbacks and event-hooks allow users to extend functionality without having to rewrite parts of the plugin.

Retina Images

Retina

Non-Retina

This content comes from a hidden element on this page.

The inline option preserves bound JavaScript events and changes, and it puts the content back where it came from when it is closed.

Click me, it will be preserved!

If you try to open a new Colorbox while it is already open, it will update itself with the new content.

Updating Content Example:
Click here to load new content

assets/plugins/colorbox/example2/colorbox.css000064400000005773152510437600015453 0ustar00/* Colorbox Core Style: The following CSS is consistent between example themes and should not be altered. */ #colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;} #cboxWrapper {max-width:none;} #cboxOverlay{position:fixed; width:100%; height:100%;} #cboxMiddleLeft, #cboxBottomLeft{clear:left;} #cboxContent{position:relative;} #cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;} #cboxTitle{margin:0;} #cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;} #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;} .cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;} .cboxIframe{width:100%; height:100%; display:block; border:0;} #colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;} /* User Style: Change the following styles to modify the appearance of Colorbox. They are ordered & tabbed in a way that represents the nesting of the generated HTML. */ #cboxOverlay{background:#fff;} #colorbox{outline:0;} #cboxContent{margin-top:32px; overflow:visible; background:#000;} .cboxIframe{background:#fff;} #cboxError{padding:50px; border:1px solid #ccc;} #cboxLoadedContent{background:#000; padding:1px;} #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;} #cboxLoadingOverlay{background:#000;} #cboxTitle{position:absolute; top:-22px; left:0; color:#000;} #cboxCurrent{position:absolute; top:-22px; right:205px; text-indent:-9999px;} /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */ #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; text-indent:-9999px; width:20px; height:20px; position:absolute; top:-20px; background:url(images/controls.png) no-repeat 0 0;} /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */ #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;} #cboxPrevious{background-position:0px 0px; right:44px;} #cboxPrevious:hover{background-position:0px -25px;} #cboxNext{background-position:-25px 0px; right:22px;} #cboxNext:hover{background-position:-25px -25px;} #cboxClose{background-position:-50px 0px; right:0;} #cboxClose:hover{background-position:-50px -25px;} .cboxSlideshow_on #cboxPrevious, .cboxSlideshow_off #cboxPrevious{right:66px;} .cboxSlideshow_on #cboxSlideshow{background-position:-75px -25px; right:44px;} .cboxSlideshow_on #cboxSlideshow:hover{background-position:-100px -25px;} .cboxSlideshow_off #cboxSlideshow{background-position:-100px 0px; right:44px;} .cboxSlideshow_off #cboxSlideshow:hover{background-position:-75px -25px;} assets/plugins/colorbox/bower.json000064400000001055152510437600013373 0ustar00{ "name": "jquery-colorbox", "description": "jQuery lightbox and modal window plugin", "version": "1.4.32", "dependencies": { "jquery": ">=1.3.2" }, "keywords": [ "modal", "lightbox", "window", "popup", "ui", "jQuery" ], "authors": [ { "name": "Jack Moore", "url": "http://www.jacklmoore.com", "email": "hello@jacklmoore.com" } ], "licenses": [ { "type": "MIT", "url": "http://www.opensource.org/licenses/mit-license.php" } ], "homepage": "http://www.jacklmoore.com/colorbox", "main": "jquery.colorbox.js" }assets/plugins/colorbox/i18n/jquery.colorbox-sk.js000064400000000665152510437600016265 0ustar00/* jQuery Colorbox language configuration language: Slovak (sk) translated by: Jaroslav Kostal */ jQuery.extend(jQuery.colorbox.settings, { current: "{current}. obrázok z {total}", previous: "Predchádzajúci", next: "Následujúci", close: "Zatvoriť", xhrError: "Obsah sa nepodarilo načítať.", imgError: "Obrázok sa nepodarilo načítať.", slideshowStart: "Spustiť slideshow", slideshowStop: "zastaviť slideshow" });assets/plugins/colorbox/i18n/jquery.colorbox-kr.js000064400000000702152510437600016254 0ustar00/* jQuery Colorbox language configuration language: Korean (kr) translated by: lunareffect */ jQuery.extend(jQuery.colorbox.settings, { current: "총 {total} 중 {current}", previous: "이전", next: "다음", close: "닫기", xhrError: "컨텐츠를 불러오는 데 실패했습니다.", imgError: "이미지를 불러오는 데 실패했습니다.", slideshowStart: "슬라이드쇼 시작", slideshowStop: "슬라이드쇼 중지" }); assets/plugins/colorbox/i18n/jquery.colorbox-et.js000064400000000604152510437600016251 0ustar00/* jQuery Colorbox language configuration language: Estonian (et) translated by: keevitaja */ jQuery.extend(jQuery.colorbox.settings, { current: "{current}/{total}", previous: "eelmine", next: "järgmine", close: "sulge", xhrError: "Sisu ei õnnestunud laadida.", imgError: "Pilti ei õnnestunud laadida.", slideshowStart: "Käivita slaidid", slideshowStop: "Peata slaidid" });assets/plugins/colorbox/i18n/jquery.colorbox-ar.js000064400000000742152510437600016246 0ustar00/* jQuery Colorbox language configuration language: Arabic (ar) translated by: A.Rhman Sayes */ jQuery.extend(jQuery.colorbox.settings, { current: "الصورة {current} من {total}", previous: "السابق", next: "التالي", close: "إغلاق", xhrError: "حدث خطأ أثناء تحميل المحتوى.", imgError: "حدث خطأ أثناء تحميل الصورة.", slideshowStart: "تشغيل العرض", slideshowStop: "إيقاف العرض" }); assets/plugins/colorbox/i18n/jquery.colorbox-bg.js000064400000001073152510437600016232 0ustar00/* jQuery Colorbox language configuration language: Bulgarian (bg) translated by: Marian M.Bida site: webmax.bg */ jQuery.extend(jQuery.colorbox.settings, { current: "изображение {current} от {total}", previous: "предишна", next: "следваща", close: "затвори", xhrError: "Неуспешно зареждане на съдържанието.", imgError: "Неуспешно зареждане на изображението.", slideshowStart: "пусни слайд-шоу", slideshowStop: "спри слайд-шоу" }); assets/plugins/colorbox/i18n/jquery.colorbox-no.js000064400000000665152510437600016264 0ustar00/* jQuery Colorbox language configuration language: Norwegian (no) translated by: lars-erik site: markedspartner.no */ jQuery.extend(jQuery.colorbox.settings, { current: "Bilde {current} av {total}", previous: "Forrige", next: "Neste", close: "Lukk", xhrError: "Feil ved lasting av innhold.", imgError: "Feil ved lasting av bilde.", slideshowStart: "Start lysbildefremvisning", slideshowStop: "Stopp lysbildefremvisning" }); assets/plugins/colorbox/i18n/jquery.colorbox-fa.js000064400000001303152510437600016224 0ustar00/* jQuery Colorbox language configuration language: Persian (Farsi) translated by: Mahdi Jaberzadeh Ansari (MJZSoft) site: www.mjzsoft.ir email: mahdijaberzadehansari (at) yahoo.co.uk Please note : Persian language is right to left like arabic. */ jQuery.extend(jQuery.colorbox.settings, { current: "تصویر {current} از {total}", previous: "قبلی", next: "بعدی", close: "بستن", xhrError: "متاسفانه محتویات مورد نظر قابل نمایش نیست.", imgError: "متاسفانه بارگذاری این عکس با مشکل مواجه شده است.", slideshowStart: "آغاز نمایش خودکار", slideshowStop: "توقف نمایش خودکار" }); assets/plugins/colorbox/i18n/jquery.colorbox-uk.js000064400000001124152510437600016256 0ustar00/* jQuery ColorBox language configuration language: Ukrainian (uk) translated by: Andrew http://acisoftware.com.ua */ jQuery.extend(jQuery.colorbox.settings, { current: "зображення {current} з {total}", previous: "попереднє", next: "наступне", close: "закрити", xhrError: "Не вдалося завантажити вміст.", imgError: "Не вдалося завантажити зображення.", slideshowStart: "почати слайд-шоу", slideshowStop: "зупинити слайд-шоу" });assets/plugins/colorbox/i18n/jquery.colorbox-pl.js000064400000000720152510437600016253 0ustar00/* jQuery Colorbox language configuration language: Polski (pl) translated by: Tomasz Wasiński site: 2bevisible.pl */ jQuery.extend(jQuery.colorbox.settings, { current: "{current}. obrazek z {total}", previous: "Poprzedni", next: "Następny", close: "Zamknij", xhrError: "Nie udało się załadować treści.", imgError: "Nie udało się załadować obrazka.", slideshowStart: "rozpocznij pokaz slajdów", slideshowStop: "zatrzymaj pokaz slajdów" });assets/plugins/colorbox/i18n/jquery.colorbox-sv.js000064400000000634152510437600016274 0ustar00/* jQuery Colorbox language configuration language: Swedish (sv) translated by: Mattias Reichel */ jQuery.extend(jQuery.colorbox.settings, { current: "Bild {current} av {total}", previous: "Föregående", next: "Nästa", close: "Stäng", xhrError: "Innehållet kunde inte laddas.", imgError: "Den här bilden kunde inte laddas.", slideshowStart: "Starta bildspel", slideshowStop: "Stoppa bildspel" });assets/plugins/colorbox/i18n/jquery.colorbox-id.js000064400000000607152510437600016240 0ustar00/* jQuery Colorbox language configuration language: Indonesian (id) translated by: sarwasunda */ jQuery.extend(jQuery.colorbox.settings, { current: "ke {current} dari {total}", previous: "Sebelumnya", next: "Berikutnya", close: "Tutup", xhrError: "Konten ini tidak dapat dimuat.", imgError: "Gambar ini tidak dapat dimuat.", slideshowStart: "Putar", slideshowStop: "Berhenti" }); assets/plugins/colorbox/i18n/jquery.colorbox-tr.js000064400000000762152510437600016273 0ustar00/* jQuery Colorbox language configuration language: Turkish (tr) translated by: Caner ÖNCEL site: egonomik.com edited by: Sinan Eldem www.sinaneldem.com.tr */ jQuery.extend(jQuery.colorbox.settings, { current: "Görsel {current} / {total}", previous: "Önceki", next: "Sonraki", close: "Kapat", xhrError: "İçerik yüklenirken hata meydana geldi.", imgError: "Resim yüklenirken hata meydana geldi.", slideshowStart: "Slaytı Başlat", slideshowStop: "Slaytı Durdur" }); assets/plugins/colorbox/i18n/jquery.colorbox-nl.js000064400000000643152510437600016255 0ustar00/* jQuery Colorbox language configuration language: Dutch (nl) translated by: barryvdh */ jQuery.extend(jQuery.colorbox.settings, { current: "Afbeelding {current} van {total}", previous: "Vorige", next: "Volgende", close: "Sluiten", xhrError: "Deze inhoud kan niet geladen worden.", imgError: "Deze afbeelding kan niet geladen worden.", slideshowStart: "Diashow starten", slideshowStop: "Diashow stoppen" });assets/plugins/colorbox/i18n/jquery.colorbox-zh-CN.js000064400000000651152510437600016562 0ustar00/* jQuery Colorbox language configuration language: Chinese Simplified (zh-CN) translated by: zhao weiming */ jQuery.extend(jQuery.colorbox.settings, { current: "当前图像 {current} 总共 {total}", previous: "前一页", next: "后一页", close: "关闭", xhrError: "此内容无法加载", imgError: "此图片无法加载", slideshowStart: "开始播放幻灯片", slideshowStop: "停止播放幻灯片" });assets/plugins/colorbox/i18n/jquery.colorbox-da.js000064400000000651152510437600016227 0ustar00/* jQuery Colorbox language configuration language: Danish (da) translated by: danieljuhl site: danieljuhl.dk */ jQuery.extend(jQuery.colorbox.settings, { current: "Billede {current} af {total}", previous: "Forrige", next: "Næste", close: "Luk", xhrError: "Indholdet fejlede i indlæsningen.", imgError: "Billedet fejlede i indlæsningen.", slideshowStart: "Start slideshow", slideshowStop: "Stop slideshow" }); assets/plugins/colorbox/i18n/jquery.colorbox-de.js000064400000000651152510437600016233 0ustar00/* jQuery Colorbox language configuration language: German (de) translated by: wallenium */ jQuery.extend(jQuery.colorbox.settings, { current: "Bild {current} von {total}", previous: "Zurück", next: "Vor", close: "Schließen", xhrError: "Dieser Inhalt konnte nicht geladen werden.", imgError: "Dieses Bild konnte nicht geladen werden.", slideshowStart: "Slideshow starten", slideshowStop: "Slideshow anhalten" });assets/plugins/colorbox/i18n/jquery.colorbox-es.js000064400000000516152510437600016252 0ustar00/* jQuery Colorbox language configuration language: Spanish (es) translated by: migolo */ jQuery.extend(jQuery.colorbox.settings, { current: "Imagen {current} de {total}", previous: "Anterior", next: "Siguiente", close: "Cerrar", xhrError: "Error en la carga del contenido.", imgError: "Error en la carga de la imagen." }); assets/plugins/colorbox/i18n/jquery.colorbox-fr.js000064400000000726152510437600016255 0ustar00/* jQuery Colorbox language configuration language: French (fr) translated by: oaubert */ jQuery.extend(jQuery.colorbox.settings, { current: "image {current} sur {total}", previous: "précédente", next: "suivante", close: "fermer", xhrError: "Impossible de charger ce contenu.", imgError: "Impossible de charger cette image.", slideshowStart: "démarrer la présentation", slideshowStop: "arrêter la présentation" }); assets/plugins/colorbox/i18n/jquery.colorbox-gl.js000064400000000503152510437600016241 0ustar00/* jQuery Colorbox language configuration language: Galician (gl) translated by: donatorouco */ jQuery.extend(jQuery.colorbox.settings, { current: "Imaxe {current} de {total}", previous: "Anterior", next: "Seguinte", close: "Pechar", xhrError: "Erro na carga do contido.", imgError: "Erro na carga da imaxe." }); assets/plugins/colorbox/i18n/jquery.colorbox-hr.js000064400000000655152510437600016260 0ustar00/* jQuery Colorbox language configuration language: Croatian (hr) translated by: Mladen Bicanic (base.hr) */ jQuery.extend(jQuery.colorbox.settings, { current: "Slika {current} od {total}", previous: "Prethodna", next: "Sljedeća", close: "Zatvori", xhrError: "Neuspješno učitavanje sadržaja.", imgError: "Neuspješno učitavanje slike.", slideshowStart: "Pokreni slideshow", slideshowStop: "Zaustavi slideshow" });assets/plugins/colorbox/i18n/jquery.colorbox-hu.js000064400000000656152510437600016264 0ustar00/* jQuery Colorbox language configuration language: Hungarian (hu) translated by: kovadani */ jQuery.extend(jQuery.colorbox.settings, { current: "{current}/{total} kép", previous: "Előző", next: "Következő", close: "Bezár", xhrError: "A tartalmat nem sikerült betölteni.", imgError: "A képet nem sikerült betölteni.", slideshowStart: "Diavetítés indítása", slideshowStop: "Diavetítés leállítása" });assets/plugins/colorbox/i18n/jquery.colorbox-it.js000064400000000667152510437600016266 0ustar00/* jQuery Colorbox language configuration language: Italian (it) translated by: maur8ino */ jQuery.extend(jQuery.colorbox.settings, { current: "Immagine {current} di {total}", previous: "Precedente", next: "Successiva", close: "Chiudi", xhrError: "Errore nel caricamento del contenuto.", imgError: "Errore nel caricamento dell'immagine.", slideshowStart: "Inizia la presentazione", slideshowStop: "Termina la presentazione" }); assets/plugins/colorbox/i18n/jquery.colorbox-ro.js000064400000000730152510437600016261 0ustar00/* jQuery Colorbox language configuration language: Romanian (ro) translated by: shurub3l */ jQuery.extend(jQuery.colorbox.settings, { current: "imagine {current} din {total}", previous: "precedenta", next: "următoarea", close: "închideți", xhrError: "Acest conținut nu poate fi încărcat.", imgError: "Această imagine nu poate fi încărcată", slideshowStart: "începeți prezentarea (slideshow)", slideshowStop: "opriți prezentarea (slideshow)" });assets/plugins/colorbox/i18n/jquery.colorbox-si.js000064400000000670152510437600016257 0ustar00/* jQuery Colorbox language configuration language: Slovenian (si) translated by: Boštjan Pišler (pisler.si) */ jQuery.extend(jQuery.colorbox.settings, { current: "Slika {current} od {total}", previous: "Prejšnja", next: "Naslednja", close: "Zapri", xhrError: "Vsebine ni bilo mogoče naložiti.", imgError: "Slike ni bilo mogoče naložiti.", slideshowStart: "Zaženi prezentacijo", slideshowStop: "Zaustavi prezentacijo" });assets/plugins/colorbox/i18n/jquery.colorbox-he.js000064400000000676152510437600016246 0ustar00/* jQuery Colorbox language configuration language: Hebrew (he) translated by: DavidCo site: DavidCo.me */ jQuery.extend(jQuery.colorbox.settings, { current: "תמונה {current} מתוך {total}", previous: "הקודם", next: "הבא", close: "סגור", xhrError: "שגיאה בטעינת התוכן.", imgError: "שגיאה בטעינת התמונה.", slideshowStart: "התחל מצגת", slideshowStop: "עצור מצגת" }); assets/plugins/colorbox/i18n/jquery.colorbox-ja.js000064400000000721152510437600016233 0ustar00/* jQuery Colorbox language configuration language: Japanaese (ja) translated by: Hajime Fujimoto */ jQuery.extend(jQuery.colorbox.settings, { current: "{total}枚中{current}枚目", previous: "前", next: "次", close: "閉じる", xhrError: "コンテンツの読み込みに失敗しました", imgError: "画像の読み込みに失敗しました", slideshowStart: "スライドショー開始", slideshowStop: "スライドショー終了" }); assets/plugins/colorbox/i18n/jquery.colorbox-pt-br.js000064400000000676152510437600016676 0ustar00/* jQuery Colorbox language configuration language: Brazilian Portuguese (pt-br) translated by: ReinaldoMT */ jQuery.extend(jQuery.colorbox.settings, { current: "Imagem {current} de {total}", previous: "Anterior", next: "Próxima", close: "Fechar", slideshowStart: "iniciar apresentação de slides", slideshowStop: "parar apresentação de slides", xhrError: "Erro ao carregar o conteúdo.", imgError: "Erro ao carregar a imagem." });assets/plugins/colorbox/i18n/jquery.colorbox-lv.js000064400000000713152510437600016263 0ustar00/* jQuery Colorbox language configuration language: Latvian (lv) translated by: Matiss Roberts Treinis site: x0.lv */ jQuery.extend(jQuery.colorbox.settings, { current: "attēls {current} no {total}", previous: "iepriekšējais", next: "nākamais", close: "aizvērt", xhrError: "Neizdevās ielādēt saturu.", imgError: "Neizdevās ielādēt attēlu.", slideshowStart: "sākt slaidrādi", slideshowStop: "apturēt slaidrādi" }); assets/plugins/colorbox/i18n/jquery.colorbox-fi.js000064400000000630152510437600016236 0ustar00/* jQuery Colorbox language configuration language: Finnish (fi) translated by: Mikko */ jQuery.extend(jQuery.colorbox.settings, { current: "Kuva {current} / {total}", previous: "Edellinen", next: "Seuraava", close: "Sulje", xhrError: "Sisällön lataaminen epäonnistui.", imgError: "Kuvan lataaminen epäonnistui.", slideshowStart: "Aloita kuvaesitys.", slideshowStop: "Lopeta kuvaesitys." }); assets/plugins/colorbox/i18n/jquery.colorbox-ru.js000064400000001047152510437600016271 0ustar00/* jQuery Colorbox language configuration language: Russian (ru) translated by: Marfa site: themarfa.name */ jQuery.extend(jQuery.colorbox.settings, { current: "изображение {current} из {total}", previous: "назад", next: "вперёд", close: "закрыть", xhrError: "Не удалось загрузить содержимое.", imgError: "Не удалось загрузить изображение.", slideshowStart: "начать слайд-шоу", slideshowStop: "остановить слайд-шоу" });assets/plugins/colorbox/i18n/jquery.colorbox-cs.js000064400000000712152510437600016246 0ustar00/* jQuery Colorbox language configuration language: Czech (cs) translated by: Filip Novak site: mame.napilno.cz/filip-novak */ jQuery.extend(jQuery.colorbox.settings, { current: "{current}. obrázek z {total}", previous: "Předchozí", next: "Následující", close: "Zavřít", xhrError: "Obsah se nepodařilo načíst.", imgError: "Obrázek se nepodařilo načíst.", slideshowStart: "Spustit slideshow", slideshowStop: "Zastavit slideshow" });assets/plugins/colorbox/example3/images/loading.gif000064400000022323152510437600016452 0ustar00GIF89a ### <<>>PPP|||Ǽ...333@@@JJJ̌zzzyyyCCCllleee!Created with ajaxload.info!! NETSCAPE2.0,  964!5:; "";=5 ? 7@)26<>(B(.*0(#"3B/(8$+1  $"pA&X("["hDBhH‡ A D ED^:*ŋiH[ @N"^`:G@=IBTD "nD  (-$`ܹxwR !, *X[ VY\ 1-LQ IJ3ZQ $FJLP TVZ] 7@GKMQLSUW<^B(. &KPR(@KJB/(8B12˄4 :j/Q "E% 'RPA!BZH۶$0 Ep"q耈BGxѭz@2=P'.8daۋG4/H"-)dA^N8ƶ pJBHΆ ˷߿!, $N?h6b-(.$ b\H!!US((1@/(8.'S u .FbŔ @@^"C.A x(:*zr ~/)*@3_=sς W>  Ƞ  . T#ŀ$AG cXn] 7AdXhJ +_[\6_l FF n8_km-oHZ=pS.?b-im=eG4 D'GXDϛ!i "R22%E8օP@  9, EBJT$ǍA EuM_AP8Y @6}XD%2")TRDaL `1TNBT=T`ѹxWo !, BCHQ"E kQq b`DNj*c .  # )JO6 (3PQCUrY:?N9+RO#:.9,6p;a(/ Qn)r" HXt6EEB66ġpHA$6,hCT>*B$^IcEaQ& _`yRȊ7) 0 yDh:(,KHQ<[lʝK@!, .+l %T3 &M#sb /Ol( tPk _nQR^?Hi It _egrN+ENu`l?vVu So6[/FfrpFjo%GF$ AƂQ@P(Јhт@EPhDAC0nHHFn܈@.2bQ2 Q@/\"ȦYFh|ё荋&5 }h4 ` L+pc젵5Lx0$˷߿}!, l#m2 mc w_ 2C$(\t$)nG j1Gm\ 0hvc!382#F)Bu+\|jb>FBhB7d, ~ؘD"/*:ңdܸPTY.@S (^,DI$B$GȞX|UBBG5,U A72Ks*@bܻx݋7!,  i! SH 2C?,2H96.GM%/BuHw NTPL7((//?/C]ML3@($x .^Lx.ц[u4@LH=h EȆ+VPq"YBj\dFBEĈX9·}3D H; Bp8=p_ǎ 8 ` "砱.'8#PT ʝKݹ! , $ C37,C/j %4Dmc$/BiD%F\] ((/@u]K8(4$Nc]T9 /4d.̆ '[ABƉ 0aT$ϐc"+2Lb!fBc@ 7 *z! &N3TG: b1Dg \"K!@6)P@zL[7t іHDЂ8t &$:PH˷_! ,  BO,$i2,@ 7i2o&-B/7B[S+&k((/B-jb[8( 4_kFH /ۅ[q6.Ȇ ,' @@B)0J&bP$0ZC9RB)D*cG\!0JPCb^d!C؄T 1h2#N1 =(fZ6$#5Ȉ2*tY^.M(v+n$˷߿! , 7 (( / D477BR2G9(AB(.R6 8( u&^ /Åjt. O!皋$88.@cd@T'0PEQ L'EQ p ȀSY(x,[@/+XN<A X(<)K^"thxd']pS F~˷߿!,  8(( .7B(A/(8/B-/  (-j@(/B-S(.ֆB܈B+EN6(41 [˗—c(Rw"!D$ܹ9B 2vsːl:v B"!440و1OJ)E"=ȕ 4G VBŎ1@xahZA>R⊎"؄DHʝK.@!, $$8((  B(A///BB  (/(8.І4 NjS++R(ۉ,UEHH?S 6\(w7Hlaǭ(eF  "L`M" LjįrZ!F*y(6l[9X p BC*+ p:)BB$& @ a "OmDFOٰ۷pF !, $$((  B(A/4/B7(8 (/B.҆ /j ,̉(݈7uC'RQp㜢fq[!⚹e 5 ͅ!/cTֈįsK.q(xT ,0$Ns<B ؁aX0?@P ;> HU1#QPb.ࡒn$˗P !, $.(($ B(A (/B7( B/(8.І4@Ջ(܉ÿٟ7A/FZ@R"X~ 04/9pfXg"$``<-&KRc@"@ &)D|);R0=Z㛀0h" P΁< Gؘ8 0Zi#" q x6RPnl@IFڤ $!^ -dvݻx !, B.(($B-M)E(A$@Y:VB7( pZ;Î8TpgB/(8%[̅44B4isdK@ 5QQx(""t(T8C`@I1Ѧ! ".\@3uFQȅB/(84؋/GsN@(H$ Ϛ6ma6 |8Xe &P'*cE:PJBQDO."QNSI8tBw<tPMgP@FA nH7Dvf Z0ܻx݋)!,  E3 B!t;:G"x;=&4\)*D$@ X26Pn8 2(_K(4$ڵpʝKWn ;assets/plugins/colorbox/example3/images/controls.png000064400000003141152510437600016714 0ustar00PNG  IHDRb?PLTEfffNOPJJJ)))ZZZkkk{{{vwxsssnoqRRREFGBBB:::--.!!!333ԭ䃃ܷ״ʩ'qtRNS"3DUfwF*/IDATx^W8:v !`g/vޛp1Tp:IV ʨɲN*82$sCddG?%yI HZPC!A(Dp;66",Ah񤸁Hv펚͞GJx DD:C9& jW(!N'? b&҄P~ibtn  1nF6u$ FIq3͑hXv j^XXta$D 'W̕ȑUɕc@G&ɇ&h섳A,uoƃX4-As%OM~6҄okY~zH09n8YuL`v3VbVgãNLGyp%>Q kYQH!\ .NP#$֘E L?Ka!A/JP7vnE;4"dFZjڦ(džJ61" {e#bN <CiyaGBDP DHȟ!f>JywU>M|j^Be&ļJTA\@@"7`n~0Q爊&ǒSKDDU%%V C J \BD@%lBZل !T AL '(FUJBJ[1VuЅAWj(`6B\rh H 9 ߙ o»3yI[:<ًT!:Iy>Dyp h c8Oð?ri?vAH|qb2~k Gz$G`ox$Z۷;O-!Oa"©c``de'LEF@Za`cd@T!3qCf"2"R ƀ@c%n8E_O7[pno߆!2O-[4x,p K'{׫ Ó"Ɗ1zj2@bݪrHWs@MYH p 0 UA Gt !۸o6vQr95jPݝ>Mэӄy64}fwkITOB˻XZjy4B 3!1_s| \|]%}"AdRЄ,sEIENDB`assets/plugins/colorbox/example3/index.html000064400000012660152510437600015101 0ustar00 Colorbox Examples

Colorbox Demonstration

Elastic Transition

Grouped Photo 1

Grouped Photo 2

Grouped Photo 3

Fade Transition

Grouped Photo 1

Grouped Photo 2

Grouped Photo 3

No Transition + fixed width and height (75% of screen size)

Grouped Photo 1

Grouped Photo 2

Grouped Photo 3

Slideshow

Grouped Photo 1

Grouped Photo 2

Grouped Photo 3

Other Content Types

Outside HTML (Ajax)

Flash / Video (Iframe/Direct Link To YouTube)

Flash / Video (Iframe/Direct Link To Vimeo)

Outside Webpage (Iframe)

Inline HTML

Demonstration of using callbacks

Example with alerts. Callbacks and event-hooks allow users to extend functionality without having to rewrite parts of the plugin.

Retina Images

Retina

Non-Retina

This content comes from a hidden element on this page.

The inline option preserves bound JavaScript events and changes, and it puts the content back where it came from when it is closed.

Click me, it will be preserved!

If you try to open a new Colorbox while it is already open, it will update itself with the new content.

Updating Content Example:
Click here to load new content

assets/plugins/colorbox/example3/colorbox.css000064400000005552152510437600015447 0ustar00/* Colorbox Core Style: The following CSS is consistent between example themes and should not be altered. */ #colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;} #cboxWrapper {max-width:none;} #cboxOverlay{position:fixed; width:100%; height:100%;} #cboxMiddleLeft, #cboxBottomLeft{clear:left;} #cboxContent{position:relative;} #cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;} #cboxTitle{margin:0;} #cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;} #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;} .cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;} .cboxIframe{width:100%; height:100%; display:block; border:0;} #colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;} /* User Style: Change the following styles to modify the appearance of Colorbox. They are ordered & tabbed in a way that represents the nesting of the generated HTML. */ #cboxOverlay{background:#000;} #colorbox{outline:0;} #cboxContent{margin-top:20px;background:#000;} .cboxIframe{background:#fff;} #cboxError{padding:50px; border:1px solid #ccc;} #cboxLoadedContent{border:5px solid #000; background:#fff;} #cboxTitle{position:absolute; top:-20px; left:0; color:#ccc;} #cboxCurrent{position:absolute; top:-20px; right:0px; color:#ccc;} #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;} /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */ #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; } /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */ #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;} #cboxSlideshow{position:absolute; top:-20px; right:90px; color:#fff;} #cboxPrevious{position:absolute; top:50%; left:5px; margin-top:-32px; background:url(images/controls.png) no-repeat top left; width:28px; height:65px; text-indent:-9999px;} #cboxPrevious:hover{background-position:bottom left;} #cboxNext{position:absolute; top:50%; right:5px; margin-top:-32px; background:url(images/controls.png) no-repeat top right; width:28px; height:65px; text-indent:-9999px;} #cboxNext:hover{background-position:bottom right;} #cboxClose{position:absolute; top:5px; right:5px; display:block; background:url(images/controls.png) no-repeat top center; width:38px; height:19px; text-indent:-9999px;} #cboxClose:hover{background-position:bottom center;} assets/plugins/colorbox/jquery.colorbox-min.js000064400000025520152510437610015652 0ustar00/*! Colorbox v1.4.32 - 2013-10-16 jQuery lightbox and modal window plugin (c) 2013 Jack Moore - http://www.jacklmoore.com/colorbox license: http://www.opensource.org/licenses/mit-license.php */ (function(e,t,i){function o(i,o,n){var r=t.createElement(i);return o&&(r.id=Z+o),n&&(r.style.cssText=n),e(r)}function n(){return i.innerHeight?i.innerHeight:e(i).height()}function r(e){var t=k.length,i=(z+e)%t;return 0>i?t+i:i}function h(e,t){return Math.round((/%/.test(e)?("x"===t?E.width():n())/100:1)*parseInt(e,10))}function s(e,t){return e.photo||e.photoRegex.test(t)}function l(e,t){return e.retinaUrl&&i.devicePixelRatio>1?t.replace(e.photoRegex,e.retinaSuffix):t}function a(e){"contains"in g[0]&&!g[0].contains(e.target)&&(e.stopPropagation(),g.focus())}function d(){var t,i=e.data(N,Y);null==i?(B=e.extend({},X),console&&console.log&&console.log("Error: cboxElement missing settings object")):B=e.extend({},i);for(t in B)e.isFunction(B[t])&&"on"!==t.slice(0,2)&&(B[t]=B[t].call(N));B.rel=B.rel||N.rel||e(N).data("rel")||"nofollow",B.href=B.href||e(N).attr("href"),B.title=B.title||N.title,"string"==typeof B.href&&(B.href=e.trim(B.href))}function c(i,o){e(t).trigger(i),st.trigger(i),e.isFunction(o)&&o.call(N)}function u(i){q||(N=i,d(),k=e(N),z=0,"nofollow"!==B.rel&&(k=e("."+et).filter(function(){var t,i=e.data(this,Y);return i&&(t=e(this).data("rel")||i.rel||this.rel),t===B.rel}),z=k.index(N),-1===z&&(k=k.add(N),z=k.length-1)),w.css({opacity:parseFloat(B.opacity),cursor:B.overlayClose?"pointer":"auto",visibility:"visible"}).show(),J&&g.add(w).removeClass(J),B.className&&g.add(w).addClass(B.className),J=B.className,B.closeButton?K.html(B.close).appendTo(y):K.appendTo("
"),U||(U=$=!0,g.css({visibility:"hidden",display:"block"}),H=o(lt,"LoadedContent","width:0; height:0; overflow:hidden"),y.css({width:"",height:""}).append(H),O=x.height()+C.height()+y.outerHeight(!0)-y.height(),_=b.width()+T.width()+y.outerWidth(!0)-y.width(),D=H.outerHeight(!0),A=H.outerWidth(!0),B.w=h(B.initialWidth,"x"),B.h=h(B.initialHeight,"y"),H.css({width:"",height:B.h}),Q.position(),c(tt,B.onOpen),P.add(L).hide(),g.focus(),B.trapFocus&&t.addEventListener&&(t.addEventListener("focus",a,!0),st.one(rt,function(){t.removeEventListener("focus",a,!0)})),B.returnFocus&&st.one(rt,function(){e(N).focus()})),m())}function f(){!g&&t.body&&(V=!1,E=e(i),g=o(lt).attr({id:Y,"class":e.support.opacity===!1?Z+"IE":"",role:"dialog",tabindex:"-1"}).hide(),w=o(lt,"Overlay").hide(),F=e([o(lt,"LoadingOverlay")[0],o(lt,"LoadingGraphic")[0]]),v=o(lt,"Wrapper"),y=o(lt,"Content").append(L=o(lt,"Title"),S=o(lt,"Current"),I=e('
assets/plugins/colorbox/content/ohoopee2.jpg000064400000345243152510437610015271 0ustar00JFIFddDucky<Adobed(Optimized by JPEGmini-www.jpegmini.comC      # "(.)$&.%-:.039;;;"AEA"D""""C 99""""""""""""""""""""""""""""""""""""""""""""""""" "M !1A"Qa#2qB3Rb$rCS%4c&DsT !1Aa ? &|':ٞ.DF ^MX\1mkN2NnK_'> ;~ \%Q5 ћ}Jn4]dDF7jVu\46,PYm\cjhм|?tkw[#am8 #W@/Px9$W sHHtҫ81".xbcu#Q2G 9}=( Ĺn-Ӣ.= wkF@S:w[!iu9Nv.s osh<i:2E`oWo *9oJMe|Px<7 VwP|L\=HIV%ZdZ;mVKC5#AmZUPVK4Dړj`}Ò쮛4` ND/ͷ;ot~r% lƻ@# zw-|B;!e*g˺!wGCG,Pl h*'QMJcĘ_~hT:&~VGuޟPZSn',Nn{ВN j=h"fdkRU3/;5tΒV4$ZWgܚI9Q^_ Dt'Z2ndI[KjWw3@tZO)XoOu\}ۃԻW =<}SM]LK |9"әV[-3Ps1>oOAxII}h.2$)ER 2ΑMu"{$+򶛪w[J2J; Z]q'Ǹ특pە)/jYciW]Í6+ns iۧKnkM 9pypKP$6%9/9:SGh~]K.qiISukӰ'!F%"K!>tA#qP֋sB<*]8𝹩?bگ/2&AHӍ$b?oK=xrQ>SIw$^V8r"XmXO=*R)pI!yQ:T|[BONThfCUdgY(2_#*PUntVo/n8U zun|\40ѩ:PI~9j)-ԒXX@hh,;@ʸH}K"6 חz V_ J:۞UD%5X ҹ>쯙|@t:T'rBA[jG潕];ǐiJ"s#h=bc֢}nu!JH ރǤ|=WIFavrIm9;E]@т*:U}O A-JU-z .>$r88m\՟U]t pc뎴sSt+biVvQ]Jx쪧M݉$ KoJ$-LipdL` 6jC ":Z[$¥bf>uhEJи~/2`4ʵ3Zw I6w#P$Gt+ӢW:y| `Cc1hUe'OZ<; Z ִ+bJ5ާqyڢ!Q = 5P4) !U:pq.0U6B<"yNDzRGwOd qW 2,,xIB:Z6.=:YE}E+Z.ҸRk+5L) wǥ([:31kZL4U]׶+8;,ܣk̑PпĄި5BǕہ&reCE hO+8@Iא |d75WB%(DqtWIe[#HiGWE[3RHcpȴ4^ ^`M!]())<HKVEx侘}r]F^A s^ӫgN=SqTYц,Ӂ4~u,C.f d Q\IδFB~Ucg/Lb H!GHSI=*{n"H~#U;|JbjަM 5iUW%ue+y]IUWۑZk1Qv;]mցSr~W?̔`'$Bl u]UcXJɱHvcBi5|銬D#tX/ʯ]$ֹ8Vz#V}ZtMK"qZ,hѺ/)>KDj~TbF #VV}(dm my>(6EO,gΪ\l !S]ֈ m:mGն4ԫJ[oBɱm֢&AOȪvV&.RNbv ^?ழ_j"%kF q]e/׭V.L8e!c-~uy\:ɘ~1:LpQ LͧH[/-yqQxQ(4DWs'G$chgʃj{5o0R\{Zz&UUWdOf=͌liʒ;:UΆEZ;Jȶ\!(ru!M,be9LM>[7ο:Ush\KOqvv32ywdYf#/)T1w>6E:Ů_c[LOR^oV6$ט4o}*ʶv)[uuiJ b ;K_T[ZZ_BݣNdQf[{:0e!lG&[?fqysV)ۛE!z9j媀M5ͯJt  K}pC!~Qs@w1KI~UBTE(2ț '5'[ZmZ!&Oibc:ϐ.G4887 ~N<&+(o=JmT"ƞ_V| Ll\^xLH|_MMm9Qٺ=-^gx᪐c\jhC $5!0-:C9]yJuI?gG/'WMCꀕ:ym2隨z_tARۥO?9@p^ \Fu@R6ڡ;tª%EjvI!*P\/w+' 1[BҬk|Kmy]f"ǺׅA>TEϙ{mu9F˧S *H!> u J{wul]zïBe͹f@PǽJ7hHU~ZVݪ)+?*!LL(뎕h@GW[:# 򄇢LJmHs{T\EžҚ{Qu&IM[u$->` 7Z _U@r>)k/ZEֵ {♲$8,wd܉rQ֑1n[mЉ;RHLh*R`M ΥڂįH1HdN͜GLWQV|bW*=:"uhHAn1c&:jn"+*?$3?/-i,Dw>ҡOߤFz{B*'PY-iɑO(cڵ.*6ô9WӗӧEJNQB@U^.`+R:lKRJq-?ηk1u)*5z7rD0\D4/%=jܡ6T_Gjq{*bJ&?]n[Dϙ˒JѧzU{f;jl;/kh{Hmzҳ{GIㄜOjIiG q#c^[g= ~eEzۃVx/>J9yԴEb2A0@w1IdPT]\a{vʞ'sHًQ=dKciӗ|[8J0LBa*?w^P6|_>?v٢ y֤%,c򹽋/+|Uu}j{l 8̖=<`OPA<ML>řҥwNih"x2 .si3MAڧ(AL'ހ`hzqB*O%$eklYdJJ r2愑!}*nREWK}'AAє"KI}ks I91ѷTltQysCc52Ȩ-3PNg򠧗51;ʌm/ZȲ@"`%ݨhT-`5WVh'"u;Ԭ,"P&3QqiйRs3Jۃ򘯅ڃ.`~:*d6ίz YR=v^lEDz?6R~k\]Y\d&TU/J ;̲ `t!DfR+ EM*"'PCo4)TMXhXa Jmoc_J[}FϓժMBGSIJ-z7c*?D_ʀؒZj(7-EZ^%D:&Fi[QFs0JZ$mqvQ}Hl&Njo2YVȕ|cHRqm{C!J!i{^B^֨ .EOJʦ.K5%auտz c 2]vmU5ӌ>rr%Zx[/ ){2kޓs z[ 7OeB) /MA#UVҜ8^ J-4 za22$1w^w^tW>L왡d?!w6P=$*~2GIǷᐠΧtY]Ij\S:dZI3^_'j,TQ'aRk(nfzf[~@KRϪo<6덹%6%y{}&]!udG/Y6l0{8 oZpq ܫ:9Ma m.%I8b(i_M+@;֦m_04z Y!OVqL{lbExWlWq* 3>d_t0.'Qlu+&" Ǧm42>)U_A'y5auSG4o{b_މ*}_Q 75&c.NxmWlTos~Ojh2:G`ލf&CQb=UcEm>qނ롾RiB~s|[_JoȮ"-|iGx s4 PNyej|#L M|:Xx'ph_ E=;+1D􎶛Ϩ6ؐfܐ,O%ވ~);@5(Er|M[-/6.#NuQk>j5(ja/mwm\ye_D-2路?b]yOV(+(be{eH|lds\ҧdG+d6!h ?ZQ6E|=b[R[hX׽d"h/0Q˕,pAlU%h߲R\O͝Tr@D.~BяʔYrO P |BDZ.*yO^\r*P6]W.s;-RM`CU^a`fK['Z,68)GԮAA>Kep\t}HQGں)$A*o;P-:$jڒԌTUE[nM1r젡 UCd a6Ä~ZDE(I2yW奭u@D۵(Mu5p}֨t4:b}N }d'*r dhgjioly|d -G\Upܷ7fWtރ#'#ʖ{ҠC%DK=U[J!6dYO}(.S~ziҼWVN4C\qEΥ͇ M| YJF^*L"kޤ t4< :bvsTt 4i[A-jha֨<hvRɎZ}iy4:'~ҿ= X!Z H.r$ޣp\F֡i H& EF6,UJ>,kJjDD2n[yJ77GR%Ttz_^ugP[OwQTA##k;P!'̵- ,̝8l=.8N2["d<,MϦqL$Xo i\?N5cgq|%$U.Brvaup0:Prp'ƈ&eJ 𢣏K:S8v;Cn|!yàS@\h&ڇ_q/>UwM~(%Ջo'44:,~.2qXɰ0m9I$dv) UH֘~nvMD)c51 }0C[M\6̄_/˧J'(pqf.pЧnR f)eIԥks9*?{ր|USSuߧe.{%p4i{1,ClYusj%]' ݫ%D< b_*Z2sDhǔxZT%Ry Hԉ.x"Ec1ugvQ6)SB,8]I;QMA/Tek3MQ(n1r\N/8^8eFTsD :c8婆<‹ |LMZRC:ܷV.#]UYJٯ0z.~ n,oKD:֔~é%.gC!ψɯ8cVIq4lJ V&y_K^m#ػ-WMUFDJW :^^#څ-l&2Zy^W=4w&uorbKQVIm7b V[vD߽"y=&QH:>ٮhA:S4˾7GժO68$9D*;pr_ZŶm*2˦C[!Oqp0e9\u+TMԺ>wN0S\-U@#s~!5x/:%oDݮjMx~cr<qr(*!G^Gל0"Zb\' zD^AE@z!;&5l~IM3ߥ ȓJёA.;@\UtDMJ:uQV_M#k[*M_}bᯘhcqyZZCɲ!4m46m]607J%'P.ACBsjShA ʕ`fezѲG$~6 *elҩe9HZ7JU\u&+S-pC()4I("(ECc@Z4wݪ%ղ-Lӌr43ځw5FDDNɈjd.R#ĶEn\K4ք99XND,7A +ߵ|]]!tA Y$3ڗ̈(7 WF5&{Զ"%'%#oj8F둍Ft"uɇ&):(du5TMD}byj-\ )79:W.~済:NHude2TDB̳hVXwezwmlA;lM$K/=GS#Z/\URHU%BjpۂΐтA h+j뜩bኯ֝0ݘ\a6%jKG/mO*YVƯ2ya@'tEGW=Jq6+Tn%"(U^Xݎc1)*S+P7^ K69جTե:׭-%% Yx4e3jd0'7wP#<&i** w|acD{t[|.6w^Q8˦Q5t6EjcIg|,FfC0ۭ)zx|FDO0j"UK~B|.5oRf9Aš]צU?Tǽ6jt0Dիu{՘HD68&6EGHV ͱ| alM@} 9 H/`"y9FP3ԣ?x5yL򜊊8Y,cУjAkHSk\U X$Ihtd(.tG6z&73Q=]D~Zd<өN!#u.Twg$s[d;SzU:~FEG)%lMlA](}w,l#^=墧.ʀ1D™+7UJݜJe玿_[>nעr3ѶŅuER62^f|?UAE]%]섴q w٫jj$N4m=1* >"CJmQKȭZԪKd>cp;xkB^0h>84{m޶tɮcXnQb h=EhE] u#O8Eޙ1o'B%QH6|G4 ”1 b i+P B5#(+F/O. mVۄaW?b겝&ۂ5Ef~ڪ> "ds۵\ A{P8i-)2NjHE$Q:W\rek}UlM]ԙ {WLFKVK{L6Mtބi#Zpy\⟛uQ4ץJ>l2J_z%#Ⱥ>2i>{L8Ew nZbMMTu"ۭ5ļȸ>bL̡+TBZh)s_gT@9zAr֨#S mLc%Yѥơ֣5Z5S[] j]?h,9 =$p4Sg"dWF5^q'<=f AV#8þt|L|d洉7JGVq#e>]U2.pUiT١yq6ףpǽFBԅ m? 6HURj"R'M4M D20B]k?A(yLsWPB]eFb;֕E.hKIH^.PK@\_Q IS`UM<.+N[Nz ~U]hb?Ѯ_T甂7fc~zmrsj>ayw]I)V| K}v=fRa'$ӭX_w ʕϐZ(Re=f0F: >O>Nr;P_%M(ߗ_4Gk3?*DW ͉ڴ(WP6K@ɍw8y jZ޽R{Qɥ6EDϭ{O0Bo\,}2NDm~\a3"{*EpvWh>4 NDq Kfv+hM6;*W~mbh`%zSQ`"c o k"]tF1K|r Rs~P:= jo57M=TR6$ۦ+\> Uڻu`j, (M^PH.$\]$@N<ڊ,"7*~˧dUSEBC0JjwCp]8jZ}KDDٯʥҧLsS~juJrvlW8ꯟJKbrTPSozmc|rFTї>H*KȍఏveI|"<-"ȩ{__l",| Е+dBJFP$sQ(%T隐}r"tY:DաH&gldoX2nR$A]m?Z8֯kf|jerQERLcX{9=Åc8~1VjE|9MmQFEդta7 Q?*i &0^+Ɇ:փCmWѳLt^ tRH\&;oZ g-7f6ϊ0L#LǮj-gfj=cKx9 K)%aW7d#^}poRfۏ-\"f%g)n3D6ҹ{ ddxID&$bP8,_6 *lt ʊ'ᨡ p];ײ& .D}Vg\ mk6˕ѻs/ a qQELS9)n‰ϷD "*j8c ]ӔWKd6PEޤt{ky٠domAjL)hۊy_PD&ZfX։Up); e]5!آu 9츛i\:!L$3 [1%yi2ϒI"7zḻ*iChO--I Q]xډ"50@m?z=%8)AsM*wQ;R^քWEOTEzVqAPV?Me$7R"yu$IqߒV.5 ژ>:]:TQzT\25ptUT•Qpx:Evd⢲rzҢM*Mҗւn`[BJai|DEz})tF*:ɮ_}/@kHB]ھ9ʹ$(gjJҟB R%P㪢oI822 +-3_P$&yi5Κɞ2HG`uQBDxE)ցkюi+;u^:@nHhIh~`DT%\iM$P m5Ee x{A[G Iqo<^2W p5], } H@FG̛P fID?XA8hN iD7l-X]T%ѶL]mjA*,qjǐzqtW sbv۶r7DF2_3mv]ȇ d\'z9+@p7dyvㆼ8ҕH%&o&zQb8d?vH?+GM.;@ޠPME7t?:~5}9'4Jl}"/0%z,uN #q_oK҈ڤFHqzQ`!zzCO (.6t`QGOUPbLSeБHSh@=FH%ҽ DB$Eш!L@> *\":XIXRG ''7daA%ɤR6d&͑zcJJ2K䨠a\ *{ f7qxy=dWҶ %8cs9&kZ΁s_?teDvk7I IMW=jۼ\f_hF|ոFr/ vh0\%\nwE9f._7Z;ol?%鵆.cF&6\a~K .?gwyyɑȮTYߺVHSCrz^o(OA"Yj6 ]wzURֲɻs%ѣ_=(8`lέ>N h|L)Gpje8N`OLUzpm"pGP.:Rv"RllvyHqCQKgAT@:&h칩@bK]s^ m*F>K0ZZ}rҼp<_N"\37_XV-IDE@Ȗi_H˞pN!C&-H,yNѐb-8N6cC=M>Zs>DM9$* _bae N /ph\&U=;FA@U_Z:19_!W2r!h=PڃxoZ&qPGޡvZ=8&WuJ ~SMl^`+QA"No)&P9sū]6EexǹO>3%f{5>Wm\֝C|榱%[z *5mM܎oni rfnt_EfCr?cZᗼ2zv l<̴z)V1XQ~W/ h~TXhX|ω| tA 9lC QsNF!kR_t-" ڋOuJYwBp躜 vǭV'nk#Ÿ́] zh˄ny󯚡ӇIl/(y?V]yf^x&MLe&J/ʩI26M4G͠c:K.[bGꮗ~mCMnu.p&i[dMj zxc-| v'EGZcUQLuM1hT&}j8֔ӷz)zE5&Ɋ6R,jU@w?۽F醄qT.:r])P#orHRbd ]Eͯ.DCSۢv$a&/Z%+Do0'ր 8YrfƙGhq6JhZETIv2}hz-P!e-B?ΡM?5CiIn]:j- vۥHpjJ>W[/Z4 B)xM6E*$3<tZn}1۔<Ri]Cz  ]=?Z"#]BjA07A׷}gg-svߒH?JmaqyDtHHDBHĜU7 5'VscV)JmӊNh%> VŖ QZ&lP8k& J]1+2K1TtHR^ڪc۴% !q[4hTR)~G&ޒ=TVUc.~^ ~͸+hw&UA͔WQY " MrJeum 40AM'ޥOcpN!mnw#bW3}:" bKMޓ;2yT_*$H,62׈_[XQ?y?/z/>3:\Xs]}};)Ɓ`?brUSuV5i.kRlJӓb$u5\j’q7Y@t1Iuҋh/u0]}lVQD_?=m(QTU4@ujE÷n! jtUL%?ϑY<޳v =늾+*L(Vx4@99*£)"5RM**Ea┍X$Yu(]QtW pz)ط(G1& qOJ}u+,4I#Pe=j-r~kFr|7|ȿ" .H#-bnPnJWΓc|"z 뚠᫄XxaŚIۃakWcȸ6MO&<.zWcd(8_J? °MX8<1%Z K/>KˉbI22*ʎ`nw4bl$Hy]Ҹ㎒#I:z EҢ~- 4m|M*q94UOR=ʛf#Rsra(+C u}TfGM.O: ={Ar,MbSjC.IEh4z 1$'G5CJHn\Gޕң]8EPO2aη" eӊGrT4)֍i2(;ZY d^IitӇUqPG8QEwBmmXo;ZBER6m$sO-<4a\T?*Aoʚ 5(޸>-TE=t |>ÅƼ:~#H_A?8USd[ԛ^$m""'!=3 gEdzK-X`/࠮M4%R|WilWό3eȌ1GA}Zj\Tqd}p'PWYt7m +HXEeNܕw+gʻ-,HZ*kl<ޱPLKF\ gɩ S-u]!A&ZKT m(4W:M!΋LOI$ (#0nc˽bKS~499kKA"#^5W<9nx_'j`͵oqK_7M_5.4䖁KM|WD UMhBoTYJt?}Zp43İ*ߵLs1\ɵP~%flk}u"Ɛ15jdG#'a:=َQ ?OE|V?/S5jdWk!ltIA["|J _.EcuOIUTMm淲ִA"DR1SAjyr\&g@c8֠旗4ME2[ -"buQ-SϧGmLu<ټ~DEeuo;Avo24~TV C]5ܽ@wvQЅDN*M#Z9lMve̩Hmq\7 oZ=)Ƒ(6s):1%QxT.x4jțtf 15t;. ZU'5l@.;%Dcm^张nT,i۽M&O"(59Z}oE|`9SwgR*)qU ҼNoiw{+fs8dL+vhVuɇ4%KH'L'eێښ:<$ v*6k8q'ϐ׸T.EZxfc챙ڍѡ ')ɾ6Uo]j)񥴬O|'N:?N6WCs&Y9ygv©-}>6mp˻w<*rU^]8M3cݎ.꼨d<0)gsi[\ʳJkI< G]uE߭Q8}x]ͨByJ~;**V<_nk]V vot%]׶q߬#+mBi=6Tcp&ۉyc'$(8 )h6 #r}<3#" t>p d%P Xm "gUT"v\z>h:Uze1QTN"Yls~*ۛmɨv}jj9a+NHx&Tܕ;*?:? &]سEҭGC*EJޓ>P=^lE~_h> +_dw!t^u`I2jɅHeiAKg-!u\tU\/K3dRDVJ0q>UK˜? 1xI\5 UvZ*Tj17t%LH <<]%'i NK%.?s̙b˜ҝh㨴ҷMzԣBuG*?f[UV}e>"Ni+R۴MWYR]&P?q(_L:WF&# tRt"tղvNsR(˖xԈ-D3ӄNv{NW6_J[<+؞eJ2aT1I ZGQ yp^`vԝ({6 4&pҟ4M#0q{x匆Q(،㮐!^QCZxGpAƇZ4<';I-49|uζTн*wN'/-V=/:U0"|:YŇix&R< _QDY8"2vp[HbIQ,|b`WgڦvtduEOE8)sONܐtMӥ0ژu?r}cƅwԝh4j\PȔiy 웕7 agVnL|$-=KҼ-n2&8( B`6>ެ 1YMl1&)VeHrAW|d.^JV_/mޟ?)4 xȫmQN JϤEp^"jCj9Vu'clZq }XZ aځO'!V]RtLAPꉺъ ֮.O?$ lVt@:Ԋ*"4d479(rZz*+TgȆRwQ*]V1z¼Z *pkp~01erAncjؿ5o'5-IHTO ?.j/zԊ~v-m1nW ] bĞLLJN]}E(pkoU#䔞[/i"HFt\PFVCɢv$v␉;z"lBNuOGJS?|ƚa|˩;M6R}djw 0ޚ*F[xMzQ)L}"Y( TcHja?~jᵙz^I}Ԑt8L:@ iZԐ+(izsL/0uzy LF eAϖ ~!QT"jcc4$: ,{ \io7jFp^>ݴiԕ0\Y2m hղ>mOP3; !LeKjӖI1 AsT@KE(!WnGG Q&~Z%J$Cޅ!j+MNkOj-H6G|1WF K/^ J|a8bw@q6\^Y6F?(/ۥw7‰z{PY#>3&H?-E"OHFǷe缍GYd.tQm`@]KFŦ+kjJ7كay/PU0>ƾ lcP|z8KhOD#՜vJn?bw>0ږ;<֫}w'voD4ؙy+օ'mrƎ~^Wynj"?<i}\\* z{%~jq K"r]*U q$a %긪5~]w .M{ $BxxcO_g _k!ظ &j$TӯWBnNi#—̉ډ[?xN9͢> %t. l6 *B8uں/fhiۖđHuPܓ!n"rwǥ+$RX*^mo,%/$T(kU-IQ$BkȹM46RBv[Qut""z"{c8nsbܮq(Z)jU:UNRf>UdKK׆fL_'*wMY/S\)aV1Ґnyb ,씝/Zo BXʹ!W;gU \'hb&G)P }+ת/LmY;s$sθn*Xb q/KHv'yyM?W(=@)4Ymbsyr1)cmj`2q /ݐ.]Bc֊j~$;3a-)IE٣|dr#k`aTYިx"i5m1Z6.Eukp2 bNtx^[Vmiqhҵp2^l!c7l&,|'EZWHVg[ 0MM>Ty׵."?0J\#ZV]atKfɉb6P'GQ: V\ Koj])1Ԩ^!\d=d(F[U1O^pn"Ԓ^MR˪ɝu(c,vcث\&߻T{O[/$m0f JtQҥSe%0ʵ/qGJ*!.AªBmw.T8:\zT|P|VV_wR ?Ύ3s#*ڨcXa(ͱ&֊zr+QY[ќ%[B8<]-vfV. Es0Mv8R3o_TPŲۉ!̼N~5RkO2jA˥?*Wј'ǣEgJΤVy_BZ Ʈ"0\\r4קjZӧS?؀l9p(){e^Q<>eeQ9c^-D-f2n|uUUi #mpRYpO26jѣfWn-g.eBm֋EeI)"sڦ"W yh"Rx\?>)`$]>Z8]NHVx-'QT(oޭˣHr妯֧⻪dhK˧Zո׍#Q9@G(Ӯw/Ẑm5'e_AT˙.3-Cg(aS?Zk 9z\sr"Pe78:k !s|i߹gvMy\WG:C`(U5.=6p̔ۉ%Hec^zObpyݮ \$đ E_(9vN!@J'Ilg*m9>{I%RОtn6@Wb:u FxX$)''lȷ|S;^b.쟝Go ?мm/\{][S+8smNH_TR)kw z ut Jl-лUFގr΋ލਊj/ÄA^rVzqvL j3dujX ډ`r|\?z1!h=V 53랔-d2םb!w_Jw2M3l QXz*=(<O1M*T5~J1S z_O"RE~hcApnnڪiҽ) FZ 1=B* KCtO*e?N.!ϓ|UҨ7(Y]=@W/Jn?% ^BoSzPT^)L2-UTwZƗ9gUzڈI:W)|Q ɠlC~KC]lHot\NI/̩҃ 2` 9qAl R pו I|RS#c>u_r7HIJn\?!|>}_*T8Gu\'9tހYPdӖb6!Q˔![ZYðW9Fo'jc9:g7>uENŶ.2"<$lVN4_]|^K7-r0 GT|:#ۃ %uvj+Ȅ_6AYu$"ҒsJ50W%AsZtYcpJqtg"QOI^Dꗆ٤yvi[M iot0CxR3_n{j_>*hwȭ;wc&7n+F<pu1Alȴ&}*ԇ@>SzWى:51}h>JC=4!BQhz±K-3-D /A~fzT9@X]mϾ\RKC}}o4q 1gN+U*/rJJ򇲪ubY k\&0= 5N\5k ޘ a)Q]^gQͺ|*P5S|e(O~P!\/Tj>оx-o7KmݦΉWfK#p7!U=9(Ni0ێ)&ۭO5%M_xol?:dE]-ܔNJή-8l̹O]U=*Bpr89~U=עUpj[m{Ya IZLY@XUUx[%.-Q@D*Mŏ\Fs yKVEj~J4oI"*i`gI..+4io)':RP_jN:z9+A7 rHE~tl8n&i|ͪlu|!#>&3W(-{ц5ͪ1M.6[Wl*{Rt^e\BL˖.hR]@$ƴ1{m$x|jcR_in^q5R\"kӦw}j|7ӥtˑ(4w/ńZ/\-KS7]>/ORK?um`7S,UVkW^Ƀ73jZ]z'DҪ<3~BV{:iA2dO|T'klh8ͨr]Z4ѡiG LzwY OFE 'QムM$WOȜGL8 P.]-~jL-`StZs\gv7/0 fIVI({w!FE!%A sΘqw(O[Rf^p-z<̞e.tJOIl[o0@09ϛKČJǁz<܂p ʢKcU q=q(294WB l*!ÊODo壂 ((Y#ga ,",xYE\tAq\zGR9[D?2IS){lT۫ 9RVW(Qr8wTl7˥,)Fl[njX. WeDԙR{ĉ.mκ8WÈ덩|Ln_JAi)!qnK;cXRdl(RUe-n G"1pnJdd7 On> rLE5M)QZbKO2?!UHT.ʙPiV)~[ŵš\֌)TURnLZE*gZ?a@D*aODN<[$1omJI둪8-..o΅fC:u7`5sV-^Y8tGF;#qQHWK"^ےiN\6뭗WpHz.6L{TXOC.6⏙*9M2-HkLq<@F3yAꤿJ $\٪<,qs;S`[`oR_E1~tG!^n:*ux+,0dJ8UW|RDӻo,xw+pǑ>AG9j+سo0"ލb@)g}Vy<#S^H- bxm& %˪T|Zrq+YTjT21I$AM`-ʫQbHk[m_)wڤ->ΞBlnCdf2EaDۯZqi!0>e]CD/IO3bkz%Pq\DY\mqxVNS@:) Lx)tO14FߛJE^"u*{wϭ*8ܛ#z[e2(*W䫚̸ONڐa,V L~d]~qm$+O8q]z w[L;vBf쬺7W5kv}d[ݛ AtRbeZI`Ϳ#X@6T}ۣHe%G'I \g}~;R 'wj?UҦ5H0*OҏDD EZ*_zfHfn[O2(PM=wUanpV@7<16蒓xM+^]qǏ.8bIq]S.4407\ƤPNfh;l4!_?r^!<ٰ:zli僜{A4x_h{>UmtUa` <]N`Un8G39wޡ[[-ZEX]Cu"ֿAb>EC,]pO·VofC&>ZR.\w5+0M+W+ɣJ%PZIC|r G_'?9eka-ГCӅ@;oTu[{xdZL5ih:b4ӘaU@%)ydוW))%9?֊Cl߽G& hb~5_ZڢKm֏[:QZ͸j p$IS 1ed(5&(y)yˇ 8㯐r`]W(}xtDCor.=*|L"y\?Z8{ljNn'?(JS4֑!N-J_~'/QZ*79J:syn?֥ ~j 4oEpNqdʗoXWb'EVW+pwvzKҰ n0եO-n7kR>IR n4_aua֙TGm >USBR!\zv۬y`nގ彥uQMc+ueT2%D -M*"dϗ|oO. Lin1~$Q<|30T/w|1r@h&uq_T-'XR=14p >ڨx}.׼*t mۭMEx)U:Qz1軦jN?66`^bтwm[@~$BԻx^p@J%@ȯˏ\.X١ Yxiְ:3{g1hL rCR#O.ʨi{-/$ٖ(v̋B~vQ[$.9]KrVn`:I|eU{z,+\1' Ib+$?g)/өczcSj yҸU7\uENw^/ٔF.y9UQi9+]{S(hNlw_֓'[6[eM2KM=iˇ~ FYc(/_j6">硔fcX#0ʑ3ܿ(hBDG)xVAQ5"?ҿ?p[&ِ7#p 6񢑶Г=27w WcqEۿɜM5tX[d(H7[/ś61x`q9y$ꕔ&.&$ˉU<വ$6SPD2^]%)S.LQ/tZ@2#vIZm;*UR.iS.ɻ?ĘI_&e%&cָMiWE*M#hUAIugY="Ȭ.ujʊZ?o:L CeG5B̗om>TUTۭ>z+ܫdć9|:|_R.v\2ˮόԾ]ִ;P0:T^왠]q-&# O~|&7C6$k4a5\mU\I:RRȓjڶ֖\oCldŸit&YgoWDžd Cڪv,y;,H7u̻3fPYk㈎ 'dW5E!p mջ:*]6\EeN4}q-2Rŝ).W.|"9P|J (ԫ{mq-rPg槇wcQsud, F{J>B"f҅n@cGZ#--ցS+ct*/tpns܎) =IU}̟?$ݚئ@vo;{?;kGM5 6>S|SzW?̀fʆpn->D0xg 0yXQpN&(4@9\7e$2j:6݆u):iBQMM|ͭI hpG.zgt%e`KVPKсSX쎧]ŧąs 妃{e#:?X(|5I-hev*H(GvTȆC]OPA^lHv$kUQ(SJ` {2Ƅމ.20րE=E Pb"dmSe_PwT Q:SzLNLwOTtd% 7+OR/C4wBAkNiޠkr2#ЦK]Dj =+{ei~@v*&G˾ Ӝwdy%?|_.3ϖ}1%_8uM\clCUk7n}U`Sy]!/-GSaj4nX;4%A̐3Z󊡕hqv;. ʣ^ B ~]OjlȻT~FFB ٣L5 6 MuK/.W o8ƚs|z$⏗A?+ag1M-Wk) QHM7TZ-2qV|өStICm-eP~(uhcFa℄ɳD̵^cƉ R6z[d|7ʣW-]2]E3bƒڣ?j˹"ޞp+˟2/6Z1JB |oa7ulbc҈9Ў^Q:L>xA i !oSi#擪ɟmؒ64OWqQ]jF6t`E m@0tHӜ̟-FAmϓN\%9H\ڇv滫'Ai-7\jϼ-K͵3̛_N%q$VCFhY6N`vxK"e@kNMl\`Dn%?JΥnĨE>uۉM(-2 ?8`ل]_dDo?\k&ujxTj u $¢ECԒUŽz}+Lvսք݆ȴ/J/\\[{snJ;횡[ģDA^w^\+m+G0SG՟‰|[x5i\(1Jܘd+eչ9B4*{mڐ[,vr2Py1*}CpQ%-+~*vi+ Z'ԃM7zNpyf:)vX93-D;^knI!a|?ȿsY˄ >] =Wjg&+'c1YDx97YIc0B]Z.cm/nZ>Ej 60rAkz>UdO[%"qi, y ;T1K&7I˥R{2wKWYMa8 BI >aϡunr1%W)d5kSK" ]B8.$UƝIj|bQ˲wz"xQ8لsbyHl{d]?2S^~2k壂jum!_nwuq˔S׋|;%bFys?\z*m;BHkݧ=H:l/L㳈6uZ~h dDǦ7挽qs3UlHvP'(utR\oUDCqΡD|T 7,"{QVZqCTHBB6rD|-&7$QIn@9șl*ʟL'җIs,*FЊuʉ(/R͹DL"奢3ֿtH]6quړP:<ݕ;<[o8hwҎ+h,˔ 1i٠cg\AI[it X'F>)=Tצ1 sB%HW*/){G'].EVQv'4`=}(Z bE,b{ZǕwJ"hۭW[l#p6 ߘS.``?-t;CsWπ/w[ !x\*{5L!@pϻM35cm+sDZ\Sf);&YդS׵I.[x.0rgKe$*?wfdҵWJ"o酪C+4k#2(IkW9B],Tg\6MF SS%&B 2ʈeM38 +Nii_«꺓"]#Α&)>0 /QWғ\.~kR>^i]m]Э3 qJ7Mtl%ڒ>cb;@cMGG+Y(󄎲UK[Ak~^Qy}ŋ ZċK>YYێ|C/G?1Wtr"DӆVavd6Y-m'U@.tj8omu\6Qt]EvRFZAm%i.("w_O9} H70 OŝбAm%#j>߃ _EUT 5(:^ܭWv59f[nySý]zT,df@9bZ[[ct 3\Ljҝw/BDd2l_~P+lfNގn^J>,DSa;Sg uv0[QqMr*);^gkY6ոQM<իxŠ (E$mRvJ CfW\"*7ūЉ.QVt6+ئ.J>ӄ!4ʺe{T}do:6 S!nqy^*&꽱ja2Ţ3sM]5/97|+wPAL}VG@[)&_iD_M]s~a{ԣY]FafBȾ(p`JBɋOht~n{'=l @ul$zpꨊu Bx ]Z8DH|N7sA#c?l&s:w#*8]BMj@(:rJ!bg2]MKBMk%k*Ɍ]/]ÚA)k:F/'!..d\q)7ՄGüIGs wi×HM!bքv@䓂rrC~Liin5;9^-q>̋ 7JdRHrߞ(bnm?Jg5Ǽ[>oҥNĈrF'8|ԶLqB|>oAe[s۶6_ΨS,Іkΰ{P JZaGVlFCȩE)sݑ-WNtu?k}-Op4(jǛOU-?S_D0=OXtִYNZy`zQ:#܋'ԃW>&XGqE<˥~j w"_)U8S5W^pB[-;S8_3s$[l!1 HtsH֫wЯDN7(>\ڹQ}kɖg<=Wz \9F_tW?+3;)l0yvH ySxD{_98"O(҇dZ9E--1A ?*( jw@c 7\Wژ6V6sR~UW!xoN#NyahtzvyyqJ|GjqіaQp'cO_ʠ>ݻrMʁj/rZMߢ&,Vop5+^@/ G?D_/T~.aF/bRQ_; 'uz3?UVujuyjC ȳYvUUR -Cya dkE' 4uK-I62ÅdJLUFNʐ%zھM%GhhO`1I>6Z>3+i8La}/-'96,4UJAٮ-Y?Φsq4rNγ;eeIܲ-,G~iZe.vNv9"/n pS5\o3"7],g`$Ź 1$qpw 1 ! 6t2[L+RY*̸kZLW(cpڨ pZMJD_zp^NR9"әE<; ." /LpԘ^Ǻo)sn+frs]OH#*@]tp}Ri7qSKט IsjۭH/A)3n_)J + >0 \duթs!l&'3&^A_nONJ?Ʒ8EzcQn#7H,=>"j])?֪C0\nؑ5?%Q5I.(OXr)Qbm7Ne_н1RjkAĕ:vJ2 #ű.KUloq'&e/4u?Mxy%9)ZT;P(4ꄉׅZz[bq Ey*]A베M\I WӢSѬN[.RBn fɵöw)=ŁijLfC/^*< U#a|hf,(^;$vNkkԿA'Lrh͕( 4xn j\vl&:m 1=ʝvh*O$9 Qmm\VTb&8dqI;{eP$nlca j|'vҸ1de6;¥ETT,.=h HrIvĖkȄzXD4ecdyNw:U1 7UY~&p?swګLk\'] õ<&e(\pDpEG'\u=e2V$bAFHapv1o8nܢ n$^L%⋵t`OZVCyi 2Ջ aA9U(+J?(9xuAq+it\ !.O0VI6xY-IUD\oP&lnHPYU yvmCKW^q9m)(9sؒԖ\ #WVڐzPb28RJoؗRv8÷`mK6O~ޭ7_[TӃ#Yo[-O!* OJ>Z9O|Em?Mahy*:4_d+iٕ8D ($fUN:֛#qvD%ff!8 rv)?#AqŦQNbLmiqO'@2P،Hꂤqu\TuȞmк|HBTE_WS#&"/ֿ8/H{ZדQ'̝JؾrABN^Un4Hiނ??Qeqf|Kcɩ媟5~I7l3bJWUĔ(څ-Hb["(1_>;{}* ?&*(V%{#e5kEN_V;-1gn)ޔL=?҅ixzkR>t';-E&=tJFS]V{rWI|T7 э<]ԓȒ~jp| Cө:wK# DsaM_+n>,Azm1m0-suSZ)֌QAxuuuGQEҽ(iPBir8??ĺjX lZRrDz%4OjJ$TO֠s54H)5j/ Y-WVVǵl܄/g 4輙r #GxR\.? ˔ 6*i/tUUmewf x0(֠%IGKIi2Qt#aڬ<hze)rys|*Ȏ٠E6.& (|o]-CRoZSy[GH-kI9$*Thn2s{)d<9R5)8ؓeNї? Su @1Rr nm% `<65D4=m r `, cɶV 5r6ӓ1klP#sOzZ&&L9=>b+q]_7J99]ږDT'4#zuDuPO"d/ y<ڊyo{ڢLGwT̵ySG.3, @k08T|jê~IN.ʸvcɤ_D6mBAgw# L׀ٛ{3^—_@ :^A. g>ڶVH=STdu}Uͣo7rtg@| l^d˛-~w3A^8!~!B* l[ƜTWByBTK\$yÎ+~^ޤ FT}E{Yu b:)}A}Rsp5 Vْc 3EMbY&|RiS"l%O϶j+.319dƒڶbA}=33Ee܃ci$ҽS~ڳnn[P$O&DZ2̇2 vniFBu5~W7VvTZnyxboE됼 i2JdKfݦ姐Kuhu":ZAoucD\gڃ:,r8n6M:*J[oJRv gO"*&꨽sEIgӲ0)MD~ȕJ[eЃ$&wOtͻG47my=+}d9e(`y%ĔstTjEC6PCmB>uo6 zApw1v[ 1Jf^lClIu!nje\ɋSAma>n67+{+bޤp"-=)>'\{"6ɯSVD$>;D҄*]hrH:|V./Ty>Xl1FX56嫤[g*ES \VV[XI4]1K4Ie6Ê|ֈTyïMk&ZCp2D;/NPh"o|7p/MJ-sH宜Jiێz-d|dmF$2T!5!UrpqoDQ}:檑 OZV-3 ZԺa?֗'3:ljkvU6M T̪ZHSbMmJ& ^WW6d|yr&+)]ػJzM XdwU'<ˊw{l,0䰷֤Ԃ*[ H P#^nVji1d!gbN( ; t1rKFn8;h̗=U duѤ×.}\yB DiZg|[2 ]'H.m Dc>U Zw-Jƛx3T*Ͽw!cE (8 tR+ Iao{9#5TU^SluROݫ'o5H׳ GRoJ*cޔqpdmn7m)S\̫D6DJgn/#8 )LΔB6ŷK<}ͻV#T**TSHl˦ŕps@9q pw)*6"u55E鄢lӬ=n[n2K5Hj'.y~TR8bsɤBjTJX3!5 4V#{ޭlH\ܦ>sKmhc%QBnL#(&6?]5 s"z d%SC幨 CR"%ON >~m6r(iE~*EdAmNe%^w|VM;S%U8 SS5['sNm^ĤZ-U *rW?2ZBቼ?h96f[lg+ڐL1[|G"=𝾕bN# c@>yN]?}맞vG%l ZҠ X(ux6×]}qK`=&tts&dr|r"ɵ5%Kh(5=虜N [aEw-0-qr mr;$DzRIj4;qr0J'TSwV[." sĔ+u \˭tU; QH1k,Z o\msT1 J()i`|:'>D$MrHbw[.HЍ8M}[6bƊ9FtAPT4lj+;Y3$ѿ/":blGtp/zyVę8,BDԧE|iίZUoq ]n*HƔL/PT^Ȍ̹虿 MBU\e>Ҫ< H4J<TL=|P0v fu<*ԫ,'qFu5֝50-7օjtkC2f$qj@-ruѲ "~oN=o6&_)&xhqxN,x%)X#k;a&*ɓmd2qa|)Ϣ*sThA!uٛ^i/yPr(6rh|ϰ `u.CBj~5$Q Gƺ :c&EZxCcu_E4xe! ;]t91D9*"S6ieq ^LZDg6̍ȇ4 ~"OU<CmUBދEd5NJe ;!iZ]ƚ;\-㲹Yz Ӷܴhnê~<;4'3̨_GrFcPQs1:u!USSF NkҾtL{i M)%P[}<˅ɕڽ)2 R 2/*wZ'QP62`ų20aE1ݥ] /Z=֭s~Z ׿hw e򼋏4.j3=Z^Hɉtsͪzbr A#jPh9cp&w86;.ܵ(c@ݎf,'|DxJiU}dҝ?'Ҩ^W694jPp ߗcM-#ҽ8'Й$l[zo6. AѱZY;|OSމ{Hy֛Wćgã4ҋU &Y/>3zӒceqVp kfn$x s:ttMe7ᖟz2Xgѫ}q=mHr7<$oCY8>1| \ǡ(-`ovWW^VK 'imZ Q!ݐM}h*mJqe{Pm|m@iEW;ε6|w\/ ƚNrp([DU?kz=h2dzCKq ti3޴n9 ַPDFvi7wl+NOSŋoY @xdm|ZɗxR.I {U}Y2p&o̚~JT[d3%D+ j؇w4Sٲ=*$:R;Np(a]-ȚjV^Dq씪˱kvs`-ܓ{ou\v?{ށF^|bhز2L꥜6wNü=j"ŋ{TʣN>?(9"Z5OWd|Éc\h͡uEzp^e1ɵDj@ 9"=Fуm27O(C9ڑI Oq]oW.e;GDZZp-G?.TOٴۉ7%ȦEؗQ(D⾤ 媷ڷ=am܊:J/QY-7$4RvQtDWƭK-7ߗ:CtN֕ \/PE ,97dj An$%<}0gV])I+O0'Rt{-:z/hĺ-5XӖ|F/\Og\uftKY]!H--ii$u_uFdη<0ӒG/;̎>j䉏0ĄIEE*ivɲ4ׂѡFCZ&˘ڳ.pnzoAx 6Yq^dW)효N FT-nf"j.ik#8IxFA]=D^ڂn}:@BC{բ{ ".6O\zVߊ,vRyrm^Sٻ"ULtT* k RyeE-kkԸ &_b(8?迥t6 /;wF]l w1Hv|z-/rm͸rA#T@rIj7g &ʮ0ztfS%-YȬ"2}:ZWRW>q[c[%E-w͙mϮb< PTTǽp|5r18B,c$$Dj Nlms䈬](!c.?*·u: t^s6qDsn *3HܘvH!rIOJzoyhbL6g-64'kKEqk/*0=:ǺmI6"'O(+kќ)FzFs?z{8g;qotWz+Akf=p(dPt\S,-KRyELʶ~wEQpS%R VDH4 HqTCr2&AwLVA\aWbi^+zS&+l"c;l߯z%GSpxg' ]Wm)2q1-UqiB^oKn`-==xN .᦭.H\^tw\*utݺBn`mA.R%e|>Y-vsX蓒O"".H=C&4-sك @d?J="Gne2(뇤^ŷMTûn4AdmqKQ""U啢M.írlҼ5II٢x#ؒ^Ky9/JͿƓs%-/E=;*gjɢ\R.MڑcB&+-+p:^8zuGpjtu y['|2lzںS40&Γ[C=(tϽgn%s."UNH,B2\MgbAW2\4e0@q;eO:UrgRzpWL~^%lY!-e448m#yaK b(G/WE.ri$ BTD%:*n[,-Ȇ(.nzkdn6z`]&+1G:7Lr1UW-&-8o:5ilgj ɨfeZn)=j#ƞ\fIW.ܤ仫yh6X]]8NFǺ߈.ФLmr$Eԯz-PoX0O;~usQeK?ۂ؏]d745m? +]/cK :c2OdPWܳcJۑWYoPηXvm8]JC3틁LRD0qpvn! lCiTA5iG[l%&{pjtVbGH7.h_7bOj+}ۮ>%nquiԪh%ApH.:uZ-3d+3#9>jMO^WMߘJO4stlJ*|ζ\؊k7u2=Xr[j# QuZ_|Ozd̠)Zr>Aq 74UzߗD!M+jr`xvV Ta7Z;zܚ?ڐA[Urɩh%[\$ 9+H!.lmy\b U1y 4"gMJGd4?΂\;&0Y)(G _hSZgfn1q⛋qhUHIjn?K r8GWʘ_\SmiEJMmL|@&>de2xqG펋x_ w HnXFtyK-fv(V|,KޟY-À 6UO5_o%ðHvsc|SB˔J# ܮV"W \Fd7=uuTn`DYDCP= Qr0Tm.-?}.+IsZl Fu9ҐʇAymj yigrio0|_2P2_58ѬX_-F.t/ZҾИ1.0奿RrsuU9M:0ZG|7ٗؑ\"D~m^dDMZ U)+4"%x5Uo5w'];i:ԁ5Z'1q%EmsM.c%4+J*hB#(DNo N]-7yNU"!!IzS5 H5`7U.)(Wv"IDlR8SdZm6ؼ5rNUQuݠ ,mUi.К.V.JE@6ӶUwv+s&HSkW,yfkiaMz}Ҿx{LStn"sE*MWYXjrլ%Z>!Yɲ/ޙJ=o$;F̉+ۦ)|RDp+5"#Gm^&a(&!UҊJ Gp2ԋ=9sMhk 8OM)Dq۬Y-Bu D;gtPEf&, ,?tJ>6qc甗{`xDzܧᡶsJg@U< K4n6,*Ü*/PU)u K(K;^8n.Q\zg@{WQ==0J!r1G4=}8ۭ&I&c舆$-S+{U8yi8*c^S*ލkn(ܑJBTP-/EqLp1s;vwy3MpY+][.-7#hr݊+4pGz{pUXk R?z" m92<8䋢DtCxVDm'y"q|+֫T$G#_QQEx&s<7ns5#\pQ|Цɔ)/D }}u,2%2q|8۾~q)U2v>yay%"FxE$DԉH/7*~#glTEe ߇8hnsֻVHy,IWls;o-f|u*+S%fs^%ȝE*&k,9ӫl"Je!;1ޙL)cm.C!!8eS?N˂oP ̇1y9\moNfomq N yfSūL"4Q4t,Se1t70{O䎍6@pq՚<91uYt9YtA_n9\.~4BayxPM.S>R 懔(mv`TOޚƎn·M!Dt {KY&fȶxQ<~ҽը.BD3Up) OڷǶm \]#|ʽaz}jcX̸,)hʝzS֭>lja.څ P/ n]|ɧ7.[*3REԅO'o2A~aq~L79EU>R +V[uhD/yVKo*]֭{-w35eE46GPz4pJW%F`#N ):l׽$q8ZkOU [u@;<M:L\]lvUZ/529 ZjkiͲBX վ=q*| #J}3ORELm Cĸdݧ8JtTLD`=_)ǴYbǸJ@scp |Bu*jDUиk)-Zt2=:c?) ,-[EEtZy5~d*-7hn|$!9ŠAӄ67n Sj|#,R" }1(>{rh) kQ%rueލ|#pGXZfA_i?n@\nY~ `JMd4* |BRy2_idU57mzQzPhfZ5hҦ?oZhC(c#.!O'U~d֋s%MPL.EO֞ZlR - UN^Ήwum Ȼ:Փ/b>#RF39a5\yz2(}w9^m?}q[7hhEiuQ\(T_j yi3*/qUz+9&@m5kԿhivHin5?PG(((0^\gEAjTѫ׶]r45A"֎"wT_|6c͉%TpYlD"Y'zwa:"-4oEEfq#پeHHż㛷p@*oE޺}򌝒ziM;!'-ٱNiQ\$Q P#ϧ}3d I;Ň8ɨ6]ȗP')P:h@~S_8]*I;fٸU~7Lu>)p }#l)V?`F<˟RO߅ _ \*̂ TG:2'dzr{rPpftWsv )iUuUnD# mZj֟ۧZK-e^Aέ8j ϖr?RZB%HBzWǜ@|;h3$TO8k aEط,3 6>*p%N>y ̒-~5T4޿/?pr'#ΛzIتU^x+ȇ=>;%nmщ1O"yK8zR[9L.:%7!C6$8ɤNrcDC=ބ]o0?{."WǛgWNP9Qh떋O vNv]df{ŧe_>ϸr=vu^6Qk6?5V_:>eT+Nyno^mCk-,W.$|Ji:VQƗi2d dש uĜM'qĎ,ڕƵΝoY\VCJ'_L֙eS8CB`WZ'>cRiLobM`~2"{%∍ε6g5uOZ)vSഉy9N qc `|ZA&ؗ8Ў]M ! 7zK?JQ¦qu}24>5c,˘܃Αm}!㖆q:=}˄>S۴M!}`EJH[H(_J_cqxdhRZw-iom6L.Q=ޘݹb*zmjWMVuDqCjȱFndI^j\?cK~ZzDqA~'[,,o9< ]+Nׯz|E͕R<軒x:(ԧARd t޴^o,&7^J8+ *vp4`h9:J1570p&TNmW늷ۭw)&4RFzpv6D),ɔS&5Ռe7Tb-Rnר ƍd}$f+ 7 +\whXZV_7b&qԢ\̄^Trp*z/lS0Flmc>ѫ}4,z):;nUi(b 9*#[QAhcRA>e_Q#[H`"-J}@yh:[;.z8ͱu^`pmjF?j6W$sgq Lv H) *1 ?i]5qMǝ.HB})(sn6FIENQ. U8/|9}/q[wh-5ۄP&D h*guO^ʞ &]%`H.W2 VF m|۪3SsN.NB'r=u tV-@ -ƎrUjB;u*[EepM@6j\zhȽޝrAҍ'T.\T* Sn_&q8n(–!m}IrΌ]e̙?RBr*D4 W w6!.ɲl병 }Ƴ[gR'|ojg ߵ\dC`G8 e1֎\Ao^.8-[QvM𫊂9;\`ӂ;C$ڦvUGʽ7N1|{.mG"0G2F2Cc^h8X0.ːNQDE]7jpdgmV>a=`AJ[{|+ėIm]2l_AN\DS]=h)v^IÅ%_,.*c\iQNcDkSI1y$p]>`O6i<5(K:(sm5 0!\(2}DQK6հP?q(0FpqK%گ>S"W˼s2'YV8O"m77Σ`]"깯j0 a9]~ք jp Xt;Ň+>[(%P:*Kk;=W\}hjΔEDȡ LB\SĊjh"LaK%.7KeK ЛBs2( lօX8orᵫαMͶE㲖3X&$InnպVЍ%رGyЦT]>+, Bse@Vq`Iu.}*+ZK.( =RK5D؆/5 9(evT X.;ղYj"VlڌEqUW9Ȓl4얛⃲b"uһ.S̋nAOo݋[U9i&PS0kрA@m1KV"Wuyc֏I 2[[m*%Td`B*^kO^q8k\ 7L||Ui>ѸYr,D6y(/2w>' ^|&"Q<=qZ qgDxaj$YuS)6z(PLXpo3 x4DŅDkm ly*Ǽ],mǥon.ҵy[> /T)ψ-AV[Mb7SUCU Ehbia7%d%/))G]H$|;nW|8l(:+Z5g8h}׈CQ&=SvnY]W++I#QYkEpU]B\(+ͫ *e1H]"ĉ)J!UTS?_Z+߶Jm Bz,umzy?QR6Q #f(^:n'Yr{#:}󞞈(RdZ 8Xs6$TƔ/l%?CaA&\$z88N;~7RCԺIru z(9:m"*Jz 'm)NL5 "TߺLQ%3w m6`9}R$$;ҝ͹ d- 7Ȍم|̥m$:Μˌ.>jk7m-~%ފyؗ袪3""l &^UTD?mLjsm1F#:9UM*X^ja;hbx]t9Jo3ّڼdX-ۥ\WAubu}VqrCR 0n; #Vʝҫ;^] #<.蟗J]kuC)g :q+i.SgE]H弛q Ǜ%&R_?¥rD&PZоʻ(qGco83S3Ny;G3m(",,UIUԽӮkAPUя}](cmE]JԚTw?,F YkӜh8)ҝ {d hG?͍ʱL>:%I~Yyuhڥ#nYn6sѴܾ}}ħl|(R%S`}ȑm ow!y8 tO_%i^RoWj;\Wto[_uU#=XZSqE+/](@6$.LmdwKu9q*mzUI.`dDS..yTjѧe n|y^֮2apo M4sM]ps3\8V s$Hg\4GU7q}BDe٭9!\|w-=)$,%&7>uc Q=jI|dFyOC1;&ʉA}[F4 +Y)D1|oho*~e蝩]DE1i 8co&Kh9q? vpxml4yP+q?,vG:(}oapKӘdO׭B}#vq\eSM^^}U\ֽMzВd\rl7$]]w(r>QU9vJͤ#'&Nerbf26NCdžD% CO6خA%i\ n؅.Ge;RgD@ҬH Q[7q+J=@ PN<󲥛"!EK,ɘ=CR!f2vr\=]P9{uQXqn Ŋu5lj\Qkh#\Z)_Ԥִ%5ޗ%ۄ&ըh0bUwfaضYZ;g$5O%\qo6+lWN.+DW yƍ*mNߒ95|wzRm7clZI_sNo;2'޸:v*IQJ^p+m^cz/m 39UN&QR+Wk3C%"xRs% ddq7ڃuI ,;x6xC_.-dD؊()pzQ:W C=P.V ެl/ Om5jDUETBNzȅx|RO\(|A}8 pW fI m{z-}_4"КR)w %) &%[UJʟ, Ģ(͌M?s$ڸ6^p!e R/om;HtN~TM-EWp"Tgעf*1x5rXtUW^M[֍“8Tkf<&oIU}L"Wyr_jmyѤoWR&ODZ)";05ZuJ$ĶQnҗ. OlTl\!3*+s⧜xYǪ֦q/>.0%R73f;`A[M5Љn^7ڃ+E~":#kVǖ ]#Mƕy9ĽSP]_SǙfT) E]e=Ҹy|;tO * nz".ǒ#@y@p S}_9dQvQSDf uAa-Y<ص=ˋ \bulbL\nc.pXw@4G U(b٦KyFrab*Iۥh6Fgƿ3e% 5$'7b ͔ ʴT8.UC"[$J{q8,Cp!dIcn%IyM:S>FyĎ|]HT9"]$Dָķ!t(ӶD\L;+EuJ\Ef+Z԰ʭH4#SkEo)ٍ&bR3Q(Sֳ_6 1PQZ~ !J$巡)D'_Z>'g1\iD-).LP?w"LꞢ)q\HuO`r.kv*@yR5Ll*~j_C lDk>33y^c5\ZRqi:K,pe\aM}i[p|_GM9*CK՗E嬥̫3y[||ˎAgV#87D JXҀ ɸFDԷU(I'/T,?Z.ekx]n!{4^8bV&C5WK5`QWzُTDf}EU] 3\wLz٭׋^61oh5+U7^sZ㈣P}IIt}Uya͚ z[}] G42Q}SU[x& E/G:T֬Gg2!e~AӾ\~3X,rK )tҠ*,v2m_wTA5}iG1;\u1Oh~Cz ~)-R~̙ڌeΛF衲~>;\m sj JUV]? G_Qwl.1;k.L"*@( D[GR=} p}qgdg{&McDҹNzͅTxŷK; q&ЖKieN֊Brf2$ܛ>HBO68\?ܶЪ /ʢ/9ܣv% 󘔣0@4U w[[䬫# iCF]ISUMDՂuk#\2*(*"} Uh8̒v>#|*sOZ^@6mSn+l1IWbBT_l8 15d( ʋ((aGRbr >KD]wg ӲQ ^ɷ / WjNH(Izeͥ׬GV迭l\)ӢJN$(]CBm/3Q2(9VRwc4mqta"Duʓ;j+(fc t~t'D3-2dn'ۅ9ƁLp&VPRxSETncLfw_eOJ`g{/֮7FoekKD箔^RHء]3BdjmI[a9࠻m+EB|p_ \ whp_LgeUq%(<ܓRYOXd̨֘H|Yg0Aqj6C*R!MbeE[EGJ]Jkϯ"sҔubKV䰨*Z.3A}K"Jx~'ُ?)sӠS*=N.}4>Έ6ѻnjTGo ZfW;CpX۳I[ jo7.A/Vs [Ŏ ,JY{ And}כ 1OJ@9~|=밢ցzH<"#"sAe{B+eiszy:duy^ejjCf/0cۀLdvu?d?Ki>α]pDUJ\Seq󣭽e#weʆ_.ޜ/+YenԂxì{)/]k4quȜk1?T2>\i<\H7MF%kv>t$9H(uޡqL8W8Q|>Cl쿒x< n4u UNw۽jVEM]IǒQ#ЩR\-9iN_2"l;t39.ahHS\`}ط%9R҈{Ҭ28VҍPǕ1No쪤iAQ%էe+-o,xW(sYog̀]՛$+(gFm֍sT]B`̼ԅPX¯aT~WEڏ̃LѰZu<_mtNL bd@Q~U쿕., ' gt@TBvRVE 1z.C7M61Ȫo ` ts~88a#Ǹ(NI=>ș?˂, ՅEބ}ol"1EՕǢf[F]#ǝ^Tl˷vAEVKsJşfY%PxJ u\Ukl4WWqڮ#vn#&OuQ % [ qߊWʂT\DK[3D6SKeTqIA’%šwӺQN*SEi~9 )%EUdCn;!/-VQ=BQL|mKv,)Cm҈5*#e91 v۲tfě S*lw(0q˖ {uިT͐adM O@ qq1]U=,7]Lu.+x~Dpul6ҸUl8sRSqC<,yο Gl)֦sSH~ck!TyOW5iMn$EA$F2(wU,*42S͘jm@McanMN2/MAVxV'!n.g6.G7}U܊(jKԣH& ITRw\3\1n+n!T_UvKd ԓVio2ݣ#`t7-D? *U?f-NnUp:/z Ŏ>iЕiqdL INzc>8mypORr7%|X}v-ל#m"#SN3]NOMa DѵG^_OW$'OD͇Y^f \'D$HEW8($:Yy߱p}Mc#Z]wmBT.Gy]]3a0r,w4ѨD-h6ˑH "~:ϲ>^ AՂreW{ԑf8NGǛ-;ָw0!o\ ooEt\OzxV_EN:,I`%DTԻz{oK/2cęM%EځY9I"H F, !eQJ*]G>\j$GiW oQ',STYbp-cH!PMgrǢ%?~,Od]ySAKEPN#!"*wV:esҟhHND#o F.$f<.>74{sւkӎ_ReҦ.<1Uˤ#-#|ԓ&fA暫#QtSO8S Dms,nO̽XjUq_p\lH*s}pp ׽rMNG=BZ 1؍2}ؼQunl~,8HESudD$|[&UG0V+mTiNPU$Ȇj,0mʼ9 ]tkA$O$\%ZdH~;! [Q8wD* :˂4T5S֟R'S7,w݊uVk9HLcO6Ė҉(y$:.sG=ŜWrUm-9ò]u%c7)]ՑL+mpRcXiVԪMLʄOhJ9WnV[3)QO*(7]W>EH#n9qmzrLimX4Q69N4]{Ћ5m\~&@O֬zڡY-ER+xm+^ ,9XTyH󠨪+c%b1psPq!Y!t},WkDrD-o|5õNrqҩU~tE&4KmsbI K5nRL*% ӗ&em~Db5etq:.Zivg*39H҂kر9 JjI6ghס(TMf_{PWcR B>xUt4ֆ-Re4~)6.h`㤹>|]H~"[Ɩd[T\pKܮb ^Ӿm@UAo˜.65jK(8v2dr"h/'wǺRҸ}i|I~ʁ@245fKt#"t'忂mR^. Nr瘔KXߢP2ܩؠyvENԽ>f1Ku"/LZ˰B&,ܦhT1_xpyɎXM-4&t *c;TV kɷLÛWtsTf.7GKl>q҆5ZO0.5ݑMydz%/ij[Fs\pyW};aS|-<0'ٽ$>m) _ IlN3E _08.JdTiwRO*҂9jzCDa^X*|ʿMHK\@QX(%c_T NW#C(ߌ?~~Qp44ؼyNkMKJ/ŸT;m/PU 6K8n+kcUTaq0Ac#"Jlq'Ee֐!Cm.$EUEǯ WYPg!no!D!G@@ ߥZb y6m z{yO,B?4@%.nlt8u%#ܷnr1eZjK^ "O{{W$} )-Cjz*ơ^뚃L63 u 4**vZ)1d( "n|_1^i%UVY 53]+m]ֽJyv깥֮';S&[V!ՌU1\+ZG{"]_<҂Y3Pzr4%Y+S1ߥTw[!ɝt3סE"/͟Me6n$mVX9c:KJs6S>6QaeN:@ᅶnM J+̡g{;UO:V-}%"\/q/tNr<ӖӪhhr&˚ *8\/]~TA2dFtM (h$/AZ{K]( NNIhjKkUO\PD6Bp2vV}*~^7b; joOQTؓ(Vx@4ƪٸۊ#+7Wv}U thXj'1]-7T\xOYxSӸߞ+ Rςg- |G6J>Gc[nׁ}I $[htA=t0].a2"]tg=\ʼn/*GT\&U6TfBܶ253 :1Sev֨D6.vIkqM^{Џ GUpȝ-^wBɸiieWQ&@rR5sPl^mcrVgRhy~puszh'&1hfP9M7\LDLNV\ncjw*sGp:AlΈITd.z.LyG*K-۩n߮k̤Wi[\βUUJ#Nٰn ٽ[mLyHJ֥}n%7H58W ֯ 6ILwgFjGS"/Q5i^9WBC!?5lsg9^@M' ,1UƖ]mw"=joSM,TyRF\!?fЭβ2 |K&I~P {T _'r:P@(6u`SZx@@qS:e_J;IJm"L\GiFK\=~qֈҦD3o9aAj`ŲH5ķ4摳*4(2.*Ln!Lɱ?1w%f5.,gz'Smot>D5Y/q)qqrڐ/Re{a|J !:@Ҋw `F.W"Gҋ5_?|@w(zKpUaTBCCmG8}[l$* *5o5J)ns9JcޯO. p #ZNp^WSҫ|gNq -ꋊbY ^im|FAxB(JU^[m亩&hq V,$;o E*c9֦IqQ)F?7gȉ?Z|no=3֮  5V9t(wW`V̋sh{Rkr򀚴e{6v0}$kI1G% 8ZI&~m|0J긭*Qy.5|J/[%~?qyf\ke+I 2s3Xbd$o2zaQtR?Gq%.1/>ٮ@^g%|C00sCGM[[Kz/Z9 !o[cJCK] 񏗷,v\+g"4#g3OJ,|7 fIwSڲ-A>)_BCJi6lvɸDENOQMz~.ݫ8?u[ ^qB&*^~؄Deeh#BJ)\wU>g=xMpX |@E%@OHuzoV[_pZ2Mcfۊ:G;)*&^q1P~qۦ2%hQ1n 쇃N e0D|U[ѭavX'e!AD{Q.W9ō2+8 TTre#QSE?^m[EcC_ P:Oƃ.GGMNre:u7+Ncs ;:SCsԓ8_C tfcA0 f3Au 88R;.]ݑFr{yJ]s+Pv\/R"RѷdkaB`ydQm=Is+J.{SJxm|'ڏhH>g, u= \S2e`eL:s،3f2;!_0*KR Mj1J =smmy=2~Iqukb{vow&'UUT!!(S _ x6Ä T}MSOJnV&÷4E޳1%nyDe'[ET;W x H\cʻ*e:/ Y/^vKْCWEL_jCoNn\erij]Hz Ӓɉdq厢$5舽~nfr,|%1#AZ(J Ml WO} eWlW-1v>VxT(BI:OnϿUmzۛmTY(Bod(E]*?_cLݵ\|o5znt﷧Z`n_u43{P!8#׶{%hT60%WU)IKh$&Ɍ8+1Mg]6$"i%v4EJ#eOZHݎ-L]Am+?UkK[M9aBUsnj+,dž3eZn.Gɐ-l~l/&DZ\:&hp7dTȗM.tsq 6_D=̏ 59Đ`ˌzΖxh=R'gd0섐Li y N_0yۓvm.%"]Yc,1'3θT.=(@gΝӿ+͉uY,Pu1t"1(͜ip.ҪwYU_ (!ua0lVG Vp=$4\n*9]['ܔ/Z4&r("p4%lmZҀ!S|~2*fQ}?lݖۃK={kT4P]<_e4 JL//ޤ6ޣE׫޾qVIc3`O h_?L@zT K;hqv;L! IW4Eُu<2%q.fWiqUίD& jTƔO}xQRʦOW*3N: DM恶ilR.uftW[ӑM4 pTUl >us! )G[75ϲ^c/8u%i?O!Yn鄈`Q-LսBSN> DևsCn$qo=Ud0d53!:˾`⼬3BU*;u x{aD8n4 #rTIztP{{W~:|ҷsAzz"HZWmJri-0j_ EPE6 ^]|v_)V+1HV W4P't &3^"ګHw­8Y┩i|ˤ'x᳘FhiKSj^6+&iCZ4iB۹eIskW# n@еlXjo; 2/j 𤛬-+m H+d g,];*o̴SH)d 2iQ?ʀ=s񢪥qtNZ+kUEpu<$ndĕM~0ASdSR#zkƋu,@lJ"JR,hl.?!8!0&J\[@)QMenIiB~aFײ& 5eGbj71󪐃KK&8`:2U„ȸn-Mp|A?:Qrт ,d w]v5&jj刎<`,,4}Ek-Y$-į\q<)תZIE ^UZM[$:PU3jC_޹N[;;&_sJe. U*F֯X%64/M#}ށIuM nCT.,xgձ>_Umki*CKqk=qƥR]FMRPb:qICnXm?lR#8C.9 _$UƸMn"z z0;#eқ힟wd[:N۾duBxʘ ٭aÓozuON065_OK{DTtۖ)lҴ?wG,f3vlW(ȄzVS8!{eO6EAgNW][)_) m]z?+W5cR&usۋˈn>0KF5)nȏtұm ܳi؎;**z&|?-.L\yr@.~T&4S$e>⇴ʑ,5om! {f;g >&pBUEc YkE`)谴"d]}ғϷR)mՔZ6.3?tlq nq;gi–ոvsۋ/.ץm}UH-:e-Zi"6DeShmjnk! '}]Z7"$mqnc -DKK֐(VsiP|e4c@χn(1Ü9mq:K3e'!?wE\J̦ش Dۮ*.Uqڮrx _=>(0M\ WbIu%߽gkLc%7yH)3W8\lN@oUd%+5$2dɉ H@EQ7T=hQ2߶W;*vmS!&Ci׼VW턦|HjԕxX"'f/i{֠Nw櫄uЃD䦆'J2Y:{=QPU & TMo5.[~:k|c+(:W} ~,=! (*,'jJM\ш :bwLW?z BKxǘQE"D_Αf^ۏqƒ Z_Zw>oޠat0Qq|3H@U*gNQj ],v`;Zm ZcW;ΉB\bQٷH9?|Ŋ`kND;?h\)jI.lԗuSNq]͂˘@)O,'c fytM m$M"tҠ:lGۏ.+oN&34uTOD8\2Ka"(ෟL;tދzn냠B."=ꊤqֽ+n.{DO.IWS;W%9s:! .seh+l0ګ|C֫۬>fJszjJ֠/F=Ka>#y%֑}r*_Nd\sSUP0/et-A[?%_]>LtmYnnD5slr0zhDС'}q҉Zyc=&vvŘrLy$)K*(U܋N&Q9Uls_j<}(5aI\V5*OmOLuP]ʿ*4қr#6#d*"c8DTHŭt9c/rj:=vRyg"B 5Z#4EV&ɲ$T_ւ% 1YEխ}};3dF.Q>bV}񞴦?dxZt-(rbk+Jbku.K6>(*.Dkqي]*I|xiUf__ά|Eq[uב]~ΔHf5Z{E*+8۹H\bVV! /oFYx!8[s"*_|E\t0 ڸ.z ۇY whqW{/$}]^vs:+ rl"VVSb"xI0QAosˏH#:MO-ZثW9 &~ĚЈčZ9.6(wdޡ׈." u`Um=xpnSwԭ DVo%?!\X5{&)=(P@"ށXiXndp/=XJ5֧&""&S޸\yEuUMC&G9!0 RFZd V[CֈӜlda)#a*>f5Z `4+d3 vN?*&{2-"bD\U|όԘ`(%>'/$ Qf@8%d s'\G&fI4Ȼ0"TDL"Z96h *m%*:wOy+I ᆦJ(y\__Zy#]&5Vy|ܱAvV)RK>G,op*sq~+2<ÿEE.)OӨ_l 4=z4dݔг q>oe\g Lk탊Z;SFԧ#_*]{(Imܧ.4L*awgYWو5m4?xQiB'>LDN !z h? 8RrlvZ-.&B\/Ozf-:cREtaW? օomV9D &uYݱe.2f9nP%K<Iw(dj)n$T4DG^~ .Wۍ|<*C;R]< +jj=V;TbK!qDs/dRMց(#!D%2nl%j[Ž~ZV9FBq.ۺS>[Zi5݈zu%<Zea]hw 3i(]%/M](?Z9n24ey]2(㚖l Glz0EئdD_Z:zenB<2MY]X-QV%BJ8tr!VL/A-{n2˭ C& e$է=;%y #4l?橄Od|هV"*jlO*C\bHa4[,E\ʨ}ov.q$׉ ȫzdK8ZH$Ai̢!ơ9TUOMYߘlh4Pt#ҊS/Aۡ̓cu5&u""\v/圬aו8l@(eL/|UA^jp.++x 7"UNV%LOl.%dUM9jb[\k:7yk̸ꈽR.pzMd`iIEՆYm^i/SJn.iU" Ӭ;x\iԈ鍩~bu|Ȯۄ DWYDn0 |ʸ˕\v\FY%b6]F=j-fL據ή*7K"9L^H|"B KJvP"nE:nD6*Uuϙ?%Y1 pXwB' ^ 5ll"Rd<:˒U5wP;QQNI Ln.Q׵'R$LQME- 9 ˜avO^pa۝kj&Kc-hAau *2ڬulʍw}jîssŝZNJi?ʈ,X2rb0Ou%]jKc>2 ^؊εg$&%DK|y-VV8̇]!Ļb 5(y0%$|ه`0dbULNށpdLa>_]_.i\N|p:<.4߆h]H{w^Z-63: I6M"cOUwZmo/> |s5k] ]쩿kqTqøx1emPSkU=3Lx8CEn#@D't$xb1M hթ0iYn][fY䣮k=*)R65t/Whaw|tM3tN uԽs盄Ҥ8ἦw(`zA0jEL֍͜L/nWȨR9pA])#lL܊ei$6uE*k#niT gu+2f6lf?񌹊B҃- 8L2\ UOuz*:4$m.hFB:R`cE%nn<4aks) DnDhGuM=ux':U |7Gs&9iD:=(cK\-C&ZN˒ EDߥ4bCʹe$i5ET~WNYZ.DBqJZ9mNnu˗5q$Gm@,re #sG+{eSV6EyD\O"y~D%"LGq9uW:J-16`^m漈l8=>~ԑ+d&OPq*TQnp9 <Ԫ`ZwO H64tԾ(&oFOIh:ڧNR / 9f77=P{~T-|"qfk~E4] kQzn xjzO8^b(b T;鄪2hmkDEɟnD=DsM/e6_6˱ "&%:-}f!&@cau%RAO6zWIKkÜ$aTj_WV\]\"" Omz%K.8@}D< Ejܚq<P϶z)0 BѮPujҞh;rȺf:Pإ9 B>8А )g:o.nbmvBvpOtNʼM7QʣZ\-ZWwZϛf;wiLwzyF`捻b)UΥ\%cs1#t5($Hj\.6sqϽ L6YU迚UFҖ25musyL+deE\H81tR)Qpp,(Lq_]GY-lzseS8]B cZ׭,DFuHI q= *7sbc i S*g?ڹ {K6una/ͧDL[.Y'žMxr~;k=nQ*l8~Jm)6EM/}1#xWUԅ)\̸CQ1ܗ[xÆ+@(~EOz\_٢%pcdDODҩ%UD]]*-ÆDMg$d)҃Tm]X32q\j.IvJ9[&Ep\MhDԞZKSb(;0OMG5V:w]ցqHqu"'ZiE&GN; +ϖ%>Ū%Y&J[vכ1PtE{ۭ\)!XaE>+\ȱv`^ 7 KtcYB@:FBA]"esִ|'zqw8G5O^ZxFu~S[}ģU.RPaSjk9:E32>e%vC" c>/|x H2}HLuP.s3&󡪢zt:2!l-|qqHt$/8)J6ơ[ {>_קKJ!wBERTU^*$LDz@TCN$&pJQ lQKG[Knm2oZ 乾^N=mŝXӕDh&nzL9ac*\1gft ΠF7Խ;v.jzYQ4wϣV8/p+4vn=+-rKڣhbri/55\֪Kq`n7]F#DE;Em<9F=$Rcm 234Z}U:LDmC $>i zMt%ϷZ=c]`B1y Ѓ~%\{₌y*+ ]mR2TSV.*F1_LSm)-7seu(;j"1S Z p8)(Xm?Rd9W!-t֚@ &sj|N> x-*}Qz!"@Óy 2\S3ڒ;-}U KB鎫F@\9wV%1EL @$|*D]ZA,Ho>SV"ETnWq‹5~b2PDoJrkm ̞Qݶ\zU'RƠgI/:`LI:"L6FnKS1C+J*֫W>)iFVYMf!-̽\S*|s7z@W+ V˫*w_np2qdqE1֣k, [(("ˌCFy@4BUW*P~m!m3 sur};ٜ_ yHI"e*FͩBH&GK3Z1g3]hC}֣+$T33[֥h߶Pe$+("xy`tSz*v>8 b:O:q|-9"`|U.7SKwO/ɱiߵU^o=2%9,qm/(o.WuUW`}V׹\(ʯ/!vRԊ=1S5d1$;\yD*{Gp.vҬWA}ނ|܍US>Jaaðd3`F+Z2uW&Q==z#̫۬\&V<[ʧֹIbprÝnEK%[d4*OiЬK 4V]#u^RO*/1E|8#piSSM==7${R&23:F) UM[/f-@9CY ")'{QcdDrKzc髣 D%o+ӵMm^"uԕ{/Q4oUQ[m(>F\;o+?q?Xj?88<&|zTm\-Qs#NezK#1"Nt8h5WD}/>sBԭB>^nT\l7EoVn6ǘ;_5 !s༘Wp4ULpRhГ*WA}~S ߖcYRN'e;."ORگ!RsNh:IGl{g8\W l0<.SR n)R }uo 4#T\gŗCNr"pEctb^/E\uJ%ܢp9axEGl3t5Uڢ{$fsU?*av-N#΃h6Ll]liD # @0<=sށ1%tѸ4$E<ȿ* _j g;A Bx:_BO]M-МśѧT쨽Ҍv -lbЩ!"QUq1׌b+yk;:gonv"m&Xf-ĎiDU"i!D ]3=~joњ g|~U $ _* T3iu_m7TQE `. :~A5|-c+bk}[P/CU_ʃ[񭑛[fw§3OrcMI)["HAz J_p˖~TGSeS;uވyx侫Л&M28-qS[`Q3],A9qq?4UվLW[D9=! g^|t7 &_dLwZ@F hKժS ob+fNT\&s֑3Q5yvMP%6\U2ֳrfSsʉޗI!:Q YLy o_JuuMrS NvZ '9Ѝ21\"lWW'Q<\iTR-Bэ͵eVD0YTT^oҁKsdQm8{RT(~ {iDAEuJe *j9[#[2 HQ""'ZW)/NAo$^PDܠ”mÑF\]Bj2=3^!"}*>Zc-:dӹqWeFkoEx~a6u}k%[gL` )ޝqh$@t{*lIQ#v֞5v_򯧲'nM4^:QƴLQ. R9yX pM֡"wZ9Z2(gzB֕+0#޺T$,"j/LPtJ ɶs$ udrH}=jQx-K\tBr "d)?Ҥo}Hz\hd6Bd5/^4xwE\N\:yJB4]BZ b RwOjn[liIWRPO.[uH/С'~풠Y\q )4YLgʾޕ5).:HfOiH.J/H\@`>uTci<rbFAZewË/JVPI=֬W~\)uSn?L!*'mYT_EbK)=j5i㲯xg@TA(i_Lv[Whɉ(z*: ,nrpj>wZ]psF.N7d~dP+.9E]bZ{QXpZgoJ[ߙ #$qIUJ ipq `Y}QS@k`V Ǯ:Ҕ-BNTs׺|I93V_* T Jp:{fa2 D=TU  eZZMa=,BiDlQw)uRp7W^tOz/0dBm""gJ"JK,se:*tEyvc8OKi~Vw? OzmaEy<8U5RvMJ; H1劮s tvDKuqzew_k1N=9xR4l.mUV^7nݶso섖r$){#[m1b쾛ױxj}| |+l?p9Seӿ֡>AY3 r|XVW;S$N ʻF78!eT)uBZ1KgѤjL@BznC};-[npcF<.=6TTSo'9n(}FoW*ŷAq2o0 2]\n:$eQ3C*wZo6gr0?e{Ѷ.=<4jG9vj$-6͚Mʙ#6|ҫ\S~@z َ |lnի\,GhqD&&lpERU;X=Q9JIwxf54wy^sH9ӿzqcmķEYiDjf5m+5۟oi:M8>Ԋ} 5:^izLwޭ:~49ypUsEL.*;MJzd响 (EY}.K=dU0pMU}{g25 (VEz 1~3D5T}TCT]z9J)q*PHS9동=*U֌ge^-AmsLZ?6M={}l13Ҙ!m~\zzVLio9]W]u\bvSMݵ {;%ftZN ԘM75t955*##9O/Eʪ ElhMf88[|2*|+o$.-/'_ <8]ΕM 5=HP=ZԜr8w 9[dc ru.HvMEQ-ݵq\0qWel(_N\Jk9a!IYІ)eze6]9`\[Y0jv-ޘ9nO ߇̅S(9j ^$[d^e6蝿3ekE \VD4w}),PވfZ?BowPJ0. xEAv_dQ5ui-荋y ܂w̩p9e;K,"3,*U?w֍6/RfT5WoQO6Je\yQq |݆\-C*O8-WTB^k ng&2gȭ"=NHzl6,HU3IfA+2: EiPu&UwO^ۭSAF]wLc*q`!&^oV?ʹLWXb1;=եۦj>%akh '5/$q4yt$XBwb:Eb:}wsmXLM@w0t!c֊٥'lZ%m83Qt*/~tqf;w^%cgQi[3t[/ՒXULl힣m:Z!mU皶Ê? 3.)܌DTO^^py"lW+K7 "i.L{V|Ykuۃ.>(иꤽWomssb}< _Apᱽ |K矞ڛLkԋ=҄FJϹLޤYŒ [QK}MA?f^eiv} g|dE[EI#dYMJB}6g",΂Bu_HU0M/!_,WYZin+qm؂MKP69/bMЅkF-Q8 "3GSDTj5LIvSnd)j:J6]Jez?݇\Wq>@b۲ʫ,Mjsٹ1=ۓŞcnVUEMؗ91&EČQߖb 2Dn0Y<6ַpQP-M*/ҏv宓VmP ÉJi׮pW$T`̻/(9oaWQiE;!Wҹji3^XE(\zeRl!Yrd^!g!Pk9e3|2"|PTEɷ^1̛ny@S(jXcyp"kJ&|W$.p1#+Szę\pXVY K*I4uOI6:Vaɐ+swiм 㿵9D:lzc@`QHLcbJ܋D |grg)@_)e)~kTM`\ 6ZDzϝ:SVCb*Rr:T]ڇvpJN`u09,(ڱ֬VYs,7v^AtDHUEk-3Ά74+NNp7<0pe)u!~߇ Qضߜkf84\|^Wp]b>Elڔ|l?xҘ83 SyS:qV pli2Ezg;jEE-8ߢwJMq1bH LkBP7AԋW8A@ʴnrORj\Sa)vQ}˺^sJÇru ɗ,)R& sؠ8)Gn:XLk4vTw!lq"~ʨOjîKY'th*¨&NjYXyKp7&qG j GcMmqy%&\:N̓̚"6(o*P&OӖ8#m»OrSIi@>mZU xfm,l9 |OnfBi's\7C#`IS)Jhst݄ kUW|%0whmѥgacS=3MMY\f $b3y99b,'jf6ImQ$h؎No**WzbBkI&UrZ,D<;BxWGZ`wLJAÜas3>gdS9A-}Pl_ef<sdO@O…VqZu!>p4VEZXFH2y֠p*hL5g;j ]A<5귕Gd*vqɈQe|Z e~n1Z 3x۷um[|JJ\c_^Y,>Z-&`E$ S9pAeJmrcpY&*m ޳t':pcBAFT1ShLhUm-tQHs`иkSa㢋0VB3.4/(s*3B"ooJ>ӬNEh[m_Tp^ I){!nЀI`Jn77uM{RUgF~+ȶmὥv&r}{_0AF減oeӋ fW1Py:~%')UD۪왪6<(3@ e8иu..mcn+l)-}5}׎ALT;4h9KT)Kqo,KCq?uWj"+TɌ o+fE]/8)sU\8:)%-HJW ],QjsƛA4#SǢf!@\WJm^k\JKu 5`i]+4|G䨊ڀh[%"]KҌ(TX,&8@&B>6$qj/-&-Q3j H+ !bX7mFD)퇉p}#H#!鄪+D99~I6 v![`<2F swP{wC%q[i)\/J] T'RZHȼ*P^ZyKV_z Ɵ-jȂ< &4Vv:>3g4˕O]J,/UXk O$TXD q'Z-׆lI q!vi4 PzzR~Eci\1r'O*^D/˄ZqYS2샟ֶ1l'V'waVq),wL^䃊GuE/< 芈cǬew ȟ W ؐ!訹L-)vsD%)WUm)9u)8zn*Ŷ;sKܥ<9RvEL0* Z:Su"!d xŽh.;/7m۹}QMh) TZ[gN=j{\jQEbR0ZrXc4~xaEp4W9I".訋J{.b͸ݟIm#aig_Ƹɷ˳ڸQretjw7#l2pe콾G$]QL`IqעohO%3 s(H(^ڗj햿TַnBd uUڪw?>3nHTt1tU_>x1$Wctc6ّ.5~Wg^K[.wyaS1%he%K5;\C!I \S.x}tYAﯕUU6횊8n ԌޓD UWt]J92]vVf׵.DBͼK[?tO*mT3pīVm<̧yX=/|U"uЧҌ:817kM#wHԾ>xR6/}3CR\!%]"C~0"p5~bBi!q lP۶¼\ ۙ%T(1^DDWswKT6fKL&tA㴃̻ȏjpɽ˫˫Vf]-+LR2ѕǻpHXfMPK: >}jÍHdj0j3Q-46F}s4'`eHoc/*Hޡcʐ6ISQ;SU=s9q)& sݪTjZX6dȐ)~g$#IJQ6EMPs>@7,a40YʉQq2XH*PI"l.+q 5;#٪h-_FcӨץYpH<; :Qw :m4 TX%j[a9i_pKe%?] VAgPȝ=*\AuH|ڤ/ouwщj:;`%>W!vrxTY1Bd]وQ~ខl1hcU*.ODY5tM;TЏxKJNcjr[J`i1@edԽ?֪QrV-m;&fhWU.9('ěiAUgvJ%DEO"tOΨ+Gzm6#VG*׵we]lf[fק[MXT*86CY JFi!03KrK:wFKdό:ɳg;j-zP_md߽,W| j|֌ ]҈ B-y&)'zJtr᰷Um{)HWګd4kwk#`\]TZ.3۹ֹC]S +6Gl=3 Q" liVRK-68"\`QO Pv5j R6}WȰ"t20spӮݲҮ6myRkY1kO E6ꩍރ7Dηs{Xt\DLJ8io9\a^;T!q$X1#č˜~sS.C9L8[@CbgGAu!nIj?^\Q6=/q-1UM,."ofJ-hZ&Uu)g;W2z?o;2B)9&~UM7vo+AkCn 9%}\mlۅH"|DWh GE6L"ϙW q ƞ.6 Fe j˱a L$پȂO4/ͭ3U3WG>D.$#lo{P iϙqq|ex(]iIQ|&;g!Φ{W p ۃ\CnwS`6ʴHm"IJ".I^g1Ʊ)3vn!962쭢*\~U֕a3%ZitK;.\*Kab(s̕IM+; M+֥}磚sOZ:Ҏ%"S+MDBsln](ps}/E8a -Hت"OcN\WZ)Pƀ-8ʞ3h"vޤCQ<)6@,Dp3[>ʈ'8'%$5 p9B 5i1i LQŜЮDa訩sW.:QWȋSr&lfA\6fK7hG9Q*|T[Vq:DI-J6pep{®:JTRi`Gui5\am3*a;Ғ@* fOeZ-(}NiENfKQGQT9B~c.B|7Oi6L%q\NC*EV}r6ʂ7֡VSmKS@q_+QWڃ&W\T58?/l&*mD쓧eet rӦWRցZmmu"ҩ?ݠ۔5`pJ/nĬ^EӋsE]E|fg؊/ҩJX?ZNf#ZRpZ˼\dyIS)ߺU:Ɏ$FÀ&[ zD.B˲JK5g^Ml9e jC𝹻 CDUGN?ip8N3[U}7%2S(=/.zAL KD<6'е!"i`Ix?k\7d2FmZZvT!x~ymOcPp4GuLeRp-.IBBs4~KLAuƴ<()+ցYC1 ۗzjETk>8{xvlX I 3رz%cAdou [P6hY3qMr]IiiIpCN#Ԥ%wTg>"ߡE-:M]Lon^G%H fʽ8)[Hn& [>yIM;o|&kZkMe)4uR=3T?,n}T^qw*![s\GKDAulŮ$S[_q/E/Tb0"z:XNdE.lB.g;}(ҰMu}K L1ւĿj URih:g7[|ĜP.,O; JfeFBt9JHP3;ҕnWXGtQ֟A/z g-uKth^gI=h 8!Z9;.9i9 nnKrWϘS2z*Y 4kZ6!8D1Ґ+S:ԧȈǶHmkN_v!m6aN+8*ByZpst[ٳ[CDP&d2"e7P?m \0:;&qI'·!91Pyz~=‹n a䋆\1|"7dơr:n&xI\ v蝿Z@^[[=^iS5lI&CIGhv\/͍"~&b3tsGW2C\A0li\,y sxbMz < ,1"/|VNQn/jTvc/Tq=fZ۲ -7zH&I}pIhb|EPu]2Y>#]h?HX\f:ww9M*MXۢZ8c /9^5]EK7o% Yyhea ֍mBY*lCyЯpX <袩ER֌b ȓH0lQmA!C/a6B&=tmx&K˾\6BW!9 }$`\^Dyœ*R*|͋crҘ*eN$ˍOa|?7SFT^≊]ːr*kAUs~Bj?~ g"Gg`@UQcނRjcZ&?,RF"5pm<3bksiWy۱4)2RߵAC#J_`Hy uw_TBYԒ^;/?\ nOkE(MvU1ȨҎjKk!7za7 /%śm!=1iNM+.?[c=٘#t֕®QU{'&zXQ-S8́2!Qª'z\bj’Qwg(NUhVR Pܮb7(tZԩ/Gowqa̵Z"!Lw[˝UVλC[ [a95qm(Aa( iU0L{؜U+-^rjH/_ aXKoH*|"fٔAT\pн ̓#WLjum0cL'g͝]Sz_#9TL;[Zea)Od4 L˃ंl}<.EltχEMi6I _2zwj/U3t^_EC yҨ7GȊ Y.o. Q1RzP]Ƿid+ >hpU@{%(>(ovZ2ê$ ("~^ _ +-ćsuq|uQv5w1Kd!I4."qZrDIua(-*\yyvkD6" Hs4D2(o>^ebfʜ͜-mhO֓E"͋V{1zZ ,nrD[t.jVOmpT=)tDy ItW.o9av_Jn #v5W1;*ګ=w݇.v* ]q>D)eځ&CthIBb,|׵)(&6\\ruHVˢ{qȲm.9~-QMGP6O !qN yEٱM=1@xj' _#LjHi%EN=}jvPnNG|@EF?R&ޮ&aY\.U;\ޝǿ#˕$WKϟ1y/r6O)lݧt+\HgJm/cTd#s#&jRam%5Nݥ'!LD_/E"൛;8Z8Èl[q6MQu'Bo|h~1vdit(8BE𶉰 R˭pgF+TTv \7^Ux\NZJuʮ+'Z2T\Ui㧤Zu0{Z/Fq`L@gpu9ဈ>\-H qͧf &AyM7Uꉾ(x߉\Tz<4( z;贊bS N?"#x5dM9uN#<;rO}I9"]TQxkOו\(iӢ.TyE("mu*㘋Vȼ:m o dI8XDUXy|仦ݑ=BFܘi,'ULa27<&$/ƚaRPZ 'L"ї.2rc?5z)D若6Uߢ :ͺDCCH߯Ν{'jS yn,*SAWNБ["]\+>J j/U:׬!"-b:S-|> Kyل͜'>ü@rM=Z.)gomT^ Jq ޯ!̑:1%c?vܻM6RήC:ֿ5/6(&~wtNf>3ͅsQup)ZuO躷DPQϴD*1._W߃y$M*֏hoJ$MPʯݮܼwtQszf5aq]-w}\_TD p?v *ą$gD?.K*)$-/?RӏFkkl6y?Ś~KTl̲W([z%!r$VTUuEQZqW|Q]l"Ņ F]2\cY$93Er?\\qx~dWVOt9$v!h:nPdˍƤ/ ˎ"\旛N6CҨV[ݠu$]HH0~1ꪹlT=Fxdr]sȃLVAԶL/J6d>tv0)GSV}֏ K Q:-JQ 7L{*zY%V,T=T]aHĐM5&ZN#N>oY#;*,e@"lhRq\7|x&DʨXr'HvHىmG1P<ʿEOr@Xb6ȑ W4mB< E):ADTP!r,×C/\g 3N|i:턧xwn KD )ވ7Fpq$ :Mll Epͦ I qRD7ҽ[M{df*"f+Z˕)꩚yò.Ǘ2PD-,]rD]~M"=7Os$41xGaGN{Wy\h+9(Uw7&^Uy,qN3 4n\eAB,n7/w|;n,ܓ"SӮ(6JV{ .)Duy~odN=py\:?d@ȝrN6~T~a"$kE-O)i;K),EFKyT^]ֽCq7Ei~@RO)/E^l+Fm¬,5GZݲI?,-FWIl^V{Za7 fD1JB=\OMMeZZYU![mΕ\**ZmQtHiAMM7r^8rE7?6H0*[g9.16-s1蝫FB 8%K|HzU5lA? EC;L7H]d28? H,e"Cl6qyzUgRd8ۋmF۫pQW֊^s[Ol9MC .AInD\ *\4ԙVUh.*NvFjK&yڢ*K$IA$-O7{vZs!ۼ < T0=R{x7sY(Vz.PHF3_47ӥp6M*nLBvJ+J霮wP"/1vmDr콪yy[z%tHj "wM)TXf;Oc๎ch>"p6o"F WDgaHIH)$Mz{.mu-3r[!nG/ͫ 6O|P*iLs;3,ɹ #JWuz49a="E MJK9^b& ֩Au"tE|=/AnyW\PJhElჂ<_/z?s^](m^W!/(3BYGxe-^CKuͮNMTLh n6pje˝tWJwб[ta ҙzk͚eTyh :UZee˳nMk:B\KVQQWC 9m[:r;iymWj&C:T֘҅u"ddp/J}hx; 2!)y^) /Uص̺-T +pT_] {asaz3hmKIwVt?2t\{S8}#,$mʺ&C/i/ɜROR.W辔M9N)-/"i+qMfKSARZ-]p~nVño@?/^EJ l028&3KON.'" (vFU}wSj&$t÷,OPU]A*LˆoE3@tʦv{PA5it]M򊧟ʦeq3k'czf9[u '-W}Ab8_ʜ?bj4"4dE{ΙEtVDžS'ТY/d; 6.7 ƔW'J-L&:ZhU'jGgT"(H?E\.N02QsRԫ]]%$u)(h+މ@,`i%PDEp CBx -֙~#\~'53j2H*kY]*3X(^$hv\#%i$_uUMs\.lAFht%,7dv9i S-Ҋ IF5$$a@ ?~%Ė8PdCd?h\n.?FZe\IȄ9fˎVh3+aЬL!%`\tJ.4s^1OOmՎꍯڂpH<1aڴIL#nڕ=LL'Gô HB/TMj>n_h[}YilwM_h04"ϑw!hE^HRU技cnZujPΔ , t˔D_o\J6l䲚u mvU"J])?Zsq^'$ϷFD!G?=W:44%$KS! YۧJ۾xfCcD_M3B],Aɍ:T"(~lP)qpT\E\R ?j;pHjkٳ$MF M>Ew)%BUM)di>)jOm傹ҙ±^#8ed?ʷ/8+|K~IfRLml &-F[6g[7(L&o?ٿD U]+R dϴgn!:5UL$lGUU3V?hI+'k!) eZQ1k&ȁkGy\jHԂ"*M6P9rHs!)mj6S;T 6}ݽ֠o5Dl(oq7 Ve5@1YR7/a^o m5mfǁwBtLGPkli(-I4[VUTХ䝪8^T3Ԣݱlۺ"ej:\s5mz:8橎o$A\4;:&fV4wP(AhϭQxf-mpI]mUE%R‘1C69%'9*!>GM[K̍1K\QBm0SEh_iN} 5ð):Mv%UTxiS$o<?4PhvET6SKrQ𢟖T_Mgux]rfFa ndlBkjB\[K>bL&6+H*m6(5R:_~UF#: J.-DZE:FD[.LɎp@bd0(};-\‰1eyM}WҒ 8Т(.妭YV΢E2 cӯzT&mh rHKl3<=:%qiE@_Jl\zJb2륩iLsg@r#Hj NILҊ@U轩pw>jq4C2of L/ PP K{%cH,Ɗ;rG ]Z l ߢ\[$"s S8UK\o-Ԉ\4S)OLֲ A!SpnF-jJ|)a.E.KH9[sPըQ%ꤩ4|U$UZSLmS\lElRTe 8~ķmDd  83G>yZ#z6daZ(nKa!ZG4ӯO8s$'^8Oҁ7ma1xsWw~++nizQHGR.&4yW7f,g/zޯY%8l0z|㸨 <\5Em7y0P<8NPθo5 9֜g^#ۚw;Kd9\W1;cڡJ1Yβa-^]C>ԆyqRmP-p DOawRlYäxVM\~"숣ڂwr]e+ԺAο;n.&bp}q*WŸKCYEI6ц̈́\yۯJ"}'6CSz&vZ9:#-2HjP/ѥh?By;Ahw%$ŎْnDMڈ~+6%jGYT|ڝ@Yx\ e\jGl xy.w4 h~H3m}m 'wSҮW!ƴ$fڈe|oczOf\<[qܼ9Z$E"vCV@C`#6܉K\!ҽdI,̷? +I /%EޫxZrCnl~"튥x].Ѧ:j5dҲ6FK .f\f<բe:^|79Co.DUN䨽UfG#!Cخ}'4eH =D;hNXդ%E~$^ʽ&p|kDkK͍%EPV.Pm x&D^yXhc)&"@rk?օ750TTMOjҞpu.9"kVYd JG I-}}+?X Hy<#ע"L>ILpHt7}12 _\jHsBx9(;/lu,fC>8]qyHw9E֬ػ>$mSєW6)g ݯdɺ:wW_z) 7%dBou5oKL\5a\'t?$Z x.&C`13QuWj[ŔNbGI{0קIN>8D~fo_mu[+AMmb+|WiONz pB"I=nӭ? "a=Xo[;p6oezwBluXm].d*;wCNQD1\*jo@=6u<#"e(輗B5U.1ی=| wA۸^5) >~Pb eoRMbA++_׺̋ FN* e⯗ ].kJMj>*'lg4|GT=3@\ \ˡhy0_I DLoyfX5e q=)Rdqf55=vn@Qo˯A@sS9Eڽ8V6M 6{oι}( pH.#X&pՊ|8vVl# PRZ ʰK! ϮS@eaVepj%O^Fz;QŁ׭y= OJS" 6cLy^t R*֨9."*j QV--3tdTZڥ\^poZ#23TU薘%rVb&{1 \W<)rvK* Nɝ{&Fz@22y %M_Pqe%6ʒ!qGt ^ju$'>F֭RwUGٌ \貚iGˍU^% fNpN8K\"Ҁɳ\I\r)3nTBˊୖdG.m&\DKSf)e hдFQ=}hWnu#?s \{-iE_@OV(QAz6*=s4xO7u\OLPd!3#4+%Wo|T6ֳ7yac-9}('.#ԗ[:ڏ +u="yź]5{n76hÓ:ѣimM8S5y'b<ȣ E駵wkiMK+ zM-(Hztڦ,Ϝ\~&yo|ZYx#c/̨N<\\zjᒄæϖCBh(V߳ۜ\!ԋY)aqWUÆ""n%C ޚKƇrh%8A3!(U}뇞AdV m$.T7<i#WQ:/"Bv+3Ni.g,@vę_qI"*i/-)p*jbE=("7.\#[>@5TqkSqy(ȹ{ Y;z$*.s-м#<=X&] -+:P)wQգ (diNDpy#iҘXtID ݝZ@IwEd_jCz*?ZaqC ;``>T6ւn\+)eOb'&IH 8TÈ8Eؑ 9Zv"%!rηG[ J%U sAa*B*a9&@&*6r&|F8"9Qu$ѾzRi]ݹj .?S]zPnh]W$gr0kkf ۀ>%NJ\wB}3y[v2mN!j]vP%F $ $/}LLE#lu+<~UN"x$,qmHJ(CIQ'%ޚ`aج,up'I_]NqdQ^ pWKK<w3T k=^r@ s#( ޵Z,D7 !ѧWi[oYq[߶v/Vk^^X66x4*<%_OjQbA4r*"wԈ\~|uBAK'B;6J,qLi"qWU(*MٸeZHqxv?{}2EqWqy]Hq ]t*!oJ˷[l省[qҭR苲)9rhȻoa-o //ʇ"GqՎ %?_[Wt;o72EQꙭNbY" >}t@*o51,1ڵBE: Y"g=j`7wE+|˶W]Ct)S8֗bc=%lCdU1*J{q̊PzG.@jUa|S, z3m[x{SZԦ;SPG+#pvrSI-g2=_s MEl&{=4RA"G?}kŻ,IӍu5gA:q8pCnhdUL}iX`IcHr␣_BTAޤBލn MߧL)úF(ۍ%8gq1BDTeJ*o'i69]GcBQHtG-9OdP8XFHS4SڍjG>h.r"^vu+.?J}7]Vt.ZWNI};?÷nۣwNsuiRϽ  9.Whj;*g3m9MgB҂q+"# 9T«k>nڔi͟~X$0nwUhq[b4]I iS~TJ"ER $zj\{xqzM][4qa]rQi^L.\Qxgqi9kI{cu V.`5Dx~Zuڴ$#6,:jq^ UU gAƸ(g͔O1}ЛHj 9qU,!10='cE#! [娎5Wة5~SmnA$vl|Jz/]=3z(1$aS8e7 xΆZ4/7bF =Ff2Ѷ Ӛcs\tb2ar)#Ǿ2uʘ֝Q=-U|u YDrάB0Y't9 Eg9Is! beC: h\m:XM&JI6TE>)xa!U֞䛮=q-**4yŵGp[O:SJR3*2ѴQUt$ycaEWz'N=JCkȹH{%!"} L+)e2PtA_ꪔ <1D ^z՚rNcI|-z1UWF;8Qgӯ%d(.Gib *wjֹW7؂ۍE@ ^USf]jsh]2"fz"vO:(ǐqUҴ )("{a3oI#O3ut7.~W\q< J8wF\aǝT*~]YIm$KWE7oS_E,;єQnȌ`GKqG҈3$kUR+:P+ QP|\$ t螝Wx+ *Doڇ`r_ jb2w T,};QHr2@4:cU͘h]qW :WʨD)8$2߶j֣ȸSٴ*"ߵ/1@QTt^-rao'H4\&=WEn8MZ ])Wq*їY&ȇ Rj.PF gζS H&%HG&F$!C 0m%pI\pW *aS,X LbKZFl2]3Idň9} ЗQq_ Zmhp,\Qp1pf'ܵ]̫ղtVp|8× 0w%DE$߮mw tXzK'k5v)í*aGo֠}qU@nh/=wG𽛎ft,ћG ^qԥ;Lv6鹻skkɾhIF)[櫄0G9-y>f]\}fP4շ悽"$,6rb5$jp?لgIC)#n5nh 1-*jU󤬐n*6W@fh qʟUނDg;* u^O*gJz3 ~R>+Rk 2Z>(ނIei+1V9X*Z"SC&RBҘ]I&#+kޫl[IǤ+I131& y/2)A:7 @ KuZE)WÚ(A"9F0@M沒 X鎅Ojk++wI3iD=;MJuǹc ?*{owix)**- /.qChPejR%뚎3ILE;k]4f6:|٦)[qcVz^W/^1̘B$}Am,ⵦ1nyWѧ>uVzassets/plugins/colorbox/content/marylou.jpg000064400000153525152510437610015241 0ustar00JFIFddDucky<Adobed(Optimized by JPEGmini-www.jpegmini.comC     !%#!! %+2,&)1( 0>137=???"FJE@I"@A?C =#=????????????????????????????????????????????????? "K !1A"Qaq2#BR$3brC4Sc%DTs!1AQ ?kma!2@HwHb'[o?Xf+@C 8+]"W!8"  Ex@?Q_Hy}!G/X@ |`< 8 =b `BaC"`6>1Bm(tSaCh;h 2 ChׄQ_[/(^@<b: 6HKoq`D<`>>kK{\{qk}bx u.:)Pu?(a{ :Vx}7P0a=JExF` u>x  !1E&B{w/HA:oS"Wk b}``b0/ "X^PĈC +}  !&]#WOGohhh8ndo @FyEq{uŘt0u2:H`@Chihu!+dAzЈx;@ u@ Иn^ow:k7]>L6C (@H_HBCm!x; L/@ 6(@w ṄH^'=V1G-0QFt#! iE~pxEHExx@=#Zuo1Dv@b D:@t?H{ Ltp1P@mdE}cxoh:y />Au ؋ B^H^HĀ'A;׼@M4V餍^ Xb i};ޑC Xk@h\?_YPΛyP>;ih􁵀=!nqq^W ~yBM]a w⾱zB(S{~B!~_H0( F Wx[d:k^@w/(^P~p~Q0+Sf~zzXyD 1@6 (^Pma Т m{u+G{Bkbxg+EzA{@m?"&X;m[FM"c&} tk!1^LЛC7J+F@{b"z^ԓvH^á6]wc0h5kaCпAN(76 {cEr5zEmmucm( 6F6X y{{\&V>eAB=aoPސ'm-{cYN@D! ^^x_! aE}!Ÿ/mHE[F7Z"HE 0]!Hn-htC~(zx^:^+k;å0`x1hz@<x/ dk//hЁX|o  |a_ &ͬDpD {1hn}cH:zEn7o <& x80^-?x$hŀDwܑx ;hu1$B@n w+j5":x@iS "+sCK( C:o D.zx]5}#Wֈ Ovr7_|_C wͮ#h50'@Sbs^"n"x 6l-􈷌}oi H롑a=Ĉ3ob">suHRa{"oH9+ D+7qqJI$w5QA%XAI']vr3#ia#'朒j(lzHIq@V􊮾ZqҌUOQ&’7_xoJ}eފ}w:Z="raU?^U$VSI̞\ |ɨ}6;SR??S^GEx^sõ,M XpH/nS9bT+cl;U |v4[~K]G[ѩo{e KpJ(Q9}6v H=?)@&Qw(^fv Eÿdiom{@\(65Oc›Thk Xs,)ڷ a)O|@Ǭ/5au_|JEH0 '&"ll5b`Fne@9]\L_1+Hv }7 fGV62$D|!}<} )P!-zW=!_>x#ۯ:!N"_-OC$wkȓ \(h:Z hfްR}4YE{d o w'X+?O@>u#C{x+Ś`J"]Lm ; 0zF\ @r "lnI߯Yu@@ ZItG6>aDq}|4/h67"&D}".-H HP> _B@croü _q7ca뭠x \l33c#ie_à]QYcCnʸWn=b C ijkLξrK\̾fnT9¸.xEJl=w5D@_{jTGnNzi+u8XjH؃rtmuޛlIcJ]ϡI*ePGv 3ڑO T9`iH&oZeAנT}Y(\^?sN'ͨ*15\a`Y4\'{Cv, 9 ɓS뱌`&sVaI(s&L9!VRIж_fx f]b"p[f&e6UE\A޼ o,p _ K=f&-yOsO͎ҍ)k6PT{LJRYsid'Ie\/&B?4W#do@U$f62 \Scg:ljĩQ1(ހUm,jՔ {c2t0%r ԉo9sB*M+%W%류 CPр{ ceW#IkӣXP޲b  W^3_U5~jui24ioMt&Ghi \T3ȃ]4+.zU6Zv1QTz:x'CmFoUJ@{}ݢ)+wA<%:b>߸V>@qY[Sig?hK"/ q]*empbdZMxj9&?)4bz)PʣIjX}=dhq1'NYRܰo"'5LBoY)BN6^2؜IGfӧIo"m. Jb,raUDrl^(Y{K voA.%R=D 6\@@L}>qE yU}aW\FZg,UVZupR!2%V{uKRlZޣ[loA^a5>sZTV`31Bon(М>iwW(SBB%LUϛ+fyiR魇-F?hJ3;a[h8G9bo|iIC "֒BT@e?h8ddT׫sw|ޥukzt{{gU|.!s~0$Fj<^K ө 0Q,;׹G_;Š]!eNa0|%^Vl qi"_6fmc^`izIB?U^Y_Rh8QU"ޒ{hwO•ytfJkRaN7;S ,`l֡LjR;7iUFjgA2-'q Xg@jұ_@g]ڠZ4P;xԙIUk裴)ո*ms2qL;֕$;߬JnS t?0u+#F6[wqUrXLM?,9֝b)To"7|SSa0)cVîUTrIْ1 \溟]9\h=\=HXRˆ5u+,?;Σ*B~`O:ZnJҦK*;gtPG[jTa/6X.|(WW. 556;JʴV;An]Ch DDo8>N!9e)K-GyGS_i&Y\>p-fG Hk`p2`%uax;7X5)申bfi-q=>cy[pj.J>Dqe4xf-ϬsoOq+]P}2ި,31()NV+_M֝i[9|G:]#8wU FF5+U[HiZ ĂvQmFٛq-[8}Ȏ;9mLqMq|a|UDSY?89存VӔn7ċdt!_㭜b^a0GeUfuDkQn?yXN9{E;8E_T~~*Aae`SGv+I]];]s/?-c+-GkOgFB i\[ 1 |*&U.nM)Ym4"c-x MQ򏸒M+* ҧV(_m@ZjT띠s-QERgƣ:yԊ띤ҚUjmx#b3urDȣ:5EGoP5h(1v:X^bdlR H5o;6mHJN4wr.<$w1uYF-foՇtr]!_8h0ߵ=%Ujjd0UrG~٩t.rp5Ĩɗ?_ Oڢ>ZW tR :@D(@s45MSZ⫤~%w1HFp\VzuxO5'g0%>#Eړ9ښj1U/բߔnT=ij mnv5e@iȎajӋQecOGPF_+Aje+exnɾ$GѯnZ41ݷҶ!Wna1pp Q(1P_bgAZ b }Lx|GľMZgE8.t]'M%Fg )gpK,ޢ:=?RRiM.ٵpdMS37cI9TqU.6Lזk;Lhw[1dV唸f, =gWG? a}@xSs1B)ciqxF?I#*Q'/L.1k=Aj?ɭS(m8u:n$ZoZoa}<[QZTP_=& V4ú൏jUbC(uQsLUz`pWPKi'kPx0n_6T{CpYe&ڣ'ȉr< "q+s8<k{[ӠZ PNE?I^8~:A5zt홪O̳ kJɦ(S=pi)#˥ڏ U~p&0`ӫ[˜ #5nA:j-FRj)r6j«P%C+@ eSJ)Ŭ}h'#lY\fhSQT d[:8ej) &UgWlokVشj"3knF'@%pԻ [F"DPsА4#AS液ia T$7Z~?np،3S԰pi\]tax׭SpF iPV4Z&E GӣZlSzF"YL214,v..: [{o(md"[/tATbr.{[VԷ-S"i5^ 8sWq55Z bsrMF]e"f?+˸'j8f^3K\[0"gG8"kP*Wm~$PR?k'RV"R5ޭg3pjvjX46F ju,-R:si ¹Z iӬ0?b*|CTZG+rJ~ /b+էKRO9EZQV֩4r(LG1rak QS±?rJðH5>mXm$9C5_\Pw. BV(թ-m-°N*iJ=8÷cb s5чELZ]b*TGPbu{ i0XWocȦ N;N6+x(6T{/I"֧R)_x4gJM)dP̞[~S8]:Mjonı+ MӉPij.Uð-$lUL?Y^/`تU8RPd\ު! KbiEui4{=i"#r&U\7Rޝy1,]x2iT,HM5;'jS>YUp|E`c\ T 55^eJAEu#jR/NMOİe˭ax\F`Ã4@ӡ^a6avsim/NнJP]Υ2WMK3c{9L bFZ/4ShizY`U!LfVOd~Kxa1уҥ=bqS<@\d>-ZC|s8k,}%|cD3TFrwjPu5JyՃ2߻;? cѪĥZh{E3*)|}ঢb:ųQ^JiZg{N;jJX׾U\Һg=֫LP9 DˎE ːӨNR26[jg^ŠѧAp˗˜צV>R3?嘵;/j◜ǻ>i ݔ)vjň6ׯY?dpbō{t.O8f qz&)LAMZ{5([xQ5+_d *EGztt;2ZMF~6gPQ8՗1<˔_(^[U>z8& Ta ]K`^}v>.ee;GrN1M*uҦ7Hv{ Y/A vU{O5Hgk+HlYIl'<3~| 3y1mZnA u5;[*KbnަvDejk:Nn 8v8-3K˾ U㲢39(ܞ+kĵ*-|( yX8![Umh2c7v/Ÿ&3k*F1&\O !aUCaa@e |%ia8wz(޶3]Z\`AHc:h=Mʛ^sM ;.>MGH{2biw{X*URm? [ a)?*TUJYӳIV:īz&MB'" {E`5tƘLBT o:iXQpt*@s,xkav> ZJI1!Y^jY(+pzSՇyF# ^cS@X_N~ ~ud>"ըx]4WMo}"j0FzuRDKl S9 ]jE&;O8mY;b[&Ɠ°p =,5 oc9O\i3鴸p[k`MlbVF'yWOB].vG©UI/Qv1~fPWSpj( apu/j/ylhsE qv4Ը~bj M訳u MFQh%ERF<Hĭ|zl6aӗމ*mu]ø7PSg:zNN%ԠM)l&P*8J(]۶Ypj? 1 Wa?fx|cW U*2W%KwRt|´f(w2O۔T8]JXQqXza0 IZ([eոEp3:K 7^Z,Ǯce6~#W31`}e@l|U0\K0<"2nm59';A҃0%\jy~y8qǩ|oo+*sXTUp'ƊٟEzH?atch-- ĝJ^%kb{(<^!rmFJLegId˔y M~+*էNNlx†[Toc64{/» 0cFyvGOng7sf+U |f,ʩMWj,ax=:5*+j^]}% EߦOO+*|bD♁_WͰ8ɦꮽp`1^^N[5߾)VW~RY/O Z9K[ǘniC~sJU^imAf**ߘ69 RIʶlz5 :.`c5pƽCߜ TQS`!_LJq*֨u#Ŏ\]]~Fҿ QQkJT"zC̏0{UQYΚXkFX$D Jf`b;."'Lm,N!tֱR۲'A]5- G.#_^sԯgx: Q͛#$~~:`mNg$zι 1˽j>WNR}_qeZ8:ҾYsfT8l\ v#E.l ZiDnQU]~Oq0iվ!J/Hj[4/Z9"TnES[R-:T-2}5_"ڢ ٯx7b,k)ko GbmS?'Ip./' Ko KB9A^ K o 18Cg_ OAI`-굪eo OӻfƷ,l1v~Pi-c DO L&-VRĽW鰴eR V{un&rLk-ꨴTj6*T /ׯ$q-3"\7V &m}&-WL.M~Ax2m; x6͈)>2?qSN$^a4ĠB/\i.H.P3z#mg95LN/'` %[b&eN*^tqSޮiSv݈9%*)ե{n4 XUcM{7\}S.g+Y_]ndm#/\6-Քb)QITU[~(=EFJթ-ViW[̫EY*|cV Y]^+{_}>fanR)r\y?N,]@|P]4Q{+-WRXgG<#uWb)vR iO= Ի+T&5z4<@]Ssߍc@Xk̑V=jacо u?^}'3zmƱr̩0B!b2a(+%LBPlu%`0n Ze w^EV^[sgr Fx XO៵GCUmɺFo]'[R=+hi/_ϗbbXWW~ C?Sm<1TTRPݪSĎfZB=Nܘ )^3NU5U,.,=ũ$׭MseԂ='5[ѣ"!X1tV%(Ztt' VMkAP~'+{'l1hqFj97͝.NTmG;(~~;Qjnˌ[/}hckߋh>[ ;= La6O#оN=nwz}"fkMqwӰu01pqzZ"kEor`f!Apgq5G#qq~X#nL}e8Վ1ymjAGu5[Ar[T$?U>ɘ SUWO[QKvVs ݡUGp a4I7hqgV9V1~f6T/ ZQNM~VY=${IY4L B/uJ毧Y※b!t S_xsRBi8b7VFC,@*#CK?HQakz$HG*rm@9ZdK&0өbNMq%H(j F>4inL nÀ>f>\ 'c;V;aٶj ߋmY[u0jV:uBGP3ޱ+{BՈEΰ+C }FzSkUM%qEX Pk*t‘vf!v,Qsmu{봘Â+X51$ xɶOS^rFh>dzfZEyԘ8 }\W ٹ ' _#Ӿzjq4KUce'|=.>\NNy375 0s?)s~TM*X6q6޳Oml5xjOؒ`5AMjdѦ SU6y!Kd>NUTz|o;i4,R-0;"f0^_Oáӧ)Eb2z̥$"Sʷ|gO/5uAQ2u]2& EDWlM v3aE22R:m<{A]Qjͬ=$VVBwVy :ؚtm8)9iqݡTk֗/qErڂ~ƈ[fB=,@Ju O /t_ƂTs+fCySsL*ӷ5CyŢHS&YzQ87nu:L-^edH[6cR_-sCAIpf}<]\;6B)ꋼn**9.OǸ>#sjp4xu|ݵL'5E*OURpBG c\*Q~u~L?*a1Yg<%As!t>~ip+Jrg7^mbu֧S*e.N:;5Xj[lŭ (( :n<@#4Ti :3 eyԖ`ioD܂u]ϿH;EN-t^{f1쿬!NoNj.2 \fI5N{x.>JfeΎc/rIIwcZ"ְ+}Ve xrOHu} .=m6> [ApQ[eʿrx5bj oLu7N#ՅUt\evfb<`{SŠSiyI<1I_ \7Oèq .9X*4O B>cTÎt!{8P%$i -qbD(̱C~V!u/}iNVe >bFD=z1CDu fYF7Mȗ:8!nA Tmfb~c _ [Der?Y[B1 ݰv.Q3 rBH1sm"2e뽽b KP#b/uV629./V9sZ41fX\0[HEX̞5# eP fHq= fPf-޳"ZѲ@ 4DFSe," m-}z.k}M d\]{ZLn=2@XƓwIiH@8 D 'd `_ qIH|^2l#= cma/t?&FS"t/׻sKj42kA:i^}6 AӤ =1gGJ>s\Wo*>u%Ea? 4xcVvO2l]AκBɵHCs'<;{7զs&3sn=^kYqoXNNW]&h}JGMy(1 [/}Hd L:]:@(eSaj1 *>`lsIʣS+'2'ݯiYTIqF}9XcS!F `Wjv| x3Z-c䝼c|ì \g4ewYzqvMX:#}P]m:H6u9 1T _[4tSE)l(s%deL8{(009|Ëэл+H39*:E@EEfM |#PG]IuΤV$*U4ދnӊVR㵍ď;Λ dy{WX?u+Pc,?{0YASN|Mt6'q cWLەq^h=Gc :I-|@p cl3avEeul;n/ zt8v(ߤYX^q|3pdKi{{!{Ob}Y0F^ V䑤\|"o kzu546G%H{`=:iH&"0$iSgPNhzˎf9SneN nON3;ysG1E M3QU_y ÓWDJvyy'f@~whdMy9A't֧J;llTaӧA=fԭ:5eԋ,~sdE*#0j{49n4# b/2[C 'q{O!  w#I_ KD@ /"J\s MzxAl$z6t?ZBBX}wXLC1 `I*[,mkڃCJ:\şDm2ez+m)פ"yx|KA[pcxnki{Ki6-mh)oc" w|7C kkdW{Xc%t1vMQ> r(9}4^Pb, `LԸ k.{H}0G9ʑe_i9lO'kc!a $oq ݄IPs/`jۣA v$؃S5c=Kpo&\V>#3>mu*3&tS=bE. }6*MȨF\_OXu$@4?Zغ'O^v`s sAN\Yrp.!nj-u ~_76?SN'CQOWʿ|uiHt;~/ n-kS]Lbp.Sҗ/QF.[yxL*7{}&hm}fuRVܑ ȤeOXTb>*-.P/)7kL^l,ǩӢ)M}a~lo}=deRmo ,F4A _ml}_S62kZ022LyԅeYL|ǻ}lW嬝 /oEE6e]Jˋkf;YfaM@KbV.nw`0~W']G'\q6\eO9,-2O'v]'heb(_MX_iMb6Rf㳜mOm||an&YmX[p/Op>3Zɨ؇k%.zlD;lA|؞*8G7:_,*R/լζ=|dS4n=҅06 }@o M$XRAZF MC)0}`L${5ƌ/ъH67k5Yz[7awAAġeX7 rD pNd_׬)%`ܟ>akeW{D Zԑbd@ E!/%k[[e(#xVb0ָb:s7vMUXuc.PZPiZ BR§-`stGrVנ+%pT]StYZ%ҝ5M3%I7ZUz}dy4T ~c&Cjvaj*3)* o1%A6EkeXx*e?.. g)NSޚ57r 8e,YiUwrEuMZgODpn@ޱ ͯpoNPڞ@Щ[[PRZ5-ށQYZ ?9KsЩZ39R#ZVFNn[1+{`P¥CVm%NGP]t@QʫDe^!anc԰ʕ uf76[mCåW}J:`jT:S . *n:EM `R)}q5QWT6QsrsGi*B]3kj@{]8 ;îO#X< 3ޅlENV.x%,Y T]ЦT/2,ubIp&j^K4r5Sbyms[x |ԾXߴ w<m VEwAE{5Y6h m}$\kk47Qy1K]ON%Th &tcCT7mg5R\o#XE3.u>`5>)~+K_.Rޒuqu,? T+R\l״zl˿nC2 T7%5k@tn~RiT2ǧHэI!q{QJWt2*>e)ߏpP{SzwemseaW37`R\H>a}#CTjg7bmixL ٞҦ6ݝ¸O*iϨJ'N*ʪϒ赪cd%^WVN{[MFcŒC7mC5K טѶ1PӸ@`PVE]Mrmud> ܢz6_PI*MDJtn.HP57oWS*sk3 @+F0tB޲B+ei~F[AAZQ?J3G4ǫi@BvӃqUE|Rgr򯇼S`SeP9B/;1sY~ Uï |5g-^cKeQL*yf"3rj3WZ&%8K.R+s0w [P[ZMl7Q YUj )6Vz|(4xí=FqNZ(*|װx(hVi=%zUl=(ۯ]ekTA˹(̦2ut%Uj%6*ZT!Ie4Я)['Pv}@Ie6s{i, ^ujmm 5zCDZGnlj %-kiEY}1kyl1Ԥ3 #nTd4? lWăt2F)4ӵ]U@S.2W XGc{9%LOE@dR`mD&*U>J')UNHWQm@nʺeU(%5h#q鼒W3)}HYE3.b o{e[ ^NU`|@̄qd`:Ggc+ZGf}c͸a^޳.]ӻ,T ymjD9T*rH̭2V&9R¸ 1ޘ+VEcǮ4Xqf֪@ROvIVPRb6Q7?jpd}oS=yYxį  jFV'Tcnk^=brqc%V&y`=LJZ\J)I>sþ2牾 3 ~חCUo=}5ajF5}ҝlJ0mȯ0صHUī#.W˨63A8c.u UFfܒmeED[Ky$fac27Հ$@ X $9.>O&Btt$B#] jr\b9$Ӭ=nN%ϱs/po@&q|h!7a9Nב:o}S1xGn1V% 2J]]SܙؒMȞ8~9NktU)7oeF>{gYjSݚ\2Q)j1.]?~hEOJȘlOYM.jSf@{ Wp-K_Lp@gQp?C~]>.dTËEK8eQAP?1X~])eSaX7vDR˖h/jǝE>TۺYU$[@h#A$MArm2@e,)$fAa^{(-Uf}z 3.rG 6 {8-k"'rym`?ٔ[פ \zy*T 6I1O8` -[hf[+X:f>:qYk꣤@6^T`-ݠ qR}{ͤsׯIARdp]Us f(?0:2.U6:43XM[fny5Wa[:]L%VJ8:0S]df̵{Is*,?6KBOjU)sv 4UuIE\Hm~m jݖt(񴉠¡l|w օZnϙ`0Nn[K5oz_Kb.IN]LV\Ih=%KRe'˦ 0=㾞05mf4ku*TTPUk%RהiGf*QwQ(GWv:$j綶 ~V-59;Ab|k1 @zq-M~Qi*\ ˚ /1X:j2|'ϡL~1\e^dl:[ϚS2):A OAנ#h)9p R Kzmř  Qq q5*5SV۷_v<;TqOիYs:wOY~=~IBC2_U .cy SMNRHͩ`YZV59Ʋ p@)U2cUÌ}"mHu^,.DaS"u;J*q~;ZJ,o.1LSr߹%KUUO|]bԐWS,Ҫ,wT~([jVI8cr'*yd4oث(ԴlC\of[Xk1 X NXpYJw%= Wa)nkTZ9Fme'&R ZxMw Eyi͢ۂW0bʵPL*< F I^Xi~-r%s1| pT*up<%wV[tD -NU5ZB$?in1FQYї99FGMJ;|;aCSԧu`v׉`1T1_Db?9$Vd=j*?P9Y& zZ7ZtUxn bS}oQJT|a|"F:ǯI᳅Jg^*K%,MUw;SGs.[T]qHX:%RAWĜ R j#]@*QL܉Sa7,}Y )"o*o qOLbAbBxԜ$U/$slL2ͼr-|i/TlUuS9S XW,QpE&IYzڳ1+S\( 3MSTTTԤ|dUL=*ˢ叠,oJb#O omvi% 32!*r06jEv%76qPF=B&$Sv @:w |1(RO[MgŐ A>AsE(2Kki`A%y-.RođrfqҸ1R0 gi*&i/xs5MPCՔ-7zlՈ"i~خUkxxOxap@*_SiSjILd@jNӧXzM2qGzmq!+ڝ3@Y'`zq:ƭ$)QSPqKOW.Sl_QF;lrҭMVmo^/!Zҍ׼~cMg:8!*9=J4yw ŃZԠ}Fˡ}4qz]#H'BRn@wb M׺NqiT4t@Fa鴅N#RR=k|p><5j W[emms\<8+R*dm~aЏ"-5x?2f`'0@TOqtR5[7B+Wz L9#i<*FL'ufv\aQ~M`5^ df^`[ЧeqKPj]m|aJj ~٬'kV18:NVڍsk 8;j.?4[Q=:USlr>i]qlV"Jp2?53}tZOAU.Oat5\&2w/oSJ 51 Bpob-,fԨ="ĨTX\ NxPLM6Z씉ѩ妢CL-*djwk#\d $+VKyAj[[ eJT<t~p<.dy\S. j@N Ϲ2U@P\ݿ0:ٍ A+Y Db6]RךRI.\i*r|P +lqƌytgX*]᜞,FZC?iѡ@(Uc8#aSl6֯MYy9Ѕk+3>#YAm&5j+UJfaٵAzxMZU۞~WbKG؊]rϷI鈧JjjzXQs>J_|F*}RZk2n.u`k.bIvpUR7he A)uSdB¸!0fEB/saQَS}0G=e[cMf6Cj،E&7cZx߱gxn5qL}zF=\50oyVgï&[n*"ƈvSޢ̍=L]iփԢپ`4bèg$hXdbtKOMMANJ) m{ZU < әS@XX5.4[oyөL(N- Uk} m݂f?x*bR!j9 ֽAqdMt%I ˮom#OsH\@4or>_:(QoT gvmx4u+ۺ -TfcӄEZrG^,{ `jYH6'߬pzFcRp zC)g<*yj/WJ꭮WSQ2=Ҫ}sA*Z 1Ú#[jfה]ZӤ )W=>B ڦτ3WNvT_i(5ku_7M©k7*J5iZ4TofBQfi,3TNnasU%F„n􅃾AiPٙjw^PJQN[^20RRkA6\#z-F=nGBT;b4K;"^.2uV+*٫\>=L)6*&s̱[fJԤPR/iG M:Qfe`K}%1"aPgOك^]'+r(Slf'eo&+.DjՖ՛SP <[_!iѷā g;(!9DJdV(M>_^wFЌT+}D"AMKʩSrROlQZ>35_[³n}n@SiKq0`Fj9>S06 Fo"ԣMٛ?׌S4#LFSfo]Q쭞^pBlg_l2[)j?sp$Ϡ?c5Kc8 I-?>B, ޱju21x!hnPYżSXJLXgh͸:pڜ/8~# }jʣiOzNVU*YkoJʾb9|!hQ[M+S8[r{,})W7`gp|[DWVN3cO6`^}9U*4ƶLTMV enS HSWIđ^} ti+(f:oLj :kI-=zA*2t5͉i@ Hƾ`J,uwF*]bo{#/%達iu=|3"^XTcTL6Z1'/@ڜP(>8@ԌMɊwq0U_tA_\^j d4I.I5)Ztx4?yS$+AzDknnU MO{%g#bޢRv-ǬkTtnR'-?>^?Y`ko$J_x0(Mw*5+q]EPBinIgvB/B.Vm[[Q_05)5j?If >Y67S[ĵ@Dt *5t[r[*TюV^L)3f=:@\)ZM3vČez~{OW|cL|j0J<ϰ?:jq>, /ݰ}<z8tp(&ETLnW7"QL궃̮P˹aU8rK+y PZ-Dcs?[p6)E7Ч( }l-ywb9G3 藁.mXzȷ[>~sVk6k+I|GsbQ? c)A^s{5(ЬMXg6@.)#e׮ q,+[M^bz"@61Xw﮹*f^˸ɿb\P+]KMab3e۠ :Do: l[[;U`}Bနn]5\iCV`-&UJf1kT?wF8-:;BQ@,Qw!xmLS}+}{)@[ab<`M1d\ bU].;ǝ #5P+M_1QMU_mQBm :lr/J˔1 .:)"B ܭW[eQTSm-e]4Vcˢ$ *f:o:@赐`Um6HI-U{F3sqcYl;[DTTuLECP&'YYqyEi,4UL{I+]Hk7kh?s[u1]?)2͓d6nwf';,kBBj`Xo&+xi bkw:m>^0]L:CʠtPK6~S/nxٱ*ئպ#WJS.W%SSO+OVtm*.ao90 1mg˸a3_!;[ ._y&EFS!T lzȵn[,69'7[B,RX.DX;,`Kf wG* fo>XmHe9Xz=; w˯¥3VӚI09mC ̹)hs$|+7AmD @X?ۏi~(|]K)grJ'ϕOƛq_T1G=^A 3` j`_K긞\?Şyu-M=ZOI 8S#P6B>nd*;Ț: K(Q"LL._-?X2(e!JK]^ybaJU E㙐2ߩ63$@}mmw~Rpq$MuBå G ̷oE3_I&u `m`s:#w2|Ttk-YM4'AxeP6?4S9˪ϢKdP 뽆ް Ջj`EHC)%񉩆{^ۓSMzSl%lMRpSl!lF!bW1'k  IK\ 'TfJ9>2zՒ\!IWJͯ[[Yc/5/鴨YUujIn9G(/oT K"MQqT?(%N\ڕatp>̳^24\;!(ղ)j.U wUn k#Q"UeR&U[%נHS )'X,wz})/ˤ9s+[/ԢseE Tf`\wU4 E2@[4GxkuwH0 _[ո6DCmӤy1Sfzh( (BP"*Aԏ@$.ryVnHuf?⍉R(U G Crx|֪̽4 LQg9~s \n%u)\0Df= :l0/yd䦿iU6Tv\7Ejf I͔lFѸˑ[kl ;Na o3M9N,5D)\uBou["rR 7ռ$ ʁm/p#4mMl{t H* M؞" |v$ P4f̴ʢI1i)a@}fB}ư/j~r)J3k|M$X}&APso@K]?kcH.:\;Ăddٮmۛz^ 乖ن[u0r < bflu&0%M-娶,R-m D[>{L pEc"G߾t.eA6:mmdr,Tt ĀnzNfI^kt>{~ l) XgJkM}ژOI E'KYӿ>Z0bYTjUNqcT}: J6}l+<eUq70㸌 +G1>O:?(U2>4D9O_?xZOH(\a[5^_G&v[,a(Bu`\# >㸣qaPdέEO`EЅ${ȚsPw0U jN]& zXQE"⋩**'.:+mtj#T5*,GLOYƵ#3lC6L- rz^'Tds"7 yc8^*'8n)^|.nY>-(cS"Ӣj^YKb-==qjձQTR:@h?9dJ8/pYXiջ^ha[?Yԋ-:}udxv%nϊJ8sҩam.L~`bL|z B N;GS=\*;f܀5Qms+a(נ0ݙeUe>EKtj5r6o8n0ă@' \ca?[aDf'>kh*vVu's ۧXF&1fWmU8#qOԓOHUPmyHm/>ulOUJaWP}vzӫ4tԥ&D$̌6V`KF+6 c(䝹S :Qm42 !ɨWAqu VlA˥ 0M\A.j3wU[%A͡j_ν pf@TSfnuBA& RbIT M@vPl});==D 1[|֢d->ר/A4U|[ fNjE] KBf;b RrMT$Mٴ>J0K\\˙U"XeN!rQO*z7zmܩyR@ Ոr5t nJ5sa3:ukKO;㟳WVPS=ޞR/=W B^`XpjR5{[f̝PR'ycY@c#G[Jf3ieaUtZ$ӪB%ƾ:s٪\1j&5? ᰅ)AVڀ%[>O&wa"h'7U;q^e\yvTS1)"m BXi5;k J+\dm*dP5j3*PHkt1Úi 齘DFP(YiMKlڙbbqa; UB3UsRO,Lc $n IӬ(Qn)6LO{W4ų0% '/qAgU.ԩoKT!y_7uz9rӾI+(njrM(RzYΥɲ}2# b2eo]Q(!S-vҺEFL-Pl[0(+w U聧ET^I`rGeLwn5W-S(5tJc:^cwof- .fyȬM6u^8s5 v=$%rj^-Ed(yK'tTFttDjF"5$x(6I3In@k2j2{\m$zzd pOO !mkZ(:U~}rt'H+Tj7,#.^ƶ yop$ b צ!ȱ$%F6Pkƴxu@7D$Sy v-q@X.&IůJoA (l.ԍG0 < }/ @0SZ7 ɰQ)b3EKI!L^ )Q*hz 1j.GO(0Xum/,M/`e:o^x"&[_2dT=64sh4kP|c},˷TtJ=oKCz)&1Ep01 u,jn/ C%1D9dQGRQp~#r;kz\M/U,Mj~|O_IUpbp qq 0c14鵲Qz5)¨RBzḧU ]f֏j FStmmW RqS LR 7ҦPEZu(LS]J]=JuoeǨ5|*  B~]$NR^3Tyu5f=өJ Qdp{*(p3bqZ;陯5Ǵ zIBR_@si\S9˜3BOӧMVjmFA$iE4- Uu')ӭ|н-i1t|.7 Lze9a;6 XyHLy(C^SJY#!^Qa3XUMMe T[kZjejOtaBΩ]0׭Wvߤd0a*k{5x>V(8"r8Ra)hc1U(Y-ubl>xj_JcF]2p nxvq !Jhl,󞷋-f^nTpHa# q4q^-ܚm-n5%nSŊ7Űx\n3UzTrg$i=ǚN;gGxoL>+N3ΓGC feQܳ7OqxqP;U52#{yeziW1tará4mRD{@ Cyk$;㼉rKSHejeWH | JZ}j @z762v]=Z#aݷHÒ_}[bu:bWIv S-R7*/:5Փ^u=8Ruw kL~&;a.&Hn5.[Dprٶ mzC1@^3*{:f*k {_ -ɕ8MktX5v:l \jVP MET}"wF_D[#|L3/:dK7l@w.^%WKܾ2 ]-C;ikWOXdbûv4%~"8`m [|y{́jj4#eѢʡ3g#n@+~^J`S}( mf3yI3\i*zz[xEi0*PKT4Ļ\5 KݮWDe<-AC1%}V`fwmp{Mm"uqN%@$6:sp7t1l.t@,I06Ȓ,lirްm 0 N*1=W_b2o㭀"CcsiBPm2Jm|-ǂ]{mYu{&/wjmA]w9@4,{0BPOX+ G U ,g^$s(@VʶT8oD]fjb-dR MHqP 7V[JMA]x@y$́\cZM6iZVF 5T;*$؏c ]ZAPV** ,-/.HT*6פeմײ'i.ma6ʬ;AN^ԦT zK{*+pE[\tMmv}tPߤ@ \*D#2)^} R͔qԠ?T ֔k !}w om΅_W5Eʝu)>2]n< AK9L]NOFd{TC7"TUo6W[x@bEjؚ(*KQTiNEEUg]30߯L9֣.Vb7 ]zg؜՛~ !],JLXxtl oHtUvT`QԃwANaCK=EuY+Š-QVnƙ%-|jh :@ҿf&5*}tOR Άm *g:}ʋLTJbF{_P5+jipjJ`h%F=D !YSko kp93 )4ՠh(\6xJv +[#j FaRϪ=jUTȼFJ@L@u9..B+㬦WgvP3徣MmX lûtUZ Ǻ |evқw~bo##͑-6W'15i:5Xj`\P'2U nZFX~w.Frx p+>c9f8*~&u=FzBjRzib*D`0Ӻt2 QYG W/HT~_y\2_MsIXM(U˳n$ Ծ_Ѫ53Oy< Jٚ嫭Y@56zvd`$ij9lSUW:OjVBmlH"ME|Ztvv\JkVouo{!4;K0Lj6l5NN?Y \FYׯզ*U5 M"}{r/yzc\fTڛPJX{ 1oCU)%y{OAiJDjUG{4AwQ]AoC{|YK3L]s!EEP5'KPc[a ܰ[)IV[ol$i+XWV9rݾAޕIV Q᧶7(5M\\m&I$0s`뒥{.ކnͿC!O %o[H&aI"k^I Z:J-娵D :ʕ2gH) }) OM]2jd)lJU%;rCEYs_.i@K-%%Xr0.,׬{B:<25aV@sKWdYI9?e8RES6P+@*K`\)HjQEʑ|,C(܄BK[(ZYNnD2AeiB@*v ) v,K0Q b&Xq04۽8jR2phTu͖}ƒځR6}X FA'iL>bz@6pXQȬ `)פ31$V;Z El1;^@ }DH((a6;P"R)E$7ràT: =m,*M*- Hm3\ k+j"Gr)P0 7|$6خ69 fݕfck@BRu2k_̙YRmmEEmTkiӘ6<i*]ZH6,k ,Ϊ,e|`E)%Re$^X6v=M#z3*.c'B7UFަ,-4z-ɨXuUlr^I0t4F[iif\6=f,[HRaW1Kftjh֙BYI:CN)\5+kJ}.Y[kiUSJIO fv,r_eQ3U3P/XTo R"uS-!]/_>j #C)Y(F5qT{2{YP ,$y$K4O e+R1w[NZE#׿NBupM@ftsi4S̬غԚjh7pzS;j~[PFʡڃ*dQlOw[k&7: UaPfh­TY-rZ ;̚gmujoTp!,QrzH /2'봼]i!Ndr>SI"DWz 'M*զ5,0*Ueliw}Jjys_LSσ26]||N}dXYFl?OIHJ侞I֮g@t-@M]+T: qRӹb<5Zޣ*->kSM;QV1d5*0)çYpV|~)%$+͹)L2|3XjoƊ{*ME-3tQ ى3t>!hfwb}ȖMJc㴲)&dsA2@*CMygE=;ıf,\RK^JR+z8z6:{@KXce^OX;KxTE*4|#aOJ崫8}v+_9&inOF!j%Zoցk|0XiøN fdµ]ڙ7o ˆo46'*_ kg ΢^Ϙ`itm`;@Ot,$[VTʶ1{m84}gi:;} YP0Cٍ_־mT wz͟aK U0t33/k^*Wb Cu}Lf<%+bi1teΥC~Y}&bDԜrK{hZG5$`Thfui%Yk$U Ǵ5 jeA%#v. OZ+_X1scщ>19as.̷c+* w%M,G/!|;#I0ɨ=vVH4^G,q(S zҭL2pRVqv6:uT(%@S2UT@'R:'T p1$:tjk()QP^ŧuesO5 R/ԾNha].8pYɲ U#yC[T]練=L{n' v_$|BOmHB )Pk+6U\ϙ2 $򻪜/KfBݯ$h+-~QN\S(\];ice\ډO2UUU4 \6 ʠ }rLZ,[Geܥ[E4skFs 7(.oZ*a[5V|[{x H \Rr-v S{m Y*2 oH|5CLXCaZbE[pI*z(l\jh nR-k(eUE=="=-BJ aɩAa71L<E\׺fEZ/`|ey\  $ZN 5v'P"ɀڂ d5E_SCELJb3T xL_) 9>60%6#7=`ԍO[S 4RJ2@DZʡSetM GG@ӭͼm0$WFKzsOH"cH5>I b>uJލrFZ|;T;xm#7T=)VSv4 /,Qw#"_@1U*V{V> <>e2l*:b?,*,{H$~%]@ްZQ)S`> (RK,+m: -T0̄N,I[C+:BQZ!S-Bəues{\h P$7RJidYU;I`B`{2_Qckh/I til} ͥDnl-;p~-*_2-W8JcS23A\ )0t./^lik[H۽޽"b" kFTLݬ@k{Yi>Uo6a\kCp?Inn-CI8mgUQ`eV\s* W2*Sl0xVDF܁rAMڨ`9m2`HQv[D>$8 gaKDgI2[S&A[@᯻-cA1zjQT\;zUt5Ҡ*Z_14JL`4Txd[YAv67eUO!mUCs2O8+3 v\y|/Nr-ċ[f`y@Kz&mNak`ZRȻ저>.&`uGms ?e >1|V#.MddԌD,CktTf"ok^q#:NIjPEh5'1 f6Y?MIޕ2@?wH"mak_AG2d6@1-e?w D8Rm-$oű6\*fB-i!j-1պ@9W_lE6 Fњtb\[k3T% "<浓@/,5w,"j͹]&פb ie"_0<ᒡM^mނ/" H R ''Z@b7`osrLmX7ӯH h5,mG j>7c Vkj6isFJHw@kH D̐^(z^\!|ڃ􌳛wHR.-n__U*Ocb,b:|#REE[g'5i׬-PGa{\!>uJ5A>OUl]F{e0A$IUߖ~RkX߮9I$>o81&v~)mD"ؐ;a{ZLSlE؋Z:~rFbMF]mӤ v+kP %'K(L- aǨ-#{Z@R?X'{H N7˯YrTŭ{^W{1E;nsk "6VrQ-}GH;84yhj-2{kx.:!rݲUͭJ5Ӥ %52&dJS܉m7R20q鼕\?t Z.J]C(aO4Zp\FḰQq4=sZcÏa5+"TODcPV^|]W(Iu*̹WPvjp ȦPN Xqj5LŠU]>[vy?.*v\p Uw(|O-F$USs& @drٴd^Hֱ;yp72 yBO  rEh"\)N!v]]*F4Х@Ե & #Û}[@oH66*M.Kw,b rlsHAm671kVm2^ĂIhAM20g06іPN[hobM46h13/mZv$DX}F..-:}#5w Coookz@:vH}DYlN èo1k[)a#='Ugef%z#k~qs)?.[4#8kJ9,X G9 ZߤFKJ,7FY%I1Y&acmZ+װ`5 pD0;UϤ9Ð wf_,#6'=Yk^ٴ`fp { ]!o;t@hßx1m#la: r.Fo%{9%G[TaH%''3+e:QWJ_iKToù[~4iy[&%&/UpVMg ;VĵzX~%ħ-#= "7[xg0u=ZxV~ʹY`ax5()lR(;zVZ5,B^U_m2^}'!ᴁԢloYj__p~@qjl,}=d7NֿH7U/2Kfi99Ooim:KJQde؝3.4%G8+\T#JXob9+m>5P ob޽d㠰2q4r/{>,jl/S>H7ċx@b/p.=>Ysor./\:kuCroqkxK#_h9, ?oj1[0;6@ {IFj`7I_1ߤᘛmWdh^~iq5֓EGYjϦ4\52_]#h pɘ ;oá}BF}+XϤa)ET$k{ ;o1P\e]E tThP< H,Io8[}-knM=eb[qMBbX/}$>s{k}L1bCe`qKp/q~' =OъRPk$(--!{*؁k "rTw$Z1@A-`r{5+{K,ZkQcoe?N0j@ɲ:(@k;KX)fLL潤 R5* A/JEA1fg_w>P5FRy MB2hwEh߁yuo(=FD8Pzj.P9C7K Z#AIŏ$dӇ~Q\om:GͨN>e.-*7`.OX-4 Dt$\H`A߈({h7 i"htrrw?_iFEƺ7]O.u ٲ9yQ^?+1'uYl0J0h}ca  `uH>2s7x/RoY v8+v$rY܀,Hä1oSm2g ac.0=tr$ I77+h z1MN (GvzP@tc-r$ KX_[j|VS[si]⿐IT^yn/se7"0`o㶷?6Wv+7:xmF,Rm"']OHb5>06[6=H#.T﬑N<"pYCGͦ}|Ɨi`OX&#`ao&w_"@66$x@]Mt`k0#Cnё} 2F7ZoP1_`@HNoפEI]ɌpE_ S y{#g;,O ^?)E^s _2_TAaX^"oԟXo liR`HQMȀ0-c {]z X^0L:J35 dAhE7L -5:t_ f]w>#yV~T]٬?(wnJٲ/%HN&F4"Ҧ} Aj\[݁aӻbȐk9 92&HQuQL.|hE>D >VX^A;MLr5v_6PakP&C#Hfm.'x 51brS!zfʀmk؍^ =/&8/{e <.Bu3_[f܎=D%N|5Ђz@0n6s}so3$0k[EBk$wrO)` ݽE7[cr< f+XzGj׷ /m x@C1+@H6:c`HY]/qSeӤѿRm% ZzC5ipKjzyȐKX36-e0 A/b5WY6}2a4\!X񒾖kj<,|zRE# Tk`/&)Pyo}-Rޛzca%`w@>k$F-׵yܨm\+4$iY oK0m!͹mEB č<6TSoӬ ZA *XkDr@7SAzA*560',\lD0j`C`Lh4Eʹ+1x qp:f9(6Į`"׽@1_j~Ӻ}/1[nٯפiVko7$ߔ8o{O(lmx[S)g [)M:J[ o oauEbT'Ӥ::m6}bTe湷ޑ߼/!r,GHMF o8Kk/KM1$hX7_*syKy@N@W7[z57Imk!1Hl49$EB}ĴQQ6}YnoMdbm% yg(X1 ojM(vBuɃk~bPo(4ٍ3fsd,OoP$iY|\+lY͐HցB;D0jj{j["4Aw?MX\ Ϯg:\{Igos-!|> $7@kx@\PU}-`Nч#R@[ >y;SMYԓ7L%H=~4TZ9]#frﴖ@Mb,A"cb>%Xvhsa6,[o 1[]XsegK`"?"VaxF2k֠ yl%XxVg7ki?51 25 :wV\CT$*u("^aZen|6;kS{k2֡V;mg/XjX1.me'f;Fjj ޒUPNXI@=`^[ m# ݘe>[Ȋ,ƧvduƷ S953_M:aŅF7 - -@70t|? . 5;@QmX^ 2vHE6R/w7R +AG2 Ƃ2t;iMi#&j]i0&dK\j RTwI!hq`@G+_HԶ`oz=BԌ&TgU ?9i I!L's-bڔTFkɓcXI`WcsB`0sS{t\xn.j-V&̰"Z8݉7{tDLԨ9%W9E:,.4}$M*wQuⲝ4'UU02Ȋ4_ G?1?e  t(T11&'{ @-53]e+'t%TxTo)wA& "Dd継s_M.er@ԋE`^GI@6&G1bdf&:eoFbO(f_}!`|:@U[oYS]t E#Bd~/X[׵#rMRAH"T zBۋ@e<-6&Dr^F0S{6XH,.o-/qbd.R^OX @=<$I rEg]/ ϿIq[iN$ 2l@9a!@ws Pm"Fd2-a&pu/mnc+k}}`A^d}[ tIZt-b=k`2uj7*6;`I z6Dܥݹ`P,H0)Z ej xQ߄-:KKַz"ָbE1nbl(53jL{{פ ʿ4X _`"~<'AKqm}<#6b`t su#["5I:0ěXIZ"tJa,4"6 [M7r@QrQK2?95eb6AkԸYEG!4C ŭy׶DIM[^ulUBqe5:Mz,} `5fBj=GHuBM03Ep9pXX_S1]k5[Md7&ٌbHkY̹ 2t>Qv6'Y$9c't,/umO\)Pٜ?&;\ Ki}/"X52{%=Jnڨ[$\ؙ}`,EB`xf'ճ`,lAJҕ0Rv6s e[@LvlT"ęI.*6󜙮?Y+뭤|,Y6P Q1km QPObNP=D,\ ca j\؎k>.mo`ZU=~Y f-oHv$5JJF\nh*kxL[[Z0`rE̳=3hC+{b*$s>F9Dͳ{@ךō H,[;f#F L_x`3&㭷VQ t-Uc`f@d$h]l.assets/plugins/colorbox/content/homer.jpg000064400000021325152510437610014653 0ustar00JFIFddDuckyPAdobed        !1AQ"aq2BR$br#3႒Ss4' ?iZZZ7:dy: h3c@ @ @ @AFOM@$Pb1mJ:S :,W|TԻ7$mo@׭ytĚ Z5\FWwtJbo"p֣y`2]i,ἃgwb[^RjTŌònDeu : cb=4 #}4 @ @ @Bt<~[-#ZĖ!0T2JQ@rOms,ʮj(؄})v {h j)U@j-\&Q;IOJh$|4u4=Ze=JPB@49s~fʯt(尠 ui{j[|<ܯnjÛ̴x͎>{v.\(dֵ4ǢD<{ usVBuHKʠucVө[jIH(ryIؒ8c⼋ FX)OOOꦏmgnBhFnhh)eڶۋ{'DQd'I$|OAROCׂո3KO9[V!EB%U{r$JNtt  t @@+ϙs(tG[g2}خS#J=t@`ʐ=FzP(:%#soAGUn2W%68zf.-=d)N[i$njX2da5ٍ, y u$a_(IV, =}L-1f lI5O{s # (;zNk'[3Atsߑ~ъXQD|"Ew k8ee\ʌ[2Y<ї7i ( lw;ցG-bv<Rr6R G =;zeA%!iMk-ҐTℂTsq޽gu fSȨSk+R;˾h+5-Lx \_e2oba[u 7Z~@F;R齉s+x1;f(xkvSȈCă]r֪MՔ::xH&e])@O_@VEX{Yn(씖v%(4; >ÑƤĐGZTӭRNk*=}%tTV/BilbLu$~PR1/F{rCߢ#5h2;'l\rlT5R> ^ mD :+Pk@ @m G"1տKXSA1k ҒISH#t9_Rbzį0ͭ{ I>e I;!Н_#a6KI23CevqJ+jEA_tPmP%$4 G9k?#%Dze-V+SK5?K5ގzm.BR;>–1=V啄xyDR{: K6^_)OTTˋ&"ZSjiԤptI}4;Hb]95&P£D\$uPe%Պq _^DZG‡oeO1Hm_u!A0I4G}w 0ܖ]S+ R}x}tJPbךp@R=O}#"~4 }'g%[%PݕA>hx>#׿a@3YMPқu髻Ĵ >d=i R7!=:#X>aTɳx ||U\Zo䥗T# ٴ://Y4㣆mhSPӒ֖qŐW$@w]aSS:~d1W8K}~en[#&_1 1'j/oeRWh!t;?n2P*"L ^ tLyM14Kmux4 [u[%(H%D)G![gwr dذSg%z/֒Ѻ"4 GAi8Jotk'+hR^~RB}gn6R y+KUB[-Or5s(c"ǰ( RL.ʶ34) <Рz$mJj#},K܈.k;8Q-wJ~P}*$)I+A{(ӓjrYϐ"(S{5!(OJ) mTAaL]O)qTr}l-wk9E!KC6}ߟq:.HY Rv=^ Rro4M!)DYmVo[h ~ȵ^aEB|m#%zyDǤDžLo&<Lז~T4|ֲ~ `}Py jx+-ElyqDhiRwN@dmD =::@8EJ-l9dD̝[҂?J_g괫'79ma0izirx;mNd:/d۞g8FbfRc6L[<\k6j=k5K%Bn' 8oaN8T93U,ksθ>뻿7h Z{cumQwLuYEƲ,{pb*5h2C L>o␇V)mQTȨ$8b\~ |w@[ j&3qMutd1;œldxl")Ē :Mg˸Ys{vSثA1oH ?߾ydqzFq_ ܉3WVDMT6P rSMJ !Qq{ﭺf{u!sm\^piPA6-N0S_FKBC*,R>rI?IQr|v3@ @tI;@CqF3:'q҆&EL-#.:I~N¹2LS&KI ɾ#+ϩ`7? RTSđe?LXK ҕtg5,0ʦ1k2%6k6=yŻ'^$Hhk#*qywjmG4 HSMT|PHdw#A\S*/ٸRlbHvmk^~(TҐyju)VWww*O˯r9u,#+pw#+Fz4WUnUj})-߯AGGj-Y55j%eQYiM. T[1 u3im[-8[j('Nݴx1k*B@n|F- vJGݠZ~Ae5&2SE(򒂣H;]PM%h ZqyhH v b$ʮ+L.a-BA*Lsf”NAxE*q8BR~lɐ! a)*dF85Hd={SnOΓ˯}mƁhh0v7a.8v΁h4 @ @ @ @assets/plugins/colorbox/content/daisy.jpg000064400000317150152510437610014656 0ustar00ExifII*Ducky<{http://ns.adobe.com/xap/1.0/ HPhotoshop 3.08BIMZ%G8BIM%ȷx/4b4XwAdobed       !1AQ"aq2B#R3$bCrS4%cD5d!1AQaq"2BRb# ?7ƹM&ΓC<# :il?8^1iX63֚&'T"amP8 {Sm@kS$q© FHL nDjΚ@4󪁅+@ [)/#P"Hd @VRc ґ+6B:$'L-C&#\jhE#-cHdU6tVB4&tL/֜[K!{Z$ T8flpq҄>Z֜n&;C](A2kN$ ikkIf 8./J!_Gmi[E!WMo*`~,`Z& Ɔ8XUE'Jh@3 :Y hP"KHDTQ:| F}6A1\RР]%ԃR¬!P&AcDh?D\_JDrD< `1{ڢ Zi "m1  Mt`i~,*+4RZP34L 5Ҡ#HdU:JHªoT& `ݪF<*|)6"-ӭdIUQpGLi5RC 1֩b8ǍPȠR`.^Ȋ%4HpapE&R4d;)Ab]N+*( p(T Iqm҂ϗZxVT@ۦ02.Ⱥ(4,*r&:* ZucBn,uh(Lp7ҴLk*%}EޥޫZdS34(c|+1kBC% e&ZUZɢ$ѭcju$281IBKD `C굾t$^yTY3Y6Q%]($ښU5`KcLGS z 4v>9)%@6LRBW-3XY7TI"gH Cӭh@)F,_ʡHڤ4:b&i)#T;j`HH("cHM *-Q$@-)k~ Kuv.Xi@e=ʩ!T#J@I-4)FS՛CLaoDHM{P3ց GpSxU@Am*]G F5F΄Ah9 VC~dFI5PjAqDZr8$M1 \y $b7Ӏ0_:bzԲG) P&ckjn9jo}:/"THBU(ݥo7Z$ І(C"B6EѧJR rZT2~$jH@F|EZ 'P @lmm< q)X™,n>,-B@kD$ڊR6`ET $xVp"kh @)4,n,i 5R[*v75Rp-Zi_BVO#ބ;R"&2z0RŻIBΌ APq֨Ęk82Ii"Yp#Y .lT!F n$& E5\1zRi!S@qŽR3C|i6@Hr HgTZ!:PHYhN{{("5IPF(7WQ1UۥhLefX:Vv4dʁإIQTKDLPA-i@ˆqh%ȺS!Sʥk" zT$ UR5(*I6hE[zP䩳Q1=zd-_ƩPNjlr8WoJ/ZRƁT0!9)XLn5b&5kxCFl2(!+fH`Q[TO`' U6!7FVQ(LC`_&VۭK"52 Զ0eu#$&#V䑋 t411V!Avl N!-pj$Xi Iܨ߭Lb'r2-4&ΘE1I@aJF2ޘXzbu ECmi;vHЬTRBXDN8ALP;TkQ#GDu xdCNBL?1c?jd` haPҁ}($)?ƩRh;@}TA-DZ"d3 Ҩ[ySU[DԘt҄!b]GNv(hde#[yShƴ" Բ kD]0'ӧZM"G"njĔ!lEgjtR5Џ ̴* bnk$ *+zԓ4:xT;{-j c ~V`zNsS#rI` ̥&r&*IeJ6*HhԵwU;!艰SR1uƅ^רe5 I j‚hlim9Ρ&M,$k=)D+JBUHI{/j Ge L: 0Gt҄ ja5,G-M 1IR9H_a!zmLRCn)4 PQ@1[4"E ơ*[M)(::m`OE0*`÷P:RhhJI֒3B4ugHB" $ =G ㄃cJ!DR&1o!qjDҜ A}tŭTR:P"gE@g4kg$ n+u$q2C%@Lm왁6efRsoƥ!c"[ m4$ #R`Wί5!mVlRug7%hTt$0MLiZVaq&A"I#y|*@gz44HRQpEYHR]¤ ^(=T E':h$F>=jֶTX -ruP]@[!r/iwJ@RH= j4B&dFmY.T) n7? \ʥXg@(( |k@iRljB*%kBYFP6 j$ ڡcU <` @![ $թ=oeISC&o1uFp @L&ղZi`j ¦Bmxԏ&֤dLiRimY,`B9 PKyTH((@t(QDFaDKj&E#J$PXx2 Ǡͮ)I#۾bH2Xxcz@QƜhALP8PdH&MYYr3 Ojl7lG$ՅKBZń*h( )S]iAtAq T1˶D•2$JŲ6҉p z DRj`gR𦐎4i:$:.0 <)[iGQ0_Jil'¬ ꖆSLY40|tQ!+vӥ Kp%X.I!^ hiAHwRj؛H=)=1'M]FZE-ֶB3{ޱ:j P LOO 2UN\˥kS6ƜmT*\GccJId3AzBt_Z`{3 ƪPv=I|3 >qtY*Xڍ4릌d0}ǔݬ]e,nnU3{OO?/2bs{v%Ttwo9".dH/avu~j=$Qr "ΛTX' V0)_PO&[;[[xAEG|Yyx>-m$Touu=9\,|Ef-Y-45 >⽽W$;Dw`񰪭[@ypACgmFֱ6SZ$S~@HźVm V&1 XSuYHJFLՠ$M6`u|zRDjАRz@.M)1I!@>tЂqjb2G耑WO*P9u6ʘ)tӥ!HALZXzmz| edz|$&;\|+DglT@n,5hakbE_ƒHZ):H\Ɠb/l |~&2##Z&K'~QfR+u'Z$ ۧ&.#$tfn%=i3F4 o J ԀU$@ dcۇh m602dS#akx@Gvִk$Tؓj_*t֥hz P 4q9urvbm&”ݚ0n(y0"`tHe>rc gb?:̹PEߥ11& H2a:4vv>:Y~O@BϥvӜ#/8"mD˗ F2cvS|k>U2q޸PhΫ$\f>XuEVUU$K\1HP(/$D191`’BJQ RO"&[H =++Xҵ&I"vlH |;9s#%#_I7"M Ǹ?|.D~v WuC_$ΓPOe^BT}k֯h*?rɆnBy +H@z_Κ\vz,P9$[ 5 Z!+3>σ>\;S5?A)PyOOo8lFl扬W=%5"K|+& RHm~4Hm%Ji}:@ .iy\ZKmSf) $j9թ0y俎2oր NmcID _˜ 1r}g%⥰+ L>-ՈcL&!Pe"& Q˭&$Lֳɣ;BeY+u0^¡֤L0+D]m=j(H>URzI چ9]<,NHA{b5fR.4MZ 5=j$pL8Oʭ0 Hh``N&t4:'M!K4dC@'K&T@]|haO07@ MNF nӭKb@ 9;-DMt~&@ҡ"*[Ԕ5lE%dA<& mW4 873&P`[kCD{͕.fwvhpqyt{A]>Lc'3OsǞ_ 4CHE's\6G14&W>#ַ!4) LlۇQPAIa~4bG(&2,m5 `VSD@HzR$as֩0>uhPysS@6 c%ҤuO:aMʓA:oz@I ޥޔNU:uHAߧZp)%R5Y5c4@ ziMck}*-[ &I[P9I7 $Y~ET/s/ۼ Cm[;EC,ܩ ϼXw_ĚڮYP}=>X_i9Aݔ+@]ZO!ƛڋަ [AH"~ LK|EJG.|󃛒 fzXi[ M |%˷ieNUG]z_6RE&F\"%V>i eaʒWe~Ok11:in?*E"|<| 7ځE88U/u /bEpHm`PCbq2 t[jWF"rdٌo_*Ԃ2hhБo_ʵȊMYE?:LC<ʲ̒_I#bcIJ>O_##5;DAaɵ6uyFqsxO,>eĘ^9_Gk ΤiR },$ CA#G` Va**dFO-0*rYiv@*X/~oJR4Eȫ  ʓ+gR.|:V6*%֕ಂkB=*"C "H]4Zl-N@Vi * ^])T݄hoV+. X i(2lp'9fh:LpE!nt:5%*cLGfKK+ޤe c<]dXdƵhBsY2 u/3ޡ 7-Q 1aNX) HmkDHۨ4@K܋kz,#Ia>5T$Gsk)&1`*Htl`./ *ƤMh"MU"[&LRL@dS B.M&Hc(![_“bۿ’@D#CC=Y&Rb3_9^mf >_©r:~fP&-,P4{a]z,{6_WegXaoN5԰so@1kHF餵$\\A̓ˊ v Y*FiPiƇI6̝MJcM\76IM=a< ^ pe`ORĚ@Zb^E ,vé[!ok\ojcK UItPA .~Zed yh):ޱeNXw+,f÷Jo%>gӻdރ0u͋A32\_t'yӖ̷ m$fj7t%]5j N ߰?xRU_ՓN~l_gŘz]|}HL"-)CEf؎)d]*AoCD,¢ uS*:,Ɛ=zR&✈M$Hî`!"(1$ӥ&XPeN4È7(NK/P R+>&:s j`pFeau#|[&j$pRxJe+DNt-w٫2~?)j X ;ipT&J$\ ֤0_;0Bͺxl)Lv$TRbT–^(AlZL(>uC% Y5˭ @-`|=VR? =bff!ޣiJ슓!Aq L|:v&2`ֳ#H=ڵ3iaP0ԁB) Llj)4Z0%~=kZ g$4"Vl AƔ;*rI_ƆG"°ooQ1`¨RA_2+g%ZC㡣:JkCbSi biH~?&GVr B与K7^n4$[k8&‚PP$cSlnI)#R1FTldi/%EF6Ds2*X*ݾ5#:boIw[ƨr.Ε09 @ȻnLZr= "2xDQZ 9 #xPMֆBGC\Y=*6A6_\8{i>HU Ӓ4la"ΗLJDyHE$-,"Զ9.hB [΀9$j)*H>5itI깦__ A@ ڥFS? LvҥT;R2exƶI#oA2L困I6WbeS[`6V)lw.-&#IYn)*,x\ќƇ>G'Íwab|5]RMTv#~RSmՂ|mk|Jҩ0 ǖc;NWG((brz6ZuFR$Z yRrWAILeUqf^i3ouKGwO Z*lHk35,Fb]e'_;|x.%o՘^`:TWJ28 ޓ}3LD2F2Ic, r:x*JCZr< X# T|.j LU0khAL?j\'; CsiUo܄|s{Lڌ+ gZ¢5, \[&BtRh  %$xT v6l[֒&,$JdB^>>T$qj z.LI5Qk]Y,@|*"@?CcAJhsP,MME)-{VB©10©nN3e@A" `e]nD ŔX og^BNI;M8[jdB/Z !,ƦĜ54nohK`h`) ]HwPkVGFU?H+٬om,z:˜ɳ] f? C}'*Lꠋe #> g×<^`Jdq_i\0[:o4@ ux5Dj ]/bH.&9<ы\uE&mEZLLt6BTРm? I@zU*N)RLFh@[X5doRHj6x#)YdzY:N0b4d_Д G@ r%B.hόS:{@ ,Yebt4 kJ'" &:Q Z@ʂ/҆"H50) &uqC+1$PTLCΠdOHm6CC”H ҎQ-@\\ӥ(X0  oIwRunF ($!b𫁜>PZh׹oY}RʵHa ZI$JE'{@|M4/N]$?Xd=@Sݯn _/zy Ewd=ux'“ԟGxTk_UȽCNb)|B~鋺ۮzkIvRڂbz=6C+)Vγuhζ31H{S/Xt*g&RnV!j/B:4A$?8e~}nSSpf ".p ]EvBkvVf8Mk]wuzB(RAAu'Jco`b7y`m}tڣ]ºd328Nv7E%GM:hz>}dLɹ [T\בHdØeIm,unG`ȜA> jud> NZ%**eK+ #o#j Wa:X%`?p]i#ܕԍViȠPFsT)VNfCi n6#ZfRT)#) ؊&AH5pgp$zYOD%@:)hJ+F:@ΰdSЫ~aR E5*M "=|Ҝ O9EȣAy$F>Ҡiq#Pƪ S%Xh>OOO¦iг8&kWR ^PHnEB&5H sGk() bTj6) KR(jߍZ,[!XIo³cCxܘ6jn ^UB>ҢVrV@e$U  թ :t>5 @ɢ07&Z"~t@=|*C&B7Ɓ[(RL6:Hd/b<)#4BwUZE-o5% `zLU@ "u~:ȩ'yЄP71xPkZX췭 R@H6SbJT755r @#P=r@· R'# ]:̻ٙb]u$b1IyP `mZ%ksLC%8&D29e (t7Q-9,T3K]mƁIϔYpۨ&<\}m:O]&'ӵMš1yW BGsR_XѮv?^Ԙ'*9Lau>cΔ!/7+4:\Egm5ekE?17ЃqX[?ܼ椎n X|y6ڮ6Io°Tj4VL< #$e,c`m*ŋ\yѱڏΕFk\Ti !RezuW(bهxP.k򭨎vh82r22 $[?h#'9OYؤaĶV"JC"jm%&92Is"OGm3G2"?&E1ڊ%\dmaM؈V=@=5:m+/= :\n˾%ܸ3GK9 b|+1m9f3jʣ7]Z{!!/YM:( F/GC DXCZ̽) ٰ,rc4;S3Ka\tjm*Fԭ>ӥaB %.CTiG@+SSд&$S (dfA<%`u:U fL D>u, A'v1­1 g`Cj;UT<4a f,zRH m$v\bI-E[ZHm 'QƺJ ~"%su:҂$spjX[ip2J?HAi@ ZD`}0,åK >& 񡱑s{R0rCԊBIV0o®Iξ>,:<|@6=):u&v9EʪxUZbtXڣ 7 UV)h]ٝKM);E1uЪa}vf7wlg [60G@IUf@P~ SB+f#k)D{`BE1 51nBUuH8R[R>H &AiD{?CHHA0vx{tCb̰h`zԞҢ@̛UMhpv ΟLA`n^H E;Fl;`iHLr X[SqI>on}lڹ>7iʃ 0u*أ'N&kݏqqc#"1h_z)JˬQ+ឋ -6ӭ]jf̘|Sc ,-7ӂdNɞui㲠Id+ؑ9" #Jiܼ?, Lc7.o؄ybX@^Z4ʉ3%Bt 11 Lc{KԐ#qf yW7;|٣2!U\N<5ʆ.uOZly!_$v!M?֮ "Tw#n}E4(mOE) &dQnB;]7.GxU - v/5dxQF/΀ȌH\~"mcȹ~ǶmhXJk.\jw$ +ԐhPE0 zLU"B K\UˋSREDfl|Fdef5)#+Emťgm[m` "M¡Iޒn%xU3B8+޳M5dҭ2[ʻ?F*bD>>bB j!2kx`3.0Ƭ.|)JR+UZŤv)i&2k}~KiRE)_u"H$! #_ZX12k6A5cIz 5A'e^498kPċp2HE ]n|覧gm"oq2mFƻTʬMEa}!/!)~[hƘ/ljN4 `>~WP&ޭfX5\y@"IR# u  lDjX݊!y+I[^[ih/ t;"H2{(PzxS " X؛& α]ЄV$8ky\(w X]($i$c.&@,$PqJƱ oǥXhr`mbnXЂ <L%13bNĂbv kXl6f&E#NXؑP[[u[AXԋnZ<*RSHR2XF  7#Υ!Yt}/p5&MSt-^vOåKSHd.MaYk]m:c~P5 a2bh;;'F\\W,[h<uU^B0VXdXoN,ƹX_ cs\=:ޝpַOƥ68.2W&X[ JLBe^?O:Acic;/#M Ι#'@yզC,r ص PĄ΀zI]n~? >n&tf ,("evۂr{p|W5UʑrA֡20$P3Y4) I)vV~5r09oҦ E6CFlu HR5(y8rq5δ؛ e/ZͰ$mF ?ƉpEk[*&jlT ^EP&I\ӀDam`zx%0)$|} :MNdij$HBFlg ]edX$SW%qeo*@*d7kI&{)&!hB8Rc!d$ GAT Nt4Y `Fgd9P|k(cA55ud[0LKu)1W`Z"2M'4I4.MRb8)*luynb8Qzvk[6M gdVRUF &Gcꗲj4Be< A@Zj.>"”Daf#A_C@#! No*nшΖS#C\y:h[sh[!Uw![ҝ2+$9{~6">Y2+e*4_K|lRFK?" $K$`k"+ hlyzPȭGtko{+#`;w>]E^ڢ1;y=`!/Ѐ(~uڹ>p1bPzO<W-'ehq0ekCMzf&6mVO'i3hf(tkEN]QUMEWR9`lq$;m FC@ͯ3r!Iq1͉$s#!תՔgnO~'K9~ ΍r[3 gz6q|P\(sxXdN%{1ʿޙ\i9i6$0&;fOU ,xr$#97UPn~UoCf[ o93}F8 - YlܫKZq'qvplhMؒn9woSm,m\y`I)6 nzM$1i64ze)“11NƗQhD֔ ݤRR kVX("MMOW" F´e;T :iTz)6Ƃ UZƉDIDU9]*rͶ6@ulM(~ƺUr̋2*QұHY `WƳH $cj sr Ҁs IȺNli4;lֲ J gبP@S[T͖6ںiUL El;,ZkeZjɂ1$]zyUBB 4Z0:-, ZB$c _]HΗ|\F&ʧ+V,ۻ(k]nֺ lsmޡ5BHV ebOKT-Y#ޑd tԁ//bǦ^A#bKzv鯅i ,â" w>4.IעD]`}鶚֐ Cٰ( P~zK2@-_ oTGV/|kNE.pfr boށRd]4Eb#w_U!L(ށ${ѽ;wu&EAs1I~:@@Hy4.X1mY4&F܊c.bo:l ٞ>{%=Ek΍EϻՓMqzodG'4+퓫@,rNJ\{wz8GqԳ\\u_ 8}@1Zҋ88Ȣ F E-\QNJ,@}hqeNh:|j[,C17PCnIFiDre#+/)rɱC;BI{QZUۃ1ݍ߭z:<&M´ H׭\9ch}'jXhE>'A8h.f_=gmtY25`%A(>L\|تQUHX 䭹I:'Rj-#mu5, Z`vX`Wd1C- ji@ ca'ǥhgYFxyS$ RiljT,C  -υ8Ρ5/KŽ@s_ LJeRp ʛbtsOY0[ׁ Ŀ4sqR 4{Z>4(XiYe)b ƬtIV[U#VXc"mkR@N5=t4@0Zߗ] Ҵco<(H&v++ҲL?MtuBFSbPfv^!5:R-H@A ʧ@zԺI:* /tvQPu _ʮD2[†b*xyBa&IMM6${Ep.7J?Zjՙ2xP @6'κAB#/0)9 YD7ԟ4|a# EfͬgK,2rn[oI1MfK JǙ=oHL{"\tK|)YcĐ ^ߠD[8  bE'k.1@fIƩUؽ`ʨD%C4w;nm `/,0Q>А߅0΃dd;:v!t宱unjcʒA:[>FYdraGl+mP@_.G5;;8;]66#βۜkO,'fnhH$ii3I3BKtY,`Dbɠ@: .h([P<$ 7whMukXx|ﶕQ.óPCe$BLy ̾`ɥNROw'. u=o cfpJbjCc UUۃ7,QЖ*53`( )&kuL#}fZDYlt$_[yT1l?+ u |?(~p2ęGVއR7榩~U +79!´.&*Z # v!?*1Řv>2EejC@!HH /TJT[|~UEHVMڊ:oTH"\][RDB@qg'zn[rW=  ׄs]eʺ5 t ʉrQ2qY9LC݆ E 5ri1|D٭*[C`e!C+m& Ec/a@$I{`ufbMMVR|o\Ki #r $ҠLBRR _[0|yĢENͿ4O:reć-֘r`$FčM;@cDq{j  !_!c;PFh]ad7aKnd1Iw2(W kYZs*LjMn>:І`0-(ܟwFVMj0Ა^Q,aB·P$f] MGQ$+1icjX͉`9P*ey>@c;@<[d3\D9/,mo/h̛iU*E JI$+Т1'Z0Ұ&oBb]\ $|jl wt:^^z ~/p>.V8Sm`>qQ}θV W G'fb:n+heYʶ!GLpNIF(Iؒzڳ.jur(T.ZS"8@$@u4Y AƃVn?,׶bXyֵe UlWemz2+$Ʒ|BfFVL1ƶ򪨘 (σxRh+tf;GO?`%1}Ihm =񮺁V':U%^T ARRF7*m}|EXDàJzSr G“cHfJHUGK|aA]zSHQB #e bu G^yF_fM )%G=2i`zy޺s}(VAKGktS/.q EV o4ӱxemey[amJ@yKnT"ZC070`l>N@Lv inH\D،;mVsA5Tw6g/@W]آon@`ȭm dX-'.5ښ۷vHֶX}5: &nI 0.So@HRN\Ab'-q@ |$q,f/SBtgnz(#O/f8DjzCaۃb ÁW]]ɲD׃]uȧ)"%;w@&OOK3܆Hk\(F[)"Ey/>B6ԋ8»M'qLg* u]O*i!I%ԃbGZ8}PEֳeoYٽM[jlfZ"$d6Ѥ=n|m=j^m5SϳE|*224@d{^rc@UP-Hۃu=Eakdr3^tИfC}uPBeW22a3\t W%vK[VCdۧ©2Kh&;P)ːot>R[XJ܉\",zJ&RdcyR/@cq֯c4gKÁ$crTRA>^=[O iif=|#81\k6yl?(1{8kjIjA3m(@w&,{+Z4+cS})lR8NXtD(0RR&Ub\xi|tU",BY@)c2H,1Vei:RubXrR 0u^+Qbr:ۥchj< *䆆kU$A9 zz Y&K Ydө꿹[HtEfk5Lk kTZu0uAZ"Z3/r"!N~5ō^K*BaPQo- ccюYXm/)&Ycʡ=X2zզ L҆ĩc_qL ^0+)޶K-D3vف`Ap.|Q'gk7T7fq.,,Knb I Iky&m@zIoҚ MwVL ܙ. ,^_CjhE|wY[ 72Vq.D/kAo*$ »Nn H>{{ YFT;_qH4[ש?B8=e2d/ C;#.2KoW Myg7ff5Ё]qeC[@4\Z2YymᦾF[6VPE ƎdN6%W_C- e(E7=u%\~qݾT.qN6*oߖI3f(*^M{AeQI> :)\jk(mHC;-^ @--oU(ZnB&Q?PTo ݀_PC/)%t]4RY8Q@G7%EVQʋ"My1#KajD@@#U -~RSahiUei b\v먩KK,ƅ@Ek@޹5ʝoEMi<*,v˥QfZ-ppGRҿ]eq0Zp"cY)Ej6q`RZ&|xqyXp#uEaYd}Є| ʶ J \yl[iOlju'XZR3W鷦Qz5m:7)SzN;/}|hut| {nHkF5E_x~YA`͍vRT\y4߲4¼RBM $t$ ,Pu*H -n†>pTŎa󣨠C#b{G#AQDcTLQ{,xw55E284 P{Ҥ&ƑjSAL&*Hm~@X!l.UR&+#qipRDF侠x,wI[%@,b) arur1f {0Ed|/jڎQFBP*}*#,Csr¹ivmDJӻ"!mUn:( ɶʻ M3+%f{ųDc74C/X#8#N܃CRmpP|{^xěWoI4#Υ %&c7fbFF`٢CXI&ՒiflSlP$LizHaЖ6 6 p!e.7IJjv.\:ʆFRHr|w2 O-[Y3|Nc{ WCX0\pmcM@wfmĩ'j14ee%VuL.-Zɜ1RHpHJQMԱScJ(ػnr$ TGn~P~?psˏ2"pIoZ"0؁!boZI̊b,{^zt9V2.,_&=,–o:o"g'h"]GƘ JԂBw@1RYrݟ&Ii&$޹:ai9S޻}cRWfm{>81mHA**^#?nͶέjyDI*W;f.LVĪ{x-Es2"d;_ (}8W#u)#@: ׯۻ2fN/pOk.v8H pt/PoֻM/qYRwqeG!/oƹZu+Jh ;Tjms涪ŚN7%I;κuUl !GCdU[Z9XN}#C~@d[&? @yܗk h!S; }$ZkYA7{_۰fg>vCK vZN,FwQtnSXFz9>K$Aծ%;RK:Nl$\L f!F,vp @,M5afu'›CLPLzrY!(ckL@T%m6>$:hy`l6lcuZɸ4M nԏ `K43t—hRIZҮL[ƭ(rd2Ab٢GVn(@'!Ɵ%\u  ^j:HN=e{ Qw1+ ҵ1Wrۣ'5a\B ˒JTxWA<|kŎ[ƹ-xר1iMEf[V5L{aUC;2{SULrDy؊C@Ɠ e$t#fҒ-[rV@c 2ZR#koPP x֒$f7CՍ)2x:MՍ+ nPZfF #(Ux͒!`mUSf>5[WOR$"E]oO .VsW!#(ǍrGZ3eeGГmzWKPȆ˺ʞ6,y7(0,>!|U";[HA;R3E[&1\#nFhd"t~Ɛ+&VtUݼ qw3yµLk,VXz A5dp mxo:lT>_:cR 2[ao*lL)\JڕCȘ0TmrּvT^í !0TұjD%խJL9,] ȢXs -1aᡠ uSr0O[6urv Յ4_(?$ÜsW$ Qw_uCd":2ғ LiLU{ ܚU 3Xh:^r/:í6TآY±Ս2G*XDHY?kcP+^T^UPYm.?ưu Tv.1b0oamʳ*rLiXZK/eҤe~[m]ZL7rg zkģ 7ca&$l^iðtt .]B|K6}NrWj@ 5*K-8At!oDcߏlwv?W[ @29:2ٽ,wp,|7?/:hЄ1(|Θd(Ѿ<5LD1^Jމ KC35ŀx)H1 6I1(%#3:!#L%k5RCyFe0;ivXO:Fid&)H!.ɘkx 31ʐ(]$_KzYXh"LP2̭׹{*-]ܼY/bu*-cj le܍&1iSnkDh370LI 2W {/n^gxj} 1Β?aN"{0i盕8$ͅ0wg%?]j쬢^Rs>NB6S4ꫠy^H(DL6(wҤa!@irzҀo[7N$PkzH=^@'(lL$&DۅMn i^HD (=u]4*ڵ%?I Jʘ>J0=j28vf'?u4rwa-;~dVdJc[42}koYlSX4~d+{FS?6Bzjfy<6o:uWd$A qORR:XІcmM*L,d# ޑfm(`d=$'MXd7p) "C#(0Mlp'PX{֣GB/VHĐGmA6CE QYATy(":WJfM@ nĄnBFW}AQaAtAg )&v,+fDK:֍CY#NTu6:|껎2FZR_@TAP#%DU\@)ƴb/CH1FNP)-搦;mm+I" O&,2bWKvC#zп$qWM ,@ dI֦bC)t@=e_H3)H㿍[bHJ<㸋**0?TȜl-~E P/2ޒc$ Z!Y@Q]X@J#°G%Y<$XѨQoU`Xb{8dō;IѨi2l?Ʒ1?0>^6T]񦀠 <6I[ !ϓHJI&“ O[ԀT O˭"PEgCNrMxѽ:,JJ{^ږ&$\t뻧J<_閒 D{z8k3 p^E<-1l?Ce$|o+imkeKoKr?4&sR4_HR#^ժ ˝nu:[CAefɴ$X\y+6P<`MT!dh)h.E͵fؽ|A W!+mTrO>K"z㽣 $LucLy6V'T(w6;&Ѹ,jlڱp:WOK*&̞!\*{:kE1]I+9:IVbafD#>/A 6/N9~ʗ:3q:8B^*EX7db @qѝ ( l]Ʊ8C*eH|lTཙ#6xMvW%nB4)'ceۘF߶ 0)k^۞ *~?/y|' wl޾'`4O]rEڃ! ƫ&t[b˞x9,A$:_9?@K=ɏ?]en^6bKWֵr8L ҎGN<a4D&1JmcYo\n܂֮n0KB&<JpտRbQ!XcY%h[ u"< o8 |I7Mp$ X&xVt%4+M!bZ;$CC?xd=ӭj[@^}?E<9)?j"v@&kE$%E[Uc9 +g(Q^!@q* GWdQZ"dP{-hD.E @aϾOQ.l?!%u;Ɲ.*4#:5_hv-%kYC*$+]QYDS+;GxsֻɞϛfЎ!]&Hz(PN|۴ (KZXژɂn6!j@J^[PjzkHFΚƑ_/%bīpGƱ:)SxQ&~V"⦻VARU*@kd l/B_PNy>+y$*$dL@BIP2QȂ Y!y𰵁S$2<ύQsT7"' |1%{ k(Cc,( eCqUVKFQ ./[&IH'@=7վ}4lfO,Vrl /f'aNB>@ 6~u24"scf,# %  x#Z$ B[ (V iHogpۚM9FL>"s6?O% ,$ ?[;&tpj5SZNQz-*vj䆈C(!Ɖ& ddo `T_%QP*2$I%O5ڿ>f(/p[)Vl0ޱJxZx.g;'91b"8BQO򰮵'l M$R%;$j5S[vk>?$/zuɞdN:o\gk0(ۗA]IIk(b1%I5Φd{w @ƵHeǻM;U`N#O{]=Io q{}> +]+]`c5"|kT݃5 cX>ŽMinh@Mɋ`פ ԙh:&n e! m+I! e˴2VmOVnJG#}OZ#~Z8d;b_K]+%;}Ar*¬:kfICvk%h ֲdФSVzyr&;Wb+r^ӀV6P'4Uۡ{į6hcHSI(WGW_3R,JISc7={d26#K_wo@7F <+J,F&/7NՖUY9W]M'\f=z5(*!RW7&3E n~ڲ2rGuқHvEZ"d!PMEخ|T,4aD6^˾%,u V W1Pz*,4ĥ| "|)qs}O,Ycy4ZrK.qcǽ|kjL5(RTSƵ!F|+yNmM>ʴ%GE<55i 28yKVVʿqrS%@m}A mLp|1r.mK2@ݤkiR9&cH sZdy NѧғgXxx61WmN /G0f$+Xmꤛ; p>k;Ev7r%e"~|w5CΩ199p;; QCcZ8%$X@HNIP(k[rn|ꕄѦe[?[ɱ_8˟;mfқ`1$UeT`zT*36TO s9d0=2ȢG7wx,c6 {f_? RqexTG&i ]H`Dx_D**/=tb:VȈ߭RbhQQDF=mo*p113 OQ5u˒ly jEI]4aE^j/T0=`&Y=!dNG s#E2CHr6ƻ iYim-Tn)Pyx* GKS[W$X'wikmr+88ֳv4zبcY[;qk<Q]a ZO$n|(.0@MJL fcMIj`~hx.!Lfڔȇ8*:t5Il1+H6{[|ØcƪGҒ}P40']\eNW""HF]4jn&9+xxTl qv6HJB&l|j ."_p4$+(*/X7 +JrWOtXmҖłR*s(?"9wHk y2u5X=/I&Cr?1HL źZց\Y:*KQMY?e/q\VmQiN7#Z mjͼJCX m'ӧxup,u[M~41ުpNoQѯ½nry)&Vu46$:L72Nc<4&ipאl?hzYq7o" f{|uTPa)~_@#ٍ*CrY{uMxNcܫKx]he{ք.Jv,DLY劍jX%ʳl+nM񩑣Hy_Ɛ3n:OKJ?@0R4>H4; *>A@Aq.Px .kXho IE\. y OP I*&c 0spRtsMQ`΋#AS!N#Mx_š$!Dl ),m&Wr-ƓcH& N #$+~Lg?\f"Jpm6gemG_@lk YY.iIdD HAQn;a+Lpib#IM𧮞Xשo$aEEk6-$} 66#HX1Ɗxv@dEQCcM$"1~rC@gDoYHBj4\Lx6OB(yiw}cXOgSC:vZ2du;ooR\hG`@zڱz2\r!b:W{:^|1e;+,]! j8 lLvڭ&$+ r3bZہjǥQ,\ X#@"ѠCѫ. eȿZͶSCqHm*"Gs|r<4V'0 $Rxg""[}[;Q_"yG< I$w[uA!_"~t2F $m:Z˄(n„qv iU.UA6 h{V}|i"f*VEUsܖ8͂$iAmEM[:Frf\y෤)=EZNO=<̛t:ʩ2ZRau 7HM dh@"8Ch $pШu[ ,d1M: h]m=452؝45rL,vR~}Px1 c D[àd7( \<@ƚ7m-@$HԐ~=>fP1(EKBK mA<)&6pЫ \|\/r"lXt: -̥PQe,Jo!#wmۮ4ޘ Iݴ:yRMk|jCp.zo/:7%Ƅ3e0':>'_ZPI+4 tj V+5ɮgVl `#i B͍n]=YiC^5 V$Ȳ{B o] f: %k\MeJ ٌU6'GYpb֢Ֆv@h+jG.a}OwEBFHJi2xr>oƞ:$+~Xq&W Etl2g7pRzMUb>Lb m ucI)7ޣU:Ymbb5CƝb:/ƸY׏!t/6Y nUQkl911r"Fh5ꬠiyQ{&Cʼn'E{6:O)4) +T6_ WcD5躨Ylp֥Om\rv\xB$ 6_K6#ޜ~4C)]GZ ,8)Vhr6v4L"g u1Ò=` ø:ʺ^T3vM ,~A9KEQbO_k4lU6"~[?6n֬yEVl"lu5)wMCj=)"{nz5 J5&289. $Xjjglv,r:W2$Bm gܤQ Yr(f0!sWBbg:+RKB.J\$?C1f'}t5J,Ȉ&(}KUeiٱgŒ6a㧈+eu hşwڣty!%< UU)?-yW6EK85\4V.was^1B:}ZPeg"JԺkTHY@ea+AU dmdy $\#4Ah21I.czuֺ4#YT/ rJf?'*%&I?unJ@/үݛ{kLXC'@: L1461qfVW{y[CzP!e =|<䂧-#I?:؍*sio1KT&r ,+yW9Ytֳe&Yq#DkJWw/lw^S]X1ZI7U̚r_7 )Ha8mSK3ܲQFh@sdgaܾ_1\"סLtiKة&ұK6Q`-\LF_?q ~"B4ߍ:)b~Nxϋ`BKWML;D׎qtkQԲsC5*lC-4hX鹐 50ou/*"V{WBFʕ1^\y$dmm ū3Ն^`ȒEA.j3h:$dH7he(u3W(f(Ғ@CVen.,A"~0 ZD6hse83 b-Y`9uR7'2qǷBJeuImױ7tI⥊Ӵ\NIeO'~U?/ ]щ/?ʉzDVP\c& `*iågd191_Q Y%8&eVE|d'l}Vߑ*C2xC$ip3sZ%* QE5a*&3R ǎt] a̰(KmP Ȕ?q| nPid&`qQ6i:y6C򦡊rq;ٵSeUmlE5/%&8xxE6Z$eEEhfDTi.5o" d"y|+Vɨ,GF5hzi+zqSPRʹotvw{W^]ISC2SDLdښR&ιe@><2Xr G.lXԅ O#J/c~|VDtCzVܦ0U]z쭎Fj=Eg<<r27PY@:[ks,yeH]%$r3k9gM'-WEi1&1jPO© ɏrdmQ#JG8D$ψ_#QK뷩,|gǑ HWB,AV5IT_M>e,KYIIJ@x"< x[ζi9gn.+#EΘ!2'@@dRGsLtXw0aGe*5]@+Dlo2șHĕs '6~Q{;mk6lf/W3YBt,[ IU$h}C]zj ga}q8S#qė \;.uE 6k}@/Xɴ {Wؓ:׸G`RDv ZR 0?K@OWhd0B .7[uej ÈTʈ@d 7o91E5Kzpuj@ Af^WƨۆzPm&!f/ b׹6!1IжZUe 1}%=-T. m%\NJSkpF}rF^uw֢X[YnDRʤZ.ne6_W4.3&M躔JAN?} _HrEaqBűȕM<%8+L8+dTV@=oƘ<97:xL3?R4ɦ m/Y=lma~ٸ>#  uWV H]r 4LH:qee"i߅_ogkf I ؤy T%Vx}BGPnOF]O[R'e*m Oe:/h+PV޹x5Lqy| Y; yQUD~[WN>I|6RyV<\fkhPϔpICfKVg 9dұtl>udr=wKJ^6:Jp7|oHn[ BMu`IBYFk 2^?*&}) 4`%|Mqy:/iy zwXjq{YaW@G]#%QLIUe/rƊCP+(Ν|#7JGeSmz.QX(3:gAiGUaV UIg@Ec?Xd/]Ƈ]j*Edw1e?QՊdK+8L@%5x]zvuJ`*<젽*O\>_b]Y 81&HU:=\Qo'!"|+z6O/#P@XPjUI_sqYZ+TXdkֵOU!!RX֋ i CF[:!!mYi#V36)֞-p oTk+x+M\1?ʈsZITj t āsE8%|21OҲV4U& H}D ,Nj<*^xPЕ+q[B=.Et%z#刈$iNHC&u*;ve 9,Qb~5&G-SȘ/2 hܚ,c0__lRcEƤx|+ma&j .yXl.EFlqt굵8!o+LUpRZm@C%PO[XRÎ\%xtBwRbu:D7ȡEm{u@3cECokB\<|V h"hY׫MUOXY]Mot0f+b3biTΫ{o:1_IN[_S\;nv>'4a2bL LW֪L휚b*ԉ2Fw l[fLluWkXkg(`85̖ X4WȴĨue+R9 mo QeJO=I4)鵉w0[yҝm Xn5>I,9vu {{K<ՄXlB|Yf8`7XuڎI2a3ܨUdY ,I/˥O`Hfb;E֡eLp||+60PnOʦ$oS߸te63o'ei|k.ƖeC @ǨƜT7P?/3c#nbO-0j{ <[4]Ќ hr|U+r$I&aЃ5UڦS:EiI]q_[cjɲ6d۱>6xa[VBR)"Q JWVCGb%AkߨH`XX%MH/Y] }Wiᩮ]gVyQ^1Qn㓠Q w\tOQrOdnZ)8Wg[:[@u֮TM1 d3y?Wifs֤$ȆBrw3'\EF2N.}= ksFN\yƾFpljb#>_;VOIURG C Rֱ: kP5errJhQԋVfOEeuX*^5pĒD!u_抧$$;QXLM7?£mWC|o3M+]"_ơ[ͳ:9Fe1Ľ,|R=ξFZkىch-eʑSrW?¶_RkT+#ຓKX|k5輖CnUon>kHi>uSVt֪M"sI*zZ`pb@V/{ gd§- bn?+rM&%W0\u*GbEfF_5,hC=6YyMm4!,S8Zʤ L4".Q~`t7^cǕUL &`|i{.m:*Y>s" *`<6. :7Yl_\`\j>IW k1xZtq:ufJyӣ,Ia{vrL[ۭH6p@zm=jYIg?@5/i}+nht;eӡNmvGun@jzO_PYmАV]Ma![r7^Ja%yCf[i![ l2ypR8$_ڭ{<%RCwF;n< Rbej Ybc]A[[k[4g{K{LxVg=̻G$8Hv$(?jm/c f ۤ:Aҳv4brV:Hb 7$DxnͲMjdfm@:ʠxVk QsḌrsc@?mu 7we^儠f A>təuO&S<PffebK I@dfڇεVE s2Gtе 76x"Qm ,LW r9:j³K dawv) \x8dMVe nՅ;%2"Au6X֣ev+Ł,٭v? 5U%fWsP k/]Mꫢe%hA1S2js4Y0aCV} '[ZUFi||ltŷX E!6]6_ls`!J$x>Y`ŭ{¹wꭾ*y*8qrdiJ.6?QMjlv qTȞ.?_&m`tEtީa _[S "LE+ xPFWzUlb‘d%_jGg}M\p8rf-|*}dUa}*ʬ #qyD븍B>7}zZM8IeM<@i Οjw.%D2Ì%U(Ϳ3iS 6<0F|ZV&x# [Z8##K NL`,@%Ay'DQ۝ GeuLAbXxu\ء{22!tadG{k h>UJ$ RAvùAJʬHCB5ܮBj+;[+tS2xQ=Ō$)%2&$ XXjjЯ&\/n*5Xʹ&=nt_,RXrG9>z +i3h]//mƄ%$6JўFY6P9gX^ Azu6a1Tc^>I3^ߎx2`BXě:mfBI@PokG{pqȠ; ;TkjǬU>ɛnO\5V/#آƍjUϿڷnɓekgb$gX_[MaC/7OMoj-(ycL#}@kZ&q 3G*ȿ 9*%9[tN;ïV]07|ٴ[OF?+٬ɍ$-խz˩X6ڎ<e!3srUZlc*@sq l̝͹o>THv)r9$ "IΖjܤW`f=Jkj 2| wtyx_ ѭ¦K -v|X5t>O%&mM)H1ݎkk {B>6 }ϹW"AsһZUuG;9>>\ή3Ret%3mDQ>Uq*8%*rD$,CGkzM\ E7n,:Xy>h$yv jRd~-rYdRE$\OwPɧ_SF!,#xSKw-xbC7TB2+#c0źVkVFlLNn4K2B lp[pSI2,g;YtK(إ`Psn`Ń~.k76V/8IqrCPl7/ƺ1̞J.oY \do#[/J^ 3e(; re[u'kx$?׾} _$;>o/i)b݀MC4> ,Vp5_񙙹͆:YzVO[lM g;[^·v`%$l1,N-^ɪBP1>\yQr.ߒT JH>tj]XF[} !39 $:7..X nGm:FR0i[CmP.X%ŀ͉Ċamz}xk G HC`A"U r>0ݼƴx%)h/OpR+pQܾ@#Suy8NI 1#T0}k/o YR0]4I)DL4$mam*j*7Hߧƕ^GkDM ;J[`ʚDEM~KxxR;8C,`QܷP´jV !#dݣ%gv,W1ZkS.c2ʭ{rʴL9}7=)Y,^?1 OzO]l M!,xé=qi[`K9lֺ^1%b{Hڋ3W=''Tm`e5׭4ekI;!˒7[3`RHA,d)ߧF~Kɉ(y#oӫN^ppY)@i+V|0rQ171&Z`Y2ٴX߭i]cr&! Rݞ85Qs&F5bu$naQuo:Q6/ BUǣn:ЬI2c |KS+πbp{6qYcr#yڹhmc幹rC Y7f޽*pye?ާ=)Xz:UCĖRa mڡ qtjnj`,{Lhܾl`!]H.#5[\G)Ja ,45m'Ewl n/kZ~_62%pr~5mCy1x!6DU!E`EZ|^)P,uLF}_kS'b) ,ͺ8F5![qFMPY駟$[cKsv=w\K-rBF>/VK{ FxA6f+\l:յNgƵE+dO.t͏k<@.5ݴ*:PT Q_V4rġdTf? QޘLf}%_;/E܌hQg.+;h0>nHi9\e؁[g=G+6UR>|bƙǼtDT R3ϐ*ctʟ (>t12cJϐJo ϨyNI"P!yR*9+ P5]h #)7,[6 ԀI 1aQ&q) qg(̏* } ^jzS:Ǔ$S)рUN#ІɾT)*+Xkp}Q)+&p2(-cSJV+T쁚X'"IRb 6S-_j|L(Xd]RY.4y >CpHLI6Wai+&`~'#<e tv`Rn S!ZKˏ {cNnOZxHZĖ4cb4X(D$1Ѳ7 UUm$t7ЯMJٹY0bɾ0/E4KB琏-mVr:rɡXXc1C<R|+mx LcOOʶzM<(OguY>Hc͵}u?Ƣ`gMȓ{eEꕡ M1}dgn`֨2cMExx5]p|v\ق5Rė&0p˼8 'ʕUT`v6s%>uئ 9m#_ebkw&H/e&;'^C lV}T?,r6nMq-һsd朡#q'KC96Q'WvjB#54g''.5Hʺu|~rlyL_Tl[Ϣ-D>?ne}MVDxy,|T$l,-UT"R O k<fY-E^YWQQ_ݳ@mƋ[3lmiܚUptVRso h$_XƝ)w+T{χz)Q`PO\~(q@:zCGɹ8Ϟ`;_U6뺃erfr %F;p3BR6_dG7ޞ狇32GD~Z?|̛~J4Qlđ\Ut!l~ua\$,n5\%'#^!nC'+dIYqr\>,kDu)yYi[oFup0xI/\~55ڷv_nH(Ɋ~^&XrVB o0:xO3wPnA)6RrFy+,x-˭QS~bdˑ*.əa4\#GbGފ,@W[5:UP\0K|¢+'e zXpiƊU1ؐnl:M$dۅYY,Im:(Oʫh 4X!x BcKku'>Is'<'GT*zϑA~& 41r+n?/*ֺה'/Ɓ+/<@k-JI8Ftۓ8>&81`:q; `fPMj'JEβm#^hI<(7AEH ŅUKkJ$ڤ$Vi[6\jyci;at$uZ lj GP}"-8:y4))G!)!W=ה:& k .Sv#;#Yc.iVT܄*G ]3dl^~~5o9,{~'ΕVˑ3lM42ZU'+~=;"7;KvCV[ $C,?uΗeHsO, -BNyj7.̖R _֥޽|C|9e.v4~c}$&:,ݺAbE.iCQ![+WAxVHF\lFyo @Gʪ&VR~9qFA5b.Cjt!X (R@LQQJTM[\◿.bc4~L=jJܮvY! oӵ-Q$̮+Źͨƥԥx۳9 ix7Nt3&BK qV;56=jzYrrI4a}I֘s,w6|*L$*5`u4i >:$ =Ha|(;1#G&,bWՁt"d {yf-kC=wAsBEdOF8IjPZ_g==VNc6lXď߽Vx5!K>qΘ<¤݃·|J)!>8]:.k *B$ o, *ZňҴ~֋38>"LG0? dtN+MR,Ͷr'9YlS:퓷yFx[+<-#r["69P:?!}re` h6{yPUJ~]D)x r_YrtֲbZ;/+lm$qA "ϩK,eBKbd?qwY,YNw[V;o#0e=3U4Wr"Xİ+204!Tp{\QɶF :6ۘբׯh9O q8y1aGvs,/iնJH<&2rg.)$G*k~Qs%~Vh3x<э&fMwzk{O!]'*,{RwYYn`2ֲaJ%c/2 mVਭysKŕX-U@k WU-)y'';܂M:DRVF~E0^$K*n0$Ǘ&yHT6c̿^͔Aܢ/*_ < rMuLJ2tV`ddq=/];p5BlB꯯IW3ܦP.>6ո"a1'̒4!b$CxQ>Be &%Kr (QkK^ %^/KVM8l_wqP:'2X:,IM~<]XttY.fS M 4/@Zamm>MSC|feDdY_[R5"9r}LYHtLR g6[~4DB3\d3=|IE8(%ƇoQ UoFb1\CaЀh̟903퀂=[@ kwvR^{#w;iQ6`xF#P]ۖ[s͊i `ɷMu2{`Lmg徇m&6ʬ>{rDR$jmC{t655t5L)OmuޫuFzwS+5u$s)xvm :m#C"dzYg>viC_q(qbL0J%-݀P<):NB'/lRGRo۴oCX:irJÑ!E jғI]W'Eqd΍:-'@B8EWs^ ex6$ܦ?#uZֳeKJ#ʘ%ؙ n%Ւj#"Od:HvR\~TcHWYA{kzEёL/fAĜ*nVu(i܇bgȊ4sY6P7d*hO  >U/$%&Y;4aqVíC}gۖ ^vE],ӂ4{6\x8ͶWjl@g?T|k6NI&|, E}m}2ܸ?QJ1ּe<' M!o|'a91$WyQ/]p'^I04K`yV6i_G_1sҩ'+$L2*9$t%xǶH9E*)udrE#f]IKpuC Kr7Ȫ>J 9̈r'fBG+}[ .nl^d0YhH4+Cge=䘳ePX;xVP ,3yhdTƉ,.V:A33gb*kǙyeX1f;/(̽@ko kqK4j8رܶ OM_vV*c.Rkgja'RHuK{Y6)k2RdU(= ϧ+.ө8r9ɒF@OUh>=-'o*(q7iHoW]k+7&!jrmi2lc4gS\|!kx\=,30d!B|486NYy!7Qb*6G=2#p^PzEѸFkM&Gjяi+|XyqFa%·T [ʥJ%Qk^2.`zǻ Jnb R47;|:W=/ke,< e:㥴t(l`.@XGU]ntRN{#DxֻXY( 6ű77'"Y5~g+3abƌϗ'Dg]+坕>= Imxc[`zӂyO )N2FzjT68B/LŢP!ԩXFXO`hWNi|(RFE)$ȍ64𷀦 3NX*H?!HȞ>5@%D1z\c&e6+2,= AS{Au/hb["{"&a'B<,r#&mzklVZG1A$-$ew|+goC3x2qVш{.íEd1 Ęw`SuªdbL]3͌FXNUmH~=\#xmּ`[Ux|ܾf8RAWNzh|WE8^Oǒ1e2L^oBو'adf"d/)OR;!Z>' ܐɔeMrY{uhY>Zqпf"P+Ҽ'ko]Dmkur7GLGn܌1-TeHˋ/ ,\fRDkN֗LY\6$sf*ɏL.oJTm8;6weƈۉ ⑁+l(2,)$\f8[$0շ[oZOZ9/=+c͗4r,p,lW=iOWQ8[qwω#9XR@ 6ٷ_uKXfTek+C*Cȼ\z lOU2~υ5V߸jk$O'Ù4~\IS_۪U>œXl5a$l{u*U-&V]\_-cʊ%iDsDa[rNVV3#6DL2#_p^ȥSUEU"w#~B<3 ;(r 1~[(6QS?g nۉ($g_5*",NY5q,eMn.ES0G-Bq8,a9q ג?> 0i31 |8px6IaRn4ՏWI"<6<W7&6\SI,k'IӵEejq. Wmc-bGJ'ѽI>=+F! q#0dEw] =nzHX{3%9nQLJ+:UMI;8_ }1O)DS'`o!5vIKeIP9=%W_=zV_x}{ҵ:_JMuq|U{6Q]irMzK[pd٘m&jJɾ5Z" N3h9R V,!P=-𸪭bAQd Ewt e6>B=Ǒah\pmkTM,p2C(E 6s{uK=umbdLWG%KFd`)!D7]5?+nϷ*ّxN{K6sq|PRrی%JK2nhX=&^DpX#'- k$ƒ GHJ"=T/ #6{\UK(e ,綹 M+1-6OCʗB}.#9eÉO&'olF}L1':uc,N/mYXO 9d DVD o Hcr%] B o¢WO1puɊ<ʹo_P7i7 a3}©>7/uC<|Evwᢇ$[Erê5Ÿ*!6g,1>o9X+g+dpR|,{GfO$(MвF.?Fc픫%œѰ=h|EIv1%zs8%6,2@LV~/^S"f1Y4&2MLG?݄xAe:`|+JeP\9 ӓ >fisڢjq=D=zֽuG>ty/rd2cb5c D 8-9O9/xdaikQ"Z{s".&g(QJ{$xMɗ 'n$ʇ_Z2bb,y\dJ#aF!mT` x.4܄LdVWa{@Q&Rj@F7Ԡ;{WRxxb6=V ivԲ&Vhetr`r>+32nȁ@0H#b}JܣZ&[8J |3L({YI˵62c} Zfi oO6D*T7(Vȃ̗~ρ8N+L`"rF̷m6F\\L$1fH*Mg#|4d$$E:tVt֐,y%a rg Q֩Y KVF4"duRT q2M6*+>@V8ܼexLYbO8(n$ EC`3qO) `3?! ybiCYtUi5@,s bc= JhwIc3vb G Y;`* p/]ֺ}Uqpc3rgcmv+zI,s13{ؐG}q\J˾;lzNCʇƊH]3{,aKI={] ~!^),xH_"0x" wr~,|XkUeAig1}>,y5\<dBtho[EUhlJ~F4aV ¸4Mw *k& ؟/]Z^|ƕye|KنEC F׻9^)"i2_ ".¨~nm)x ^O8I1l;+/buidY'Ǐ:,v>_*lnIrfX3ղr*sj\%H7o% $Bņ( |k[ibˋ<W>#\jk&p5}|{Ƿ5ON[b3#0Cq/-rQ}iת*0Xr]LpA{ocS֬eo01~OV-j޴MK/]E ")`- iƵe3bcyv+d}%زU\%: ljh޶:>4g.2a~C.4Inv:_:Qrv/{n'xʦ]T0|T&AU3$, ,[t^ mU|~בʍ&ȅX}bF#Ȋmsy0f$LMRn 2Kgl1C>ҳz/N\2IqXh4iʕ+G#\ы'.fXK+$dJ<GD82.*G%Xu sRtRK8wĵ(3/msWnmS;EU%6l bɲT3-fBH7WikY1Y\wHߎf#1M[\UWbQ<2kj~" '3Th17#wAD-pzbuHSO,"p!۶@75>Y52_0dɇ萑E!WZ+#A@Bؼ>1u(fG>xS% )=);iq&e~ԃ $W:\w +}@kO%Դ{gl w޼Y,,Uoe}?ugoNJ$b2#hbY-!';cOuvo%R-U$F{p}%މ AM,O/Yއ$2G#"/6|8 dU嬋$*^زWcXWv| G$گ",5ue}02Ԧ^[^+tU;@ Um Wfss>F>7K>D8hgr"/ǣJf޶ HSrso7>DdAUR':Z >Cx%A ˒X*ݱdZJA-H^/1ٱ@v݌CqNJ.܋r*-WI'dyIĘ) Ǹw&$t5X,bB^F乆X#IN/}n? $Ysok?ܳ?c'@lUi*"PrKLos1v$|uD|u'ŖKJ}{ 'd͑׆|`&0 n6U'-nN)<,rA1*He61܁zY[wJdʀy.'+1Ri0,w 5]?)fM6_#[2e18x_R%I"+doyؼsAĨ;RzR50.7%T1GPlu.zGR.GxiS"~xHVYII((đxϝdUTq(%q͝!J4 H_lfHq YtɻIXgWdvI\#3C+0e`DJ:yGgYX2n3M7)&>4Y%"+8r72%ߕV{rA]Ep[G"_)B:>2.|5G\6;> 㱥(8Ʌ.>@'XVY%b"꺑75 rj  DJEvqO7!zmƚYK,u8XY;Nh8aV$iK,% KW+\@i)̒6yٽ`|LI hKܑU}#hiAg|devrA;40Zu\ ( NWчl5%@PX R֞aU9%} {ŗ:u!@ۋn "pWU/rE>OR0YQUS[^@I8a[S*'E~ɴ $'C,R|%.Sdr1E6I 5fMczYj0{g1q9_2FG3rc%Osb<_n^1!v-0:A;.+s3"EJímLl3y1rpdˋr|)bmbuEG%򳛕n*+cd'pe+%^F*-?²״C?>?q@Ň1qs2cK2Oovb'G?E,G>X-lʽd d:ڻ!^frx1$,VlІEkBk#a'Ɲ,LZ'!ƎYr2VCԾRNtc[:L3]f ɽ 3Fd ,h \ddu+u ҚHYyh>C/%Efi8j祫7W3(f LQǙX,Wi]Z!ә`v◘dr>',$PyfvFT@ٍ$'>Igl Q)@Z)2r{unWJ -`lhLHqcSPE=`qK#M1f!*ܥ.mqr%36VSd̀@buR] 8<\X7 d3Ǯ" D"+mXWUN[Ccbb)ə\PT%mh+X@CɒW0$uLELe 'rBK\?Y[q# S&6dq4|n.3wgt1DIRةCZiVrpc丕Yw,k$ZN2YWѨ]wgVapo.DǞ nJȿ='럓eЕ!>ԭg俖<]=Ǖ%)HFxC۷٩2:#e\xoq&ݱ#|+1yl\!fa ;&>޴Zjkga ؘŋ$eඪʇ@GXn [yRB lSe7>UU8WQcxKѼ0Dq`h w,D tV_̕NfD$>k)@ombVˏH:֎.(9\4.LiCG t&"iIXFX]׍<*Z) Ί>gd+x`i:+b$8UݙݭAП?Nm]n_&?,ܾFF/f'Vku/o[UH׫-9JqLHmZCwJSXi3R,.񢌨t4J/io.L|4 }FL!5;+9"/9n{;~WoR% ڴ$ MbG 19c"N8'SͧUOVGr%۴RluTTQvVnֺy&oX مrM%Kf` |f'rH3\~T.9)ِj }OUJX4/ap%h)iS"P RTvkʭ|ĭfU%r8^Z܈9k̟IbB \FFeQ"XeCZ'Hk9j=He#-$Xǐ=[ҷ}N{_nO#t*K34X)QK-jYH,m$8x$wGx9qaAiflS06i"*&EkJY˃ i~GqO&N&.\2[]-[W ( ?O91cqrV9 Rm։^NwKܷ f)3G4h%UȈ,+^'E$^/hqOfw)B*x)lU1\%-6~φ8'ۙ2H,&LO(#с+hMC\O'? ~,2߸F`DSZ5̘3&W/~#6,{9oت]φxfw㒒ŲKl@P>-6hTfUaA4 I%&@ڲU|{xOdpr0,b\M.$cIHC? U6e7%9ŰE7K#CYvlB:ԝkYeghEO.q6718 0eŌ(%o F~M?|AҩElJ 3'Bd1a+Xm$ɐewq=k4r29>[Ǘ3/'Lܧ.yŎ[wq07:֊O,4:9flVbH&'Y_f^K=傆NJIUS6/ܗ  bZ7dlB oՌFSED ɂ0ɑ b)VV,2#\IdɁpir0"8bf:*++Sor' PCaZ&p Ktr^[Wlx! Axѹ0<5(#$q*ѤOso=pY絗rvckj'&P>使dc{8xXpgL}rv"?1 R;%8kۈs9$MLA,=Jvʺuk~yۄa6A J6+/#zZxO>Fى>172ARL(|,(w P13 wM'5tqGsz?ԺKppQbpp ܎6O1ldwZEr̤҅[M.x5yLh 0$sԞ]->*£XddfZr0#H$wnͨ ìvz*A |Uh9q/ƒ۴O|ry>qcg!r1$Qɔ J;vssq*e>含%f&g3;7 `M<Ӭj3Y (۠,:ZEEO܏3c̱v2 aHbت@WZ*.@rbΓbdh'#ե:ٗZ/% ༹Ñ1dɉPfI)HK#{VpcLȊlPӌbC*d"k}ޯ:LS%1rX-XbD`U4NZyk!pdxFk9=p:.Ct'EW%ûkJ@vmȓ#Ŏu.LͲn@I>k $ ^xdEL@#FAeۍ[h*?ƎobCH\},3k;.6pikBs˓ݑ90SrMqrʲsG./tQs^E2[+?pblx`K~( K[@IH%H?l~4#  36PwM5s0YCY}FfB0Ɔ5XK̊UlyWO9*ۊǛ+42c9s (6KGtj|zof({P4q#Ta4Mqq:zYVكD,ᱡW&,yVhA$[[q򩄬<//`w}l9[7&7Q6>g+ar4e3̪$Ϲ1mícT$xSgdg}tsw9BNuӭR٘NM'Yqb(=M+mo#Һe]4>G ?%FN!.٠ehSqIP\&%c͋c݊&`;-BR˴T7&\f |;~֗d`[_w>5|dy?ßƑ_`Dw0ExZ)a/pr{Ydcf`EukNGtV9+3Y'#MC\ե}p^r 2`Ll #&;Jfe,bm II ?Ԯ 2|d.td0Kc%U̢ʋdTbIJ Iե-Wop!GͲk ^/;eG!If{DZ3:5U qNI#Ll2 7$_.ѧ?1g`l'##+=KS$QcZl\};oR@+Zc+[9\|\9 1bGșJ<.叕E 1NG@ _SQWt9~R>6;쟷Ǟ,g.-Rƒ)nXļfbr1;ƫfX T۲@c}$i7aeF,lݴ%:z*,*I{/YA_YHeJ!'e\^gl6,C}>+i*F;p׆S9AH⁖(%P¢rkZvkr<,;M1c%#}hj35^hd͍ŃrrKΤRۙ`w0$=ׁM̬/ԂmcI보"!܎'2y,PdLQ(H ֶ,`&Gsy⏒G*"CGQ\k&JK~7Ⲳd4̐DjT¾#0S` jPOrřrxҕp Gu;Y#MjW#.o78BK2/O%²+Edb<|YD'XtdĄ.$6 ESA+ؼU(L>qRs9X%FlnWGnCw]VdV|^yH3q8p1Lr "DS"T ^3Ѕ03.HcrsL!}!4@tɩ&do9Iۄ847'ha8(2qsJÙѼq}mK[|xr/ `q\9* d*v"E*P|vy"|rXar҃ \t|Y`͖2AbIvS⽣zIő'"#,.αҐUumik%:%=)aa37)| !iջhqtcNjOaK)ԫ$voX\8DjY˂]VYߙ,y\,QLI@^̰amӭS"Z/kyr|147&Q b>V.Cjk]r܋s|l6NfFȱCA vd6-XrkkZ_Um %NrenO9OƓ!A#YFSG }+ѦO3ٳq ,h l2$9xד~ߧU$GL=qN^?ʼnwg7M4]׶E~|<7M3c4!nI}oTi5s0$㦟'(C_pap͡7Uу7jk%'x#93bIl|_Vu8[z&'9r0l95i"nu:V?Ll#,gfqaڲSmEdXk3J1ʞ#@$$#Zhk𥳐U_d0_/3LD3aqy22ptHw4lҀ"v7֎ϏC'W̬P~2IC;2W@:[7/Q2d"c.6,ĵw?ZFLےi0y+b0dI~qU }=IrYd6V$usu]daI̜|_ϓQC&Eą m]Zj]4} bc.<\^"n`rdGueoH $wrCLJ&n#HXMFe_5izisy-8es-7H5#L)'ߧ_j+&W܏’91yL̹=R%RaLB Ȼl(WwY kYK)#}Ջ/3?h1IEv^MҎ6D_8xN'b|n$~Nl-مQMt_gڑ.~Î/S~ޅrBm3 X6q ,:Voc? ~?E 6o+olY34x@]HibXDڞrS#㼘lyw,o^g ~./΋\ɋi{DrHݩҳtk>dI/ 31'Lŋ L!6t>h)03~o2(qhQcO#.<2e)pED&nShrr4ɑ(6Y#Gt&5'G`%sߒy^_.W,i i.Fu ggJ81pcBjKrȱE*VV.ӮOj#|Ώ+glRLiÒޡqRd:ZV/UpS"<l,6li2 7/zٳirYo)s# S$lٹܴTZ֑aF ESn ﲿlfėƓ+2&VNFXa[ֱ2)$NG#qn\͝5i1,U:FT1pcaq 9p=>0i7=ΞZqj-udE|QͽgY$1X(yEڱ,Q{t&\ mrRmpZ͸5k`tpJex&ņyȆESd2})ߏGSɻO×i22E3e,l\:kJpl`4|Q8Nx,6X*˗?׶v^3n%2c<~^ x"B RKֿ vm`snj8rx\R5K=w'+PttҚϷPbs8 sʔ)$A,m vekG rۼʧ$'pEH$PE-|_ƃrkx|pK͉bKha)9+6:X62'͛8qy$mv+;8R[n.K`C&VfQ)*3 |+=Ӭ,pLXRwrGcNϴ2SРZUB-<$Rr#73# 3$Y#efIHв],AW m<O&2Errc߅2I1xԨt%T5ꪔ"ןy+d/7e@0# y]t]XSsmsZG29R&)]vl6}uNmY*nGv]j9X"k/6nO8?" 03mW%dGTn\VR|qX݂C$IoHP6 ( /`>74ϕ2 ʥK[7+)Pǿ#IO-B|LvH7o ~_/ճ<osL0&3y&pMF-$k_Z{4T0XVٳ,p&#t$'KZO&zTȣ|٥bpIp!GXQDvВiEEf<1DžݸDlIwMM\wRԔa]c[G̭xt'Ǚqc]Wޗ*Amkq\&7M> ~7#!vzKgvbw7UQtx/3dc>4XA&FDs`Zr>T};n~ԗbXO1asp+HQDؒ`;B/QKxO,}CnxJ眙$'C"FeA;UVt+(tvb*,KRvQ}G+{U,[2dy4DgŕaS\)CeSKY Gdrs0!3&6ʞCFD+DX0=GJd{.v_)cI,ѲTl*MzzEK9w/dʏ1˝Xd q@Ufs}E6O& rCȘYotf Dv]>^s޹<$%nI5Tm#VzYr-mW<l1-#~6wHFȸNw{m6k(,Ñ?r huګ!%D0oOqFI,| 7=?e~3;L̙FxIx"3v{ʧUM >7N1[DInB:3Yn\0wvPy"0<8l,Q͝G`_ƫJhl,ySHrb0ɎEp${YѺ^J3Mg21!e!YƾFvnZ_A'y^/ qSY9e4h/dFiʅZp$[qkZ_:))q2`IdF-,H";vU-Oe{7fφ6HV#:mhhşnNL&L&>ah}r9}Ɵ:`I{]L&VE YqgfG*G$4{/@McWz`ǧ[?s\reybNj җFwܢyz^2r 생eǏ1!BOi1. MIm>U~0&!4o ^e;)8Nku'Qt6+!S^ knݗc[EI־I&ُ>*@L]Ga9c$uTOsy~Їrgj&<%Tw16&܃;g;>;.a!ypiN5&~oLJ!ߍ0q_ V+${@㹸U<<ɤ3sxPN!^8Աe6BiR8c)iX(2q8<g#/1y8ؤ{fv}Pz=qݚs'پ9S UZkڛrdeq|<͋GHkJO?dxyr$NLϙxٌiI;N :𮄓f{ݞNB\h`좛6TɅECmu1B Ԗz/L#9^p,Xqs0{͈{6ĉ&!{Oj }0丟oqσ&c3O7z8ZwT3dI"nv\Xj-HoN$c#86GRbM}åggEVn'deddȦfJo܍bbKw_Ox?r9,rrNCgK!Rز,ùd;^G3fgO`˙;Y,Aq|CE8DRY%.->~ZNk_qfm&9x+OIݏr E2!}yWc[+cc̑ŐO;cTDp[ffOglǣ  ǖhEfI dcsloO]A_3G5 KaA#@PP#1TooR~\NO!?z9ȖB?uȬTe 7C5 :[j96qi Hc7+fmp|EUԚl@EY;q,HU:>W +n!oq`/^KG %/]ŭ4JnW?{%"QnQ~ty9O bɅBeDf5s3UǫǏf ,!b}Ncvh=mIM<+]m',blGw1ㅧXeƆ8PF͝%6ut[ X|>^?9<IfĴDYQ/j/4Xlgy+2vc=!Ruí^y.09ŏ %;BW47_FMu~-hݺy CPJf!DGń,@ϸ fWO6֚l3̛ezY5LNa+cFl Kf7,#e#} =v:^!k}fpQ0x٦$)JVT $)vv[c쫆ҥ-d){^nq&7y7^CU{e1oOxnMƏIhPzXzUIqM\Gb`lUG,Y3Ò#ש](&>jCA?-cgrp1^nVRCue,UA]5b_wa w*y>mbݿݵWvU`O1gxL92󢓔vrm݆mg@Ŵ7}6ZJ)'8 rݻ6 rꪘxByL8H}aد;6<ϊ22qĪ|u+zJu.A5A[ėx8WY?Qi,4M k֧JH3Uk"xy82bM>|7hlo HcەJ^T^{>6&2YLj-ƉE5GFZjדzdry[XO!!.nF+'&D!c2ݖ#r[r%Rs̟')"8&ǎ)B4l+"lNOeտAئHʉaryv$;XΧvֹkkVCb/{?ƋٛO,R졡к7\Z/WZݛ̨X-1Ⱳ#…1#v̷] ?QSq}k=qWf l(,o>!ASn}ߏ} ~_"q,PDQ GeaPF ºk믻wGfLMgCm#G`;n;r.)Mmmxg=}. b{.A >WyY;}+Ҧ%|qX^ƚOipce6>cL2c a>VMz_?p9.F(L,Y`|e8N<\n 5Oؼ,8:>C'̓Cj8iUT}|+jCrM՟:xGݏ.iFX9(ś!=:t{%fɤhU}ןOgx}X׷]7.KUyO[:~qSɛ,G$)vgV6mC993~=2Vlrd^4Ғұ}} u^0-Qg?&vIjA<- Xv6 ZL\3۷z r]:^Iݔ9x\&`kl2ӗdޒL6xVH؍@A5-;^/e[/e;8Hwa\)$dv[ -U1RD-~޹PebC"*`dmށk֝*ikRX*Yr\e9) \?YDjRoqۘ+<=T 6A_ֈI.6l&Bf;w m Rm<cxy[(YLn2"aynHbZH{FΛA׮M.[c8=6 x|N7:H9EHY1GqxϮ)]VPԡ[cJ?mxfwxRٻ̟\20šku4Y+kmF=Xx|︟5o\TYo g,!" Q0`6l3c\7Ychv8mϫWmS-|S?3|)0q,+hH:cH]2kO/#%؊ 4,mdmk"'Zj5=/ܼTwϚٱkg))H }Z^vRucVBb.!XJO"4+T~8+U|lr4hHT3nr,Yimfoޅ3(w)$`&\٠Ih;]}@c7m!2+;34'w"NZ w}|~W*21CquA0`ŝZ& l,?n G4]Ƿ<.Umě^lJl񰳳2(%`NjΪ 7UâJx^rF? b~͵DҪ93BLnchٱבe\U?$og╤Q6VkԖ<\Âelp#a'ӎRn=6KʅN}8.LyZ6=︉dı΃r`JgV[lZ?{|e<?#BѲā"meeB$+Y^r0!$R4GHbzM֢9?~F379fx=Zi]:hOϓlTwC//&TB#Y2<(S5V|BŀA.F)ɐ%V~fMO=K ޏk*||Z lud%{/.H{LBױk?qWi_T>=FdqHrHL'S^4Jx:)by8|~ibd+_k5e*A$/W5c[!G|@ʏXRlbW|ICMb!eAda"G r#I=/ɽo:ZQ<3Ɠ❒i|EW Q|kWVS9+3I!ˈc(WN=--]̝w-{qq<6Q>,a\Ɛ1سJ=-jjڡd}㛖*'euƎwYޖsx^DgcY˟"ɑgadI !zTN3ZW 9K.$16L*bE +r76\BYˑR r|<ܡ#3$m)!ʞ#VTҿP|N6Y ~G,@!c#d;ݙo7\ jS%R]+}Y_#-Dܯ8G=Vˈnti⺴rjW7Y̚\3qǒpǣ0# $ qXA'+*4N<CGqq@W+RdߘĞ\~CcBX_*TO03#L1*]*E~sZ_[^ hi7R6I" pDB0nm|z ޕ-2IZYh[b#mrzdX(THml)reY8#FHȉ†RN6ޚZ~LCvc>\#*(mv=)͢W㽸b L՛37ǘ,GT(dpTخkPԷ1y?i.oY"XV %]dTs㾒 e"eWYE$!0F40I*x%nD^I V;W&\Hqxl?9 7%)|mbp-&ybjOKDXυ'O:D%Ǚ8%5eyt"vfUJ9,aIqs,Lpy ,F]s ;|igi`efݏ9XzǚH&,ho`AQ4ԵW0v?gSOwa\X|l"qA;hY{ڰ0Ӊ l菒y<'zcRȒnƞEҺB#spsE.jdq$+|yIp'l}6vmoOg6)a0l~>lތF'+ my'Aɕ+KFgI Ȋ)b G:FPGM|b >4d"hU2z,[EiӬ2/ <d3.1;PAu$f$WƧBKR+#Co8G!T!ibU;_:6//9qaiCI wwCZS"Lv>lN˖n+Uc,PqO,c"YK okZBBT;lT9g~4JO$)]n} _;|ih>=R9X ܄M ˕*Hah1ƨ=*ztwidsmf_x[IS/P$8a$49+13_Ai]ڧLhrKa+:*='F_]+-U=eK0fgLaTkUgiv=rq`b.SdO*ڛ-u ].))Qq#ycC3#% eb&@h9q&k=fMdAN:/"iɱnڕ_m+:v'%ҷ+Iʋ湁-oWlKvX71"<|7!Ȑ3X2e Qܥzף5}˓9x\L.C̪$V$:ׇ'\B8mhdn-'O iuR%,eNnisr,Xle~37[ӽum+l{6G~0CؼG-'9vXyR8<<|JGM't+wmp:WHW ˃++) cE(۽,X#0>#JUg> ;||0C&ty?d2H>$;YNVVq.&'rb3oLwJϵHh.:Ӳm`N-hdY$û&ZwM,B"tڊ,s ԝTA-ep}qfe'`\.f8{zmֹHFy8yعQf$XXϒ҃ۈeiZ"ˡ&:cMߞI1H8C *\R~v-~[uS'>I.FL!_XfD ZƈVp`q|dC'|$"YTكXh|t['. ^#ܹO y9iE cPc(sTBpyx84;M"Պ͢ɢm: 6o ٳf$[4ʧr벏R݌0vWQD+t{B ۼY{峯ZFNi(Xdk`6epe>}:Wv޺!-*\}ŕ&,#:(k+2oJ]6XWMUAuV܎CLA&:7L .>L 2]TZ/y_DZݗΔddNN^nCvac2`%GJ«CVS8'eS:N[l.m sM? I fY#7͠#4euO q/ɝ\7MG3ƏtմYR#>\yY-᥄8Nv:P eWRj4Uת |][Peg1P1k# qefmix矏?gC/#yymͳpP S}-Par7x?u>lPa#3(hڻj*' qƙ&TɊT}"ޛ ٭Ea,|zTz <0c1 deƗ#J&(#U݉"0UTcы..nVd~..Aey2NЕU, kT&UU61x^G.4[ػNBF=<ܟq |g!f % c$ 7/sm>W5bqKK2v||(guƼx$;F$fUM?: 9i8 ~5[' ~3ە.#VŇ&|ːGhm} 56|ra3|"3,ecߎA[߮nbl?4Q9 *"Dņ\oUXXHVvlG2A&&15֒5HCVQ4Em:1Ɩկ")*ěxd em$3:u=*(;G NKۜ~Zd wIc7a/#okx uGLM|aDܷu3i[fG#bC!<1{CλFXX sMȾ/G3+HttխkVMx4I[.00KRBFHd k-u` *VY,G=TmmmjJQܧ8k{kqai8,> (R %P˹TX kN̩v`לqpro<'+d.shf7sbILn,s;dJ"w;O1 d]cm ]9hU_FS{q#bn9,2Ȟ:-סDL#ˊ*>B*lLb5/~icl(|^ "dʒ@/qlMZδ*@njcqݨ#+>5=BcSd+ A]:ޣXiVX99x ,C4S'("nip|٧ᔾs<|ى"vV5Q]&w< 2q#͛ &.,d$xD=uzuSj?+|iFr!ㄝ. $ m'<5j&Jc矌Ƞr㰛?QGr7[bkG5\R9j= tR 0/F*0, 1oյƞZ꺽Bl99S?G߉1#m"=>eBEeMI#>BG40m!bƍzOlnWf4+ytq\831d3'wdǓ -V W=-&V4Q)q]=>A\J 4Է˟O0N&,#hRʹ\X W*EUg2]<HY\KNў:޴'BBWJ{;G&^|! #&Lf]1e#?|x섏*>nK; fpJww/44SXڏ}_)NnR</( dmA? ^v0,o>^&Xd~)_K(iR2^nc@A҈쉳_:"@3&|Սf#J&vJ'TR8%G5{V@$U>nZ es\Y2&8 ,oVd A]}AcYqÍJN2Xr2Vs4R%m,]zEu^J+ bqy,%OI)ćq*ҹ.=j禮?!o"K  zYK׭꟡6a# IJ^,\1 @ьC6*̃x>bjޟ dH#YȕFucEF'ʯxyBzZ_ #iCmUC\,(q蠖^&n49|-c&²nJƀӕ i$ʸGéiHdMEQbS3{`E/ R;k+]JX}rO?L#2&Y[B@ V/%'hf1RF yc{\ukGǸ b!ak:h{oy^9S~r811q򳜱cYVRnz?ۥ?;({Kql= q3ާ̈U_mտ55בvUyoyNy^2_rrol7 To(K-hNjhY+&<| $Ѩ͂hJ+DVZbPeVdO=,g 3Xg‚Ns$f9XZ e$e1 J)|+.ˏ#fqgtsHx?Jė`Kmg䴇pe͖<× Ԣ0ܰ]%vK?>*~c6D#< :ۮ+?Ad0a&#:m[ U=S)qBIFD̘!@ɾ) 96]-|4vdI..;b*XBWz</)'0cGrwxr#$(1`3ڹyr46KDyJ`"Bookl+i-xܜ9W/ }uT ,-oV6jҡpy8+1dƸ)+$FoZU$0Ug`*wq\@cI?I-ѯJiI4KI&1%o_ U-YKwa4ьW0#+-Z,Y$|?'%0g)Yb&wCj`ssX҆co * d~U]|ۭeul$;$3qc!J7PM%ݴ,:WMuO OnyW\lx8k,@7Rs%ӻʬׁGy,IfY`Dci#[oq.z('ZٹkVb~?P6F;41"ILk$;2꾷^ׇ&l/N$U7GFE>fZ? W8D$m7q`R!wV67*TY!5\eM0cTkOAp\WK,ED./V^A֭Uى7&۾nN<,Yt?{L&1^,c)^˭w\N*LOܒ{d1Vr#drwJEUFۘ&sD\eɇ}b[vjװ sQS4ٞ͟|Wxs< &|?ME5/0Ϣ{c(g .ݙ'aU|qb;N!AresXrdb?TD#ncg!#dX&y\8.:Q i2 MeS H"y'ʊBȸ,h  Z֬Vn'};f㡘S-.Ѻd/r YMʞQtH\j&X]V9cwLp@EI#%ԫ_2xlX`nf'Y)48rq6Y9_I|܎TȀ#$+mY°߸o\qn˟V@ܬ8{ʦ @,)SeZ|We29e$IFqFRdݿ:ײgj~e5$q&L~＀'t >6~5f5y&{2(811e|_f v唁O_,Jdf&RrǝcrQ(hvJ؄}7[ѷZkVkLf7 +cLAvQ$vzFMʺYUkc;ŇnG2<;;܍>&ԽYCV?I#dȆLBTapa'Cq]T>7Ï;Ó6\KF,92D-"*_J`U(aWY!XU!(-1A ?~5NrJ <0d&S}MRD`mU:|h¼V1n"RwFzXk8E;cW3dhQ!Y,aI,Jhz\`y˕ʐ0.("1eU8D*52$f2 HMv*EsEB'=p"26V^.zGr%i."Ku|k99Lx|5:c٠ˌN";QUۻԪXjߪd}{+pٙOrq2™XFȱ.p[xZuoȯ+p,eY>%c,udC#;}|Z<2x|,Fa ewrQހtAU7mC,uM.v l'9 _mZu,!n^||!0$Qib|5צiѵ+I7;ÙEqR&$ 5_J*KVLpۅ.ǹN4;"|JE&;D.?P 5rZmd䇙dh"#@2jI{=>?Q^bKl<|@&1PPP;s%Vj12W|2O}ۻ(H[u4, Ʌ4M|~䛻P% X)65Gy'o#;9N\mFIbK~o«]ZY1xanAʌcɽjaf3>^ix!2>ح|ɛXer % YiW#m&8*|˅N? DʈMD`o%&&s &D_'8bѼoIckxufO>7ז\c&mZ/=|:rYd+`N֗xFq=lLVQ>ÕHX.)~ҷ'<|ٲR|D X!uE'e%:`G'or.q H,ST 3#q&"ap*tG,l&d%1by\11AGiaEֹIyAiNdAqcO<>T D,2"ذvͺE9,^-0ט*%\,xREȚxnPc9Ӡ5" '1'(fF$xeS,Kx#ȑOxڦKUrHM>odIJI B6Ɖ5`F+UŚAbܖ^fDL V8GiYU> ,@_eYX9vj6`XX%.0yEx9 V # I3:ں`>ֺUw\Ds&fǏ8ԱSwP=ӴybGi̤)w!YJX}n7[VO/ >gÕQ +N[娨Ա&w';m]-i9//#!\|y%PB{NgQc+ƛwkf?e&\|afqo.''H8"EmKoQ&F࿎laaE*.Ge|GI&1 61KmyZ5t62Ϗ8P`ʹ환Lщga,"7ӯJq,!+^TG͔c0<'Usu%z:$\ Odf6G9:$[!J#e5qYa+gq9T;Kd<1X~6,+)qKZ.i0!䝊&%“r YtFP,<ß}JRUKV# Y]lk [{4^:~`sƲrGșc#1BFq#36e$X{=6_>2ys-l:Mx×&,eHIlaԦ}B~bz qKDr11|ca8󡋷.!tꭑUKIÖgcL2K#KQ.2H۞%i[NgZeAsKѬqUsAj&kLJ/RQqm'!q|ܙCFSYXٱHx4=].䲞^rUs\9 0i anc'WqgrqxJذ,6hQOoϝ22eA<DIf2HY 8 |'0|?ٴ )T\HhKlK] )uY6꠲1'!Hr;9lh G&l}$$`$'eeȎ.|<>K 0O[z|ZhギOlcOCvDgJ1 !]7KuٴgyS~ ?mFB[ȪԎGFf-ҧK4I9 G#=05 (c3-FbP#nhWM .Eٗ8͗6C,oLJ{dz.U#_MUIW1圐J cg0R!NFC7FѾ5qvRgKMRCbwĊp+:A>L)v0/R*Ub~ƕ1^*l#"Lx_`^NYX{ iJFKe s .v{]=mǍ-z͹f <)9|p4UۂF#xݢ-\>TKW5T8ܨq;2LI$ w_Bh.~Bvs1yɍ\VW݀򱕗I9!|J,TJ5sjJJy |_s~8s)4oPf6"5qf^IeǛ{҉D"^U+dRjnO5Hr K!܍"\рV`4kɝܳS`(1czcef5fɦpG.L/, ̂[Xh*wFJS, ˋ!H6A WiAxj\,x=#D,ڕ'WVR׀0/8. #h\[OjEp!{odș 4R 1MJ*ly\ C|K*GȔ?k @vzl<j]s@H_ 7!44l cм]T,(ܟ{t#>L&lh]H#1M5r7je'/!26AynsƋ3|Hw?bAqвi6=iLՙlS3;vvR"/?JJmX R 9V9!&h na BֹgXq bXp+qcH3]=<+jya>ߏI96`cJ2.,lmZ _^ G(Û!WUՎΊH6 8S?$/n̫oI45ͷsti>\6<2nO/>[-J 4om +c2ilc%w,gbg%`Զby>ʋ>O.KMWqEop|J^ ~.W=qxs2tڰJQ_tVeSl|gxݖ=뉹 K[|ǟgkȹyU,rOumZsyg-1ۈy7 4ݠo,"73xd8.|!f`6^vڿHxG~Ò|t뺴qnH4lTFe竇6?roOA< dE%=k/EK.(B/96py3!B4q$9,G[^ᔿ?ǁlsH aILwfLYƣ^Ҽ"\K~r7#UVѾ0/i[&B9qB g ߭}WdW_yT^32?a4g 8NebSji&mpsKW=^{2-%V:bTkzKФ$ʲ'b$[?¹59N}G0Ű#\!bbbرnd{ &E\y4q\v38Km P}iK/fcLb3aaN4?GBkI'9nFLL,Tɖ5z)ЃiGffdli +T, +XwIj*ՔK3q9͉FlI%i,,B6ʋJ@l"|WO`-Iض~<7tP6*JE9Hc$? d22ZGܲH;M:mQk}[G7 >Kvie1Hg.< k8Wk+EkmAxyÏ<$xHh#vMj5B&>9#=a d9-`|V'ʈL EBwS[4D_)Lblxo[Cʋ! `a J]HFrQKY{G$ʼn27AYKZ|82_/+&R7 2),ojz‹ȚtA44XnTiky)*WexX|~L/*1mPsfAqE?c JK(IUuSMȩi54D b\ш|$aUC;+Z$l!rOJe˶ǘvIȭ[Jy,FÆQ:Z $BSQw >z^sݙ1Ned<㸛4د,'SKi`֫'FG r9GMɆn猓iMFR$ːv3qhr6˰̋" hmi[Soe`a1^"7IAێnG($QH[|N| rZsx㸈"S en40b Y +r.& .c{mP#H‚ֹ+$Jx3O&+3;C#H nxe{ 1xQ}4}M)V q{}9N&ϕ$sRgEf mMU֯&իKS@q3qS!@ط/s<s>aq凔bN!畡Lf]cȼƺ}ni&ψǂ㦇02d!tPyT  ݬ"Xp9qms,dpqr] mC^i"{rh9axFr b푮]*/wL8xѷ3fbc+"eXz1bx:iVۅAoVɼDNOVl9){s!`AVZpDVW%O14Ȋ;*DUE$FKN kzVxýlpYMp\v_+ Β#ɔb@HRBoJ}`&RG79=|+h +lڋ!&Me|s? H]rgdoH@55K6-sE# \e/ m6 ݯ\E#^Xw$c[? V]Nlj8Ÿ4E]׾:"zNi%[(ᓁ 3, @Ҋ)0vd'#!T!mުHx5vPOC" f:>Dx 9K+H+EuA]F^]!d;VV/KQR2̽ƱM]qV#~368 8d/m]/2╋@ TR<%T [΢5-;&4dTJv$HƃtZU|䥗1FW}Y؀jbXמ8Bώ8Ϭ5Sr H\6cUS*ܝKi󨵟&m{#dMn,JwvVUEhmhq߸v_>ݿ]zt)O?R6ߎY*ǂۋN7n۸w?.u%> }ȿ7v#}gmo__;r]f3ȟh~[w-sNojU,8>?O}ſNPɮٌGQId}gn~wxCܾ_owo[5ɞ؏~~mv~ݾU"?.|gww?_׿k%n>q߹wnݳv x?Sv_w{O|<y%ww>c}w_nmYo'ҵBXQ=R޿QfNϦto t{x̏~ϳ/7oqo>o줸!"\eo7boǹMw՝ORٗϻ|a?}n;ݹ{j!)1]~:v2w}&߯ovuE$[ǩw6cg۳]~C Ϲoo}[_kTv8ף[?.ݧhF8,>{{p5:z;|4|[k~}Gcwsq_OYӇ?Ǡc*}oۗs۵kK䣏{{óvy~}vo+]m?c6ޟIKwtnN߶ۧw~o_Kvvk-і{#c?gc{k5Lo 2{sWחN[C ش?c,7߯rmғg%o;im}MKh#ܿwҶ=߿׹nu#ǩGu~x5lvvk~ NƯ>Or=.}{kZۯj\N<lOo_^sѷ%NeL _ϯq?ohʜ_dw~wo ֌#g/wyMn;}{woO@ggcٻ/˲Zo혏7\amy_ܻº2RI~ykooloj/dOld>vNզݯWj6jso mwwrXw7o- >hrݮrol_G4x-}k~Oӧw'5#3w=ߥ[OץW]XPx}ww7O~_ZЫ9\[?i~㿾~[_7r~?{?sr};]ݻovUߌ VhݥԷkg{sn͖zd~=q~ Gr_qۧ1S0^6]Zwu}mシ{_[z[ k۪eϴw~;}J5gCw;kq[߅V$ɛo>;vlo~n޿"v/׷V^k ~Oڻݿ[x Q(=~˳vy>w~;(ph'/j}esmOv׶]6< gfm6]?U:u9d~~ٻۼ6os骼Ã<~{ٱEpk4IǷo۰mN 6s~F#Y~G7ݭoesGN95w^e_N>;3~zm[mʪ 6nOw.͗{]]Oh߿MwZ^:8N_/gwۯEoj;dq]^kW-{y|kO9mo_]5|~Tx>QU.vjsݶm\l?Ok}nUHL_ |oMuo·4x4ikMoӥڿs[q;m۵o^}vG_]m~ҹsS4y;?[~w;W;w߃%A}~[kyZ8ͿOe.~M+}mo{[eR`19*'{mޗgwM/ _pW_g{bMnwsR;9 x_~׉߳mG[Zs(q.;w>Ϧ۷c' c̝߸}xm\WWB8}xnoX;6 -,Si}n6oNc$y!>n>[~~6]zaassets/plugins/colorbox/content/daisy@2x.jpg000064400001264663152510437610015243 0ustar00ExifII*Ducky<{http://ns.adobe.com/xap/1.0/ HPhotoshop 3.08BIMZ%G8BIM%ȷx/4b4XwAdobed        !1AQa"q2B#Rb3$rCS4%csDT&!1AQaq"2BRbr#3 ?$+pu'ǵuހSO hJDRM,b$ `M~P׸U}M0 PKt<^nJaRN:T˻5ߥHNNir5UIQƙ&i. NBlv^Mphyk{@V~T* R; )f?g[oM-ڐYVçmE *=>n?u kv'wJTm/?j@7z0k>Qb*_րp<5.i x~qSUH Z y% HN:ڑyP} oN /Cۭa]qA=?䰺m<K_0}5ӭqRVS :PPO{Zt֑ uJj `GKyZﱹPXA{r#wJa;ʹS Z@N߾mt@Wv~ŴҴ`2çT  =Qٮ.z fO!S6 ֐ &u2Zvh@KZ( z\ֿ#UԅۥP2 CkuI+sA$)c~`"K/ʒu7HoqRom"]LKwU Qtڝ-O$eNB7|,[Vm^`4<>?@Z߻JxFڞeʘQ#ڃž#P G A84'ڞ euK&A<ʞ?Ι mM:z߿_0O *l,rWi 6|DHT8"t5<,ޘ\>h$@ViJ@Q F $wƃb6tceVoA)P6t,l;~4SQU==? [ 3%ʨ (%-if;&^t=S +* =i* xP( EO M 4^*ڑOJY%/ަ@X0 iP)6iP]Nz{qPi&ƃA5Q)zJH)~d'q[t"}<) s{S!Uҝ%!eki(%ub j xހ;P.ґwԍ,) n)gO ߯}uE<_!pxK'Ǎx2 ,K{ɣpQ֖M]ަч20CUM7Qa 0z^<&֌kڪ&קj:SBRA=~+CkS"A*0+qjyξ^U D@E41jdCހu %m,oӽ#@F2OsSOo Kuiڨ.:{ R$ƦOjIXTKi)W$&4RH0S5wN%MʘD 4FH+nƒx-PUQ)2Uփjo۽ R}B|i7}iM8x((P?OQ.ԩu7={ԘD\[0,.MR gU[xӇT0kuAk`)42G^ ۿý7uΌu,-LH=o<HO2o=Aki~wkހ5?{TԡIH{h!:vqڃ[A߭ N<AL"fA= xPe=Ekil*T(O[_@\UBP觹" [ۭ&"֤a=Nb7KSaS_*Є40AzdZV (R?*GLP[MoC"_zUBBVAih5in񷇕-xR Ӡ*@$-÷?TKnh ڀb?e kS5I>4^2Xt>h '_J ڐAc>T: : ؛MŴK&Aid*r~ө'槔oƪ&7:w:u!^]u4CZ@:M釁7Bzs{uj&2t.R$[ @OƦůIOo܊gkkRۭM5vAtQm;uINTqn*POO@x=NI`^ie5A:`XɵTXXƞ4\yp7+MOPx{u$+P-B^ΐ]EduUڙLTH+FU ߵ![C2/S yJbP Ph:T*X Bn||#HR2. ڕ H ש:] xX $*sm`-\M=Hi)mz 7(ɥ_Z2,z-}iu?QH 8Bp 2\Ӧ$1i@FӭMyRɹj`6'R*j M·ʞA<5kZwzCmʒjmXYOTnWU6sN:a)xݩ,2A{4oʞF.n ;yPf }t5&&}d }{u#ځQkL*A{^d$<=OAނO$/8AmilioH/BPXH#@w򧑁=tdR`7HZi Vo?ڢvcrGޖUKx47>_ӥ\b 4:xђM절$.(z t#? p:0:[:ae}?}V鮔\6N$k}h%O]El ?ŪiuSL"mKޤSMGJIZ^x#ykJTPۇ֑]GH%nN!&iL/s{_AX~~Žڝ(YMǍM0d[ ~ښR Ei@/R «)A$qN;uAF xt)fR^¥<ɹփHmo0{_Αc'ҙa*OM6 I\>HZ֥at4\H*{Fk(A?_#A,DqҚhm|j%m>U8<ƔIƔ¦mA[Ocޙ6'Oj3vMRmm:v4C%GրtjCO‘.:U NDqiF"O/\Mƚ}mk$kc~2[aӽ _jDx…+d.7 {饼jikڀwzdm:iޜ*2?˜M>$tw4aoKO X5ZOHQs04ץ l)`<yH(N^F-<VϵQat`[Ȋb PO: {Ɇ[M<*%=;_J20{~c xO)FSGS㨪2 ('ΤΥAF cHY ;cM0€&/z_~4Rx ?RQyYXsO maZy%ïK][[-2H?0/'0Qit OO-;Wp[#z t)K!%=P# .)l~!CcH`-m){ uR0H:FƘX6iP5œ_ިp*t { t釯c.o;S 5Z 騹۽NZa`[SI zӄG۽PU*׿kPcvb|<)SX = 7 ,6Ҁ"\7KJdFcڙ.T' d_jF50۠idb/ׯM(yGNM;mO!t!AߺB2y\^ITKװI'x uz ~R~b[A}o*GǷKрX]=)O#xV5Ki6'p/׶i`(qact>42 x :PK}ik?US~h$ǝfB-B)#ja` GZƨ*m5[?@JbuZ2K# ~r#pQ4ҘT(Tui4X( >4@k[~4;Jmk\! /nL } 8L$zp^|h8I$uWz %)Qnkn[JAE#@abh ZO@i( .,<(  )e~€:mޑ[_1TфbZC+)nC OJ =X @QL,t u2(d+$6a/kɈ҄Zq+-Db},ݻ8E=oK&< Od|* N\ީ&:U%rƀBMOaH ÷CB~tƧQB?.Ԃ^PcH@m 0@JZ`\58 QʬӷqO+m44L5@]@)m>4hlqҘUiRUKTS5FQH@bFH Tau2=-֪R\ژ[JăkQP>azҰa<l54z˜zá@CZ p=˽{TPn{th PtZp op&U! xU`oҙH!M)`<]GP=o4)KPK[SB+Fanm6%§!RC( 4PV:xpRH˜]z%L<-q&zR5::Pi-ӯ,L:QA[P Kmo{Q)QR_YJQ:y'_0MM $tShF rh @t$j@-JR"7=iQF?m4?e'J@6^J5NL0݆K'št ƶ!~PA=@{g^L(b>o@U (4ҀJ/r;CFk#Bi eׯJ!Ckt0OM0XTMkƥJzS/ʀr~i@ln|:RqH'҃]T~b> ſ0ק)<{(>?AS UAQ@6۽2FoӁ;t*^z( Em*Gz[.|>luJ+"v /LAEJuB) NR/FK)Ztk8Plj:y"zF-{ 6:)aoFBYX)~]? GcL+ӭ"zH$9[FHDRǩx/4 OOƀ9ƃE?H4 rl,Flj4!|h*=dQ}-H/kuS< [e֐&M[ -HQJyTԅXe*dbsnդ,M0PB>Բ_[__ -5}ާ9{ZR|hɩz[KQShɤ{R<[}?(5O)]EҬ<h=:r@+;Lqrz(mVizNM,kHF&*v+{UJ)z:߽0ʤq*`866 uk7^IҚBIUd_*a\_výLo@SgjF*[A&$)߾g هy }h!nʌFBGFT< RJO}Gzeuzt ^x[zƘU2?zFc~E'$ Tj:T K/%CK#" GeRtSUJ)TS'*WK[oo4#S i)XkV Lv^KE N$kʌh;Q::iU@Z#O 3J<-sRC)m]Z lOd =aS }(-~Srm{S>}*F^+kۯ/[~zc)T[֫}tOlxWђ)$߈ZȆ,5kLs)V L$E xw~ԆSmcmiRʀyTdeݭS?<@S߭8o}U)S߰,O!:[^סminmPҐTo@xh L*˩L`:v'$SH'ak4_jpnׯJy7 2~> @D6Ɯ$=? uj )4JUoҀS E[wzG'[P]ފsp TR3ׯJA%U:]{Uwq:R5zܚARtk*q4d*h5)_Mz2.t[kjy d ǿO:I4` "6<׭ M5\/TSƤt=bzjA]Nnpu!t#Q{UB4mTJFB ܃H} -~R[~HЊ TjI7J ( Xz uq|5›t4:RPD߿Z /@x7KH]T|i`_* ڏ:y0jboNR0a'ZpjT]:iHѼ < 6a|i2H{jD I_ ) ױB 54nM{v5 !ğɠ(Ɂ.•T16 K@@mtZƙGPT5Lﮢ-JKPh+}|*L_ l>}Haր{i߯+bzUZh&Ң@cK*iqL)TT3A lM@\)P Zu4޳kRUb:۷Jeڜ<@&zaBtH ,ms c( J.5'ocASxT<*lOjy,cf:阁s(,.? }@M{ ju7 Q JAL}4vϽ}JYF@{Jd>Td-~Ҍ-zk_JZAbߵ wizkE '5]箴,_:Y0O4S[xԚGA4HB)ӿ*eUˡ. k|( 4IaH*GΦ!*u5# n>:uր kA7k}Aae˦ʂO~vROɄ^8CO*h1Tl:"{xTʣjr%;-Ziª@::S!U *e1" r{ЩWo>'饯nDm.>IoJP{˜[h,ߺEw*o)`Lt`:PohM֠I=jikx)29۽80 a:aFHX#QJqۿZ@>ZڂWqHEkNNx/Cr,tPz.G/Xi-o*5]}4 Fijp?"pF oSN*Tt29M`~\^yS}b{k-@J<;S5w&K$ǵn4  \fI6:kƐC-ŏ[X۽HR05tjBbP;[W'Aa@X qo{}@yPu <#Rj[zSu@-:ݪ߇]* T΀9ZL"vErO{[Z=ž@2]E=FA+`t)XLP,z l0ћ-F^0vk܁H t bno@ & 'A{IU:,z2KikQRab 54M, jPu)<ʌUQOUAmonΙ/֘YWǭPN mAe;2NF *>7dMFOCA@?{JuH(uZd|{P5C`у+ kll{`%AтTXӠPU7Sb6M*L! m(.z{m޲\ԥ_€7zqqRN4ԩ5ӠN)r5Z֤jH=5=W?o* X72AKS! 姅2P ?qtǿKj%TOK_@h)-J(ZװjC,M3Z5N{Pv֐ J  /nt G=jS ߲+@]O}8K<%(,?l? zA>)Vp4jiK#:[#R8 kv}:ަ 4400"XC64d#Mudu4!u?Jp`]mƞUDt)kkkSJ{D< ;L4>zf@~N>J5=+$c[uME0gp#Oh*pU{0}6h :v[vBKԅkAmcdb5 p`Nt`< ƪYz Wf~#SV>z 8:Z ^ӧ쫀t$\_T I@xSX%o{veuB:~I[}{J[6M(04ަ)~*`K z2Kt֑,X [LR:i E(r54ԍtN/| YL=zxUN"lӭ Ҙ\i6beM;̺EԂML֌ tEw֐ A ۽!H먧TAM6"jL^%(A߯R0-H2Oӭ#Œ[ǽIFbu: t=z m%t#ǥ xP_<۵U t}56iKXykAURK ZPm)`< [Aƙ'@AnjY G%4d q; 20sPA74 Ԁe.H)`(mz3s_:EpzPi$0ƚڜ,NCLzҝu Ҥ.-kme>=*pbu!T,'Moa;֒N2M @=TSMֿA5';hή@}x1p$6Aza#y}( h4PUb{Ah jt:0h1i`djh@KA$/Q DjpOW0ajUL f};ߥVmI' Hu"Y66сj@`-ӽ2[SҪ{~d('ZiI{tޘVw(ÿJ, an;~ m4l44AK_/Y ikƕ%뮕5!H|Y/֧ kU!`ntUȥ}|joCҞ*ET QC{nL,Pjx *"ӿjꢙ-}2EրjJR6жɿ'@,zۏѐm^ ֌QZ #A LϡJIPaԲ0$w*i?zdmbuH`#oc#%v ֌a }dJJRB~Θ B?an*QAAIZ(>ק K}-L<`^ʍ* xD7Bjz Qs⑈0 QҀ >4(@RhW72}<%ZwZݩ@s( +#FfcL{w@Im0 aRtJiQO+G逸`A S8W^@@U!aO($Jfrh6ۭ[ƀ2J- ?zi4ƪEʙM 5 }z`gHб[԰2;PuKF ==/O*fxThƣKݻonĊ*ۧok@{Q[WiƃXڙ.4Ҹ/H Qօ%@ S)`.ߺ `)=D0p@?nƚf~TYHp)S=Zή tj0oZڌ#=t=2o~֚F t~zaǥu[~ejEtd4 >݅#U25JeS{Rh!@'~ԉ],/H+#[S@_Aj(j]{T!Z5snkL?^BւZޙe?zx1 Q {@V3ހkM GN>#Av7>>6AH./F@SHn_u֘ @yfeP<){M#X7ۯJJ_0:8"R"hx%ue yP_A,Z>ޢ?Ҧku𶵚 o*T.}{`FS["6C^…@^Ԉ2,,`ڏP"~]IT`D4}*=zD6!S%ν az vBA]m֐@^41(*#SjEENRz})Pc)ҫS^tbbGaUEҌ6J z_M,Et!o=:/Bcr@|)Nkή$TE2zu#04z,+~t$XzR*"A^)%pkHv``zT82޵x=U6_ƃH]tTץ{vQ!EZí% 0)dVCڮR#kUd uOaM+j :4O,*ēA)>u&~-H(:RiO!ހНh?M zR5mX1#6Кp| V mOnޫ/2S,i  R"^Oo'uKZ q-~e[) ۮ5ԋ\8164F =?mh%I_Ƙ)$'YTH{4k6!^'k]#&=+E\ 5)kL#O:C+췕 T0Ӡ=\OʰҲxZo/ n ڤR@֖EZ?@h$?( 2~δ(6^eH$w`6$j>򩰕&PE xmaczoК@YHEka?Ǩ޿zf")d'}hVAzy,$/H۠j{M<:[@}֦IOxb-t45'y v'L*?*`{_^A2T zaQ|E ֐U.k ZȩMJI ߸ "`HTۭzaGM/]-ւKF; :Z}sF `G_{A/m h6yPaԞԨc`l5LQ~ZG-ڂ)4Eç+L*SK u-E#/H:ѐ?6NcxPU]<$~ |ږ2+j{<,tJ)`t?zFQW*)ԝ{Uc†֨+f6ސZ1OC" 1#O]+~545nYU冀;BĶRX[Z#mz V$i/m-Sh:ӉUnl+XF{Ձ,o/_*!94׷ڧ!q!"}h Xxw!Mmz/[ {jK؟HH:iyw=:yҡF>v"D[ԐnNJEE֌$@N"RUp4í<nтT UF ~J4?Tx_oڀҘGr n>,)2 6=|ji5ýQ.Xxi !ՒiLRk) qkƊsnͨkTR /d-ژQɷ׵5YP'h7`47L aFӧ֮%'SHx 0F@ ŇzT+j6>(3FIeA€ _/™N9RFU UBxnƘKj4<:xR ƒXkJӥliߥJP1NK^3]zS!n>&oJa]tP@… ؁}Ҁ-tmOIANTPMBXEF;ڂȻ:~0AchB(>ƃAtPaΦ-!/*r͵驣!L"祵ch4 M/[%JHU=_:O\ϭ3GkI]FjD~qʙK~dpmR2?ũUX#HKkj;0"nz #ۯҘA)m) ?Ɛ.jY0p-b"ƄGր }PcjmzT)n!MRc(Ι.'m)ja0As}iO)P]>)րmwHA izd+O*d=*aWׯ종YqIhN#')SXu#P ڏQohŪp`4d^})`<&uz [,Oki~aF5ΟHRo񠨪/Ǹ5Кd4>tMR ib::d:xS cna#"Sm/֐]|{S5Jn| i\ʕ ;uҒ4R,.;S8E4ZX!n۴kZK}%]G_Pp•0o¦9];tUʑakKMuUDc_U!Q@Pz_Ҍ7@ EԑJY/ְ5AҪRɸo\iEv=a/ $!"H@:$ҴDXRʃM&߿N uӡ򪚐ôyvfo5^,t&ֿ쩰ܝmQW UZ6(+Ҥ":PkޖL9l:uJ.O֧&Ζ@ůO$ Ϳ}PPUmH;ޤ~PzxyUȑçjx$ZԬ3׵E KF/asNU5n?* jd m<`kHfM0ɻu^C<W>&$󧐰-25ĂU[McPzGw  .> ]@m~I*H>`FFM Qr#(UT H)0vm*K_JMϟj DR la< MmP J/niioU V5AA}xU򩤧V7Ԝ\)hR0۵ "^  -c MhS7@MoHШ5ZlA[ Q 45_ƐğHWQސ]A#ʂX~vo EQ0L+cӯdt@ olJ!~S.ʤc 2-tPS֘ ?&׿qzFeR2T`e &P2C齾yZ5;y{aL%A=:H<@NԌ)ZF Q=iWD'dQ5ҩ4OjY\%ϕ0iЎʖ*(סh\ JiȨ}0 x~i;PJ; _z@"Iv@X7j-ރxd0۸om{H-_*FvzpOSHzZu#e ?0%ʘC<(d6>4K'E2&zWp4;>4_O:BpuRV2K}h"N,Ǡ:c,b!YP"[ǨҴR1XKZXævx:y{f/)Ce%u (4{^ZDkk]`DaZHOCUZJtwkx~Fozm0h=|MI%M0Mi {ցksO# <k\ۥNBK *m ǽ*K/ө𧑔>;S!;ѐaё\iD#qxu!SQN^dcnT0R9E+:eY—ΐr:45!NQҨ<[Mt+kK!RyPah{@&_RӾsL%tkQD$AUJOY huX\h{% __@ ԁwp])iOu@>X!@zc`ۦScoƑސI?UDEPPu@ZJXVުFQL,X@4?^€u&X˜NzAj`'SoZ x#˜Y ztL ;T k}i4$[h:ZM_ʘ:5D")u*t׵ >=)vh3٥PF/{tR7H<:[çҀCL){ 3jCOJ( Z[OPK*ݨ 1@ ;:kX8oTKh =4;JF+'Bt=|5M4_o%_5DkZBx~A#@A߽0*[Kuփx &(s@ A 'ַsޑ}5ڐAr>K{ijo67Ӱ_ވ8 K< {yQҙ,([VgZF7?Jpt=iTU@46[K! { ӯb|ȤH{X•qSʤ=*r4ƴSmZGހ2o=+=Ij~Rw:R$m{in5tֵ°?Tv)~/a_SqޖCt$T|zH@ ,o 뭯ހN[P K}iaUZd OqkSiPZbu,Nͭ\#IU \Fr ߽#.TP]:ʞtD6*ZAwki Ɓ^R) %OJ}F*7B9ݪ8Sapr-:J Z5ӷڑv,/sL-K! 7[CH.u:xS!/ڨw?AO!Fk:T o/ƘH@Xhi{hސC5. <ϑ l-ҘFOKL_($PZ֤)tҀm.vH0`F@ jRtң _.d,? @_3N(^*6zyR07= [k?@ ņzTXߥNMuq[S-M**u2 OS#([ʈKY{˜IQof+HÕN4#M{}SEקZ:PK`,.@+0ZR:$>) UHMM+Xqڐ{d'w=o@TL,kiJv~H*GPӧJ:1Tp4j 맍 @d : MEpTtmu遷%%@ *i29&\a3j:4UUk.A>'Qy+۸zAmt*:zT|Gm(z e7 R R!&nESFcczdӧWe:j@{vW"V#J #9mקNv&zփy=)&Ԓ>jؑjF-H(@4:Z{hp-A.cO23ޖJӰ@7FʋkSf8Zm [up~E5Z"_8i12RC`t$kޤ=iݮM"-i_OBOK cFV;[N`'NTOO²}Ped}hYQКB:ڌA=l||i "ki_vG[kW6‡QJyƳ 3\ݫ; E:o#H .~T3^p,O^ƘQ$XUi;Rx X}t jN6 r[oTt9OE )#~Siץ"{}$ۥt%LAq6= ƔUО|%@".4P:As13ٲOq1 <wSU# &Lȑ$;ַI8?,Z'  zuBmq?q!YfýoD/wctxK؉)N߷D :COqsنij /׭ @Xk@7<B۵x>cjX0VyxS7@FH$6Aeu`'pb{aVao)ϗJAQ[S˥ ;ߥ9}S@!T%t sތBFݼ;PC~e<6f <) B촔K&M,:t׽8IQ}|<)zd=xR444OWSATK_JN; m֑s $tMP F'SN2]mZ(TR _* "QS :~Hv}i)uk~ƒJhMґ ˜2mQUÛ~d{P`t:kڦ7J^ݺƤ =Jd[zi2}]*h[tPH޿ 5@޳)k[,/֖L&:Ҍ!Q1nknR-USFң`j00HkU@"*QJK;bAR]؂zSr>YNT~h!EFIR.FJg Pb{wK PaH.㮽 PөTJō,VtduSbVHt x4KXv^F 6CE,тo֜ z hKDžl&l'KxXa{czҰXoQwmR񠔕 kh oHҠ-"$A2JNU`1FK}oF ba6X:uQׯb*i^M[cuƽJ#ꡟ~ƮQU0aaژyߦgU:> 4Ɔ@,ln<b 0{jAW KR0$SFC;AdžO;*RKw󫈧uH֞NA ϠQ1kVUQz PܚeLkҳo: ]E 5< QJ%: ;#7^,dvFQ|)CL&#亳ƂSW?O:&'/|Od,؃#BfOc&&Cc"2Uo_Mm|l̠Z ۃt 7VT{0do݃wc8M!!m\u|O#Ev ؟ i?ܿ,㱤K`)>jgNw?#yLx}@Sӧ_ z|i>dʮ̨7 8)/lX!2(X6˰~h?|T$U(Si~esqӺKT_l Cs"9&6 0ڢo>؜2HA̋po*O),I:$`t./S&>_3$P^·ׯn<y91c,WIbqպtJsI?ɎP/cXO'ǥb,@%_MzQ~80Yt_H hX6`mh% >dk@\)4{ѐ{.zJ ;}E t$Sd[j:6^o*t*Oc?HQKw󪉢)VK\csސ }? F"Ƒ[i Zp.4ʘ\A,$aƐ B`x `2*cӯTxXOKRlOS4n,zR yCӥ? _Ɯ!ǵ2QٻPAuv[jZVxSUoHōފGcєޯ (VE6”|)XPNZY^c%\TdeV ɦ_T\ ԼuQAa;ƺUKU4(\}|~i qiA^w8j-TIY.mު/ڴ~`LĀoңc*d{ֲaV$6|"Ya^.4TAdÎ݂zUH1_. |8oFTl=5uuuef؎C+1 PéԤ]rak/r!=ʛv vҞV?|tJa+.P?ʫ:_242LdlYKtidz,tmFPoz'1LJҝqAu"ϟw>]ɧf.S.PPOTMDVm-Š2ZHHMz4YGʪeHAozK;XR5o@P< `L!I K X;QTi_ d==o>tӭ*`ƥQ ˵ _BH{ҡ^=,^b}h$Xu6OJk `u3Z u" MFz˵@D{J\ؚ5Iam>UT]m4&zT$YOnEՆIJ~7rO5mL c5T$,nu#‘%ۧsѐɨNKy5 wi֕A ȸoQ'Oj%F ~&qajy;mޥE%{*>5uֵAӦj#*E^} R_ۻ\tzbP1F[dӤI(׽ZE€"F_]{a3Xx5w߯x7cR>4 *@@{P4h%AMmH<U#UAրzр׶_J$z@{.@^Tmƀڙ*A U\S[pߵ^*Lޤ-4wu>ԄO˜xF>7t'vK ZU *yA ӨT[ PR4*!R6^Hʂ^5*o۵8V4 c5co*# FL'ҠKOҳ,Z>HŴi+PힿT۩@aLAaSǯj:xH[֌۽#HѮ~Kiªlw *I^6%h H*Zө>|X{cIrtץٵrfP/)˔a&V9ZM)S|oy!Y]}{$OG"bA  6B{7W+#)[ۻM{UMIL|.3k Rݢ(?}oTS<'! a\XD+ ,vχ ˈM*O CJeVRt?o o>ԍB4iM 5Ƥ%OO:CX IA vޙޮt3j% S[Z ¨ߗ_ @}쨴EK!t$U*mWA{ۿARnNzAPovH Ƙ n4-cmzPCJS ڙ0*@:FۥE+ӥdӸ^vPj4dV?*2K[OTz #y(}HK( |i^ǮSn~HֺíiaHj*<5$k5T p T-j(]|+ FNz8,} u7k P+ӥMAkkRn5HHm)Ԑ,:v]*JxVSNڮO f쨧 RӽjEւz {U69/_!n2:5O w֤}zZ,HNۭR Anvhy{֑nmsSiխ(X7arc+"YI&HSh2@=v:ƨŮOع'K-'CeDWd1 Gí'ENFQX⵬8zXw0pyS. G阷,58QpE<`ԅ"RƲ%}r"rgUvzdiqTSl6xo8 $Ě\icuV6+Qu-'m}C? Őcsrvjd(eWk\_ u/|%N;t"Ȏ.rPln<*^=FրRozF,{*[dcjK*C?KSH*,)åJa-k[񩴂e~OWH`;2 ?´n*Po^˭}iҀ{iƘ{zA֐O*P.$6QO!7Um^wXj)Y\)ZjIMER ۨ,oc&C.@SQi<4J5RVܞqAHTS.ZS֕+Q=/RY@bm}4d?Z2K4mעji,Cqfˊpޯ]r/ 4ftoYyaW7b3!ue %e?kSTȕ]]]/jpW8cY=g)0v# tƉ ~?#;Jؐ:t6(#0-hB SvOa1y,NGҺޖ뷰 C&M)NJDWiҗ,'ots3ʯ19.qBR};FEg$?'ӮS0 lDEUn@ؓ' _y 7:܃Ra?Rϟ;"T'[}*,S=lƠbM~ŒˉBdMQ5zqsAʖV8*kyI\)ԭ'u yj*nN4-GbE}Z 砉LdjTtRxUD Ȭ+. ӡn2_P]p @V_NKim/Ŀ'!Cnun\{y.V#&,\<.{k\ka&KVvVXDž,DE=FWU+_Kmb~E(aFB,E2h;6!p_ªLjL-؟TMgj*>9NVT֋V1m)E*k`h azkS*N4'=}iXiFQkTRYN(I BzU;ѐo<&_H<ַAzBֱTnQHm;V{Kw@δ I`_wQ!JAަa-RXPɩʙ,ɺu/~˜3cjr&𫄂AI! |xZ` >CNM닓c~ʖ@ѐMޢVҳ GֺNi:?u(ø4n ?qFv` ` _Q֣ ):X#v<t: vh0G[ J tZQR~ʜ GmI]|Pto {S%B-4_ʧ*n $zd8}<<$zP }zTu IHV;ucHzN|)-ߧQL K{O4UKꀡn4@x yol/TѐZ24O:Uo+) z02nhA[dxź>UpxSJ|UA%hmԁY-4 H*F7nԍVktL׾ UV*X;e4:c,;R ULgibIڷ;G<&줠lI;oƿ9ؠxJuO]}zeϿ7|ˑ㽈G] #TjOgp;*lE,"jsY=M*Xj5*f#di![Е_@mabCۺuͥDžƀX+9U:Llg ,6BA~fܞ佈Ɓϻ+ZK.Um&9FFq m͡ʪe1řO @ͺC#>:*.HTdo%q n"Ascep7 )䨰bt |hf[HoxQfgq{ߘx@$4ﭩTcCzvl< ʗu_γH]5`Z< uH6 R:)x #|`^>HQ[ӢOxx7Q.(lAzj;`yJS`$oƝnK#R!W,ѷr.GT?mnmz~Ή|4J\0ʄ2W.Y>4yx'~`e$[F *6@׭ zT+;S5_1H *V#R dQ-ҥHQzIrwVB{21 TSkcH$ ۵ T_UA&6@O쾴 svݏZ+)7 6p,߭ZpjŏPurI `t𪅇SL<á Ԁd IQACB#[Ji-~ .i 1muΑ_"@Mzΐ]ÿL,G~3o i۵M  >:i@A ){h) {_Z u[xB4 _< x,%J02S)`ekhu,AueBk֖*ӵ<#Ƌ+m!w֩9\oLepP%)+)mis&ޤde#Limӯz!0ԊT[n u4 ,G #!2?3ebd=ԁ~Y {/ޜhG"B䍊qzMrz# -2E߳0zzu[}heF2Dobӭ7$dmtR;Z*{$%"e_El,|,m$^UTwѕ3b mH0^E&N]3dN1cdceoReradwO Nѓ`eDiH6ܑPcQ-ٚ`Rނ/SY$I:CBp@=_s֘5!k{omb)$eBJp"Lڮ%{O&w'{IcxX ۾>LЖM6/zq\c[$zT)TAn t$ j;D$F[]28 .{y"gY^,OLJ30H-({^ڊAu]ˤ jNUs\n t "muJ.F7$ *MQoqٖ͊#>EAe+\g`HćU &5=:m0vaՕŪ0J:td"#Yzƕ%5:kJY!Q֪ r (AXZ8eҮ}oL46$ t?@T1SA<*piA۽<): 75Lr}k3P | jd*c=N6\QWk<)v 4k|jlmiftŻ DMtֈΝ<WXdA*jB42X-)GzA,u*SK2Ӹi`MvHG^`Pw t ["B"U r0j "G_JnER 0Z FAKɴ¦jrOzK6nO$w`)c2d56$Z@k G֌3K:`KA6b<7m;zd]K ({7bBTojd- UU:i 19(JTPON%1IڢZ&FkG֢ˍM2ԛAhH߰ynOFD9ݛ׸#FbDo:kJxchYFrE\E=X.o@ې"u@y41d@H#I*F]M_Roq=~ƖސjύMX{63Xl ǖ c[ Ɩ)x2b,^TUscxUQ{yu;i pnIBjFU+/Qm +a,OzF)YH" ROEQq?§ASœ1!6?jB嵿 xzR @x>'֌kK& žIV?S~߾ۀ?o*J3`OڢrZri,Q,:Z* Ԏ–E-  (J֖"F}QF u7SKbJ #[*~HX;ѐ>^jy ksڪRJ@<rWNK6E \۵Sɉ~ΟJtAtR! t DFRdBt0J' JҌk^_ʨ,ՠLP(!tI5D%'Z[\AGSa~Ƒa)EA/ 04@%JpЏL+ON*hRh ԏU&ʑPыj-QAE:aۧJ/MyC_Uw!PkL>?G\opM~ZZMgnv&U+I|l&W%g;cf]MٕJ#kd[u*nS'8㐄m]AȢƆ3@8^J\x^dMμv7, O)S3M*]ݪ2xƖVTg EnnZVVQ$Gͷp>ԥ2K/)fT@SO%AwHn{\yJi.k1[y JtDL5'1υͺdE,EtSԛ(:֠ME 9XdÓeQ7\kv-Tb"`Ǩ֚˪^LY YUEx:SI,R) t&:X EX\h@{v%LAYU$A߸EF@_S6$)ob]K ֺY2Ę?.<5շZvL|?I|Һ#r}@ǥLY)Am,2&H C!^lEft (oփeIx4 x:%R9THv?Y HV:Tӹ믍#OC"WBݍ :;wR\ٵoYJ:zM‘Ty~ΰ9Wo5p z+},䝀<@QBd=a( ~du=:UJiQjjaޕTa :߯"FꨣAlʙkh 㦕95Հ]h4ڂ & v =3,zǭ8t*sQVpH+í+DfsQTRUNʕ0qҔ;6WWhX^:֦:4@ioKpKq).ǽ>ZA _@ kO yK5nݩ` _ަB-jtPHA4WKnzU$`/Ǝ;j(⸿*aTcӵ,(P?uMZJPkОH,,fuU.ǿ azUHBҨS¤.As@0zQ,-FN\~*h[`**1R^4iBEk2xt*릟M :\Ң (?TӰvPOAmSNM(`tשYV=(5 4 ] bQ(1op@3~™ yL&QTI .oր Ԃ*O%I7Kimn]5{X_{:\_4Zݼm%T{((1RMj [Q[A{[0m4*V:EAUC\[۷C#Te{h>蟚7bƊD%ai Mؓ4e^@@ڀ, !ץ@%YA6S?ŒUV֞N/^(Mebϸ:5/LKfA:~y$mrl j ҹ Y#GRܑs~60HYކ6cTlxZRlBM{Ԫ:VZ녵1;= ǭ…'R[Ծ4ȴ)`Je7$PV`A{||Q 8V@ HB>d6}u⦮ +ljOר yԅ%RCæ8>5e`$s2a*H_U|HNB.>1MЛ[ʹTzkQ$=ӿQRI5PR> \XU`#R5ƦĪb3QF'P.=OnPIJf85K$ : ,a=>ZjV,ִ!S:ڀ_Z欀Y{kLX WT:S娺[z njޫFO: Rz`4у-'K6(tZ H'x=u4` nƪLFc𢡄 $@xѻꁄ`|4h%\uҦ .<)u}~ E=Z5zAU^@2 ?QTji JS%)ޑ, IC"QҐ'zq/\[T0MR=M~Z0E{T[2c~k#ATԝ6W jp28^em x<~>54dm~Ƴ 7Q%Ƈ~u\Xj# -Χδ+_>ygu 7FSH>&N4OS5ѿU) z{uM\?ʙZiMżO*Ǩ?z mh8:Fף%cցރI{}h I5H LczV6Q<*tR?ZA!#^Ҁ*R M2 mڳF}Me-{v֪%!aS%XkA%n 妗)bõdKd+)MeBIVHDQݬz$s#8d vz<NG~A66ax޴9':@Z]( ڧ |aPE;d2iU$C.wb6U*YV "At:؜qH$vŤ%I>JёL`̎ltHnpe׾4ݵ}ijAЋX 21ȁRCʃ3=*lYG[PcBxkfrH6њFKoI (=EӃ#4{W,ACޠʗ@ѐ%M4Rce"h6{b]˅mSM|STu1B;\v&-8djЪ>`h+yXlnތ -F# p6:  ju: ["TY7망 QR-oFi.. %Yok})*S0$aXj>ƒg-GMΦ2v~#Gҹ6Au4Jfdce`"}|_`˷"K+jz:=e)q?.N >l6s^6R\=WZƹi:KE򃦟ZP>:w*?W>U6ovPz0t`?qm)]T{Xk@T ~~y@Hͅ‚<(0}:h"SI@+oK TMmt{#u?F@- Znek:[C\FtVKum)%_[vO%km^Wv#F# '€ӽ_gHqz2]'Җ/) i` a#Gzr oY.u=j-5i-ڤ*Mw@]*ѯJa-=ƖQn*GR-׵PYN^0|}#H_A+`׭#^RE0JEґczR]cG]:уȪK$hh5xP$‹Th*n/cK&bmcA'Ku=%lH}(4$ZjGqqDR$Id}O=BKx}~U [NJA~G5SI[p֮B5`N;C3;UdNu$"<X5'Z͈FC㯅t_*y, &H KS!gR4jOJF5:Y%͇P΀n ?`PITB#xӄo?0 x&@P@H$ pXtIIo e:E |ZQaU)!`u[Ÿi:Iko9pَ7I@MXxWÛ콶ѵg5p:O$q? 5>FJ?7 XA"׽^]V!&ަ8wIbjAhP}v0$\j~S@npAFQ- gg##S`ӶY ߸uAΌo*G{S&7"Nkbk=0`YIֱTq "v$V^}pGK5gS3"و񶖵;U b $OփUP7kKn! mJ0Y'<\zz,NVuUk+ T>7$Ppz]mbR ׍ j _ʒA$t7Z ۖ`;h0 ֣΀< ?@  m1W~ʃ+5&4#Cבmz,$m#oiK P\VTКiAԬ*T,Rå bt4gojFiތv^݇oMަ?j2KMTPboۭX5iC8:JoΤd2uKQuXiO@>F @Ψu<)ʁOROI}h[o +/l~)ʋ߿zJ`Ү"Sõ0SOm$ߩh: b̈BSL*zFF`lM *j7mM, XVHBI6^= RzJh 0bB4U ,6e㮵] w֐XGހ z/~h0K=M jhQ |!Xv҂MujX :iz`MH-pt{*VU]IlE`澔ˆ, 54DBG4p S$n7?YV\%mL*@UEcRBGaskPC [MoT{4 ;)tkfeFm/{U}zڊfu:o,oFzR -mPj ASBUΤZd4~7ױoN'ane Xkl4m&)mޮ:T1]i?nQ HְXNR$;Pqn SAYMSO!2y~ړC@P:u6@{mj{PpdJph.4*׵%QDEߧҊH 54COH;Z[y *moœBӽ4TA۰(\I;RRNSyt#_ uՆUh5U7 sAQm|Lh?ƪ}0Ί٦k=So~cTomzƑɶuT%TetsTJ̃i򩠬\izh/AV`;؝AH]1x2 PdOHX~kI$Wh;X=뎪}k`:޹zp!* BjZb[n7py|C#`[Mzשv\{K*#Zcc Lֶߥ\ a 8mk <ʠAr5ёa(h_g@GڑT$85 wKu'ào/HT bLj'^*A\M!?NԠ2A~q4\{v5D? rM*!lM}n>!iUd3=NTfʆ7>>Z'Ț$~Td mnW ҮUY'DJ7[v$j5mKKˎ-jx Lv?`V >>um2n' Hht&b6;FL-ۭTV?Q{:VntSi,ltӀpk!L_:_JV_4Ǐ}:Ҧ_UC}*&Ҧn5>U%X܎¤Vs/L(vJA]z},2׽v<zSU!deaS,GK{zCooUF]|GaSh/#Z6kQ{$a']RDKiڨ vi(^R#SԊFtEPn:ږ?ƆQǽ xGa;z.]Gz ǧSY - Jd ʘFۊFc![Ou˽gJރ[i*2$_ҋyjm|܃*ɺgᶱ]母r@sOM淋=fGB3=/kn+;\DvO2{Wk!BUrlڍt|I!&z_qX)=m kr|+G `Q"8ɩ`O 5!G r{(^6k566RC-^~Ì937II}>a9ij&٦N͸`9 7t\uqiMJP _i*ljA}+0ۿq4T aT}lxR4YjM*/D5D*ssL&߾.Hm[*Lx~TWm%(-iQWLmv׽`de~ Y[t7&WTKyR4%jF:`EӉ ^ת [KR,[ʦ<N `$ž 776|pa0'FTi}Z (ÿTx v 㠩-r:Ƞ. [S5I=hɇ+vh,xtM7o 7 }T#HOKQ̆c,l~ .wߥ F>?* <ȦJ:5r&jFE^p߭-) &?!=|iSƙWNiNJ@)[SH`ITvw|ȜD^F֪uZcJTJ=/]9RBOQUZt 5|)f 5SZV}֌M73ws3e"ZL& O:MA4΂0<å*<;[ARo? N4%׷*Lu31ʪB0"5(|c96NåE5S!r::y$7@h ~#ʮT~ruyMDlmjCTzY{cMAޯ֞ ؝ ГO֟ "uQ 멽]oglH-}-W@i\h<JWBzMިܡ_kUzB /}W$OqIV+,nnK`dzA#n ݸM/X2![fQc]XNlG[Szep>?Gz^ۡST$ u]T/OJVSzA 6ҙ<_ }/H3l8G|v$c>S#fi kM75۞_-|7Qp"crA{I`R&GnX^[g:W%mאh16nUs.MƖCrLov=31!RE5 :V+Wo(R^t!ܝ(]1/>zF5@X$}׭FQB(Pkި J=V*BeڢXtRZX ,aP6{h:.mki ^߶uF ufwuxS75P`DkGsҘH/oAԀrz MSp:R1j2Cӯ^yA7ґi1*`j;}jES;Ԩ(,;ԈZddRBz5laSa+GڮCʬ<tsJCelOQZ]E֣-ٮ:t?jX1T_ۍ:ҘɑK:,Vgp҂ȱ3@o{6EJDu 4O&91*4* M~n{nWf0 XmZf)05ƒʹ*MSa{0l|/}̬\㱱 IZy'7&98,#Q ,F-$l0}֍O!kTPJ߼i'n&N8ygp$SOLguÑq$`hzU^vb}>6z#*8HkE1n|]bif!I)bU_ M~:^8$z7X_M9gS)1 Ef4>eSt&iYxaI.I^<TY[4o(UBmU 6 #R>op- ^]թh[R-γ.AVU@G;b[1 tyX|hno'4 =:ZzlJ[:r!`nlz騧ȳ(^u|4LOBHt*AҸK. 15gZz3xSf =˒ڽ}*m,>obp,5xqY@^sLl*QI>Sq]Q/1'[šGW"O.vh/[Ӱ:  q#u<KmPu5:HX ‚; Zξ JpFVFRCzXr}i7_>FT(]HQ ^ޠ,A{Px$#[t tqC ޺<(!f4hbj@ Ha45,\/2%^Xù^og;WGqzyV`E#KPUET X_JD O$  pN4M6`K0[^5zy:,.}peB~T iҬҠ'u{iނd=zP}-A(Tç`(:S ,:KS<<%:w5KX7BuHd`zR!jmcL=G_ e%Zڞ,DsҔ  o2izb iaCRTTV5YiUk}BVFnԩuY;\ {jNtQs3N sD.3.VG\6keIJ36 I%6[w;R5K x*(g=&gzK )al]Ǣ ZKV}QUĪF_=,2 NX1Q:5H^~|-]]> =5#A`R$[o=6=H 茬A}R5I-D}'QvʃIARV'[ё=nH h5 ڜ#x}1 ݴ *Nɧ  {xw;Sm+;Sة~(<Jw]/77n.{J{0oT50`bC"%XHyˢ IQj[KTg%n !FC!*kwԟ’Cږ!h:}(-,VtSn ﱰ:J_pV0-b#Hp_<{QƦ@u6IO!E t_Sґhɨn$Pe^ NTX):~^~LS:yÑu@jLj-N2U~4I&^5z}Ѝl:ueYpnE-m/kHU" :yֿi7uO5 X1UEoj[ccF *,K ȊPY]_= @ ?nAG_ #[yR jn-cփJiRbMPA2˯(X\}҆NGi~u!MR/ޑvomi=G1R^ҐE•*;)ӧ, 6=\PnQګ$žI@ҙkm;kSF+}:xi[ G^t>u!4K$$ t>~Ii֫i~6MwH#iWo2~d},;@נrI*iY)5p5J h/W ȅ,:UԲO+2E؋ i]eMʻ Nu# 2QMQZʛhVnS%kr1Pnz R͓=#ѐÐA#wrIIiLgQ)飖Hfzp# o2_y QEQ6t7*C[VTۣo'OƞElmޒ:_HyՉI6DLņ:O 4@_~@veԏY<,2o2ݵƒ%^йEx2.ʶ`z<[S'l!-4 ,K (d'J d^L@}w'"`tL#!T sk Fs9hQ~Ǥ˓+lg ѐTiqQtjm~A3x'Ȣ7S޳\ϕ*y:źk+kIPOqYbÑ,F/Ӕ)1+mܑE~_.`-:.̨"} ^U"Q(:ӭVjd{zv>e{%n/=SYwmcs SkVd p,]T R80A1:ȕ`Mk*2m<)D-(xKbzy"ѲN{jt &| ^'&Xhάmsۥ,{ p:(f(>ԕ.g$з౏StżT {u:Hͣk^֩vHMسXZ3ܡ6tut:ȥ `X۹*fNcYW~Muqk<(N~bow1mIqwT\9CN]= @S/d"ײֵ֢2I,n=ww'?vFvmuKR4%75h:j5"xl}ӨCNq7Tic$z=cobG8ޓm@ѿqM& 4קe&&)ױu$;kK}Ep%ٯ=E$*qsC~WCmHmuPZ~989" Oex^ F׿o D"/U2CpMkHW"jeź/FcAOQH4Xo x$ZeN8NTQ,gqnǵE46vPKΏOw*rj2m2%d"&"-W6\Qmj̼pnA.A$uSQ2mR_vC,U[)7 UtHHdJic@< ޢʬ>ԲqQv:ƖT,azi2NĚJY aktA K#Z iq A)P)M [A^ HΨXN@QtX {Z)tz0k[_V M^8ojIKQ0>VҦCSћ[ѐ!p!@*A7k M{Qڞ(We^RkL~'ރNP0',*^x0t֌(5Mij,@k_ȊF6Qsu=wjr ~㾖MT1'¨1.4ZimofʔyO N$۽ .xQBE45Uloր[~֥- >%52L^iKNJK@?TXhB^݅Nl4=*!cT{xjMkUi|.4z+˒gMӷ^}i0\p2Q;*<)*Pÿ#/>`W5ZD%=a$oLj?e8Bإ|@*1U?yI ?ݺP϶+aڌ Qh1u`!':t&-j U"2/FBM"rK+icZK )p俸g! ܆0c^|4wrf5,wx޹tQ|'ǟ[ϊEeY]m<*C_%<|gi:w&Zw!uP6$ 'Mh_J0PK 9>DbX!S%Tj_u2\Ǚ}ȉ}76H9la)a~&SH9(fʄdB @=7.Mf zYLcpv)MRBuH).Tn &IFf1= n@uJ qXz^.O}nvJ@x7ޙp@kmo?[xmg4J[nt^}wOgbM6gVCh[n7k',pܘ!$u]qɳ*60#Z݋CFfIW&ӷ@fœ$,Ju.N< 'BOzS`SE"38% SHNd$p-&uT-v=HF @&_Nj çT1Qpv>U@F)UN:}u78t#VK\XwI5!b56Ҝ t_ ̧q]C̊GhպO oKǽ<h00:ZP&{F(sQnT5 zu@Q_L (AjH/~4jY%?U$tduӵ І54@rd%'F fcA\UJy,wH}(XK)ƑcS+H)UʟuE YzX<6SxeΜb37;ڐ<:S!C2d /v I)K,V.,mFF:8Be#8J#.5.<̳VC\,;aYeI]#iH,{ڵySN E>JALIbY%.Kvd$,,6'FQd尡ek{v4IN| @ \i~ߍM{UtCǯ# 6Zp7Zx$93R 3h+oiN45P,IjaSE*dgn3+-羝~*Ȥ0:}㽁0v0j( iom*Ӳ-֨eV{7Nd$H{ۭ~MXMxT"(EU@2q<$oޫ& snYōJʒ=@DC}{CYTSK#O*3[*#8Q`jjPKůd3ʴj2LIRh">CZ ۧKj:T)-(+Ӡ4F5 i*<(<-CV>U5X,$ݩ>U n֤0:1 B-d k֘X݇_H]XToA{5{j:yR0KwԞ6[ސ"ߦ@5kTTEmN\iBM`;TӄM4,EޢXg4"kkB$A[kL"^݈$:Xw:}ZV]Mw:pkl-ߥ<tb-)ր${WhvAWCchgubǯkT&7 [Q)}mT!=[tӂ5ҤQ\ {‰J9ܚYSGZck%2=[La!nu2נZ9Ě!I}*H # Oih,|GĞIґ.Ye/i4K!m=ڌ+$Yc'..G0丘oO:α4X5:;r:i@'BQQmX&I~~oZ` ekFuF\~oeGI3S[yc SK%=)AO eT hL>b 6c[K ʡǸ<#€U`M[XkŃȉX^h9&IFZ%x1$($QiȎs$/"57V{lXQ'YXKm\qX34rzV r?*mu iƤzgU|/;-$q}:Hdt[GEU;[_D y2"s@Y.0?#\_HrE21Qݴӵ*yk_EH0l)S.% KjEIZtA}iJ0 ?ґ^aPj5<-A0ۋ{[H 47?0_ nl; -֦;J쌲Gڦ#]4/,MX5ݼqaP5coWІv'u; }LO"mt:6RGmmkwLyL\`Gң(v"cWgV~×`H_ºdÊհ2(Eɭ"+_$fYvOL2]._&nM-HܡF̷6V^EiK~bۇgD/jZKrB µ 4,.x8 z0=m^jV7$LG֪xf>leӦނO20k_*+OP#;Ȋ (۷]@$TCܪXTKR1Ee\[麯|w1!nO_Se۶5^L UdF 3 ޫ@@l.4TS ~/JTߧn²h. >M)T|ntI;l*5&X)*ED'; Fԟ02W p@ZH~v\_vhmYF \ë=m]Zv,H[:֌ˬP=FALey[s0mmDf*{rwH@z @RX꽵mľz(@P=$€mثbtiRdQpH7AaIi\r/|;S=&OcXEAɰ(mK 02p(Kj*`B1ݴ;/侣NduINDAo dB򅐍ޞFF jWk@* tk- :ڞEp6G&9#uXPI\'ףFR4hˀz(c!fu: [YJSlS!R{ӴkG80W.m4Ԛde%UBC٭u bc;pM(ZDzrLOH~]k&/ v#p,4ӜP!m( 긗: 1&bP x 2ܕ.6Ŋ/b͸y^t8Hn5Jӭx_r% zzv&m5#ƨC#,@辮xf̈́++%MƦl;)].C)G@|EboUnVpE@ /,ZGmjNayPŴi]GfeH?#CnoQ: gd=HVw37qqki{ ,wN U:yu& c&WVssZhL'9[ɎP*_~Ӵ5 OKq,75XRzK?^S1??gxF!y %[Mc])~+ 4`@of-cuf|byS(d*YFT48hE!tHgc!ALo̦{Ɋ`A+2C[b(qdg7= 6C_ҷNk'5Jk?[/4y5CbEb_yooGxd$*TPu•HP<(L< zQUΟƠTzv7"ݪ"OU&O Y1k1 OmG֦VMN puO]*cnǯEM 6쥄oo?;cc{iQLMͧZr(m8hFyֆ6@R+H7׿j*vdN j%N gMޜ5ԟɆca[o"_jj_ozJ?aP6JU I RI;`ASEuH--SWKWn+VXM>=Pr kXuII:TY[FM\_Mz2|W@nGJCoUe($~a@Wj駁[ G)b5K~dߧOZ >^g?_ ?%,,:S[hzxђbPz#\n1 4T™Gt=0F°[X;ԂLۀI: fAfv %K`nX\OҞIy s`AiaZp4 ÉYLi= ,! ZUD+- yR%e\4u+؍>TRb GWe҉PwX5iW;YOQj#7{yS1ebC; ISހQR8 XZd<pTg{_ijAr21@Su7*6A'ҪIl\JBzhƎv6Ԁonf {ڄ-u@Ξ(i{SM"aoװ79ę⋊i #Buwz`e21]X,e鯝d|Sp!"`Fj!X$!9#UV񛞖8$VJ[~xv&@w'i6gc2(b-51R6WOFsVG'2dEszF;"xXz2Ό[Am{aaΦMZk]7 !GCk~Kdo:Q|w΍%B\[~7:qx nHc\~I|2~Jo%o801'uskm:#KЂmNWK?{iŒ¬;PƂq{ .*nYԋ)IU6#Kޜ9/tlScݔٳs]4ujJnht'Ω/BTzum~=̯5{ajwd.?1:a9zIxP :)`de2q}'rvn@n|k3~g,x|緹.$k(1;f6ݬG 8 ukk<_*|2͉tz`"vr=ix.CPv+g# 'm[qsLjHai;rzvY^g/#ɵfICW[j+Ym:؆3*ӱtVGm;+e.&FW J O(iO__,Qf<!E #oY߬9}',xX>$K Y>أnuָ/*ki¨<[Pu҂EװM5R ))B;RU&= !ESrV"Aʆ/@•5ԜI׭0[ZxM,WKX^BX0F*N ]b`u <%uI+0p Q"i5jjmk~;}J'!p-~ #J`mO ,-Rx ~iC. &hgA4RnZY+4'*fBE!5M(:jAJE% }?egB.n,ZFN5IPbn;ZTJT*8*o֘x]-PeKoETf>&^Xφ)#@-#U {\X"󥔕/^NT`Uo:kiŔjl</I؄iꮎ1d7Sץ03uRi9e&"t4fV&[yU'.n[z|PFkA6: lFCN%YXֹbr6;Aydh֘R'{&6$tրP!TŢb|бuv< (+\~Zb˻PΌYu=h ,YYd}Ky_:`X$6" tK MT%qpʂO] Jӆ%RE+p P E,IM˂-84Q*wDNwvYպXsO;d$+1mR0̛}ˢ6߷N26b6ݗh`D-.§¹4ik# `E ;iKz0Rwռ){xc* Rdq߽g{WVxpE12{F[awtkc,lKW[akm[wS5L+$?2lHZ7{ (l,x6n|~So &xKc}TM MR5ݾ1vm@Sj%7'i· IKlzVq *l 'Kk~ԤMvбr Ǡ5o Lw:c޻zzAto[1XzS% 5Z;pmccVX;bYU.b@H#]߶Qw =E c R[UU^˹h/O]:3[Q7Щuq~gw];RNà5ˆ{h:4`dD i37d=H8 BLHCFđЛւ1 vT^F@cR UN0P֫ޙ(:ƂY[Ja~RE'NiiSNv0ƑuAn-U¢iҕ]O* Fd[ Tѯj n;T> q@(0a"(UJ{TF4֜T9_]SHTN+E T< B[[i G~c@ũtx! Z[nuǥ<򪄓!eu(+e}OP)R] :(mKtN]H :BT *ѬmS`gufҲ#:_NLsRZ/VW(`"A&svF M)'SG6WYdQqu1n_l#R LFVFJ Fm}ARiԪ+.5 Fbܠ6􌒻1N‚9R ɶ45dKJ{x05F?Wydlԋ j:x0)m@r :[Ɛ;aQf6ݼu<Ku,/28K(A5%bFW=4r5{xd|mб-Y,aanBC(:ۭ3hHʦޠN¢U H420; tǘAVFFҀ'"$[2/ WFK$>]zQF4,"BΤ.Tus@C(Κj$1= uzy%xa %+xP(gsKB,=o}(m(zMmi| +btO#7Ya޶О>TBȰ)hlm(bom*§b1iFߍ*arI6hȬF+Z~9/)>;7C;˓:$ۆՖLѾaJmO}ARp3 LJK<;-aVLܥ+E$R <12]v7>'¦H13$ $7;j.|+}맯F#qlH,5=ɮgD9X!}YA œܮɱX˹k.;.5amֱf6%zIM05YcQ:&MΚBeJa}zښI ogB im%Ƒf");g'yRn׽#hC*YZWQ[S"|q".FԲ0yq׶NaX!TU%0PY*G[v"2lB {Uk(\&:97,#7eBkooyO(;Xw8U)ë0~X"p; OSn"rcJpۓX]T]}kJοCefi~/oZa{t篅=<)­\E1钒@;<1$[ΐ^57ʘ u@@NiSLTRCFcQ{Q4F=UF*tH0OSZ ,™U  u k~ad&[L`CnIPDRimihu=eqP0iO) %NP-Ҁ%<jV֠`DDE '6]`N׽&+ۧҦ۽>ۯɥv.wu@mc~W(`~`tK+E< ;w#Ʀ4]="6<mo} VN,:+X":T#4RVv $#h`6+Hz+;6SkkQMA! ҂1 kqoo fZh [Sohx!>԰p#PۥN׽*X tʲB]Z׮肝k[jP7i@iިex`OjOe|zJ{K ({R 2*l8N PӭS+k`^\h#O;Ȱ}-UƒCkG\XmFBQA^ߺ%Iv8 m^*UKEp|(Rlo. Iʧ9oH؊֭4cَߧ@dmIu%*<;LVk0J ^|ZoO>Hgu~oi|s؊2=ϨkQOtq=iZxA219<5 ޮ4eavb?Ψ/Aap,*7cH [p@?JUS1[)ʠzAjdw % `w[ikF U@M `mF'P_c'R:\i@^8dG@bwSsB|)fxa`'b㾝$E q{}|( G[>@\.T]FtyBM5Nmx?#o5\j7P ȤD6my쌕h9IЀ;^-C9;z*KIV6ӽdH-Fі#P2,6 9QNy2l7z1zHPI[N&͐Tނo? .R0Ap=@\WvopGOaޖ>ؾJ2x-5m(ڒz2Xy) % zP$6ɤq ,*VF$ozV6+)rڶ)A1 X́c4ڸ{5(>YVzRັR.f&QdKk~/-R"&-slX%T%oڪD%H:m0$mMiTE"Nk20XuikJ3B$$0hA[b5s+i6ӨXcķE}h l1pQ(7i9$"~ўѿ<؟qK` &Zs::|>#_뙺Mr5I:0TjxNC{~*4h*҈U}- o/ӵ*Եxkw$mR zv#<)6aL='M _^C1|\BbpZqan Tקz SUH W)P^R;?h"[iSJtEl<kQõP# c~x*SL`? X!Ko«Xgn7*Ed[‚4p)"Ҧn5ҦxM{[QWEd{Ӱ@I6׭GeP.Ukҝ*3Σ$A9&>] Vt֕2-ZJK3 @$FΤ xN2PPJ0Ia#hHjlL(rPy@%:uÏk"r *Ơt;P Ϝfq]{5&P9,:j2xd{di` v(s&*b.M vE7ѝ:Ƃ;CE4m= Ms€ZA&ұ]AODӧz`6ۻho#7- o׌J`%ͻh<8R|i!RwzM^H6VLlYMЏ]n|0#ރܑv)]$ֶzނi."Kͧ쿕0"!6CV["4J6\})8yq9@l/Xb1=zOk >ZdCLHV54ѕF^w("9Eۢijr29R cR|u!,X?R+- -~TM_õvj=VI"ee ˩#¥Xy {ᰛoo&X\cΛٗz0c޽VFiBc:EI-xP$"Ț_O—Ztu `}[R $n(M;L=P:zmE%Tn6/Ex,G? T,>B=h1; M:Z՝qcnXތ $vBH?GVl/ajvdf6]:9wcYZJVqk/Zi1nێ [@ics~zKO0b-rH4ȦJnSBAR*TT{a~A+p`IҺ:ѳNj,Gl~WIVƹ?Em1p{\uN8TTSjT; Ziik饻V{A*Uԏ pקi8kRi=@t ݠҕ4NBS<)LmUg2\=;PO3* u? iִ Ojy$QHԕzDRI-{h)ZhY:5P(>}jij~[]EET bSPLFe, Kd@ۯM_JJ+ MK\[zo*2:U@ӧ*An U!-W"h_xHRh-h ZֱL ZӅthJAvw4[4n5ӭ%aFWZ0=ݥE[h {}EK[ ߶ߦ`7 oFZuCGqnʖ/DH}mJic[\''_zZW2 #Xk(9[t="xƒ\h,å*,-Z yR4` Sʃ,nEDL.ߒK}|~ Z"kn϶`+:sgD@Fmij-@e=EʘeE% i#335}4ƃ.B46Rh|h 7NuBN|53a϶V-ڂ`AQ1խ4udBTP[i#=06 UOP2lP@ݺh p5],cV u#:1ErZtΟ8[ G $#ΪAH =P=BI_j -cހc ͺ7SA5q.7v(9)fbzMӭ^z3H.@ &[㧚@ `mqԑJpVf.,hwn@;+mc/8I=K`I§+Igf0Ζ\yng#wO{}iHw`HA;w\ؾƾ(lno׮j3!qZۏ_|j-m.Hu {HBkh= uMYqN!`< .TtקM"VcTVf,#u[=6ߵÖìqYFtбsw_n,:)$k!PP?{R9)lpcTZ0˝Vin/Ao>>LB7:U!2A<6 푯؊՝`3 <*)(bu[m,k!#"FE`0ab祏qZj{M3^kouޑ1>K¶mLQ9ױIVE BҀ:Vb@uTB []Jhʃe6¡pDR RdiN Y]3brS`gagF !Xkm2G2:Ь[kdz踹:j;RhcnMk:ghhA:|jv|>ǔ֚atvbzTVZ9"P UR.O}k9U"%US =AA/PL'xMF`tZ@4N ?,`1sZ2-ZץM]EΟH2 'TM4 Ȫs y*#zh0PM+:YV־d[UJ_kUwX~̼w~^zmFHeml{PB66"<Qױm~) :jn#]/OhB),e˭R)_YxF:$* {C{PsYK͐S9_^Kʑ][ʺ:9_҆$ZkVaŔ0ݣ]@h&~vX֘-R:t#3%# ~9+r~€RI6\~Pzt^|E jFgozGS5&V-0N{uu96LRM"˰Y& ӯ_ƂMݔTODvh ZΘ'$W]O_)) #!m(N'mj<~cW@mʤm4g!`oð8!TZW } ױ̯  =.c.N/ 04-  9 rbٻTaE I4j[.4;>8 5\(&߹!dz̺009ĤŦMӭsݳ]Wr6f#6A)aǒ9M ߘx doP.@>UpVXtFpOzFz~]}q)w6=tFbuv MCHdv[K h&VI",nJkdV!\Ǩ5q6 ip1{nvLۈFѹzw ^]쁷֦&&XmddJYTShۧɱy,06 [>4.\ ?[֚Ϫ.guGaUSiI[aK3!K,D: f%Y#jN"MШ6&ui8q@m@F!76.{XS1}˖-G];PYR ң=M솷^㯅fL w.ⳔCtYΚ]=qȡAc پx'7n׏-Θwu=:tsR-o qVAS!;ZTVH$xdkxt$j2k#*0;V[R}@ڳ]qZ@=|jA篕žFl:ΖFK^ƖJNUd*q@Ei,GJΪB)}{}}Iid :҈RkҴZDZ<<+HЌ4y*)nuXA6ͱh֕::LZ\ZO."꼌#T+{˜+_Qõ,%lwxƪ&"=ޝ? )yyEfƖU?}< ӧj0\iz0oE \xG1AW o4v\_ǭ.t饀ϕ7#J)nzFn{߅3qߧ5p.c#«/gvj.>6 8XNƽ1toP@ZDշil>~q^;ZM<{UY?«&-Ƈkn\:l]E\E ˻J`Ơmp4ɗ<* o{i׽ ZK[[RQ3)Y nFu?קpֽiS1$FIr ~4d(Zi+(=:j`háҀƍƥО>t1]cb F-b|I ›M4Tٙ@_:UiFL[eo#($cnL&[\]*tװ TAW S""@7^2"XnAd0xIVl4 @,Xo9K ¢48+'hu0G%ŘD5ХM wf%:۾C/2DnAqs̲ n=-Dgz ]B97`N0VK4,4jV܎FQGܮ)hF5tL9Ζ9=NӴs?jgLs{#ud]ZʡA=WM($h..EXى̠ۺ&աX2YwoVռ+d6Z2'h[؏,S/%[J)@O֜E H.X؎Z&/;#MBtd@){~BX! XŀAu4C kTOd^!.UӽnX~B:}grm?/O*ç")(G#qζN !4eX',g:JۺiSV(r~J^@.IYӊcDϵVCׯN.ý)0jD*Q)j.F))YڠRrMLj $lwy2r3uR֫!c&RI45YfsҦRs.; e=̀) *+/ӯֶtjZmuT#PHz~h e>SA $5&&;޳°j?< ƐэV0[!<ϝSRVM43(=<K ^D:uX,~JzJsTH<%Ʀ2_M|k:V[oDTztU p:R秏zH*(5ҫU=4c&iJ`9:)Sdͷ^ՍrKM(YE?t/HaFKq`)`NJN~PhZUVv ~S [\ po޴/*m7֊ln7_.R3b]m>>UU!Iӷ]*=O\wR2 Μ&6sr=)cN֞QM.<RFgTw@ ߷zTNH k#A>T U( ŅޘQӵjl EsoVLy@lz2ZYjn{2c짐$-<<KUB *i]I*da֙/ۭdk >Tژ BEMsU >_GDXtm@W޸"EUU:pe]f8-kxڭ g;mRH5jU,\OҙrD6&>cƇi%uՈ4VxkqHK.omL I:1H҅T\5P5 FPש6./Wk-‹0*fmR*|Fe1B* -` IPK+t\P*4kH :? D.:fkSF6tVeʹu,ŝ@kLI;3m7.iPN<\ut\SOMix6ܕ=GKU sb06'F2 C[oWTrTlF{yա- $AAJok5`@[[h cvJ .HcacԂ8`E[vjJN)̑@Ёʺ4ggs& M&][W]Vg1}.#u}:WGO?y A )O=&@:?S)s#:i@%\_[Σj ʥY0`Ƶ6ɨs,XZRYrr#S`Rfc.E;-_?T~%=U+i])Z&L3ۧZ-DliN/屹VȦ[[FAK}U@;\;oe2M):k5*\O1z(a#OVOJN<ndzy<߷ \5Ӆiij#io@06ڦm?mMQ)$wVBϵT1MKAS"# *v7ۥJ)%t&u7= Ss~Y%r ;UFQfk\W6p\hӷVp`BA߭i)iQb5΃y\/ґ)kO%& })Zp'eT-ߥFO=zڵԩ"pҍ \mõr#O4zVS]0Lm$#󫉡_iXzB|!.Qޙ3I6GMH,@4*@u= Ŭ)*gG^a@.-[_oSih "KTU{ОRg G]WJoxBB JYxWzdya=h 6X-Le  lHl,t ~TV6ǿG6 !Wc؟j c.N؀|%reI,UԂVK=-@3ǾY^?O%OR.>4 "!uxS:|zzȪ€C%1(@:jC@4"4xt"I!\htրW˱>ĝIz$fˑc`$6 oLF ǫm#QBj >[v`UZMΡ>~Tc!7΃%4,#'FiCh4"pGd"ǍxF@e2ˈﵔ_Ku M$+0߫\<3h_UxXW>=2啶+1 qja~Mb8JWAi?ސ;#"IYفnƕr [:vc]|ok@uЊε"᭺k*ߥ t=DhjztVݘV{ڀ`\PJ:€ĉZ?e"׿j6 []U p^ܑ "eidW}+t?K⣒@ &J[CFzϿli]?/Y t^v[pr;ѕB͸o jQO/ 7Ao:U jF6T?Rd;mڌdNiڕ<|;)Xc֦Apǯ\( IOr'JdG{۽+ ):궰ҫCeD{WNߠRۛN֌㵭kӚRtj#f% $q֠AUV_`ZX\)Qgs}<*  2tWa*pTiSUHy߷5W`Uƙ.c _FHE[ jlQ=zupڡXPH [ z^7m|*Thޙ4djoVP*ItZb6QFO,:r2&A\X o\NTf ~ ڦU;ln\Jިwe?Z΅Nzr]%_E"/{\YQEu52 H {V%X:jiZE&{iSuT%>:TҳQ۠n ;{}tŬ@~DBp$K^ bX5UȊԎ0@5!cB5FFG6 h+<4f ji !VicXSB:T  XҔT; w51Vۍ[[^UT > Q-޴+_]|;S&t=zQXj iJ)S I7xg͡:V{.,mQSۚFi 1š z9/8|۝c~ҵfWf;hy4cLk {UD ı*y&M_%?.M<+HDx IrP7J KUA=pu{Tln _2UZUBŔ"^f'#>6=h85zBkqU#K26smz6/q@<$*L uvuMk#΅d,|bA!vZy c=pE"/n?)~1F)6܊dA0 w vFS)6ӯx2}ƀq}HWidJdpm{K`,ʌ-ue6MEmO# DC+um)ot9ЈF=ȁ!I"ݮ:ҌQd3n1%x3 ۱ȌEp]lEFORKѓZ<{rU6jtǠ>tJ"ca׾` _S#/px.64IKo/\i-<3rRu #vJWѮEa o*Aht cE/ڶЄmR2-ت)@Ο$ǘFYt*-0!d PJx-rޣ }tƕ齴+6Ăd!K%կcW(țGo3]WiL"j‘#@/jKЬgdGz20 ӟs`h9 ~muֳ*q ޜ?Zi)ĜqjFHTSe5Q,X{Lb>=ʾFS{?ZXޫz0^MOu:',@sh5DfSqS9=7jEr7t$jj +^^ mte%cN:T<~AOR m6J`CdfBY(5@bʪ] v0#zހs_q >5PI'fB=~qw{K8d؞ y _u\>>S7ȋb[@43$$CMi}Sʬ7KI֠kn֦i@HAcCtHX7 :KFlA*DZ%&6>hhV=W ~J.OU΂RQʷ 2r|,i7 U+ҙRfQCLmB Eö 0fӉnqdh^>~5Ή ě:!WÌB$>DGm[Ms~rשVn+f#$`5=\Κ F[کK";֐4dtd1XӉŏOL-ٲ'kRAq_JKmQbl'.. ^}Su"*ޘuiEQ"AJ&䎿!f@tr[*4H..5u2ץ^K HTэ<;R5 4JSJY 2\tm =ҰiG¬ɔ?meSY֧ v+if=I9VFjd$ ^(ɛ}'Qޢ NåeTÉ zҴ8];  NOE}/Vt2'b$?w >K;M\7k6<S+iM4Koi6CJ-kiaZPE31ZZ"׭YlOZΨT*0j m{yR rjO J~¤Pj",hmM9YSô4=Meb_z-NEdGӽi!e]&א-u4щU>@AHJ{_ZFʺ{ +ah&#0_P. ^Q};ecyS% M0V:JT<;ԨERǰ_ fO*=OAE58TfBF{j,QHˇXgG!*?05֩/sbj(x7ϥ9$6'(Hd߰VQnq#]vw,p(t@Ru4bMvJJ5Xb׻kyPFesN cTMH&u Sax y` zxkL"ZHDQZ@8vOuX #M#:"V fU$ƙ!d=X? 0 hGND)5&il4, NTBUM7aEr?ɬgt5#I+<$SN8K׽i&AiQT&dRX{W7nFMdӿjVO;ha`ei2E:yV9hu!-H|hyԷ^4Ku<$%@j2xݯTioLy@|)HZV={e z<<M9`XZ OxB1" 6~ ݎA_ dx3Mݼ df4[ޜ {1dKo+ J*huiثdBRFC3nêA@$A&~fbo>eӵtۻƕ%2r9hA[x_ʘɔI" EƊ ԍ!Rʼn k$,:*g}Iv?G4/cPtG):\TگwY 9r'=;ع*7t"IܻI{VN\|ui76r7#ow՛4MP1,^Շu$ަ(r ^鱹11"ONOxS6n9.*emɍ♟qԨ+-ma9 #B=L#+R.QT%Hn@mIM~?Io'v‰bޝz?Σ*YC C4M<{ۃqb K0Wcs/S*SܞTp%mUlEoB8gX(PCֺ4.m\g-mJ~܌KA?oJ;+S8":n߯ u앭,V7]XL6tB_mCk#*G'݅]ױU/KKs7[[.ti \]N$bwX#=bd%gEO^sK~1qp?[><[w/{M$=h7'R X%֑uM,oޙ,m/փm4RK ,o6}+P7qF!yW6X7LiA$! ޸{룪:kW|~՚o4u?nmƀ;т^),t=igSȁO6k-S*\^שuugV=z fuc:; :E邵k]WT˄1>5+օ{1_-zv=f[vZH}EVTROO ÌJݴ!u}f:,<~r&;xV0[؊'ϷPp:xTʶX)ڊ@k~:}Rk~õ*Xlz/Y_MoҠ.xS~èi=O @\aeD*Pm*Yç!Ŵ^J)[SNBтOj;9$ ߸^SU!ff&@\=?(&FX $q>=t _BjrcIo i`s,V OƤ`zxBE xP2Tz~Y9JmS֕T(nZPNJ`-Wz ]Pֳt ݪ=A$u^S9z`oz;o~ma2eh {Tؐ`'#]u>4xZI" k"T9֑3H=I4 Oq~ QK!herQimI6A5S0AP aLÏ2&oX#ު#B.5TH" L:?Dʎ7%nx>@, Hg@|gYǬXp<=m^ֱ=! ־U@}@{zT$y,@=WS %rŽ-co ϶q3ƫݿzP|\U>i]iBd8!j,*!.}'6Qxb㸑ep xS>ؤR#*H܎Ƣƺl9|xmRmj}p\u8'KҲ791Wۥ&2SA؏݊L.]=h_9 =ޱ[ ~}+=ᶐIWRzXVzs&Q`[07\1[I'wGOQUpeeKwW1WkH6Q%[iv?uoZMS/J y */pUBo~/ЭkZrQVGUn(ʆ9PI=hcMݺ@1dc>ڰb/ֲ߮_ Ӳm,uފ./e.Yקd1)&՗ۄТuzTkIOHqsMaL2|o+-cN&Vk%[jzU"`lzhh5kLfHXiT1(aU4Y)g =[W~o<>r/8M&0aFyu1;tۉ5?9\6-x7JS߿Sҹṷ4}5g\n_sky;e˸4y/#o4`eUh*LHКJvxAr-}tQiT6>_z2.Mzeh[u_NfB;WT# KQ1U͉DgqoOheFM*6){~ή*&7:(wTmT%YzР{})d+kQh4CP-<Rňjbhn~ԍh1~]OR9 T84e" yԄ;z-Ǡp)y7 JΜ}z 0EX/T+tdT`eۧql%@-ʌ^Gҷ酓=]rRU?qE"N׮}(Qi}H5VZ\RSQF.?HX.mET- htQW kV5G1..-N&!_Vtf*Z8Vp5c4`2 LeGAG/Ru>(*gZ3Ha N},[jMaZĆT4v$m/z09v؂: +,(nbo}5*o骋\5εpYd݃r=MTUcυI.} vK€b$mChTy{O4(Omi3wKkOFb:tҦ["O*i`UP)RʻXdzAmI HW]? dq-6߷{JX$Cw|jV+Pvĵ-"p^E]/2NA3%jEvF xk@b2»xP d(I#} &(!^nz(/tP:Ets! BP{HXXm -Q5 `r*.oq@ C,S OAx΄>UVY/$EcAHP t ]K&j\,5m :~ cCTÈJT2m>_N5RvP*UPPWiAYܜe,b`ll.U r-Z)bK05Ft*sG+ȸІDQdD*৩tXmcĺg+ L7ur.4=+ryG2H67M=$x"l&%@B/{lTE1ؙsuPK3*Zj֌Q:{jUYU;*H>ǎXw1Un;}M*fqޥRW3vXA⁉RY¢ăj}@ԎH2!R;DeHmě{wmlGI=`}PvC]297w'GMsoF_*Fs?7-c=) &;_H!йbmzSکR5[h¥h''$'?SY\&yrZW!ufQԂD̩Me ƴ2v\ͯk#+De=uo iPyߵǓ&3WTXjzkM4 HrS!Skw/r.N`VFa@Nl2.ЀP59t? 2d|Lƌ$Is:iֺ5fIqk6,\\]ߔ߭^m'~_3|)ٍQaν}*g嗑0;{#Kw^+gQ("++!ӯzJ'tŰ6 HM<)&4(rjF.,{ gHSS-ou+XYXFʽon,w'T1-ҞBLJ*6 R߅ebmzF)@XkNBm ֱ&|`4_Uy@#3SƝkO( ^֫YY1nu(߾ͺdΧM:VK$ LJ jz T=:rkk{)ʛ|O Վ̀nI r۵eW)p ?J cޙkG֐Q_mi``*h ۽I =)zgɵ2.m}AmbUVSf<: ǝ ǔ0h܉/:NR1[Z͙͛a <|5ofq;Ԩ~.{l?ltx@ц\ˡncy~_osxt*y˯XNSI%,kJz*Խ-Kd=C\h)zcSaڏQQ>Kw0y\5m8J3=nON–", įhe :(-1WH,t8oV{hOznv2 Xۥ¨GR;x}i׌a{#K!El7hbOqkE7i! r52!+ouJ-+6C–[Htt.T) (Ak 65PeFj).Lq(-t\cGm6Z[9+zYFy*%iG#^ѕ&+fT/d@zv*Peŵ5~zTkc$ /zֲeܣi*]E =DmubI-죭+BoQM/LW6rr9H*p 믕0#Kqkצ2ub+A@ [8ʃghzh}{ޢjHjiX ĬJǂS?{wuc9$^9R6ATSܚOe:tTK[cA4׭20ԋ?j~?Diތ ڞL^YF If NW`kSraڧhɊk7}|cӵ=hdv oNVD͸H^?JmB}zx4{zy|vuuɪ~6At޺rp @OZHæ l # Sa4`$]N5?󪔙YKf`׸*ːܕQaҩ)#Yo:@9d Qѽ@[IJH^ho Gӥ CܣV:(xIY=) •R[l,НߺCo  =LhmGw]Ict*&p4C!_q3:D,&Pꇡ*qLC[ΈU1TܤZ$jT!ZS7EEԋ[_ /C\(=,H^‹G"OP`7MT_A@{!* Sp̀BmkInt6C&eyPcG"Y=$mP;FYGrm{ӂE; oeStLC03,*vʦM taP˿k*꬀n=j/ZgP2ckk֢lgYw P@]?OpbEt/Syq9#(2#GALr/\ĸ>+܋vxrdg{5z|1yGE&aJ<v&!m]Y%a= >\ LՒɨ=>>cCxBhc̛05C6hl_[/lt_ٜJrNFVd)ЅP`zXusiS.6a c8sXmֻ.*o8^[2W ,IWڶe\ d%Vo:[A+4sYk%i׵ ,i`Τl{ #X_4`.ޣЊ0{eԟO2L`54`e⸌8_zR$@nڜ 8$l4bM0C*GǙY61m{w[uw0Ԥt7&ߌ?+6|lGNy,4gVDX1ѴRw0>[Gqg$Z1 "nzr~6!AGܵh䤰r@ ~u? }gYYs뢍YuOkI5+jǐҺMiҜrb,.*7ܲuֵroUh:aj>৭{wn6iJeloS^ 4hk̄;LSZ'!7Sc:X4%h&\C(\Q k[[PxD𧂪ꦥ*,ttY lM7+4:Ҵ D%קڹ\19ɘ jFWd&P;Ƭ,:m<)p<tSSfaL"e [kJ[ֲԆZ[#FLf*YXZ)g+5Y<X |YB#ާ!a шs{_kڜ`FBD|ia{KM~9p[?نzrE% OBackKh)DvR5&kzjmrj3boҋAy{ :ASN"(mSksZkre~T)_{ŅcZ /)Ը|moKh! ϩai ,[\LVljE +Wmި/S*6<åXUȘ p-k*pOQJU:VLCkM P Z9b_ 0fFjH)}Te[iހon g[ wJb:x+zzP4!ýZM iڞIV]A\0Ԋhk<]k+p+eS;t4s ^Ʒl^V.MVlvjp/X_LVwZlRZ|{ֺyOgq6 Cj`e-֑ʱ {P:: e豹^Uy'Ϻ)d lvknTڤ $QmeN֖M[3ñ@da}$ĸֶ3w#48 Ů=+GvSM7Lnnb= r90FiPu ~`gKU;Ejc&nUb/[oqe5,=ǩ n)S%`:,)m-j)̼ϡv>?Eh|upI=L(l: D\T)ѭJ+Ve,nf} ʬ7b}%SAS.E рg#$d@A`y,řv%wJGÛߡ2w?|\P!a1e9 Zg 3ʇY|wJRvVoѸ,ʸȡltākmFOkmNȸEmMљG1=*.hw1&'%8\V\h!ڪ.hEtvfaϼ|-.S@y +Gk#Єgf mq}jiVe7jLY&xQ(d/bBۡk>~4 * ĕ{ OM05(47p/@;}[lT]t'śrI@3/qtG'B P5R#3;. xl٤؅*RXZM|34r2.Vedw#-fD.'˗deݎQɰv^_ 3HD{:i;Xۨ3ys!-n~"az?GqnATl9Ht ^]vtfHhXUM?ֵsvueKS{Ƕ ῄ;^9k <ꌤī=MEEp^ꢍ)Be)r|MAG:ҙYJ V)9m |OzVEaTڶ:Sԩ J b1:Q})ˆҜP mmT=N lNUe1XQ7;&oz40bxҷNowkk6g؝mzaePYeȀcADbjhWUQ#rvioBYA]*@n pmf*T{aޮƑBxڃ mӯ֒k\2maoA}pm43oI_=hv mk:J6$5n /o:AFPXx*2Qk2]ku @CY' :m#^" szHG(?1cڀBM~6"[Pa4.EotYG{Fm %lPԋՖы6H  8d X!D DW @т$;qr-zc KΪZ&tFA\Ojp2h濕< .%nߛO:VBIYO͑MOCAR8 'AOHȍSG,i7$b֯^:+Nزd49Y&GV.ʂlTƎ9Gm}Q<(۳5|y [SmmvY >&d6rKYuk2899@ԓ+j=W_^aپkܶRX ~[:n ;!lGUj =)o+ d`KS_>R\6;u1Ҹ˧lsa\U@_kB}>td:%Vl*5Vʩّ}^W $Ui1񸮉YϭIy؏ŠT^Q֤Ň,Ud/,^Ҍf>EgvV حF5J T>4f÷}knZ1hF&|EmBVݫ] z4J&"L%Mh*O#3vJ0A9ԞT4`*=֜нQj#;6^K+(S ֚3hC6³)Rio¤4#BvFG*"K(i`_/6J@M{:V;kFHl?@Qe^\0ȄnZn quk e6{xW @ҫ٤nsv}*M`ӥ]GQ`Q_Qڢp.ms޵R222(~YEt(=]-}ks ,:b6{F}iQbS޲:AD d"֪vxQUrcK^sdl*"+Djj kJ\@zP.qQZXO`ֺ2lOZ֠=͇^\]0cHf^OTEf;[HP(ӿ,㵺iqn$Ҷ!\*12kƣ&*N@?KO<K{id/nKeQZ(j*%]wҜr)E54RۗZ,K?%pYpoVgI^hK1xxV3\CFaɷ-4F׭g!mCZTVC’S&b5#o|Zjj'r*樞g:[b4ӭ:.'€d((,=W:x}i2A"H:yL16[xPMn/sR2*ر7>=H`i ( vDvIGKԅG $v X*#KFE> \j^Pk .G  )d!So:d8S@=ilq"`m7e]2֜4Po6;A5Hq"aպZ/ATA  -AvxZ2X7V篅eYd eLKƁG:\R M3*qǴ#p lkA1ڭHpp =U}R F{[=r3|~C) hfqq!vEmޘop`$RNZKR}W`Ln٘qk# 1rrY&;VU`:5>T7'"ީ\# Α3.h&aS,fk?}H!Ӷk1:$}­,v*ڪ@^fʷF,#Zr eVǸnoHK\+!tvXDi\0$dk : sp%v| el4h))cf㷷>;K"?xg& c5#kk}k.Wir\&f(#)<ܭemʬ)]~2>K.{*IaU\rrE}XH6nF; IJN džYYӌqi8HBT񧈜OlSmÕI!Y5z=O٩S;Y`Vcu*ג˹x^;;&.5LX g==h>30sb“qUTmI\pu|tE *RuK%~f;嘰 `׿J '>ObeÎCÐg$D(-;YO+MkH^"&LH6jFH@`s؊/xI.C%ͽ$u~sN_ɻyre@.Oɥ8Cz/2(ݿm+2[!|j}TfQƪ,mZ' J=i+$7Z0 u7< .U6~˓~< vGmTSUFIӯJ'RN*3uj¡vYֽcjzɉ7(ӭesڑd)"mI$=kœ :rǔk]h4pR󅾟qF"XE ֜&('²ڜH^kΗ`s},/ju5ֺf̮LS˥6E^Ƣ$Rk¨4&RȐN+1Ri\C^>{PXz[J%+DޞmLbIMk=c ڶ*FR,:~SK &\W°EJ ieg"<Kev|*2FVwr.@#j<]u M7OQo y1pžyA `ANT%쎶³F4iM4ZDrBuD6id߷TbB@5gcbX*Ҫ0X*J/קJ ۯ6`zHaODiA*S +j<G,zp/m|-ȕș[? Q(%xN}fpTŶn[Zy }K!XPiXTX[ƪ 7u7=a%7Ceu*U1l!g6j AVݭTMJ+r-PqZ% lX7[ozV*vR_+^V4* ;M֠ՓYʒ N€ս ^!i'fٷq My7LFtKn|?m XX7aFu X;H$"ޮs@oH>*,4ތ#B\믅E^J ׵;6;,|e<ـڙ- ?R v@H'B;Q~QQ)ZS]%c bAf+lw}G'SgbdY0I3pC[]i\Y[w=q$!.VBkhV>xĮdFv#?Jٍ,ۉA62"hT/,46#Ǔ"MQk})2߭<ssK aˌFvBU#&SЎ{tOޖ\X X4z1GzfiSj֙x&)~𮵫ybF"hQ:Z>ӯ7g<ęQ@r20PWqoW`)W)qX&|I3SmߚϻIdgr/IE &}?(/{WUϮy`pwOWʷНz~J|}œQ,-4!ܡl$QVK 1Vk{%"؏j &HIAq1J+=/n>SxYqa&׍߯visϗ[z"cJio<K!{[Ι}tMVDM !i̫{hi/,ޘ\t&$0Ui4-^bzT 4ɺ2uU OJC3aW)G4zQT]!'MjL63`MIRLE<r|eBn-c7e#^! [fnmzU:z4&w#+*OhkoVNKC{_[V^jTX]%;zSgaӶ\Ss\! j~kHv-jrT [ֳP SaQuT/m#ƍxM]["S$,jo{u֖,ڲpHCqC?YuY2{[VɄ{$^g)&@I&Z嶰G:NV-vrǭS5#_yN_iMZr۩V Q-};It}OҜجh\:khTQHXgT)(mV>ȱ9kSMFIi,,?)4)ݦEX=S^5* =kBhu49v^jMrUKssd\Z_ uM/lPy]MGM*v^XP+/2ŮLGKuҜq6Aq^sPTfL$gr-o)3+k+hO"-3 Scoʘ!2KZ&W؄;R`Nԁcf7S@L܅7=m._)ծ˜Y\_AJb-:R6H ][muԏ{Xђ.Vv:5j2...no\&K M~Ҳ`9.w/"Hg1Hg"q@N>u8T`eڶ]hRB O( KUnDZ޷,t('(7]'%p6(47P Xsސ-1f8H$xZ_(/cMQęㅲXZ}=t: yiVL!eɱ׹:ޚ\ɿ)vKv7&-eyIXVI Z8o Rٟxh {0^%mXu{:|s8!3UɘoI65_|?"6~yv1-[X{ddf挩سf=-iR#*Jb̿~(dYHa80O 5*'a؟qZO 9QU,nOp;S"=հՎCM0` HPSCپm7eL66-t\+~ɮoj0Em ax5 جBGZ)`/xy=WjL@;KMaYL{Qϐjt5P` 留)-q{a{ ު8am7u=|hWAM`&%qJ Kj*,*Fm̤Z)3cʧA$%t7,km:>N.Mj.{inץo׺rZ3Űw_#%|/W Lm*GZ{\giW/bPu@NQ$]t׵iUduMY@ֺ5+W5Yf0K-ڌiW>RtMX5ѮD0zV!y[(` YXմdy@;_,FoO3-?,kKhv+GPzVV{y"]CׁL W΍|.sIڣP{=0^H$:y"lSImGNΆ2#ҵ$FBOh!9#` tZr#[wi[gb@kn5-ki`LcenS^ YLtɳMSuOp[CL`2b{уC6@wMe> yni²i֦Fl4r2U:*uҢйڷ lWXЍ ] ^'MAR(.Qj٭qޚk؃Ab-bT5n@@n4sYm; o҉642HxR4*5حl&֦K%1"E6E2dd3$eX=[= mԨnBUن[Qj_9r $li;m1Af`QSMlT 8|G5RBUл\'k#rߜݶ׫J :BŇ‹h$.ZTQY4/-筭P @jF1*eZ4"!Wh@ed$"T{6((\Mi}iSH >S~&}6}SH*?1> .б:S @ nv(JEO@,KF%w Y 1ztQ>I,nKϙL ȰwZSFrWKƑ ւYBԒa7xR -_L JV|:$]ܚͻ(\zTt>4*F#p4dk>ݕmmmNN"v; $\.~ EeV}!k4Z#+7̒gƊOp,vX7ZY2OHm:3XFFVA&ӯj pAQ9Jq%H:C_qM[0jK}*窞݇<>Nu;P:ZK6Hv?ߏpK.tG1UYZiy~Sio=i먣&ݠR D{ذ#H-_b -p-HfTQjM 7jInHE6?j'e<-_^`-H Z߾PeT1%zw?J`FVx Pfm`:Mk+IJuU*QVvAP wVhB  XCSnTPe(ԏs2T䍭𧦵0S_u H*,ERץC&S srҝk #)EظuPX^DPAh"X uea:x2JtY"q5GiѬ դ؄}UFnDW[UE{HUʢu5h[UX74 ?u)מSvg; Ŵ֟-,)ovѩ )z*WgAY7\O^v3a t#͕Nt.4Wuiۗ7gSR و9V GzWpLKotԾ6- GQvA}4Dv?CH-c'ԤqIu1k*2k.Jb%2vYzvRL"Jڲ¦2vՑ"^xXU[0:0:.p'AF1!m%nZFE[hT_[j 14djX-39Ojĭ݈j| 8Lm@wL3HeH{bC<I`>hf6A&侵& -{F*"_'r#iݏhԅdt@Arum@5҃ ̧[-rh-/cސ{QktPBR4+q<7 s I?kjxڀ݂uPA4cH®oʐ1:k@?Xpoa’Bn69Qqz+'cgۦ(nSxj ^캵Zk#/AJщbbUڑgJzBl0&nKi#Mn'Az ֞jeÏ@#&$5nG\Ӻ6zJۭAYw`ax!~jmx t5oPoب% ,?KHΚb5 MڞR3k)&X M $n++h˥8B@ULLHϙ84.)2xg>%:X]1E񈵎t5r1߭Z. #Ƨhz5h,Nsmu{*g vc ;Ue8-q|X1~B 5F ?Ϳ:][ՠS[!m6u=B t)R5w#+"׮NZ`mWPuDd{ I:(>46@ #{h: Z0Z|A/IҵQFN5;o׫bLIMO@-XWL.G'ڏX-V+Hw% Fk 5}< b=+Ε-%v0A#`jtU,1DK9E7z׎_+’)ÅRI+8}|FV';};OTWN쪖Y/am{xZHNC{V_LɻB/pEM4iYF|Me IkK0Ofub m5kz"ADs$:ifG/1yT*YGk,̖"QHj`ܘ!h 6>4)1wcxv]hhol(jX:x?褌UWK "Ij^%! Q`nGԚ2y\]-cKBus׭M Nz**_[Y$^{sסҕ8ͭR5 \Z‎5/BKV,͢IJeUv <*ʢ!T6A3ɗvӪCsvӦA=f%vh K6)+$M>ܶ:Hrn™4Jukj t X_i&ߍ<@0U˕z^ފldoqPz/+pP} 0?sz @B]b|SqñIiӳ|& Vlr+]Yl8yckD7)7uq)UFcfVPiy*H^WP+SFBE/E3@^μ:h\%jz&+\Ga-R+J) Z Gk_^D)"ң!Bڔi\; ^J*'AO' Y?}E[N>EBqsn:BD(/Zˁ Y(I:[J Lwڀ߸\ٵQc7w]zF,~յNd*%,A'VUyQQiazSIb/bYg $j6q m@+mt?F{iP$#P,Gz΀FfӚ%2駇ִI/i7'52v,/m{k^QnTnU9Oi,maʰ٤=ǿ{+}&bi]R%ǡwT=XSv}?eUcJhH,Z5(ٕ`$~ꍵf̩Pw3ʱ;F*{sI82ZںE7jcLduގW/)NeFUկ^]+PZ1!MƦF{c5}~O k ֬_Qp zR,fխN͒m/UZBQBċ/ZZX{fU,"Vv5P? MH7:)CkjReYtƔArY4 Ct.vnZ ?|KГv_ZF^iCSNd3- E~d0:PpOjh/8,E 2, M<0|Q({Վ6Vu;O o!?rIzn(x[ԣMiN/{[Z0́Y46N@79V oOR€l!mO8r"& {k>W6uٸҦ\|_dɰ7]{٦+;1K1,3_|G[DsREbioU5P|GJy/{)@-ecnS&&hPnKBV QGIS^h6vbĝocb 5 iC~@(XؖcAP ʳ{L/ǤxUY'q{bS:* #]YX11UiYAdV6TLg!6^5h#%b'Scڤ2!(Sheu’mm}:A.(= ZzPo\\ :s@ HXiA$ J M"}E@XXAyl*A׸m%[_S,\uR7B5Œ>}{h1p65kR {7N4:_SP0f/`AWc%pocAC\8HȘ\)z IPوƌ URF7ґ62j,-1YgW!aYl >@N >4r'qs5SJq ޥ)tfP]CFtCLictŜt?J`F_dzc?ysvtx}7n+&0gt\-s{\+֘e"YnNTڼ\ d0h@J;›ӯN qk:oˆRkWw X5 g@7?[j<`u=u%B[kGTZ檔fUլ'&]N/abzq('"$4^uEjaBPaozK^?B [ֶ,NւA>F2ԍ; d2l;GnSL@4 FJK`z1uJ )vݫ5YltE9A<ӾU;UHQ>)Sii ꁌV?B*Sѧ,su~Mu+jOrl/֩ D\ 멠.w'p$ΥE٦ $IhʂA>O$JU!@Is/4$ nehP;^3$6#y l45X"l\lu;7ӶE* F[SH~v3qBiAj,)Q]i OQр{,mm:,_ H>cZvp%}+<?vaW8ًlp:Ei{k2Q9Z|dV7oKiڵ2ҭ!ހ H`vZ#֙)H\۸4Ly$G]çOPoڀЖ($Ǒ[-Jl9ؒރ̴){L֐+n`vt Te@=HRIj'2Kw+X zP (bX۠F G|hZUZsDb+mN*>S)#v'S1=l62LYdUTXvh.y b3Y+)`nbM0_RGH-$ܟH6}BAէCYXۢ@HI lh_BcX@[FX︵{L-lNXdm @^N~_<(NF: .MK|mA6.#Kjrr)"GёMOY#hRZ1jnɵm##`.="" Gtݨb@{۸!lZd]`b5SM~sG`wu :k@nQPc 7@h3l.Tj/UrňJZ2L4]BJƹ|믥[W?euϘV갮Ov5fB~Z1)IlZhHrt=>ՍPQ!kOSʌFIAļTXW28SI”ǥں:MMiK ʤzVp2}r3S[xERfU? jjT#JvG}5Fɴ Vi&՛$DVY_}4V&F;җ\ę$sޯZXi ]d [NM%#_SQvR1Tj|){2z?qu'+L X<@|6£me4&PVPv [: :ҮQ&ۓ(ԋϚTؚWrIǧ< czc|@Ӛn aުԸ[>Eg #Un,FuV!]GNzܾ0QٮG9q= \㼉 #m3)m2s"`Vܝ+׷0^KEG/<@NfU`:V]\ BV}͎E{ԮV0GWQ뀬SʌFAOkvwk\՝Uف-mƨ142:MZ\h|OڥPs@:K۵J$QuQܟ:p;(/L3mk_=ԁsU2HԶV !PY6xW%5L@L%b4tSJTՇQН %662=XS<ܩ m@> MP%,ný&a7騷=@q\m Xuj6rF:0#xKٱU6+^1fLp!Epo 2^Oq֩M؞u",l5&fRH#Αx!g`Dc_.E2%,ReQrS8ŏ'n{zRe$_ 7xh T04n|)fhw#Bl5{Piڠ#J6ۉ=|M8{͔44w4Bo emE)g&&YuS6C]acυ [Z.U"ޞƚCC OQWz 6-bM(87eA0l /$(%&v8Ӧ뭩Pȕb-M4YB /~OqH<%#mFUPZ5meQ4U6)/AUD3^׌i"h+Ο!d@^psk:w- JÖ[y\pQ*'A; ?zp\{.bK*՟ qEed,'_˯W7g;nQAӅ9 1I=f6Ѧ1uZJuQ~ׯ YkZT=M+vʒ(;M/$_e܋۠Oԭ{UKZ@_[|\EtS@,~ͼj3ȑ$qVeM{T~ivǭ?d!`< f;R,kNF*ʗlIҹi)&PmjS]f]o*d)d 5e\#$[\*_V4agCвpT"&{[[uqD'3κ766 xPОU#ZLӽ]ܷ/|kMxf鹩^U +ש4vs1/WK|E/t[8եݯetrn:j}0^+ҺVܗ_i0Tuf|\U4!ynYmeA=zxmkByW製qv0/4n꾦vjo\.97+\ew@v󳚬{U!Uv58bwFJZH,zRFrAnGNDJ W.BǭV(X}Z[!ҮBAfSNۍ5Ҟ QF>TXjhnuFNCUq%^J[9$:R'#5"{hfZzX;nk9 I@OR*v9 QҢEAR'F[;MBvֶpr!zTpk`{TdGU)`D;yS`r@H@T8XU5<B)XrKz_k-}]ύO! 6iImS~Z2$N^%E֟/ܽG_gT:adi5M8-J'/H5RA@{%HMT[0jY<, T !R~.j>2yP}?qQ.W?3cr w(:5ֵdjI;LVCMxƄxrzpoX2I²7A6Ko`6^yosR%[iT1 %ԏ*}MZX.B3z宨RC}lo}?u(hSMM(R776li0^ég: 6-MyoFFkh$ϘHu˜o\mo/:X7n|iT]d4aI×!Aχ7n.)ԥa-ǚdmI4I!1BHH4g$^]FLډ!Xۭ0MҤ2boJNp=.;D.9B#}G6DdaEIw97tMFNNCՓQ|$_NI}@e*@\ .t]cfkYۈ4TS(Rw^"'j:O]SFC?ɘϮjT35Sе@' #zX(*z}h ".(ZGUյH i`O#`MSk`G+!I[X怨  kkPo+)A,zY#1N۶N\ڃq׭5cok}*x9R ɽiSLpݗmkXh;٢ȿRq&eFRNlGQ}~4H!׽( Ȅ9^tBC=VE2FB#9 ru kx2$G} B+5 )Yef۸~HM,kKksk:W+TH }jVE HTE{p6H xV1:ª&1`=vW#ؖtnץ\i=9 [xvӵ* E4!*dސYk&Y^V(,,.oJ^ N\tӮSm_S(˯gi!I@;lD ue+/.抅m_۵<3<*X–h|Zf77FlϳAEY3z~nL,ҧ@jHw($ްe&sEm=)l8<-7mee[9A>dtrJf V2.\W2V9FT4W/Lڌyommֻ&X1^@[նvҲ6P_m$LEۨ?jZjƐa`4'լ uɼZ\JTZVbrX.l]HҊ:A='kZ-( zUdK{knj4{xoFTAsbOڱ+5Sֶ,$ZN ֱ{w6*zR-Z˔pFB=u!raY#Z[ RRr:U$\}oZ ;/+sYUBCۥJ^I$PM* bIi" ' JG4V#(N M##,AHӥCCKUTz|?kea{tތ@{w$ߧZfb0YkK$ܞF?%rx|}&ik[SQ @:v&f Fm}4С)cz  <:BS M@KڀX20U:w: nόAk?u 2g5YmmmmV̸ 43ȎUnһ-+osmEQUiwڷ >:ӄbk S{@Ӡ5JH RL KQTjmYmMc/7IOFV1.TC} NkIPɑiF||j"P12:+봏.iChI"P@V7;Hd2yD?F}/R }h 鶨ETR3= i4k7Q,WbBtEGm}:rm}],M,{LLԲ0=%LS%o}vtiǀ5_@,mkoFRa)d8p^vѓuomk;yyV샩-ڕTXczF:m&7bqj0@z[C[ʙhGҐ3Hl@6ҀfT(#A_:ae2Nt,@?zI^.5#ap@{a?d,E7IRE$ ø=*n_|h2쪱mQހ19FO:Ʀ< .+ $DMƵEai7 [[ %qڭ6$04%bmҭ4 mM#͌UoFKs3M;NBj(mijAfb GjOkbBSA *kҧmx~[@+ VNBSu.XIJEdAj֐@)˅[Kt QE꣘Zjl1ҩ7-Kh^ݍ=z#@=o• U66~gק. f\}k.m}n>ۤ;F˅lEig"[-q    U!LԴl/vᕊ֣ߩp~l^<$ kmlY7MYonojkb5K&rSNƬ ]z<tWj~iHo(Ez_ʳ60B[c$oKVVFnK+Zs%ֹSFA,/WԏVۡ1]1]㑁>5ǾS^G \+CrmsmXjdȀuw #a2~v X A==e&_QkH!Od7ǩ@@ҹzI!۽=- *ldHc};^0K:d2@[5_s~Lc \.#^5F:(XZړ]_RQc{iՠ1>$vW/`6;Yr9 [[V4AR̖dj!ӿj-A|(\Bh 0C+[_ZV`u)Z0fm p<] 'ELMߦWɢc&Ck ڵ$VaڢE<'#kߍVԒn{Z+ A>S' 1)(5:Ug.Ek)y/ZMih)&$}k;z9U 44F@@6"=[:_!@AP* Ld$M,.}V UjX/[_2\nlzi@r7Sֱ4IUH(VjAfڊXp-Qa§]Lsq]1'#*= j:q$oQTm.j*KOŊ +Y3_O L) dQV=Ӆ\ь@={ȾZ5VEz1.<_ېYtiq fm.(Z%< i6Қp Z޲~]>ԁw@y}iײOƒe2xytґdWi=M*!"nZo}Mv`芲]Mw YSʗK!r(\_e;?Kp Z.m]7VV_ @b]Oߛis8|E2DM[}-J><=QPz}iJ0EMƣ"]miF?dacLw:§ę5ֳMxy@NS 4{%޺~X) F6,7\J[ym;ՏBOP ZMsuKzrU R{yUәlnhڕ71?DetV͏"""1RmXa|ܔ^|Oug]/Dv=^ g<@鰫z.5r1?کS3DItoֿvWcE1F7 |jTgV#ҤI]G<CUK 1z:~_z0Sj2TԎzRʤ;SΕ9\Đ0.6=$X}肜LW^^xL9B%BA:?{p8{kX,'թT׽,z'(`i׹"v;4`Ju=AhRw\M4Uwtqr@#]j,7ߡ?Zi2*(cڙ=#iktP)$vL`v*zl2wSh+{V2!ہEkQQcfR/< BNo, LA=@,} Վޫ(c\J#@kz A [mO%bhG5qU+w;|eB[}L2݁È켶Z*fL6@ga͵N=:ڲh25ν-Jl0/vr_Qlhb cuL"MQ3{mtu؍F/ 鈤Lkr4ZQʧSʦ!{Ѧ9,lK³n7k[R׬;JqY/FY^;o*j-u>uU%ȓG[24"SVrюr{\ݚ3PeLY&^بiC4 d`w$gǭQ88M?5=+k}-N3/)]|Em3u8lLANg(0*5|k\A~kG\ NnK£KUfaosty[MxJH-JVLwHQVX.,d׿jaucd9WnR³`")*xLhzTr}BQ׵ٿAԚ듆lc LlP<NMڣݬ.VEciFW F-bw֯Rgp]Z;<"3qfQ(  -}Esktx6ǽ5l)$zo0XjMx,u6S{֝=s^S(ʏoS+?"sNSieGz~ʭ,7X`g壼qX99Cͷ=U-rp27(53H=Ʋu=  ~wB9 ~#Φ:){@:~LBvRcRLjŗ@:ҚH;|V!gknTUO);{uR&{kZSMba#ڏ KwWS %]_ .v ^Z#_V,,vH#Z o:j/[ )VcH3"#oR饻ڂZHZ28=5Y*uM8s-kojtwatEv`oSiǗ"xSN>M+Mb PA#8c}KPVºu]Djg#Eq?͝.r^+v=ֲkc*IM TDȿm o u5m(wkxxT4ln C;!{NΖ u[ v5망Vٕ+!k[ºNpW-?SBXxڢӑ+_H z]uk`@QȔ-V~ݬ: 2zH/uz3gJK#zG8^ Omr|5m\M\—K pMz9F.F=4۔=I+ HܐBƪT2z$5;ò~Aˋ +m-:Wl+YqD1G DBJY9;ӽM,MY݌2XV2 FO1e^ַp$(ݯEK hׁS}m^~]j%d]Mt=~G=[CS@\*uҳۻ rWݺ ׯa-KEbUB׬CK" J_F jj$dIE'&s I`E[Χo㙀\S*-#i'NyN^7q6j7f6Tڎe\T gm7RB/<@ [4{kv,ٖ3sXe8ϖ-s܆L~WNT{roh4kqcXo:VpW{5$EWM{+nԾ>lv/]^֝ocʒH#uvv8ĐcuR*7% $ϩ5Z~XkTK{޴l9(zɘ%sf%[js z뱘̈́E_5p8uW@bBS6sR7 ۫ }X0;5Uk8G7oJiiE…ҵ(MmMo6,M!v7* i#pmIhyS5)鼐=MSLHz&Pkҳ.EǶQ F_[Udar%YM͏jU`Vk]:r W][ab>w ׭T&R.[OpK5^uӏC{ .NǽX+ ;RVLf`HF{\kqS5 (b1q֓Qi +ߨe"=*ҕ!_+Ȋ[ƨԛV@:mE, *Sр5IF{xDbVIz6ƍj*5qm] YzUT {*r<&UO~Z2X+#sw*m<͟i'v{7XS#|z+=6ʵi9!]RƐ ;5SY vXSذQ1Q}qHawaUM`EҏR3 ۽Tddm[Sm9EhȰf8j[LIP;k~7FU[nJݎ8O\[r~OU>?vk\V:D4 jAڷo}/VL\h|:ޕ"'/Ȝ"Z]|l`P,Jh&չG^XfB0t=W-sɁ&Mn |mr# & {.<5|U6plEVfEɷ^#i)E^[FAhN7)l,7;=5¡ޗ%Yg"2=c'iesXou #ig:@:Ԍ&RFmMjӃЅ,W)a;gh(GPReuۍʟ?4*m$Qt^T%6T2<>PZnET1Q%#!/$襭~k$(%P= Ss1X;Rt7z˔;]EJ $/~,oiPtluk޳|de;%ң'at"ƕ#؋$j ->+p|ҳz?RP#U7BJm&Y5> p}徺X"0jA*6fԥ-)#(:/ڪ[hȍ}:*. 4i}r`59RC6[\7d`X܍˻f0QWUț\\®lsRi77Y]wyHkQaCZJ38XMN^M vcq-Ҫ"e:^q4lK=mQ%q XCA`9ѽ5T2le Pȅ|*B" ߱@S*f7Ue!5G"K o*?L,ΑN<M,@iM+$;MP>J$ &nzwE6@5]7Dpkegcuٮ|#bR$JezGa,OMmcҏd_a:S髕`{~-zw/`bJJ6kzFZ'6VZC GAN_q 2I 袸춶W{5SbϏ<+"5wSx}È6CARĐk&41k,FƑ5޴-m*&K+riـu5[%#I@~£Yo.D  dj2W;ŁӽM<#gj.? |ik0) 'i"Y<b>"*$bB,8X+.S Sdaɻ{;ﯝE+ ίJXuxS{u h6Hac{TjnݍUTd+nՏf:0?bEck)fM{W^+XEb {VzpGaUꐉ#p~4މڍ|Ӧ0cKVv jz^-yz-Ei@4rV|[JY!%O_֣+!g[n|mj2r/̹=CDrŗ]mZ΁ WkkۧjRB;#R;X g:]vàzY >ӡ:۵ RSNՅRWB@yW&9kj{ֲplA2㸹֔Nw񸸎% iAsj0f᫠kFڌ[pCXp5Һd{ *ǿm:KسFZ6S 2g/'2E+b"wҴfvw{SFCvηFv6yTi4vAx'S)ؒf B/`.aʆ䯕 [)UF.r8;Lڲ:G^c1v(ݻP:WCdzNc_j+gY%kxђѮI 83+wnA*&V{ A]|hMmpyd]=+HB4/b |醟# #YԃUQ"@IɵWm<*C3"h*/VSksٌێ۴'6S5pvTPqn݀ag>9]rҦWmnǹx+Vyvh܃"hFR{+ >*`G]BMkܸ:4S︹2;vR/(J7'I`Tk ^SUK'l<0F kc~4ꥯhz7B|{Rɇ "Q58^6ťߚ>ռ%PͯiFЗ!L"2e@|VѝW,QWs[iS|~rĜFW,/ tO)3D۹W)P兞Pӭͩ*1ΗeiA21POӵ*EPK-xHlES[j|p)CK m=?MF'k&08iT!uqNbI``N=BzzV=3 _3b>k0.Ʀ칮K 5ӾG)8"|]HDO^#E+_9pR1Ӧm޺5VV$kcQWmpaJ.g %NSF2k]yyּsq\ݛ:FG}-Yr M{]=RBÙzWO8e^p,a9e-p}]/AGuh?dG1b UMJ$V Ydș㽫+.ZMlg+E'1؛u!m5ŌC[V+b{U:6ٴS"MuZc3vQ! cҳy9FCzIj?V'OkQwNm GO_u1Z|+MxZm 4y1qZHvR{[[ќ]5YJ}ӂLY4]{;E{VI;ZJk])f kSev;Tka>ZP_ o֏5aoi}GOJڦ n6C"R֢ՋAk9N/Z!!=+&Jɴkc* ciZi#SR3YnZecM[ܛt@4M{0iqM<oFܫѭ;D]FX1&2E&<8'rTUmI[o?Tl[ۣIƀ: XPKAw."obEڢi=zAB[C?WҮ৾5ӮX/ИȰim[نI]"Kwڔ?ƅΪRhJkU`V:4Y92C)V۔Zߥ$l²ŰyWFn#Ûa~_<ɜV\Wn+YUorcYFFG?bO\Fڌrpb6zTF~t3EƦT>Y[jZ6,VzplHfỌ»z-svj| GccC SrN@Iԃ*O41q!'_R!e{EMHe$Mzr"K-1:XD4xq*>kM\&1{v7Qe I"9XIm@Q:FQe,{[@>4JqR/< x/h DAeeuf8B}cuVWHEW-tR@Wcf;NOz"ǶkA,U ^SC HTaTano}hXBz }XC6[iPӱaK ; lI ,o1zU@t[kS`x}Ѫ@e_W*0o3X3BmmZդ f.4rF f֓tz&1Ȼ)C0«>Xf /m/`TȊSJ$-:"+ e?xLa) ;D^FS57֌a ocjh{V@1ёf.Qǭϝ34!p:8='D2)$[Ֆƨl,lHx}(;*$s!h{_\Ѥ Z5tӨõt3 Ƥ/jTT Utup$`zFPXcs dD5@m湌E].֚2޸Jڱ,ԭ]z8l?5ϋ0<+MD} Wm 轀yXfoX"QNPFk׷z4 G{d "#PjT J[yVwy0 bcgy:إ0`]zӧVŅԍ-__)MGQz4 '%'qH.im *!o{ۿ/ v@ zׯ|Qj4];yT]ر:֨Ac&uAe{ږxgS7`7ii6T)q*LV\Z.'vߢMexݛvb'T) ݘ˦Dž.OW:e`pr/:dpER^Bo`:ڝFR{Z/˜ }+#0cEW:Ud GL\V:;0V:x֚a3Շtk~Rv:p{jT[TOOQZF*P:tҲZ΍kOVh;VȑԐ= Zi9FDh47)tF,:Sw<2NTVoNjJwED8ߵtM숱ϓ>AoY|HӃ.K(׭D/UrrFOKh<۷\I&XQv5JrFXwi,Z6fTA,4̪u=44 ZěUV1rCIԃcjA>x*`9vw")Łi׭0kVp4p˭axo׫sja~cW&ˊ(qݭְ'G ;6 Nmk3nǰ'lL$5V<މXi7:֓d`̳Jс[kWXd{h^;lZ6j;:\Ց>ܛs-_ҶDN'ǸcR4QFڞ£6_Qj&[[E AW32 v+=5k;ZS Hf^f㲉'K WC0Ào/K]jNX4rU~ۦq(fW#۠׽k++LPgxX)tg)O톾HuP?šm-TMCFH o ,d}VxS֧qyiw,UMz} NY"mҪƀ 5,rL(Ck55c!+(Q{Rsec6q@_S}MgL- zJ }h􃭨 k =Z[xTtb>Xv5p뎢U>N]k.I (zuOp[RoO*>Meڬ6؍:@ݐȺFA?<ŁL7|ы#kGZ/IfQp,mM8%5*]z(YNrQc,XVj 1 M7m t i*6,IL3 nlJġOjyFev YOxr G`2WV1G}4$Mq? A 1kZf6$^%C`Mx})F*ht `QN޶vI]/FNG{H?SO]pkz#llTR}HwY45kGI!頧D?mH}JdOHOp\-(%%lyЏLΜLȾI7:u<&8rLdv X^tuw>S5~I\|(&&;OY_ kJc›A X<3-!6m+JGzZQ.IlB,|5cxP̠ W(?Բ*{:'VYA JSNٍZM {V=|Sl, i^)MwT5;*To2cm-OM4i^V?a{f2rH]ܚ:r8X\*]*Zx |Ot뤊_ b;T\ᕥY[mnZܴ %@6zu,Eϗ1&XWF0 (e_"z mnֺӅ+uV*_RG(&D,ߛAV~>F*>c8AҪl1̤˳^N>9FMxyx^.*5z[\f;$`ס8g2VmDZL}NQt %puǭqruzOkg;FHlc=]%kSv,{BAl/T^Y$kQ="`XJSR(f-[?wl) d\b$$|moogjwڶ#7\ҔXqK?ZL&ӦYmG`lV5e'+lńZ1bq$wS:>xֶ\ՇYvxT@P3mt9CRwnqLm= ˳]WNY:S~j,9BX"hhCvOcU"-~5<%6[RctQ۠쩪-qYZ:Rkw/6F;u:Pp2m \*Sɴa-=tlS+QmF+(:ZАõ]AyW]uZXF\e#)o9j~?LnmaηIQwCYS1&(f U%.I n}Rl/{ޜۆ+B#m!nP TMxT2ma..b2cc} GҸQk=6ȱo+iGyۥv V!)>;L@e7%*uVkڵ \t5XK#pt3d,glm (auI;Pr^rDۅHśaTi؛ N8N^Sp*t]r> nTi:v&ۉ)ҘawSMEkMde7Ac1oȶΐ@B(cZ8q2$HXo5(W>ռ}l'4a[֟N{n|T@ݭ]単ⱊ {jrg"xHyNpȤ6{lr8C6kxs܌.kǽg2SZ@aRiF0i>]baSad^hftZUX#oӦ&&n"Y2I49d'"uVDU[cң(bz\.kX:Iꣶ{tU4})ĺdWvᯡSzW.e/S1)"ߩ'Tӧ@oZ''[,ѯJF{twҁ a K{UQ$LJb.К%v*epu `胋f^#u Gm_ ^L`oQ=? 0Opyvf,@t=>eI`7oFF:F OVD4y+,fm GjI*A"壿4p#kjzikISckۂ Gvi N?4iiGk1cSxgfG+`?/ߦrVJRO>դW⦂Dea|fƛ>9V=ZͲ ?!)("7<,O(G&؁m5rE)v㐁$hj;-dNO0MTtVI[N@:zi…-ʁcȱzcM5MM@I*j.fNj!m֮^͝31sЋ7`rFW 6>2$b2OCjTӵ,\xO>$!gX#Vm#9Oa2彭}Oc6[upy 'n&Cz^cՒ3}>f@ {֗\^-#GW^^A {b<{&D4`1"!׽SR#O U"6mK f[klTo)*A ~pvduOM"(]1K#9ʀG _.olH3-sYM놆D`zSyj}KRh6V҉֤XCAnڃ0hcR.aQټ}zaʢ:Ն6A=@eOkrӓW"Eںua^$Xpi2"d"x1: g #^4v\Vn0n[Ky,^TqKh'5e*9,mU(q u+Z+k֘M"(ꏠoסsʭocJ ~:5SvꉉrܮD{ԐE-oyV[rMYeUxd :ђ[)cEf;c_RSj~f`Ndy IrOc}dəh[HR/&kmPQpKtTu^d,al+mE"uQp =t(bck$XTKVW>4T1FdumOʜb[D=60U4KFnJh@ *@Ш_Ӕa|tV{,u# wR>|ؙK2}/W)Xi9 ʊc}ړzQ,}Ŵ5 %fPDߙm~z92\gdMhf]<59xq Du*:U++Ga_Sm?.?ZΰWR -~aѾJY W{75Q]nA؞op9Yѭ~.w#/~# [+ d>}ᙅ@@Qcm{q#c꾻Bjnʑ񳃞X) /Y[ 4gQb\6K;ɒH oAφ+, YG,%rznceKf mo*Y,Lle5ҧj\ٹl sqӮs\>OpoB3Yn]殡2"]SK"'.E=Tmr̛ HиoXp+zs@ ڞWG_2(h>u٭9xY$ήY#ed 6 EM8m:WNf~;8=k6\ D[V+_rQlb 5]FʖEF#C}]AsmOmuz뒵'DQ}?/QZ\{L?jn[MqZ+@䣅b&Lxk)! ^Z7#b@ .*Lɲ v1_jmvt#K1)$è)s!P̊n2%\BK=B 7'մsr9~Iߟl V0Nvlp>~D=|jW 1(|.+l᝭#[0uxFJ|dRo~JnUdVD ˪{0i|Y@(|'!bM#$Fq`:xڈV sae^98FTŵ[a3%yI{yDR)4d"K^k75v"o0Lm4'gH{jiRIOP[x_¥r $r]^§]sy]wF`?-zk#6?#n՞4 , -jSʺq=ݹTyNQkVK x%-%߯m{ qL/5/ [7!w{iZN<{AW<ʬ7Xd޺7o mkY㢑/k;Sn̾CzmjYiwǾb,Z`p_&qXMcQ{n=de1b:-vK]3Fx׈l$'LY=]oEVnjiJLݩԞ949,ZM5ʹSoO:q DMz֝h {k}L+D:5(ȒUn²↮**./Ziu1+ҵL.BiT/B?uepRY7+H_WS?bryc>53l) 6SOgj殇T2 ;XYousnz2%2-\ۃ8Z&Kwm=U#1Q3m75ە񭆣O,M\JFQ,#:EH'SO|. R4_e.9;m'oד96- ?5y7$\([4gt )uj Rĵ*jt&ڵVv5:m[Go9wRB\ܖpj*WG^♹*-.Gn=q@k9`! z5:ǙTa&eߪ-Wna挖]TJuo1#J6P&2ɒHK\êglcڋpi]6f!h{o"˃)Cލ6x̖qbVia.F(>ؚvs=+!^C nx^89X$n::6'e2b҆wɋ1`3:?fN[^0h2&2i$?U6$!~0Щ`[[<+0 k㸪TLrIԃv82R/f.( P@(W,k,䃩5=}CZGHR1TGeR9׉>M+ ^:L>m& DnWg]צ=䐪[5THEϠu,փ $/x2 Ơ Pߜ4.m㾴Go{\0"p!Ag"D{HS{F@Ͻ*g=*)P] ,u 3 [/`z:Mp۾j5r@H&bz?jp@;hMTUti{J :m=#3q[zdG˲a8=~TEd"A"Z̎,YίZ\B տ)u#:JLT)9V<Ϊ3@&\ja%KA@:UƵ@g&]Y T iYF t$頩q^45rBBv,Xzk+[k.>#Kt6sd0+OT氻4"+{jʖJc9 yOj߻>77&;I nrMEWN$};\?17n>.*YS7[~g 5%$n5:[U)JzB.h;htZ䍲A6sy<<#:_Kӽ,r 5+$li /'*ie$h/k 8%W,…m^NSL7չ6QU)-Y{[mPjw59K[Ts vnVgImow{=>K } skvi<(h=/aZyWsQ֕hCJ;'2SѮfbD 6oR0,*u8W#!X-főc@uϽc01kNu־ǰ>>BL9Y @}6EMo*u[WLєBlW깳?1rVqnέ/0l0F[ G{{hJkbbm)o*^"m#3Kp/jó),i8B#gWʂHMzZIf}ʓQQihG77k>ί[]!qbCڹƯ'0tZ xWD"=z%9#T:~<^Ud5T^cfK|;$¢vY΃z|y=c. QCR+,R\bIҏ[LҕF: &{crH4ҫk"䝮,-җEO^8! i@S4mC[Jbk!Z;V kFXCҦ++ĵR,6Jb)V_OZd$&KZb.@xUkI*&n$&>FYfCSQ\|%mNUȒ9Ae17k^m9܌B{*6x1ŵ埵ԍv:jY5(DW3#&-?dXpE+a̧FF Gm[-0 Iu֦gI,ާuGV$ZDsqo*)"34y~>ɹt3!!9+{$[JxC22kQݦRSS#kZha ٵ7 FDd=tk+9\/Kk ԹrESH5ZWS +7j隱NQ{GK a4doݎrr[u{48.JWiӽ84[kIi)u+0LESiZw;M\8Rp4`?,w5zp-~N"Be>R=[=/빷aރ16u>WI5+?4e!$uR4XF8SvaUb5?ι\}5YO"ǿz]J̾KFj~خT˽ͬ4u`t 5}: n54!䄄 |N䏸^J]}tm]aI$ͥՎ2(d[mǽ=lnA5"h#^lR.IԃS5iJbں5G r"HhFV&=#{Yc5_*b#_irĨ:[1]n=5b,"l94f)?EШ 4z1O;{"9򽧒B2.]|d0rE. =_PvB;R52OAk<$160~\ ZF*tޤƈoH=*K*Nڋ"mmI"Ʋ\f&% ɿEuepV%TP U\VXqרʆLeؑs_9)҉AW֠iv~;+5p5d;  :rUm" 2 9$EG&;Q0';,gEvoZՓAiriR dާ:C:DH\Qx`zU*)d0R2iZ5Q4n,r0nBzMc=(*7):~ba]Ů6Wd]=@U ݪK-4'xv@Nt2 jziJhUa_Q,.YMYF">1єޔPnlz:ZkNf.>Ic[++ZܲLl"E^uϾ#ΑXO&rjiyC0`$6wOV&k~B)bߧFݱU ],;W5v%vQ 7Dh#Pj~p~>RWVI>ݮ,lέcrHy][R|sw1W{OM3 [*b]{Y\jדڧ7X{md6r湏@S;=19nC? +YON<_1c㥻MjFFut1;P\ Dwm-(acn[^p,efe :;"oȃqY!uޖn1651X(ԝ;Tv[rY9;ؕ:~[M_fg)2q$m /coWN w6G 7֪mYmThcGCSaǍ e:k[dcGa#q"TMlh *jEGv*5ՙU}קUkX n+xNC0nr¦B_`buׄX%\ukr$ee;zWV&~`zNEv:wꮒ0 ԝ?|2x`_:ʥ x }L=%~ɊU2mIПKȱ`(ºRt&MAJϳ\4MSJ˪YSVA%Oo^($~l~Y/5wћZq4'2_qVvgqqbosU)6 ־*:SSWfdnkYF_23$w+Z-XvHrt%coEͻxVA΍e?mk su5{xL"nmJͤyn~R S1,OzKA1n͝L7uWi'HJv%Ҵ;Ey߻(;~k2dXWqWdkq`Ap,zWFڪi֓Yڮ|jmw֫hؙD,MuchjZߖwS\1z`,,}El{zC?M)$nњ`I[_C.zƆ:chట7?붠tְ4~PUـvYk(+mcTHn[_OJmiA!h, 8h3(WSG'r9J|5;oOe5ym;. z+Hޛ2c;1z.CsaW ][o].L|o=%Gk ]*ŏ8:f vډ3'qh)M,ī(`4=mWQ/#=~Ֆʹ".C_*&اh#A,WB4K+jN՝k˚9-R#v=k}We< NWx;!&i<@=;nM CF[Ym"BýtXRzXEM3Xh%< ՓONO[V$ kir HҦtA6ab?2f,[Bi+Z Is%dm徵9@" J# C[RVSdw :\3ko,m_ (COn`PayNH;:J}RRl{L2ґz߷|dbdX/R@U ʹ<6.6x`dL]vNKd`,}ذaDlƙ(IU8=JB|sF۶׷`)6vobQRc-o2m ;,}q9hZEZsOPBE[5ڽJct>?SWod2dnõgkX+d[P>!`xR1k ^򲮫aT|ee){|' J&T[v~>a|c& 0p .DaK^H5 IU:ToA`@Yi%SKǭo"jǩ:}I/_,l9bI$"YdV Gs5r*9đ*o2=BE,4yX2̀ m?jmD&Gt5.ӖwgWҴI!ǂWR ƣ2ecS)cnZFv"iTt-M=XzQ 4jjOr=I%$J:ҳyk~(ػci[cgnOck+>iC76ҟ]k7L&499è1b^94_qn٤ȌL`tV%&}[Q4˴2M}B6>Za) F>|C];fy/R*K5>Sٮ|*p,\~Dvn˯FCY@åupmE7RXuc[뮸+ 8CXʥe F;!Z5 F/C_YI-||X\Z%֏+۽xe/=Uws6M3;a ^Hx&n@Jo!bTɸve^$,ǯJuei&ZfP~/848t:\̹HP\mONzZXR7 Xѷo-f7- gŹ\M])JMm=Gz 6Rlm2UƋՅ {۔lx=%gQjVL23AXZ8r,Xl4>[H..s2,Xjj3 $u S2V;k۵g,S$gtmmmSKvn5+Ma۔[Xt'/_:W.n \hk,4#mNBζ:i:yT͗:[~-"\hn' e22ʌidֶS`Z:ګX2hMχj-ihwۮ؜2ٽcO_,fpX:ѭg6:ؙ@uMM!h"%d$jn:6Rߜ^zMvi5 N hMwfhlo| I7xRAǿ֟zVY/5ʰsO4>k?Xt0Vpt9,WڋoiW%yEb,otG>:Xo {yVy=:X6׭EiN{EgG?<"g9$[tjt4+A0հ=v)6'ygc[e]\e+tuhؒJMsb(p=Cm2XLuǝsocU_B-j֭[w[P4%ّEV̝sq-g}w6ѭك5ZlV`%r\IknKx% LFQ6R2[`zw57T$ڠa{}kY%+Ǎ˰ݫdg]cG'Opv|=1%i\\eq>[~_+iyggwȗaVk٫̛&;ȃK )&"g- jw~Zhs;'i[07u'/4^ǧnL(YI>zjoƀ J[kӥR}uHPZF[@uJG ѦФ7:BētR d] < oIo*gGaK ƍ+kѰa"ۭ0̳㤀Z4;skregvJK~4"ʊu6X,bYu-N@a" i;rt2`4 6!Kf$,$ qw)Qۦc##c8iaW˕ 'y"b<A#Bʠ_7:yREؿ"sb]ޜv#2B[a$X*XYd1՝F0=O6GF m#ڪ" uҪ&C< vzFރ;c%I(>UF~<ƶՠriKrMҳڴƚ~mk*"9Lxdzv$zG߿/xc7fO^;mv8\r#۩4jnR%DKdIr̖IZU!\ 3 ,.kWqF5Xv\  ӆV%ĪaEe.Eq`=ֳsdx\ca#Kmx<-th(biQޘˋeti cˏ,ia -` 6.Ck$pw*C/DJ)YcYzVf$x[w6Mc%USj-T+T6+ 73 ڞ!% ĝimmz\>^Բ1+}Gj.mHNp>p7IkQL68en=Cʣmr#㘁ETsY3KT(w79ῆ0M3g2ܚ.09byڳ#Ò2\Yk=j}Zex$nװM.LF+n.8O#+IP:Һbgߍrmp\΋]Nr[BBjxvA3aԟ¶SNF멬VE/lkTM=_Ai<HKĬjZvֹT?bуjZݲ츬͌{@u4^H[H Aq߮d%t {sY1家Rh M(V $3)i _Mڟ:σwZծsF 0H\lrw<o*ͦbube _cWѶĬY{6tæb\H1/mv2g;&|2$6NH|8<|/l}rIig6n,Q. ^6/l(1H.eir5Y767,+'5FXtY]#oWG#j+9#."gu^k_#!BjmyF:"zU#Iyۊ ݭqZŁ!j"lV%8$GTTYW΢ZeFn4mQ1`v!u)kZ؅n=-ֶ(i"I#޿~Vc Wda2̥ N'|2ֲo})a%:#0?AYm98!EpnIR ❀U2,S¢M9r(k+\fISҞdHۿi&N3OB7T=gInjcaΎb *~`NDOiSZ[XK9KMGJйO),lw&5mIa+hTxxUd9RqPZ460QTh~Q+<*FTv5 ijv(9,IQs?uWxPҫںzSw\Fap[I6\4Fi4ԟ/Zji>~,kIvm,׽IQYHzu~դe`Er:S$ՉoP7Sk Kt4Y'uUŽs>]r(2@ԊTy6mb-LΌi;DHԡMq1ޒ~Rpهqc±߯-&TDžD%ޑomGkm _#kŌ] >L+YpvQȗ ">4$Wi c#<mF-89U. 1QMZDf 1t޶!]d5, f^;FȤhNi7CҌ&2f&-*2= n ~xS62 D;U$P4k"-)m-W^Ϋ ω69%kpuD=NBOA ؛ b$K8a%kRQtHCԯ[5QWnTLkεtBB"Yd@Q5WVyFϸ`~'y+dWN0]VtN"^{aH'x^ula11 D3m5-T["{ zQ*!+Q|iʛ;1:<6; 9q1vf++3 !ޕ֏i$sH:#•H9Lywz”V AH֍wf1b 7Z6%#;ͮT]i_#b^,\Zv A9Q(Z:U>\,̠9e2&dCwơsO wd,LBmB*;U+=EWyyqX%Yml\&q+6酅=o԰'L[Q#J6&<[=mQt"{l+ N@Ĭu>TKv;d[k[-@_|$7Cl9>k 6t_$qTw=Mkcsd` ;/s+I C =D q#10$R2kgK(ς&>A<5bk W8FYˁ^?Lq;e Ϙs5a|Vcڛ b$=((:n?]e5'hV֩ƖɅ,sM{d쵔ihG'~)ę" .cF}mom`F9VU㸜Ze6v:u /  kJ0r CU"Knj㼇9[oQ6ܯ]&fNvY  [n+Ø"W\ޫ&"G nt ]WYp^u~HBW226x*/cZJ'$t7'ŒDU}.>9$2^L"Tm HX5fm/'pZi,-k~5tFD,i{x^0e"9?굥Tp^tANՋ՜\78lv5^%dX3Jb`7WN5hFooJc Ҟ3RMKyC-q9=ٯLT}@^DE$"VoOƘ %o]oA}"ơGz!2 +ZiH*h󨺮Q"Hgb>]k4HbʃIbcx_4AVYzZ=vf@bI7$nSSt?9f $/Fk-5?f~Y%uL_rBǡ/b\k2E5*~R,8`;m>B'( ުbL+=Ν,Sli#}{zO v?cuH(m)S:]+;251q1εtϛʊ6zceM}NL-oqxs񭦾0ٟ4dFVJWϟqz5,iG$RjP7#,z5Kag#᫐\t`? X#b57ҳ9l[+֗($1MQpXl◖;I^Vd{ѓkQUV m{RM=pI:([U+=!xLۊ=|:F'$@p ~.GOuM]+5mr,cd \'{rϣ??Auj.=/L`/ON*$qf.!_?>I$ ƋGK?9{OF6\ "(-M+KUX60S(lڱ2RB1:j]̲q&o֟^[.qm{ks yִܩgy=7!TC]> eQu;[q#:̛/$;vJh3y.OF<k 3S7n󬧭Wqv"i @:m泖{m1 $onƒ*yn(l‰r W&&bV_:y6r˸SXAYf jd1°yy_P 'ijۓFN E"7kZrә//^O7NQȺIA1j6k-apu֞'}OJnJUfTa~N^7(ewi b~$A*uk) ݪکH 7:q޲PlXiPk_l"&"-󾴮%$_nj0qfbzV[U{zZn3+Vڢ&TpV{g \O6n[HӕXhVx) _ SlF~ *KOgbIJchkTFf(}ƱbM&ܞ0I#VSۯ坠cebuI Ƞ 5mvۤxw&S)iݙ.onՄLƮwwyV-4QOkzH}̀= .Cҹz^.+z=Ǚ0K\vޱUCnvFT֔Y%_^<B#` 5G$<6^o G)ϮYUà3=Ѵ<( ˅0P U$d ekiɌW:^#zQ}_J"nJm֜!SvVl9)q~\Q+',݌`*~ES)WRI6=hL!Y?#4n »uEs68~M@5'j7!tȽfiQXҺ,Si$'觡voH,;6Ν|ʇaPtGa#]5a(K{نx~q_"Dn.)ͭ;Z<gʶ\({ntILl[Z&L'c [hj7!i$ *z7 6X?JV嵌X#m$i}i_<71ƞ.BpdPFBi{bׇV&_t0$R^Q޲ZV!|e#(eFO+ *3)lu(Xh_EdVjFFZ_,Ă4rQ'--Z|ϴVD3{RGRnQnB !R[^1͗pag5"o>Y8m#VQu::îIi|"D?G{:zxl.!!)aԷsVڜ9c#6#W.'u#[9v@ͩ"ɍiqgsU WrҵQ$toNߦnWY01^/~ްW#Qso*HOs[a7}:sAltX;,ڱ&ɗT"4#Q[]s{L'Qԏ:Xg-cY, ExbLnN]c/Ί5޶1#Y[oHs|tUFzǝ.Xe 2 ہ 4*Տ|aupur&t1"G}n+;cI\dǧMiKh&2ٛp( S^ɹ91LFFݍWl6 kadue i+Vdrv3\ XíTJ5ED[~mKk\ 4@ ק2jHa PjH"(i󤬶ث"i=jT3sIe) tӁdVAդ&v,[N [wa0*/{__I l&oԑڙ B5oHޕ)+А{iLGc{GSHUHr6A~ƖBVWjOWkK"0fua< bλtPM*eetMNѬiy[oQݣiڑdwGjY }16O_e䃨*>[M emt&}*2h1'BCk!, d /7f&he~l8?2VڝXvV!6ԵN[H.4q!-~68-{o&4KMkv4k9{I# MZ&\ O 4a#RU/4.JGvwdB?궮+KǔoGQG:dcӱv5skaXhu^D2y`#}u].+i25R5ͮZ7yN5/ʴe[u O\奕_&)suDr0#炸܆׌[ ^zXTV; G|"1 r,(ij$K4bmriY\D|[#5"5;\+Y~!uQ>2W|nO涄/7gWңY>0ybGel3#:58^pla_|jZIqkFu&fo%2%Łic1S#%\.tj>m\}baZٙˆ;zSΒXG$CxpT{k69%dBAcyZo5^զ&Ҙ˖ W D tK0 hAOjǷͱcH VIr/jU;4y i*rs#G%_p=p)c["Tj-YjS&OYZximK#}A2S\5>:f=)63'h:fIS<4+~T6ūn+ ꥅZm~ Cw+ӵab˗p.W&mN(7Ic]9^~V5 vN^Omȷ{Z\3֊HSګ٦*< bFmK_B Sr۬'ʴ[ԇUmQ4dfb%>G]~ d恌Xsar!1Mjj\Fv\A7Dr8hJm ֚]Cb2 WQjncw0Xim>5˶5ד\,VpcmsOqu~g.X9j755 Rf@@v;9 `ŀ [u s6oñy_Һj1TM'# _Qʮ%@FG]?F{lT@+=TR)@]ʫXuЍ*ҔcQ)%ۀYmrd0s{QꩳUsU,v4fM4d9kܝn8Yw&vLĢjzZAiM xђJ)b6cm>tGΊVpL$F9ŬƐY`ov6?[2SNdvb)]j@rLz': I'OQ׭T,$E)A:ґ"fm-mzL aYp4vZF Bݶƀo7cd7Q;R %sƆo#i#:迶_o|O\ǰfD/^<8q FU|ZB܄9n2E xyֶUd%N.'qxǬoؓ&q/2Q}t&HzJ5IQ#Fn/PE_I+sϒl@FΣm-snk^Jrt9>+2`rnИO~xg۴|/\\G19 mybo| CE6v\K<:fAi+Yrx(c4L@e'ƵffY"L$M S゜0rgXn$\s7n+,ykH0] % _֙K .[1 7#Qղm |'joA2ě|<+]973k -UפYk d$cE]i9~JG,NUpGY.W+ ;dz}u!cǘhZi0/ݻR8ag`fO!h‹o (WDGam~MpfLK 0p㯤[m(ϑpFit!INd}9ڸC7T+ꢍX )MR\Ӹfb>"p.I󥾇sK$quZj[rqWuMκ^yMٱKlkFs|I!+}îLl0#\5b+O|kC-ޔWZaªL)sS폐dl¢L(qN]㱦hҵ%y3H0k=Of*O_ic!t&GD+OUֿZi]K/뵉Jӎ ([9"M`ar8o2ӡ"Kn6V<8RXdkvfm. 6_g֚Ubq'(%+1[.Oҗf^W7q_~_6G`uOڹ:.r f~k!aMȉ Rmj 5xmۧtk-UWI'eC7 Tum^2ߗ)8RcJz˖kJemՆeN77nxm`=zSnURd Iu\t#"D0$T*VO*a7Q|>!2pƌu=E^xec*r+ ?^ƖM\̼ʙ2 ("8x(391;\O2%Mg׮K'圾>IJz'Jx ͚Ycebk< iV~Vr$Pmrhܟ*ͰTǑ5ZsQ G܂;ڴ`aȬo^M<Ƿ*>Ɖ|*"G;i_ʧhyk<#o:_|/ ލnF6:DюycfЎ |dQbZ4x VdDs!o ,n/jc> rB\^7Yv#I!XOzbEbc'"#|q#4\*$_ `tu<>v{cy(Vˡ8Y<n;Yz ̙~gCS9<':1xVtM ceAsS p bpYHJ;t7= u\;%m@&|K/߭w%W4>hf`t4WWڳs|ML}0@ѓjwünLypq#[myF+?ܐm'CK~xi.:(4+aSޖFG#cv]iک͟zĞ9i4&8āR<@.Kz ЮW>L23X\HJoUPyc,iiUL3q14=jiNb>E|`۞D|XZW%*: /4ڐzMVLqˆX{{uxi#!TV]p^Yi$\zu륇yk˳[*@6?DUs"3L|FIe㟄]8p<VD;S+7[:vGȄP+AҺ2 ުTu]Aku,Mi _=;%T-ŚL KneZr58@IP5ٷ-ի9șٔ6jv{N~ aֺ2${t K_u=%{Ё֐7О(0%Qr-u";_&4f.ϝ#JlatdYI`kscڕR$IJPN^@UƝ}]<fmĐG[L(Zmt;o{"ܞ^ZʅՁ#Kt1cBxfy]V^UUnG9`ǮZ-OsXxG:z(4Z?VgKf":CW/2~y}m[e g#uyW3KB!Q£e;kk^Qƅcf!_Z\aݿJ٬,|WRDqa}Y[]MQIsf*@禽mGNَ;{9HY㌝fSy<^;1qS }/iq7޾GZf aO#beDX YJFG>MӲa9?b#i$H ܐ1}*/<GHlFt-6³g?,"P'a*)s2$H _o i~4r\ 1f#KnJ˃RGcۯm2iȂI+~IDW+)SOVשWc_DV$Ѯ&G1~nte9s G)nkTgqqEFHUZh&|nC'áV_Eg46[sEޟL|[=)at?ΪfOܐ4R3ʀr\^x[7B.1Ui?P+[Y7ϕWlJQlN_][UkmGbd.mK2LL|LƔ3h"yOoU`yAu=.R;t{D,dMOs.,J Aj LHg]zޝ.cr,d5hMg]2ONדĔ,ȱe)Zq`7S*A[Vw~p$[T1tl, .JiXiԽv1#{M3U9GwPj}i=-Iz8OyO\x9\\,fakƧޖ9f,Ps("< )iץ/<#/łFnTt5~ִ KV_FVXW἞em$N}*Vqdrkw/Zͳt99׼SՌndz+U~+ұ cݥ-$͵ֺ-Fxe~%Uі❼3 wZQ- e$w5'vw!#^497=tI,23&IRW.V]p[8ISYk&OkRc$jW[yWEq| 1`@%vN F kޑaZ6B>4_u;T0mT֚NKgWaEA XYpAirټHXu4FOVF%EgYXa?zk]ZqbsJXӻHl0Wp[Tҕu:ÊRim z.,g U?g,u)&ۃ՛ƵL#>ɮک-ҹeDŽdPAk}5)-_[mfV!d 6(o5[8>ŔLG&ۦ^]F.O PDc#0TXƼwmà M!!uܦ¹ltx<B-7[Vw_:ŋMZ&nbx<2EmklG6ڦl1TzEi;- ji J\h1:ֱwk PJX\[ud;=-/-Gpk{aOm({1uVw\mvbe^:ӆ@bP^K5^ņg{-O%\*ǚt~Yw^u_W24OZj0,x8]+~y&te_ԷDC]@)cCK}joGgd!ύsߨ΁zNљtwW{ vUe;Y~Q!4rT*n[J[m[猜P6qMkYK%\z6jZG%o s|TdC6: o*lsiF KiatS _2+Myg29/:ǁ4DžW6e&7)cKY]OVU$@A+AUNO1>D1+Gq'-GY8~!>DE Q'ak}k}wa沲wԂ7#Y{fW/xt4>LN"L"=>;!shhco۶$gv&N.*ns b<4 m`8(tް߯*|9|Q1d P%.9#r Ӛsw-#^+DnG֫&ʆlfn0z*Rƪƙ&)'`>ij3[UWgC E+[Md˄>dg(On+I/J%=6ʹa]_UqV][K9.[g4!/ ϲ[p]aEuOy3"i ]j(RǔYb-뭾ZҘ`$oץFr/debW#73;vj6ɸ\ߙ%vY`Г||{W=bײY'*\g/?\Ƴq^9l6^bq2˹?1s$tc]~# .rɓo-![HCdkL98>OG&q _T4l2E9ܥJ1j}r]c$lN?J\5ΑֳpV\\p;ԕojQe}:} 9 |EړU{U. ̬/[9Z;YeQ5ʔr2QK=t~;Bm::śxfB+j ]G-berL8]cvXåaq,H76Oe&s6IȐ#叀>3Sa a{koo Ì*mԞV8Ȝŋ~l>VbI.ڗg'l<\uPGz_Z51N mW{ sCʹ1U=¢jq:2Hka+¬wx)6S8I=׊oK勈#dєh rc1wϹ,pc`N-6;gx ' gpo+iX>o0/"6-`h ~0s`À-]Io޺<03ٜT$um׳-0?NJ i#pǩ{WDsl  S̲*n /ֈÝ8`,oU*6ih#VSA]vxђ稀t ރlPt  3o'O0JЁsi?/7!0T] \7CLkmۛmjY\7"ik3Z$YP ZJ}n6HԊ ͅ4d*ſ jU7-iyS'-t׵6ōn WUSZ{5? 7lOOܗ=f!(è^ι52Fqw^rm3~k*e>u66?!eQ)¯FÀ$؈ Hm="XŔzv}*s\@?NbwapS9ż+M|SC>tWѫ)ZZ.L[jN-&>3N,rve01#`F#5Rc,\|J޼Ifk;]m^s^Ss>jk9̒]}/q<&pΉFDe"*R\*cUL ]g'- ĐD2G-R|o 9g;`r1s#"++v0,:R$ u6;Ir.4?Aǰ&k5=6p&>yfbrrŖa){Yk,W4rU*#mAMQArqɍ6,lxTt?Mtkxˎ-Ck5.:o `B*}r2$F̲ہW6W/fkKY*ăs5U~X^^. <#keupec4lA5J1v+-*Sl1m<  !I r\7QW+w18|fu() vkg`\O1!qteFRH*UOں&~i19g8ef oꁏ=9n2O9&6\XRqҍo V[?*\IS+lv;tfՀ{o8cȉe1rko&X6΢g{_G#EܶjeN1o;U6/Q,u)G'B Tf^O,3I*e΄OJm l6IrinwƓ+q/n7zmE<,o eJgɍ1j 5 :.}S!p5h <Ā{Ug n(Tx9>s}]kV,Qp`ņtYY-GM6oqsp :V]\cdaYֲͦ'||~^X ⠟M7faYm00=UO"~dU.b%r9m,n9 )#㣒4Bu#V5a Ұӳolac< G/޷pۣ}|;g,2o_>kiqś ZYw*aK gviQ0LXޱ\3 ~ۧ<2 64,%65r be i,󖬸qK2}Jub3#̾鯝 H(,_kȖh :9soD\|ꊷU)bnl-|!!q82Cc 7صs<49C412;knviroWf1;_cb;=y%`$\ʇ붷?G`T Cj*TݠZaJF ~Fڊ7u-ʖMOtmOAe,\k];NZ떄ҘToZ-on2 qѓZN¸&JO3X+n|Aק/2cqq&8u`-Ndf+ș^Td?Z\,3du'CnՕT^΀A'kR,1He&:+ԉ)b$߽+M5^x9vOj#5QI yOqTIpVq0Ƌ~{8RCWަEI^{`~áiM91*b;_Ze`3dÕ&eNroSls<1.6h (p,П+W5^8kW/Ʃ0+QT\wֺqjs;)3N31eA'oO'p}L3̓,IB7Fly#䯎q4 u\X%#x60J)k0:s{*OsE;>6cnf,7}PtRbV=.iSÕ͎\%R39v|+7m\$Y oSkpcF]ץ _"|nd#-1b,F=NʽM-5UOӅIxO(F= tz7kG? 8 8o+mo|+1(1o cOkk8csX%_6@g;" AVڱ㰸XQĀֽ_-(y'ɣc7AXK4lz2+]Hs ?'/%{O">^Kݳ3O7r=`YXN5 cq`eva#cV 3UdSN?wMUuZL;.l/Xoqy`9,EU'K_++_IGS{Ezuvm}OAre=Tֺ1enpyFh {Y\]zK6LY^SnQ%Omr|H$e :Һ636"'BGeOZkǃb2SԾ֒HU9l,n:e-<H1K&O~Wڣ6R[+Q.Vhgd(=@_4[18a"S*Ivp6#ۺk[] tpa#(.>DqE-eۨ|1ğ%0ˤʄm#Dm<W <@m ?$0̦W%?{XU'b9$<1cKkJ+Qk/v, ӸoSY ;Foꉀ#G)߮k S9ȑnZru./)ܗU؋ڻ^L{mW.E9yݕNw7'j83fIP[Ml_{XZKKFՍo7'w+0պo4NgApQ#edDev* T~&W- Xmgk*g4sarIǪRX^o#I.dףT]psj7IŅW^r6rcXe`6Knk M9cp9Sw&{yov>Ix_s?!+HNVEc? U lhVw.m+//aɲ$֖_m,֪`hkQSU=[TZs\V>g+z܃m~ͼ O&]Uo 罠! Җ¶^F^bH޶f"Kg+ GmcZ\LC u.JqeYIz7DحbzVWyZ[Aˁ̿}f| P8\l!5t`q#Xڠ֞-qEm[Ln#imkYHKSh{0JhbMt<\?-"߅O~LzΎ\WVӧvg^O1ᴱCק1j#cyAY͈ ! JS7*1}:QW)0Hvo\njQ~PұɘGAUay-"`"-km)]}Z<%L7 Q o*f熚x(b TRዛxߚp<B2t v_w8Ovp `y ^'-,ӗnGڿ8st143b.?Z];{L@-fms9R<:-i#?/ºCqjy, v7G>CƨCfqFTsaK^8Vso:3s*a6"/Gk8vq;\m?&"֌qL!c<4Y$Vr^TYb +WZn9<|{RməO󱹧/7cq4Tk<~].[ eHZqH=V{SK9`*.p>^b-9q\\KXm\8TdBBe:Nj3o8u8K]Nkx ŕ{NJuZܮ~.DeTc ܞ]:HVIQs6>`*:H2<qnW]z:_p_&[SNY&F|2P2)nڵֲv+4$W: z۵xTp7H#nC|`=Q:$\i1cֲG[?JPG06QQJ'Y%EkΖ񠁼e\mi/QjfA{H#Mz*E t9I[:S DnjF=f7w^4f zQۭ[[ `$ NZ~8TG°l60R:5KLēHJ] Ew|G!G:V{m>򸐘mڀ|W7r挈NVkk:VkH#C BJI5GCED9cM3=ͫDOEg/ޖ>ydv67){uSp_'$OT.m҉ZX!a‡NsHj}hRdel;zwӒ`/ 5NSFG$X>Ԗܭ?'2!|'(vuj_3ƃ0Bhby)HvX۬z{Y‚T4 ֹxctż@^^y~RH1aѦMR"뵸 aOi3[Y=O ȺH|ƺV;N'T^K/ɉ9?S{ y]?)r8.z>_)$3`sQλq /zY rqK=Y4(<(> 㰰*q6r nAS""&2C2ѵo֯г'ahLf?jW_BK'%?Qc>J'w̞:IiA,xuOfS+?!0L@̱ V{Mgȑk$lˡ66ȯ+qKYWhOUF`$pX~"n>Z)pzNkQ2.A_QP4,)~-ˎ9g!hDqMҫ}n_17;c#)NF؈2,1G\R&&mA|>_~)! կWL1ߖimP y) '35d#Ri%s Oam/_W9D˹,ecf1$nlGw8=fĿAq z5'؝2rی$s$# 6r~_8]ֳ[g fv; m1WެrIqx!y^I[ɰoSM{^&k%8:dL@?<'cX?%0͆MMKk&S8dc 㙢bFKQ;&5?/,V]iZ9,dLLBֱ]K?mc?EA*:u kvνkno72lgq1_k?{uZ]=xe7FZecMQTy :9]_y>ظ2gBt'3Mҫmׯ\7?ݣφLgG!>Aߑ- M0ϳѿ,J:NrX'@lk9V3VCKh5z0̋'_R÷\+}qq[,=ȶ_RdiHԏmglȪ/iu.`{f{^4k9\$>GAnfy\ֺ^g.ZPxnլcy!&fRXՕʲsQnh&'|oy/sLmbB!T$9'"/ ]\tZu mC VocV1=esY\q`g1Cяz:5zs'+Qm:-,x\Gy_ o DzY+2g9i/:n')c| h]UZqU+m, 6_.$>cȾ~:Okx2rXS}L E-"A1:5=d ק=cCrnGksKk"X%#<;ZԵ?$Z1qiS4#\.<$kv㈍6$(45\C%w VA'pdfʨUoem\\4nN!#iQ uSZ[N .WR Zr|sc \Y@KyJloTƛТ5'VZثNA1aYI,2r8|t++ț,zin#orSyh}I6Sakў]>[ڎj>C⹿䴓c~OMMo>BY\[ svW9x6MXmvt>Pchш#^xv?"[V aHp|R5έ{UKq9g37`G^5=vMb65c(vȗ~C)%VCkEj^gVH743S&yxLC7T2 XQ+kf9:ۧvyØy)Vz-{Wmca 2K oU c"FTkW?}4}@Lnl;xS/^< "&0w~uk0eEOe?uV{\TMcߝg]+.DlfNWD6q兗/%q H:Wכϑ`B.Z*Aa\Y{`ܧяY$7Tncm `@eFԾ\}r91 QdLCzij37ppXӋ+ȈR,t9N%W'k赟174.Okn\;uXr/`tntCPaBmSޣkUf(v 6uUODx6'c?*Ʒɬ^Y6^l814PNZ뷌@9򸙩'v~OT_'s-A?x7K2W6ieڵ'j>;3,|#㳐"06ǟ>+F,"iT8>m?yEP`H_hN:_Ë7388|#يy-3[6ir~^T<]?BO]|t-6Ieop,5J2i}t釷XtS;EES ;Enԉt)oMib?ƀhoԂ}7M<.TRnz+U#g_`7f4 mMcw% sZWEEqPPmҵQa4`%OF/3'Ǎ6įcze٪<^tY*%c-vfzV9!.]< яM*hqyx%8věg8teZ~naIƙˋ?-6oz[K8\r̸. W&֩a|gf2#®i1aGMO@NZo,~N9I }"_o"Ÿo%<;=ݠ$+':oZNOb4gtQjN9W~14 u!Nm}E.)o LRuȌ|v,IaگoeUY@֢xi:k/1$V//ӟ,K;?DČ7cF֚2໹HmW`UTri232!&I>g'Y >cFXb-Q!iXYSYf_ V|8&͗6Uea=񮮽Sf|(!aOr1gkzF[l%Y^D~ې20Ux~88d[-4Ldʃ=RKr~'}֠W1r~VAdVOգVOtr&|GDR^+W9^G2GGB-Sk[zO0r@Dq$YNimlOT+C>Cɾ6K2Ā+[u)l8Q}uRH;z*=JUdΏ/ANQ(%ŁmR7&KBNک2KlxLwZ]4i/l13v}+ˬ5oe4[V'8adSƟc*S;I β"; f9/\,s9DD. m/]ҵ8rnV^3'\dٍJ\udFl~XmiOE7[L.syE7DH[&cm`<ƯÍr2ՏiMqLpdYRpunl_ S\"N'7n^dMk?}Sȧ9s.2@,=@ X MNҬC Dز{v>'R%fO,r[ZQ>(Ɨ*{U3gcf;p6Fd0c%rX4fg>~1D;8YxQqYZYϱkUӧ$L>.)qM4߰Zk:r~7͟ 96(;v ԒEG8N2_aIo+M̬[yC<nC-=Go~}6-|xW\X2K6N=]a\,]wM{&nZ',X/(Ld?$nr:Um-?0Teƀ,1/)*7+'GPT}hp}V6$fHʬPLS-88ylLE?HԚrLjVtxTI)bZbIoȿZo]7iƳ|_3 ȹB۰~5aCci :oI>/xH,d@ ǍBFEUVW0_1c7eٿm&Yr2/q@msol^4g&0zڶ;NZ LR ۽?x$bkb, ¦Z8wX(t֮k$gw9,\{\Eg6/rF5O9L~Us-f :o1Ymn%s:S ^;.b'8\?:;!0U͙Cq"(ݧo²I( 07А:X]x5~?!+,9D4 AZf*5CG]ʹ5p-ʵ7a<~mG{y5#.N|P|MlR70$klSr2K5Ao zNFߒxPXðQ|"2 UYs_'H kjvfzIC>`mҖk-ڹm.{.cO+—^*"!\&0Aʹ=ANӁ+7+Wq7> D2Er e$h.#a͜&zˇ*iLENgc!4y'mzs|,7x.\&7XSl3K @7&Zo|׉\8gqn?- ]Igul/9uLJwcu#$݊\{;uc˄Fb: cg'|;zc|S|qe=Au0ך$M^Xu *P-_&+YWS2W'1*;;?b`: l[Jw|_~㖈2Bͅv4'KWSIXZI/c|-6>. X*l8%3V3u_!Z+0⣋>_*"ekrAzmڢ8o/1}Ö;u"j18 e OaL |wam||+ixF9k`us!2,dE"9vta7~F@}|]ߦ7 OMز,X"K%@ɭ$g~G _8d`@GQ~\{~Qc/80LSiCzaQ3Y|尹K##Lo+̾] *0‹iX B"Aՙ}KC0!?Eε*G:&I"JPZ-k o '$mcq~'ƃU]h:$OaPr[QiH,K4gpN?zd  @XL,JYT AտʣsP{TeMwXCeJнB?TA1V;-?I[|)m0Eut2M0,Ao-uwfR&͊dUFDAgI~4g2yxOD/sa(柬Wǔȱi$nɃx/mS"~|Cflc{Xۻ5%~EgGqdږ_w&KfNrXŜ2(:~Mib%_6'.Ds"G$.WjS)mnB>;3o\ nnѓնծ%z\y#ʷ-_?BJDfc~8rh2e [D$Uưm[s3O*i`4ah:v*ͬfw>&)qy1%pGk^ |N'nlhCzv?`܇1Ἐ&_k(aYzmW;4ܔ#TH1x Բ_Jorgy.!&/鉉WVޥ5YVkqNcEdT_hʧ+NCrdž€mCpI^/sX|سLYw%cKypnS?fw8Ҍj`ũ[G,+eۣ1gLI)>TymXR9$a톃$$P:_jdrK˖8'0;d_/%.^W6d[;K~2Zr`Xzʝl:Od 4,{mY{I-̔. aq"CwЀ~5s[,iy N^JXjJκȗ:^'hpplˢ/җѧVfot2ZGQĽ}Mn6O갦h.|$Ȉީ`]iIK dnOvlrNW#ŝdL2 d}zSg\8ѩ(,Dnoq|eQǑ ;`$ؕsxGTFLq3" ͸KލS$ȹr)bYNn>KNɜSIbff,мK7: V{% qѬl鶔ë́FG3X?$\2!.lX~Lf>yݏ` ,gv}^asRgrRɟȱ&.&& &s}c?8;ƃ}c8EC,+$`HV#5Skio\Nk>N#Lq'w!;_OMwfkO2%JxZ/iO8eeI,2eR<06Lc:iyNRr8<+}E.`㜧#F}gYrW]a6ֱɒMةhů}γ] Cϻi'crxF:V 'ތ^&LrU w}Kjo8ؑV@,:B><` ɳnz0xwN?(ȷ !K]f/b|Y}4Lm@۷1sA ޿S,i dh<ֽxՆG'?҂=bno}-}ygi)"ѱd6ޜEg:bIu"9x%|GMƫPgV[/kE '"(Xy9Y1db4'V |SN*(ʢcOk!3P΍piNIRTޔ]Mp9[/5] DWܶ1/,6Ӡ5N؜*amT:kU{[\16\-8cMԋL7O3\lOV^| |px.2rfr=}+}*#Mu<3"RX)m@Q֝>&;I1A8ՔP;9QZf9|N{(2ZetcL`iѐ񫈺>1ĻÐ~ǠX9(@i1U:_i9TTU!U 5-@@ƞB6:PM+.塒n?xbERB:N'Qϝ0IFvujmSWQoꛒɖi I 0Ga4Y)\/LLF\lXDk TuNpj[P7=G IL2;m~Jv=g|lb؁-EG/%2]lU'S'K)+xL<1yrO/`XũZqp\tnSw4ߑE؟]nw -ptvReJ6[5rH`xH2t }|*~'RY2pZH6}a{mzosvLQ3&kP?5k{e'"qf</& ,F|=骚'?$8 9W'fƣԵ.TɉTț$P}@av y`cJ,? Α[ f7nQ_Uڲ>tW/ 8d-'7]A,'3'8~Y3y? 丼UA{6v: YuRǑ&899<X(¯m3'Kˑ?圍*PDC޹6>5so+4;T/<*vjF2KGhnJ 3 MD$-oV}Ӟ nwO&+mqd]spc~g,=1T7|9x0"k~Uo697ʾq.3䲑$2I"5#;RW]kl[#d1GE/߳%qk 'ؤRaJ42zJ糟 f0Sg<|cJnِutjrnfoa/G,1>Y16UZ%>+ @H!`Z%gwb?)& Jn,f[ҟ;cfdS^IkkaXm1'#<~^Nn7 :ۏ_)r T"[?OmhNj/qf$YXz\O^lFr|XݺkO]q|7-ٰZ# z[03Rc,J7(i n/\? ~%.guu\?'ş\@m韛{`ڲJMr`$"ڊ'vIggY&a=Wojo=Qw#rvRUOwcUk c/X4oiZ<4Ǵg3#:ֺfNSv)-᮴i坼$/]V ˤoKOerp~ͫk%l)#RW3"lOc?5Vɻ(/ý0WY8{2-?Z(9^HLN?G@/U\+]%dq~;Tmk%bljIK؂5Fiz9bFBy¼kp*pُpvm 8EnW9d KBFX;3¼dΩA ݘؓNaefPiFmvߨU9v)n˳4::qf ˙EE|-O}i>]^Ǐ"C7#.D_p|s~nmOc>/zy2߮ͬ]:vM|mp Vxd;Z{({Mjr?LGVp/GFB km{t?[,ffZ}TDn ~ƴ^C/޵tqf O ZʐW@*oppd9#-qћBRx}&L:*Ҷ9R_$|i.4M _>[/ų#\|Ea ] ~9!$n3WFdb|, :Ae C",27&. 鼍gT)rse&?(Gpټ`帬'a縼cvV/ugjW%qlooc݋E K'5b:̼9q28z#_Vɳos6Ac6U T]CCwdcc}~^x~υ񜩠y%`Ke&\,@ud~5#^7,lMw$&4ugW~/eq~?Š1/uqm]<_$ʇn*t[ P1<<ي'J^?4VBz֖uggG eyW|Iŵd^fMe{59rܼb [ǻHS`zX{G#ceлABp֗j0y^?.G-Gx~0u2Gp,uWqyV| yIԾF < o_ ggyS9G?.fn8aI a$z'FU6=oțIq>+Ҵ@1?ҢoǬ-9/I^~Ax= >PHYuhg6ߐ0p?\1 1왛n)F ^Ԯg?'H321#!c=\ogoE^Se# \8\Șct_98ܷ!'":ں5z?-?Ѣ $}w&zngO?.9e ޠXldldO#ʴ蹬Kܐ wׅx92ruN~zuhK$.6ò\;Y\- I;aWm*,'Uar#v0Br+Lfٗ7hj=Wjfɛ?yBnKi 9.۶-zޟV᝟ Pĩ žazPxCpmaڌtrϐ,k*~7% ^[_]qizf`O8fH!SgK}k.0Y~8~y`u_V5d@NБ7[k-T]<+cKoq`msi^~[ppɣb/buծU6>;W~ֻz+”lɂbIK}1sMoFΦvUgɯVWUO sFTHCb?Χ}0: XI.渱jVjrfwmSzq<4*$[_*5N#wM2S4qARS\y mFABlKXI8:xˑ>Q_d,)}H)_'.#*>\!,pC~f}?Tݲ^t mDmqm ^iUEߏƫ&p./Yuƚğ6\nbl=޺svgr`|䏰#%0u+um|pyGe[݀ ólT~9pqf峫!7 k[#M|d~1S[os6 ΍kynqcdYrxDհco4EKG1ATJj~uFz8Y[r3Dj{+ZKzLD7oc}8m˔ņh;,E_kXt`3a*V- ^&/|s$daEBxaEL|c3!rVg~rzkq0;4U)nC^o 17T1p9i61 Ȧ\Ft5? :X̋qqi|xHX1]?DZl2 6!"ېnJק[fE.&f p6B:QTW?y"Y"y&A >zã~S8DLXwmVn#** K}Y/8[pw{ 7Zm䵼4y|5/87{xRSKd|r^;hF( ĝZ-Á(' D~zo6;zl9>8@lEpƲ|H~mq ȏ粧ݑccq.W> ${u_9Y|&<~_1Y?17]ꛥ$m]ә6 4>,ܩ;ʷiDZ˟;Wmo#+IORJ.zv;YrENSjl{E# >l0ge?:~FҦRߎ] )<\;xV1E$[_aJXL\b˱(\znVMzQ K\^Δ~?Dsi1G ~e_ Syl/%ƕdIΟT>ZيhO;*cgĥm"i:-^l~6(r K}~R.G.OdBd+j"6_ 98\C34+rC esg4e 6gѕxP 7s9Qfx*IP7r[1.bVHKnGip0 f6N^?:=q{Xyi|^<{[_cWʶ9eN# AS;z?@ONN6|nf.~fjZEhpRG(P3?!Q'pzy[O9rx9pq;IKgܶ"nocMdl|O;lM#*7`qPokkp7lN/V\Yakh 8Ff1xN#7fB&V nD (ƍ'J|ѥ0a.63OߔF~6mFty#R%Av~#NI|ISƻD]?ZkZ'yfؖk!gkYy9&X5pHBm@5 a,13G%*½K>Ir" #ZM>-pw'~wwp>ڞgڸL')dlOJ {ms}5ٗM,k*:ʴe)(׍PVe/MFsV;*3Dv;\ k-&>79LeL`\&YzPFf~i~r̃jRu@&=o.&_v"H$bzcgpt 㲣(m#)5nDKNLy.YZf(=[3U^\ ,2k}oQ<ِE4$I' bzF\7g|4{+c\f3 Dn_j)!@ZS-WM L2y3!+,|đ^I!2R ٮ`_1s?"S# fAo{}-57Op ee2\X`T }{Q_ k&Ԣ`:&mڇ_z;Oԟ$|H7^t m?Գ_cap8&99\.a̍SnvDHiyPέAԇ"4`&TduNo7/N*UbFW]cOԳ%12LQ EPMMv;[~doĂ|WiB&!@WgV3QA&a/g9mz c¯H̃<)<v!Rmp;=>e? Li2"?`_FXO?/6ɄK&,S,rejӎy|b$!Q&j kubwj$1>g-8:"e˱ 9zg-b###(I3ĬM۪'d_lalOZy`<ċi&ִmdFl8fp_=f\ʒ..ƋKnd]6'ɞ|8 xƆI@ӊX K7[Wgf &cq93q$YUQ3Qßn2qyA;hkN9e/q) 1p$*^ON+YmRV^Wdu1fG9mwSY~}lҹ L([32S/!dQ՘۹5tp'G4\̾R!!Sxod5G_\8IQU]kb}ٍcc!Ȉ3ao,־Ukοsm>SIJd r9r7fyCY>)3JX=CVxWF,-a) }GW'^E 9,|N;I[ʵp[37!W&Џ \['9t8@*wK}zֳTΗ*1nB Clu59˪i|9>d49Qώ2#WCgF^Uͷ4<0~yVSZ4yt7rs'"&26ȧVFp:{z M+~,E_O]kcæ[NjLG1p?"}wɯmubrX򏘳$4MOA]َgdNFI%-}֗Oi=>Vg NDNfv&{4|n4ҸC$Žj8(1ӌฆf+LTouu{g%xA(ؙin?.K# WM_IW t8yP*u)VG9N DDʧ}Dᗇ񙫖bbÎn]͵S{h!%!JW7v1.$S \]BC}*nO&ljXǗ{6=>y7%TbS1Ծ»Ic~ocdQqQkksYKxJ@#뚫0o9&Tϫ%]]ϭC"`U\xG'3l8>LKfcM=un p>ta Bط֧L[ۉF,sJ&3R_ O1}~!Onv |ENz/9es\>) 0 %X0;l F47uӸץtuLTѹ98xqKV@j{ ?.K'#P`,z$FCԄXLMi1M&.9+d>$3ѓiZ?u).kx1rfk"flmѯ' {Xϸ |fdS$E6$V2BR8sB3:|IgvtfOb"q!p=7'Vy~'?L}(`zaL3s$er`%`/!ōсGKIjn͏fOaDF+=c 8sY,Kqq'\y1Fg3_;ҽN")QG,2ᣃrq0啊"H:,JtD.<9cI݋ۻۖv-Vϒ7_}9sG1 ]C(+Yl5#2Lc;rVoȻPIg=ucYCucM۞(.5G6*{6=zoO`Cgȍ6![tN|Z|/&訿ʫ=tkuXhqRGAOQoi&Goyx }65+s|V|ft|3+ T]m]_MiSjLz8gnO bϴ@Нw|~6N2?[6N.#4|Baqvִ'>,ߜ>S|_q,ȅbV?(Ӭ 2q/۷[Edm8mrb`3 faX|sًy[ v%QtVl~DsH ׶ʺ-[u}+;,hp|!V?žXD`KeR۷ }k9$],(˙qxrϔ +)sԯ!d&B. Lj֋]n5I:,瓔_~KcԢ^rmaMq*;muSÓ 7+`BdVYt*~Yg[6\\vVW9*fgG]{s[S~2r%1Jov޺z'qy\#vR^FnN>p=oHkxO8|i?نܜt*$}mX9ˌ?,͝T82@V[o9y1KG`ԛNQ`(jKUSc|s3I$XR8jsWZp}ԟ G?dH>y(+=j-*0̃=r]bqF+X7-[์;"_q lsŁ}g17#y"Wȱ.dNoW2O&^osR`06WCYmI}|;e'{YkƎ}zˤ{_GSwZ׮p ˅mWXv[L5!|.,Ꮱ]o@|{TkL_Ηṥ0{P5D|K'N,p%f%U#ϵmڣ~S>4rM<͌Q[5ǂh9Ɣe׫/h@_q0O ;sJݵ/mHœԮ.?yI, RG-nϽE͆~S3r/Yr]c_։|koFd PyX?mWvEubc|ٰbɓzf6EUmYSҠxzj}W"Oc (b3KIlLna| F$If7-n/ȵ_3|\IGhXo_oWFk7qÑK>B߫?GԨ²pEZjIOkඍqS@{ %p$9F?#Gx$|+7Fk3\W[ f̼~br.Y,a`F"3ZX 3sωXY[2|KN܉1#ޣKFD&57[xTYr9b,ƸuռRU6r?1s2[K?d#k|S,0Pqcf2OM3`/޺w2~=e L%Sab#)viv&!)x>(x۽_k"mG_zW/m9 9C'B#1Jb}Uy939dcć/.lċ2Wl\"{څ׭mWxkq &?' 9y2Z,m*$UW*OKN/?'UƧy@}19``c< F1զ12%!GBoϯL[N+{Kb18HhY@,?6뺣]cÇyQq܊.0(0_m+e.ͫ/EǙEƯQ7Ȳ?*nDۛUe:FZ7ϖLN'⧓6ܳPv #O7"e{ytvtk-q+ |IU/Q^bNaB,^Te"@%eպRY9>5̷+&iN>i^,W2Kz5fsqs˞.M{5}.<|PN,L26Q? ji%$Yά@=Mbn2Or i4_,Տg'wuu{*~ROpYQ~$wOzק~VsLr'!.yr;E$AwZսKy+峸i%oVOHPﭺA2VDَ ܂$H$Vr^LxIpE d6{UH7rF 49WhS9l9ɐݻS|EG>X ]x:,-Ïł-[+q_frx3l%Uqd'gVfTfdC]֦io 61cԘAg1tO2Obp1Ȍnݾ;z VW_ 9 *3S(20ۂ?cݛ0sWC;bܪ"[a&_ʞc^Q~dXofY1U,)C$ Ѯ|g3>YT:[-mnj Y}gN#>+m1?p9+;V^C`.GqdtkΓ9b*GT ~6^A33#UѸ]MiZhفA?ӌ}5ìnms1>=sŃVV.YV9Xm^g8Ѯ.,9 dxQݴOn~%ay&,V~S7k.~2zّ>CߘPjHagrtPcK+3Gn(ɔ5jӭwο-G[k9YO/( {wW?>>]63hyl|ְ{B9Ө"Hjy}c'eFНQ[k2>+;+&G+-|E|od(a[]8)n Y~DY,Qܠ0ie=Esl)qy,.3 `ʢ %=;];7>\3r9 g 6?KHlbݏzkK9NTyRױ'Qa@x@O8q}+HzNJ.cY7DŽTJ% wUf/4QŜ>G.<>'?cO3{$yyάf\LKWu2@lCװfrT ^GVdȏ S`+~g֯{ƛ8K/$[ČCr2[SJZmu|3ضКMu=Er廷9h>_n vJ'.E_&ֺ4(әœ1?KO) ":FTx_871#+(h4Zns}L՟m.õBcnteDXyH00 IT#ZۺgoM#-c IGcz]u/|_$Jtc0Q!^F|)l}+?#yXߢ$CbҲ׶M>%.GxFn"7y |3wċɏ̷/mF.,r|C<aU1x>Mq O ~o=xN<&7x͊ Bmm4SU *_ f79ΤzWIk|O-Y>oד̓&~f"lf{4{g5m˕y'L6B]dvfblK}LڰC/sy|,’I0)*0{mn=e|4xYW?3LRIcn2}CR*N(7]DŽG&RHv xcv^9?+xr9N?.: Ѽ85<~zdeG<ˑgvWrr\V'67rHQc1QSjf|G`e0R $B;Wρ4 e_#aqF#̺qq"kb&&JOWKr\32^hO]+A~O)NgD r3^ۘ_ l䲉,Fe_B֮\oо#2ϊJ7,jw_QYKv4FӯY"xq3a,`&nNIUAI?ִgzX>of?Z^= /{<8.we{b\WH& {wjfFwig3̾^8?4K067%Aտ:[9?/r|~J38ӊJ'͛qʅw8Fb_PLe\0p;(O.s8"saCjvpp9n#%g-pd).m" }Kk+>μ}6/ɠBK: {䗗7qYW1 C?5ʊr79b5&z[so,>Y|#)HrPUH="ּ~n!?'ʆN?•$K+~]sW5?۾#v!qvw$4?PvXKj3V=6%1™΍O&4nt/L,S1Ǔ  7_m]:`3)>4`M"fI8!5feШ~ofICഩrr{x"+ڲfvb9;$?2l;*J$:E#QQ]/''~Wf230 kfIŧ*:wk\nC^Q9i\ V>A>u|s|t|IQ>.>"osfiڅ.z6H G/4d\Hr5Q\S%KfOŢÀ~}c d 더[R*43-m-cfqܛ[8s/eM6iGgz7?'7yP͋$CD&:b}׶eKcd!IV]wjӿi ]rC&3e<qPgȚGۏ:suLg乡yD?,r]zz lȚ/'COw̟ŝUIa6AiMwmp'ŗ`}]5=tjH? 7Osk_o!7%<OF~0ϫOx9y>:\8r5Y޿iNpdlsc;\kYʦ7%'Liwk[K;}?]>&/!lf*言h;^os8ۊI/#O[ nB,I""cmQzYG9_wIy|#$DxhU=ZF:GSI)r]PHKy<6qrLuf;vj0ɬ<6_eBf6BqrixL1όeH ^BE? [V`h1a?Yeml}~a-%y Zs_#;yD뼐eo}5XZ1斏lOjfS׵sMgNcȄ,ranTAwєǂ|.9r̼IǓ%U[w6F/74yN͏K@P21 Zc=zq9';dso[;Ƭ ]f&cP\\p#8m K8όL!ц/wk-eⷜwxAp ,Llfۨi2&gxg&}8R6R[@[7#g.Y8ϔ65mo[4-JVln-r'W M}ikde_g9 osP_Z?6?NKt6uhln euFe6R*D-"Ogr[ qJG1T]݅^yywόJD'kwo^#);1w. 6DX#% mA֯Nmmq^~&i\ѦbknY'u涸C\qɂlN<wuLo3_:[`29LU9d;u"Ք!{[Ys9@DRhq $K#]{smͱ=I` _il;WQN3?>[sgO"oi&vtu~O8_-./7,(͝wYq,znv,W5:Mys*3>Qsx,\̧q޶UF;sѯevLkY%(<)J+ֻk˖m`s\eXvfBn􊍯=\y4e$AcۻV9kx “ÍFsc>dv"§ɷg<aOc* ?^sk$r<8+c6>XY3ms%XD ro|hA$vX?r %F{y_:}-kY[89s<_MoC1VK8nw|WGYo*|CO39* ojҚ-'ny;3Ã~#/%~'ʣ>O')T4SֽSb.ߟ/~Aw11߂&tm }M4;`Ò^>C|# njEc–D}OzvڽĔ]MUZ:EC c!Vi^G7"Ǭe6dm%!}Ǫ U!Jp+rr1a))+O-.9y)$lpBt6nU5Y8x3"/ijrYxX~a Ƴao,kⲹ\ڏ-H,uV̜|p eR/é='ܧ?*_8W.W7(ߍAgF#n.79 y>fsAMqrN^{L}Vg 7ǹYxrB)4p)/kklSnɏ`cqf4خ)7ONk=.so~CcO#9y3Fnh{Z陘s'%B4+oSn;`O|7$FXdo!ںzxc3~qnr$2{L0Wz!/1$~>GASttھ37#6t!0:J[_´v+=w;?*d6Z%!>qmSκ7>{cˋ98Y\'%Äy(@"r/ֹz(xCڒFxu#T^Z-RHc+ʔO?vKOn$~k? r` yS|t]LWcyٴrGon[?(ϓӷY;mQ[{c}S ˇ#RC2by! oOttÛ0y\yWܵF-Ʒ/ '[|9'$x]WwNNO壅&vF!~}bRW//]^ye~yi ?'#' 9MDxs69|C78ӑFIMR2we7 r\Ny!oE9;r7³JI;O,&;ɺNAO½'f|.0O%άˇ#4mIRj&OY/OW"\hIʮ"Yw.KXd=:Ms;/+*qAn娖ع4L _cc\<®de,FCm ң;ۨvxّ89|)HxXX26qDsQ>5p]1+U6k{VOW7$X? N7Ex6Is腞(FSU7^N'8i <74\l0Gi"xѪȧn됒zqop#NɃ$ dP{\]'qq @ [MtNNv*% A&PZU1:^rqi͙Lip4 Rum*YQg.[>̰IoAkjov,i>AÓ1&v^W qܶ,X<4YNΙy91nB4N#/qd`G=>GsݶOg"A#*Op˥uۈXE./V& {f8t.ɲ 8ϒnS>/!JRE1bk{Vg,xMOpk1 t[Bfg>7_4V6&LH !TIe)F_,<_sgoaI) G2Dq1ɲzt;L{9a|#%CZ7ÞoHr9?b/ݖW,SU]e9gaaOeD_y WqJeLN3CFri`rrCշ,;^Ix˯!C $2ȱh$iZ{ʟM9/:ɍbKJAScUs[~dgl?l' 6nr;l|*m~q%䏎MLw/WCk4Z ÞK.|Zٿ# wL`c"n/?,C#σǖ?Y$7W/6[\O9_o `B'b F1.tgvsw?*!Q̀ SEpmkM1ě[lSX~߻3ya^|םgb 7~&k~3g[3 B,! ,jtNWXΌ^18g=$7szw^wŎA)Ie+023ݶg[]+'<-m$M'tMw "vËl]X5.ǴL"Xk sLtkoYt§'fϟ mqxd mZxK&=cF21O9ˏVzgey ܉22H]7ܷկUuHѡ,r[i~JLyK1E$"G&-Ēkmk{-2a*Nb1)^yV&+49qpR>B'(PoٷM&&^&IFut2.N|Wdž2S0ɒ0zcpgQ3]fSFcK[?JX4ds#2p-/ VM.7Ü!&*c$c+.РAm6ѬaYtU.LQVWX9¾,8C&-5CXma&1=qqL;IDkQ׾w Nkk'M+sf}*?[Mi쨒k ozXF_sRX=Y9m,ҏgBoZp2009 Ë“-fQ,(uֺ}-O98p3v<206:  sX< I*؆v;{s : Vfb1mߧgnb:G~1fȦĬJF)i>2#pc`&\[^V"2U dH͋B?"OZó6ᦗ\Cĵl@*ƪc7yUyM\9ļ~hYquw}bgas{.VHzhq0IHc0(Ѹ5}ۯ9kӒ)ŗ1b+f"#Yn|)iO묹s|f9euv[KoxcؙK\DSu(6u\IyAx}|5% q[c&48BLr@sYW/iyUYC,z:QdͭgqNdI6F.ckmd D2ɒsq{zYp^||>N6U7Z)vby 5bdKpġB_*EԼw'VO#=u7ѻK_ S&nFDG2z Aٗ6mοF~|X_/ $$/?|zLߐ$L݅ѧWc_~{o[*_)sp8(2#E2}kOˏݗ˧1$b.\r"dPn;ɯ+ng8zs\m`|v7 bqK6nՄI,uj&/ily;6N#Ws>lGtqUy6Mv?O_Tlye[kj,̘53L&\_@ѯj\vLP6)n<;Zogʗrr$1q@6n[3pr$Q5mKisO}1?/`Íy+ XX"eU]~MO^? ÑlP˻knF0vo|VHs=d4qTɻysI[|o|s|!lU^KNc'p`{鹯֟d2?o|#ħ̄ipqakSwϘXs)@gJpU5jMeZ 3rY.Z߅χhB:ƶ`~Mܦ2eAaoiFݞ:s7jVK ̟~4[\$!!:|xH\iSQvb4q61i)Gcv&;_gOɹqqlYRI?fU~|9.TbKeg|!Bt1R#"pu*^O~`qF[dIuY~mΆˏM~< fS#!ߖC뵭Q&8Vd'IBd mL{ң\owH|^`Y1gUrcbaj W021ܱ {5r:N⿷(1@qԘސ}zIٖݦ>7_McdGy7yT:I=4k! 'y+|o놅W?O0I R5#a Xպ_ey~] qX<r~7/n;-l=a;[(&r]Z[mk 㱸|ϐ+7*N<~Xnk>Z˟ˤ3?ۍN9ȷlVk,kɌ ߈rYlsPnj;F!)%:֞xMm/$Xu0G&#wW cl.kܞ^21/_>Thc4j۝XH ՜#k~.V.ŕpU6u//N~ L%ȑ]28hw[75Z]j'-|/#/ 0+zohEvi>-q YL>+A(ѽrk1 w?Oo)ķ2-gs+\M xU9&K|v : 3lTVL?/q'=P &P #0)jŒ-=~74\XX*C_l{%G&T6faH1qCdmHXRt߃I3]͹٦!s͜ɘ%b,bPuҸe`oq}"oDC\uJN lNbTg c+Gwe֍g2}sQsW-92cdؒUuD8n,Y[x䏅y8LLY0E(hII{\Ls|ɤ2>n[;H>*Oޝi5)_B"1c~bWb<ɨK~<51 ~7c&lr~ouZC~Ps8/ڛQѿUی^SKr~!?)?pR$I?d %Z3..mUv{L{kfǏx!IhیiՌhV/y_o>?T#`4 'Ǘh_;ӸuVq喛/w/|8ȍx(dˇ7}]{-p~;'n2V=?yW<'1σ1tI,30WձSԇ)?ʳq8^ltrsIf#շRn+\6Y\Ng '8f5@aH3Fpj5ˌn1s6- 49dW߸LFlˋ3>>zoCŕ&Gs&,鑊QNۡz=+mg,;,>rGŸ+Rϗ,Y ,8bW8D8~?\%_"'RFQw=$.w3&Qye73̐ǔ?X!)q)rH^woUszadbr^V& '_H[ƒVb^+^e6&L0'3 9# ^n&on0S|7NJl2l@)hfC}IXoĿ6^'#Z}fC3)iuۏ}\?sxع9ܞ.+Y& Gζ]/?|2^Kʙ*/egUUѥh).(G 6~LgcĎ>L\Vo:W6Z)Y9<|Ňªdbz}{_{<'#CC8ٜL<S m,xw[1~ǶK?c{1$ /˭n)$e>xjg*$ <8wemSv֫T]>re88O&PJInG`8yHXpHCDO0,\C9#N&MLq׈̶U4k?-#08=gFiQtcQ3k\IL[X?cZ0, qWg/i9A 'vk ;WnpxnfydCTћ8Va{QoGm ,\vBːBZXوԉFzxsvuōr9y yN:w_V?(PT;ѥZk;aN\P4rWVio7 c|"C,WfdPP:ᶱṟ.:^՗^ة]_s+Q Һ?5`6,OX3 oH;oD%>e><(8{Nlµ>08.Cy=ܼ]R ;7[Nͽn'5iadAFX*.pu9]^G"Y,G3%ҷ} ĿW+S1S'};P.~d'l '?Dؗ?K8|FY]+ }D›oXȽ&d=Wgw;q |Zٱx$XOz؇!3.N|vxVK.n(V&];4g|'y?w$c;`7U;xW/3*^hƛ"xڎrޏczl}8U~ s$sEp?,q|?WLbJ¸ (c,{\~Ysږmf?exr2 綠Xt"1pX|_MQγ@4Қ/mq2ݛ}r9Or^7‹YO\Y9e䛆 žEnF˭; -;0 ƽbfyWc~;<,$$FP [t5RO.#Y22f>{5a|L6͂I8#(ݶvPٿ^6fG7{?0,v1;AZ[wKLQcsA0S6z/9N^qkK'TOlL͎=vYֳi6_# SW" j6X/j~ =rZ] Pv:tλ٘6V$ 8:=k&#=?b#P46]3`A{p/_Z5e QfĔ',cb6%hE-~ZIdrYo;c>zd6 u[]Wqf'G˘nX_BLqf|.C#634dK;{kj,j&äWc˜q(k]mu ~k Λ?ؓf$DX(MNלW1f>.$'Jbe`[ŅW/iFO"̃|%^4+F66=tgm6Ǵ쟒_WboS{}wSX~^1_Vd9o'bfT'/lESz,領K'Ne' Pˑ }#N{[?>ͦ^ sVVNC QXZ8BޛZ._Ŗ<+CM ^!%05Wg4s{3GreC%4*PfHȣSzp5\m}'a/53&xYXdjMk]g*g'8oXx#w\!d7FHR6մa׽).Z{m6F?;~3o$$2 }ݲX\sl>?f+ٜmh~,}\< "w GIc{ݎXwro|{^Fșq<ҪNvXM6ߋ:81K\q|vdG23 M܎'VX7Nv4]G>KY\ wpg>]/;yLA11c3,Gu'o~A7#d{泧vI5X6S%EQ<_e9X.f^g  27<0)7*y=\cuNmkt9p%]'Ν3+s>HVD,C;R_Zu]?Ifdʗ i":T߉~Dg%!.=Bp%V!Q7w4k}k>vYh䍷f$AXIӸnjF40AY8[&d SFNe~,WCrvQhg"**.au3=yϕq<& pݗy==*iI-Z~KO>g3vo! lѱ_JW6%0J 諩c~*\>C丘N,rCy,>k= .\YocIM3d37Mbǔxq'ic6;[qӓ?"65br8͑ nʎW];m6cg9pY fCɈjk*66_#rO>˛4iB؈޳GئWˮdx=7Hk mӦkuE~k̎H!2v.2*G*t./'3?Kɦ,F S>2v 'D6~&<79̬GC2mX7^d|rMǿt,GaJp~u &ɟJ aIQ7[/OaE|w + 1eVGW@86?XKrQ/+2(g'Uu,rĩk7k㧁2L|R3`YCŮiviqO~LE,58G,=~?5NxoODZ?!sVÁQP6W'SHxx,h20NGސǸN a$KlgN?:Ç̓'# 06)s#T_ixr~T>C&6/3N.Y`cqmJyO0x͞0dQu?uO]v =|<1dYf\uW(U78^bIo_梟ce3nLnqR:=j:f7[q86L< oK&/,qUsV=WG.Ӌ2|r_"2cqɏ1$Jm#PxTszg^#2ʛ+TKI$QOKUṓr\b1q3\d,(U5k>!˟q\MƋ^P4(kڢ '_]? bh|)\ k#Ñ?8syLabk{h|{xߗ_ r!90ɕ8%%iuVץw0ry xN>_ / #{/fяv0;Ѯesfvy';FO+aqh.,i/IH·<[9璝8\ʎ=.3)đf_z4zb'<3c,|Cfdf@r2f[!"ѭrŷ C|"F0dݍ4nBcr6$=/[km򝵚\ʧo1~_ ܂ǐ.? # lEvM>kx3>A|{=凄9s[7)T,j_%~C' g7%lLuiޔz[HvgoP<rl~]\B$qG.[ m^i%8}9o38lK79xT lMe?,N?ώq)>pX82rO LO:YlVMe ??l9Y2Pv;]U/|4";16&_!2*Ež9.s1|/✶^)"d>De#ۍw}iu/fp'ɂr/Ymrdit"юm$#&Cbq/ȣdȎHMZ\,zTWEڶw˾g ),e$Bm])bYG97"#l2vdZI M[qkj7^I⿷|/ qE4ڻe.PvX~[x5/$2 1mE[7:py<J7|+c'a#=j7e8_&"Xs&_č7^ե啿r_&'i7pKWCxfgsg+'?;:G˘ư3AQf!ݸJVsn^n?ȹy<1d(syAn7;u=gо!\{ea$ ,ٹtIkKlOG9N7utK6 7q^M^311 !v [տOșӎxAN#NYLmN\}ˑ*˗'?12^D?_n m ;5)?(DܰplGMv{)5 tׯ?Ƹ>6K`E25ꛌIM ofqsο?b\ caIqWiXF ޣl}wO^fl?1~_*j:e ӨiǴ-~A)2fg;~F? ?XΩ|o*$ 2V-/ `6Vv;jsi,y,l^:gWaLsu@#~VR"~gE8Cn3XN6T,!'oѥ9.Wq_-W,Rq|S&^P6 dEWW&nQO:؉]Hy@k뤳 M>)K,Ėv&rү2XuZ]$.s2f nyhlB$aT$~ 7)"7,8|hqCp Tn$g㳹 H8:6a0S&N}lbI!6+ulYO`}]*.d 1`0%a2r9oʱp ;%:7^}ƿUg8xNf ^\([ɇ,i ёۨ&/N73laA #!x6;5M7IgiY8uΜ1?vXzZ+3lɒN2DQ̠ 5Rf 182C12bn3t^%,G)$)aɃcI \LIn@AjH᮳[n#+1Ao2.̟ ry`͒924o$mӸ$}zUXl>M`+fMFJ˟QGs]<jČe;2yQ{jVFj&?gaÉ&rE!u(O}]j=D9/ Hag upǚrO8/M<3. ZzqoܖoqnG2l,MGAݯ}. //7,!d[*!Rӫ_ϻ}G?TMq].11@^WQvkg%zHaNgXqV8{]w)l~Gjز-2_lf|:Yx^1 9I}q 1(:ګM>g[mt"I Eϻk[?s..&T1 C#@Mc=ϏŇ^'#Ì.(q͊)5tY8mIo8"<zxYT;ttOm > sk<'}]O!KIFԲt98>W9Ig{ *m0U+[՞? },x?rv$KBq, qaV(/oQgWO]lpO#1cqpK}Ee4ɾ_lG/sݑRRW]Rfd|V/Ha:m{aClB6d@. 5W}u|鶳:?>;>/E -g&1z;^Yr>AIEC.Os[ Yk=w?儷F_)/ľGL sH.J-F5H]q6?#юS7;h0%-$Rm-pv;&srs9~11Yخh,@!XmHo&k׮dKSH9D`c[j|5u]eęskdsQq\Wxq>NEjm4?ٸq"#glx *zJ۳|O ͹xGShuH EOZooٮ5ٓ/Gly2`XpzFK9cY|LM#vK\2UxmfH ,|B2 X_塛G<܅Y?EV@.2nhSokVd|GM16&﯒:δL~Pd f8 .R2W_%V!y,`L_T{u_O[Q͞#~9rI,qezBTz%#Xgo{&|4 Q;bH%b@5:I9qU=zWc.aueB/µsǔreɱ.FFWm j?15׷30~YxshUAa Ykʻ泆/Ȳ3s>Ds,t} XRKۖpx[2^fI`c"q&YImH$͒9E(%=녦 :ww̢~K}qϘݸ Wȓ>(rq1[5cU^e]ٜ*|kg"㉶uqs]/4̾|~r67)~F\pXƞPm5rĄ2⧕F;䨎{ә V7Q_!9iq3*HIdEgtQz)̜?p߭GO^s$ yGuK:?Տfo1ga<\o"ɵD2Xݩwg&ϔb{3EG9\S[h\X 1}+#N%<8>43]*{{؏%F|J.(;C3߅s==^sqs+C ER}a[cjt.*FTtjS!mþP*Q qoqq68Fi-n/4SH,*ݮ-NcVm{~Af/74lM?ql33l -[Mo,¸/ 噊K  0/h]Ym29XqW IV{5t[%|^Dɉ4IԀ?5O<jeg)O-ziz7 oφfÜE͏BuFoȓ'c$x"D55[YiČJYd=to)C-Ǒq!J~pg@A)`tZ WYn%)ɔ$!+5UX<]q||N'\缸\o9<sa co=r2dq fdoS —̋ly |P>y mIZwr3#~;Oo#LyV{~\W۶9|u3ߏǘ&3 GPQquٗ>_<aLo>fN$n;?RMw6\v^|Xq\&v88/m"0*>5531/I%$T))*7f9$p$"L~:e54m/ kƟo?qOb19 t&~Qaz-Mm>yYdDU,1Cٱ &Zvk5i51/"qϋ& c-9r%3JOꍳgE;R8̙?YLm+QF,\iQ{>Av% g|G-էs~[O^y9HB-mmOzl?W:[,xiy>;6HahcĹϡluu7>bSQp$.0,ˉEڻj^ZKx?ۧi9~?,y|b_ Yrh&THB{2:q|s'ٛD<\QDHγ#YsZC3;dG2Ă(Ȳ[ TO9N?|\D~rƗAOkhI{ɵ?᎝{O>_3 k|*$dNJA Y&>O|'qB|hԤDbE~xk}|ӷk>&=ib&\dߎ&@[z^y>3nG[CM M"|bTv?ia&+'_2Hl~NUgIcs+1+-gH|6^&!7s8 #DOtm%Â繘,8S\' ȉҴ@V6fY]NqЯD?.P/_lVL~'6q?ľ3sW">O "yw*46ZݤFٷÜ-9Oˈ0)M8"}ۙ.{nn#sO9x!L3vѱ7q87G<:+׌彯]=}OOkvSOL#: }T'r1gZ~xis='Z\7l>qÓMlHMeCߧO ;/3M^Zh_*)YGצZgץ˳ytsQdalm6$ ]NŤpcWםX8?4QRi޼y'?L_qlI7.?#1z?ks+l<~31_g2|*,#oe7Q98-9 mAng89_ل }jwΗnؙ>(ɞ 3 /V#[CFS|IѬRE;lkgȼ^3Q\7>зwگkgŗ?g=S/+')܆K"M;;^/})ͱ[fN-ibC?%|H&y9GWp3XX]M>_ϼew|)$P4$qRF`/zf8N[{zۙ#8ߓ)phY)ȣ xr[g7Ln/}?AF2G?dzO"OƼse^TOhM|ԄcӥFiڎ~H+9hK E]omAO+|^P|BLq'2~B{˹CsRɶ-9i0 s8H92Os1e^t[o9..SC36%N%IޔQN qx8nO7i!CnNPA#mN0;{>>>3d_ XGQZˈX`s9nT2K&Q儾Cbѭ/SQi<38uh&8&KCE~?uݳ8qq|_'3p2[(ޤ:?J]>s3x%~?&^ *IX̐ݬ-[id.} ʦ㣋P9^dlI>"[ S7Zwvby5od,++LncYy[{tsȹ\'aLA FC_Ԥ }mCN+E1='AcMO\roD?BZZ<0䜼L1s;S[eO$Ȝ\|# TV>e66;W57x,_|'9\9{}O8^nC2^K#"F1$e7X[tzov/,L0yx}C:MؘoMc%7gf,JX >+.G nßON!?g| 4)$ ֵk}#Mv{'_:0@}_3i/ ~?6A.7&ɒLC)3?kv֟8>?lG+?gu 'j3۫ Ƹ4QH109aq{TNe>ߎ~!|E IlڳUKeZZiq$ɓL~uqd(W ՆMeӏSs|\pI/)< Ȅ$NXnbREems|o |0`N(b+GyV7$P粵g}Lyrd凇,H3{L|esA Ohd\G4sO# تÿ>^H=Lu×$mG+"#p͡TUzI ;{bϟ;3#.fLԎ)0@;Zw#YN/֎qˎt\+Ev4BpY- \5e>G .ZnG$1Ǵ@hͭsAp|_++3eew@W$̒|mmp18̼`ri )<4%j;m~lor98o'f}^\if޲g-i8Ñaؒ.G%`\]F6"%:[U~'yo|S(,r#l3cD$ I?nՏg]Ȋ;Yl9&H\M<Zӷkϟg]1'/&$Leɐt[}{5g #'1dMSLO-fqˢ:p1=29wd3ʠpG`z=S:l6,rvfAHE@hAj]zx\{DĿ3b&+g2gdDy';]9+w9 VGq7qÒ5$ovS)DUɪ3o>29&9/jɐ^M[ uY>NI'\|6V>r2r_zu3*~gDcjWlF{_\b?1g\h9eu!N6EͅJ,᦯O&řl݄Pwֹo5]s;ߗ|W⮋&xb*%=\ 10I}t0{dBUV39srOc #I Gԇk^UE+s8W_]Pɝ& *T7%nf{spK"|Ȁ)H_t;m>q>^S?-&D4bœ.G#"m9F }M.KkOv<LQA6B k`n]ɽ[e^[7ϟ,C<&fPTp.g¾1{۠0Tƙ 3s{Bij#>?' &irTf&$Aj \}z0W+ P'p+$FJJoֆºfOlOCX9ۯmo^T0&0]ʷ֪n8]W??~?ĹIxK7flJqˋ3_R->KGgkr; CQ~K\M.zgl&@ȭqa}jVwØ?K' U 15\_`r^ 2[㐕hq\V914/'`&E U(`>1^s|<.gᔉ%w.5 Ĭ##N"Y/+>k̕syNo'x~QYM.{W>7-Cc`x[Cㅧ`Lɉn+K?qs3?19\x,p Şg1o 鬞 }4F?#>cY'𢼓J̻_D :Oy?b7 3R%opY}i̿,vMϫ W˸|I]q2/v9 @k=zkeNcw7>I~bSmҡطБYdF[~]! `q9SV} $+ VZ&]LesE# 9F+5 ~u_6s1#͛šuAHI'fMtj[i_\3!.6xҾOn5s8>1 p{1g nI)?miӮm㸑_l;,&YɕfHBJ$>woLb|7+#1Y ;ߌ_I>]i,P=*^:WL9muLfԿmcl6oő/8n-x>/ Iٴ5--y?rL2eyyԢqԷ,ɫk8Ϙ ,YQ/.O30,Lcy%1$e]/cҹ.׮s-)>[򖙰Vhq=͎1wiR*ZkO8t!́SIJ4%E!+^~n3>6|#㸿VKQqOO_5?&c&vW/Ȍt~e^5e]t=yF_~;~349y%ʞDĞblI zyk_'N/Ýq΁`vqǺ,tu :N]]~m qXc8fK>JܹwϨQFZm\t 1eeɏ]eVYWf{IϜ~;SFc$N Sݯ7źm͜lan;_'2R/eAk*u;|*?k}r_I7bBK"C5'𶇎~Eݬ{tI>}{y/ŏ7ѫcE!xn΋$isk~_²qdG/:FĖQ/MT'o73bDMϏ e=/f;+LbEf?FZ|̸/4g*5TmU%Jr@l,QÒ4}$k&~1&~Xy䰓%rxi"Y&{jyX]-/+Ss6\?G H}Gm#>Yy?=d;p >D꥚agĿN8#9yǝ!$MZ9qj֓w5k0yHe˅29,|,B{ eU7=mLJ?񿑉`ƒhxHd3#ɐ8K}o'پi (Ob Fc71-)믵y|8RY)*endӸǟ|6_7}s=ܞ?"ј o$[~L9nc-4|9txI;>]~vla'dd1c&SuLn+?{*_Ҷe19 l Kn#kIۥ;5^8qqxqDF3tI53nI|z>rL|\GLcdfyYE*@7-6L77$jVy`8 ҟVtzvm|Wa''顋 # i&IKmRH$PagfÙ+3^8񹾕v=)8I~>Cq I$I-#ͺWݎWÞLc)4!=K<`cSM3[gq0B|B6QacYm=D(J|'9GƎ*͇8C!oGIU?zzuMV}r0>4"̩_F/ߦe'˘va`2W5élu>!1&>d$46D(2&MiY&Fx|#ybرG)QJ vGUiiᄇfrebq)H$c[5cffY}}yS%dY\mnUUyM4؟<2CT\lx͊IUU=Aߺ^8uL>K"g"/Ԧd{A*ЊvLr͗o;/n/m&?79e<|o4 b,Y.7Ȫ%u¹7]k[΋x/.9A" =ԏVc][yflpH|~8*K)kݭMX87)NTR4E%u^k̊x?>?c%DA 9Jb|&,][˛?%,H%_ 1viĜ}9lL;"l1e*N=w ̣\]n,iT-ayx젨S{ڵk]v9$"+8saU< \tYk%esW,v$qw׫#yXK[}Nt?#4@e]uz~o֞$ɇǕytc9OUgoۏR_8W-mqmWnq,?k6G1YHg1pdC!11:Wz嶟b59KɈ=:w /v r5}}ixto ,;3ڶ湾g?7L, ./9K#64N!C\vuX<ȭ[|-,<!"^؟⸞]?qu2/lN,N-в5X\n|w&89lL.Qsf3re#).Fܰݰ I|Xo33><{7"isLR i4'9?'3 L ee-G]վLB<\'ʸ>fnt6uy#l/k^|}Ng[xqIdŅfS&`7mn+Xm&|cu&f?Nk\G.cI_d&Ɗ [iֹ?l=KmL%㏇egϧqu^Ǫכw/D66,Dn(7.s7 HqqE"wZ4]MSKMr?|~M$y(OXv|r%Շ;;%7?'=e; 8p ѻ\t]Z~Y>AxlPr_ ɓvL*زɡ\KdSk\<38}i!!F@]T@үxo|Z\)qY2e RF>TJCי~kLϙ/[;70q]9>Aco/o7S^|]+ܤ s8i0^"x?O#~a6 ]~W+?9(g:Hd H&Ӯ'֏9L#3IދqrG/ ? >ߝp#qY?G&?/`@#ƫ__ 7OK @#vF,m3~OsH2sxYb(eKE602=1%&+C+ r+VbL79K tuKV'00hh,ud߹TZO {qËY c2!y+3n_*yUTɃ!~O!a>n+)|y9qظ<~Dއb+mw9K[>~iOA~.(rXqrl Hmi9)^'9O4v؏:wkgx;\9Ε%f.%(}u;cybOk1&$ ӹ%]-zzy. q9UBiچT&ێqM.U~<|q37I`#s)vmKQ{im+L) HIW]T}*%]\gys伏<񕇑=mv(Yn[10"x9 )[2b N=)MiI9i}4Wp^Csm QJõb2^[^O_(7ݍ vc9W]W7py|,?~Dq˔F8Nn=Hmk;5m1|#K=NO!9QL8`29QZu﷎~]YG4܌-/? _!i[νu+[#Zrȝ \&D~L#k"ZײدY+ ~=y"sq_ىOR ,SK]4p! ?M,^>R~i?܋.׶c}X|vG3CF'm 5eb|qs';#`qJi;Eo?jno?k"~1̎:K*fRH4>t==o9}_+\ܧ eRȊ ֑Pu)r[JxOGl?q|N@r\j7hlTNeF.+?y+~1yȤ73˲08rZ,,y3"pI[j{ULb]s&|hcl<cfaۊM~eu$05%]vgFH乏q0rt')- D c?$zi[s6JkO|b#fbJF6*aDwq3?s'L7ƴlT+CY:VI?}8r\ Oy [̙ :m3Uֹv5ӷ?9~Jty_?~Vvl6D'# A&նخuן?`2q9t;{6~{|>nU1px[SE>$߫Aec'lxn51g\oiᛝ:x0U8$s8%RZ:lh3|w-\kC&V_)0H_qX1lf?QҶkg#\=G8~~"k # ˜&;HK 0d;,t3zo0~Yk泣^3&,oI d%Wa_V5S78^G?Y!BxU8tY)ֹܽ~]Sm|sp_6#f2r* Z=-wY?5?? regsˆ r9g8,x~f[wM1L'uݿGi<?euǗ=^^c%AU7bmgabgq2e堂q&D*|%ԝ>m Wx7\xn`Օcݳ1dl53͑SHIWwUۮ&NqYe^gALgt#//ŋ6W0,>en/|oy^_ oRv]avU{Ra^qg>9KB ?鱆j7>>EOƮSfhcj /z{'ZiOO/>%! >\K2F*Uj:{ǃ27Ě!e2M{4f8+#!+ɼd[YtՃ0^8<t2Q'.K3j6FYMz^tigOH#ȓSiR]9N!m153+?! 1v2M{Y~q/7 y\< @͑ _`iه+U-Ol|_fpq8xYٹ(.z@dEҹqqN[_`M.g>)"C+n)Lj apU|{6۲shN60m,.ca>Kݼ^>|˪'2`м]1q(^gf]|&䳹,lDL%4QN [nG#? / 0e#Lh6u5cIp8J4ҪG]X$[vMuΙm}^Gwf(R7IՈ 6یqqAVxr X1$ Yk_ bDZ15i6#!NK>ןznɵ.6Tx ._dBYpA޹_]~1rx "K&d;:w[cx-9Jw۶7mnѷN9qc~.tŪ]*dn?|/'ʅ4BgаGMpYt%)̉<IDZS$fB@4Xݮg˓98e!˳GʺDqD"X-ҹ}nuenq=[!Hc<['_hia}kK#Y?4qDQLHebX=Ƶiw x-K<[ΟUlLWxJXm>!bs??7<*)ȲD$@tXշSz~um^^.vV^6N6&L 'XbL@[]LLm3_%+8 H2yHwJdL!!kοY=?Ox׃3Nˑ,^A(tBTxiQs9;h|G[3lx$t.I5; #\^_޽s??fYcVN ۀ>2­~6v:xWqgusi>WؿIXPqԸM޶-TL~LK.fd {]oXzUŎfliW2\Gk˳#k =QXW\n/߉I?>Af.vV6j$ڂequY]vM͵)pȳ&xiNJ'po8x^s \Q$/ٍhۻ6I2cdeq< x=rK{.GKI:rxeF9NG `dAVJ;ߥ=YĹt9̃ iї|xM(mPO[O[煉˼>46Te6f~Uo mO]Y{&$q+2y9ooxHRʪ*Vеso+m2`וVD 1!Ok~ﯛ9x?ہqc3_kW.3Xbcl EK>RY #DOf~m 31#x,|HFd6ə ca|OfWo[PG얿 Wf}Y돖|& f效m~X"zmω׃>r؜6~;d *J̟2t O:8[b8:eƃl{3#Q:yNk/q5g\W+:064)d }uƹt۾3's'9C'gȰ4FocY5gl9v͒Ͻpعy,ܣq8 &U;uk=mhk3yOeA (xse|mF-u2H;l}z{~xߘ\\"A$&䱗 T„ ,)SiLs#/W4%/58>t}_N5u;b=Ğ^7YŞ^_^KvfiY!BNu =zI~ nj>Bsa7# q!;C7\zTTӋ>%H2xg'd@Ώh^)Bz4MO-O9uܖvd\Dx8ntd!dl@={mپI5]e?s;1qgL*qOsX97$]6m,5Γ2,;7L|X^f:b$l .{ywkuVsoŗES!ZN;0ݴhʲ0iצeeG^7ln6|At^do^]2N$ぞnWfYbEM=(='åsaY1+p0>cٙ>ryIsq&xrF$6}WsSۙn.}3"h9I'}PXqnN~~{.^Tc6V u&է;kT '8>, bA^G >KHPtP3io;|#+156# &C( :oox|web\.ݬ ;k7>[Cly3h.tQbvv;v[_L#&\2qUW-LW8i13>+2r1`?nHƼIk{bۛl,<yHeFonW 4urvӯ7p򸢭["zhit[ػ\[C/1Nb\}\0nuc5.~ i~A\v%ȁJb\nGU]F~>_97<~:sɚDX2Hf?JW['1~x~9yL) f`ۈ u]o)U֖2̐WFBϡ$-GD&x\NVh9#|ӡ3VXvm2n|9)cI$rDa6Du+5eO;F%4mY_ 2>r!gv7H uoc|Y1xܙ#G:O SSWF['8Lr2#'G>Z&2^^/}xqcdoʒFc1}ɷ|%n?)&r9WvHsjҸkn7a{F6Uvk57 ~#:\s!Nc;M-`AdѦ9 Cyqb.?٪ry\P*"Rop?miVbvunfo1Áp|#1#s6L1ď(:'vq5Ӫ\Ɏl1/x|=mgd72R}d 921&"?K\=[ˋ|O`O㏗q <tˍu%Yh o}s<~7bro2fK3s+f-l:VUs{,113떢Xa27bِ{[bu~ׯ67N4\|:̱,y r56#hel~_2Ƕ|?ľ>f?;ǯ(g3G},+]|G~-|oDž'fbLr»L[*JUy[Ͷx;◍g|Lqȍ$ţAk"_QnQq|-?gJ Ɩ7 a]=sX×wqNZ&,9^+k>Tؗ[[;I}]VoZnIg[`6f`tmz˒Ʋ8اqa簦#z]E=⳸G/eBeGLYYl miX]fr2y,<9GrhE; 9k$տN=ql?) !l:/rVw$af|S:.?&v<:GތFB-w3x})5(1P{SOx֘^I7^o{~j.?yeqyf,"p1*,N LJu}-Oip'rx3+ɳb1`]geaWЎ_~[O%|Q\Bѫm;9QX _.idYr$iwݮw3~P<9 >'(&ٳ 4>x#3/rgbKLX+#C&Htk_3|3Wُ3?1NeNKat5(˯Q`A|y[$bʍ#r@H#wJLNGybC#FF< kѭVyG;\G3v "}tdGBCXkySN 0/hE:$E1 I vk ]LקIR#Řd yqq}j湃5Ϸ7.Z (ۂ?힭&quNˁyfo$R㧻GNÀe+lf.@= 'oX|?G6$ 2E2FIEcd+\{fma8%>_/LlG`Ċl&VؗUdWs喷YyO"q88X%,-&C,[(7%l|;H%ь`+]@Jm=5-3/Er4mmʻ*LYA?Xzb>?>;4\L~BxX 1VXSm,Gj,5w 0d| WdG9m w_x3Fͮ%7 4x5ӮX _V.`HB.qu~˯k2?xgW5,W1IokK7&_?r#,bE$kKv?۟-2㛟ZM8bf bc,lKmºq-=\x9xc塎ޟQ?[tk|~AyN[?*nDF. CbDM]5[wq$/o!C {0"Q9ϋsI߅Lty!AGFtJog47y !~F"gHMoՆzvI>G,D 1 ce3 CsgLS h?Bbm5n]B5` 0^䑫oH.Srp![]ҟǜ'wð# ú^7aZ@4\|dko;'%gOIlm D7n7Eאxi>.6n8ʰGԢ1۹~yV\v&Q;' C!`FAB/{72~) s\#ˋ&d?cr Wֶؓ{Lb`9'aM,}"I#6*ˬn.Vo A/bȲkj߆LVlY.G8'ƐBTn1m.|8_28N#\[2 L֑%t $pݭVL71BN6 dxcʲ*4j.H)/L+6-I=(:W<:6Ʒqr"l$L/mo>ԐV{u__:Rrl  Uc:NC]ۮ/L_| M2cX?(2N3kmSltp|7Ƿ.?']WxVkcңM+ ơ \'jvBX5o&s[2Kc)de&F:E :]}{in_]ų62' "dŨ8Քj۫Wd\w 4#ABF:oKv?f][c\,?0',0? ĻYqzd̓ z->Ƽvmǟ_M,<7ʥ1^x2s<Zdnxvߴkcr`IgprM-GOiuy?v~aŔ͋q|==Ec=P65zתNoc6mWĤZEc۷~7/ΌKb۴Q+u5z[u &V -\p<݁ODtm:V .kXO#sHr4a]}_m]x!n7 08 MH,"o c?e}lb]wuœ}X_"͏4&m==?\23~>鷅9ϑ`PrQsK vŞ6yh}n`}zH6?s.[|3.6*Mh}%D7ҺW?I˯f-ֈ|nN\$YP&Qeڷ]>>4e ƙqʪCR8^ՍտM)8<4Ci8jkqfԿ ~~GlNeYn =iٮషjvbsN'!qW <4!`MSu疓{^%e%6<1)Rʏj g7Mvp~99,\p鸜|c%9b2#8=BI:iu˯N׳=oN#o37@h$-\zvҔ7LYqAʞV<\Yq_k`J~mfnr~=xY9ɗ&<#+AF"==_V̳N["8 ƍ oY%smޖن'njiX6>7/шpSK=7]|93>n_7.,ysV=&bSaYuzK|7'3F~yG rU_zk~㳲q9k|F. YTSY?Udgr츥![#)2,Z$n#_e@I/_kLt<\s|油,hwMLuw׭uk\ۘ]]qr('nwsee# 1k}nn':7H9̘-clU@a:) A}O1-tξ|6OͷU~#y,rr}j bBFHlziZmKNkjr\oɑWÞy1S}*Q7ʍN&11I">"lk;e_97>~K>nL.!s4$/c\iuj%_9כfu?ԟ#?5qᶯMqFp#r1ЫKF=j Ƶ]{]xf{<#%yI]oܲһmGar;v y~afɾɰbU؜*haz7[xgtgTͤ?>CrXg<>.43Eʫ$~s=TOi?͟G𬜌)'Y=[ֽqpϦ%_^ʾ3|YjWcg25FhH6oz)i9%"LL88 $#d̦6V-|S;..N'%69T++x @,m{xg[ۖc .M2!F ݌<|Lz5~O|NJ<>7#lXc!")U^Rh.uk&iHdO;I, xj(PՔ_q秈:dnK.njٙr䙛*GxKG[JI8\)TII,lLJ%dc9-|yoa~M?&_'||(V]fʐػm?J\kXٶ61A(D^DǞ&@1_Rw5?SmVd87ld^:2/[(xcW$5έVY<2r9:X ? ,'Bc6ʞ)"Vlϫ=#rV%.jC)ȕ|i2eFZk;v ǃ1ݗsҲ-d8CYnCNn5@Zg M럫}7Mg?o2#'regJѵl m+m=2\^/r$;͉eI$~3GG"Ӌk>cxxC.WnnZ+5:\7,ܾ<=G}=Oa],ǖo9s|o;8#~5P~b;[m5zdcsx"vT<c\,Ur÷w`պ ?.O?qxk'˾1|6F7'ʷ Y$F}QuzgI&Z#grdcbc?/mU!*϶ŹufF_I6Ypf9xK'C,[gх\]q/yNH\)G+E>>5ŷ:GߕrrP RoPnַY&<]m_Ok[G_ԯ%sXRm%Msk>ƷMr1eD`f|99[AG?OU9+?W3&2?kTMn[v67~S.Y~-@qF},eUN.xO/ոbB)"Û ~@76J^;n⸎C?y⹃Y]G,Z &}cqfo1OE (h]uz;e g˹Y$OvЙrr d,F}v/Jomkw7ĞpI"f"@viUglSMO#6LLw? Y0=ͪmmkk, 6} ̙Jˑ1Xd$vTVXbpopclgfe(g*7mz11?7g&~S,~+Gqs+ßTAM=4wOlM|/dw;]t<-`z ˳?}.D? Ax\RÛ,)F崭m&"wۗM' ~߆F,"EDޛ^G\,8ߍh/$1UeCj:V^os|C%(9n@q e"=NvF߫7zoK6NdPVy0&upo\፜q8ϒp#9lP3ouʄT(W/}g/Əy?_7Θ6?!hU -ƲFHUZo1|9~Ƌ8=>2BFl/mbk9}c{86 ؓ/%`ll03}U2O K3q| /2?$x_Z6W^?uo/ |^SG|nI"ȟ7+,M#ƣۘ^u ͟g.Bd$!u'aնs\37Bryn5dEb.R:Ôd*zqyʟ!7n?baƜ߻$ n7s \k3U<112xI_eJo-0Tp=Cڲ]fos?_O`rY-aP9h dvԉ*kX|#i\OGYt ՗vf3᎜60O/> @Iv m}nQY6>־XKqgdr)6X*e"{ݶҴӪ7>NyΛ=0ϧr&>C4kw?EΣ;yk4~K#4 ^(&H6ez򩦺\2c> xX8[Xps%:Ho􄰰1xXdymZ9r_^t^wg~}Kݵ᤟11f5Q,xvYo:^֗^s<1>>e|ʉAq[ݾ- |B0ecY"){yid凌g3$L>;5这m>Fkux䱷-|ܬǽ#"- lF;kzIgo\~_6n6l٥0~9lJƒ+;}\Ü>-7!g8zN=XSr4p~_4œR,"{n~;&h$xȲ ȑp%wA/W[6/3\w%T$fpGA^wk\a+<~1K, {?%IW,<f2/ w#l" h.?)#:iZ~۲ILa?!Ngq``0`Ⱦy#m ugadOyX><¯JSpL9L#Ń-p±ɛPY4_zwNUe

S, IFEYodi&f=0^#1p4#ͅh8!cw)évsǔ3>=pؼ~[q(˜x+]o 6rln?b-aQ55՞I-rٸ4&&NKߎ޲͹Hriq. 8gxWPnx>xʽ$8/(ȫ dUdejG:zgI<|nVñ7͏V 4^umIW\O~96vCeI4 e &2ҋ$vc|\d3cQ͵wn:(X qm.p_yQ7/cŞ&D#=H݈65K^Y~;!e< %@z`ӭ+9dIt(9 dmP,<#O^0'ȱ9.EFLxɴ>PdagA\L~y dqA۝WUGg?OgGp|3-Ir SVisWy%"l^wP$9 1Ool6?/r3ŷ_rw ۵Ұm]dpp_?*ɥ( &"-4\G}U߫˥L</%T4FV]}X%T2/I7ϗ_"b.D"[6ʹ@uo9پ[NC~+|Bb_ld啻'})M4[sz)>&{Xo6<\1ށzMS96o5ٸUsrd(Ѝu]Ino72$rdK*L yZ{-?s |nMf 4gّnC ֦t1/DžD<- ٘ќL*{r¥RpIyc:xU8>Z\v,xfFVV.4X:Uءֵ^]#q8qh$ t6쫟͵{^d0y^'䱋Jj"1ݽۭ0_(Ҽ8ůlGo֖I¦oߏD+ ʦ|>'~aLwoZ[gwy,<|̼|1$]U Srvi._[q3|FN^"y $9QI7!mZ/#%r_"i\3SyR}g߇K?$gRt6Fm!`|+ l8{̓!l|4{:5k'N~Odgq|\p㬑ɞLsMgYF ^95gn#~'4/eɚ,dVV2G7Mm]s+~'9&y r Bra\~?o$6n',TL>1Xk53]k~lM"#"GMI4J%O}+98"9 ǝk cLܛa\9mouiy[^slNKXe-$V*.ZϥO6G%.Oy00hVLY,R#[ ę]1/[~(>A? ?,1s0giOHmfg+S' 9<|˴k1vKv=k5'w?{N lܞG|pMBESIs_=`_ qs>W)rq!HW!$;fUm_W2oi"$0q*/Z~c>s_]#xc2]\ޒ\k-5tkt>_x;:uc<^ܒ{35f?+?dAI}RLyvDoV|>itձB/įrs\U)nqDz #d3 @r\]ơoqb`a2cDl e{3_K/ե&NE&e,mjfA"wJ,-/Ƕ7(?:)erV8p@7Q}ߖ]{֛z8ڍtpy3$?g<"+Fͥy;[3WV[3>9m&?_/Z\?p93AyDE[jJ돘Wm3OY)^?; O$1yrS%1$Q'sްmnm|E~uM/qczlV*i ژŘTnZi'ͬN/qh3$iI~|izN#4q:`?!bLwb}qok,b~&;29l<\&"fy!&=ꔱ{Zkϓ[e_$_0qqbEXzizywm\ppse|V9ɂy"xr+!=Ht]ˉ.|_|3ݱ-`JǷk}\#bϙ b1{Q_͓׳]ߏ|_ L()}K ]R[ăg7gO2G8C^KX✏z;},l+M$aٛ|1P/G k#+3!N:B,98Rh&UDVT vSUi'|{}ȾQD,xȅ_o$ؕ+z5ޮq30pReʉbf3X;uieW]<28Ib6>~gǔfcr# _%jyD?).C=7TnfcO2}  `9f.FO#"HĮ^{vY~QrPP"af["#H;ŁҺ1gY|R#2e(ȍT]R[qkXY?>*'6W.V+YcYշ㳡NZyRx̩b˸|L.V7~;#IsȒL}v];^&7U=,vJDG[AgiY\93|rScy)UX.c0b>?SVsK.\G=ȯ4%`\g+'Ve_Yͱ7<p>+H#2ڣ1] +*3^!57ё1P?꙾"nOɝ9K4FޫB׵jz^q./78bQe;1623IZ|| |lC$y h=Cmj6N3G+(&Xҥe1W;x-u\93>!p0"Q;kov uֱigd.wq,QvYEm'ʵi8L!'-%!dVFHfixf;[iJߗG;Je+#nCTc<,}dqŦ2ar3@$d`omڿVOk&>i%s|_-|rM$BDշIgv^'0D"ۓ#2~FECkw:q92%[Ϗyˁ49<fo_BeCc$ q]2X\Ɍ9siD?(YhP!r Ux^m[s +`<)!eLHGMI!eQ[\q#70׌7$*, )-S/˜[3l\2 4 3- n[Lx?rciI6J0D]Nͮ#[uF_9(Qc<+#`WjS|-0qPHNVim͏}7 oSKh|(2O%ɎE$4 Ё땞f u3L~|!/7?#HI$ۏY9Î.9 38@86rӯ.$ 6ɲa?=crc/bǷ 9|)ݑ6T+ Nuto^Zr 71|L Y & ;cS{T[x_X_N_7@pf9T$a>9c8Kz.*t߇g߇e\# 񙛕Y tqO99۶%nNJou1Τ c~;Kbۙ?9&VpY*Yp5kTn[i9p|/%}6V_Mso_&1dq&G{jIa)~R*yE8~#q|EbAM,E{.Fiګ]0ۭt_hl+?8 u=kWs}-Crf$o !nU[md*~?/)RLlh埀ު ~]m)& k6 ;dMG8ܾ+=~E'G'<bdFDRǸkxSiQgrf\Uq%)#Ucs~uUk1O/˅LygȉS+1[goj@PCiO[93cY1gV2sYs2/ S$2.(B u ޗ~ӛe2]v#YJ=ZTm_p5-[t$L7r6lʀK>n VHTgit[3r܄|N2yLXDYo*k~o5|o:^CMQ\t@#^tklv9 & DQsִ; pc*>=]$'J^R,S]79ap&1 m=ecvEӢI?iIk+LG L$+,YJc+xeR6Liza3'Y8ØDDvoSv.?\K3cI$6AЕ-f޹}ʘZ|o771ʱI}!v7FNWk3˶O1rqs~#Q EzϏ(Y>;q<)M#'iXA{.Pſ1.֧eלO$[~ 9 /{1굮옒fʓ n(ŏI&I >oH5$~|gn>wW7: .o9~G˝?K};\GdjTe^O]'YS8n^~)"A#ciHٟ*ئv$yʁ82> vY뭛K˒cl}8~ϑE&7-^3J)ǎB";T :ZwkfO+|2py&Ö}5m{.ݶ9W_eq$sϋI&/ =!EݪnYȷ3)&>Xp373dJ$qj \3mFno]ϖy8"NjnUYGOu~&Ymb|Iy|gTb1;P`RmfO8x )1HјJ”k5ƽzו˿l26^3Xg*Ue ب_AF{ƾ=f^E*Fn+|&xKk5sK_n<1"&rxvmѶc˜r]xlqJX]/ ,rxir.|,X*̡m@)]/KW?s3$ ^"6 ŏzK^'!feOC,2|]Gʪ@סvSOƯ(< $88rdAޮi?ǒܮvogd&@6 zOQҪ\Hzm} 4\^_ '=ڌҶ?, 򫒜H\<*rba'cHrFƝӛ ܌Rlp|,bEez^Uqg\fdlՂX]avm*7K^[ZWIȱ`9[j,2"i/ݤ)I:,^gʙmods{!OewS[^M=K< dr;V0J&VksG}&L\,|Ë \+#}Afa5Z ,79/abiy<ܧ+uQƟ\ϿնI~>|_X~KÈ$fD,U`>JY~_g<]|.n{>d-Ȳ"ѹ[(lW7~s?ƀ@̓ZHWh'ԣUn_wux[][b'[fyj/ 'm~}IUTTfYOCool]}{AjIc=wasW!bhhbLcˉmtq$0Y^ y*8И}&.Jot>OqxSȍ!Fum25.[?yQq`eF0%S*XץDI.f?]nf.d q/kܓM&)>/'OH=*{9YŃ|>e2Yh2>_#F67'ui\xR/qF.TG,W1i\n_31y A'!8%;}VEA{nV?=/mZݿjL8"H6TOpX߿ּq]G!?=9,Q<c$%t?S^$cnWvL^N?*3`<;[%NW'l99>.&6Tq#م k֒3 .~~^ċ'W+qYvMMǕIE7gr/;36Oh>9./9yDHAetbZW\׏.l˶lǡI2..,Ʌ;cIFM0/Ҳצsn#MI0vdeQ]Xs|Il.O+Qcom&kn)*8n[ ?Ğ7!=X-&3 Ӥ{mn~Qz1]\:Q+qvKi!]>skN|yq۱Ad۩sՏM_s|Sx?[/φri$EV\} if~y ǞlS , B_u-1VOs\c'1G~Li9,?P} ֵkfQ[uyLP'.N%_ti=(Hfkjke1|!~:qV?Lirr 0ݏA_Q-Jq䯜1 ؙ\x`#o[kH#%6,}8n۹\ 2znws.mX2>A%aX *m&/jl˕Lc.sOW'#Å x4E}FU}uִY^~qq[Ǜ)y{P^ۧQOmn9D8pr`bqx2`˅6PKL Q댣]q1P,QxhvJ jV,6"x{i?o$ Ls7''!䄏o/]gkwGv8Ksx|~KEjU:ӽٞx̔sn$s_?.0\.?v1*=-qx n .7%6ۓg& '6urv6y`~AŌ>'Hc9mfjq١Ab Nj$Cۓi֦ݧ7iu3 < r34PolʄK\saSO+i I=X|GLR`Z[?٦'ar!T#>KI#8ϪSbGF^Ϛzs#{+|\L֝q*6UcQ1>IcbY wXegLXፈfXBcU6i_ȳ6@yV8BHe\cu{j^_,c+c d|E8OOm>|9̎P³F3Em=RA徚;Lo2'L~G8NBIB9M3p? 7UL׸I6IjǺ9Ѧ_:4鶫y{u5IL=_|&1>GyV2d{aE;n}=F%h<0 3j=dr|?:~'U}Ok2C #LSl1s8f)r1oIwܐ)Wuε2\<~U?I9 Yd1Ip#qC )}~]g;?(GDQL'1 rw+p^϶2똬flnT>ɧKa"_J?SOoXO fʛ"D6|L RU B8gwMO3#'1Ye7Eڥ:\ȱc?/&%τ9$_l!m.}st|"ٟ9"8{9\nQ^ Ki~c mo>/)A6.n[8XB1u:ضkfߋM~Cد:O/״<4|Q8AؠSZfq~>*f4Jc{t!]4`GFG+ eK.[D#ܗ&"`d7HpA ~:Uv\9O t3G=#$6vu y~l0Iq2lN 8~1*Eo!wFB+!*Wf[myi? M6^J`d*/,[Tٴ: t^o+r2,w>-sZfЧWTWeN"N&(xlyg"^Cs@ϺmD%ok9'EdIcӻ r/3lzo2r8 <q+3C0ZZf[F䢗9!2I&>7a!KvbGYY! !@P.uᦽv̰H0Xaa_-m7ٴ;;k=I,~ /q<3e4xNrE(uƯZmYkfߟo~  4XE}D4S2ϳ(ƈ x(l>O++n'׬I4BHz_Z2fSi$၈9|>JN#"1|YY>ZuB0bp6k11[)-0qNcZ=K9&^|+=g׃?ד>Q>np1Fb۱mkOԬ>AIȹlyNO)_\d_MK)9U{bq-?1sLpl IoI }oZ،n+v'dQ/:< T%Ǥ}*p/ʟ.ʇmb&VA^e2T8^+1Q=Z{UD]u]fm [4t9mfmd{?pŮ+ |HW =y(oYݼ q.9}6'!)J׹žUok\olˋ<_|3spTJ Ь 叡-4fi5뷘ŗ> Yp8YW.e$؍v)ַss5vO G8X4iяJXǯmۤX7)6kE&YŔ&;.#G[xWW]۟8N8|,|pDAuWz<W>r ]@05m׭H\9)dJu8J$=t׷3X_Ή9l (x$`.ą. M!CMM9{gmxI$M?'}!2l*BHP ֖d[{v__8L_'xs!6[e9c=_Tt Zmycۭx9CgpM+Xٶs6#kYvM?e19Yx5xxĈadʾKץ6;o>KgY{2IA;45-pd]uautbyno>+ϗsf$OX٥_VN3U$Ic n9XV nWWMιq8ɾ6!d~i 4 ph@+;Wf_7̹|LJ7<^DrczXdV!6V4~ksIA&n||f1pfٮjFEoWW79Cӯ鏭_?+\Ngǜ7r.D& Vq'S]u#>̱ranR$'Op]䶤ۯI\e3~>NQ&Sb3É# !@n.F960/| faG-ęsM,zOVsi?, w9yA_7~390mo)mWΰz뷍wL^+'͝qzEhI6[ E_;Z{~Iӓ񭯐ŋF?(r3!Ɨ~D,"mn֮-~/O^qmZ fd/' d\d+vKG,^I5v˽GAOXz{'>{.' Z^O1F`N=B4/|/.U8Nw342܉#Vuֲ.ˬ_pgǛ<^Tő@SVG^ǹN&/2׿m_aaqe8+c$nSu]e~i)/wbs3 .7QIFT@WW^11^crX9m"@HiWO[SK/.|}\5EȎ+yf Z~~l_pO#<%/αCu#WFͼHNIʢ9Tlp /IΝc< ư"|1!O$Nu\js^_?$3?4ijҷ}c\iNR(R.M{ڵ;Y~XeF+[ktR898c,i8cw;A6s漗dgIDa .K V6/ ׯ:l颗lYˉyd0$}#%ڐWZi}qtl>es$lefcRI<-(#VIcem;:ILt0 7hsPݕ#m%w1:v&fk9ɉ|OV?73b6,hיko6g|~|l./H#-rY0c^iщ5>juᓏ4<4rrK&8.BOgqc?i=-O{\>O5Ȱ#LpސZֻu?w&O,H(ʕYIۭ:m`渎Ylc׭UqǛ_|F 7_*ҏ[v}﯏kLcCP$ak4. YyF<YO qc*;'cJ/m^qobUlW޲4$7$_V3w|἟$Ń"Mɱ00|I]]y˷ll:dIyYxAiQmK3îmsWܗ-y9&ac@c".@ qlmծygeqC^?#DIW$dm>{zJמ o-8YOM9B~kLq%&NdK2OƙR/ѫtEץoDxS&tpś/#F$Ҭ6FiSq7"HN؞Aʻ *[WnO?9 PcOon.0Wi[yƇ+:8la\.B1ނ8eaҧ_̃2^#40$x菉[L[Yuö;9*#ux"= ~PZk KȂȘ?'a  4(#XƢŭv5[YF Lxp1w- #(BM NFocbrQySp@I6K|Lvab|.Gc dVwSW#;s-keaHez?r=zUmן dqEFAhI>919xfl';2*<|[fve| ;gerʀoѴqY9qx"rx<#91,E|f$(7}Sϓnk<ٹG9ȹaX|+f9wő|`r1osj,zwCڲ tsx+\g#\mZF¨jz}l]Į3l>2~6 :zȸ][eg?e͗l_'#fO)\0TdGB6UI~~xhaE!:׬ Y^#;B/t',Ӈ:{)no1 Cb9)3.w龼wi_?,y@( ~bm];Io,v7q9&NS{G&CʥWIם%ˍos Ǜ?,eɾ.2{RbLf=u5^L:,ef\ge1P,ahز,zDŁN LJ}1ç]Sgpyl:ep\ؘR Bs5*Mum烷9sw5"~S0+>V%HIpƻf\$g<_/CaK s*$A*:x/}tm8l\ex4yaÙFHf(MZWvE7q:# 1s^^O^[Y0Ṽ_Ѧ`-$EuU=gi^p AϙȂBZA@\ËS=*}$ꋾ~у.Lɗdbț_Xlj;ӳ3{`aXM?쬒!Ky,E Q< z]wsyg?W++7?p~9ŗ쳾$U+N|K6{3w=>W%cA*dc1n2J?*|sbM:rpi23ʼPҨq鹀soȳ y'hC⹽{/~gSf5ޫJþia^/ Y|W-|'pMgI^氽z|`>68 ~dG 唗Cb--zg>-k;q_ #|K:XąI/Zm1,N]9dq1[ۏ2VfHie*{y(+/#Ik,_Cфlڝ{;kǹ *9Ev Yui#29?r2'{€#a]mb0_pG;64Dߤe&ޥīt٢N30&Ja1b\jDL<ʳ3q ԇ:wgaim޳Vxʽq9>G>Kck?eј(}tko `I‰#r)mHJfs_o%xGNzEeudЄꠚ"ۭ KpLÉ5F1!=Wda'3? ˒-"-7OXpI G'+37JX Nyt_gE|;GLIȋ "I >s[{\xId"="gHؒspeFqpyl6h{5DRT}V,8s\pŒ/8%tS2a.wm֪%m2eWyIO,XXەNA?:-ɏŤN&$OczȒpW/|^mep F+>3;F5\zM]]"J1pMAUCiU0yW{i]ZvMMG-|=H*bCoޢXko.Fx9l\hUa΂mH}B9|YyNrNS-87ޑ{wbͺE /V7_Y'G'#lZOr|PB6/W˙Qw@9ς1yLjS#nfm/ӧz_/}vg>6L\ԳbE!Ij,]D:7>38x_`ɇ/D26b$v/\u?9rc[,qc,F ރjloBc*d8"WfceuKټgk2DL~/?‘D|T/w~U]/޺1v#`gbq=/#Y@G>:33xfkq_)% l:Rd|*gDͻ]dO Ljv!^8_ץ{ ×3~hO/p>GؙRd^Xr1=4m6R^Cʟ$؇{ec"P jvLg q/V7xq3Q?hJ67z_^n{IK`_sXr0b^^8BN\k01AG}'Qdb[]叏;|w|o.ٜ3<#؃+ƍ Ym lvyҴ|gvN}uNcfa;e*q<ݬgvj˺I1v텑'+7ȼ߷gŐIQ ۲kOZ1.ߗY):ÓFB.8P7[ѕ׎-/+o:`<J`m۝-[z?ФԆC|_c#]c w6T#p|o-z淌OilYx3f8%wlrðQdFo:ros_9F,1fa љԖ,|~f=;-㖤NlqMacMc"8QH=tAҍme_?|~9ȷy~&)F&{h˦FL\_Fm=~s~q!E JXH.Hft<.}xl>' ͐nr^]VĨmoVjbBLi^ -6u^~e5OpIeIfǎ#Of#iaKmxKYX)lJE+#AbwOMc,{ьko'~'㜆oB:;P֮Jgl,crFq\Xu(!,X U$e_kɇ/)9qOOdc>C9C L~![ډ9zٚ¯f2i gʃdžx`+,/1k^o̺])|G'ω99\Ec·<.>bN_0# ?&%=6r|y䋀!32#ܷbO-u|O v#%V# ~"ᬾK~ '%-dp["S߬F"h=h _ 4Qb66&f'!1V pOѼƳabܗ ǑuAX؝-GZk0|\We73xr##&,A ѪmOZUɔ}८v=|glC.2Hs!s%\ydS]^ׯFN2qN# SB@ɍ -}^o;?50|gQM8wEDIUYަV4y~\cq8IX]NŒ5?Se\1oy8Dq'&deJ؏(߹jkyF}gGIZ.>t.,S0'aIT*ݼ<α6R1;A" mޭ{ ,=$"ar)bC&Lr3q2w$mQQ\}eV( RHX H:tLl˸L'Br3C*DTWN>N\ٞucda<^Ra&VT>d?{3I!%%C۶֣p3q¸yW3D"C c/]n|M?3fʛ$m9wEuS#m0dذ \ Uo~3K'1HW/nM.+Ώo3s|g!/>!w2$gUKkO[Fˬpx̦y%x\ -?F#Jm/fs8Td+X^xL{)):Ҿ>~"pV.4oy tUoڐ?(K]Kny"q!>^C25͚ Iycek湶|x[32da@dF $ eFm/}qs1Co[5l$*nL^q: hbP:~˟&J,\(unQ'qNJcr3<`yU_\_ۜπ7dq2ܧ1C||Sf[$A84,\ r)i2':is^?qY_eeœw$"|d@Sb')Yu;sjg#b MkS\WD\FL07Rpڹ`6?:צK8"c丿 ˖ic%VWgESxI+]oA5_Z0r".uEDCǃ,UTmkmuv9|i\oω" I4KJE°j=M4J濹Sr׌gvtQË 8+ua:Ӳ|o/?1P7ǕR,!v8]C޳99]q 啱NpNK%E'r {ڳ%u*830qlOqr @J"w֯]kBy!&Xy m}7|L8*Fjt'X\ZXusOϓuh/jiXiYGS'أ8q2K##-%bz:ǭiV.^=&A`[lY n^Um31||9'!Bgnß5>R=̈q9k~ףY&yN7|w# d|)G3Qxg[rcʯ'1>O^Ta?n?1Fb۱PRz' {q>Yd|HS@UZB7-os߂!ʓs"b)" u)4S\ϫS+pG3|!qܸXI!ldmmת[輒&/a̛2O0/M;EE=||Ɒ1Gr\{ӳf]5,3`Egsx~K&$5H!ْѕRE'5<~&a˟ \ɾˬ@QaF]Uk&ٗ6[7cNCzx^6a6;Igw;FۣYms<)Ŷl3,enK@"Xٷ^ؾ]0̼'B^_/#1NX茺^#׏D,ɗ.&CѸpq\fSJp=_21^y3ICB d/M*rwL;?$!g2x՞BA 2[k|WҾb#$I`fyW A;!vs#?\T '%&'Ĵ80<"$`2ڢ[YlAay$ݱgz>MO/AYPil$s׾"Ʋo1J^GX8f wl}OFFki8?)˜RWbYUƔjrI}ϭm52s)Ff- ||]kѼ?ET[\Li%3n?"Ywr+?z2RZ3oʼYgoO1͙TVՒ6ďi7Mq?ѓwFQ&C62*vlk̴̛g >E&0c>.sgdmW Qn05~ c͂ +@̊{nk:K*F>u;;&~^ɦ޿Wfĸ/&c-n~pfp\FG2' 2E{Aًu7G|gƮD r $τsO-qabٛ+S. =Ȣ`W'E{Rs#9FdblQAĆPZ4p}M TeSZz[o,7#G"8adhu^ ?*OgM'Eq Zev^UsǟgR? >*誷-9Hpbs9$P`ы[V2ۉ:ϛgE:$?ܒԯ7썧Vd"((1G(Ot&3;?'*,146fD$ [~[߭gt\QF|S4G4v,q*6 _m-Ĝ2iCqq$%i&Nۓ{S My89/'㯝M>GLM"S6ԑ,,D9Rcq%z@ OMfY182pO<(B1&k_~8)<(&2 l\\_~՜>S

6$9ϓ'0flMEvmqOy>7#d%zmV{ωoţő[/CI[-B1d&|V\WV0tk6mǝfKD!p ,h%头~ > ;3`s{1+4aVrm/%LܡmƧ] ǵϛɊML 2I,V~c5×ŧ^G&g7QELJQ%\`,ͮCt[x+Y8MJ~;r9W$X!3uf$p~]gEy82&.D1$+F[EϾ9*m1θ7`:-׭MݵۘDfO%qc n1#>,m+:ռmO%3 XXX11Тm*:u; L:I1"0ӑTXfnh0@:nFH? oV{sv/)rْ' qdca>2- >gy_[̜ ‘WËX GfVsQk]g7aٺkX;rA2~7//frWxv6UP{OB|nK#ȟ81K$sL'ޫQ8\`|9lʓ㼊 R!6d﷧zNko7C },nxV=\x#?_>{ is&s"ۑ)X+sv*tv_$xoq$D+!Qk34" T.myi9lbOp23v;RPhX_ʦt˦~.?yBY_7őg#sfc]|b_[0ςws<Ȩ$9Ğߞ޽o~6r>P9+I3z#B5^n\ku>ax/3^jN?'7"9{3 ͠׬:g\q864(q㍛D)* !=5e׷8n5ݙܟ0yx 揕Ƌ?L 5]=?I-N2Jd\0xPj\&tҫ_k,ܢ6&2e!7MaM\cD]uV#rE' GS9>Nދ=/00œ&NA]{n -5Lm,fcM%ⱛ;;i~Tݵκ68i<'(f0'W&sb;6]%5`2Ac"Jb)q1$m޸n3.$HXrR3MpZ(Ik|7pI+ski *pMV?-yٹr3`fildaMq2.u-ΒXv^WϲAFxd7<[Mnxq3ܮC|~d2G;Y?@ :'Q]4IS).oߪ&NR #Egf/ uf.+6?+CG2#mJW=幜[|a  "Ju5Wti?82xYܵUr2ĒHMf@{[9;6ŕi"Lyۜlw@,-sSi׉/BeODخ2a,FiNT\/7tmVzƒU;`W=Ŭ|6g[Ir|Pg4qu.책Qsui/>ܭ|ťǑ 8Xc[wZmu_Y39S0?&|2/"?kco.U7z٘6WѢ>*Wdߊ ,ncVGBxʾ-y'ttk]2v%tbYV I{3tJn'N3xx0d1˕c"Bu6SfwND.ԑ㦾2}wi]'bLc?%$ioؘz)"âc{ڴ;且yF͙T?*ɘX:mEMnl7 ~VNOvY3Q#-7¶ǹ.[N*7171 W)#UҗN)c~'Hf<ɗ5F]t'QF\c<gɆʰɍ S6,oyvH k=|F92>G2,|2g,~km1ϯLφ^Oq?F?xFE:Qf]|[O?Pr)sYXEّ`EBbƿ(|Wy<7gx9K2qá;5{}MN-k&:q/&6CILI'IU7_k''1$RGp&f ;Dxs {~oiu$$r'~1.'ŁOp $c濡UʩsZv}q?cen7F e,eb~D>0ik823BQcbt#)qFkGQ`*^-fr<qlm` Qu\] O+HҼCyM6]XIp|f0QL{/[ZȖw^D',@llYA"Rl"o-g/&BMfHqseۺV![\V3lO7ERqs5!Uk^gwo͘8n}Ž %Lgh$cѺWgU]1?'H.9ۿ|qFhKi]}\5_f3rY|[H> \rr;4)+H+;h*űϮK>n>579LseqݍįZu~xuN[7ox7#oqcQ9v2<ɪ{qDm]X4?8Biy=~_2}bMOc5#͝wEFEβKyUmG^/&N+;,X1,ck<+FX,rqqaAG_N/Bϕ|+'+clTm&&Z2m򤉨=EObep8bԗ +3K|x\^znW,Iq ƞUU^ׅI9S/729<|/D~VdУO[kGfV_SܟvEntmoOYaÏfnۃ6@$gE#h=rמ)rK;m %QO ~;ׇ%.2<")8I!E+4bwDk]4Qò*WF*+V6g=Էl|<'G?fG*ɏ]4AdvU֞YkGG4|:2x<\x  ɐ*{ *@U[Ӷ&1aqw5W3$37G)d>-%ٽL|:JYn-2qr\d6:/rqEmaBu2/•3YǗ2Ox.v8p";9$l%CoΎH>k5wx~.|$C$ ,-^̫y#jr=e<|#/6Q&>,h1a> [X8lآfcn|"d\&ݵYdcfn0->7fypxN`͟D}Z⳺C7wah6HR{#KvOry*<c0 Mh"[uyN>._c|闆Qb=NRHY| cK[g>m`MNc&~c/`@R߯c5wn/) iB I\vkmnfcˮؿ.cRK*NPC?fPE)m:i0ɶy?ʗņ\%19L c}A=+~L~1GIGыQz/>m /$8ə.3I$˽[&?naiW]M+6[<\>iy 0!a`:0!r7{ijk3z38)rrfM4{HfQ" +qW/ns8Lx3\H ~rۖ'+k࿶ٟ9 pr0!)2Av-}N/1V ( }B{AҸۯngɾ*~Beˏbf%nRݫ:{O9>&OuV 2q[0ceY>^ºm3kFLK,,$@o%R÷ޱֻk'_r),6k-qoU *9^cn) Os,WY\1.f9o|-YM#t "KYԩ)Ͷڗ 6qUj;=Ky~VS T3n<%#O̠m1xN? `paA'U= !Vk7j>OT'dqLJ [#۳[tɞ[3ơx,%7Z^Qx-;"L|㥛hmZד$~.VP_\cWh"7NˌJ>Gb嬑rSDžI*o޹s]d?ߙI#gKr,1jv.1>/aEdǍUEMWk[=$L?NDfV!!n>ؽL'\ _dqE1J9cɶrn>QvWM瓙xX{(⡊,uZ ߚ Y91/6CB0f.&`jeϏ6_Y=B/q,Y^Oȧ0FOhxle>|3.NIY !Qkm Vfϱ]n۞+~I')Ir/!MĖǧU3o0#O%*<-84lo鷕t fnK9/" ~(W\K1'U#w*Qq1=G?F*ƁhնEo7ug%9S"?}0?ɬn6aRœF\Y\1Eܣ@NcN9,u^pyYwr9ѺÈ Wp(q{V7Zs?ml|l#ĝF{I}BTSrN٦0oɊQ`Vze_Zm1uNif`e(FeQ޷{''#/s3`m)o|^S3KK88"VO75o໶Iܷ狟ψQ48Hb J_:04; O$C*Wd>}75<$m7LtiƗ ۄ^2w/LcK91#1b=v=m3~XO4.Dzv0$v~asy/6hcta5s,LJ+G*F,\e-,8H*cqnJXrm.1k-6Ftrijɞ\$ۿ2+D5jFݒf㦛##*0E,{vӮe,(u{Bݼ˒1{kd%B_-u_#7;K+k!n.MV&i_ί٘fN6S-:v8 77`#"xݏm'j:_ow#i$#`^FJɔ3 rdh%nEm=w^11{; (QǷ$$XjM2 !eqR [HapQZ}4yuoǿ"`6Y;hFoOm29~NapQr$qgpU׽czv}I81퉎8"b*;B?~׏]q嶛f%ǁ ϗHd_f,t]+=6˟9, HHeYںt .mp1HwaFɛRrX ZF?:֗\1o+ɖk4ʥ2`ncUfm6k9c °'/']n׏+n'H^G(>P$7T N㨭uuٴ&_w æ8 DE!Xؗgk֫6ۮ嵍·!ɉ i+ΐl t~s .|{bdS+e"xOO93iW(^~K􈆾ҳ_M~.q|rA)I?N@KqY#gyi_n1f_0<~~7 @]jO`+ $g1L$||a1噤:(rބMg.8N^9ҼG$\) / .Z Hn*n-_odeCaeaM#+0=YԽHmiۑ3%m/.v.$\b ,mkA=*]ʟ;N:sbE;2mtnJBIwX)*Iy~)&^{r\j'IxrbPl+l&6W)Ip?M*c؝.Iǰˎ<~y痁ƛHsA`LQė#_ƫk9Vk/χ^b{Y*O!&bTz]Aj77F>c^F,n[26\"#V%Y}vk6Mq s|anm#ɐIb 0mxtqxH;6D~|~Q?J|Z !|,C&<ϕ9 vbmM9}i ebH2Ɠo&/➼g˃: |Vh؃${d%n Y~_?<9>I,:2xdBq-Irx/N3:F*tfƖ+\Q{rMqجe\ D%Uo1WQkA^ΙY3f \ѱb:Q~{d8'˃pYḨsՒ6]k\_ƒyrdf.>%_  }p{zvr';88n812 NwJl6ky 2[>Yf"8x'Q[ufRͱ_qdf6Bf$QȵNmu|69 .*6F2psJ[D.6r23Z&<!i<>ht98ig-_!Awd'F6A$i6ԴէvIiX[g[.<{`VZbZw[?w0G ya2rs܌eyxQ{d '֥~-GߘV>ܯhزJj3KX׏Õ#u$E qEdr\sbS{ʋ$v^¸:ep]0gfeN p7-D\Z}vξf|]Ų8OyrV0;v˳ ZeNsܼV\~(dk$JGRY$Akԋ./ܺ6uFf6V7e^;sFg彔.[\s˶by>t_$ıX3W-c .H HQz}>>$ݛ4g%dK4%䀶/ᷬdmgsQpd`ļk3C=)wz~}yoG>C8A `I:6N^čIYgulǗ9 3quqPX7~(:Uit8#9M"{& oۯU٤mZyqd-gbTx+.oX9d>[l)%Ch"n1 -;fIa*0ֺ3ݺo8}8s!ʌ6%u,1s龳}f\98C15g/9]lY8/dd@ jۻ<ĄGɍA4x\d+HyEn5}zh|)n^K*> !Pw*/Zǧi>_bCqNq`#;3/]>NKrT2D*"jc<7)#izfC[+~F7!ȻnAwv]hݦqd(20#qx dt/%#Ưn#3#ܹ=T u3!^g>O)]ҫT=v^b_ >d7PGfk278#σ##E2Tm̘]gݥ|?lϿrWY.e&]HaF̌נiK5 #'_* xwTpop]m /Zu-K ƃ#v _J[Su]aL3ɡ8mfLhOjrFfG!4Jjq}+\1̗3 YsnR$G;'?mծxjsqTX{zE pӮ|/ ·#+eK$#$rA1VP{Mֺٿxf^#;*؜ .z$3ty^7dLE1[kfB껎5<Ã沛ےΏ35zkg|i5] '38ɏ-2i$Ucڦ+Yr. pxdvU l;apuؘO>&f|:cjGv:dtyN6FN\Jo Po-_􊛺EdOyqfV K&2fB!^4.Oy SH܌qx V uF՜[D*zc<αߧ$шEюlZ~u4N}?/<36IXűd=`,!k&mG1>'GQ8>WX~k1,xT\^'PR"@}~03]4nvGĸs\w7bXRӞUiKB^ʎjGңDo~9_s\-/)d%p)!]û5ꬽ0ߓ*^7L!_v33c 4 ;vֵ9F&>Gl\xy 0V܆Lc.ep2wOp/Q6)I[Y#Di0EOoH_ƴJœ0yq4P@hÙ|/ϳ#hlFE'Po &];^I ˉHmv 7w4SLvlP7H&t`tƲ_yU׊\/`FJILY!w}i,.o-fߤT(JkYfK>%5/!),*%c$+{{^~1Ecasc$@vvuv+<܄cd݉D+9tRJ|ۖ^1!'! h1`n"k0:|yXܶDp|_dXw#6y2݁xU{jmլ|wdLY2V,ʈ~pºf}>?7aOrheaO2Ġ {hmzYY}d.O\_6ؒM uVwedfNm[,(H*.96xE']ZYKn%rf*bdjc;Y؍E)̹YsH1#NJMQVBSOkV| njrxܺNy lTȃD2H{z j1Z]q|?ܱ~;$llx?Q`{so*k>~gpsHqعa,Uw&KZ61>Kg.7(Fd,<’H6V\f5'ÞCKfL?Mqߦ^&ui lGA7%Ʌ> E;a6HOy׬\6)b4r ?le4Wi>B֬^]ora \|T>{fLn,=n6k/Ԗ}q)䇐2#<\oa`F=e~Ï$qpqr\K&DgCn5#iD7ǟ3/dI&/7&TPαI6X-c*7IEPmZ׏,L:x%yǐ{}A]Oe*rټt0G!lxYf *lۥyvkg^[lk|1 ,FO&5Pumo.}>R|wPS<9vZe[ۗum-Z-q.k9AO{cB$\y>Jf$dĮ[DcN汻ugYs}~^!~1klAIVY$ܞ,߇Jî]z=]븞M ~Y'M$|!] \j{6NL'ݏȧ4˱r&E26>HqP+OO^g eǃC17evHj!Ux&L|{xgِf̰Hb1*-j~4σ- &xϝEŖ8n#FsiҰXq~K)>NZIA>z&MW&vuo^W&>NGǥY\>mJk:o=mUGMr%9 Wi$ ߦQ*`Hڲaϩq䰱*I:GͽÛ8N32H32YIyBlA wMsˣm,)cKq3b` },un~NS+yϘd˦ɐ"]Z2_Z$ʦI5uq~thC+vM.ڟѮuxuy1;Qq*Fu>+\6rcGs -]Jwk5.w?.pF6e!aO[A7y>UbEW>lg1qhC1c T?ovg 3|'3T~4dϖޥmanEVy;id>Oy65X֡$$Up;Ri>!qXSIŗXNS!cƉm+Svog?˝N3_\yfʍy|2J'Ҿ];Tm|'K$3˓?V2,egmʯ IpòE-+>L މCk:NVV֖sq܆ICyA'K]td=$[nk=ōQan~=P.URY=âlLch&\VI6k&|Oq=|(q,'͸3/:/ڢm&jrq^R|hU)eE{e a鲤]JS-wSm58S^3.>3t_lBd>ey WG7 %3.?)&K \o. M-\[V|7xߎ<3[I~ø;Fknۭ?`xwpv|kĎr`ǸM.+Muj'~1r5ɇ2υ,kl7ŒmxZO|sYĖpg 8pXPa~V=_1/,g(\|<FX[sӷd9s92c\?wMNg=qq}xeh ,̈>+HI uKծ6̮LY8][sMwǔٹ.{'~NR0{5]/\x#p0` IHKQcڵKcɋ4\0D꿀j]-64Bbܥn#U^o˷5Gvq${+nM+zV@04RUV$*32GH?ӴwyW7fyx:7$ݟټ$Xm.s˟9"p2 YDL!o~տOdisÅh={c]ĞK[~fk2șq &b^QU LcLUh$+ eNUm2vYyH4҂ Bzy=[].ܿIGWi\arX2ep4M g9_nc>mɜf<&I&mG]4s"π,Rs7/lX <$R$=,u?[f͖08?E~SX9G 'L5] Ԛ\𩥷|gxrawث:zy,NCLJG1/<՗>d&& ovС< "4Wڡr?3[ > KCFf#뤞^6K/H!ֲcП oL {-elP"Ty)֔ަYe1eb?fW WN3+p~6#&c7X>:yДHěDa./ծk Tǃ7?O%)HcTshiʍmY1i[&#W_l>To8ttOsX9UqbE/tw>4їv^ %'|w! 間b);m ;66q #Ţp= yiY՘%qӀN _k!g ! m.ڪrvk,k-/rf>{͝f)=v_ƽ|+nKuO&/&G 2ȸk2PLػ^ԶnlFpG&)IeSMcD7]{єy'iqoY%lxʈFʬ?H,!s\n*I' 7S<4ėP7Ңo*PE9vmFȉsjПlToGj&FuL5rJ3!!n7wF7r 8gT?Y1 MU̅%b: A5ʹ9d![kJEOYNGN9̅v}5(쟖>mc|ӑe#F< ő &mW ׭c+I ,=C22g\BH} jW6l*0yl|4GvLF"@xdkp|aXݕaVK7a~o'NvO h^aPْWF,ڂV-{1>̑Ga8bq 'y4ҵ}d?er9b*42]!{m2o!Yk,{QѰy]^Md,l Js7!%K@O刮ѵ\58HxqpN.,`9JQ3Nk!<~q'H.:5Nk훏㣟%S0wߘwŎ3_8grܴylSdbbW?OB(m1s~)>7L\賢BHo /&}hgs|yDŽf"8t250m.;u>grY龼~1' 㜿Ē^+.a\=,\m`gmYcdT9IFQz=mbY<|VunK)Hq̒e _ݭOeZ[Gh7pxA?uoL)K=6 |{䜤Ma)Ypy! KS!^ϯ UxsV9$M xV{r,',ts|DrNzH qsyh!bFƄ{$6e"c8.e?s0#9DM&;F#zswyWωy1 $rV@hG}J)g 9h21 N7}wLe;؍&,Gi⠋<=,K663\Hzi64/ȾS3cIcY+;\ŋhYJֺ.1.sm#dM)˜4A-)(oʶ֪Lxeُ8|sNdn^SnlJ_/ٍ2,]R4q`ԦZ_eA ̆HbTM[i +.͙}|͖8;-̞X7!GA~Ok rXkFO!uq=X#uصں&l q}093$(ǔm tG+u.ssU݁&ukkKbM_uFvRbcڼ4p`ĎWcq}5%FtSYk#'|VǃQFF;IOQ][ufxv^x?bdHQ:2:ҰMǯso!^+22[Ďnڏ/oT[G6y3?VA$t(0U>ޯf;Khq1  V<&3 pf-oUƻ:~U/%>Y~,ScHÅVk-/u1s2mey)dJ|uRL ,G7ֹq;yN{\Y9|>NS ~?XpK{Ke ䷹): g׶{.O__N?H2bLlXI`U|6[coMzmv^#wž&~Lw7#ڌof;6 /g)b'37b}74iW{ZrP!'t]x.x['7N^#go*E[Gw4|*}"K" ,ؖEee̶a&ߋAc@0EذZI1~lO:Iナ 2@oU#MunqGwȔU~'~Ϗ2>=NMY8Z.֋ٔ358yI $}K6bcY6EFV_bk5ƸKxoƑ蝞V&|yc<$cFٟaY[XzGv302P)<|H_l3_:s3 d۝X8o]n_/AG2=WuDŽsg{|p9Kߋ|C&#&G#'(h*LWҳy0x)%XʐߒCJwlF<9\728ldI\ر0^x] _Gzw4߫l*1}G222,VD #%4D@6c7322͇2hDYvR<@zXSI>@*bfb㑊D2 3 yXz"C?-l ٻ"2 M6vֶIݟ >+Ȩ>4JQP|[C1vcr+!e&swM^'c|Y9'c>D`"a7ugMqOw43>??rr%8 v6[=5!%I͉D2ǡ@k/]d˘B>\3lVY!rKa?]=vX.\E7M5-޷-LO 䝥ȓ3 ',@ѦȝvϏ,6"26|)L$Fc"${6=͸L8L5^#6DRo"(ݡXZhL[ T'rqq$vXFL;2bڔ|-_xNDxɺHT[Z43 \/3rrÓ<.WJR,NğڂOr"GP,]8|Z`dary@G8ϒg.{ugΙg뙖A Kmz]Dr#TƄtCׯklEo;n .v.!ĕSIi-q%E}_^>TE$AS7k׶|qt5c@c!Uk]:.rE碑<̰!U[#N)mH#rCǓ5НKv5dLI9=n??vdȋ*(lh$袺čn]6FƐI2qSOmrh]rZ3MipŸ{k淖:NyxZῷ9p28\k>9*:륚Z+|9p2p Ldp{qáXݚǁnarl \W1HAhG]M[<~ng%|lljS{Mg~K eb1ZE6kxKmH_'y .\2Sm+_z[N&6Dv4@{mr9N3R5#F?үZ]jp=I؊ϟe|s_'0f1d F;gKrSaƘR h.iXJ͔yIq~eAY`<+,U}Ȓ30!ڞe`)/%M}rR%L ;m^oO1hK`H10_-tOͰ8ˑ>zI>z<#䡏Urv\H$[E mķrE֑;s2>;G8#ri5clEU.Z%[,ߨR4CrYx~Ӄ!'$^*]-?5cFzB1ƬnE =g\̀K"ΏXSHץ=dyec̍ɕXI,PGI$\@qmræֻcny P# O<@ۻ—woFO+Mˠ1)`EI22 TjW-uYgVI\B|c/_; u=ȊcEo(JqtVCԽ~vy??+3l~[IJ$6fS^I]g/ڇ' ۾10n$cM$Q炛zſ2 gIʄ@H][o(7ar-%X̅`rY;)kN9.W~?1R`v>9T7ഄ2^&"雚Esp۹ynK*A( D[f.uRa`F")gXXmڊ46̹Kɻ ~.NH cY~]ҖF~>f]`bB c v\q;1=jsソ\NEx2W/t؅&>_c'&%2V)e6u܇-AY]r$x7ˋQ¤dmb^+Zv_?0q!C^Lp!%ȕ4"eU`něUߑd2y+<񘷒&v,EǤzy[?3q# O `ë^v5ĥ{3l&x>&xˏ6qEٓ#;ݭ16qfg+&=e ~?*}C+3-w(7)mq~W=ُ?E~׍Ú9w(- [Amk}xuM9Il5]N ]VR&> @!ؾbɽI?K^xɆ|I:7[@Nm.3ȧ!(ݽ5Azާ~9]|b(,lcⵎ2!êcKroWv*.0\rX隼ǖI`=+Ց2\al+sXߣϵb,XET2=c2N/I]2~`Q8sx-"rb}oY^0&5K)nڵvrS LܬYTSt|/;ʘM#D/hfR1?S5ǃouX<\d2W5#{{pv2dԙn yVD\BIrb/JS}>Noks+*~s##/>&[^1gsC/,"Ď>G3fdC Pnŋhzֳl*qcp8rd.LY9Uti8اјQ&ycmO'91eCXm{ƪmMǖ9QLj\l\Ӱ/n*m?1|J͑6"J]q0ON_LJę%Q*Nӯ++'qy /&(3en/".rfVФoI/O$\,Qe$KZD`'–ֳ1,ě)3%gi6j+t7;6>V8Ey&Xay |tr0are$6]+<#[1ʱ|LN1g hfrEOM FUeLÇÇe`Z -4;*Ar ?ZÇe;7-+ mҧrZp/(ØRgy?Nncgvxg߅>Aƪ@r1XcDI`;ܨ ׭-Þ>33a<"4b2-w31ퟋ. 3EgU^J \|dFfy1ʸf! ?/bLqpcFUPS*fK^+lMY` 6+vV\6ל\b2hYVڭn/Ysq$bؘ9g)Uwݧb[3eё3[2l24A;}ٖO"1\ \e@wHz׭\ca16p W*nFml0CLY12]\Y}kU~>##䛕s>6Fв: n2 NxH&O,}1q td)a?\"ͣ\FkTmVx-3/o'\|HǷTY17a#s~kS <;Ƙž}d>k޽= Nבs']1-FQPh*nB!X1Vm+ .jy˟1°É'˚ZVijة1eW- |yܾA?O $/@mrk9]]OY9,O||O?E$O[ppӭk6뮛cJ&*XpY98XSR庲K$J-ʸ?y6:]͌\J%ɕ%y~2 n9Hl\u2+L츎aI) 6#{k^ol\|'|\A ſJ%,X/ $hIZtlDmꦑN m1oU>u:|%2$k .:m&JSiFH /k 77gz&r{# f௱ aH^IY{MCtgcխO^>1~"9)Ņ1dDW!!Tba]S^U鋥`3sPA .D6CKW]/0TlQq>sw^p#ˑxt\;ω+рbr=v~$sҩ0ŔG7p}z?z˷u"YJ5Fv_ oj1ZfnM8U.YDB˼A+|msUL :4)uveHd'l(>z s񂹓62c7g1#&(\ .JۿSc=&sٟK<N2-y-Zmj埄uqg/̸>LI41rP1`4xUKx\[rv˟7% jؑb*I#.C#t'diٌI~)Ly?f+j2bI3(gt%f>tgǖYeƍxpXA1:n|_-eL٢},'X_F`9#.J2:K)^bnC'V\|מaw#J}Og-?P^Op8k?%g^9mbapQ=n-eýdk/L1ʟJ8JJ?5il㱆_3Qb J*Fs͸Nw20Pn*p5d1$jsn Ӝ8sqn,mT*mÂHR奚ϻ8YǐȔ9(^RB'e#G?ɠ2_ԘLm,`bӛHw/ø/ &ggH!O~H,QdJߧ=W׽j9^6( Yc]N~o**S gsR00c2cBTy?.܁֖ mf5~rfg6 d =ќ5m1"9^W݃ lC4QC1!}3J ַm5xLBgˌ% 6%QHBӚ}vo$oL"y!BQ1[R`mesdls`WPX{?1Qm 482o΅OHtLVRխf[60^y7y`Y1",ʠ2m/$@H!okMGڪgß6r8ȓ>cGiq q[l&\J8nD#ޣ8U8[#{G%[[DYr]w͵0-'8EBy/wuP$n+<%4=̹M+R[Z+5OpIQ3i,lpyIt*ƣ?6p^^ŒؑeKDĥ [6^+;s3 bD`hGHfrGcf>4Sf~<ۂ듶b&rr`: Kʟ)-wCI>cW-L1;YAbNRμy2.H2coTP|u1q{ɿO;8`ʾX[^g~߆>bo`E&VH\PUvG\i+rqȐaGxm7SڐOje[ǓCK&WT)a[UNiu>岱p!-S+ԟ.fz-k ;ʉrlĬ ί}6Y"^_0ō~(:4ڹ[TBS037)f骖-sNs϶|IAǴBHZ@~νoZ8$dX/;نT^l`?N,m]<\4b{Eڶk=i?&dCssewAj'ϕm4y&i|,(Dj[iaJo G=ǜٙjIcm@ .i>.*aQ4$@ R.O4%> 3 `n[4AuO f၇oq1q7$I ;ꤷKT vײGqBR G@||ꦶOY\{N;(A\}N|_#&,3,#4{{mda+_&?͌f HAҡrOΠTZKM{_pѷ6QJ5V>}.Z9.,{L[oPO_qu3'1b˔q1-!D˟YBװhHVidr^U({֭%Vq(8L|%$e,h]#FJvn$sMFDC$&,j0Y8n!Û*S4'N5y.cb<N&Q5_/HS(>,Q^4WFպ\21> 8ˁCH!{0=Hn[p5s\aqN\W1?7k9^ޭ|_fE*ērfLA;vi63w#Zr]ry8\>;|Hy3Hğn# T_4s~9\xaň4N#HcO ;[J3UqRa.T˯;YNn ag#[#;7ݞ1Q Dް0Zۆ,L32<"(ш@H]2k}=y-N+8cp>ëIJ0.ڻk#[o72mEȳzumkG+|'' aXvou#Lɋ%+߈c_ X);@&H4?#ZLWvA7Ʀզs&=6!y/ @ܕ6դ~Y$ryE^BLrFFZd ^#ɷz˳nxk%0qW)-9'r$_H, ߹6ed4$b2Rr\j#Ě.Oȼ+\m[߆hWV99-s^O!UAKEh\Ӹ8q*I hIT5b3>O%H ; 5~M|skrrrݽɲ&Fb-h:W}7&NRy@m;]>FyT\2ۑ@ s^~i0ϫ,m}Ab.4bA\l5UBNޭKo%wrRcb䭃M6!!|(]g%`)copDٹbOCGna#Rayv[_/1+򆾻OYFX|l\+3G Rlj Z͑ۏRqn_~LZH3Midiloʅ>; 1>I>@,: #LWrg,s#Ȗ$#uqigoqٙ~ab!I>\XY9X['ޖeVdMtk e"ɕ2ʧp]<#i.5䃐˕FTrIS ab.,M<A <ش\M#GB]ֹḳϙ`(_FEW6x#wѣ76%No|-;#y1+h  Llas ʦ,s ň?6.k]cmf~01Sرf>Mr\g? R4 &i{&NbQ!Xy3H+4da\OY]vB?r-:u?Lh"hp8H [ U5kis)/y]/ju=3xiqp ~WaD7޹ '), // Variables for cached values or use across multiple functions settings, interfaceHeight, interfaceWidth, loadedHeight, loadedWidth, element, index, photo, open, active, closing, loadingTimer, publicMethod, div = "div", className, requests = 0, previousCSS = {}, init; // **************** // HELPER FUNCTIONS // **************** // Convenience function for creating new jQuery objects function $tag(tag, id, css) { var element = document.createElement(tag); if (id) { element.id = prefix + id; } if (css) { element.style.cssText = css; } return $(element); } // Get the window height using innerHeight when available to avoid an issue with iOS // http://bugs.jquery.com/ticket/6724 function winheight() { return window.innerHeight ? window.innerHeight : $(window).height(); } // Determine the next and previous members in a group. function getIndex(increment) { var max = $related.length, newIndex = (index + increment) % max; return (newIndex < 0) ? max + newIndex : newIndex; } // Convert '%' and 'px' values to integers function setSize(size, dimension) { return Math.round((/%/.test(size) ? ((dimension === 'x' ? $window.width() : winheight()) / 100) : 1) * parseInt(size, 10)); } // Checks an href to see if it is a photo. // There is a force photo option (photo: true) for hrefs that cannot be matched by the regex. function isImage(settings, url) { return settings.photo || settings.photoRegex.test(url); } function retinaUrl(settings, url) { return settings.retinaUrl && window.devicePixelRatio > 1 ? url.replace(settings.photoRegex, settings.retinaSuffix) : url; } function trapFocus(e) { if ('contains' in $box[0] && !$box[0].contains(e.target)) { e.stopPropagation(); $box.focus(); } } // Assigns function results to their respective properties function makeSettings() { var i, data = $.data(element, colorbox); if (data == null) { settings = $.extend({}, defaults); if (console && console.log) { console.log('Error: cboxElement missing settings object'); } } else { settings = $.extend({}, data); } for (i in settings) { if ($.isFunction(settings[i]) && i.slice(0, 2) !== 'on') { // checks to make sure the function isn't one of the callbacks, they will be handled at the appropriate time. settings[i] = settings[i].call(element); } } settings.rel = settings.rel || element.rel || $(element).data('rel') || 'nofollow'; settings.href = settings.href || $(element).attr('href'); settings.title = settings.title || element.title; if (typeof settings.href === "string") { settings.href = $.trim(settings.href); } } function trigger(event, callback) { // for external use $(document).trigger(event); // for internal use $events.trigger(event); if ($.isFunction(callback)) { callback.call(element); } } var slideshow = (function(){ var active, className = prefix + "Slideshow_", click = "click." + prefix, timeOut; function clear () { clearTimeout(timeOut); } function set() { if (settings.loop || $related[index + 1]) { clear(); timeOut = setTimeout(publicMethod.next, settings.slideshowSpeed); } } function start() { $slideshow .html(settings.slideshowStop) .unbind(click) .one(click, stop); $events .bind(event_complete, set) .bind(event_load, clear); $box.removeClass(className + "off").addClass(className + "on"); } function stop() { clear(); $events .unbind(event_complete, set) .unbind(event_load, clear); $slideshow .html(settings.slideshowStart) .unbind(click) .one(click, function () { publicMethod.next(); start(); }); $box.removeClass(className + "on").addClass(className + "off"); } function reset() { active = false; $slideshow.hide(); clear(); $events .unbind(event_complete, set) .unbind(event_load, clear); $box.removeClass(className + "off " + className + "on"); } return function(){ if (active) { if (!settings.slideshow) { $events.unbind(event_cleanup, reset); reset(); } } else { if (settings.slideshow && $related[1]) { active = true; $events.one(event_cleanup, reset); if (settings.slideshowAuto) { start(); } else { stop(); } $slideshow.show(); } } }; }()); function launch(target) { if (!closing) { element = target; makeSettings(); $related = $(element); index = 0; if (settings.rel !== 'nofollow') { $related = $('.' + boxElement).filter(function () { var data = $.data(this, colorbox), relRelated; if (data) { relRelated = $(this).data('rel') || data.rel || this.rel; } return (relRelated === settings.rel); }); index = $related.index(element); // Check direct calls to Colorbox. if (index === -1) { $related = $related.add(element); index = $related.length - 1; } } $overlay.css({ opacity: parseFloat(settings.opacity), cursor: settings.overlayClose ? "pointer" : "auto", visibility: 'visible' }).show(); if (className) { $box.add($overlay).removeClass(className); } if (settings.className) { $box.add($overlay).addClass(settings.className); } className = settings.className; if (settings.closeButton) { $close.html(settings.close).appendTo($content); } else { $close.appendTo('

 
assets/plugins/jQuery-File-Upload/cors/result.html000064400000001031152510437640016261 0ustar00 jQuery Iframe Transport Plugin Redirect Page assets/plugins/jQuery-File-Upload/cors/postmessage.html000064400000004001152510437640017275 0ustar00 jQuery File Upload Plugin postMessage API assets/plugins/jQuery-File-Upload/blueimp-file-upload.jquery.json000064400000002743152510437640021167 0ustar00{ "name": "blueimp-file-upload", "version": "8.8.5", "title": "jQuery File Upload", "author": { "name": "Sebastian Tschan", "url": "https://blueimp.net" }, "licenses": [ { "type": "MIT", "url": "http://www.opensource.org/licenses/MIT" } ], "dependencies": { "jquery": ">=1.6" }, "description": "File Upload widget with multiple file selection, drag&drop support, progress bar, validation and preview images, audio and video for jQuery. Supports cross-domain, chunked and resumable file uploads. Works with any server-side platform (Google App Engine, PHP, Python, Ruby on Rails, Java, etc.) that supports standard HTML form file uploads.", "keywords": [ "jquery", "file", "upload", "widget", "multiple", "selection", "drag", "drop", "progress", "preview", "cross-domain", "cross-site", "chunk", "resume", "gae", "go", "python", "php", "bootstrap" ], "homepage": "https://github.com/blueimp/jQuery-File-Upload", "docs": "https://github.com/blueimp/jQuery-File-Upload/wiki", "demo": "http://blueimp.github.io/jQuery-File-Upload/", "bugs": "https://github.com/blueimp/jQuery-File-Upload/issues", "maintainers": [ { "name": "Sebastian Tschan", "url": "https://blueimp.net" } ] } assets/plugins/jQuery-File-Upload/index.html000064400000031550152510437640015115 0ustar00 jQuery File Upload Demo

jQuery File Upload Demo

Basic Plus UI version


File Upload widget with multiple file selection, drag&drop support, progress bars, validation and preview images, audio and video for jQuery.
Supports cross-domain, chunked and resumable file uploads and client-side image resizing.
Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads.


Add files...
 

Demo Notes

  • The maximum file size for uploads in this demo is 5 MB (default file size is unlimited).
  • Only image files (JPG, GIF, PNG) are allowed in this demo (by default there is no file type restriction).
  • Uploaded files will be deleted automatically after 5 minutes (demo setting).
  • You can drag & drop files from your desktop on this webpage (see Browser support).
  • Please refer to the project website and documentation for more information.
  • Built with Twitter's Bootstrap CSS framework and Icons from Glyphicons.
assets/plugins/jQuery-File-Upload/CONTRIBUTING.md000064400000005034152510437640015347 0ustar00# Issue Guidelines The issues tracker should only be used for **bugs** or **feature requests**. Please post **support requests** and **general discussions** about this project to the [support forum](https://groups.google.com/d/forum/jquery-fileupload). ## Bugs Please follow these guidelines before reporting a bug: 1. **Update to the latest version** — Check if you can reproduce the issue with the latest version from the `master` branch. 2. **Use the GitHub issue search** — check if the issue has already been reported. If it has been, please comment on the existing issue. 3. **Isolate the demonstrable problem** — Try to reproduce the problem with the [Demo](http://blueimp.github.io/jQuery-File-Upload/) or with a reduced test case that includes the least amount of code necessary to reproduce the problem. 4. **Provide a means to reproduce the problem** — Please provide as much details as possible, e.g. server information, browser and operating system versions, steps to reproduce the problem. If possible, provide a link to your reduced test case, e.g. via [JSFiddle](http://jsfiddle.net/). ## Feature requests Please follow the bug guidelines above for feature requests, i.e. update to the latest version and search for exising issues before posting a new request. Generally, feature requests might be accepted if the implementation would benefit a broader use case or the project could be considered incomplete without that feature. If you need help integrating this project into another framework, please post your request to the [support forum](https://groups.google.com/d/forum/jquery-fileupload). ## Pull requests [Pull requests](https://help.github.com/articles/using-pull-requests) are welcome and the preferred way of accepting code contributions. However, if you add a server-side upload handler implementation for another framework, please continue to maintain this version in your own fork without sending a pull request. You are welcome to add a link and possibly documentation about your implementation to the [Wiki](https://github.com/blueimp/jQuery-File-Upload/wiki). Please follow these guidelines before sending a pull request: 1. Update your fork to the latest upstream version. 2. Follow the coding conventions of the original repository. Changes to one of the JavaScript source files are required to pass the [JSLint](http://jslint.com/) validation tool. 3. Keep your commits as atomar as possible, i.e. create a new commit for every single bug fix or feature added. 4. Always add meaningfull commit messages. assets/plugins/jQuery-File-Upload/basic.html000064400000015011152510437640015061 0ustar00 jQuery File Upload Demo - Basic version

jQuery File Upload Demo

Basic version


File Upload widget with multiple file selection, drag&drop support and progress bar for jQuery.
Supports cross-domain, chunked and resumable file uploads.
Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads.


Select files...


Demo Notes

  • The maximum file size for uploads in this demo is 5 MB (default file size is unlimited).
  • Only image files (JPG, GIF, PNG) are allowed in this demo (by default there is no file type restriction).
  • Uploaded files will be deleted automatically after 5 minutes (demo setting).
  • You can drag & drop files from your desktop on this webpage (see Browser support).
  • Please refer to the project website and documentation for more information.
  • Built with Twitter's Bootstrap CSS framework and Icons from Glyphicons.
assets/plugins/jQuery-File-Upload/.gitignore000064400000000035152510437640015102 0ustar00.DS_Store *.pyc node_modules assets/plugins/ladda-bootstrap/css/prism.css000064400000003600152510437640015251 0ustar00/** * prism.js default theme for JavaScript, CSS and HTML * Based on dabblet (http://dabblet.com) * @author Lea Verou */ code[class*="language-"], pre[class*="language-"] { color: black; text-shadow: 0 1px white; font-family: Consolas, Monaco, 'Andale Mono', monospace; direction: ltr; text-align: left; white-space: pre; word-spacing: normal; -moz-tab-size: 4; -o-tab-size: 4; tab-size: 4; -webkit-hyphens: none; -moz-hyphens: none; -ms-hyphens: none; hyphens: none; } pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { text-shadow: none; background: #b3d4fc; } pre[class*="language-"]::selection, pre[class*="language-"] ::selection, code[class*="language-"]::selection, code[class*="language-"] ::selection { text-shadow: none; background: #b3d4fc; } @media print { code[class*="language-"], pre[class*="language-"] { text-shadow: none; } } /* Code blocks */ pre[class*="language-"] { padding: 1em; margin: .5em 0; overflow: auto; } :not(pre) > code[class*="language-"], pre[class*="language-"] { background: #f5f2f0; } /* Inline code */ :not(pre) > code[class*="language-"] { padding: .1em; border-radius: .3em; } .token.comment, .token.prolog, .token.doctype, .token.cdata { color: slategray; } .token.punctuation { color: #999; } .namespace { opacity: .7; } .token.property, .token.tag, .token.boolean, .token.number { color: #905; } .token.selector, .token.attr-name, .token.string { color: #690; } .token.operator, .token.entity, .token.url, .language-css .token.string, .style .token.string { color: #a67f59; background: hsla(0,0%,100%,.5); } .token.atrule, .token.attr-value, .token.keyword { color: #07a; } .token.regex, .token.important { color: #e90; } .token.important { font-weight: bold; } .token.entity { cursor: help; } assets/plugins/ladda-bootstrap/css/ladda-theme.scss000064400000002416152510437640016453 0ustar00/** Contains the default Ladda button theme styles */ /************************************* * CONFIG */ $green: #2aca76; $blue: #53b5e6; $red: #ea8557; $purple: #9973C2; $mint: #16a085; /************************************* * BUTTON THEME */ .ladda-button { background: #666; border: 0; padding: 14px 18px; font-size: 18px; cursor: pointer; color: #fff; border-radius: 2px; border: 1px solid transparent; -webkit-appearance: none; -webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); &:hover { border-color: rgba( 0, 0, 0, 0.07 ); background-color: #888; } @include buttonColor( 'green', $green ); @include buttonColor( 'blue', $blue ); @include buttonColor( 'red', $red ); @include buttonColor( 'purple', $purple ); @include buttonColor( 'mint', $mint ); &[disabled], &[data-loading] { border-color: rgba( 0, 0, 0, 0.07 ); cursor: default; background-color: #999; &:hover { cursor: default; background-color: #999; } } &[data-size=xs] { padding: 4px 8px; .ladda-label { font-size: 0.7em; } } &[data-size=s] { padding: 6px 10px; .ladda-label { font-size: 0.9em; } } &[data-size=l] .ladda-label { font-size: 1.2em; } &[data-size=xl] .ladda-label { font-size: 1.5em; } }assets/plugins/ladda-bootstrap/css/ladda.scss000064400000017113152510437640015353 0ustar00/*! * Ladda * http://lab.hakim.se/ladda * MIT licensed * * Copyright (C) 2013 Hakim El Hattab, http://hakim.se */ /************************************* * CONFIG */ $spinnerSize: 32px; /************************************* * MIXINS */ @mixin prefix ( $property, $value ) { -webkit-#{$property}: $value; -moz-#{$property}: $value; -ms-#{$property}: $value; -o-#{$property}: $value; #{$property}: $value; } @mixin transition( $value ) { -webkit-transition: $value !important; // important to override bootstrap -moz-transition: $value !important; -ms-transition: $value !important; -o-transition: $value !important; transition: $value !important; } @mixin transform( $value ) { @include prefix( transform, $value ); } @mixin transform-origin( $value ) { @include prefix( transform-origin, $value ); } @mixin buttonColor( $name, $color ) { &[data-color=#{$name}] { background: $color; &:hover { background-color: lighten( $color, 5% ); } } } /************************************* * BUTTON BASE */ .ladda-button { position: relative; } /* Spinner animation */ .ladda-button .ladda-spinner { position: absolute; z-index: 2; display: inline-block; width: $spinnerSize; height: $spinnerSize; top: 50%; margin-top: -$spinnerSize/2; opacity: 0; pointer-events: none; } /* Button label */ .ladda-button .ladda-label { position: relative; z-index: 3; } /* Progress bar */ .ladda-button .ladda-progress { position: absolute; width: 0; height: 100%; left: 0; top: 0; background: rgba( 0, 0, 0, 0.2 ); visibility: hidden; opacity: 0; @include transition( 0.1s linear all ); } .ladda-button[data-loading] .ladda-progress { opacity: 1; visibility: visible; } /************************************* * EASING */ .ladda-button, .ladda-button .ladda-spinner, .ladda-button .ladda-label { @include transition( 0.3s cubic-bezier(0.175, 0.885, 0.320, 1.275) all ); } .ladda-button[data-style=zoom-in], .ladda-button[data-style=zoom-in] .ladda-spinner, .ladda-button[data-style=zoom-in] .ladda-label, .ladda-button[data-style=zoom-out], .ladda-button[data-style=zoom-out] .ladda-spinner, .ladda-button[data-style=zoom-out] .ladda-label { @include transition( 0.3s ease all ); } /************************************* * EXPAND LEFT */ .ladda-button[data-style=expand-right] { .ladda-spinner { right: 14px; } &[data-size="s"] .ladda-spinner, &[data-size="xs"] .ladda-spinner { right: 4px; } &[data-loading] { padding-right: 56px; .ladda-spinner { opacity: 1; } &[data-size="s"], &[data-size="xs"] { padding-right: 40px; } } } /************************************* * EXPAND RIGHT */ .ladda-button[data-style=expand-left] { .ladda-spinner { left: 14px; } &[data-size="s"] .ladda-spinner, &[data-size="xs"] .ladda-spinner { left: 4px; } &[data-loading] { padding-left: 56px; .ladda-spinner { opacity: 1; } &[data-size="s"], &[data-size="xs"] { padding-left: 40px; } } } /************************************* * EXPAND UP */ .ladda-button[data-style=expand-up] { overflow: hidden; .ladda-spinner { top: -$spinnerSize; left: 50%; margin-left: -$spinnerSize/2; } &[data-loading] { padding-top: 54px; .ladda-spinner { opacity: 1; top: 14px; margin-top: 0; } &[data-size="s"], &[data-size="xs"] { padding-top: 32px; .ladda-spinner { top: 4px; } } } } /************************************* * EXPAND DOWN */ .ladda-button[data-style=expand-down] { overflow: hidden; .ladda-spinner { top: 62px; left: 50%; margin-left: -$spinnerSize/2; } &[data-size="s"] .ladda-spinner, &[data-size="xs"] .ladda-spinner { top: 40px; } &[data-loading] { padding-bottom: 54px; .ladda-spinner { opacity: 1; } &[data-size="s"], &[data-size="xs"] { padding-bottom: 32px; } } } /************************************* * SLIDE LEFT */ .ladda-button[data-style=slide-left] { overflow: hidden; .ladda-label { position: relative; } .ladda-spinner { left: 100%; margin-left: -$spinnerSize/2; } &[data-loading] { .ladda-label { opacity: 0; left: -100%; } .ladda-spinner { opacity: 1; left: 50%; } } } /************************************* * SLIDE RIGHT */ .ladda-button[data-style=slide-right] { overflow: hidden; .ladda-label { position: relative; } .ladda-spinner { right: 100%; margin-left: -$spinnerSize/2; } &[data-loading] { .ladda-label { opacity: 0; left: 100%; } .ladda-spinner { opacity: 1; left: 50%; } } } /************************************* * SLIDE UP */ .ladda-button[data-style=slide-up] { overflow: hidden; .ladda-label { position: relative; } .ladda-spinner { left: 50%; margin-left: -$spinnerSize/2; margin-top: 1em; } &[data-loading] { .ladda-label { opacity: 0; top: -1em; } .ladda-spinner { opacity: 1; margin-top: -$spinnerSize/2; } } } /************************************* * SLIDE DOWN */ .ladda-button[data-style=slide-down] { overflow: hidden; .ladda-label { position: relative; } .ladda-spinner { left: 50%; margin-left: -$spinnerSize/2; margin-top: -2em; } &[data-loading] { .ladda-label { opacity: 0; top: 1em; } .ladda-spinner { opacity: 1; margin-top: -$spinnerSize/2; } } } /************************************* * ZOOM-OUT */ .ladda-button[data-style=zoom-out] { overflow: hidden; } .ladda-button[data-style=zoom-out] .ladda-spinner { left: 50%; margin-left: -$spinnerSize/2; @include transform( scale( 2.5 ) ); } .ladda-button[data-style=zoom-out] .ladda-label { position: relative; display: inline-block; } .ladda-button[data-style=zoom-out][data-loading] .ladda-label { opacity: 0; @include transform( scale( 0.5 ) ); } .ladda-button[data-style=zoom-out][data-loading] .ladda-spinner { opacity: 1; @include transform( none ); } /************************************* * ZOOM-IN */ .ladda-button[data-style=zoom-in] { overflow: hidden; } .ladda-button[data-style=zoom-in] .ladda-spinner { left: 50%; margin-left: -$spinnerSize/2; @include transform( scale( 0.2 ) ); } .ladda-button[data-style=zoom-in] .ladda-label { position: relative; display: inline-block; } .ladda-button[data-style=zoom-in][data-loading] .ladda-label { opacity: 0; @include transform( scale( 2.2 ) ); } .ladda-button[data-style=zoom-in][data-loading] .ladda-spinner { opacity: 1; @include transform( none ); } /************************************* * CONTRACT */ .ladda-button[data-style=contract] { overflow: hidden; width: 100px; } .ladda-button[data-style=contract] .ladda-spinner { left: 50%; margin-left: -16px; } .ladda-button[data-style=contract][data-loading] { border-radius: 50%; width: 52px; } .ladda-button[data-style=contract][data-loading] .ladda-label { opacity: 0; } .ladda-button[data-style=contract][data-loading] .ladda-spinner { opacity: 1; } /************************************* * OVERLAY */ .ladda-button[data-style=contract-overlay] { overflow: hidden; width: 100px; box-shadow: 0px 0px 0px 3000px rgba(0,0,0,0); } .ladda-button[data-style=contract-overlay] .ladda-spinner { left: 50%; margin-left: -16px; } .ladda-button[data-style=contract-overlay][data-loading] { border-radius: 50%; width: 52px; /*outline: 10000px solid rgba( 0, 0, 0, 0.5 );*/ box-shadow: 0px 0px 0px 3000px rgba(0,0,0,0.8); } .ladda-button[data-style=contract-overlay][data-loading] .ladda-label { opacity: 0; } .ladda-button[data-style=contract-overlay][data-loading] .ladda-spinner { opacity: 1; } assets/plugins/ladda-bootstrap/README.md000064400000004550152510437640014101 0ustar00# Ladda for Bootstrap 3 Buttons with built-in loading indicators, effectively bridging the gap between action and feedback. [Check out the demo page](http://msurguy.github.io/ladda-bootstrap/). ## Instructions Please see the demo page for the details: (http://msurguy.github.io/ladda-bootstrap/). #### HTML Ladda buttons must be given the class ```ladda-button``` and the button label needs to have the ```ladda-label``` class. The ```ladda-label``` will be automatically created if it does not exist in the DOM. Below is an example of a button which will use the expand-right animation style. ```html ``` Buttons accepts three attributes: - **data-style**: one of the button styles, full list in [demo](http://lab.hakim.se/ladda/) *[required]* - **data-color**: green/red/blue/purple/mint - **data-size**: xs/s/l/xl, defaults to medium - **data-spinner-size**: 40, pixel dimensions of spinner, defaults to dynamic size based on the button height - **data-spinner-color**: A hex code or any [named CSS color](http://css-tricks.com/snippets/css/named-colors-and-hex-equivalents/). #### JavaScript If you will be using the loading animation for a form that is submitted to the server (always resulting in a page reload) you can use the ```bind()``` method: ```javascript // Automatically trigger the loading animation on click Ladda.bind( 'input[type=submit]' ); // Same as the above but automatically stops after two seconds Ladda.bind( 'input[type=submit]', { timeout: 2000 } ); ``` If you want JavaScript control over your buttons you can use the following approach: ```javascript // Create a new instance of ladda for the specified button var l = Ladda.create( document.querySelector( '.my-button' ) ); // Start loading l.start(); // Will display a progress bar for 50% of the button width l.setProgress( 0.5 ); // Stop loading l.stop(); // Toggle between loading/not loading states l.toggle(); // Check the current state l.isLoading(); ``` All loading animations on the page can be stopped by using: ```javascript Ladda.stopAll(); ``` ## Browser support The project is tested in Chrome and Firefox. It Should Work™ in the current stable releases of Chrome, Firefox, Safari as well as IE9 and up. ## License MIT licensed Copyright (C) 2013 Hakim El Hattab, http://hakim.seassets/plugins/ladda-bootstrap/js/spin.js000064400000023724152510437640014551 0ustar00//fgnass.github.com/spin.js#v1.3 /*! * Copyright (c) 2011-2013 Felix Gnass * Licensed under the MIT license */ (function(root, factory) { /* CommonJS */ if (typeof exports == 'object') module.exports = factory() /* AMD module */ else if (typeof define == 'function' && define.amd) define(factory) /* Browser global */ else root.Spinner = factory() } (this, function() { "use strict"; var prefixes = ['webkit', 'Moz', 'ms', 'O'] /* Vendor prefixes */ , animations = {} /* Animation rules keyed by their name */ , useCssAnimations /* Whether to use CSS animations or setTimeout */ /** * Utility function to create elements. If no tag name is given, * a DIV is created. Optionally properties can be passed. */ function createEl(tag, prop) { var el = document.createElement(tag || 'div') , n for(n in prop) el[n] = prop[n] return el } /** * Appends children and returns the parent. */ function ins(parent /* child1, child2, ...*/) { for (var i=1, n=arguments.length; i> 1) : parseInt(o.left, 10) + mid) + 'px', top: (o.top == 'auto' ? tp.y-ep.y + (target.offsetHeight >> 1) : parseInt(o.top, 10) + mid) + 'px' }) } el.setAttribute('role', 'progressbar') self.lines(el, self.opts) if (!useCssAnimations) { // No CSS animation support, use setTimeout() instead var i = 0 , start = (o.lines - 1) * (1 - o.direction) / 2 , alpha , fps = o.fps , f = fps/o.speed , ostep = (1-o.opacity) / (f*o.trail / 100) , astep = f/o.lines ;(function anim() { i++; for (var j = 0; j < o.lines; j++) { alpha = Math.max(1 - (i + (o.lines - j) * astep) % f * ostep, o.opacity) self.opacity(el, j * o.direction + start, alpha, o) } self.timeout = self.el && setTimeout(anim, ~~(1000/fps)) })() } return self }, /** * Stops and removes the Spinner. */ stop: function() { var el = this.el if (el) { clearTimeout(this.timeout) if (el.parentNode) el.parentNode.removeChild(el) this.el = undefined } return this }, /** * Internal method that draws the individual lines. Will be overwritten * in VML fallback mode below. */ lines: function(el, o) { var i = 0 , start = (o.lines - 1) * (1 - o.direction) / 2 , seg function fill(color, shadow) { return css(createEl(), { position: 'absolute', width: (o.length+o.width) + 'px', height: o.width + 'px', background: color, boxShadow: shadow, transformOrigin: 'left', transform: 'rotate(' + ~~(360/o.lines*i+o.rotate) + 'deg) translate(' + o.radius+'px' +',0)', borderRadius: (o.corners * o.width>>1) + 'px' }) } for (; i < o.lines; i++) { seg = css(createEl(), { position: 'absolute', top: 1+~(o.width/2) + 'px', transform: o.hwaccel ? 'translate3d(0,0,0)' : '', opacity: o.opacity, animation: useCssAnimations && addAnimation(o.opacity, o.trail, start + i * o.direction, o.lines) + ' ' + 1/o.speed + 's linear infinite' }) if (o.shadow) ins(seg, css(fill('#000', '0 0 4px ' + '#000'), {top: 2+'px'})) ins(el, ins(seg, fill(o.color, '0 0 1px rgba(0,0,0,.1)'))) } return el }, /** * Internal method that adjusts the opacity of a single line. * Will be overwritten in VML fallback mode below. */ opacity: function(el, i, val) { if (i < el.childNodes.length) el.childNodes[i].style.opacity = val } }) function initVML() { /* Utility function to create a VML tag */ function vml(tag, attr) { return createEl('<' + tag + ' xmlns="urn:schemas-microsoft.com:vml" class="spin-vml">', attr) } // No CSS transforms but VML support, add a CSS rule for VML elements: sheet.addRule('.spin-vml', 'behavior:url(#default#VML)') Spinner.prototype.lines = function(el, o) { var r = o.length+o.width , s = 2*r function grp() { return css( vml('group', { coordsize: s + ' ' + s, coordorigin: -r + ' ' + -r }), { width: s, height: s } ) } var margin = -(o.width+o.length)*2 + 'px' , g = css(grp(), {position: 'absolute', top: margin, left: margin}) , i function seg(i, dx, filter) { ins(g, ins(css(grp(), {rotation: 360 / o.lines * i + 'deg', left: ~~dx}), ins(css(vml('roundrect', {arcsize: o.corners}), { width: r, height: o.width, left: o.radius, top: -o.width>>1, filter: filter }), vml('fill', {color: o.color, opacity: o.opacity}), vml('stroke', {opacity: 0}) // transparent stroke to fix color bleeding upon opacity change ) ) ) } if (o.shadow) for (i = 1; i <= o.lines; i++) seg(i, -2, 'progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)') for (i = 1; i <= o.lines; i++) seg(i) return ins(el, g) } Spinner.prototype.opacity = function(el, i, val, o) { var c = el.firstChild o = o.shadow && o.lines || 0 if (c && i+o < c.childNodes.length) { c = c.childNodes[i+o]; c = c && c.firstChild; c = c && c.firstChild if (c) c.opacity = val } } } var probe = css(createEl('group'), {behavior: 'url(#default#VML)'}) if (!vendor(probe, 'transform') && probe.adj) initVML() else useCssAnimations = vendor(probe, 'animation') return Spinner }));assets/plugins/ladda-bootstrap/js/prism.js000064400000015021152510437640014721 0ustar00/** * Prism: Lightweight, robust, elegant syntax highlighting * MIT license http://www.opensource.org/licenses/mit-license.php/ * @author Lea Verou http://lea.verou.me */(function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=self.Prism={util:{type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},clone:function(e){var n=t.util.type(e);switch(n){case"Object":var r={};for(var i in e)e.hasOwnProperty(i)&&(r[i]=t.util.clone(e[i]));return r;case"Array":return e.slice()}return e}},languages:{extend:function(e,n){var r=t.util.clone(t.languages[e]);for(var i in n)r[i]=n[i];return r},insertBefore:function(e,n,r,i){i=i||t.languages;var s=i[e],o={};for(var u in s)if(s.hasOwnProperty(u)){if(u==n)for(var a in r)r.hasOwnProperty(a)&&(o[a]=r[a]);o[u]=s[u]}return i[e]=o},DFS:function(e,n){for(var r in e){n.call(e,r,e[r]);t.util.type(e)==="Object"&&t.languages.DFS(e[r],n)}}},highlightAll:function(e,n){var r=document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code');for(var i=0,s;s=r[i++];)t.highlightElement(s,e===!0,n)},highlightElement:function(r,i,s){var o,u,a=r;while(a&&!e.test(a.className))a=a.parentNode;if(a){o=(a.className.match(e)||[,""])[1];u=t.languages[o]}if(!u)return;r.className=r.className.replace(e,"").replace(/\s+/g," ")+" language-"+o;a=r.parentNode;/pre/i.test(a.nodeName)&&(a.className=a.className.replace(e,"").replace(/\s+/g," ")+" language-"+o);var f=r.textContent;if(!f)return;f=f.replace(/&/g,"&").replace(/e.length)break e;if(p instanceof i)continue;a.lastIndex=0;var d=a.exec(p);if(d){l&&(c=d[1].length);var v=d.index-1+c,d=d[0].slice(c),m=d.length,g=v+m,y=p.slice(0,v+1),b=p.slice(g+1),w=[h,1];y&&w.push(y);var E=new i(u,f?t.tokenize(d,f):d);w.push(E);b&&w.push(b);Array.prototype.splice.apply(s,w)}}}return s},hooks:{all:{},add:function(e,n){var r=t.hooks.all;r[e]=r[e]||[];r[e].push(n)},run:function(e,n){var r=t.hooks.all[e];if(!r||!r.length)return;for(var i=0,s;s=r[i++];)s(n)}}},n=t.Token=function(e,t){this.type=e;this.content=t};n.stringify=function(e,r,i){if(typeof e=="string")return e;if(Object.prototype.toString.call(e)=="[object Array]")return e.map(function(t){return n.stringify(t,r,e)}).join("");var s={type:e.type,content:n.stringify(e.content,r,i),tag:"span",classes:["token",e.type],attributes:{},language:r,parent:i};s.type=="comment"&&(s.attributes.spellcheck="true");t.hooks.run("wrap",s);var o="";for(var u in s.attributes)o+=u+'="'+(s.attributes[u]||"")+'"';return"<"+s.tag+' class="'+s.classes.join(" ")+'" '+o+">"+s.content+""};if(!self.document){self.addEventListener("message",function(e){var n=JSON.parse(e.data),r=n.language,i=n.code;self.postMessage(JSON.stringify(t.tokenize(i,t.languages[r])));self.close()},!1);return}var r=document.getElementsByTagName("script");r=r[r.length-1];if(r){t.filename=r.src;document.addEventListener&&!r.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)}})();; Prism.languages.markup={comment:/<!--[\w\W]*?-->/g,prolog:/<\?.+?\?>/,doctype:/<!DOCTYPE.+?>/,cdata:/<!\[CDATA\[[\w\W]*?]]>/i,tag:{pattern:/<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|\w+))?\s*)*\/?>/gi,inside:{tag:{pattern:/^<\/?[\w:-]+/i,inside:{punctuation:/^<\/?/,namespace:/^[\w-]+?:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/gi,inside:{punctuation:/=|>|"/g}},punctuation:/\/?>/g,"attr-name":{pattern:/[\w:-]+/g,inside:{namespace:/^[\w-]+?:/}}}},entity:/&#?[\da-z]{1,8};/gi};Prism.hooks.add("wrap",function(e){e.type==="entity"&&(e.attributes.title=e.content.replace(/&/,"&"))});; Prism.languages.css={comment:/\/\*[\w\W]*?\*\//g,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*{))/gi,inside:{punctuation:/[;:]/g}},url:/url\((["']?).*?\1\)/gi,selector:/[^\{\}\s][^\{\};]*(?=\s*\{)/g,property:/(\b|\B)[\w-]+(?=\s*:)/ig,string:/("|')(\\?.)*?\1/g,important:/\B!important\b/gi,ignore:/&(lt|gt|amp);/gi,punctuation:/[\{\};:]/g};Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{style:{pattern:/(<|<)style[\w\W]*?(>|>)[\w\W]*?(<|<)\/style(>|>)/ig,inside:{tag:{pattern:/(<|<)style[\w\W]*?(>|>)|(<|<)\/style(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.css}}});; Prism.languages.clike={comment:{pattern:/(^|[^\\])(\/\*[\w\W]*?\*\/|(^|[^:])\/\/.*?(\r?\n|$))/g,lookbehind:!0},string:/("|')(\\?.)*?\1/g,"class-name":{pattern:/((?:(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/ig,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/g,"boolean":/\b(true|false)\b/g,"function":{pattern:/[a-z0-9_]+\(/ig,inside:{punctuation:/\(/}}, number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g,operator:/[-+]{1,2}|!|<=?|>=?|={1,3}|(&){1,2}|\|?\||\?|\*|\/|\~|\^|\%/g,ignore:/&(lt|gt|amp);/gi,punctuation:/[{}[\];(),.:]/g}; ; Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(var|let|if|else|while|do|for|return|in|instanceof|function|new|with|typeof|try|throw|catch|finally|null|break|continue)\b/g,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?|NaN|-?Infinity)\b/g});Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/g,lookbehind:!0}});Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/(<|<)script[\w\W]*?(>|>)[\w\W]*?(<|<)\/script(>|>)/ig,inside:{tag:{pattern:/(<|<)script[\w\W]*?(>|>)|(<|<)\/script(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.javascript}}}); ; assets/plugins/ladda-bootstrap/js/ladda.js000064400000014532152510437640014642 0ustar00/*! * Ladda 0.8.0 * http://lab.hakim.se/ladda * MIT licensed * * Copyright (C) 2013 Hakim El Hattab, http://hakim.se */ (function( root, factory ) { // CommonJS if( typeof exports === 'object' ) { module.exports = factory(); } // AMD module else if( typeof define === 'function' && define.amd ) { define( [ 'spin' ], factory ); } // Browser global else { root.Ladda = factory( root.Spinner ); } } (this, function( Spinner ) { 'use strict'; // All currently instantiated instances of Ladda var ALL_INSTANCES = []; /** * Creates a new instance of Ladda which wraps the * target button element. * * @return An API object that can be used to control * the loading animation state. */ function create( button ) { if( typeof button === 'undefined' ) { console.warn( "Ladda button target must be defined." ); return; } // The text contents must be wrapped in a ladda-label // element, create one if it doesn't already exist if( !button.querySelector( '.ladda-label' ) ) { button.innerHTML = ''+ button.innerHTML +''; } // Create the spinner var spinner = createSpinner( button ); // Wrapper element for the spinner var spinnerWrapper = document.createElement( 'span' ); spinnerWrapper.className = 'ladda-spinner'; button.appendChild( spinnerWrapper ); // Timer used to delay starting/stopping var timer; var instance = { /** * Enter the loading state. */ start: function() { button.setAttribute( 'disabled', '' ); button.setAttribute( 'data-loading', '' ); clearTimeout( timer ); spinner.spin( spinnerWrapper ); this.setProgress( 0 ); return this; // chain }, /** * Enter the loading state, after a delay. */ startAfter: function( delay ) { clearTimeout( timer ); timer = setTimeout( function() { instance.start(); }, delay ); return this; // chain }, /** * Exit the loading state. */ stop: function() { button.removeAttribute( 'disabled' ); button.removeAttribute( 'data-loading' ); // Kill the animation after a delay to make sure it // runs for the duration of the button transition clearTimeout( timer ); timer = setTimeout( function() { spinner.stop(); }, 1000 ); return this; // chain }, /** * Toggle the loading state on/off. */ toggle: function() { if( this.isLoading() ) { this.stop(); } else { this.start(); } return this; // chain }, /** * Sets the width of the visual progress bar inside of * this Ladda button * * @param {Number} progress in the range of 0-1 */ setProgress: function( progress ) { // Cap it progress = Math.max( Math.min( progress, 1 ), 0 ); var progressElement = button.querySelector( '.ladda-progress' ); // Remove the progress bar if we're at 0 progress if( progress === 0 && progressElement && progressElement.parentNode ) { progressElement.parentNode.removeChild( progressElement ); } else { if( !progressElement ) { progressElement = document.createElement( 'div' ); progressElement.className = 'ladda-progress'; button.appendChild( progressElement ); } progressElement.style.width = ( ( progress || 0 ) * button.offsetWidth ) + 'px'; } }, enable: function() { this.stop(); return this; // chain }, disable: function () { this.stop(); button.setAttribute( 'disabled', '' ); return this; // chain }, isLoading: function() { return button.hasAttribute( 'data-loading' ); } }; ALL_INSTANCES.push( instance ); return instance; } /** * Binds the target buttons to automatically enter the * loading state when clicked. * * @param target Either an HTML element or a CSS selector. * @param options * - timeout Number of milliseconds to wait before * automatically cancelling the animation. */ function bind( target, options ) { options = options || {}; var targets = []; if( typeof target === 'string' ) { targets = toArray( document.querySelectorAll( target ) ); } else if( typeof target === 'object' && typeof target.nodeName === 'string' ) { targets = [ target ]; } for( var i = 0, len = targets.length; i < len; i++ ) { (function() { var element = targets[i]; // Make sure we're working with a DOM element if( typeof element.addEventListener === 'function' ) { var instance = create( element ); var timeout = -1; element.addEventListener( 'click', function() { // This is asynchronous to avoid an issue where setting // the disabled attribute on the button prevents forms // from submitting instance.startAfter( 1 ); // Set a loading timeout if one is specified if( typeof options.timeout === 'number' ) { clearTimeout( timeout ); timeout = setTimeout( instance.stop, options.timeout ); } // Invoke callbacks if( typeof options.callback === 'function' ) { options.callback.apply( null, [ instance ] ); } }, false ); } })(); } } /** * Stops ALL current loading animations. */ function stopAll() { for( var i = 0, len = ALL_INSTANCES.length; i < len; i++ ) { ALL_INSTANCES[i].stop(); } } function createSpinner( button ) { var height = button.offsetHeight, spinnerColor; // If the button is tall we can afford some padding if( height > 32 ) { height *= 0.8; } // Prefer an explicit height if one is defined if( button.hasAttribute( 'data-spinner-size' ) ) { height = parseInt( button.getAttribute( 'data-spinner-size' ), 10 ); } // Allow buttons to specify the color of the spinner element if (button.hasAttribute('data-spinner-color' ) ) { spinnerColor = button.getAttribute( 'data-spinner-color' ); } var lines = 12, radius = height * 0.2, length = radius * 0.6, width = radius < 7 ? 2 : 3; return new Spinner( { color: spinnerColor || '#fff', lines: lines, radius: radius, length: length, width: width, zIndex: 'auto', top: 'auto', left: 'auto', className: '' } ); } function toArray( nodes ) { var a = []; for ( var i = 0; i < nodes.length; i++ ) { a.push( nodes[ i ] ); } return a; } // Public API return { bind: bind, create: create, stopAll: stopAll }; })); assets/plugins/ladda-bootstrap/index.html000064400000021757152510437640014627 0ustar00 Ladda for Bootstrap 3 UI

Ladda UI for Bootstrap 3

A UI concept by @hakimel which merges loading indicators into the action that invoked them. Primarily intended for use with forms where it gives users immediate feedback upon submit rather than leaving them wondering while the browser does its thing. This project is used by @hakimel slid.es and by @msurguy on the new upcoming Bootsnipp.

Demo Click the buttons to see the effect

Built-in progress bar

Sizes

Usage:


Include the CSS and Javascript for Spin.js and Ladda effect:

<link rel="stylesheet" href="dist/ladda-themeless.min.css">
<script src="dist/spin.min.js"></script>
<script src="dist/ladda.min.js"></script>

Then to produce a button with the Ladda effect:

<button class="btn btn-primary ladda-button" data-style="expand-left"><span class="ladda-label">expand-left</span></button>

Or using "a" tag:

<a href="#" class="btn btn-primary ladda-button" data-style="expand-left"><span class="ladda-label">expand-left</span></a>

You can choose the style of the effect by setting the data-style attribute:

data-style="expand-left"
data-style="expand-left"
data-style="expand-right"
data-style="expand-up"
data-style="zoom-in"
data-style="zoom-out"
data-style="slide-left"
data-style="slide-right"
data-style="slide-up"
data-style="slide-down"
data-style="contract"

You can choose the size of the spinner by setting the data-size attribute:

data-size="xs"
data-size="s"
data-size="l"						

You can choose the color of the spinner by setting the data-spinner-color attribute (HEX code):

data-spinner-color="#FF0000"

Control the UI state with Javascript:

To activate the effect you can bind Ladda to all buttons that submit a form

Ladda.bind( 'input[type=submit]' );

When using AJAX forms, you can use the following syntax:

<a href="#" id="form-submit" class="btn btn-primary btn-lg ladda-button" data-style="expand-right" data-size="l"><span class="ladda-label">Submit form</span></a>
$(function() {
	$('#form-submit').click(function(e){
	 	e.preventDefault();
	 	var l = Ladda.create(this);
	 	l.start();
	 	$.post("your-url", 
	 	    { data : data },
	 	  function(response){
	 	    console.log(response);
	 	  }, "json")
	 	.always(function() { l.stop(); });
	 	return false;
	});
});

Other methods available through Javascript

l.stop();
l.toggle();
l.isLoading();
l.setProgress( 0-1 );

Love this? Tweet it!

Original Ladda UI concept by Hakim El Hattab / @hakimel, examples adapted to work with Bootstrap 3 by @msurguy

Fork me on GitHub assets/plugins/ladda-bootstrap/params.json000064400000000352152510437640014774 0ustar00{"name":"Ladda-bootstrap","tagline":"Ladda buttons concept originally by @hakimel, example using Bootstrap 3 by @msurguy","body":"Test","google":"","note":"Don't delete this file! It's used internally to help with page regeneration."}assets/plugins/ladda-bootstrap/.DS_Store000064400000014004152510437640014300 0ustar00Bud1clboolcssdsclbooldistdsclbooljsdsclbool  @ @ @ @ EDSDB ` @ @ @assets/plugins/ladda-bootstrap/dist/ladda.min.js000064400000004724152510437640015755 0ustar00/*! * Ladda 0.8.0 (2013-09-05, 18:54) * http://lab.hakim.se/ladda * MIT licensed * * Copyright (C) 2013 Hakim El Hattab, http://hakim.se */ (function(t,e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(["spin"],e):t.Ladda=e(t.Spinner)})(this,function(t){"use strict";function e(t){if(t===void 0)return console.warn("Ladda button target must be defined."),void 0;t.querySelector(".ladda-label")||(t.innerHTML=''+t.innerHTML+"");var e=i(t),n=document.createElement("span");n.className="ladda-spinner",t.appendChild(n);var r,a={start:function(){return t.setAttribute("disabled",""),t.setAttribute("data-loading",""),clearTimeout(r),e.spin(n),this.setProgress(0),this},startAfter:function(t){return clearTimeout(r),r=setTimeout(function(){a.start()},t),this},stop:function(){return t.removeAttribute("disabled"),t.removeAttribute("data-loading"),clearTimeout(r),r=setTimeout(function(){e.stop()},1e3),this},toggle:function(){return this.isLoading()?this.stop():this.start(),this},setProgress:function(e){e=Math.max(Math.min(e,1),0);var n=t.querySelector(".ladda-progress");0===e&&n&&n.parentNode?n.parentNode.removeChild(n):(n||(n=document.createElement("div"),n.className="ladda-progress",t.appendChild(n)),n.style.width=(e||0)*t.offsetWidth+"px")},enable:function(){return this.stop(),this},disable:function(){return this.stop(),t.setAttribute("disabled",""),this},isLoading:function(){return t.hasAttribute("data-loading")}};return o.push(a),a}function n(t,n){n=n||{};var r=[];"string"==typeof t?r=a(document.querySelectorAll(t)):"object"==typeof t&&"string"==typeof t.nodeName&&(r=[t]);for(var i=0,o=r.length;o>i;i++)(function(){var t=r[i];if("function"==typeof t.addEventListener){var a=e(t),o=-1;t.addEventListener("click",function(){a.startAfter(1),"number"==typeof n.timeout&&(clearTimeout(o),o=setTimeout(a.stop,n.timeout)),"function"==typeof n.callback&&n.callback.apply(null,[a])},!1)}})()}function r(){for(var t=0,e=o.length;e>t;t++)o[t].stop()}function i(e){var n,r=e.offsetHeight;r>32&&(r*=.8),e.hasAttribute("data-spinner-size")&&(r=parseInt(e.getAttribute("data-spinner-size"),10)),e.hasAttribute("data-spinner-color")&&(n=e.getAttribute("data-spinner-color"));var i=12,a=.2*r,o=.6*a,s=7>a?2:3;return new t({color:n||"#fff",lines:i,radius:a,length:o,width:s,zIndex:"auto",top:"auto",left:"auto",className:""})}function a(t){for(var e=[],n=0;t.length>n;n++)e.push(t[n]);return e}var o=[];return{bind:n,create:e,stopAll:r}});assets/plugins/ladda-bootstrap/dist/ladda-themeless.min.css000064400000017044152510437640020117 0ustar00/* * Ladda * http://lab.hakim.se/ladda * MIT licensed * * Copyright (C) 2013 Hakim El Hattab, http://hakim.se */.ladda-button{position:relative}.ladda-button .ladda-spinner{position:absolute;z-index:2;display:inline-block;width:32px;height:32px;top:50%;margin-top:-16px;opacity:0;pointer-events:none}.ladda-button .ladda-label{position:relative;z-index:3}.ladda-button .ladda-progress{position:absolute;width:0;height:100%;left:0;top:0;background:rgba(0,0,0,0.2);visibility:hidden;opacity:0;-webkit-transition:0.1s linear all !important;-moz-transition:0.1s linear all !important;-ms-transition:0.1s linear all !important;-o-transition:0.1s linear all !important;transition:0.1s linear all !important}.ladda-button[data-loading] .ladda-progress{opacity:1;visibility:visible}.ladda-button,.ladda-button .ladda-spinner,.ladda-button .ladda-label{-webkit-transition:0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) all !important;-moz-transition:0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) all !important;-ms-transition:0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) all !important;-o-transition:0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) all !important;transition:0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) all !important}.ladda-button[data-style=zoom-in],.ladda-button[data-style=zoom-in] .ladda-spinner,.ladda-button[data-style=zoom-in] .ladda-label,.ladda-button[data-style=zoom-out],.ladda-button[data-style=zoom-out] .ladda-spinner,.ladda-button[data-style=zoom-out] .ladda-label{-webkit-transition:0.3s ease all !important;-moz-transition:0.3s ease all !important;-ms-transition:0.3s ease all !important;-o-transition:0.3s ease all !important;transition:0.3s ease all !important}.ladda-button[data-style=expand-right] .ladda-spinner{right:14px}.ladda-button[data-style=expand-right][data-size="s"] .ladda-spinner,.ladda-button[data-style=expand-right][data-size="xs"] .ladda-spinner{right:4px}.ladda-button[data-style=expand-right][data-loading]{padding-right:56px}.ladda-button[data-style=expand-right][data-loading] .ladda-spinner{opacity:1}.ladda-button[data-style=expand-right][data-loading][data-size="s"],.ladda-button[data-style=expand-right][data-loading][data-size="xs"]{padding-right:40px}.ladda-button[data-style=expand-left] .ladda-spinner{left:14px}.ladda-button[data-style=expand-left][data-size="s"] .ladda-spinner,.ladda-button[data-style=expand-left][data-size="xs"] .ladda-spinner{left:4px}.ladda-button[data-style=expand-left][data-loading]{padding-left:56px}.ladda-button[data-style=expand-left][data-loading] .ladda-spinner{opacity:1}.ladda-button[data-style=expand-left][data-loading][data-size="s"],.ladda-button[data-style=expand-left][data-loading][data-size="xs"]{padding-left:40px}.ladda-button[data-style=expand-up]{overflow:hidden}.ladda-button[data-style=expand-up] .ladda-spinner{top:-32px;left:50%;margin-left:-16px}.ladda-button[data-style=expand-up][data-loading]{padding-top:54px}.ladda-button[data-style=expand-up][data-loading] .ladda-spinner{opacity:1;top:14px;margin-top:0}.ladda-button[data-style=expand-up][data-loading][data-size="s"],.ladda-button[data-style=expand-up][data-loading][data-size="xs"]{padding-top:32px}.ladda-button[data-style=expand-up][data-loading][data-size="s"] .ladda-spinner,.ladda-button[data-style=expand-up][data-loading][data-size="xs"] .ladda-spinner{top:4px}.ladda-button[data-style=expand-down]{overflow:hidden}.ladda-button[data-style=expand-down] .ladda-spinner{top:62px;left:50%;margin-left:-16px}.ladda-button[data-style=expand-down][data-size="s"] .ladda-spinner,.ladda-button[data-style=expand-down][data-size="xs"] .ladda-spinner{top:40px}.ladda-button[data-style=expand-down][data-loading]{padding-bottom:54px}.ladda-button[data-style=expand-down][data-loading] .ladda-spinner{opacity:1}.ladda-button[data-style=expand-down][data-loading][data-size="s"],.ladda-button[data-style=expand-down][data-loading][data-size="xs"]{padding-bottom:32px}.ladda-button[data-style=slide-left]{overflow:hidden}.ladda-button[data-style=slide-left] .ladda-label{position:relative}.ladda-button[data-style=slide-left] .ladda-spinner{left:100%;margin-left:-16px}.ladda-button[data-style=slide-left][data-loading] .ladda-label{opacity:0;left:-100%}.ladda-button[data-style=slide-left][data-loading] .ladda-spinner{opacity:1;left:50%}.ladda-button[data-style=slide-right]{overflow:hidden}.ladda-button[data-style=slide-right] .ladda-label{position:relative}.ladda-button[data-style=slide-right] .ladda-spinner{right:100%;margin-left:-16px}.ladda-button[data-style=slide-right][data-loading] .ladda-label{opacity:0;left:100%}.ladda-button[data-style=slide-right][data-loading] .ladda-spinner{opacity:1;left:50%}.ladda-button[data-style=slide-up]{overflow:hidden}.ladda-button[data-style=slide-up] .ladda-label{position:relative}.ladda-button[data-style=slide-up] .ladda-spinner{left:50%;margin-left:-16px;margin-top:1em}.ladda-button[data-style=slide-up][data-loading] .ladda-label{opacity:0;top:-1em}.ladda-button[data-style=slide-up][data-loading] .ladda-spinner{opacity:1;margin-top:-16px}.ladda-button[data-style=slide-down]{overflow:hidden}.ladda-button[data-style=slide-down] .ladda-label{position:relative}.ladda-button[data-style=slide-down] .ladda-spinner{left:50%;margin-left:-16px;margin-top:-2em}.ladda-button[data-style=slide-down][data-loading] .ladda-label{opacity:0;top:1em}.ladda-button[data-style=slide-down][data-loading] .ladda-spinner{opacity:1;margin-top:-16px}.ladda-button[data-style=zoom-out]{overflow:hidden}.ladda-button[data-style=zoom-out] .ladda-spinner{left:50%;margin-left:-16px;-webkit-transform:scale(2.5);-moz-transform:scale(2.5);-ms-transform:scale(2.5);-o-transform:scale(2.5);transform:scale(2.5)}.ladda-button[data-style=zoom-out] .ladda-label{position:relative;display:inline-block}.ladda-button[data-style=zoom-out][data-loading] .ladda-label{opacity:0;-webkit-transform:scale(0.5);-moz-transform:scale(0.5);-ms-transform:scale(0.5);-o-transform:scale(0.5);transform:scale(0.5)}.ladda-button[data-style=zoom-out][data-loading] .ladda-spinner{opacity:1;-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none}.ladda-button[data-style=zoom-in]{overflow:hidden}.ladda-button[data-style=zoom-in] .ladda-spinner{left:50%;margin-left:-16px;-webkit-transform:scale(0.2);-moz-transform:scale(0.2);-ms-transform:scale(0.2);-o-transform:scale(0.2);transform:scale(0.2)}.ladda-button[data-style=zoom-in] .ladda-label{position:relative;display:inline-block}.ladda-button[data-style=zoom-in][data-loading] .ladda-label{opacity:0;-webkit-transform:scale(2.2);-moz-transform:scale(2.2);-ms-transform:scale(2.2);-o-transform:scale(2.2);transform:scale(2.2)}.ladda-button[data-style=zoom-in][data-loading] .ladda-spinner{opacity:1;-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none}.ladda-button[data-style=contract]{overflow:hidden;width:100px}.ladda-button[data-style=contract] .ladda-spinner{left:50%;margin-left:-16px}.ladda-button[data-style=contract][data-loading]{border-radius:50%;width:52px}.ladda-button[data-style=contract][data-loading] .ladda-label{opacity:0}.ladda-button[data-style=contract][data-loading] .ladda-spinner{opacity:1}.ladda-button[data-style=contract-overlay]{overflow:hidden;width:100px;box-shadow:0px 0px 0px 3000px rgba(0,0,0,0)}.ladda-button[data-style=contract-overlay] .ladda-spinner{left:50%;margin-left:-16px}.ladda-button[data-style=contract-overlay][data-loading]{border-radius:50%;width:52px;box-shadow:0px 0px 0px 3000px rgba(0,0,0,0.8)}.ladda-button[data-style=contract-overlay][data-loading] .ladda-label{opacity:0}.ladda-button[data-style=contract-overlay][data-loading] .ladda-spinner{opacity:1} assets/plugins/ladda-bootstrap/dist/spin.min.js000064400000010531152510437650015653 0ustar00/*! * Copyright (c) 2011-2013 Felix Gnass * Licensed under the MIT license */ (function(t,e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):t.Spinner=e()})(this,function(){"use strict";function t(t,e){var i,n=document.createElement(t||"div");for(i in e)n[i]=e[i];return n}function e(t){for(var e=1,i=arguments.length;i>e;e++)t.appendChild(arguments[e]);return t}function i(t,e,i,n){var o=["opacity",e,~~(100*t),i,n].join("-"),r=.01+100*(i/n),a=Math.max(1-(1-t)/e*(100-r),t),s=u.substring(0,u.indexOf("Animation")).toLowerCase(),l=s&&"-"+s+"-"||"";return f[o]||(c.insertRule("@"+l+"keyframes "+o+"{"+"0%{opacity:"+a+"}"+r+"%{opacity:"+t+"}"+(r+.01)+"%{opacity:1}"+(r+e)%100+"%{opacity:"+t+"}"+"100%{opacity:"+a+"}"+"}",c.cssRules.length),f[o]=1),o}function n(t,e){var i,n,o=t.style;if(void 0!==o[e])return e;for(e=e.charAt(0).toUpperCase()+e.slice(1),n=0;d.length>n;n++)if(i=d[n]+e,void 0!==o[i])return i}function o(t,e){for(var i in e)t.style[n(t,i)||i]=e[i];return t}function r(t){for(var e=1;arguments.length>e;e++){var i=arguments[e];for(var n in i)void 0===t[n]&&(t[n]=i[n])}return t}function a(t){for(var e={x:t.offsetLeft,y:t.offsetTop};t=t.offsetParent;)e.x+=t.offsetLeft,e.y+=t.offsetTop;return e}function s(t){return this===void 0?new s(t):(this.opts=r(t||{},s.defaults,p),void 0)}function l(){function i(e,i){return t("<"+e+' xmlns="urn:schemas-microsoft.com:vml" class="spin-vml">',i)}c.addRule(".spin-vml","behavior:url(#default#VML)"),s.prototype.lines=function(t,n){function r(){return o(i("group",{coordsize:u+" "+u,coordorigin:-l+" "+-l}),{width:u,height:u})}function a(t,a,s){e(f,e(o(r(),{rotation:360/n.lines*t+"deg",left:~~a}),e(o(i("roundrect",{arcsize:n.corners}),{width:l,height:n.width,left:n.radius,top:-n.width>>1,filter:s}),i("fill",{color:n.color,opacity:n.opacity}),i("stroke",{opacity:0}))))}var s,l=n.length+n.width,u=2*l,d=2*-(n.width+n.length)+"px",f=o(r(),{position:"absolute",top:d,left:d});if(n.shadow)for(s=1;n.lines>=s;s++)a(s,-2,"progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)");for(s=1;n.lines>=s;s++)a(s);return e(t,f)},s.prototype.opacity=function(t,e,i,n){var o=t.firstChild;n=n.shadow&&n.lines||0,o&&o.childNodes.length>e+n&&(o=o.childNodes[e+n],o=o&&o.firstChild,o=o&&o.firstChild,o&&(o.opacity=i))}}var u,d=["webkit","Moz","ms","O"],f={},c=function(){var i=t("style",{type:"text/css"});return e(document.getElementsByTagName("head")[0],i),i.sheet||i.styleSheet}(),p={lines:12,length:7,width:5,radius:10,rotate:0,corners:1,color:"#000",direction:1,speed:1,trail:100,opacity:.25,fps:20,zIndex:2e9,className:"spinner",top:"auto",left:"auto",position:"relative"};s.defaults={},r(s.prototype,{spin:function(e){this.stop();var i,n,r=this,s=r.opts,l=r.el=o(t(0,{className:s.className}),{position:s.position,width:0,zIndex:s.zIndex}),d=s.radius+s.length+s.width;if(e&&(e.insertBefore(l,e.firstChild||null),n=a(e),i=a(l),o(l,{left:("auto"==s.left?n.x-i.x+(e.offsetWidth>>1):parseInt(s.left,10)+d)+"px",top:("auto"==s.top?n.y-i.y+(e.offsetHeight>>1):parseInt(s.top,10)+d)+"px"})),l.setAttribute("role","progressbar"),r.lines(l,r.opts),!u){var f,c=0,p=(s.lines-1)*(1-s.direction)/2,h=s.fps,m=h/s.speed,g=(1-s.opacity)/(m*s.trail/100),v=m/s.lines;(function y(){c++;for(var t=0;s.lines>t;t++)f=Math.max(1-(c+(s.lines-t)*v)%m*g,s.opacity),r.opacity(l,t*s.direction+p,f,s);r.timeout=r.el&&setTimeout(y,~~(1e3/h))})()}return r},stop:function(){var t=this.el;return t&&(clearTimeout(this.timeout),t.parentNode&&t.parentNode.removeChild(t),this.el=void 0),this},lines:function(n,r){function a(e,i){return o(t(),{position:"absolute",width:r.length+r.width+"px",height:r.width+"px",background:e,boxShadow:i,transformOrigin:"left",transform:"rotate("+~~(360/r.lines*l+r.rotate)+"deg) translate("+r.radius+"px"+",0)",borderRadius:(r.corners*r.width>>1)+"px"})}for(var s,l=0,d=(r.lines-1)*(1-r.direction)/2;r.lines>l;l++)s=o(t(),{position:"absolute",top:1+~(r.width/2)+"px",transform:r.hwaccel?"translate3d(0,0,0)":"",opacity:r.opacity,animation:u&&i(r.opacity,r.trail,d+l*r.direction,r.lines)+" "+1/r.speed+"s linear infinite"}),r.shadow&&e(s,o(a("#000","0 0 4px #000"),{top:"2px"})),e(n,e(s,a(r.color,"0 0 1px rgba(0,0,0,.1)")));return n},opacity:function(t,e,i){t.childNodes.length>e&&(t.childNodes[e].style.opacity=i)}});var h=o(t("group"),{behavior:"url(#default#VML)"});return!n(h,"transform")&&h.adj?l():u=n(h,"animation"),s});assets/plugins/ladda-bootstrap/dist/ladda.min.css000064400000021654152510437650016133 0ustar00/* * Ladda * http://lab.hakim.se/ladda * MIT licensed * * Copyright (C) 2013 Hakim El Hattab, http://hakim.se */.ladda-button{position:relative}.ladda-button .ladda-spinner{position:absolute;z-index:2;display:inline-block;width:32px;height:32px;top:50%;margin-top:-16px;opacity:0;pointer-events:none}.ladda-button .ladda-label{position:relative;z-index:3}.ladda-button .ladda-progress{position:absolute;width:0;height:100%;left:0;top:0;background:rgba(0,0,0,0.2);visibility:hidden;opacity:0;-webkit-transition:0.1s linear all !important;-moz-transition:0.1s linear all !important;-ms-transition:0.1s linear all !important;-o-transition:0.1s linear all !important;transition:0.1s linear all !important}.ladda-button[data-loading] .ladda-progress{opacity:1;visibility:visible}.ladda-button,.ladda-button .ladda-spinner,.ladda-button .ladda-label{-webkit-transition:0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) all !important;-moz-transition:0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) all !important;-ms-transition:0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) all !important;-o-transition:0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) all !important;transition:0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) all !important}.ladda-button[data-style=zoom-in],.ladda-button[data-style=zoom-in] .ladda-spinner,.ladda-button[data-style=zoom-in] .ladda-label,.ladda-button[data-style=zoom-out],.ladda-button[data-style=zoom-out] .ladda-spinner,.ladda-button[data-style=zoom-out] .ladda-label{-webkit-transition:0.3s ease all !important;-moz-transition:0.3s ease all !important;-ms-transition:0.3s ease all !important;-o-transition:0.3s ease all !important;transition:0.3s ease all !important}.ladda-button[data-style=expand-right] .ladda-spinner{right:14px}.ladda-button[data-style=expand-right][data-size="s"] .ladda-spinner,.ladda-button[data-style=expand-right][data-size="xs"] .ladda-spinner{right:4px}.ladda-button[data-style=expand-right][data-loading]{padding-right:56px}.ladda-button[data-style=expand-right][data-loading] .ladda-spinner{opacity:1}.ladda-button[data-style=expand-right][data-loading][data-size="s"],.ladda-button[data-style=expand-right][data-loading][data-size="xs"]{padding-right:40px}.ladda-button[data-style=expand-left] .ladda-spinner{left:14px}.ladda-button[data-style=expand-left][data-size="s"] .ladda-spinner,.ladda-button[data-style=expand-left][data-size="xs"] .ladda-spinner{left:4px}.ladda-button[data-style=expand-left][data-loading]{padding-left:56px}.ladda-button[data-style=expand-left][data-loading] .ladda-spinner{opacity:1}.ladda-button[data-style=expand-left][data-loading][data-size="s"],.ladda-button[data-style=expand-left][data-loading][data-size="xs"]{padding-left:40px}.ladda-button[data-style=expand-up]{overflow:hidden}.ladda-button[data-style=expand-up] .ladda-spinner{top:-32px;left:50%;margin-left:-16px}.ladda-button[data-style=expand-up][data-loading]{padding-top:54px}.ladda-button[data-style=expand-up][data-loading] .ladda-spinner{opacity:1;top:14px;margin-top:0}.ladda-button[data-style=expand-up][data-loading][data-size="s"],.ladda-button[data-style=expand-up][data-loading][data-size="xs"]{padding-top:32px}.ladda-button[data-style=expand-up][data-loading][data-size="s"] .ladda-spinner,.ladda-button[data-style=expand-up][data-loading][data-size="xs"] .ladda-spinner{top:4px}.ladda-button[data-style=expand-down]{overflow:hidden}.ladda-button[data-style=expand-down] .ladda-spinner{top:62px;left:50%;margin-left:-16px}.ladda-button[data-style=expand-down][data-size="s"] .ladda-spinner,.ladda-button[data-style=expand-down][data-size="xs"] .ladda-spinner{top:40px}.ladda-button[data-style=expand-down][data-loading]{padding-bottom:54px}.ladda-button[data-style=expand-down][data-loading] .ladda-spinner{opacity:1}.ladda-button[data-style=expand-down][data-loading][data-size="s"],.ladda-button[data-style=expand-down][data-loading][data-size="xs"]{padding-bottom:32px}.ladda-button[data-style=slide-left]{overflow:hidden}.ladda-button[data-style=slide-left] .ladda-label{position:relative}.ladda-button[data-style=slide-left] .ladda-spinner{left:100%;margin-left:-16px}.ladda-button[data-style=slide-left][data-loading] .ladda-label{opacity:0;left:-100%}.ladda-button[data-style=slide-left][data-loading] .ladda-spinner{opacity:1;left:50%}.ladda-button[data-style=slide-right]{overflow:hidden}.ladda-button[data-style=slide-right] .ladda-label{position:relative}.ladda-button[data-style=slide-right] .ladda-spinner{right:100%;margin-left:-16px}.ladda-button[data-style=slide-right][data-loading] .ladda-label{opacity:0;left:100%}.ladda-button[data-style=slide-right][data-loading] .ladda-spinner{opacity:1;left:50%}.ladda-button[data-style=slide-up]{overflow:hidden}.ladda-button[data-style=slide-up] .ladda-label{position:relative}.ladda-button[data-style=slide-up] .ladda-spinner{left:50%;margin-left:-16px;margin-top:1em}.ladda-button[data-style=slide-up][data-loading] .ladda-label{opacity:0;top:-1em}.ladda-button[data-style=slide-up][data-loading] .ladda-spinner{opacity:1;margin-top:-16px}.ladda-button[data-style=slide-down]{overflow:hidden}.ladda-button[data-style=slide-down] .ladda-label{position:relative}.ladda-button[data-style=slide-down] .ladda-spinner{left:50%;margin-left:-16px;margin-top:-2em}.ladda-button[data-style=slide-down][data-loading] .ladda-label{opacity:0;top:1em}.ladda-button[data-style=slide-down][data-loading] .ladda-spinner{opacity:1;margin-top:-16px}.ladda-button[data-style=zoom-out]{overflow:hidden}.ladda-button[data-style=zoom-out] .ladda-spinner{left:50%;margin-left:-16px;-webkit-transform:scale(2.5);-moz-transform:scale(2.5);-ms-transform:scale(2.5);-o-transform:scale(2.5);transform:scale(2.5)}.ladda-button[data-style=zoom-out] .ladda-label{position:relative;display:inline-block}.ladda-button[data-style=zoom-out][data-loading] .ladda-label{opacity:0;-webkit-transform:scale(0.5);-moz-transform:scale(0.5);-ms-transform:scale(0.5);-o-transform:scale(0.5);transform:scale(0.5)}.ladda-button[data-style=zoom-out][data-loading] .ladda-spinner{opacity:1;-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none}.ladda-button[data-style=zoom-in]{overflow:hidden}.ladda-button[data-style=zoom-in] .ladda-spinner{left:50%;margin-left:-16px;-webkit-transform:scale(0.2);-moz-transform:scale(0.2);-ms-transform:scale(0.2);-o-transform:scale(0.2);transform:scale(0.2)}.ladda-button[data-style=zoom-in] .ladda-label{position:relative;display:inline-block}.ladda-button[data-style=zoom-in][data-loading] .ladda-label{opacity:0;-webkit-transform:scale(2.2);-moz-transform:scale(2.2);-ms-transform:scale(2.2);-o-transform:scale(2.2);transform:scale(2.2)}.ladda-button[data-style=zoom-in][data-loading] .ladda-spinner{opacity:1;-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none}.ladda-button[data-style=contract]{overflow:hidden;width:100px}.ladda-button[data-style=contract] .ladda-spinner{left:50%;margin-left:-16px}.ladda-button[data-style=contract][data-loading]{border-radius:50%;width:52px}.ladda-button[data-style=contract][data-loading] .ladda-label{opacity:0}.ladda-button[data-style=contract][data-loading] .ladda-spinner{opacity:1}.ladda-button[data-style=contract-overlay]{overflow:hidden;width:100px;box-shadow:0px 0px 0px 3000px rgba(0,0,0,0)}.ladda-button[data-style=contract-overlay] .ladda-spinner{left:50%;margin-left:-16px}.ladda-button[data-style=contract-overlay][data-loading]{border-radius:50%;width:52px;box-shadow:0px 0px 0px 3000px rgba(0,0,0,0.8)}.ladda-button[data-style=contract-overlay][data-loading] .ladda-label{opacity:0}.ladda-button[data-style=contract-overlay][data-loading] .ladda-spinner{opacity:1}.ladda-button{background:#666;border:0;padding:14px 18px;font-size:18px;cursor:pointer;color:#fff;border-radius:2px;border:1px solid transparent;-webkit-appearance:none;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:rgba(0,0,0,0)}.ladda-button:hover{border-color:rgba(0,0,0,0.07);background-color:#888}.ladda-button[data-color=green]{background:#2aca76}.ladda-button[data-color=green]:hover{background-color:#38d683}.ladda-button[data-color=blue]{background:#53b5e6}.ladda-button[data-color=blue]:hover{background-color:#69bfe9}.ladda-button[data-color=red]{background:#ea8557}.ladda-button[data-color=red]:hover{background-color:#ed956e}.ladda-button[data-color=purple]{background:#9973c2}.ladda-button[data-color=purple]:hover{background-color:#a685ca}.ladda-button[data-color=mint]{background:#16a085}.ladda-button[data-color=mint]:hover{background-color:#19b698}.ladda-button[disabled],.ladda-button[data-loading]{border-color:rgba(0,0,0,0.07);cursor:default;background-color:#999}.ladda-button[disabled]:hover,.ladda-button[data-loading]:hover{cursor:default;background-color:#999}.ladda-button[data-size=xs]{padding:4px 8px}.ladda-button[data-size=xs] .ladda-label{font-size:0.7em}.ladda-button[data-size=s]{padding:6px 10px}.ladda-button[data-size=s] .ladda-label{font-size:0.9em}.ladda-button[data-size=l] .ladda-label{font-size:1.2em}.ladda-button[data-size=xl] .ladda-label{font-size:1.5em} assets/plugins/ladda-bootstrap/LICENSE000064400000002063152510437650013625 0ustar00Copyright (C) 2013 Hakim El Hattab, http://hakim.se Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.assets/plugins/moment/ender.js000064400000000047152510437650012472 0ustar00$.ender({ moment: require('moment') }) assets/plugins/moment/package.json000064400000003015152510437650013323 0ustar00{ "name": "moment", "version": "2.2.1", "description": "Parse, manipulate, and display dates.", "homepage": "http://momentjs.com", "author": "Iskren Ivov Chernev (https://github.com/ichernev)", "contributors": [ "Tim Wood (http://timwoodcreates.com/)", "Rocky Meza (http://rockymeza.com)", "Matt Johnson (http://codeofmatt.com)", "Isaac Cambron (http://drunkencoder.net/)" ], "keywords": [ "moment", "date", "time", "parse", "format", "validate", "i18n", "l10n", "ender" ], "main": "./moment.js", "engines": { "node": "*" }, "repository": { "type": "git", "url": "https://github.com/moment/moment.git" }, "bugs": { "url": "https://github.com/moment/moment/issues" }, "licenses" : [ { "type" : "MIT" } ], "devDependencies" : { "uglify-js" : "latest", "grunt" : "latest", "nodeunit" : "latest", "grunt-contrib-jshint" : "latest", "grunt-contrib-nodeunit" : "latest", "grunt-contrib-concat" : "latest", "grunt-contrib-uglify" : "latest", "grunt-contrib-watch" : "latest", "grunt-lib-legacyhelpers" : "latest" }, "scripts": { "test": "grunt" }, "ender": "./ender.js", "dojoBuild": "package.js" } assets/plugins/moment/moment.js000064400000172415152510437650012705 0ustar00//! moment.js //! version : 2.2.1 //! authors : Tim Wood, Iskren Chernev, Moment.js contributors //! license : MIT //! momentjs.com (function (undefined) { /************************************ Constants ************************************/ var moment, VERSION = "2.2.1", round = Math.round, i, // internal storage for language config files languages = {}, // check for nodeJS hasModule = (typeof module !== 'undefined' && module.exports), // ASP.NET json date format regex aspNetJsonRegex = /^\/?Date\((\-?\d+)/i, aspNetTimeSpanJsonRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/, // format tokens formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|SS?S?|X|zz?|ZZ?|.)/g, localFormattingTokens = /(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g, // parsing token regexes parseTokenOneOrTwoDigits = /\d\d?/, // 0 - 99 parseTokenOneToThreeDigits = /\d{1,3}/, // 0 - 999 parseTokenThreeDigits = /\d{3}/, // 000 - 999 parseTokenFourDigits = /\d{1,4}/, // 0 - 9999 parseTokenSixDigits = /[+\-]?\d{1,6}/, // -999,999 - 999,999 parseTokenWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i, // any word (or two) characters or numbers including two/three word month in arabic. parseTokenTimezone = /Z|[\+\-]\d\d:?\d\d/i, // +00:00 -00:00 +0000 -0000 or Z parseTokenT = /T/i, // T (ISO seperator) parseTokenTimestampMs = /[\+\-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123 // preliminary iso regex // 0000-00-00 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 isoRegex = /^\s*\d{4}-\d\d-\d\d((T| )(\d\d(:\d\d(:\d\d(\.\d\d?\d?)?)?)?)?([\+\-]\d\d:?\d\d)?)?$/, isoFormat = 'YYYY-MM-DDTHH:mm:ssZ', // iso time formats and regexes isoTimes = [ ['HH:mm:ss.S', /(T| )\d\d:\d\d:\d\d\.\d{1,3}/], ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/], ['HH:mm', /(T| )\d\d:\d\d/], ['HH', /(T| )\d\d/] ], // timezone chunker "+10:00" > ["10", "00"] or "-1530" > ["-15", "30"] parseTimezoneChunker = /([\+\-]|\d\d)/gi, // getter and setter names proxyGettersAndSetters = 'Date|Hours|Minutes|Seconds|Milliseconds'.split('|'), unitMillisecondFactors = { 'Milliseconds' : 1, 'Seconds' : 1e3, 'Minutes' : 6e4, 'Hours' : 36e5, 'Days' : 864e5, 'Months' : 2592e6, 'Years' : 31536e6 }, unitAliases = { ms : 'millisecond', s : 'second', m : 'minute', h : 'hour', d : 'day', w : 'week', W : 'isoweek', M : 'month', y : 'year' }, // format function strings formatFunctions = {}, // tokens to ordinalize and pad ordinalizeTokens = 'DDD w W M D d'.split(' '), paddedTokens = 'M D H h m s w W'.split(' '), formatTokenFunctions = { M : function () { return this.month() + 1; }, MMM : function (format) { return this.lang().monthsShort(this, format); }, MMMM : function (format) { return this.lang().months(this, format); }, D : function () { return this.date(); }, DDD : function () { return this.dayOfYear(); }, d : function () { return this.day(); }, dd : function (format) { return this.lang().weekdaysMin(this, format); }, ddd : function (format) { return this.lang().weekdaysShort(this, format); }, dddd : function (format) { return this.lang().weekdays(this, format); }, w : function () { return this.week(); }, W : function () { return this.isoWeek(); }, YY : function () { return leftZeroFill(this.year() % 100, 2); }, YYYY : function () { return leftZeroFill(this.year(), 4); }, YYYYY : function () { return leftZeroFill(this.year(), 5); }, gg : function () { return leftZeroFill(this.weekYear() % 100, 2); }, gggg : function () { return this.weekYear(); }, ggggg : function () { return leftZeroFill(this.weekYear(), 5); }, GG : function () { return leftZeroFill(this.isoWeekYear() % 100, 2); }, GGGG : function () { return this.isoWeekYear(); }, GGGGG : function () { return leftZeroFill(this.isoWeekYear(), 5); }, e : function () { return this.weekday(); }, E : function () { return this.isoWeekday(); }, a : function () { return this.lang().meridiem(this.hours(), this.minutes(), true); }, A : function () { return this.lang().meridiem(this.hours(), this.minutes(), false); }, H : function () { return this.hours(); }, h : function () { return this.hours() % 12 || 12; }, m : function () { return this.minutes(); }, s : function () { return this.seconds(); }, S : function () { return toInt(this.milliseconds() / 100); }, SS : function () { return leftZeroFill(toInt(this.milliseconds() / 10), 2); }, SSS : function () { return leftZeroFill(this.milliseconds(), 3); }, Z : function () { var a = -this.zone(), b = "+"; if (a < 0) { a = -a; b = "-"; } return b + leftZeroFill(toInt(a / 60), 2) + ":" + leftZeroFill(toInt(a) % 60, 2); }, ZZ : function () { var a = -this.zone(), b = "+"; if (a < 0) { a = -a; b = "-"; } return b + leftZeroFill(toInt(10 * a / 6), 4); }, z : function () { return this.zoneAbbr(); }, zz : function () { return this.zoneName(); }, X : function () { return this.unix(); } }, lists = ['months', 'monthsShort', 'weekdays', 'weekdaysShort', 'weekdaysMin']; function padToken(func, count) { return function (a) { return leftZeroFill(func.call(this, a), count); }; } function ordinalizeToken(func, period) { return function (a) { return this.lang().ordinal(func.call(this, a), period); }; } while (ordinalizeTokens.length) { i = ordinalizeTokens.pop(); formatTokenFunctions[i + 'o'] = ordinalizeToken(formatTokenFunctions[i], i); } while (paddedTokens.length) { i = paddedTokens.pop(); formatTokenFunctions[i + i] = padToken(formatTokenFunctions[i], 2); } formatTokenFunctions.DDDD = padToken(formatTokenFunctions.DDD, 3); /************************************ Constructors ************************************/ function Language() { } // Moment prototype object function Moment(config) { extend(this, config); } // Duration Constructor function Duration(duration) { var normalizedInput = normalizeObjectUnits(duration), years = normalizedInput.year || 0, months = normalizedInput.month || 0, weeks = normalizedInput.week || 0, days = normalizedInput.day || 0, hours = normalizedInput.hour || 0, minutes = normalizedInput.minute || 0, seconds = normalizedInput.second || 0, milliseconds = normalizedInput.millisecond || 0; // store reference to input for deterministic cloning this._input = duration; // representation for dateAddRemove this._milliseconds = +milliseconds + seconds * 1e3 + // 1000 minutes * 6e4 + // 1000 * 60 hours * 36e5; // 1000 * 60 * 60 // Because of dateAddRemove treats 24 hours as different from a // day when working around DST, we need to store them separately this._days = +days + weeks * 7; // It is impossible translate months into days without knowing // which months you are are talking about, so we have to store // it separately. this._months = +months + years * 12; this._data = {}; this._bubble(); } /************************************ Helpers ************************************/ function extend(a, b) { for (var i in b) { if (b.hasOwnProperty(i)) { a[i] = b[i]; } } if (b.hasOwnProperty("toString")) { a.toString = b.toString; } if (b.hasOwnProperty("valueOf")) { a.valueOf = b.valueOf; } return a; } function absRound(number) { if (number < 0) { return Math.ceil(number); } else { return Math.floor(number); } } // left zero fill a number // see http://jsperf.com/left-zero-filling for performance comparison function leftZeroFill(number, targetLength) { var output = number + ''; while (output.length < targetLength) { output = '0' + output; } return output; } // helper function for _.addTime and _.subtractTime function addOrSubtractDurationFromMoment(mom, duration, isAdding, ignoreUpdateOffset) { var milliseconds = duration._milliseconds, days = duration._days, months = duration._months, minutes, hours; if (milliseconds) { mom._d.setTime(+mom._d + milliseconds * isAdding); } // store the minutes and hours so we can restore them if (days || months) { minutes = mom.minute(); hours = mom.hour(); } if (days) { mom.date(mom.date() + days * isAdding); } if (months) { mom.month(mom.month() + months * isAdding); } if (milliseconds && !ignoreUpdateOffset) { moment.updateOffset(mom); } // restore the minutes and hours after possibly changing dst if (days || months) { mom.minute(minutes); mom.hour(hours); } } // check if is an array function isArray(input) { return Object.prototype.toString.call(input) === '[object Array]'; } function isDate(input) { return Object.prototype.toString.call(input) === '[object Date]'; } // compare two arrays, return the number of differences function compareArrays(array1, array2) { var len = Math.min(array1.length, array2.length), lengthDiff = Math.abs(array1.length - array2.length), diffs = 0, i; for (i = 0; i < len; i++) { if (toInt(array1[i]) !== toInt(array2[i])) { diffs++; } } return diffs + lengthDiff; } function normalizeUnits(units) { return units ? unitAliases[units] || units.toLowerCase().replace(/(.)s$/, '$1') : units; } function normalizeObjectUnits(inputObject) { var normalizedInput = {}, normalizedProp, prop, index; for (prop in inputObject) { if (inputObject.hasOwnProperty(prop)) { normalizedProp = normalizeUnits(prop); if (normalizedProp) { normalizedInput[normalizedProp] = inputObject[prop]; } } } return normalizedInput; } function makeList(field) { var count, setter; if (field.indexOf('week') === 0) { count = 7; setter = 'day'; } else if (field.indexOf('month') === 0) { count = 12; setter = 'month'; } else { return; } moment[field] = function (format, index) { var i, getter, method = moment.fn._lang[field], results = []; if (typeof format === 'number') { index = format; format = undefined; } getter = function (i) { var m = moment().utc().set(setter, i); return method.call(moment.fn._lang, m, format || ''); }; if (index) { return getter(index); } else { for (i = 0; i < count; i++) { results.push(getter(i)); } return results; } }; } function toInt(argumentForCoercion) { var coercedNumber = +argumentForCoercion, value = 0; if (coercedNumber !== 0 && isFinite(coercedNumber)) { if (coercedNumber >= 0) { value = Math.floor(coercedNumber); } else { value = Math.ceil(coercedNumber); } } return value; } /************************************ Languages ************************************/ extend(Language.prototype, { set : function (config) { var prop, i; for (i in config) { prop = config[i]; if (typeof prop === 'function') { this[i] = prop; } else { this['_' + i] = prop; } } }, _months : "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), months : function (m) { return this._months[m.month()]; }, _monthsShort : "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"), monthsShort : function (m) { return this._monthsShort[m.month()]; }, monthsParse : function (monthName) { var i, mom, regex; if (!this._monthsParse) { this._monthsParse = []; } for (i = 0; i < 12; i++) { // make the regex if we don't have it already if (!this._monthsParse[i]) { mom = moment.utc([2000, i]); regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); } // test the regex if (this._monthsParse[i].test(monthName)) { return i; } } }, _weekdays : "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), weekdays : function (m) { return this._weekdays[m.day()]; }, _weekdaysShort : "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"), weekdaysShort : function (m) { return this._weekdaysShort[m.day()]; }, _weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), weekdaysMin : function (m) { return this._weekdaysMin[m.day()]; }, weekdaysParse : function (weekdayName) { var i, mom, regex; if (!this._weekdaysParse) { this._weekdaysParse = []; } for (i = 0; i < 7; i++) { // make the regex if we don't have it already if (!this._weekdaysParse[i]) { mom = moment([2000, 1]).day(i); regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); } // test the regex if (this._weekdaysParse[i].test(weekdayName)) { return i; } } }, _longDateFormat : { LT : "h:mm A", L : "MM/DD/YYYY", LL : "MMMM D YYYY", LLL : "MMMM D YYYY LT", LLLL : "dddd, MMMM D YYYY LT" }, longDateFormat : function (key) { var output = this._longDateFormat[key]; if (!output && this._longDateFormat[key.toUpperCase()]) { output = this._longDateFormat[key.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function (val) { return val.slice(1); }); this._longDateFormat[key] = output; } return output; }, isPM : function (input) { // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays // Using charAt should be more compatible. return ((input + '').toLowerCase().charAt(0) === 'p'); }, _meridiemParse : /[ap]\.?m?\.?/i, meridiem : function (hours, minutes, isLower) { if (hours > 11) { return isLower ? 'pm' : 'PM'; } else { return isLower ? 'am' : 'AM'; } }, _calendar : { sameDay : '[Today at] LT', nextDay : '[Tomorrow at] LT', nextWeek : 'dddd [at] LT', lastDay : '[Yesterday at] LT', lastWeek : '[Last] dddd [at] LT', sameElse : 'L' }, calendar : function (key, mom) { var output = this._calendar[key]; return typeof output === 'function' ? output.apply(mom) : output; }, _relativeTime : { future : "in %s", past : "%s ago", s : "a few seconds", m : "a minute", mm : "%d minutes", h : "an hour", hh : "%d hours", d : "a day", dd : "%d days", M : "a month", MM : "%d months", y : "a year", yy : "%d years" }, relativeTime : function (number, withoutSuffix, string, isFuture) { var output = this._relativeTime[string]; return (typeof output === 'function') ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number); }, pastFuture : function (diff, output) { var format = this._relativeTime[diff > 0 ? 'future' : 'past']; return typeof format === 'function' ? format(output) : format.replace(/%s/i, output); }, ordinal : function (number) { return this._ordinal.replace("%d", number); }, _ordinal : "%d", preparse : function (string) { return string; }, postformat : function (string) { return string; }, week : function (mom) { return weekOfYear(mom, this._week.dow, this._week.doy).week; }, _week : { dow : 0, // Sunday is the first day of the week. doy : 6 // The week that contains Jan 1st is the first week of the year. } }); // Loads a language definition into the `languages` cache. The function // takes a key and optionally values. If not in the browser and no values // are provided, it will load the language file module. As a convenience, // this function also returns the language values. function loadLang(key, values) { values.abbr = key; if (!languages[key]) { languages[key] = new Language(); } languages[key].set(values); return languages[key]; } // Remove a language from the `languages` cache. Mostly useful in tests. function unloadLang(key) { delete languages[key]; } // Determines which language definition to use and returns it. // // With no parameters, it will return the global language. If you // pass in a language key, such as 'en', it will return the // definition for 'en', so long as 'en' has already been loaded using // moment.lang. function getLangDefinition(key) { if (!key) { return moment.fn._lang; } if (!languages[key] && hasModule) { try { require('./lang/' + key); } catch (e) { // call with no params to set to default return moment.fn._lang; } } return languages[key] || moment.fn._lang; } /************************************ Formatting ************************************/ function removeFormattingTokens(input) { if (input.match(/\[.*\]/)) { return input.replace(/^\[|\]$/g, ""); } return input.replace(/\\/g, ""); } function makeFormatFunction(format) { var array = format.match(formattingTokens), i, length; for (i = 0, length = array.length; i < length; i++) { if (formatTokenFunctions[array[i]]) { array[i] = formatTokenFunctions[array[i]]; } else { array[i] = removeFormattingTokens(array[i]); } } return function (mom) { var output = ""; for (i = 0; i < length; i++) { output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; } return output; }; } // format date using native date object function formatMoment(m, format) { format = expandFormat(format, m.lang()); if (!formatFunctions[format]) { formatFunctions[format] = makeFormatFunction(format); } return formatFunctions[format](m); } function expandFormat(format, lang) { var i = 5; function replaceLongDateFormatTokens(input) { return lang.longDateFormat(input) || input; } localFormattingTokens.lastIndex = 0; while (i >= 0 && localFormattingTokens.test(format)) { format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); localFormattingTokens.lastIndex = 0; i -= 1; } return format; } /************************************ Parsing ************************************/ // get the regex to find the next token function getParseRegexForToken(token, config) { switch (token) { case 'DDDD': return parseTokenThreeDigits; case 'YYYY': return parseTokenFourDigits; case 'YYYYY': return parseTokenSixDigits; case 'S': case 'SS': case 'SSS': case 'DDD': return parseTokenOneToThreeDigits; case 'MMM': case 'MMMM': case 'dd': case 'ddd': case 'dddd': return parseTokenWord; case 'a': case 'A': return getLangDefinition(config._l)._meridiemParse; case 'X': return parseTokenTimestampMs; case 'Z': case 'ZZ': return parseTokenTimezone; case 'T': return parseTokenT; case 'MM': case 'DD': case 'YY': case 'HH': case 'hh': case 'mm': case 'ss': case 'M': case 'D': case 'd': case 'H': case 'h': case 'm': case 's': return parseTokenOneOrTwoDigits; default : return new RegExp(regexpEscape(token.replace('\\', ''))); } } function timezoneMinutesFromString(string) { var tzchunk = (parseTokenTimezone.exec(string) || [])[0], parts = (tzchunk + '').match(parseTimezoneChunker) || ['-', 0, 0], minutes = +(parts[1] * 60) + toInt(parts[2]); return parts[0] === '+' ? -minutes : minutes; } // function to convert string input to date function addTimeToArrayFromToken(token, input, config) { var a, datePartArray = config._a; switch (token) { // MONTH case 'M' : // fall through to MM case 'MM' : if (input != null) { datePartArray[1] = toInt(input) - 1; } break; case 'MMM' : // fall through to MMMM case 'MMMM' : a = getLangDefinition(config._l).monthsParse(input); // if we didn't find a month name, mark the date as invalid. if (a != null) { datePartArray[1] = a; } else { config._isValid = false; } break; // DAY OF MONTH case 'D' : // fall through to DD case 'DD' : if (input != null) { datePartArray[2] = toInt(input); } break; // DAY OF YEAR case 'DDD' : // fall through to DDDD case 'DDDD' : if (input != null) { datePartArray[1] = 0; datePartArray[2] = toInt(input); } break; // YEAR case 'YY' : datePartArray[0] = toInt(input) + (toInt(input) > 68 ? 1900 : 2000); break; case 'YYYY' : case 'YYYYY' : datePartArray[0] = toInt(input); break; // AM / PM case 'a' : // fall through to A case 'A' : config._isPm = getLangDefinition(config._l).isPM(input); break; // 24 HOUR case 'H' : // fall through to hh case 'HH' : // fall through to hh case 'h' : // fall through to hh case 'hh' : datePartArray[3] = toInt(input); break; // MINUTE case 'm' : // fall through to mm case 'mm' : datePartArray[4] = toInt(input); break; // SECOND case 's' : // fall through to ss case 'ss' : datePartArray[5] = toInt(input); break; // MILLISECOND case 'S' : case 'SS' : case 'SSS' : datePartArray[6] = toInt(('0.' + input) * 1000); break; // UNIX TIMESTAMP WITH MS case 'X': config._d = new Date(parseFloat(input) * 1000); config._isValid = !isNaN(config._d.getTime()); break; // TIMEZONE case 'Z' : // fall through to ZZ case 'ZZ' : config._useUTC = true; config._tzm = timezoneMinutesFromString(input); break; } // if the input is null, the date is not valid if (input == null) { config._isValid = false; } } // convert an array to a date. // the array should mirror the parameters below // note: all values past the year are optional and will default to the lowest possible value. // [year, month, day , hour, minute, second, millisecond] function dateFromArray(config) { var i, date, input = [], currentDate; if (config._d) { return; } // Default to current date. // * if no year, month, day of month are given, default to today // * if day of month is given, default month and year // * if month is given, default only year // * if year is given, don't default anything currentDate = currentDateArray(config); for (i = 0; i < 3 && config._a[i] == null; ++i) { config._a[i] = input[i] = currentDate[i]; } // Zero out whatever was not defaulted, including time for (; i < 7; i++) { config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; } // add the offsets to the time to be parsed so that we can have a clean array for checking isValid input[3] += toInt((config._tzm || 0) / 60); input[4] += toInt((config._tzm || 0) % 60); date = new Date(0); if (config._useUTC) { date.setUTCFullYear(input[0], input[1], input[2]); date.setUTCHours(input[3], input[4], input[5], input[6]); } else { date.setFullYear(input[0], input[1], input[2]); date.setHours(input[3], input[4], input[5], input[6]); } config._d = date; } function dateFromObject(config) { var normalizedInput; if (config._d) { return; } normalizedInput = normalizeObjectUnits(config._i); config._a = [ normalizedInput.year, normalizedInput.month, normalizedInput.day, normalizedInput.hour, normalizedInput.minute, normalizedInput.second, normalizedInput.millisecond ]; dateFromArray(config); } function currentDateArray(config) { var now = new Date(); if (config._useUTC) { return [ now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate() ]; } else { return [now.getFullYear(), now.getMonth(), now.getDate()]; } } // date from string and format string function makeDateFromStringAndFormat(config) { if (config._strict) { makeDateFromStringAndStrictFormat(config); return; } // This array is used to make a Date, either with `new Date` or `Date.UTC` var lang = getLangDefinition(config._l), string = '' + config._i, i, parsedInput, tokens, stringLength = string.length, totalParsedInputLength = 0; tokens = expandFormat(config._f, lang).match(formattingTokens); config._a = []; for (i = 0; i < tokens.length; i++) { parsedInput = (getParseRegexForToken(tokens[i], config).exec(string) || [])[0]; if (parsedInput) { string = string.slice(string.indexOf(parsedInput) + parsedInput.length); totalParsedInputLength += parsedInput.length; } // don't parse if its not a known token if (formatTokenFunctions[tokens[i]]) { addTimeToArrayFromToken(tokens[i], parsedInput, config); } } // add remaining unparsed input length to the string config._il = stringLength - totalParsedInputLength; // handle am pm if (config._isPm && config._a[3] < 12) { config._a[3] += 12; } // if is 12 am, change hours to 0 if (config._isPm === false && config._a[3] === 12) { config._a[3] = 0; } // return dateFromArray(config); } function makeDateFromStringAndStrictFormat(config) { var regexp = '', non_token_start = 0, tokens = config._f.match(formattingTokens), match, i, tokenIndex; // We're not interested in the result. Just the tokens and their // starting positions. config._f.replace(formattingTokens, function (token) { var offset = arguments[arguments.length - 2], tokenRegexp; if (formatTokenFunctions[token]) { tokenRegexp = getParseRegexForToken(token).toString(); // Do not remember groups tokenRegexp = tokenRegexp.replace(/\(/g, '(?:'); // regexp-escape strings in-between tokens if (offset > non_token_start) { regexp += regexpEscape(unescapeFormat(config._f.substring(non_token_start, offset))); } non_token_start = offset + token.length; // add token regexp regexp += '(' + tokenRegexp.substring(1, tokenRegexp.lastIndexOf('/')) + ')'; } return token; }); // Handle stuff after last formatting token. if (non_token_start !== config._f.length) { regexp += regexpEscape(unescapeFormat(config._f.substring(non_token_start))); } regexp = new RegExp('^' + regexp + '$'); match = config._i.match(regexp); if (match === null) { config._a = []; config._d = new Date(0); config._isValid = false; return; } config._a = []; for (i = tokenIndex = 0; i < tokens.length; ++i) { if (formatTokenFunctions[tokens[i]]) { addTimeToArrayFromToken(tokens[i], match[tokenIndex + 1], config); ++tokenIndex; } } dateFromArray(config); } function unescapeFormat(s) { return s.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { return p1 || p2 || p3 || p4; }); } // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript function regexpEscape(s) { return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); } // date from string and array of format strings function makeDateFromStringAndArray(config) { var tempConfig, tempMoment, bestMoment, scoreToBeat = 99, i, currentScore; for (i = 0; i < config._f.length; i++) { tempConfig = extend({}, config); tempConfig._f = config._f[i]; makeDateFromStringAndFormat(tempConfig); tempMoment = new Moment(tempConfig); currentScore = compareArrays(tempConfig._a, tempMoment.toArray()); // if there is any input that was not parsed // add a penalty for that format currentScore += tempMoment._il || 0; if (currentScore < scoreToBeat) { scoreToBeat = currentScore; bestMoment = tempMoment; } } extend(config, bestMoment); } // date from iso format function makeDateFromString(config) { var i, string = config._i, match = isoRegex.exec(string); if (match) { // match[2] should be "T" or undefined config._f = 'YYYY-MM-DD' + (match[2] || " "); for (i = 0; i < 4; i++) { if (isoTimes[i][1].exec(string)) { config._f += isoTimes[i][0]; break; } } if (parseTokenTimezone.exec(string)) { config._f += " Z"; } makeDateFromStringAndFormat(config); } else { config._d = new Date(string); } } function makeDateFromInput(config) { var input = config._i, matched = aspNetJsonRegex.exec(input); if (input === undefined) { config._d = new Date(); } else if (matched) { config._d = new Date(+matched[1]); } else if (typeof input === 'string') { makeDateFromString(config); } else if (isArray(input)) { config._a = input.slice(0); dateFromArray(config); } else if (isDate(input)) { config._d = new Date(+input); } else if (typeof(input) === 'object') { dateFromObject(config); } else { config._d = new Date(input); } } /************************************ Relative Time ************************************/ // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize function substituteTimeAgo(string, number, withoutSuffix, isFuture, lang) { return lang.relativeTime(number || 1, !!withoutSuffix, string, isFuture); } function relativeTime(milliseconds, withoutSuffix, lang) { var seconds = round(Math.abs(milliseconds) / 1000), minutes = round(seconds / 60), hours = round(minutes / 60), days = round(hours / 24), years = round(days / 365), args = seconds < 45 && ['s', seconds] || minutes === 1 && ['m'] || minutes < 45 && ['mm', minutes] || hours === 1 && ['h'] || hours < 22 && ['hh', hours] || days === 1 && ['d'] || days <= 25 && ['dd', days] || days <= 45 && ['M'] || days < 345 && ['MM', round(days / 30)] || years === 1 && ['y'] || ['yy', years]; args[2] = withoutSuffix; args[3] = milliseconds > 0; args[4] = lang; return substituteTimeAgo.apply({}, args); } /************************************ Week of Year ************************************/ // firstDayOfWeek 0 = sun, 6 = sat // the day of the week that starts the week // (usually sunday or monday) // firstDayOfWeekOfYear 0 = sun, 6 = sat // the first week is the week that contains the first // of this day of the week // (eg. ISO weeks use thursday (4)) function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) { var end = firstDayOfWeekOfYear - firstDayOfWeek, daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(), adjustedMoment; if (daysToDayOfWeek > end) { daysToDayOfWeek -= 7; } if (daysToDayOfWeek < end - 7) { daysToDayOfWeek += 7; } adjustedMoment = moment(mom).add('d', daysToDayOfWeek); return { week: Math.ceil(adjustedMoment.dayOfYear() / 7), year: adjustedMoment.year() }; } /************************************ Top Level Functions ************************************/ function makeMoment(config) { var input = config._i, format = config._f; if (input === null || input === '') { return null; } if (typeof input === 'string') { config._i = input = getLangDefinition().preparse(input); } if (moment.isMoment(input)) { config = extend({}, input); config._d = new Date(+input._d); } else if (format) { if (isArray(format)) { makeDateFromStringAndArray(config); } else { makeDateFromStringAndFormat(config); } } else { makeDateFromInput(config); } return new Moment(config); } moment = function (input, format, lang, strict) { if (typeof(lang) === "boolean") { strict = lang; lang = undefined; } return makeMoment({ _i : input, _f : format, _l : lang, _strict : strict, _isUTC : false }); }; // creating with utc moment.utc = function (input, format, lang, strict) { if (typeof(lang) === "boolean") { strict = lang; lang = undefined; } return makeMoment({ _useUTC : true, _isUTC : true, _l : lang, _i : input, _f : format, _strict : strict }).utc(); }; // creating with unix timestamp (in seconds) moment.unix = function (input) { return moment(input * 1000); }; // duration moment.duration = function (input, key) { var isDuration = moment.isDuration(input), isNumber = (typeof input === 'number'), duration = (isDuration ? input._input : (isNumber ? {} : input)), matched = aspNetTimeSpanJsonRegex.exec(input), sign, ret; if (isNumber) { if (key) { duration[key] = input; } else { duration.milliseconds = input; } } else if (matched) { sign = (matched[1] === "-") ? -1 : 1; duration = { y: 0, d: toInt(matched[2]) * sign, h: toInt(matched[3]) * sign, m: toInt(matched[4]) * sign, s: toInt(matched[5]) * sign, ms: toInt(matched[6]) * sign }; } ret = new Duration(duration); if (isDuration && input.hasOwnProperty('_lang')) { ret._lang = input._lang; } return ret; }; // version number moment.version = VERSION; // default format moment.defaultFormat = isoFormat; // This function will be called whenever a moment is mutated. // It is intended to keep the offset in sync with the timezone. moment.updateOffset = function () {}; // This function will load languages and then set the global language. If // no arguments are passed in, it will simply return the current global // language key. moment.lang = function (key, values) { if (!key) { return moment.fn._lang._abbr; } key = key.toLowerCase(); key = key.replace('_', '-'); if (values) { loadLang(key, values); } else if (values === null) { unloadLang(key); key = 'en'; } else if (!languages[key]) { getLangDefinition(key); } moment.duration.fn._lang = moment.fn._lang = getLangDefinition(key); }; // returns language data moment.langData = function (key) { if (key && key._lang && key._lang._abbr) { key = key._lang._abbr; } return getLangDefinition(key); }; // compare moment object moment.isMoment = function (obj) { return obj instanceof Moment; }; // for typechecking Duration objects moment.isDuration = function (obj) { return obj instanceof Duration; }; for (i in lists) { makeList(lists[i]); } // for use by developers when extending the library // https://github.com/moment/moment/issues/1066 moment.normalizeUnits = function (units) { return normalizeUnits(units); }; moment.parseZone = function (input) { return moment(input).parseZone(); }; /************************************ Moment Prototype ************************************/ extend(moment.fn = Moment.prototype, { clone : function () { return moment(this); }, valueOf : function () { return +this._d + ((this._offset || 0) * 60000); }, unix : function () { return Math.floor(+this / 1000); }, toString : function () { return this.format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ"); }, toDate : function () { return this._offset ? new Date(+this) : this._d; }, toISOString : function () { return formatMoment(moment(this).utc(), 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); }, toArray : function () { var m = this; return [ m.year(), m.month(), m.date(), m.hours(), m.minutes(), m.seconds(), m.milliseconds() ]; }, isValid : function () { if (this._isValid == null) { if (this._a) { this._isValid = !compareArrays(this._a, (this._isUTC ? moment.utc(this._a) : moment(this._a)).toArray()); } else { this._isValid = !isNaN(this._d.getTime()); } } return !!this._isValid; }, invalidAt: function () { var i, arr1 = this._a, arr2 = (this._isUTC ? moment.utc(this._a) : moment(this._a)).toArray(); for (i = 6; i >= 0 && arr1[i] === arr2[i]; --i) { // empty loop body } return i; }, utc : function () { return this.zone(0); }, local : function () { this.zone(0); this._isUTC = false; return this; }, format : function (inputString) { var output = formatMoment(this, inputString || moment.defaultFormat); return this.lang().postformat(output); }, add : function (input, val) { var dur; // switch args to support add('s', 1) and add(1, 's') if (typeof input === 'string') { dur = moment.duration(+val, input); } else { dur = moment.duration(input, val); } addOrSubtractDurationFromMoment(this, dur, 1); return this; }, subtract : function (input, val) { var dur; // switch args to support subtract('s', 1) and subtract(1, 's') if (typeof input === 'string') { dur = moment.duration(+val, input); } else { dur = moment.duration(input, val); } addOrSubtractDurationFromMoment(this, dur, -1); return this; }, diff : function (input, units, asFloat) { var that = this._isUTC ? moment(input).zone(this._offset || 0) : moment(input).local(), zoneDiff = (this.zone() - that.zone()) * 6e4, diff, output; units = normalizeUnits(units); if (units === 'year' || units === 'month') { // average number of days in the months in the given dates diff = (this.daysInMonth() + that.daysInMonth()) * 432e5; // 24 * 60 * 60 * 1000 / 2 // difference in months output = ((this.year() - that.year()) * 12) + (this.month() - that.month()); // adjust by taking difference in days, average number of days // and dst in the given months. output += ((this - moment(this).startOf('month')) - (that - moment(that).startOf('month'))) / diff; // same as above but with zones, to negate all dst output -= ((this.zone() - moment(this).startOf('month').zone()) - (that.zone() - moment(that).startOf('month').zone())) * 6e4 / diff; if (units === 'year') { output = output / 12; } } else { diff = (this - that); output = units === 'second' ? diff / 1e3 : // 1000 units === 'minute' ? diff / 6e4 : // 1000 * 60 units === 'hour' ? diff / 36e5 : // 1000 * 60 * 60 units === 'day' ? (diff - zoneDiff) / 864e5 : // 1000 * 60 * 60 * 24, negate dst units === 'week' ? (diff - zoneDiff) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst diff; } return asFloat ? output : absRound(output); }, from : function (time, withoutSuffix) { return moment.duration(this.diff(time)).lang(this.lang()._abbr).humanize(!withoutSuffix); }, fromNow : function (withoutSuffix) { return this.from(moment(), withoutSuffix); }, calendar : function () { var diff = this.diff(moment().zone(this.zone()).startOf('day'), 'days', true), format = diff < -6 ? 'sameElse' : diff < -1 ? 'lastWeek' : diff < 0 ? 'lastDay' : diff < 1 ? 'sameDay' : diff < 2 ? 'nextDay' : diff < 7 ? 'nextWeek' : 'sameElse'; return this.format(this.lang().calendar(format, this)); }, isLeapYear : function () { var year = this.year(); return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; }, isDST : function () { return (this.zone() < this.clone().month(0).zone() || this.zone() < this.clone().month(5).zone()); }, day : function (input) { var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); if (input != null) { if (typeof input === 'string') { input = this.lang().weekdaysParse(input); if (typeof input !== 'number') { return this; } } return this.add({ d : input - day }); } else { return day; } }, month : function (input) { var utc = this._isUTC ? 'UTC' : '', dayOfMonth; if (input != null) { if (typeof input === 'string') { input = this.lang().monthsParse(input); if (typeof input !== 'number') { return this; } } dayOfMonth = this.date(); this.date(1); this._d['set' + utc + 'Month'](input); this.date(Math.min(dayOfMonth, this.daysInMonth())); moment.updateOffset(this); return this; } else { return this._d['get' + utc + 'Month'](); } }, startOf: function (units) { units = normalizeUnits(units); // the following switch intentionally omits break keywords // to utilize falling through the cases. switch (units) { case 'year': this.month(0); /* falls through */ case 'month': this.date(1); /* falls through */ case 'week': case 'isoweek': case 'day': this.hours(0); /* falls through */ case 'hour': this.minutes(0); /* falls through */ case 'minute': this.seconds(0); /* falls through */ case 'second': this.milliseconds(0); /* falls through */ } // weeks are a special case if (units === 'week') { this.weekday(0); } else if (units === 'isoweek') { this.isoWeekday(1); } return this; }, endOf: function (units) { units = normalizeUnits(units); return this.startOf(units).add((units === 'isoweek' ? 'week' : units), 1).subtract('ms', 1); }, isAfter: function (input, units) { units = typeof units !== 'undefined' ? units : 'millisecond'; return +this.clone().startOf(units) > +moment(input).startOf(units); }, isBefore: function (input, units) { units = typeof units !== 'undefined' ? units : 'millisecond'; return +this.clone().startOf(units) < +moment(input).startOf(units); }, isSame: function (input, units) { units = typeof units !== 'undefined' ? units : 'millisecond'; return +this.clone().startOf(units) === +moment(input).startOf(units); }, min: function (other) { other = moment.apply(null, arguments); return other < this ? this : other; }, max: function (other) { other = moment.apply(null, arguments); return other > this ? this : other; }, zone : function (input) { var offset = this._offset || 0; if (input != null) { if (typeof input === "string") { input = timezoneMinutesFromString(input); } if (Math.abs(input) < 16) { input = input * 60; } this._offset = input; this._isUTC = true; if (offset !== input) { addOrSubtractDurationFromMoment(this, moment.duration(offset - input, 'm'), 1, true); } } else { return this._isUTC ? offset : this._d.getTimezoneOffset(); } return this; }, zoneAbbr : function () { return this._isUTC ? "UTC" : ""; }, zoneName : function () { return this._isUTC ? "Coordinated Universal Time" : ""; }, parseZone : function () { if (typeof this._i === 'string') { this.zone(this._i); } return this; }, hasAlignedHourOffset : function (input) { if (!input) { input = 0; } else { input = moment(input).zone(); } return (this.zone() - input) % 60 === 0; }, daysInMonth : function () { return moment.utc([this.year(), this.month() + 1, 0]).date(); }, dayOfYear : function (input) { var dayOfYear = round((moment(this).startOf('day') - moment(this).startOf('year')) / 864e5) + 1; return input == null ? dayOfYear : this.add("d", (input - dayOfYear)); }, weekYear : function (input) { var year = weekOfYear(this, this.lang()._week.dow, this.lang()._week.doy).year; return input == null ? year : this.add("y", (input - year)); }, isoWeekYear : function (input) { var year = weekOfYear(this, 1, 4).year; return input == null ? year : this.add("y", (input - year)); }, week : function (input) { var week = this.lang().week(this); return input == null ? week : this.add("d", (input - week) * 7); }, isoWeek : function (input) { var week = weekOfYear(this, 1, 4).week; return input == null ? week : this.add("d", (input - week) * 7); }, weekday : function (input) { var weekday = (this.day() + 7 - this.lang()._week.dow) % 7; return input == null ? weekday : this.add("d", input - weekday); }, isoWeekday : function (input) { // behaves the same as moment#day except // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) // as a setter, sunday should belong to the previous week. return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7); }, get : function (units) { units = normalizeUnits(units); return this[units.toLowerCase()](); }, set : function (units, value) { units = normalizeUnits(units); this[units.toLowerCase()](value); return this; }, // If passed a language key, it will set the language for this // instance. Otherwise, it will return the language configuration // variables for this instance. lang : function (key) { if (key === undefined) { return this._lang; } else { this._lang = getLangDefinition(key); return this; } } }); // helper for adding shortcuts function makeGetterAndSetter(name, key) { moment.fn[name] = moment.fn[name + 's'] = function (input) { var utc = this._isUTC ? 'UTC' : ''; if (input != null) { this._d['set' + utc + key](input); moment.updateOffset(this); return this; } else { return this._d['get' + utc + key](); } }; } // loop through and add shortcuts (Month, Date, Hours, Minutes, Seconds, Milliseconds) for (i = 0; i < proxyGettersAndSetters.length; i ++) { makeGetterAndSetter(proxyGettersAndSetters[i].toLowerCase().replace(/s$/, ''), proxyGettersAndSetters[i]); } // add shortcut for year (uses different syntax than the getter/setter 'year' == 'FullYear') makeGetterAndSetter('year', 'FullYear'); // add plural methods moment.fn.days = moment.fn.day; moment.fn.months = moment.fn.month; moment.fn.weeks = moment.fn.week; moment.fn.isoWeeks = moment.fn.isoWeek; // add aliased format methods moment.fn.toJSON = moment.fn.toISOString; /************************************ Duration Prototype ************************************/ extend(moment.duration.fn = Duration.prototype, { _bubble : function () { var milliseconds = this._milliseconds, days = this._days, months = this._months, data = this._data, seconds, minutes, hours, years; // The following code bubbles up values, see the tests for // examples of what that means. data.milliseconds = milliseconds % 1000; seconds = absRound(milliseconds / 1000); data.seconds = seconds % 60; minutes = absRound(seconds / 60); data.minutes = minutes % 60; hours = absRound(minutes / 60); data.hours = hours % 24; days += absRound(hours / 24); data.days = days % 30; months += absRound(days / 30); data.months = months % 12; years = absRound(months / 12); data.years = years; }, weeks : function () { return absRound(this.days() / 7); }, valueOf : function () { return this._milliseconds + this._days * 864e5 + (this._months % 12) * 2592e6 + toInt(this._months / 12) * 31536e6; }, humanize : function (withSuffix) { var difference = +this, output = relativeTime(difference, !withSuffix, this.lang()); if (withSuffix) { output = this.lang().pastFuture(difference, output); } return this.lang().postformat(output); }, add : function (input, val) { // supports only 2.0-style add(1, 's') or add(moment) var dur = moment.duration(input, val); this._milliseconds += dur._milliseconds; this._days += dur._days; this._months += dur._months; this._bubble(); return this; }, subtract : function (input, val) { var dur = moment.duration(input, val); this._milliseconds -= dur._milliseconds; this._days -= dur._days; this._months -= dur._months; this._bubble(); return this; }, get : function (units) { units = normalizeUnits(units); return this[units.toLowerCase() + 's'](); }, as : function (units) { units = normalizeUnits(units); return this['as' + units.charAt(0).toUpperCase() + units.slice(1) + 's'](); }, lang : moment.fn.lang }); function makeDurationGetter(name) { moment.duration.fn[name] = function () { return this._data[name]; }; } function makeDurationAsGetter(name, factor) { moment.duration.fn['as' + name] = function () { return +this / factor; }; } for (i in unitMillisecondFactors) { if (unitMillisecondFactors.hasOwnProperty(i)) { makeDurationAsGetter(i, unitMillisecondFactors[i]); makeDurationGetter(i.toLowerCase()); } } makeDurationAsGetter('Weeks', 6048e5); moment.duration.fn.asMonths = function () { return (+this - this.years() * 31536e6) / 2592e6 + this.years() * 12; }; /************************************ Default Lang ************************************/ // Set default language, other languages will inherit from English. moment.lang('en', { ordinal : function (number) { var b = number % 10, output = (toInt(number % 100 / 10) === 1) ? 'th' : (b === 1) ? 'st' : (b === 2) ? 'nd' : (b === 3) ? 'rd' : 'th'; return number + output; } }); /* EMBED_LANGUAGES */ /************************************ Exposing Moment ************************************/ function makeGlobal() { /*global ender:false */ if (typeof ender === 'undefined') { // here, `this` means `window` in the browser, or `global` on the server // add `moment` as a global object via a string identifier, // for Closure Compiler "advanced" mode this['moment'] = moment; } } // CommonJS module is defined if (hasModule) { module.exports = moment; makeGlobal(); } else if (typeof define === "function" && define.amd) { define("moment", function (require, exports, module) { if (module.config().noGlobal !== true) { makeGlobal(); } return moment; }); } else { makeGlobal(); } }).call(this); assets/plugins/moment/package.js000064400000000421152510437650012764 0ustar00var profile = { resourceTags: { ignore: function(filename, mid){ // only include moment/moment return mid != "moment/moment"; }, amd: function(filename, mid){ return /\.js$/.test(filename); } } }; assets/plugins/moment/bower.json000064400000000501152510437650013043 0ustar00{ "name": "moment", "version": "2.2.1", "main": "moment.js", "ignore": [ "**/.*", "node_modules", "bower_components", "test", "tests", "tasks", "component.json", "composer.json", "CONTRIBUTING.md", "ender.js", "Gruntfile.js", "package.js", "package.json" ] } assets/plugins/moment/.travis.yml000064400000000117152510437650013146 0ustar00language: node_js node_js: - 0.8 before_script: - npm install -g grunt-cli assets/plugins/moment/lang/sq.js000064400000003756152510437650012753 0ustar00// moment.js language configuration // language : Albanian (sq) // author : Flakërim Ismani : https://github.com/flakerimi // author: Menelion Elensúle: https://github.com/Oire (tests) (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('sq', { months : "Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"), monthsShort : "Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"), weekdays : "E Diel_E Hënë_E Marte_E Mërkure_E Enjte_E Premte_E Shtunë".split("_"), weekdaysShort : "Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"), weekdaysMin : "D_H_Ma_Më_E_P_Sh".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendar : { sameDay : '[Sot në] LT', nextDay : '[Neser në] LT', nextWeek : 'dddd [në] LT', lastDay : '[Dje në] LT', lastWeek : 'dddd [e kaluar në] LT', sameElse : 'L' }, relativeTime : { future : "në %s", past : "%s me parë", s : "disa seconda", m : "një minut", mm : "%d minutea", h : "një orë", hh : "%d orë", d : "një ditë", dd : "%d ditë", M : "një muaj", MM : "%d muaj", y : "një vit", yy : "%d vite" }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); assets/plugins/moment/lang/de.js000064400000005176152510437650012716 0ustar00// moment.js language configuration // language : german (de) // author : lluchs : https://github.com/lluchs // author: Menelion Elensúle: https://github.com/Oire (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { function processRelativeTime(number, withoutSuffix, key, isFuture) { var format = { 'm': ['eine Minute', 'einer Minute'], 'h': ['eine Stunde', 'einer Stunde'], 'd': ['ein Tag', 'einem Tag'], 'dd': [number + ' Tage', number + ' Tagen'], 'M': ['ein Monat', 'einem Monat'], 'MM': [number + ' Monate', number + ' Monaten'], 'y': ['ein Jahr', 'einem Jahr'], 'yy': [number + ' Jahre', number + ' Jahren'] }; return withoutSuffix ? format[key][0] : format[key][1]; } moment.lang('de', { months : "Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"), monthsShort : "Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"), weekdays : "Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"), weekdaysShort : "So._Mo._Di._Mi._Do._Fr._Sa.".split("_"), weekdaysMin : "So_Mo_Di_Mi_Do_Fr_Sa".split("_"), longDateFormat : { LT: "H:mm [Uhr]", L : "DD.MM.YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY LT", LLLL : "dddd, D. MMMM YYYY LT" }, calendar : { sameDay: "[Heute um] LT", sameElse: "L", nextDay: '[Morgen um] LT', nextWeek: 'dddd [um] LT', lastDay: '[Gestern um] LT', lastWeek: '[letzten] dddd [um] LT' }, relativeTime : { future : "in %s", past : "vor %s", s : "ein paar Sekunden", m : processRelativeTime, mm : "%d Minuten", h : processRelativeTime, hh : "%d Stunden", d : processRelativeTime, dd : processRelativeTime, M : processRelativeTime, MM : processRelativeTime, y : processRelativeTime, yy : processRelativeTime }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); assets/plugins/moment/lang/sl.js000064400000011054152510437650012734 0ustar00// moment.js language configuration // language : slovenian (sl) // author : Robert Sedovšek : https://github.com/sedovsek (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { function translate(number, withoutSuffix, key) { var result = number + " "; switch (key) { case 'm': return withoutSuffix ? 'ena minuta' : 'eno minuto'; case 'mm': if (number === 1) { result += 'minuta'; } else if (number === 2) { result += 'minuti'; } else if (number === 3 || number === 4) { result += 'minute'; } else { result += 'minut'; } return result; case 'h': return withoutSuffix ? 'ena ura' : 'eno uro'; case 'hh': if (number === 1) { result += 'ura'; } else if (number === 2) { result += 'uri'; } else if (number === 3 || number === 4) { result += 'ure'; } else { result += 'ur'; } return result; case 'dd': if (number === 1) { result += 'dan'; } else { result += 'dni'; } return result; case 'MM': if (number === 1) { result += 'mesec'; } else if (number === 2) { result += 'meseca'; } else if (number === 3 || number === 4) { result += 'mesece'; } else { result += 'mesecev'; } return result; case 'yy': if (number === 1) { result += 'leto'; } else if (number === 2) { result += 'leti'; } else if (number === 3 || number === 4) { result += 'leta'; } else { result += 'let'; } return result; } } moment.lang('sl', { months : "januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"), monthsShort : "jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"), weekdays : "nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"), weekdaysShort : "ned._pon._tor._sre._čet._pet._sob.".split("_"), weekdaysMin : "ne_po_to_sr_če_pe_so".split("_"), longDateFormat : { LT : "H:mm", L : "DD. MM. YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY LT", LLLL : "dddd, D. MMMM YYYY LT" }, calendar : { sameDay : '[danes ob] LT', nextDay : '[jutri ob] LT', nextWeek : function () { switch (this.day()) { case 0: return '[v] [nedeljo] [ob] LT'; case 3: return '[v] [sredo] [ob] LT'; case 6: return '[v] [soboto] [ob] LT'; case 1: case 2: case 4: case 5: return '[v] dddd [ob] LT'; } }, lastDay : '[včeraj ob] LT', lastWeek : function () { switch (this.day()) { case 0: case 3: case 6: return '[prejšnja] dddd [ob] LT'; case 1: case 2: case 4: case 5: return '[prejšnji] dddd [ob] LT'; } }, sameElse : 'L' }, relativeTime : { future : "čez %s", past : "%s nazaj", s : "nekaj sekund", m : translate, mm : translate, h : translate, hh : translate, d : "en dan", dd : translate, M : "en mesec", MM : translate, y : "eno leto", yy : translate }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); assets/plugins/moment/lang/bg.js000064400000006323152510437650012711 0ustar00// moment.js language configuration // language : bulgarian (bg) // author : Krasen Borisov : https://github.com/kraz (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('bg', { months : "януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"), monthsShort : "янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"), weekdays : "неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"), weekdaysShort : "нед_пон_вто_сря_чет_пет_съб".split("_"), weekdaysMin : "нд_пн_вт_ср_чт_пт_сб".split("_"), longDateFormat : { LT : "h:mm", L : "D.MM.YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendar : { sameDay : '[Днес в] LT', nextDay : '[Утре в] LT', nextWeek : 'dddd [в] LT', lastDay : '[Вчера в] LT', lastWeek : function () { switch (this.day()) { case 0: case 3: case 6: return '[В изминалата] dddd [в] LT'; case 1: case 2: case 4: case 5: return '[В изминалия] dddd [в] LT'; } }, sameElse : 'L' }, relativeTime : { future : "след %s", past : "преди %s", s : "няколко секунди", m : "минута", mm : "%d минути", h : "час", hh : "%d часа", d : "ден", dd : "%d дни", M : "месец", MM : "%d месеца", y : "година", yy : "%d години" }, ordinal : function (number) { var lastDigit = number % 10, last2Digits = number % 100; if (number === 0) { return number + '-ев'; } else if (last2Digits === 0) { return number + '-ен'; } else if (last2Digits > 10 && last2Digits < 20) { return number + '-ти'; } else if (lastDigit === 1) { return number + '-ви'; } else if (lastDigit === 2) { return number + '-ри'; } else if (lastDigit === 7 || lastDigit === 8) { return number + '-ми'; } else { return number + '-ти'; } }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); assets/plugins/moment/lang/br.js000064400000006317152510437650012727 0ustar00// moment.js language configuration // language : breton (br) // author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { function relativeTimeWithMutation(number, withoutSuffix, key) { var format = { 'mm': "munutenn", 'MM': "miz", 'dd': "devezh" }; return number + ' ' + mutation(format[key], number); } function specialMutationForYears(number) { switch (lastNumber(number)) { case 1: case 3: case 4: case 5: case 9: return number + ' bloaz'; default: return number + ' vloaz'; } } function lastNumber(number) { if (number > 9) { return lastNumber(number % 10); } return number; } function mutation(text, number) { if (number === 2) { return softMutation(text); } return text; } function softMutation(text) { var mutationTable = { 'm': 'v', 'b': 'v', 'd': 'z' }; if (mutationTable[text.charAt(0)] === undefined) { return text; } return mutationTable[text.charAt(0)] + text.substring(1); } moment.lang('br', { months : "Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"), monthsShort : "Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"), weekdays : "Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"), weekdaysShort : "Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"), weekdaysMin : "Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"), longDateFormat : { LT : "h[e]mm A", L : "DD/MM/YYYY", LL : "D [a viz] MMMM YYYY", LLL : "D [a viz] MMMM YYYY LT", LLLL : "dddd, D [a viz] MMMM YYYY LT" }, calendar : { sameDay : '[Hiziv da] LT', nextDay : '[Warc\'hoazh da] LT', nextWeek : 'dddd [da] LT', lastDay : '[Dec\'h da] LT', lastWeek : 'dddd [paset da] LT', sameElse : 'L' }, relativeTime : { future : "a-benn %s", past : "%s 'zo", s : "un nebeud segondennoù", m : "ur vunutenn", mm : relativeTimeWithMutation, h : "un eur", hh : "%d eur", d : "un devezh", dd : relativeTimeWithMutation, M : "ur miz", MM : relativeTimeWithMutation, y : "ur bloaz", yy : specialMutationForYears }, ordinal : function (number) { var output = (number === 1) ? 'añ' : 'vet'; return number + output; }, week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); assets/plugins/moment/lang/he.js000064400000005432152510437650012715 0ustar00// moment.js language configuration // language : Hebrew (he) // author : Tomer Cohen : https://github.com/tomer // author : Moshe Simantov : https://github.com/DevelopmentIL // author : Tal Ater : https://github.com/TalAter (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('he', { months : "ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"), monthsShort : "ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"), weekdays : "ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"), weekdaysShort : "א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"), weekdaysMin : "א_ב_ג_ד_ה_ו_ש".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D [ב]MMMM YYYY", LLL : "D [ב]MMMM YYYY LT", LLLL : "dddd, D [ב]MMMM YYYY LT", l : "D/M/YYYY", ll : "D MMM YYYY", lll : "D MMM YYYY LT", llll : "ddd, D MMM YYYY LT" }, calendar : { sameDay : '[היום ב־]LT', nextDay : '[מחר ב־]LT', nextWeek : 'dddd [בשעה] LT', lastDay : '[אתמול ב־]LT', lastWeek : '[ביום] dddd [האחרון בשעה] LT', sameElse : 'L' }, relativeTime : { future : "בעוד %s", past : "לפני %s", s : "מספר שניות", m : "דקה", mm : "%d דקות", h : "שעה", hh : function (number) { if (number === 2) { return "שעתיים"; } return number + " שעות"; }, d : "יום", dd : function (number) { if (number === 2) { return "יומיים"; } return number + " ימים"; }, M : "חודש", MM : function (number) { if (number === 2) { return "חודשיים"; } return number + " חודשים"; }, y : "שנה", yy : function (number) { if (number === 2) { return "שנתיים"; } return number + " שנים"; } } }); })); assets/plugins/moment/lang/ru.js000064400000013644152510437650012753 0ustar00// moment.js language configuration // language : russian (ru) // author : Viktorminator : https://github.com/Viktorminator // Author : Menelion Elensúle : https://github.com/Oire (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { function plural(word, num) { var forms = word.split('_'); return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); } function relativeTimeWithPlural(number, withoutSuffix, key) { var format = { 'mm': 'минута_минуты_минут', 'hh': 'час_часа_часов', 'dd': 'день_дня_дней', 'MM': 'месяц_месяца_месяцев', 'yy': 'год_года_лет' }; if (key === 'm') { return withoutSuffix ? 'минута' : 'минуту'; } else { return number + ' ' + plural(format[key], +number); } } function monthsCaseReplace(m, format) { var months = { 'nominative': 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'), 'accusative': 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_') }, nounCase = (/D[oD]? *MMMM?/).test(format) ? 'accusative' : 'nominative'; return months[nounCase][m.month()]; } function monthsShortCaseReplace(m, format) { var monthsShort = { 'nominative': 'янв_фев_мар_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'), 'accusative': 'янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек'.split('_') }, nounCase = (/D[oD]? *MMMM?/).test(format) ? 'accusative' : 'nominative'; return monthsShort[nounCase][m.month()]; } function weekdaysCaseReplace(m, format) { var weekdays = { 'nominative': 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'), 'accusative': 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_') }, nounCase = (/\[ ?[Вв] ?(?:прошлую|следующую)? ?\] ?dddd/).test(format) ? 'accusative' : 'nominative'; return weekdays[nounCase][m.day()]; } moment.lang('ru', { months : monthsCaseReplace, monthsShort : monthsShortCaseReplace, weekdays : weekdaysCaseReplace, weekdaysShort : "вс_пн_вт_ср_чт_пт_сб".split("_"), weekdaysMin : "вс_пн_вт_ср_чт_пт_сб".split("_"), monthsParse : [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[й|я]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i], longDateFormat : { LT : "HH:mm", L : "DD.MM.YYYY", LL : "D MMMM YYYY г.", LLL : "D MMMM YYYY г., LT", LLLL : "dddd, D MMMM YYYY г., LT" }, calendar : { sameDay: '[Сегодня в] LT', nextDay: '[Завтра в] LT', lastDay: '[Вчера в] LT', nextWeek: function () { return this.day() === 2 ? '[Во] dddd [в] LT' : '[В] dddd [в] LT'; }, lastWeek: function () { switch (this.day()) { case 0: return '[В прошлое] dddd [в] LT'; case 1: case 2: case 4: return '[В прошлый] dddd [в] LT'; case 3: case 5: case 6: return '[В прошлую] dddd [в] LT'; } }, sameElse: 'L' }, relativeTime : { future : "через %s", past : "%s назад", s : "несколько секунд", m : relativeTimeWithPlural, mm : relativeTimeWithPlural, h : "час", hh : relativeTimeWithPlural, d : "день", dd : relativeTimeWithPlural, M : "месяц", MM : relativeTimeWithPlural, y : "год", yy : relativeTimeWithPlural }, // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason meridiem : function (hour, minute, isLower) { if (hour < 4) { return "ночи"; } else if (hour < 12) { return "утра"; } else if (hour < 17) { return "дня"; } else { return "вечера"; } }, ordinal: function (number, period) { switch (period) { case 'M': case 'd': case 'DDD': return number + '-й'; case 'D': return number + '-го'; case 'w': case 'W': return number + '-я'; default: return number; } }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); assets/plugins/moment/lang/gl.js000064400000005067152510437650012727 0ustar00// moment.js language configuration // language : galician (gl) // author : Juan G. Hurtado : https://github.com/juanghurtado (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('gl', { months : "Xaneiro_Febreiro_Marzo_Abril_Maio_Xuño_Xullo_Agosto_Setembro_Outubro_Novembro_Decembro".split("_"), monthsShort : "Xan._Feb._Mar._Abr._Mai._Xuñ._Xul._Ago._Set._Out._Nov._Dec.".split("_"), weekdays : "Domingo_Luns_Martes_Mércores_Xoves_Venres_Sábado".split("_"), weekdaysShort : "Dom._Lun._Mar._Mér._Xov._Ven._Sáb.".split("_"), weekdaysMin : "Do_Lu_Ma_Mé_Xo_Ve_Sá".split("_"), longDateFormat : { LT : "H:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay : function () { return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; }, nextDay : function () { return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; }, nextWeek : function () { return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; }, lastDay : function () { return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT'; }, lastWeek : function () { return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; }, sameElse : 'L' }, relativeTime : { future : function (str) { if (str === "uns segundos") { return "nuns segundos"; } return "en " + str; }, past : "hai %s", s : "uns segundos", m : "un minuto", mm : "%d minutos", h : "unha hora", hh : "%d horas", d : "un día", dd : "%d días", M : "un mes", MM : "%d meses", y : "un ano", yy : "%d anos" }, ordinal : '%dº', week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); assets/plugins/moment/lang/en-ca.js000064400000004024152510437650013300 0ustar00// moment.js language configuration // language : canadian english (en-ca) // author : Jonathan Abourbih : https://github.com/jonbca (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('en-ca', { months : "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), monthsShort : "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"), weekdays : "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), weekdaysShort : "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"), weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), longDateFormat : { LT : "h:mm A", L : "YYYY-MM-DD", LL : "D MMMM, YYYY", LLL : "D MMMM, YYYY LT", LLLL : "dddd, D MMMM, YYYY LT" }, calendar : { sameDay : '[Today at] LT', nextDay : '[Tomorrow at] LT', nextWeek : 'dddd [at] LT', lastDay : '[Yesterday at] LT', lastWeek : '[Last] dddd [at] LT', sameElse : 'L' }, relativeTime : { future : "in %s", past : "%s ago", s : "a few seconds", m : "a minute", mm : "%d minutes", h : "an hour", hh : "%d hours", d : "a day", dd : "%d days", M : "a month", MM : "%d months", y : "a year", yy : "%d years" }, ordinal : function (number) { var b = number % 10, output = (~~ (number % 100 / 10) === 1) ? 'th' : (b === 1) ? 'st' : (b === 2) ? 'nd' : (b === 3) ? 'rd' : 'th'; return number + output; } }); })); assets/plugins/moment/lang/cv.js000064400000005025152510437650012727 0ustar00// moment.js language configuration // language : chuvash (cv) // author : Anatoly Mironov : https://github.com/mirontoli (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('cv', { months : "кăрлач_нарăс_пуш_ака_май_çĕртме_утă_çурла_авăн_юпа_чӳк_раштав".split("_"), monthsShort : "кăр_нар_пуш_ака_май_çĕр_утă_çур_ав_юпа_чӳк_раш".split("_"), weekdays : "вырсарникун_тунтикун_ытларикун_юнкун_кĕçнерникун_эрнекун_шăматкун".split("_"), weekdaysShort : "выр_тун_ытл_юн_кĕç_эрн_шăм".split("_"), weekdaysMin : "вр_тн_ыт_юн_кç_эр_шм".split("_"), longDateFormat : { LT : "HH:mm", L : "DD-MM-YYYY", LL : "YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ]", LLL : "YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT", LLLL : "dddd, YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT" }, calendar : { sameDay: '[Паян] LT [сехетре]', nextDay: '[Ыран] LT [сехетре]', lastDay: '[Ĕнер] LT [сехетре]', nextWeek: '[Çитес] dddd LT [сехетре]', lastWeek: '[Иртнĕ] dddd LT [сехетре]', sameElse: 'L' }, relativeTime : { future : function (output) { var affix = /сехет$/i.exec(output) ? "рен" : /çул$/i.exec(output) ? "тан" : "ран"; return output + affix; }, past : "%s каялла", s : "пĕр-ик çеккунт", m : "пĕр минут", mm : "%d минут", h : "пĕр сехет", hh : "%d сехет", d : "пĕр кун", dd : "%d кун", M : "пĕр уйăх", MM : "%d уйăх", y : "пĕр çул", yy : "%d çул" }, ordinal : '%d-мĕш', week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); assets/plugins/moment/lang/fi.js000064400000007266152510437650012726 0ustar00// moment.js language configuration // language : finnish (fi) // author : Tarmo Aidantausta : https://github.com/bleadof (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var numbers_past = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '), numbers_future = ['nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden', numbers_past[7], numbers_past[8], numbers_past[9]]; function translate(number, withoutSuffix, key, isFuture) { var result = ""; switch (key) { case 's': return isFuture ? 'muutaman sekunnin' : 'muutama sekunti'; case 'm': return isFuture ? 'minuutin' : 'minuutti'; case 'mm': result = isFuture ? 'minuutin' : 'minuuttia'; break; case 'h': return isFuture ? 'tunnin' : 'tunti'; case 'hh': result = isFuture ? 'tunnin' : 'tuntia'; break; case 'd': return isFuture ? 'päivän' : 'päivä'; case 'dd': result = isFuture ? 'päivän' : 'päivää'; break; case 'M': return isFuture ? 'kuukauden' : 'kuukausi'; case 'MM': result = isFuture ? 'kuukauden' : 'kuukautta'; break; case 'y': return isFuture ? 'vuoden' : 'vuosi'; case 'yy': result = isFuture ? 'vuoden' : 'vuotta'; break; } result = verbal_number(number, isFuture) + " " + result; return result; } function verbal_number(number, isFuture) { return number < 10 ? (isFuture ? numbers_future[number] : numbers_past[number]) : number; } moment.lang('fi', { months : "tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"), monthsShort : "tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"), weekdays : "sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"), weekdaysShort : "su_ma_ti_ke_to_pe_la".split("_"), weekdaysMin : "su_ma_ti_ke_to_pe_la".split("_"), longDateFormat : { LT : "HH.mm", L : "DD.MM.YYYY", LL : "Do MMMM[ta] YYYY", LLL : "Do MMMM[ta] YYYY, [klo] LT", LLLL : "dddd, Do MMMM[ta] YYYY, [klo] LT", l : "D.M.YYYY", ll : "Do MMM YYYY", lll : "Do MMM YYYY, [klo] LT", llll : "ddd, Do MMM YYYY, [klo] LT" }, calendar : { sameDay : '[tänään] [klo] LT', nextDay : '[huomenna] [klo] LT', nextWeek : 'dddd [klo] LT', lastDay : '[eilen] [klo] LT', lastWeek : '[viime] dddd[na] [klo] LT', sameElse : 'L' }, relativeTime : { future : "%s päästä", past : "%s sitten", s : translate, m : translate, mm : translate, h : translate, hh : translate, d : translate, dd : translate, M : translate, MM : translate, y : translate, yy : translate }, ordinal : "%d.", week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); assets/plugins/moment/lang/sv.js000064400000004231152510437650012745 0ustar00// moment.js language configuration // language : swedish (sv) // author : Jens Alm : https://github.com/ulmus (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('sv', { months : "januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"), monthsShort : "jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"), weekdays : "söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"), weekdaysShort : "sön_mån_tis_ons_tor_fre_lör".split("_"), weekdaysMin : "sö_må_ti_on_to_fr_lö".split("_"), longDateFormat : { LT : "HH:mm", L : "YYYY-MM-DD", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: '[Idag] LT', nextDay: '[Imorgon] LT', lastDay: '[Igår] LT', nextWeek: 'dddd LT', lastWeek: '[Förra] dddd[en] LT', sameElse: 'L' }, relativeTime : { future : "om %s", past : "för %s sedan", s : "några sekunder", m : "en minut", mm : "%d minuter", h : "en timme", hh : "%d timmar", d : "en dag", dd : "%d dagar", M : "en månad", MM : "%d månader", y : "ett år", yy : "%d år" }, ordinal : function (number) { var b = number % 10, output = (~~ (number % 100 / 10) === 1) ? 'e' : (b === 1) ? 'a' : (b === 2) ? 'a' : (b === 3) ? 'e' : 'e'; return number + output; }, week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); assets/plugins/moment/lang/lv.js000064400000005371152510437650012744 0ustar00// moment.js language configuration // language : latvian (lv) // author : Kristaps Karlsons : https://github.com/skakri (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var units = { 'mm': 'minūti_minūtes_minūte_minūtes', 'hh': 'stundu_stundas_stunda_stundas', 'dd': 'dienu_dienas_diena_dienas', 'MM': 'mēnesi_mēnešus_mēnesis_mēneši', 'yy': 'gadu_gadus_gads_gadi' }; function format(word, number, withoutSuffix) { var forms = word.split('_'); if (withoutSuffix) { return number % 10 === 1 && number !== 11 ? forms[2] : forms[3]; } else { return number % 10 === 1 && number !== 11 ? forms[0] : forms[1]; } } function relativeTimeWithPlural(number, withoutSuffix, key) { return number + ' ' + format(units[key], number, withoutSuffix); } moment.lang('lv', { months : "janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"), monthsShort : "jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"), weekdays : "svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"), weekdaysShort : "Sv_P_O_T_C_Pk_S".split("_"), weekdaysMin : "Sv_P_O_T_C_Pk_S".split("_"), longDateFormat : { LT : "HH:mm", L : "DD.MM.YYYY", LL : "YYYY. [gada] D. MMMM", LLL : "YYYY. [gada] D. MMMM, LT", LLLL : "YYYY. [gada] D. MMMM, dddd, LT" }, calendar : { sameDay : '[Šodien pulksten] LT', nextDay : '[Rīt pulksten] LT', nextWeek : 'dddd [pulksten] LT', lastDay : '[Vakar pulksten] LT', lastWeek : '[Pagājušā] dddd [pulksten] LT', sameElse : 'L' }, relativeTime : { future : "%s vēlāk", past : "%s agrāk", s : "dažas sekundes", m : "minūti", mm : relativeTimeWithPlural, h : "stundu", hh : relativeTimeWithPlural, d : "dienu", dd : relativeTimeWithPlural, M : "mēnesi", MM : relativeTimeWithPlural, y : "gadu", yy : relativeTimeWithPlural }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); assets/plugins/moment/lang/fr.js000064400000004013152510437650012722 0ustar00// moment.js language configuration // language : french (fr) // author : John Fischer : https://github.com/jfroffice (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('fr', { months : "janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"), monthsShort : "janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"), weekdays : "dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"), weekdaysShort : "dim._lun._mar._mer._jeu._ven._sam.".split("_"), weekdaysMin : "Di_Lu_Ma_Me_Je_Ve_Sa".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: "[Aujourd'hui à] LT", nextDay: '[Demain à] LT', nextWeek: 'dddd [à] LT', lastDay: '[Hier à] LT', lastWeek: 'dddd [dernier à] LT', sameElse: 'L' }, relativeTime : { future : "dans %s", past : "il y a %s", s : "quelques secondes", m : "une minute", mm : "%d minutes", h : "une heure", hh : "%d heures", d : "un jour", dd : "%d jours", M : "un mois", MM : "%d mois", y : "un an", yy : "%d ans" }, ordinal : function (number) { return number + (number === 1 ? 'er' : ''); }, week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); assets/plugins/moment/lang/uk.js000064400000013436152510437650012743 0ustar00// moment.js language configuration // language : ukrainian (uk) // author : zemlanin : https://github.com/zemlanin // Author : Menelion Elensúle : https://github.com/Oire (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { function plural(word, num) { var forms = word.split('_'); return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); } function relativeTimeWithPlural(number, withoutSuffix, key) { var format = { 'mm': 'хвилина_хвилини_хвилин', 'hh': 'година_години_годин', 'dd': 'день_дні_днів', 'MM': 'місяць_місяці_місяців', 'yy': 'рік_роки_років' }; if (key === 'm') { return withoutSuffix ? 'хвилина' : 'хвилину'; } else if (key === 'h') { return withoutSuffix ? 'година' : 'годину'; } else { return number + ' ' + plural(format[key], +number); } } function monthsCaseReplace(m, format) { var months = { 'nominative': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_'), 'accusative': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_') }, nounCase = (/D[oD]? *MMMM?/).test(format) ? 'accusative' : 'nominative'; return months[nounCase][m.month()]; } function weekdaysCaseReplace(m, format) { var weekdays = { 'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'), 'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'), 'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_') }, nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ? 'accusative' : ((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ? 'genitive' : 'nominative'); return weekdays[nounCase][m.day()]; } function processHoursFunction(str) { return function () { return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT'; }; } moment.lang('uk', { months : monthsCaseReplace, monthsShort : "січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"), weekdays : weekdaysCaseReplace, weekdaysShort : "нд_пн_вт_ср_чт_пт_сб".split("_"), weekdaysMin : "нд_пн_вт_ср_чт_пт_сб".split("_"), longDateFormat : { LT : "HH:mm", L : "DD.MM.YYYY", LL : "D MMMM YYYY р.", LLL : "D MMMM YYYY р., LT", LLLL : "dddd, D MMMM YYYY р., LT" }, calendar : { sameDay: processHoursFunction('[Сьогодні '), nextDay: processHoursFunction('[Завтра '), lastDay: processHoursFunction('[Вчора '), nextWeek: processHoursFunction('[У] dddd ['), lastWeek: function () { switch (this.day()) { case 0: case 3: case 5: case 6: return processHoursFunction('[Минулої] dddd [').call(this); case 1: case 2: case 4: return processHoursFunction('[Минулого] dddd [').call(this); } }, sameElse: 'L' }, relativeTime : { future : "за %s", past : "%s тому", s : "декілька секунд", m : relativeTimeWithPlural, mm : relativeTimeWithPlural, h : "годину", hh : relativeTimeWithPlural, d : "день", dd : relativeTimeWithPlural, M : "місяць", MM : relativeTimeWithPlural, y : "рік", yy : relativeTimeWithPlural }, // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason meridiem : function (hour, minute, isLower) { if (hour < 4) { return "ночі"; } else if (hour < 12) { return "ранку"; } else if (hour < 17) { return "дня"; } else { return "вечора"; } }, ordinal: function (number, period) { switch (period) { case 'M': case 'd': case 'DDD': case 'w': case 'W': return number + '-й'; case 'D': return number + '-го'; default: return number; } }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); assets/plugins/moment/lang/tzm.js000064400000005152152510437650013132 0ustar00// moment.js language configuration // language : Morocco Central Atlas Tamaziɣt (tzm) // author : Abdel Said : https://github.com/abdelsaid (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('tzm', { months : "ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"), monthsShort : "ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"), weekdays : "ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"), weekdaysShort : "ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"), weekdaysMin : "ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: "[ⴰⵙⴷⵅ ⴴ] LT", nextDay: '[ⴰⵙⴽⴰ ⴴ] LT', nextWeek: 'dddd [ⴴ] LT', lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT', lastWeek: 'dddd [ⴴ] LT', sameElse: 'L' }, relativeTime : { future : "ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s", past : "ⵢⴰⵏ %s", s : "ⵉⵎⵉⴽ", m : "ⵎⵉⵏⵓⴺ", mm : "%d ⵎⵉⵏⵓⴺ", h : "ⵙⴰⵄⴰ", hh : "%d ⵜⴰⵙⵙⴰⵄⵉⵏ", d : "ⴰⵙⵙ", dd : "%d oⵙⵙⴰⵏ", M : "ⴰⵢoⵓⵔ", MM : "%d ⵉⵢⵢⵉⵔⵏ", y : "ⴰⵙⴳⴰⵙ", yy : "%d ⵉⵙⴳⴰⵙⵏ" }, week : { dow : 6, // Saturday is the first day of the week. doy : 12 // The week that contains Jan 1st is the first week of the year. } }); })); assets/plugins/moment/lang/hi.js000064400000007403152510437650012721 0ustar00// moment.js language configuration // language : hindi (hi) // author : Mayank Singhal : https://github.com/mayanksinghal (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var symbolMap = { '1': '१', '2': '२', '3': '३', '4': '४', '5': '५', '6': '६', '7': '७', '8': '८', '9': '९', '0': '०' }, numberMap = { '१': '1', '२': '2', '३': '3', '४': '4', '५': '5', '६': '6', '७': '7', '८': '8', '९': '9', '०': '0' }; moment.lang('hi', { months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split("_"), monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split("_"), weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split("_"), weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split("_"), weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split("_"), longDateFormat : { LT : "A h:mm बजे", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY, LT", LLLL : "dddd, D MMMM YYYY, LT" }, calendar : { sameDay : '[आज] LT', nextDay : '[कल] LT', nextWeek : 'dddd, LT', lastDay : '[कल] LT', lastWeek : '[पिछले] dddd, LT', sameElse : 'L' }, relativeTime : { future : "%s में", past : "%s पहले", s : "कुछ ही क्षण", m : "एक मिनट", mm : "%d मिनट", h : "एक घंटा", hh : "%d घंटे", d : "एक दिन", dd : "%d दिन", M : "एक महीने", MM : "%d महीने", y : "एक वर्ष", yy : "%d वर्ष" }, preparse: function (string) { return string.replace(/[१२३४५६७८९०]/g, function (match) { return numberMap[match]; }); }, postformat: function (string) { return string.replace(/\d/g, function (match) { return symbolMap[match]; }); }, // Hindi notation for meridiems are quite fuzzy in practice. While there exists // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi. meridiem : function (hour, minute, isLower) { if (hour < 4) { return "रात"; } else if (hour < 10) { return "सुबह"; } else if (hour < 17) { return "दोपहर"; } else if (hour < 20) { return "शाम"; } else { return "रात"; } }, week : { dow : 0, // Sunday is the first day of the week. doy : 6 // The week that contains Jan 1st is the first week of the year. } }); })); assets/plugins/moment/lang/tzm-la.js000064400000003772152510437650013532 0ustar00// moment.js language configuration // language : Morocco Central Atlas Tamaziɣt in Latin (tzm-la) // author : Abdel Said : https://github.com/abdelsaid (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('tzm-la', { months : "innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"), monthsShort : "innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"), weekdays : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"), weekdaysShort : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"), weekdaysMin : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: "[asdkh g] LT", nextDay: '[aska g] LT', nextWeek: 'dddd [g] LT', lastDay: '[assant g] LT', lastWeek: 'dddd [g] LT', sameElse: 'L' }, relativeTime : { future : "dadkh s yan %s", past : "yan %s", s : "imik", m : "minuḍ", mm : "%d minuḍ", h : "saɛa", hh : "%d tassaɛin", d : "ass", dd : "%d ossan", M : "ayowr", MM : "%d iyyirn", y : "asgas", yy : "%d isgasn" }, week : { dow : 6, // Saturday is the first day of the week. doy : 12 // The week that contains Jan 1st is the first week of the year. } }); })); assets/plugins/moment/lang/is.js000064400000010451152510437650012731 0ustar00// moment.js language configuration // language : icelandic (is) // author : Hinrik Örn Sigurðsson : https://github.com/hinrik (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { function plural(n) { if (n % 100 === 11) { return true; } else if (n % 10 === 1) { return false; } return true; } function translate(number, withoutSuffix, key, isFuture) { var result = number + " "; switch (key) { case 's': return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum'; case 'm': return withoutSuffix ? 'mínúta' : 'mínútu'; case 'mm': if (plural(number)) { return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum'); } else if (withoutSuffix) { return result + 'mínúta'; } return result + 'mínútu'; case 'hh': if (plural(number)) { return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum'); } return result + 'klukkustund'; case 'd': if (withoutSuffix) { return 'dagur'; } return isFuture ? 'dag' : 'degi'; case 'dd': if (plural(number)) { if (withoutSuffix) { return result + 'dagar'; } return result + (isFuture ? 'daga' : 'dögum'); } else if (withoutSuffix) { return result + 'dagur'; } return result + (isFuture ? 'dag' : 'degi'); case 'M': if (withoutSuffix) { return 'mánuður'; } return isFuture ? 'mánuð' : 'mánuði'; case 'MM': if (plural(number)) { if (withoutSuffix) { return result + 'mánuðir'; } return result + (isFuture ? 'mánuði' : 'mánuðum'); } else if (withoutSuffix) { return result + 'mánuður'; } return result + (isFuture ? 'mánuð' : 'mánuði'); case 'y': return withoutSuffix || isFuture ? 'ár' : 'ári'; case 'yy': if (plural(number)) { return result + (withoutSuffix || isFuture ? 'ár' : 'árum'); } return result + (withoutSuffix || isFuture ? 'ár' : 'ári'); } } moment.lang('is', { months : "janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"), monthsShort : "jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"), weekdays : "sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"), weekdaysShort : "sun_mán_þri_mið_fim_fös_lau".split("_"), weekdaysMin : "Su_Má_Þr_Mi_Fi_Fö_La".split("_"), longDateFormat : { LT : "H:mm", L : "DD/MM/YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY [kl.] LT", LLLL : "dddd, D. MMMM YYYY [kl.] LT" }, calendar : { sameDay : '[í dag kl.] LT', nextDay : '[á morgun kl.] LT', nextWeek : 'dddd [kl.] LT', lastDay : '[í gær kl.] LT', lastWeek : '[síðasta] dddd [kl.] LT', sameElse : 'L' }, relativeTime : { future : "eftir %s", past : "fyrir %s síðan", s : translate, m : translate, mm : translate, h : "klukkustund", hh : translate, d : translate, dd : translate, M : translate, MM : translate, y : translate, yy : translate }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); assets/plugins/moment/lang/pt-br.js000064400000004040152510437650013337 0ustar00// moment.js language configuration // language : brazilian portuguese (pt-br) // author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('pt-br', { months : "Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"), monthsShort : "Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"), weekdays : "Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"), weekdaysShort : "Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"), weekdaysMin : "Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D [de] MMMM [de] YYYY", LLL : "D [de] MMMM [de] YYYY LT", LLLL : "dddd, D [de] MMMM [de] YYYY LT" }, calendar : { sameDay: '[Hoje às] LT', nextDay: '[Amanhã às] LT', nextWeek: 'dddd [às] LT', lastDay: '[Ontem às] LT', lastWeek: function () { return (this.day() === 0 || this.day() === 6) ? '[Último] dddd [às] LT' : // Saturday + Sunday '[Última] dddd [às] LT'; // Monday - Friday }, sameElse: 'L' }, relativeTime : { future : "em %s", past : "%s atrás", s : "segundos", m : "um minuto", mm : "%d minutos", h : "uma hora", hh : "%d horas", d : "um dia", dd : "%d dias", M : "um mês", MM : "%d meses", y : "um ano", yy : "%d anos" }, ordinal : '%dº' }); })); assets/plugins/moment/lang/nb.js000064400000004015152510437650012714 0ustar00// moment.js language configuration // language : norwegian bokmål (nb) // authors : Espen Hovlandsdal : https://github.com/rexxars // Sigurd Gartmann : https://github.com/sigurdga (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('nb', { months : "januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"), monthsShort : "jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"), weekdays : "søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"), weekdaysShort : "sø._ma._ti._on._to._fr._lø.".split("_"), weekdaysMin : "sø_ma_ti_on_to_fr_lø".split("_"), longDateFormat : { LT : "H.mm", L : "DD.MM.YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY [kl.] LT", LLLL : "dddd D. MMMM YYYY [kl.] LT" }, calendar : { sameDay: '[i dag kl.] LT', nextDay: '[i morgen kl.] LT', nextWeek: 'dddd [kl.] LT', lastDay: '[i går kl.] LT', lastWeek: '[forrige] dddd [kl.] LT', sameElse: 'L' }, relativeTime : { future : "om %s", past : "for %s siden", s : "noen sekunder", m : "ett minutt", mm : "%d minutter", h : "en time", hh : "%d timer", d : "en dag", dd : "%d dager", M : "en måned", MM : "%d måneder", y : "ett år", yy : "%d år" }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); assets/plugins/moment/lang/nn.js000064400000003663152510437650012740 0ustar00// moment.js language configuration // language : norwegian nynorsk (nn) // author : https://github.com/mechuwind (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('nn', { months : "januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"), monthsShort : "jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"), weekdays : "sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"), weekdaysShort : "sun_mån_tys_ons_tor_fre_lau".split("_"), weekdaysMin : "su_må_ty_on_to_fr_lø".split("_"), longDateFormat : { LT : "HH:mm", L : "DD.MM.YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: '[I dag klokka] LT', nextDay: '[I morgon klokka] LT', nextWeek: 'dddd [klokka] LT', lastDay: '[I går klokka] LT', lastWeek: '[Føregående] dddd [klokka] LT', sameElse: 'L' }, relativeTime : { future : "om %s", past : "for %s siden", s : "noen sekund", m : "ett minutt", mm : "%d minutt", h : "en time", hh : "%d timar", d : "en dag", dd : "%d dagar", M : "en månad", MM : "%d månader", y : "ett år", yy : "%d år" }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); assets/plugins/moment/lang/ro.js000064400000003676152510437650012751 0ustar00// moment.js language configuration // language : romanian (ro) // author : Vlad Gurdiga : https://github.com/gurdiga // author : Valentin Agachi : https://github.com/avaly (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('ro', { months : "Ianuarie_Februarie_Martie_Aprilie_Mai_Iunie_Iulie_August_Septembrie_Octombrie_Noiembrie_Decembrie".split("_"), monthsShort : "Ian_Feb_Mar_Apr_Mai_Iun_Iul_Aug_Sep_Oct_Noi_Dec".split("_"), weekdays : "Duminică_Luni_Marţi_Miercuri_Joi_Vineri_Sâmbătă".split("_"), weekdaysShort : "Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"), weekdaysMin : "Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"), longDateFormat : { LT : "H:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY H:mm", LLLL : "dddd, D MMMM YYYY H:mm" }, calendar : { sameDay: "[azi la] LT", nextDay: '[mâine la] LT', nextWeek: 'dddd [la] LT', lastDay: '[ieri la] LT', lastWeek: '[fosta] dddd [la] LT', sameElse: 'L' }, relativeTime : { future : "peste %s", past : "%s în urmă", s : "câteva secunde", m : "un minut", mm : "%d minute", h : "o oră", hh : "%d ore", d : "o zi", dd : "%d zile", M : "o lună", MM : "%d luni", y : "un an", yy : "%d ani" }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); assets/plugins/moment/lang/cs.js000064400000013223152510437650012723 0ustar00// moment.js language configuration // language : czech (cs) // author : petrbela : https://github.com/petrbela (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var months = "leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"), monthsShort = "led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"); function plural(n) { return (n > 1) && (n < 5) && (~~(n / 10) !== 1); } function translate(number, withoutSuffix, key, isFuture) { var result = number + " "; switch (key) { case 's': // a few seconds / in a few seconds / a few seconds ago return (withoutSuffix || isFuture) ? 'pár vteřin' : 'pár vteřinami'; case 'm': // a minute / in a minute / a minute ago return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou'); case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'minuty' : 'minut'); } else { return result + 'minutami'; } break; case 'h': // an hour / in an hour / an hour ago return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou'); case 'hh': // 9 hours / in 9 hours / 9 hours ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'hodiny' : 'hodin'); } else { return result + 'hodinami'; } break; case 'd': // a day / in a day / a day ago return (withoutSuffix || isFuture) ? 'den' : 'dnem'; case 'dd': // 9 days / in 9 days / 9 days ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'dny' : 'dní'); } else { return result + 'dny'; } break; case 'M': // a month / in a month / a month ago return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem'; case 'MM': // 9 months / in 9 months / 9 months ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'měsíce' : 'měsíců'); } else { return result + 'měsíci'; } break; case 'y': // a year / in a year / a year ago return (withoutSuffix || isFuture) ? 'rok' : 'rokem'; case 'yy': // 9 years / in 9 years / 9 years ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'roky' : 'let'); } else { return result + 'lety'; } break; } } moment.lang('cs', { months : months, monthsShort : monthsShort, monthsParse : (function (months, monthsShort) { var i, _monthsParse = []; for (i = 0; i < 12; i++) { // use custom parser to solve problem with July (červenec) _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i'); } return _monthsParse; }(months, monthsShort)), weekdays : "neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"), weekdaysShort : "ne_po_út_st_čt_pá_so".split("_"), weekdaysMin : "ne_po_út_st_čt_pá_so".split("_"), longDateFormat : { LT: "H:mm", L : "DD.MM.YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY LT", LLLL : "dddd D. MMMM YYYY LT" }, calendar : { sameDay: "[dnes v] LT", nextDay: '[zítra v] LT', nextWeek: function () { switch (this.day()) { case 0: return '[v neděli v] LT'; case 1: case 2: return '[v] dddd [v] LT'; case 3: return '[ve středu v] LT'; case 4: return '[ve čtvrtek v] LT'; case 5: return '[v pátek v] LT'; case 6: return '[v sobotu v] LT'; } }, lastDay: '[včera v] LT', lastWeek: function () { switch (this.day()) { case 0: return '[minulou neděli v] LT'; case 1: case 2: return '[minulé] dddd [v] LT'; case 3: return '[minulou středu v] LT'; case 4: case 5: return '[minulý] dddd [v] LT'; case 6: return '[minulou sobotu v] LT'; } }, sameElse: "L" }, relativeTime : { future : "za %s", past : "před %s", s : translate, m : translate, mm : translate, h : translate, hh : translate, d : translate, dd : translate, M : translate, MM : translate, y : translate, yy : translate }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); assets/plugins/moment/lang/et.js000064400000004221152510437650012724 0ustar00// moment.js language configuration // language : estonian (et) // author : Henry Kehlmann : https://github.com/madhenry (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { function translateSeconds(number, withoutSuffix, key, isFuture) { return (isFuture || withoutSuffix) ? 'paari sekundi' : 'paar sekundit'; } moment.lang('et', { months : "jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"), monthsShort : "jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"), weekdays : "pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"), weekdaysShort : "P_E_T_K_N_R_L".split("_"), weekdaysMin : "P_E_T_K_N_R_L".split("_"), longDateFormat : { LT : "H:mm", L : "DD.MM.YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY LT", LLLL : "dddd, D. MMMM YYYY LT" }, calendar : { sameDay : '[Täna,] LT', nextDay : '[Homme,] LT', nextWeek : '[Järgmine] dddd LT', lastDay : '[Eile,] LT', lastWeek : '[Eelmine] dddd LT', sameElse : 'L' }, relativeTime : { future : "%s pärast", past : "%s tagasi", s : translateSeconds, m : "minut", mm : "%d minutit", h : "tund", hh : "%d tundi", d : "päev", dd : "%d päeva", M : "kuu", MM : "%d kuud", y : "aasta", yy : "%d aastat" }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); assets/plugins/moment/lang/fa.js000064400000006401152510437650012704 0ustar00// moment.js language configuration // language : Persian Language // author : Ebrahim Byagowi : https://github.com/ebraminio (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var symbolMap = { '1': '۱', '2': '۲', '3': '۳', '4': '۴', '5': '۵', '6': '۶', '7': '۷', '8': '۸', '9': '۹', '0': '۰' }, numberMap = { '۱': '1', '۲': '2', '۳': '3', '۴': '4', '۵': '5', '۶': '6', '۷': '7', '۸': '8', '۹': '9', '۰': '0' }; moment.lang('fa', { months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'), longDateFormat : { LT : 'HH:mm', L : 'DD/MM/YYYY', LL : 'D MMMM YYYY', LLL : 'D MMMM YYYY LT', LLLL : 'dddd, D MMMM YYYY LT' }, meridiem : function (hour, minute, isLower) { if (hour < 12) { return "قبل از ظهر"; } else { return "بعد از ظهر"; } }, calendar : { sameDay : '[امروز ساعت] LT', nextDay : '[فردا ساعت] LT', nextWeek : 'dddd [ساعت] LT', lastDay : '[دیروز ساعت] LT', lastWeek : 'dddd [پیش] [ساعت] LT', sameElse : 'L' }, relativeTime : { future : 'در %s', past : '%s پیش', s : 'چندین ثانیه', m : 'یک دقیقه', mm : '%d دقیقه', h : 'یک ساعت', hh : '%d ساعت', d : 'یک روز', dd : '%d روز', M : 'یک ماه', MM : '%d ماه', y : 'یک سال', yy : '%d سال' }, preparse: function (string) { return string.replace(/[۰-۹]/g, function (match) { return numberMap[match]; }).replace(/،/g, ','); }, postformat: function (string) { return string.replace(/\d/g, function (match) { return symbolMap[match]; }).replace(/,/g, '،'); }, ordinal : '%dم', week : { dow : 6, // Saturday is the first day of the week. doy : 12 // The week that contains Jan 1st is the first week of the year. } }); })); assets/plugins/moment/lang/da.js000064400000003645152510437650012711 0ustar00// moment.js language configuration // language : danish (da) // author : Ulrik Nielsen : https://github.com/mrbase (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('da', { months : "januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"), monthsShort : "jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"), weekdays : "søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"), weekdaysShort : "søn_man_tir_ons_tor_fre_lør".split("_"), weekdaysMin : "sø_ma_ti_on_to_fr_lø".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D. MMMM, YYYY LT" }, calendar : { sameDay : '[I dag kl.] LT', nextDay : '[I morgen kl.] LT', nextWeek : 'dddd [kl.] LT', lastDay : '[I går kl.] LT', lastWeek : '[sidste] dddd [kl] LT', sameElse : 'L' }, relativeTime : { future : "om %s", past : "%s siden", s : "få sekunder", m : "et minut", mm : "%d minutter", h : "en time", hh : "%d timer", d : "en dag", dd : "%d dage", M : "en måned", MM : "%d måneder", y : "et år", yy : "%d år" }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); assets/plugins/moment/lang/zh-cn.js000064400000005324152510437650013340 0ustar00// moment.js language configuration // language : chinese // author : suupic : https://github.com/suupic (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('zh-cn', { months : "一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"), monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), weekdays : "星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"), weekdaysShort : "周日_周一_周二_周三_周四_周五_周六".split("_"), weekdaysMin : "日_一_二_三_四_五_六".split("_"), longDateFormat : { LT : "Ah点mm", L : "YYYY年MMMD日", LL : "YYYY年MMMD日", LLL : "YYYY年MMMD日LT", LLLL : "YYYY年MMMD日ddddLT", l : "YYYY年MMMD日", ll : "YYYY年MMMD日", lll : "YYYY年MMMD日LT", llll : "YYYY年MMMD日ddddLT" }, meridiem : function (hour, minute, isLower) { var hm = hour * 100 + minute; if (hm < 900) { return "早上"; } else if (hm < 1130) { return "上午"; } else if (hm < 1230) { return "中午"; } else if (hm < 1800) { return "下午"; } else { return "晚上"; } }, calendar : { sameDay : '[今天]LT', nextDay : '[明天]LT', nextWeek : '[下]ddddLT', lastDay : '[昨天]LT', lastWeek : '[上]ddddLT', sameElse : 'L' }, ordinal : function (number, period) { switch (period) { case "d" : case "D" : case "DDD" : return number + "日"; case "M" : return number + "月"; case "w" : case "W" : return number + "周"; default : return number; } }, relativeTime : { future : "%s内", past : "%s前", s : "几秒", m : "1分钟", mm : "%d分钟", h : "1小时", hh : "%d小时", d : "1天", dd : "%d天", M : "1个月", MM : "%d个月", y : "1年", yy : "%d年" } }); })); assets/plugins/moment/lang/hr.js000064400000010703152510437650012727 0ustar00// moment.js language configuration // language : hrvatski (hr) // author : Bojan Marković : https://github.com/bmarkovic // based on (sl) translation by Robert Sedovšek (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { function translate(number, withoutSuffix, key) { var result = number + " "; switch (key) { case 'm': return withoutSuffix ? 'jedna minuta' : 'jedne minute'; case 'mm': if (number === 1) { result += 'minuta'; } else if (number === 2 || number === 3 || number === 4) { result += 'minute'; } else { result += 'minuta'; } return result; case 'h': return withoutSuffix ? 'jedan sat' : 'jednog sata'; case 'hh': if (number === 1) { result += 'sat'; } else if (number === 2 || number === 3 || number === 4) { result += 'sata'; } else { result += 'sati'; } return result; case 'dd': if (number === 1) { result += 'dan'; } else { result += 'dana'; } return result; case 'MM': if (number === 1) { result += 'mjesec'; } else if (number === 2 || number === 3 || number === 4) { result += 'mjeseca'; } else { result += 'mjeseci'; } return result; case 'yy': if (number === 1) { result += 'godina'; } else if (number === 2 || number === 3 || number === 4) { result += 'godine'; } else { result += 'godina'; } return result; } } moment.lang('hr', { months : "sječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_"), monthsShort : "sje._vel._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"), weekdays : "nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"), weekdaysShort : "ned._pon._uto._sri._čet._pet._sub.".split("_"), weekdaysMin : "ne_po_ut_sr_če_pe_su".split("_"), longDateFormat : { LT : "H:mm", L : "DD. MM. YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY LT", LLLL : "dddd, D. MMMM YYYY LT" }, calendar : { sameDay : '[danas u] LT', nextDay : '[sutra u] LT', nextWeek : function () { switch (this.day()) { case 0: return '[u] [nedjelju] [u] LT'; case 3: return '[u] [srijedu] [u] LT'; case 6: return '[u] [subotu] [u] LT'; case 1: case 2: case 4: case 5: return '[u] dddd [u] LT'; } }, lastDay : '[jučer u] LT', lastWeek : function () { switch (this.day()) { case 0: case 3: return '[prošlu] dddd [u] LT'; case 6: return '[prošle] [subote] [u] LT'; case 1: case 2: case 4: case 5: return '[prošli] dddd [u] LT'; } }, sameElse : 'L' }, relativeTime : { future : "za %s", past : "prije %s", s : "par sekundi", m : translate, mm : translate, h : translate, hh : translate, d : "dan", dd : translate, M : "mjesec", MM : translate, y : "godinu", yy : translate }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); assets/plugins/moment/lang/ca.js000064400000004615152510437650012706 0ustar00// moment.js language configuration // language : catalan (ca) // author : Juan G. Hurtado : https://github.com/juanghurtado (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('ca', { months : "Gener_Febrer_Març_Abril_Maig_Juny_Juliol_Agost_Setembre_Octubre_Novembre_Desembre".split("_"), monthsShort : "Gen._Febr._Mar._Abr._Mai._Jun._Jul._Ag._Set._Oct._Nov._Des.".split("_"), weekdays : "Diumenge_Dilluns_Dimarts_Dimecres_Dijous_Divendres_Dissabte".split("_"), weekdaysShort : "Dg._Dl._Dt._Dc._Dj._Dv._Ds.".split("_"), weekdaysMin : "Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"), longDateFormat : { LT : "H:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay : function () { return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; }, nextDay : function () { return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; }, nextWeek : function () { return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; }, lastDay : function () { return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; }, lastWeek : function () { return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; }, sameElse : 'L' }, relativeTime : { future : "en %s", past : "fa %s", s : "uns segons", m : "un minut", mm : "%d minuts", h : "una hora", hh : "%d hores", d : "un dia", dd : "%d dies", M : "un mes", MM : "%d mesos", y : "un any", yy : "%d anys" }, ordinal : '%dº', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); assets/plugins/moment/lang/hu.js000064400000006661152510437650012742 0ustar00// moment.js language configuration // language : hungarian (hu) // author : Adam Brunner : https://github.com/adambrunner (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' '); function translate(number, withoutSuffix, key, isFuture) { var num = number, suffix; switch (key) { case 's': return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce'; case 'm': return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce'); case 'mm': return num + (isFuture || withoutSuffix ? ' perc' : ' perce'); case 'h': return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája'); case 'hh': return num + (isFuture || withoutSuffix ? ' óra' : ' órája'); case 'd': return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja'); case 'dd': return num + (isFuture || withoutSuffix ? ' nap' : ' napja'); case 'M': return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); case 'MM': return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); case 'y': return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve'); case 'yy': return num + (isFuture || withoutSuffix ? ' év' : ' éve'); } return ''; } function week(isFuture) { return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]'; } moment.lang('hu', { months : "január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"), monthsShort : "jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"), weekdays : "vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"), weekdaysShort : "v_h_k_sze_cs_p_szo".split("_"), longDateFormat : { LT : "H:mm", L : "YYYY.MM.DD.", LL : "YYYY. MMMM D.", LLL : "YYYY. MMMM D., LT", LLLL : "YYYY. MMMM D., dddd LT" }, calendar : { sameDay : '[ma] LT[-kor]', nextDay : '[holnap] LT[-kor]', nextWeek : function () { return week.call(this, true); }, lastDay : '[tegnap] LT[-kor]', lastWeek : function () { return week.call(this, false); }, sameElse : 'L' }, relativeTime : { future : "%s múlva", past : "%s", s : translate, m : translate, mm : translate, h : translate, hh : translate, d : translate, dd : translate, M : translate, MM : translate, y : translate, yy : translate }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); assets/plugins/moment/lang/ml.js000064400000005707152510437650012736 0ustar00// moment.js language configuration // language : malayalam (ml) // author : Floyd Pink : https://github.com/floydpink (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('ml', { months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split("_"), monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split("_"), weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split("_"), weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split("_"), weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split("_"), longDateFormat : { LT : "A h:mm -നു", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY, LT", LLLL : "dddd, D MMMM YYYY, LT" }, calendar : { sameDay : '[ഇന്ന്] LT', nextDay : '[നാളെ] LT', nextWeek : 'dddd, LT', lastDay : '[ഇന്നലെ] LT', lastWeek : '[കഴിഞ്ഞ] dddd, LT', sameElse : 'L' }, relativeTime : { future : "%s കഴിഞ്ഞ്", past : "%s മുൻപ്", s : "അൽപ നിമിഷങ്ങൾ", m : "ഒരു മിനിറ്റ്", mm : "%d മിനിറ്റ്", h : "ഒരു മണിക്കൂർ", hh : "%d മണിക്കൂർ", d : "ഒരു ദിവസം", dd : "%d ദിവസം", M : "ഒരു മാസം", MM : "%d മാസം", y : "ഒരു വർഷം", yy : "%d വർഷം" }, meridiem : function (hour, minute, isLower) { if (hour < 4) { return "രാത്രി"; } else if (hour < 12) { return "രാവിലെ"; } else if (hour < 17) { return "ഉച്ച കഴിഞ്ഞ്"; } else if (hour < 20) { return "വൈകുന്നേരം"; } else { return "രാത്രി"; } } }); })); assets/plugins/moment/lang/eu.js000064400000004233152510437650012730 0ustar00// moment.js language configuration // language : euskara (eu) // author : Eneko Illarramendi : https://github.com/eillarra (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('eu', { months : "urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"), monthsShort : "urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"), weekdays : "igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"), weekdaysShort : "ig._al._ar._az._og._ol._lr.".split("_"), weekdaysMin : "ig_al_ar_az_og_ol_lr".split("_"), longDateFormat : { LT : "HH:mm", L : "YYYY-MM-DD", LL : "YYYY[ko] MMMM[ren] D[a]", LLL : "YYYY[ko] MMMM[ren] D[a] LT", LLLL : "dddd, YYYY[ko] MMMM[ren] D[a] LT", l : "YYYY-M-D", ll : "YYYY[ko] MMM D[a]", lll : "YYYY[ko] MMM D[a] LT", llll : "ddd, YYYY[ko] MMM D[a] LT" }, calendar : { sameDay : '[gaur] LT[etan]', nextDay : '[bihar] LT[etan]', nextWeek : 'dddd LT[etan]', lastDay : '[atzo] LT[etan]', lastWeek : '[aurreko] dddd LT[etan]', sameElse : 'L' }, relativeTime : { future : "%s barru", past : "duela %s", s : "segundo batzuk", m : "minutu bat", mm : "%d minutu", h : "ordu bat", hh : "%d ordu", d : "egun bat", dd : "%d egun", M : "hilabete bat", MM : "%d hilabete", y : "urte bat", yy : "%d urte" }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); assets/plugins/moment/lang/ko.js000064400000003573152510437650012736 0ustar00// moment.js language configuration // language : korean (ko) // author : Kyungwook, Park : https://github.com/kyungw00k (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('ko', { months : "1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"), monthsShort : "1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"), weekdays : "일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"), weekdaysShort : "일_월_화_수_목_금_토".split("_"), weekdaysMin : "일_월_화_수_목_금_토".split("_"), longDateFormat : { LT : "A h시 mm분", L : "YYYY.MM.DD", LL : "YYYY년 MMMM D일", LLL : "YYYY년 MMMM D일 LT", LLLL : "YYYY년 MMMM D일 dddd LT" }, meridiem : function (hour, minute, isUpper) { return hour < 12 ? '오전' : '오후'; }, calendar : { sameDay : '오늘 LT', nextDay : '내일 LT', nextWeek : 'dddd LT', lastDay : '어제 LT', lastWeek : '지난주 dddd LT', sameElse : 'L' }, relativeTime : { future : "%s 후", past : "%s 전", s : "몇초", ss : "%d초", m : "일분", mm : "%d분", h : "한시간", hh : "%d시간", d : "하루", dd : "%d일", M : "한달", MM : "%d달", y : "일년", yy : "%d년" }, ordinal : '%d일' }); })); assets/plugins/moment/lang/ar.js000064400000005170152510437660012723 0ustar00// moment.js language configuration // language : Arabic (ar) // author : Abdel Said : https://github.com/abdelsaid // changes in months, weekdays : Ahmed Elkhatib (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('ar', { months : "يناير/ كانون الثاني_فبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"), monthsShort : "يناير/ كانون الثاني_فبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"), weekdays : "الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"), weekdaysShort : "الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"), weekdaysMin : "ح_ن_ث_ر_خ_ج_س".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: "[اليوم على الساعة] LT", nextDay: '[غدا على الساعة] LT', nextWeek: 'dddd [على الساعة] LT', lastDay: '[أمس على الساعة] LT', lastWeek: 'dddd [على الساعة] LT', sameElse: 'L' }, relativeTime : { future : "في %s", past : "منذ %s", s : "ثوان", m : "دقيقة", mm : "%d دقائق", h : "ساعة", hh : "%d ساعات", d : "يوم", dd : "%d أيام", M : "شهر", MM : "%d أشهر", y : "سنة", yy : "%d سنوات" }, week : { dow : 6, // Saturday is the first day of the week. doy : 12 // The week that contains Jan 1st is the first week of the year. } }); })); assets/plugins/moment/lang/mr.js000064400000007346152510437660012746 0ustar00// moment.js language configuration // language : Marathi (mr) // author : Harshad Kale : https://github.com/kalehv (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var symbolMap = { '1': '१', '2': '२', '3': '३', '4': '४', '5': '५', '6': '६', '7': '७', '8': '८', '9': '९', '0': '०' }, numberMap = { '१': '1', '२': '2', '३': '3', '४': '4', '५': '5', '६': '6', '७': '7', '८': '8', '९': '9', '०': '0' }; moment.lang('mr', { months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split("_"), monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split("_"), weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split("_"), weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split("_"), weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split("_"), longDateFormat : { LT : "A h:mm वाजता", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY, LT", LLLL : "dddd, D MMMM YYYY, LT" }, calendar : { sameDay : '[आज] LT', nextDay : '[उद्या] LT', nextWeek : 'dddd, LT', lastDay : '[काल] LT', lastWeek: '[मागील] dddd, LT', sameElse : 'L' }, relativeTime : { future : "%s नंतर", past : "%s पूर्वी", s : "सेकंद", m: "एक मिनिट", mm: "%d मिनिटे", h : "एक तास", hh : "%d तास", d : "एक दिवस", dd : "%d दिवस", M : "एक महिना", MM : "%d महिने", y : "एक वर्ष", yy : "%d वर्षे" }, preparse: function (string) { return string.replace(/[१२३४५६७८९०]/g, function (match) { return numberMap[match]; }); }, postformat: function (string) { return string.replace(/\d/g, function (match) { return symbolMap[match]; }); }, meridiem: function (hour, minute, isLower) { if (hour < 4) { return "रात्री"; } else if (hour < 10) { return "सकाळी"; } else if (hour < 17) { return "दुपारी"; } else if (hour < 20) { return "सायंकाळी"; } else { return "रात्री"; } }, week : { dow : 0, // Sunday is the first day of the week. doy : 6 // The week that contains Jan 1st is the first week of the year. } }); })); assets/plugins/moment/lang/id.js000064400000004526152510437660012721 0ustar00// moment.js language configuration // language : Bahasa Indonesia (id) // author : Mohammad Satrio Utomo : https://github.com/tyok // reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('id', { months : "Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"), monthsShort : "Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"), weekdays : "Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"), weekdaysShort : "Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"), weekdaysMin : "Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"), longDateFormat : { LT : "HH.mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY [pukul] LT", LLLL : "dddd, D MMMM YYYY [pukul] LT" }, meridiem : function (hours, minutes, isLower) { if (hours < 11) { return 'pagi'; } else if (hours < 15) { return 'siang'; } else if (hours < 19) { return 'sore'; } else { return 'malam'; } }, calendar : { sameDay : '[Hari ini pukul] LT', nextDay : '[Besok pukul] LT', nextWeek : 'dddd [pukul] LT', lastDay : '[Kemarin pukul] LT', lastWeek : 'dddd [lalu pukul] LT', sameElse : 'L' }, relativeTime : { future : "dalam %s", past : "%s yang lalu", s : "beberapa detik", m : "semenit", mm : "%d menit", h : "sejam", hh : "%d jam", d : "sehari", dd : "%d hari", M : "sebulan", MM : "%d bulan", y : "setahun", yy : "%d tahun" }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); assets/plugins/moment/lang/zh-tw.js000064400000005360152510437660013373 0ustar00// moment.js language configuration // language : traditional chinese (zh-tw) // author : Ben : https://github.com/ben-lin (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('zh-tw', { months : "一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"), monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), weekdays : "星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"), weekdaysShort : "週日_週一_週二_週三_週四_週五_週六".split("_"), weekdaysMin : "日_一_二_三_四_五_六".split("_"), longDateFormat : { LT : "Ah點mm", L : "YYYY年MMMD日", LL : "YYYY年MMMD日", LLL : "YYYY年MMMD日LT", LLLL : "YYYY年MMMD日ddddLT", l : "YYYY年MMMD日", ll : "YYYY年MMMD日", lll : "YYYY年MMMD日LT", llll : "YYYY年MMMD日ddddLT" }, meridiem : function (hour, minute, isLower) { var hm = hour * 100 + minute; if (hm < 900) { return "早上"; } else if (hm < 1130) { return "上午"; } else if (hm < 1230) { return "中午"; } else if (hm < 1800) { return "下午"; } else { return "晚上"; } }, calendar : { sameDay : '[今天]LT', nextDay : '[明天]LT', nextWeek : '[下]ddddLT', lastDay : '[昨天]LT', lastWeek : '[上]ddddLT', sameElse : 'L' }, ordinal : function (number, period) { switch (period) { case "d" : case "D" : case "DDD" : return number + "日"; case "M" : return number + "月"; case "w" : case "W" : return number + "週"; default : return number; } }, relativeTime : { future : "%s內", past : "%s前", s : "幾秒", m : "一分鐘", mm : "%d分鐘", h : "一小時", hh : "%d小時", d : "一天", dd : "%d天", M : "一個月", MM : "%d個月", y : "一年", yy : "%d年" } }); })); assets/plugins/moment/lang/th.js000064400000005472152510437660012741 0ustar00// moment.js language configuration // language : thai (th) // author : Kridsada Thanabulpong : https://github.com/sirn (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('th', { months : "มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"), monthsShort : "มกรา_กุมภา_มีนา_เมษา_พฤษภา_มิถุนา_กรกฎา_สิงหา_กันยา_ตุลา_พฤศจิกา_ธันวา".split("_"), weekdays : "อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"), weekdaysShort : "อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"), // yes, three characters difference weekdaysMin : "อา._จ._อ._พ._พฤ._ศ._ส.".split("_"), longDateFormat : { LT : "H นาฬิกา m นาที", L : "YYYY/MM/DD", LL : "D MMMM YYYY", LLL : "D MMMM YYYY เวลา LT", LLLL : "วันddddที่ D MMMM YYYY เวลา LT" }, meridiem : function (hour, minute, isLower) { if (hour < 12) { return "ก่อนเที่ยง"; } else { return "หลังเที่ยง"; } }, calendar : { sameDay : '[วันนี้ เวลา] LT', nextDay : '[พรุ่งนี้ เวลา] LT', nextWeek : 'dddd[หน้า เวลา] LT', lastDay : '[เมื่อวานนี้ เวลา] LT', lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT', sameElse : 'L' }, relativeTime : { future : "อีก %s", past : "%sที่แล้ว", s : "ไม่กี่วินาที", m : "1 นาที", mm : "%d นาที", h : "1 ชั่วโมง", hh : "%d ชั่วโมง", d : "1 วัน", dd : "%d วัน", M : "1 เดือน", MM : "%d เดือน", y : "1 ปี", yy : "%d ปี" } }); })); assets/plugins/moment/lang/el.js000064400000006642152510437660012726 0ustar00// moment.js language configuration // language : modern greek (el) // author : Aggelos Karalias : https://github.com/mehiel (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('el', { monthsNominativeEl : "Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"), monthsGenitiveEl : "Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"), months : function (momentToFormat, format) { if (/D/.test(format.substring(0, format.indexOf("MMMM")))) { // if there is a day number before 'MMMM' return this._monthsGenitiveEl[momentToFormat.month()]; } else { return this._monthsNominativeEl[momentToFormat.month()]; } }, monthsShort : "Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"), weekdays : "Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"), weekdaysShort : "Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"), weekdaysMin : "Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"), meridiem : function (hours, minutes, isLower) { if (hours > 11) { return isLower ? 'μμ' : 'ΜΜ'; } else { return isLower ? 'πμ' : 'ΠΜ'; } }, longDateFormat : { LT : "h:mm A", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendarEl : { sameDay : '[Σήμερα {}] LT', nextDay : '[Αύριο {}] LT', nextWeek : 'dddd [{}] LT', lastDay : '[Χθες {}] LT', lastWeek : '[την προηγούμενη] dddd [{}] LT', sameElse : 'L' }, calendar : function (key, mom) { var output = this._calendarEl[key], hours = mom && mom.hours(); return output.replace("{}", (hours % 12 === 1 ? "στη" : "στις")); }, relativeTime : { future : "σε %s", past : "%s πριν", s : "δευτερόλεπτα", m : "ένα λεπτό", mm : "%d λεπτά", h : "μία ώρα", hh : "%d ώρες", d : "μία μέρα", dd : "%d μέρες", M : "ένας μήνας", MM : "%d μήνες", y : "ένας χρόνος", yy : "%d χρόνια" }, ordinal : function (number) { return number + 'η'; }, week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4st is the first week of the year. } }); })); assets/plugins/moment/lang/ka.js000064400000010644152510437660012716 0ustar00// moment.js language configuration // language : Georgian (ka) // author : Irakli Janiashvili : https://github.com/irakli-janiashvili (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { function monthsCaseReplace(m, format) { var months = { 'nominative': 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'), 'accusative': 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_') }, nounCase = (/D[oD] *MMMM?/).test(format) ? 'accusative' : 'nominative'; return months[nounCase][m.month()]; } function weekdaysCaseReplace(m, format) { var weekdays = { 'nominative': 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'), 'accusative': 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_') }, nounCase = (/(წინა|შემდეგ)/).test(format) ? 'accusative' : 'nominative'; return weekdays[nounCase][m.day()]; } moment.lang('ka', { months : monthsCaseReplace, monthsShort : "იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"), weekdays : weekdaysCaseReplace, weekdaysShort : "კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"), weekdaysMin : "კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"), longDateFormat : { LT : "h:mm A", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendar : { sameDay : '[დღეს] LT[-ზე]', nextDay : '[ხვალ] LT[-ზე]', lastDay : '[გუშინ] LT[-ზე]', nextWeek : '[შემდეგ] dddd LT[-ზე]', lastWeek : '[წინა] dddd LT-ზე', sameElse : 'L' }, relativeTime : { future : function (s) { return (/(წამი|წუთი|საათი|წელი)/).test(s) ? s.replace(/ი$/, "ში") : s + "ში"; }, past : function (s) { if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) { return s.replace(/(ი|ე)$/, "ის წინ"); } if ((/წელი/).test(s)) { return s.replace(/წელი$/, "წლის წინ"); } }, s : "რამდენიმე წამი", m : "წუთი", mm : "%d წუთი", h : "საათი", hh : "%d საათი", d : "დღე", dd : "%d დღე", M : "თვე", MM : "%d თვე", y : "წელი", yy : "%d წელი" }, ordinal : function (number) { if (number === 0) { return number; } if (number === 1) { return number + "-ლი"; } if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) { return "მე-" + number; } return number + "-ე"; }, week : { dow : 1, doy : 7 } }); })); assets/plugins/moment/lang/vn.js000064400000003355152510437660012747 0ustar00// moment.js language configuration // language : vietnamese (vn) // author : Bang Nguyen : https://github.com/bangnk require('../moment').lang('vn', { months : "tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"), monthsShort : "Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"), weekdays : "chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"), weekdaysShort : "CN_T2_T3_T4_T5_T6_T7".split("_"), weekdaysMin : "CN_T2_T3_T4_T5_T6_T7".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM [năm] YYYY", LLL : "D MMMM [năm] YYYY LT", LLLL : "dddd, D MMMM [năm] YYYY LT", l : "DD/M/YYYY", ll : "D MMM YYYY", lll : "D MMM YYYY LT", llll : "ddd, D MMM YYYY LT" }, calendar : { sameDay: "[Hôm nay lúc] LT", nextDay: '[Ngày mai lúc] LT', nextWeek: 'dddd [tuần tới lúc] LT', lastDay: '[Hôm qua lúc] LT', lastWeek: 'dddd [tuần rồi lúc] LT', sameElse: 'L' }, relativeTime : { future : "%s tới", past : "%s trước", s : "vài giây", m : "một phút", mm : "%d phút", h : "một giờ", hh : "%d giờ", d : "một ngày", dd : "%d ngày", M : "một tháng", MM : "%d tháng", y : "một năm", yy : "%d năm" }, ordinal : function (number) { return number; }, week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); assets/plugins/moment/lang/it.js000064400000004063152510437660012735 0ustar00// moment.js language configuration // language : italian (it) // author : Lorenzo : https://github.com/aliem // author: Mattia Larentis: https://github.com/nostalgiaz (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('it', { months : "Gennaio_Febbraio_Marzo_Aprile_Maggio_Giugno_Luglio_Agosto_Settembre_Ottobre_Novembre_Dicembre".split("_"), monthsShort : "Gen_Feb_Mar_Apr_Mag_Giu_Lug_Ago_Set_Ott_Nov_Dic".split("_"), weekdays : "Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato".split("_"), weekdaysShort : "Dom_Lun_Mar_Mer_Gio_Ven_Sab".split("_"), weekdaysMin : "D_L_Ma_Me_G_V_S".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendar : { sameDay: '[Oggi alle] LT', nextDay: '[Domani alle] LT', nextWeek: 'dddd [alle] LT', lastDay: '[Ieri alle] LT', lastWeek: '[lo scorso] dddd [alle] LT', sameElse: 'L' }, relativeTime : { future : function (s) { return ((/^[0-9].+$/).test(s) ? "tra" : "in") + " " + s; }, past : "%s fa", s : "secondi", m : "un minuto", mm : "%d minuti", h : "un'ora", hh : "%d ore", d : "un giorno", dd : "%d giorni", M : "un mese", MM : "%d mesi", y : "un anno", yy : "%d anni" }, ordinal: '%dº', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); assets/plugins/moment/lang/es.js000064400000004662152510437660012735 0ustar00// moment.js language configuration // language : spanish (es) // author : Julio Napurí : https://github.com/julionc (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('es', { months : "enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"), monthsShort : "ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"), weekdays : "domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"), weekdaysShort : "dom._lun._mar._mié._jue._vie._sáb.".split("_"), weekdaysMin : "Do_Lu_Ma_Mi_Ju_Vi_Sá".split("_"), longDateFormat : { LT : "H:mm", L : "DD/MM/YYYY", LL : "D [de] MMMM [de] YYYY", LLL : "D [de] MMMM [de] YYYY LT", LLLL : "dddd, D [de] MMMM [de] YYYY LT" }, calendar : { sameDay : function () { return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; }, nextDay : function () { return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; }, nextWeek : function () { return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; }, lastDay : function () { return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; }, lastWeek : function () { return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; }, sameElse : 'L' }, relativeTime : { future : "en %s", past : "hace %s", s : "unos segundos", m : "un minuto", mm : "%d minutos", h : "una hora", hh : "%d horas", d : "un día", dd : "%d días", M : "un mes", MM : "%d meses", y : "un año", yy : "%d años" }, ordinal : '%dº', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); assets/plugins/moment/lang/pl.js000064400000006634152510437660012742 0ustar00// moment.js language configuration // language : polish (pl) // author : Rafal Hirsz : https://github.com/evoL (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var monthsNominative = "styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"), monthsSubjective = "stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_"); function plural(n) { return (n % 10 < 5) && (n % 10 > 1) && (~~(n / 10) !== 1); } function translate(number, withoutSuffix, key) { var result = number + " "; switch (key) { case 'm': return withoutSuffix ? 'minuta' : 'minutę'; case 'mm': return result + (plural(number) ? 'minuty' : 'minut'); case 'h': return withoutSuffix ? 'godzina' : 'godzinę'; case 'hh': return result + (plural(number) ? 'godziny' : 'godzin'); case 'MM': return result + (plural(number) ? 'miesiące' : 'miesięcy'); case 'yy': return result + (plural(number) ? 'lata' : 'lat'); } } moment.lang('pl', { months : function (momentToFormat, format) { if (/D MMMM/.test(format)) { return monthsSubjective[momentToFormat.month()]; } else { return monthsNominative[momentToFormat.month()]; } }, monthsShort : "sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"), weekdays : "niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"), weekdaysShort : "nie_pon_wt_śr_czw_pt_sb".split("_"), weekdaysMin : "N_Pn_Wt_Śr_Cz_Pt_So".split("_"), longDateFormat : { LT : "HH:mm", L : "DD.MM.YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendar : { sameDay: '[Dziś o] LT', nextDay: '[Jutro o] LT', nextWeek: '[W] dddd [o] LT', lastDay: '[Wczoraj o] LT', lastWeek: function () { switch (this.day()) { case 0: return '[W zeszłą niedzielę o] LT'; case 3: return '[W zeszłą środę o] LT'; case 6: return '[W zeszłą sobotę o] LT'; default: return '[W zeszły] dddd [o] LT'; } }, sameElse: 'L' }, relativeTime : { future : "za %s", past : "%s temu", s : "kilka sekund", m : translate, mm : translate, h : translate, hh : translate, d : "1 dzień", dd : '%d dni', M : "miesiąc", MM : translate, y : "rok", yy : translate }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); assets/plugins/moment/lang/ja.js000064400000003606152510437660012715 0ustar00// moment.js language configuration // language : japanese (ja) // author : LI Long : https://github.com/baryon (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('ja', { months : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), weekdays : "日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"), weekdaysShort : "日_月_火_水_木_金_土".split("_"), weekdaysMin : "日_月_火_水_木_金_土".split("_"), longDateFormat : { LT : "Ah時m分", L : "YYYY/MM/DD", LL : "YYYY年M月D日", LLL : "YYYY年M月D日LT", LLLL : "YYYY年M月D日LT dddd" }, meridiem : function (hour, minute, isLower) { if (hour < 12) { return "午前"; } else { return "午後"; } }, calendar : { sameDay : '[今日] LT', nextDay : '[明日] LT', nextWeek : '[来週]dddd LT', lastDay : '[昨日] LT', lastWeek : '[前週]dddd LT', sameElse : 'L' }, relativeTime : { future : "%s後", past : "%s前", s : "数秒", m : "1分", mm : "%d分", h : "1時間", hh : "%d時間", d : "1日", dd : "%d日", M : "1ヶ月", MM : "%dヶ月", y : "1年", yy : "%d年" } }); })); assets/plugins/moment/lang/en-gb.js000064400000004304152510437660013307 0ustar00// moment.js language configuration // language : great britain english (en-gb) // author : Chris Gedrim : https://github.com/chrisgedrim (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('en-gb', { months : "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), monthsShort : "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"), weekdays : "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), weekdaysShort : "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"), weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendar : { sameDay : '[Today at] LT', nextDay : '[Tomorrow at] LT', nextWeek : 'dddd [at] LT', lastDay : '[Yesterday at] LT', lastWeek : '[Last] dddd [at] LT', sameElse : 'L' }, relativeTime : { future : "in %s", past : "%s ago", s : "a few seconds", m : "a minute", mm : "%d minutes", h : "an hour", hh : "%d hours", d : "a day", dd : "%d days", M : "a month", MM : "%d months", y : "a year", yy : "%d years" }, ordinal : function (number) { var b = number % 10, output = (~~ (number % 100 / 10) === 1) ? 'th' : (b === 1) ? 'st' : (b === 2) ? 'nd' : (b === 3) ? 'rd' : 'th'; return number + output; }, week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); assets/plugins/moment/lang/fr-ca.js000064400000003555152510437660013316 0ustar00// moment.js language configuration // language : canadian french (fr-ca) // author : Jonathan Abourbih : https://github.com/jonbca (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('fr-ca', { months : "janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"), monthsShort : "janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"), weekdays : "dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"), weekdaysShort : "dim._lun._mar._mer._jeu._ven._sam.".split("_"), weekdaysMin : "Di_Lu_Ma_Me_Je_Ve_Sa".split("_"), longDateFormat : { LT : "HH:mm", L : "YYYY-MM-DD", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: "[Aujourd'hui à] LT", nextDay: '[Demain à] LT', nextWeek: 'dddd [à] LT', lastDay: '[Hier à] LT', lastWeek: 'dddd [dernier à] LT', sameElse: 'L' }, relativeTime : { future : "dans %s", past : "il y a %s", s : "quelques secondes", m : "une minute", mm : "%d minutes", h : "une heure", hh : "%d heures", d : "un jour", dd : "%d jours", M : "un mois", MM : "%d mois", y : "un an", yy : "%d ans" }, ordinal : function (number) { return number + (number === 1 ? 'er' : ''); } }); })); assets/plugins/moment/lang/ms-my.js000064400000004364152510437660013367 0ustar00// moment.js language configuration // language : Bahasa Malaysia (ms-MY) // author : Weldan Jamili : https://github.com/weldan (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('ms-my', { months : "Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"), monthsShort : "Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"), weekdays : "Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"), weekdaysShort : "Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"), weekdaysMin : "Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"), longDateFormat : { LT : "HH.mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY [pukul] LT", LLLL : "dddd, D MMMM YYYY [pukul] LT" }, meridiem : function (hours, minutes, isLower) { if (hours < 11) { return 'pagi'; } else if (hours < 15) { return 'tengahari'; } else if (hours < 19) { return 'petang'; } else { return 'malam'; } }, calendar : { sameDay : '[Hari ini pukul] LT', nextDay : '[Esok pukul] LT', nextWeek : 'dddd [pukul] LT', lastDay : '[Kelmarin pukul] LT', lastWeek : 'dddd [lepas pukul] LT', sameElse : 'L' }, relativeTime : { future : "dalam %s", past : "%s yang lepas", s : "beberapa saat", m : "seminit", mm : "%d minit", h : "sejam", hh : "%d jam", d : "sehari", dd : "%d hari", M : "sebulan", MM : "%d bulan", y : "setahun", yy : "%d tahun" }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); assets/plugins/moment/lang/lt.js000064400000006673152510437660012751 0ustar00// moment.js language configuration // language : Lithuanian (lt) // author : Mindaugas Mozūras : https://github.com/mmozuras var units = { "m" : "minutė_minutės_minutę", "mm": "minutės_minučių_minutes", "h" : "valanda_valandos_valandą", "hh": "valandos_valandų_valandas", "d" : "diena_dienos_dieną", "dd": "dienos_dienų_dienas", "M" : "mėnuo_mėnesio_mėnesį", "MM": "mėnesiai_mėnesių_mėnesius", "y" : "metai_metų_metus", "yy": "metai_metų_metus" }; function translateSeconds(number, withoutSuffix, key, isFuture) { if (withoutSuffix) { return "kelios sekundės"; } else { return isFuture ? "kelių sekundžių" : "kelias sekundes"; } } function translateSingular(number, withoutSuffix, key, isFuture) { return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]); } function special(number) { return number % 10 === 0 || (number > 10 && number < 20); } function forms(key) { return units[key].split("_"); } function translate(number, withoutSuffix, key, isFuture) { var result = number + " "; if (number === 1) { return result + translateSingular(number, withoutSuffix, key[0], isFuture); } else if (withoutSuffix) { return result + (special(number) ? forms(key)[1] : forms(key)[0]); } else { if (isFuture) { return result + forms(key)[1]; } else { return result + (special(number) ? forms(key)[1] : forms(key)[2]); } } } var weekDays = "pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis_sekmadienis".split("_"); function relativeWeekDay(moment, format) { var nominative = format.indexOf('dddd LT') === -1, weekDay = weekDays[moment.weekday()]; return nominative ? weekDay : weekDay.substring(0, weekDay.length - 2) + "į"; } require("../moment").lang("lt", { months : "sausio_vasario_kovo_balandžio_gegužės_biržėlio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"), monthsShort : "sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"), weekdays : relativeWeekDay, weekdaysShort : "Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"), weekdaysMin : "S_P_A_T_K_Pn_Š".split("_"), longDateFormat : { LT : "HH:mm", L : "YYYY-MM-DD", LL : "YYYY [m.] MMMM D [d.]", LLL : "YYYY [m.] MMMM D [d.], LT [val.]", LLLL : "YYYY [m.] MMMM D [d.], dddd, LT [val.]", l : "YYYY-MM-DD", ll : "YYYY [m.] MMMM D [d.]", lll : "YYYY [m.] MMMM D [d.], LT [val.]", llll : "YYYY [m.] MMMM D [d.], ddd, LT [val.]" }, calendar : { sameDay : "[Šiandien] LT", nextDay : "[Rytoj] LT", nextWeek : "dddd LT", lastDay : "[Vakar] LT", lastWeek : "[Praėjusį] dddd LT", sameElse : "L" }, relativeTime : { future : "po %s", past : "prieš %s", s : translateSeconds, m : translateSingular, mm : translate, h : translateSingular, hh : translate, d : translateSingular, dd : translate, M : translateSingular, MM : translate, y : translateSingular, yy : translate }, ordinal : function (number) { return number + '-oji'; }, week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); assets/plugins/moment/lang/sk.js000064400000013256152510437660012742 0ustar00// moment.js language configuration // language : slovak (sk) // author : Martin Minka : https://github.com/k2s // based on work of petrbela : https://github.com/petrbela (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var months = "január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"), monthsShort = "jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_"); function plural(n) { return (n > 1) && (n < 5); } function translate(number, withoutSuffix, key, isFuture) { var result = number + " "; switch (key) { case 's': // a few seconds / in a few seconds / a few seconds ago return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami'; case 'm': // a minute / in a minute / a minute ago return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou'); case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'minúty' : 'minút'); } else { return result + 'minútami'; } break; case 'h': // an hour / in an hour / an hour ago return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou'); case 'hh': // 9 hours / in 9 hours / 9 hours ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'hodiny' : 'hodín'); } else { return result + 'hodinami'; } break; case 'd': // a day / in a day / a day ago return (withoutSuffix || isFuture) ? 'deň' : 'dňom'; case 'dd': // 9 days / in 9 days / 9 days ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'dni' : 'dní'); } else { return result + 'dňami'; } break; case 'M': // a month / in a month / a month ago return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom'; case 'MM': // 9 months / in 9 months / 9 months ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'mesiace' : 'mesiacov'); } else { return result + 'mesiacmi'; } break; case 'y': // a year / in a year / a year ago return (withoutSuffix || isFuture) ? 'rok' : 'rokom'; case 'yy': // 9 years / in 9 years / 9 years ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'roky' : 'rokov'); } else { return result + 'rokmi'; } break; } } moment.lang('sk', { months : months, monthsShort : monthsShort, monthsParse : (function (months, monthsShort) { var i, _monthsParse = []; for (i = 0; i < 12; i++) { // use custom parser to solve problem with July (červenec) _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i'); } return _monthsParse; }(months, monthsShort)), weekdays : "nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"), weekdaysShort : "ne_po_ut_st_št_pi_so".split("_"), weekdaysMin : "ne_po_ut_st_št_pi_so".split("_"), longDateFormat : { LT: "H:mm", L : "DD.MM.YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY LT", LLLL : "dddd D. MMMM YYYY LT" }, calendar : { sameDay: "[dnes o] LT", nextDay: '[zajtra o] LT', nextWeek: function () { switch (this.day()) { case 0: return '[v nedeľu o] LT'; case 1: case 2: return '[v] dddd [o] LT'; case 3: return '[v stredu o] LT'; case 4: return '[vo štvrtok o] LT'; case 5: return '[v piatok o] LT'; case 6: return '[v sobotu o] LT'; } }, lastDay: '[včera o] LT', lastWeek: function () { switch (this.day()) { case 0: return '[minulú nedeľu o] LT'; case 1: case 2: return '[minulý] dddd [o] LT'; case 3: return '[minulú stredu o] LT'; case 4: case 5: return '[minulý] dddd [o] LT'; case 6: return '[minulú sobotu o] LT'; } }, sameElse: "L" }, relativeTime : { future : "za %s", past : "pred %s", s : translate, m : translate, mm : translate, h : translate, hh : translate, d : translate, dd : translate, M : translate, MM : translate, y : translate, yy : translate }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); assets/plugins/moment/lang/ar-ma.js000064400000004373152510437660013322 0ustar00// moment.js language configuration // language : Moroccan Arabic (ar-ma) // author : ElFadili Yassine : https://github.com/ElFadiliY // author : Abdel Said : https://github.com/abdelsaid (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('ar-ma', { months : "يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"), monthsShort : "يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"), weekdays : "الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"), weekdaysShort : "احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"), weekdaysMin : "ح_ن_ث_ر_خ_ج_س".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: "[اليوم على الساعة] LT", nextDay: '[غدا على الساعة] LT', nextWeek: 'dddd [على الساعة] LT', lastDay: '[أمس على الساعة] LT', lastWeek: 'dddd [على الساعة] LT', sameElse: 'L' }, relativeTime : { future : "في %s", past : "منذ %s", s : "ثوان", m : "دقيقة", mm : "%d دقائق", h : "ساعة", hh : "%d ساعات", d : "يوم", dd : "%d أيام", M : "شهر", MM : "%d أشهر", y : "سنة", yy : "%d سنوات" }, week : { dow : 6, // Saturday is the first day of the week. doy : 12 // The week that contains Jan 1st is the first week of the year. } }); })); assets/plugins/moment/lang/nl.js000064400000004627152510437660012740 0ustar00// moment.js language configuration // language : dutch (nl) // author : Joris Röling : https://github.com/jjupiter (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var monthsShortWithDots = "jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"), monthsShortWithoutDots = "jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"); moment.lang('nl', { months : "januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"), monthsShort : function (m, format) { if (/-MMM-/.test(format)) { return monthsShortWithoutDots[m.month()]; } else { return monthsShortWithDots[m.month()]; } }, weekdays : "zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"), weekdaysShort : "zo._ma._di._wo._do._vr._za.".split("_"), weekdaysMin : "Zo_Ma_Di_Wo_Do_Vr_Za".split("_"), longDateFormat : { LT : "HH:mm", L : "DD-MM-YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: '[vandaag om] LT', nextDay: '[morgen om] LT', nextWeek: 'dddd [om] LT', lastDay: '[gisteren om] LT', lastWeek: '[afgelopen] dddd [om] LT', sameElse: 'L' }, relativeTime : { future : "over %s", past : "%s geleden", s : "een paar seconden", m : "één minuut", mm : "%d minuten", h : "één uur", hh : "%d uur", d : "één dag", dd : "%d dagen", M : "één maand", MM : "%d maanden", y : "één jaar", yy : "%d jaar" }, ordinal : function (number) { return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); }, week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); assets/plugins/moment/lang/tr.js000064400000005335152510437660012751 0ustar00// moment.js language configuration // language : turkish (tr) // authors : Erhan Gundogan : https://github.com/erhangundogan, // Burak Yiğit Kaya: https://github.com/BYK (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var suffixes = { 1: "'inci", 5: "'inci", 8: "'inci", 70: "'inci", 80: "'inci", 2: "'nci", 7: "'nci", 20: "'nci", 50: "'nci", 3: "'üncü", 4: "'üncü", 100: "'üncü", 6: "'ncı", 9: "'uncu", 10: "'uncu", 30: "'uncu", 60: "'ıncı", 90: "'ıncı" }; moment.lang('tr', { months : "Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"), monthsShort : "Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"), weekdays : "Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"), weekdaysShort : "Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"), weekdaysMin : "Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"), longDateFormat : { LT : "HH:mm", L : "DD.MM.YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendar : { sameDay : '[bugün saat] LT', nextDay : '[yarın saat] LT', nextWeek : '[haftaya] dddd [saat] LT', lastDay : '[dün] LT', lastWeek : '[geçen hafta] dddd [saat] LT', sameElse : 'L' }, relativeTime : { future : "%s sonra", past : "%s önce", s : "birkaç saniye", m : "bir dakika", mm : "%d dakika", h : "bir saat", hh : "%d saat", d : "bir gün", dd : "%d gün", M : "bir ay", MM : "%d ay", y : "bir yıl", yy : "%d yıl" }, ordinal : function (number) { if (number === 0) { // special case for zero return number + "'ıncı"; } var a = number % 10, b = number % 100 - a, c = number >= 100 ? 100 : null; return number + (suffixes[a] || suffixes[b] || suffixes[c]); }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); assets/plugins/moment/lang/ne.js000064400000007452152510437660012730 0ustar00// moment.js language configuration // language : nepali/nepalese // author : suvash : https://github.com/suvash (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var symbolMap = { '1': '१', '2': '२', '3': '३', '4': '४', '5': '५', '6': '६', '7': '७', '8': '८', '9': '९', '0': '०' }, numberMap = { '१': '1', '२': '2', '३': '3', '४': '4', '५': '5', '६': '6', '७': '7', '८': '8', '९': '9', '०': '0' }; moment.lang('ne', { months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split("_"), monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split("_"), weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split("_"), weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split("_"), weekdaysMin : 'आइ._सो._मङ्_बु._बि._शु._श.'.split("_"), longDateFormat : { LT : "Aको h:mm बजे", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY, LT", LLLL : "dddd, D MMMM YYYY, LT" }, preparse: function (string) { return string.replace(/[१२३४५६७८९०]/g, function (match) { return numberMap[match]; }); }, postformat: function (string) { return string.replace(/\d/g, function (match) { return symbolMap[match]; }); }, meridiem : function (hour, minute, isLower) { if (hour < 3) { return "राती"; } else if (hour < 10) { return "बिहान"; } else if (hour < 15) { return "दिउँसो"; } else if (hour < 18) { return "बेलुका"; } else if (hour < 20) { return "साँझ"; } else { return "राती"; } }, calendar : { sameDay : '[आज] LT', nextDay : '[भोली] LT', nextWeek : '[आउँदो] dddd[,] LT', lastDay : '[हिजो] LT', lastWeek : '[गएको] dddd[,] LT', sameElse : 'L' }, relativeTime : { future : "%sमा", past : "%s अगाडी", s : "केही समय", m : "एक मिनेट", mm : "%d मिनेट", h : "एक घण्टा", hh : "%d घण्टा", d : "एक दिन", dd : "%d दिन", M : "एक महिना", MM : "%d महिना", y : "एक बर्ष", yy : "%d बर्ष" }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); assets/plugins/moment/lang/eo.js000064400000004571152510437660012730 0ustar00// moment.js language configuration // language : esperanto (eo) // author : Colin Dean : https://github.com/colindean // komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko. // Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni! (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('eo', { months : "januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"), monthsShort : "jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"), weekdays : "Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato".split("_"), weekdaysShort : "Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab".split("_"), weekdaysMin : "Di_Lu_Ma_Me_Ĵa_Ve_Sa".split("_"), longDateFormat : { LT : "HH:mm", L : "YYYY-MM-DD", LL : "D[-an de] MMMM, YYYY", LLL : "D[-an de] MMMM, YYYY LT", LLLL : "dddd, [la] D[-an de] MMMM, YYYY LT" }, meridiem : function (hours, minutes, isLower) { if (hours > 11) { return isLower ? 'p.t.m.' : 'P.T.M.'; } else { return isLower ? 'a.t.m.' : 'A.T.M.'; } }, calendar : { sameDay : '[Hodiaŭ je] LT', nextDay : '[Morgaŭ je] LT', nextWeek : 'dddd [je] LT', lastDay : '[Hieraŭ je] LT', lastWeek : '[pasinta] dddd [je] LT', sameElse : 'L' }, relativeTime : { future : "je %s", past : "antaŭ %s", s : "sekundoj", m : "minuto", mm : "%d minutoj", h : "horo", hh : "%d horoj", d : "tago",//ne 'diurno', ĉar estas uzita por proksimumo dd : "%d tagoj", M : "monato", MM : "%d monatoj", y : "jaro", yy : "%d jaroj" }, ordinal : "%da", week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); assets/plugins/moment/lang/pt.js000064400000004247152510437660012750 0ustar00// moment.js language configuration // language : portuguese (pt) // author : Jefferson : https://github.com/jalex79 (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('pt', { months : "Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"), monthsShort : "Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"), weekdays : "Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"), weekdaysShort : "Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"), weekdaysMin : "Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D [de] MMMM [de] YYYY", LLL : "D [de] MMMM [de] YYYY LT", LLLL : "dddd, D [de] MMMM [de] YYYY LT" }, calendar : { sameDay: '[Hoje às] LT', nextDay: '[Amanhã às] LT', nextWeek: 'dddd [às] LT', lastDay: '[Ontem às] LT', lastWeek: function () { return (this.day() === 0 || this.day() === 6) ? '[Último] dddd [às] LT' : // Saturday + Sunday '[Última] dddd [às] LT'; // Monday - Friday }, sameElse: 'L' }, relativeTime : { future : "em %s", past : "%s atrás", s : "segundos", m : "um minuto", mm : "%d minutos", h : "uma hora", hh : "%d horas", d : "um dia", dd : "%d dias", M : "um mês", MM : "%d meses", y : "um ano", yy : "%d anos" }, ordinal : '%dº', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); assets/plugins/moment/composer.json000064400000000700152510437660013556 0ustar00{ "name": "moment/moment", "description": "Parse, validate, manipulate, and display dates in javascript.", "keywords": [ "moment", "date", "time", "parse", "format", "validate", "i18n", "l10n", "ender" ], "homepage": "http://github.com/moment/moment/", "author": "Tim Wood (http://timwoodcreates.com/)", "license": "MIT" } assets/plugins/moment/component.json000064400000002327152510437660013740 0ustar00{ "name": "moment", "version": "2.2.1", "main": "moment.js", "description": "Parse, validate, manipulate, and display dates in javascript.", "files": [ "moment.js", "lang/ar-ma.js", "lang/ar.js", "lang/bg.js", "lang/br.js", "lang/ca.js", "lang/cs.js", "lang/cv.js", "lang/da.js", "lang/de.js", "lang/el.js", "lang/en-ca.js", "lang/en-gb.js", "lang/eo.js", "lang/es.js", "lang/et.js", "lang/eu.js", "lang/fa.js", "lang/fi.js", "lang/fr-ca.js", "lang/fr.js", "lang/gl.js", "lang/he.js", "lang/hi.js", "lang/hr.js", "lang/hu.js", "lang/id.js", "lang/is.js", "lang/it.js", "lang/ja.js", "lang/ka.js", "lang/ko.js", "lang/lt.js", "lang/lv.js", "lang/ml.js", "lang/mr.js", "lang/ms-my.js", "lang/nb.js", "lang/ne.js", "lang/nl.js", "lang/nn.js", "lang/pl.js", "lang/pt-br.js", "lang/pt.js", "lang/ro.js", "lang/ru.js", "lang/sk.js", "lang/sl.js", "lang/sq.js", "lang/sv.js", "lang/th.js", "lang/tr.js", "lang/tzm-la.js", "lang/tzm.js", "lang/uk.js", "lang/vn.js", "lang/zh-cn.js", "lang/zh-tw.js" ] } assets/plugins/moment/Gruntfile.js000064400000007075152510437660013345 0ustar00module.exports = function (grunt) { var embedOption = grunt.option('embed_languages'), embedLanguageDest = embedOption ? 'min/moment+customlangs.js' : 'min/moment+langs.js', embedLanguageLangs = 'lang/*.js'; if (embedOption && embedOption.match(/,/)) { embedLanguageLangs = 'lang/{' + embedOption + '}.js'; } else if (embedOption) { embedLanguageLangs = 'lang/' + embedOption + '.js'; } grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), concat : { langs: { src: 'lang/*.js', dest: 'min/langs.js' } }, uglify : { target: { files: { 'min/moment+langs.min.js' : 'min/moment+langs.js', 'min/moment+customlangs.min.js' : 'min/moment+customlangs.js', 'min/langs.min.js' : 'min/langs.js', 'min/moment.min.js' : 'moment.js' } }, options: { mangle: true, compress: { dead_code: false }, output: { ascii_only: true }, report: 'min', preserveComments: 'some' } }, nodeunit : { all : ["test/**/*.js"] }, jshint: { all: ["Gruntfile.js", "moment.js", "lang/**/*.js", "test/**/*.js"], options: { "node" : true, "browser" : true, "boss" : false, "curly" : true, "debug" : false, "devel" : false, "eqeqeq" : true, "eqnull" : true, "evil" : false, "forin" : false, "immed" : false, "laxbreak" : false, "newcap" : true, "noarg" : true, "noempty" : false, "nonew" : false, "onevar" : true, "plusplus" : false, "regexp" : false, "undef" : true, "sub" : true, "strict" : false, "white" : true, "globals": { "define": false } } }, watch : { test : { files : [ 'moment.js', 'lang/*.js', 'test/**/*.js' ], tasks: ['nodeunit'] }, jshint : { files : '<%= jshint.all %>', tasks: ['jshint'] } }, embed_languages: { moment: 'moment.js', dest: embedLanguageDest, targetLangs: embedLanguageLangs } }); grunt.loadTasks("tasks"); // These plugins provide necessary tasks. grunt.loadNpmTasks('grunt-contrib-nodeunit'); grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-concat'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-watch'); // Default task. grunt.registerTask('default', ['jshint', 'nodeunit']); grunt.registerTask('test', ['nodeunit']); // Task to be run when releasing a new version grunt.registerTask('release', ['jshint', 'nodeunit', 'concat', 'embed_languages', 'component', 'uglify']); }; assets/plugins/moment/test/moment/mutable.js000064400000003675152510437660015317 0ustar00var moment = require("../../moment"); exports.mutable = { "manipulation methods" : function (test) { var mutableMethods = { 'year': function (m) { return m.year(2011); }, 'month': function (m) { return m.month(1); }, 'date': function (m) { return m.date(9); }, 'hours': function (m) { return m.hours(7); }, 'minutes': function (m) { return m.minutes(33); }, 'seconds': function (m) { return m.seconds(44); }, 'milliseconds': function (m) { return m.milliseconds(55); }, 'day': function (m) { return m.day(2); }, 'startOf': function (m) { return m.startOf('week'); }, 'endOf': function (m) { return m.endOf('week'); }, 'add': function (m) { return m.add('days', 1); }, 'subtract': function (m) { return m.subtract('years', 2); }, 'local': function (m) { return m.local(); }, 'utc': function (m) { return m.utc(); } }, method, d, d2; test.expect(14); for (method in mutableMethods) { if (mutableMethods.hasOwnProperty(method)) { d = moment(); d2 = mutableMethods[method](d); test.equal(d, d2, method + "() should be mutable"); } } test.done(); }, "non mutable methods" : function (test) { var nonMutableMethods = { 'clone': function (m) { return m.clone(); } }, method, d, d2; test.expect(1); for (method in nonMutableMethods) { if (nonMutableMethods.hasOwnProperty(method)) { d = new Date(); d2 = nonMutableMethods[method](moment(d)).toDate(); test.notEqual(d, d2, method + "() should not be mutable"); } } test.done(); } }; assets/plugins/moment/test/moment/normalizeUnits.js000064400000002537152510437660016705 0ustar00/*global require, exports */ var moment = require("../../moment"); exports.normalizeUnits = { "normalize units" : function (test) { test.expect(45); var fullKeys = ["year", "month", "isoweek", "week", "day", "hour", "minute", "second", "millisecond"], aliases = ["y", "M", "W", "w", "d", "h", "m", "s", "ms"], length = fullKeys.length, fullKey, fullKeyCaps, fullKeyPlural, fullKeyCapsPlural, alias, index; for (index = 0; index < length; index += 1) { fullKey = fullKeys[index]; fullKeyCaps = fullKey.toUpperCase(); fullKeyPlural = fullKey + "s"; fullKeyCapsPlural = fullKeyCaps + "s"; alias = aliases[index]; test.equal(moment.normalizeUnits(fullKey), fullKey, "Testing full key " + fullKey); test.equal(moment.normalizeUnits(fullKeyCaps), fullKey, "Testing full key capitalised " + fullKey); test.equal(moment.normalizeUnits(fullKeyPlural), fullKey, "Testing full key plural " + fullKey); test.equal(moment.normalizeUnits(fullKeyCapsPlural), fullKey, "Testing full key capitalised and plural " + fullKey); test.equal(moment.normalizeUnits(alias), fullKey, "Testing alias " + fullKey); } test.done(); } }; assets/plugins/moment/test/moment/string_prototype.js000064400000000765152510437660017316 0ustar00var moment = require("../../moment"); exports.string_prototype = { "string prototype overrides call" : function (test) { test.expect(1); moment.lang('en'); var prior = String.prototype.call, b; String.prototype.call = function () { return null; }; b = moment(new Date(2011, 7, 28, 15, 25, 50, 125)); test.equal(b.format('MMMM Do YYYY, h:mm a'), 'August 28th 2011, 3:25 pm'); String.prototype.call = prior; test.done(); } }; assets/plugins/moment/test/moment/utc.js000064400000007440152510437660014453 0ustar00var moment = require("../../moment"); exports.utc = { setUp : function (cb) { moment.lang('en'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "utc and local" : function (test) { test.expect(7); var m = moment(Date.UTC(2011, 1, 2, 3, 4, 5, 6)), zone, expected; m.utc(); // utc test.equal(m.date(), 2, "the day should be correct for utc"); test.equal(m.day(), 3, "the date should be correct for utc"); test.equal(m.hours(), 3, "the hours should be correct for utc"); // local m.local(); if (m.zone() > 180) { test.equal(m.date(), 1, "the date should be correct for local"); test.equal(m.day(), 2, "the day should be correct for local"); } else { test.equal(m.date(), 2, "the date should be correct for local"); test.equal(m.day(), 3, "the day should be correct for local"); } zone = Math.ceil(m.zone() / 60); expected = (24 + 3 - zone) % 24; test.equal(m.hours(), expected, "the hours (" + m.hours() + ") should be correct for local"); test.equal(moment().utc().zone(), 0, "timezone in utc should always be zero"); test.done(); }, "creating with utc" : function (test) { test.expect(7); var diff = moment.utc().valueOf() - moment().valueOf(), m; diff = Math.abs(diff); // we check the diff rather than equality because sometimes they are off by a millisecond test.ok(diff < 5, "Calling moment.utc() should default to the current time"); m = moment.utc([2011, 1, 2, 3, 4, 5, 6]); test.equal(m.date(), 2, "the day should be correct for utc array"); test.equal(m.hours(), 3, "the hours should be correct for utc array"); m = moment.utc("2011-02-02 3:04:05", "YYYY-MM-DD HH:mm:ss"); test.equal(m.date(), 2, "the day should be correct for utc parsing format"); test.equal(m.hours(), 3, "the hours should be correct for utc parsing format"); m = moment.utc("2011-02-02T03:04:05+00:00"); test.equal(m.date(), 2, "the day should be correct for utc parsing iso"); test.equal(m.hours(), 3, "the hours should be correct for utc parsing iso"); test.done(); }, "creating with utc without timezone" : function (test) { test.expect(4); var m = moment.utc("2012-01-02T08:20:00"); test.equal(m.date(), 2, "the day should be correct for utc parse without timezone"); test.equal(m.hours(), 8, "the hours should be correct for utc parse without timezone"); m = moment.utc("2012-01-02T08:20:00+09:00"); test.equal(m.date(), 1, "the day should be correct for utc parse with timezone"); test.equal(m.hours(), 23, "the hours should be correct for utc parse with timezone"); test.done(); }, "cloning with utc" : function (test) { test.expect(4); var m = moment.utc("2012-01-02T08:20:00"); test.equal(moment.utc(m)._isUTC, true, "the local zone should be converted to UTC"); test.equal(moment.utc(m.clone().utc())._isUTC, true, "the local zone should stay in UTC"); m.zone(120); test.equal(moment.utc(m)._isUTC, true, "the explicit zone should stay in UTC"); test.equal(moment.utc(m).zone(), 0, "the explicit zone should have an offset of 0"); test.done(); }, "weekday with utc" : function (test) { test.expect(1); test.equal( moment('2013-09-15T00:00:00Z').utc().weekday(), // first minute of the day moment('2013-09-15T23:59:00Z').utc().weekday(), // last minute of the day "a UTC-moment's .weekday() should not be affected by the local timezone" ); test.done(); } }; assets/plugins/moment/test/moment/weeks.js000064400000024737152510437660015006 0ustar00var moment = require("../../moment"); exports.weeks = { setUp : function (cb) { moment.lang('en'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "day of year" : function (test) { test.expect(8); test.equal(moment([2000, 0, 1]).dayOfYear(), 1, "Jan 1 2000 should be day 1 of the year"); test.equal(moment([2000, 1, 28]).dayOfYear(), 59, "Feb 28 2000 should be day 59 of the year"); test.equal(moment([2000, 1, 29]).dayOfYear(), 60, "Feb 28 2000 should be day 60 of the year"); test.equal(moment([2000, 11, 31]).dayOfYear(), 366, "Dec 31 2000 should be day 366 of the year"); test.equal(moment([2001, 0, 1]).dayOfYear(), 1, "Jan 1 2001 should be day 1 of the year"); test.equal(moment([2001, 1, 28]).dayOfYear(), 59, "Feb 28 2001 should be day 59 of the year"); test.equal(moment([2001, 2, 1]).dayOfYear(), 60, "Mar 1 2001 should be day 60 of the year"); test.equal(moment([2001, 11, 31]).dayOfYear(), 365, "Dec 31 2001 should be day 365 of the year"); test.done(); }, "day of year setters" : function (test) { test.expect(8); test.equal(moment([2000, 0, 1]).dayOfYear(200).dayOfYear(), 200, "Setting Jan 1 2000 day of the year to 200 should work"); test.equal(moment([2000, 1, 28]).dayOfYear(200).dayOfYear(), 200, "Setting Feb 28 2000 day of the year to 200 should work"); test.equal(moment([2000, 1, 29]).dayOfYear(200).dayOfYear(), 200, "Setting Feb 28 2000 day of the year to 200 should work"); test.equal(moment([2000, 11, 31]).dayOfYear(200).dayOfYear(), 200, "Setting Dec 31 2000 day of the year to 200 should work"); test.equal(moment().dayOfYear(1).dayOfYear(), 1, "Setting day of the year to 1 should work"); test.equal(moment().dayOfYear(59).dayOfYear(), 59, "Setting day of the year to 59 should work"); test.equal(moment().dayOfYear(60).dayOfYear(), 60, "Setting day of the year to 60 should work"); test.equal(moment().dayOfYear(365).dayOfYear(), 365, "Setting day of the year to 365 should work"); test.done(); }, "iso weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).isoWeek(), 52, "Jan 1 2012 should be iso week 52"); test.equal(moment([2012, 0, 2]).isoWeek(), 1, "Jan 2 2012 should be iso week 1"); test.equal(moment([2012, 0, 8]).isoWeek(), 1, "Jan 8 2012 should be iso week 1"); test.equal(moment([2012, 0, 9]).isoWeek(), 2, "Jan 9 2012 should be iso week 2"); test.equal(moment([2012, 0, 15]).isoWeek(), 2, "Jan 15 2012 should be iso week 2"); test.done(); }, "iso weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).isoWeek(), 1, "Jan 1 2007 should be iso week 1"); test.equal(moment([2007, 0, 7]).isoWeek(), 1, "Jan 7 2007 should be iso week 1"); test.equal(moment([2007, 0, 8]).isoWeek(), 2, "Jan 8 2007 should be iso week 2"); test.equal(moment([2007, 0, 14]).isoWeek(), 2, "Jan 14 2007 should be iso week 2"); test.equal(moment([2007, 0, 15]).isoWeek(), 3, "Jan 15 2007 should be iso week 3"); test.done(); }, "iso weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).isoWeek(), 1, "Dec 31 2007 should be iso week 1"); test.equal(moment([2008, 0, 1]).isoWeek(), 1, "Jan 1 2008 should be iso week 1"); test.equal(moment([2008, 0, 6]).isoWeek(), 1, "Jan 6 2008 should be iso week 1"); test.equal(moment([2008, 0, 7]).isoWeek(), 2, "Jan 7 2008 should be iso week 2"); test.equal(moment([2008, 0, 13]).isoWeek(), 2, "Jan 13 2008 should be iso week 2"); test.equal(moment([2008, 0, 14]).isoWeek(), 3, "Jan 14 2008 should be iso week 3"); test.done(); }, "iso weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).isoWeek(), 1, "Dec 30 2002 should be iso week 1"); test.equal(moment([2003, 0, 1]).isoWeek(), 1, "Jan 1 2003 should be iso week 1"); test.equal(moment([2003, 0, 5]).isoWeek(), 1, "Jan 5 2003 should be iso week 1"); test.equal(moment([2003, 0, 6]).isoWeek(), 2, "Jan 6 2003 should be iso week 2"); test.equal(moment([2003, 0, 12]).isoWeek(), 2, "Jan 12 2003 should be iso week 2"); test.equal(moment([2003, 0, 13]).isoWeek(), 3, "Jan 13 2003 should be iso week 3"); test.done(); }, "iso weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).isoWeek(), 1, "Dec 29 2008 should be iso week 1"); test.equal(moment([2009, 0, 1]).isoWeek(), 1, "Jan 1 2009 should be iso week 1"); test.equal(moment([2009, 0, 4]).isoWeek(), 1, "Jan 4 2009 should be iso week 1"); test.equal(moment([2009, 0, 5]).isoWeek(), 2, "Jan 5 2009 should be iso week 2"); test.equal(moment([2009, 0, 11]).isoWeek(), 2, "Jan 11 2009 should be iso week 2"); test.equal(moment([2009, 0, 13]).isoWeek(), 3, "Jan 12 2009 should be iso week 3"); test.done(); }, "iso weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).isoWeek(), 53, "Dec 28 2009 should be iso week 53"); test.equal(moment([2010, 0, 1]).isoWeek(), 53, "Jan 1 2010 should be iso week 53"); test.equal(moment([2010, 0, 3]).isoWeek(), 53, "Jan 3 2010 should be iso week 53"); test.equal(moment([2010, 0, 4]).isoWeek(), 1, "Jan 4 2010 should be iso week 1"); test.equal(moment([2010, 0, 10]).isoWeek(), 1, "Jan 10 2010 should be iso week 1"); test.equal(moment([2010, 0, 11]).isoWeek(), 2, "Jan 11 2010 should be iso week 2"); test.done(); }, "iso weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).isoWeek(), 52, "Dec 27 2010 should be iso week 52"); test.equal(moment([2011, 0, 1]).isoWeek(), 52, "Jan 1 2011 should be iso week 52"); test.equal(moment([2011, 0, 2]).isoWeek(), 52, "Jan 2 2011 should be iso week 52"); test.equal(moment([2011, 0, 3]).isoWeek(), 1, "Jan 3 2011 should be iso week 1"); test.equal(moment([2011, 0, 9]).isoWeek(), 1, "Jan 9 2011 should be iso week 1"); test.equal(moment([2011, 0, 10]).isoWeek(), 2, "Jan 10 2011 should be iso week 2"); test.done(); }, "iso weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('W WW Wo'), '52 52 52nd', "Jan 1 2012 should be iso week 52"); test.equal(moment([2012, 0, 2]).format('W WW Wo'), '1 01 1st', "Jan 2 2012 should be iso week 1"); test.equal(moment([2012, 0, 8]).format('W WW Wo'), '1 01 1st', "Jan 8 2012 should be iso week 1"); test.equal(moment([2012, 0, 9]).format('W WW Wo'), '2 02 2nd', "Jan 9 2012 should be iso week 2"); test.equal(moment([2012, 0, 15]).format('W WW Wo'), '2 02 2nd', "Jan 15 2012 should be iso week 2"); test.done(); }, "weeks plural year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).weeks(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).weeks(), 1, "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).weeks(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).weeks(), 2, "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).weeks(), 3, "Jan 15 2012 should be week 3"); test.done(); }, "iso weeks plural year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).isoWeeks(), 52, "Jan 1 2012 should be iso week 52"); test.equal(moment([2012, 0, 2]).isoWeeks(), 1, "Jan 2 2012 should be iso week 1"); test.equal(moment([2012, 0, 8]).isoWeeks(), 1, "Jan 8 2012 should be iso week 1"); test.equal(moment([2012, 0, 9]).isoWeeks(), 2, "Jan 9 2012 should be iso week 2"); test.equal(moment([2012, 0, 15]).isoWeeks(), 2, "Jan 15 2012 should be iso week 2"); test.done(); }, "weeks setter" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(30).week(), 30, "Setting Jan 1 2012 to week 30 should work"); test.equal(moment([2012, 0, 7]).week(30).week(), 30, "Setting Jan 7 2012 to week 30 should work"); test.equal(moment([2012, 0, 8]).week(30).week(), 30, "Setting Jan 8 2012 to week 30 should work"); test.equal(moment([2012, 0, 14]).week(30).week(), 30, "Setting Jan 14 2012 to week 30 should work"); test.equal(moment([2012, 0, 15]).week(30).week(), 30, "Setting Jan 15 2012 to week 30 should work"); test.done(); }, "iso weeks setter" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).isoWeeks(25).isoWeeks(), 25, "Setting Jan 1 2012 to week 25 should work"); test.equal(moment([2012, 0, 2]).isoWeeks(24).isoWeeks(), 24, "Setting Jan 2 2012 to week 24 should work"); test.equal(moment([2012, 0, 8]).isoWeeks(23).isoWeeks(), 23, "Setting Jan 8 2012 to week 23 should work"); test.equal(moment([2012, 0, 9]).isoWeeks(22).isoWeeks(), 22, "Setting Jan 9 2012 to week 22 should work"); test.equal(moment([2012, 0, 15]).isoWeeks(21).isoWeeks(), 21, "Setting Jan 15 2012 to week 21 should work"); test.done(); }, "iso weeks setter day of year" : function (test) { test.expect(6); test.equal(moment([2012, 0, 1]).isoWeek(1).dayOfYear(), 9, "Setting Jan 1 2012 to week 1 should be day of year 8"); test.equal(moment([2012, 0, 1]).isoWeek(1).year(), 2011, "Setting Jan 1 2012 to week 1 should be year 2011"); test.equal(moment([2012, 0, 2]).isoWeek(1).dayOfYear(), 2, "Setting Jan 2 2012 to week 1 should be day of year 2"); test.equal(moment([2012, 0, 8]).isoWeek(1).dayOfYear(), 8, "Setting Jan 8 2012 to week 1 should be day of year 8"); test.equal(moment([2012, 0, 9]).isoWeek(1).dayOfYear(), 2, "Setting Jan 9 2012 to week 1 should be day of year 2"); test.equal(moment([2012, 0, 15]).isoWeek(1).dayOfYear(), 8, "Setting Jan 15 2012 to week 1 should be day of year 8"); test.done(); } }; assets/plugins/moment/test/moment/zones.js000064400000044545152510437660015025 0ustar00var moment = require("../../moment"); exports.zones = { setUp : function (cb) { moment.lang('en'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "set zone" : function (test) { var zone = moment(); zone.zone(0); test.equal(zone.zone(), 0, "should be able to set the zone to 0"); zone.zone(60); test.equal(zone.zone(), 60, "should be able to set the zone to 60"); zone.zone(-60); test.equal(zone.zone(), -60, "should be able to set the zone to -60"); test.done(); }, "set zone shorthand" : function (test) { var zone = moment(); zone.zone(1); test.equal(zone.zone(), 60, "setting the zone to 1 should imply hours and convert to 60"); zone.zone(-1); test.equal(zone.zone(), -60, "setting the zone to -1 should imply hours and convert to -60"); zone.zone(15); test.equal(zone.zone(), 900, "setting the zone to 15 should imply hours and convert to 900"); zone.zone(-15); test.equal(zone.zone(), -900, "setting the zone to -15 should imply hours and convert to -900"); zone.zone(16); test.equal(zone.zone(), 16, "setting the zone to 16 should imply minutes"); zone.zone(-16); test.equal(zone.zone(), -16, "setting the zone to -16 should imply minutes"); test.done(); }, "set zone with string" : function (test) { var zone = moment(); zone.zone("+00:00"); test.equal(zone.zone(), 0, "set the zone with a timezone string"); zone.zone("2013-03-07T07:00:00-08:00"); test.equal(zone.zone(), 480, "set the zone with a string that does not begin with the timezone"); zone.zone("2013-03-07T07:00:00+0100"); test.equal(zone.zone(), -60, "set the zone with a string that uses the +0000 syntax"); test.done(); }, "change hours when changing the zone" : function (test) { var zone = moment.utc([2000, 0, 1, 6]); zone.zone(0); test.equal(zone.hour(), 6, "UTC 6AM should be 6AM at +0000"); zone.zone(60); test.equal(zone.hour(), 5, "UTC 6AM should be 5AM at -0100"); zone.zone(-60); test.equal(zone.hour(), 7, "UTC 6AM should be 7AM at +0100"); test.done(); }, "change minutes when changing the zone" : function (test) { var zone = moment.utc([2000, 0, 1, 6, 31]); zone.zone(0); test.equal(zone.format("HH:mm"), "06:31", "UTC 6:31AM should be 6:31AM at +0000"); zone.zone(30); test.equal(zone.format("HH:mm"), "06:01", "UTC 6:31AM should be 6:01AM at -0030"); zone.zone(-30); test.equal(zone.format("HH:mm"), "07:01", "UTC 6:31AM should be 7:01AM at +0030"); zone.zone(1380); test.equal(zone.format("HH:mm"), "07:31", "UTC 6:31AM should be 7:31AM at +1380"); test.done(); }, "distance from the unix epoch" : function (test) { var zoneA = moment(), zoneB = moment(zoneA), zoneC = moment(zoneA), zoneD = moment(zoneA), zoneE = moment(zoneA); zoneB.utc(); test.equal(+zoneA, +zoneB, "moment should equal moment.utc"); zoneC.zone(-60); test.equal(+zoneA, +zoneC, "moment should equal moment.zone(-60)"); zoneD.zone(480); test.equal(+zoneA, +zoneD, "moment should equal moment.zone(480)"); zoneE.zone(1000); test.equal(+zoneA, +zoneE, "moment should equal moment.zone(1000)"); test.done(); }, "update offset after changing any values" : function (test) { var oldOffset = moment.updateOffset, m = moment.utc([2000, 6, 1]); moment.updateOffset = function (mom) { if (mom.__doChange) { if (+mom > 962409600000) { mom.zone(120); } else { mom.zone(60); } } }; test.equal(m.format("ZZ"), "+0000", "should be at +0000"); test.equal(m.format("HH:mm"), "00:00", "should start 12AM at +0000 timezone"); m.__doChange = true; m.add('h', 1); test.equal(m.format("ZZ"), "-0200", "should be at -0200"); test.equal(m.format("HH:mm"), "23:00", "1AM at +0000 should be 11PM at -0200 timezone"); m.subtract('h', 1); test.equal(m.format("ZZ"), "-0100", "should be at -0100"); test.equal(m.format("HH:mm"), "23:00", "12AM at +0000 should be 11PM at -0100 timezone"); moment.updateOffset = oldOffset; test.done(); }, "getters and setters" : function (test) { var a = moment([2011, 5, 20]); test.equal(a.clone().zone(120).year(2012).year(), 2012, "should get and set year correctly"); test.equal(a.clone().zone(120).month(1).month(), 1, "should get and set month correctly"); test.equal(a.clone().zone(120).date(2).date(), 2, "should get and set date correctly"); test.equal(a.clone().zone(120).day(1).day(), 1, "should get and set day correctly"); test.equal(a.clone().zone(120).hour(1).hour(), 1, "should get and set hour correctly"); test.equal(a.clone().zone(120).minute(1).minute(), 1, "should get and set minute correctly"); test.done(); }, "getters" : function (test) { var a = moment.utc([2012, 0, 1, 0, 0, 0]); test.equal(a.clone().zone(120).year(), 2011, "should get year correctly"); test.equal(a.clone().zone(120).month(), 11, "should get month correctly"); test.equal(a.clone().zone(120).date(), 31, "should get date correctly"); test.equal(a.clone().zone(120).hour(), 22, "should get hour correctly"); test.equal(a.clone().zone(120).minute(), 0, "should get minute correctly"); test.equal(a.clone().zone(-120).year(), 2012, "should get year correctly"); test.equal(a.clone().zone(-120).month(), 0, "should get month correctly"); test.equal(a.clone().zone(-120).date(), 1, "should get date correctly"); test.equal(a.clone().zone(-120).hour(), 2, "should get hour correctly"); test.equal(a.clone().zone(-120).minute(), 0, "should get minute correctly"); test.equal(a.clone().zone(-90).year(), 2012, "should get year correctly"); test.equal(a.clone().zone(-90).month(), 0, "should get month correctly"); test.equal(a.clone().zone(-90).date(), 1, "should get date correctly"); test.equal(a.clone().zone(-90).hour(), 1, "should get hour correctly"); test.equal(a.clone().zone(-90).minute(), 30, "should get minute correctly"); test.done(); }, "from" : function (test) { var zoneA = moment(), zoneB = moment(zoneA).zone(720), zoneC = moment(zoneA).zone(360), zoneD = moment(zoneA).zone(-690), other = moment(zoneA).add('m', 35); test.equal(zoneA.from(other), zoneB.from(other), "moment#from should be the same in all zones"); test.equal(zoneA.from(other), zoneC.from(other), "moment#from should be the same in all zones"); test.equal(zoneA.from(other), zoneD.from(other), "moment#from should be the same in all zones"); test.done(); }, "diff" : function (test) { var zoneA = moment(), zoneB = moment(zoneA).zone(720), zoneC = moment(zoneA).zone(360), zoneD = moment(zoneA).zone(-690), other = moment(zoneA).add('m', 35); test.equal(zoneA.diff(other), zoneB.diff(other), "moment#diff should be the same in all zones"); test.equal(zoneA.diff(other), zoneC.diff(other), "moment#diff should be the same in all zones"); test.equal(zoneA.diff(other), zoneD.diff(other), "moment#diff should be the same in all zones"); test.equal(zoneA.diff(other, 'minute', true), zoneB.diff(other, 'minute', true), "moment#diff should be the same in all zones"); test.equal(zoneA.diff(other, 'minute', true), zoneC.diff(other, 'minute', true), "moment#diff should be the same in all zones"); test.equal(zoneA.diff(other, 'minute', true), zoneD.diff(other, 'minute', true), "moment#diff should be the same in all zones"); test.equal(zoneA.diff(other, 'hour', true), zoneB.diff(other, 'hour', true), "moment#diff should be the same in all zones"); test.equal(zoneA.diff(other, 'hour', true), zoneC.diff(other, 'hour', true), "moment#diff should be the same in all zones"); test.equal(zoneA.diff(other, 'hour', true), zoneD.diff(other, 'hour', true), "moment#diff should be the same in all zones"); test.done(); }, "unix offset and timestamp" : function (test) { var zoneA = moment(), zoneB = moment(zoneA).zone(720), zoneC = moment(zoneA).zone(360), zoneD = moment(zoneA).zone(-690); test.equal(zoneA.unix(), zoneB.unix(), "moment#unix should be the same in all zones"); test.equal(zoneA.unix(), zoneC.unix(), "moment#unix should be the same in all zones"); test.equal(zoneA.unix(), zoneD.unix(), "moment#unix should be the same in all zones"); test.equal(+zoneA, +zoneB, "moment#valueOf should be the same in all zones"); test.equal(+zoneA, +zoneC, "moment#valueOf should be the same in all zones"); test.equal(+zoneA, +zoneD, "moment#valueOf should be the same in all zones"); test.done(); }, "cloning" : function (test) { test.equal(moment().zone(120).clone().zone(), 120, "explicit cloning should retain the zone"); test.equal(moment().zone(-120).clone().zone(), -120, "explicit cloning should retain the zone"); test.equal(moment(moment().zone(120)).zone(), 120, "implicit cloning should retain the zone"); test.equal(moment(moment().zone(-120)).zone(), -120, "implicit cloning should retain the zone"); test.done(); }, "start of / end of" : function (test) { var a = moment.utc([2010, 1, 2, 0, 0, 0]).zone(450); test.equal(a.clone().startOf('day').hour(), 0, "start of day should work on moments with a zone"); test.equal(a.clone().startOf('day').minute(), 0, "start of day should work on moments with a zone"); test.equal(a.clone().startOf('hour').minute(), 0, "start of hour should work on moments with a zone"); test.equal(a.clone().endOf('day').hour(), 23, "end of day should work on moments with a zone"); test.equal(a.clone().endOf('day').minute(), 59, "end of day should work on moments with a zone"); test.equal(a.clone().endOf('hour').minute(), 59, "end of hour should work on moments with a zone"); test.done(); }, "reset zone with moment#utc" : function (test) { var a = moment.utc([2012]).zone(480); test.equal(a.clone().hour(), 16, "different zone should have different hour"); test.equal(a.clone().utc().hour(), 0, "calling moment#utc should reset the offset"); test.done(); }, "reset zone with moment#local" : function (test) { var a = moment([2012]).zone(480); test.equal(a.clone().local().hour(), 0, "calling moment#local should reset the offset"); test.done(); }, "toDate" : function (test) { var zoneA = new Date(), zoneB = moment(zoneA).zone(720).toDate(), zoneC = moment(zoneA).zone(360).toDate(), zoneD = moment(zoneA).zone(-690).toDate(); test.equal(+zoneA, +zoneB, "moment#toDate should output a date with the right unix timestamp"); test.equal(+zoneA, +zoneC, "moment#toDate should output a date with the right unix timestamp"); test.equal(+zoneA, +zoneD, "moment#toDate should output a date with the right unix timestamp"); test.done(); }, "same / before / after" : function (test) { var zoneA = moment().utc(), zoneB = moment(zoneA).zone(120), zoneC = moment(zoneA).zone(-120); test.ok(zoneA.isSame(zoneB), "two moments with different offsets should be the same"); test.ok(zoneA.isSame(zoneC), "two moments with different offsets should be the same"); test.ok(zoneA.isSame(zoneB, 'hour'), "two moments with different offsets should be the same hour"); test.ok(zoneA.isSame(zoneC, 'hour'), "two moments with different offsets should be the same hour"); zoneA.add('hour', 1); test.ok(zoneA.isAfter(zoneB), "isAfter should work with two moments with different offsets"); test.ok(zoneA.isAfter(zoneC), "isAfter should work with two moments with different offsets"); test.ok(zoneA.isAfter(zoneB, 'hour'), "isAfter:hour should work with two moments with different offsets"); test.ok(zoneA.isAfter(zoneC, 'hour'), "isAfter:hour should work with two moments with different offsets"); zoneA.subtract('hour', 2); test.ok(zoneA.isBefore(zoneB), "isBefore should work with two moments with different offsets"); test.ok(zoneA.isBefore(zoneC), "isBefore should work with two moments with different offsets"); test.ok(zoneA.isBefore(zoneB, 'hour'), "isBefore:hour should work with two moments with different offsets"); test.ok(zoneA.isBefore(zoneC, 'hour'), "isBefore:hour should work with two moments with different offsets"); test.done(); }, "add / subtract over dst" : function (test) { var oldOffset = moment.updateOffset, m = moment.utc([2000, 2, 31, 3]); moment.updateOffset = function (mom) { if (mom.clone().utc().month() > 2) { mom.zone(-60); } else { mom.zone(0); } }; test.equal(m.hour(), 3, "should start at 00:00"); m.add('hour', 24); test.equal(m.hour(), 4, "adding 24 hours should disregard dst"); m.subtract('hour', 24); test.equal(m.hour(), 3, "subtracting 24 hours should disregard dst"); m.add('day', 1); test.equal(m.hour(), 3, "adding 1 day should have the same hour"); m.subtract('day', 1); test.equal(m.hour(), 3, "subtracting 1 day should have the same hour"); m.add('month', 1); test.equal(m.hour(), 3, "adding 1 month should have the same hour"); m.subtract('month', 1); test.equal(m.hour(), 3, "subtracting 1 month should have the same hour"); moment.updateOffset = oldOffset; test.done(); }, "isDST" : function (test) { var oldOffset = moment.updateOffset; moment.updateOffset = function (mom) { if (mom.month() > 2 && mom.month() < 9) { mom.zone(-60); } else { mom.zone(0); } }; test.ok(!moment().month(0).isDST(), "Jan should not be summer dst"); test.ok(moment().month(6).isDST(), "Jul should be summer dst"); test.ok(!moment().month(11).isDST(), "Dec should not be summer dst"); moment.updateOffset = function (mom) { if (mom.month() > 2 && mom.month() < 9) { mom.zone(0); } else { mom.zone(-60); } }; test.ok(moment().month(0).isDST(), "Jan should be winter dst"); test.ok(!moment().month(6).isDST(), "Jul should not be winter dst"); test.ok(moment().month(11).isDST(), "Dec should be winter dst"); moment.updateOffset = oldOffset; test.done(); }, "zone names" : function (test) { test.expect(8); test.equal(moment().zoneAbbr(), "", "Local zone abbr should be empty"); test.equal(moment().format('z'), "", "Local zone formatted abbr should be empty"); test.equal(moment().zoneName(), "", "Local zone name should be empty"); test.equal(moment().format('zz'), "", "Local zone formatted name should be empty"); test.equal(moment.utc().zoneAbbr(), "UTC", "UTC zone abbr should be UTC"); test.equal(moment.utc().format('z'), "UTC", "UTC zone formatted abbr should be UTC"); test.equal(moment.utc().zoneName(), "Coordinated Universal Time", "UTC zone abbr should be Coordinated Universal Time"); test.equal(moment.utc().format('zz'), "Coordinated Universal Time", "UTC zone formatted abbr should be Coordinated Universal Time"); test.done(); }, "hours alignment with UTC" : function (test) { test.expect(4); test.equals(moment().zone(120).hasAlignedHourOffset(), true); test.equals(moment().zone(-180).hasAlignedHourOffset(), true); test.equals(moment().zone(90).hasAlignedHourOffset(), false); test.equals(moment().zone(-90).hasAlignedHourOffset(), false); test.done(); }, "hours alignment with other zone" : function (test) { test.expect(16); var m = moment().zone(120); test.equals(m.hasAlignedHourOffset(moment().zone(180)), true); test.equals(m.hasAlignedHourOffset(moment().zone(-180)), true); test.equals(m.hasAlignedHourOffset(moment().zone(90)), false); test.equals(m.hasAlignedHourOffset(moment().zone(-90)), false); m = moment().zone(90); test.equals(m.hasAlignedHourOffset(moment().zone(180)), false); test.equals(m.hasAlignedHourOffset(moment().zone(-180)), false); test.equals(m.hasAlignedHourOffset(moment().zone(30)), true); test.equals(m.hasAlignedHourOffset(moment().zone(-30)), true); m = moment().zone(-60); test.equals(m.hasAlignedHourOffset(moment().zone(180)), true); test.equals(m.hasAlignedHourOffset(moment().zone(-180)), true); test.equals(m.hasAlignedHourOffset(moment().zone(90)), false); test.equals(m.hasAlignedHourOffset(moment().zone(-90)), false); m = moment().zone(25); test.equals(m.hasAlignedHourOffset(moment().zone(-35)), true); test.equals(m.hasAlignedHourOffset(moment().zone(85)), true); test.equals(m.hasAlignedHourOffset(moment().zone(35)), false); test.equals(m.hasAlignedHourOffset(moment().zone(-85)), false); test.done(); }, "parse zone" : function (test) { test.expect(2); var m = moment("2013-01-01T00:00:00-13:00").parseZone(); test.equal(m.zone(), 13 * 60); test.equal(m.hours(), 0); test.done(); }, "parse zone static" : function (test) { test.expect(2); var m = moment.parseZone("2013-01-01T00:00:00-13:00"); test.equal(m.zone(), 13 * 60); test.equal(m.hours(), 0); test.done(); } }; assets/plugins/moment/test/moment/preparse_postformat.js000064400000005056152510437660017760 0ustar00var moment = require("../../moment"); var symbolMap = { '1': '!', '2': '@', '3': '#', '4': '$', '5': '%', '6': '^', '7': '&', '8': '*', '9': '(', '0': ')' }; var numberMap = { '!': '1', '@': '2', '#': '3', '$': '4', '%': '5', '^': '6', '&': '7', '*': '8', '(': '9', ')': '0' }; var symbolLang = { preparse: function (string) { return string.replace(/[!@#$%\^&*()]/g, function (match) { return numberMap[match]; }); }, postformat: function (string) { return string.replace(/\d/g, function (match) { return symbolMap[match]; }); } }; exports.preparse_postformat = { setUp: function (cb) { moment.lang('symbol', symbolLang); cb(); }, tearDown: function (cb) { moment.lang('en-gb'); cb(); }, "transform": function (test) { test.expect(3); test.equal(moment.utc('@)!@-)*-@&', 'YYYY-MM-DD').unix(), 1346025600, "preparse string + format"); test.equal(moment.utc('@)!@-)*-@&').unix(), 1346025600, "preparse ISO8601 string"); test.equal(moment.unix(1346025600).utc().format('YYYY-MM-DD'), '@)!@-)*-@&', "postformat"); test.done(); }, "transform from": function (test) { test.expect(3); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "@ minutes", "postformat should work on moment.fn.from"); test.equal(moment().add('d', 6).fromNow(true), "^ days", "postformat should work on moment.fn.fromNow"); test.equal(moment.duration(10, "h").humanize(), "!) hours", "postformat should work on moment.duration.fn.humanize"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Today at @:)) AM", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Today at @:@% AM", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Today at #:)) AM", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Tomorrow at @:)) AM", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Today at !:)) AM", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Yesterday at @:)) AM", "yesterday at the same time"); test.done(); } }; assets/plugins/moment/test/moment/sod_eod.js000064400000032771152510437660015301 0ustar00var moment = require("../../moment"); exports.end_start_of = { setUp : function (cb) { moment.lang('en'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "start of year" : function (test) { test.expect(9); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('year'), ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('years'), ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('y'); test.equal(+m, +ms, "Plural or singular should work"); test.equal(+m, +ma, "Full or abbreviated should work"); test.equal(m.year(), 2011, "keep the year"); test.equal(m.month(), 0, "strip out the month"); test.equal(m.date(), 1, "strip out the day"); test.equal(m.hours(), 0, "strip out the hours"); test.equal(m.minutes(), 0, "strip out the minutes"); test.equal(m.seconds(), 0, "strip out the seconds"); test.equal(m.milliseconds(), 0, "strip out the milliseconds"); test.done(); }, "end of year" : function (test) { test.expect(9); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('year'), ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('years'), ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('y'); test.equal(+m, +ms, "Plural or singular should work"); test.equal(+m, +ma, "Full or abbreviated should work"); test.equal(m.year(), 2011, "keep the year"); test.equal(m.month(), 11, "set the month"); test.equal(m.date(), 31, "set the day"); test.equal(m.hours(), 23, "set the hours"); test.equal(m.minutes(), 59, "set the minutes"); test.equal(m.seconds(), 59, "set the seconds"); test.equal(m.milliseconds(), 999, "set the seconds"); test.done(); }, "start of month" : function (test) { test.expect(9); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('month'), ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('months'), ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('M'); test.equal(+m, +ms, "Plural or singular should work"); test.equal(+m, +ma, "Full or abbreviated should work"); test.equal(m.year(), 2011, "keep the year"); test.equal(m.month(), 1, "keep the month"); test.equal(m.date(), 1, "strip out the day"); test.equal(m.hours(), 0, "strip out the hours"); test.equal(m.minutes(), 0, "strip out the minutes"); test.equal(m.seconds(), 0, "strip out the seconds"); test.equal(m.milliseconds(), 0, "strip out the milliseconds"); test.done(); }, "end of month" : function (test) { test.expect(9); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('month'), ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('months'), ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('M'); test.equal(+m, +ms, "Plural or singular should work"); test.equal(+m, +ma, "Full or abbreviated should work"); test.equal(m.year(), 2011, "keep the year"); test.equal(m.month(), 1, "keep the month"); test.equal(m.date(), 28, "set the day"); test.equal(m.hours(), 23, "set the hours"); test.equal(m.minutes(), 59, "set the minutes"); test.equal(m.seconds(), 59, "set the seconds"); test.equal(m.milliseconds(), 999, "set the seconds"); test.done(); }, "start of week" : function (test) { test.expect(10); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('week'), ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('weeks'), ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('w'); test.equal(+m, +ms, "Plural or singular should work"); test.equal(+m, +ma, "Full or abbreviated should work"); test.equal(m.year(), 2011, "keep the year"); test.equal(m.month(), 0, "rolls back to January"); test.equal(m.day(), 0, "set day of week"); test.equal(m.date(), 30, "set correct date"); test.equal(m.hours(), 0, "strip out the hours"); test.equal(m.minutes(), 0, "strip out the minutes"); test.equal(m.seconds(), 0, "strip out the seconds"); test.equal(m.milliseconds(), 0, "strip out the milliseconds"); test.done(); }, "end of week" : function (test) { test.expect(10); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('week'), ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('weeks'), ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('weeks'); test.equal(+m, +ms, "Plural or singular should work"); test.equal(+m, +ma, "Full or abbreviated should work"); test.equal(m.year(), 2011, "keep the year"); test.equal(m.month(), 1, "keep the month"); test.equal(m.day(), 6, "set the day of the week"); test.equal(m.date(), 5, "set the day"); test.equal(m.hours(), 23, "set the hours"); test.equal(m.minutes(), 59, "set the minutes"); test.equal(m.seconds(), 59, "set the seconds"); test.equal(m.milliseconds(), 999, "set the seconds"); test.done(); }, "start of iso-week" : function (test) { test.expect(10); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('isoWeek'), ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('isoWeeks'), ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('W'); test.equal(+m, +ms, "Plural or singular should work"); test.equal(+m, +ma, "Full or abbreviated should work"); test.equal(m.year(), 2011, "keep the year"); test.equal(m.month(), 0, "rollback to January"); test.equal(m.isoWeekday(), 1, "set day of iso-week"); test.equal(m.date(), 31, "set correct date"); test.equal(m.hours(), 0, "strip out the hours"); test.equal(m.minutes(), 0, "strip out the minutes"); test.equal(m.seconds(), 0, "strip out the seconds"); test.equal(m.milliseconds(), 0, "strip out the milliseconds"); test.done(); }, "end of iso-week" : function (test) { test.expect(10); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('isoWeek'), ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('isoWeeks'), ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('W'); test.equal(+m, +ms, "Plural or singular should work"); test.equal(+m, +ma, "Full or abbreviated should work"); test.equal(m.year(), 2011, "keep the year"); test.equal(m.month(), 1, "keep the month"); test.equal(m.isoWeekday(), 7, "set the day of the week"); test.equal(m.date(), 6, "set the day"); test.equal(m.hours(), 23, "set the hours"); test.equal(m.minutes(), 59, "set the minutes"); test.equal(m.seconds(), 59, "set the seconds"); test.equal(m.milliseconds(), 999, "set the seconds"); test.done(); }, "start of day" : function (test) { test.expect(9); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('day'), ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('days'), ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('d'); test.equal(+m, +ms, "Plural or singular should work"); test.equal(+m, +ma, "Full or abbreviated should work"); test.equal(m.year(), 2011, "keep the year"); test.equal(m.month(), 1, "keep the month"); test.equal(m.date(), 2, "keep the day"); test.equal(m.hours(), 0, "strip out the hours"); test.equal(m.minutes(), 0, "strip out the minutes"); test.equal(m.seconds(), 0, "strip out the seconds"); test.equal(m.milliseconds(), 0, "strip out the milliseconds"); test.done(); }, "end of day" : function (test) { test.expect(9); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('day'), ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('days'), ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('d'); test.equal(+m, +ms, "Plural or singular should work"); test.equal(+m, +ma, "Full or abbreviated should work"); test.equal(m.year(), 2011, "keep the year"); test.equal(m.month(), 1, "keep the month"); test.equal(m.date(), 2, "keep the day"); test.equal(m.hours(), 23, "set the hours"); test.equal(m.minutes(), 59, "set the minutes"); test.equal(m.seconds(), 59, "set the seconds"); test.equal(m.milliseconds(), 999, "set the seconds"); test.done(); }, "start of hour" : function (test) { test.expect(9); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('hour'), ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('hours'), ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('h'); test.equal(+m, +ms, "Plural or singular should work"); test.equal(+m, +ma, "Full or abbreviated should work"); test.equal(m.year(), 2011, "keep the year"); test.equal(m.month(), 1, "keep the month"); test.equal(m.date(), 2, "keep the day"); test.equal(m.hours(), 3, "keep the hours"); test.equal(m.minutes(), 0, "strip out the minutes"); test.equal(m.seconds(), 0, "strip out the seconds"); test.equal(m.milliseconds(), 0, "strip out the milliseconds"); test.done(); }, "end of hour" : function (test) { test.expect(9); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('hour'), ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('hours'), ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('h'); test.equal(+m, +ms, "Plural or singular should work"); test.equal(+m, +ma, "Full or abbreviated should work"); test.equal(m.year(), 2011, "keep the year"); test.equal(m.month(), 1, "keep the month"); test.equal(m.date(), 2, "keep the day"); test.equal(m.hours(), 3, "keep the hours"); test.equal(m.minutes(), 59, "set the minutes"); test.equal(m.seconds(), 59, "set the seconds"); test.equal(m.milliseconds(), 999, "set the seconds"); test.done(); }, "start of minute" : function (test) { test.expect(9); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('minute'), ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('minutes'), ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('m'); test.equal(+m, +ms, "Plural or singular should work"); test.equal(+m, +ma, "Full or abbreviated should work"); test.equal(m.year(), 2011, "keep the year"); test.equal(m.month(), 1, "keep the month"); test.equal(m.date(), 2, "keep the day"); test.equal(m.hours(), 3, "keep the hours"); test.equal(m.minutes(), 4, "keep the minutes"); test.equal(m.seconds(), 0, "strip out the seconds"); test.equal(m.milliseconds(), 0, "strip out the milliseconds"); test.done(); }, "end of minute" : function (test) { test.expect(9); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('minute'), ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('minutes'), ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('m'); test.equal(+m, +ms, "Plural or singular should work"); test.equal(+m, +ma, "Full or abbreviated should work"); test.equal(m.year(), 2011, "keep the year"); test.equal(m.month(), 1, "keep the month"); test.equal(m.date(), 2, "keep the day"); test.equal(m.hours(), 3, "keep the hours"); test.equal(m.minutes(), 4, "keep the minutes"); test.equal(m.seconds(), 59, "set the seconds"); test.equal(m.milliseconds(), 999, "set the seconds"); test.done(); }, "start of second" : function (test) { test.expect(9); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('second'), ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('seconds'), ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('s'); test.equal(+m, +ms, "Plural or singular should work"); test.equal(+m, +ma, "Full or abbreviated should work"); test.equal(m.year(), 2011, "keep the year"); test.equal(m.month(), 1, "keep the month"); test.equal(m.date(), 2, "keep the day"); test.equal(m.hours(), 3, "keep the hours"); test.equal(m.minutes(), 4, "keep the minutes"); test.equal(m.seconds(), 5, "keep the the seconds"); test.equal(m.milliseconds(), 0, "strip out the milliseconds"); test.done(); }, "end of second" : function (test) { test.expect(9); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('second'), ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('seconds'), ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('s'); test.equal(+m, +ms, "Plural or singular should work"); test.equal(+m, +ma, "Full or abbreviated should work"); test.equal(m.year(), 2011, "keep the year"); test.equal(m.month(), 1, "keep the month"); test.equal(m.date(), 2, "keep the day"); test.equal(m.hours(), 3, "keep the hours"); test.equal(m.minutes(), 4, "keep the minutes"); test.equal(m.seconds(), 5, "keep the seconds"); test.equal(m.milliseconds(), 999, "set the seconds"); test.done(); } }; assets/plugins/moment/test/moment/add_subtract.js000064400000021446152510437660016321 0ustar00var moment = require("../../moment"); exports.add = { "add short" : function (test) { test.expect(12); var a = moment(), b, c; a.year(2011); a.month(9); a.date(12); a.hours(6); a.minutes(7); a.seconds(8); a.milliseconds(500); test.equal(a.add({ms: 50}).milliseconds(), 550, 'Add milliseconds'); test.equal(a.add({s: 1}).seconds(), 9, 'Add seconds'); test.equal(a.add({m: 1}).minutes(), 8, 'Add minutes'); test.equal(a.add({h: 1}).hours(), 7, 'Add hours'); test.equal(a.add({d: 1}).date(), 13, 'Add date'); test.equal(a.add({w: 1}).date(), 20, 'Add week'); test.equal(a.add({M: 1}).month(), 10, 'Add month'); test.equal(a.add({y: 1}).year(), 2012, 'Add year'); b = moment([2010, 0, 31]).add({M: 1}); c = moment([2010, 1, 28]).subtract({M: 1}); test.equal(b.month(), 1, 'add month, jan 31st to feb 28th'); test.equal(b.date(), 28, 'add month, jan 31st to feb 28th'); test.equal(c.month(), 0, 'subtract month, feb 28th to jan 28th'); test.equal(c.date(), 28, 'subtract month, feb 28th to jan 28th'); test.done(); }, "add long" : function (test) { test.expect(8); var a = moment(); a.year(2011); a.month(9); a.date(12); a.hours(6); a.minutes(7); a.seconds(8); a.milliseconds(500); test.equal(a.add({milliseconds: 50}).milliseconds(), 550, 'Add milliseconds'); test.equal(a.add({seconds: 1}).seconds(), 9, 'Add seconds'); test.equal(a.add({minutes: 1}).minutes(), 8, 'Add minutes'); test.equal(a.add({hours: 1}).hours(), 7, 'Add hours'); test.equal(a.add({days: 1}).date(), 13, 'Add date'); test.equal(a.add({weeks: 1}).date(), 20, 'Add week'); test.equal(a.add({months: 1}).month(), 10, 'Add month'); test.equal(a.add({years: 1}).year(), 2012, 'Add year'); test.done(); }, "add long singular" : function (test) { test.expect(8); var a = moment(); a.year(2011); a.month(9); a.date(12); a.hours(6); a.minutes(7); a.seconds(8); a.milliseconds(500); test.equal(a.add({millisecond: 50}).milliseconds(), 550, 'Add milliseconds'); test.equal(a.add({second: 1}).seconds(), 9, 'Add seconds'); test.equal(a.add({minute: 1}).minutes(), 8, 'Add minutes'); test.equal(a.add({hour: 1}).hours(), 7, 'Add hours'); test.equal(a.add({day: 1}).date(), 13, 'Add date'); test.equal(a.add({week: 1}).date(), 20, 'Add week'); test.equal(a.add({month: 1}).month(), 10, 'Add month'); test.equal(a.add({year: 1}).year(), 2012, 'Add year'); test.done(); }, "add string long" : function (test) { test.expect(9); var a = moment(), b; a.year(2011); a.month(9); a.date(12); a.hours(6); a.minutes(7); a.seconds(8); a.milliseconds(500); b = a.clone(); test.equal(a.add('millisecond', 50).milliseconds(), 550, 'Add milliseconds'); test.equal(a.add('second', 1).seconds(), 9, 'Add seconds'); test.equal(a.add('minute', 1).minutes(), 8, 'Add minutes'); test.equal(a.add('hour', 1).hours(), 7, 'Add hours'); test.equal(a.add('day', 1).date(), 13, 'Add date'); test.equal(a.add('week', 1).date(), 20, 'Add week'); test.equal(a.add('month', 1).month(), 10, 'Add month'); test.equal(a.add('year', 1).year(), 2012, 'Add year'); test.equal(b.add('day', '01').date(), 13, 'Add date'); test.done(); }, "add string long singular" : function (test) { test.expect(9); var a = moment(), b; a.year(2011); a.month(9); a.date(12); a.hours(6); a.minutes(7); a.seconds(8); a.milliseconds(500); b = a.clone(); test.equal(a.add('milliseconds', 50).milliseconds(), 550, 'Add milliseconds'); test.equal(a.add('seconds', 1).seconds(), 9, 'Add seconds'); test.equal(a.add('minutes', 1).minutes(), 8, 'Add minutes'); test.equal(a.add('hours', 1).hours(), 7, 'Add hours'); test.equal(a.add('days', 1).date(), 13, 'Add date'); test.equal(a.add('weeks', 1).date(), 20, 'Add week'); test.equal(a.add('months', 1).month(), 10, 'Add month'); test.equal(a.add('years', 1).year(), 2012, 'Add year'); test.equal(b.add('days', '01').date(), 13, 'Add date'); test.done(); }, "add string short" : function (test) { test.expect(8); var a = moment(); a.year(2011); a.month(9); a.date(12); a.hours(6); a.minutes(7); a.seconds(8); a.milliseconds(500); test.equal(a.add('ms', 50).milliseconds(), 550, 'Add milliseconds'); test.equal(a.add('s', 1).seconds(), 9, 'Add seconds'); test.equal(a.add('m', 1).minutes(), 8, 'Add minutes'); test.equal(a.add('h', 1).hours(), 7, 'Add hours'); test.equal(a.add('d', 1).date(), 13, 'Add date'); test.equal(a.add('w', 1).date(), 20, 'Add week'); test.equal(a.add('M', 1).month(), 10, 'Add month'); test.equal(a.add('y', 1).year(), 2012, 'Add year'); test.done(); }, "add string long reverse args" : function (test) { test.expect(8); var a = moment(); a.year(2011); a.month(9); a.date(12); a.hours(6); a.minutes(7); a.seconds(8); a.milliseconds(500); test.equal(a.add(50, 'millisecond').milliseconds(), 550, 'Add milliseconds'); test.equal(a.add(1, 'second', 1).seconds(), 9, 'Add seconds'); test.equal(a.add(1, 'minute', 1).minutes(), 8, 'Add minutes'); test.equal(a.add(1, 'hour', 1).hours(), 7, 'Add hours'); test.equal(a.add(1, 'day', 1).date(), 13, 'Add date'); test.equal(a.add(1, 'week', 1).date(), 20, 'Add week'); test.equal(a.add(1, 'month', 1).month(), 10, 'Add month'); test.equal(a.add(1, 'year', 1).year(), 2012, 'Add year'); test.done(); }, "add string long singular reverse args" : function (test) { test.expect(8); var a = moment(); a.year(2011); a.month(9); a.date(12); a.hours(6); a.minutes(7); a.seconds(8); a.milliseconds(500); test.equal(a.add(50, 'milliseconds').milliseconds(), 550, 'Add milliseconds'); test.equal(a.add(1, 'seconds').seconds(), 9, 'Add seconds'); test.equal(a.add(1, 'minutes').minutes(), 8, 'Add minutes'); test.equal(a.add(1, 'hours').hours(), 7, 'Add hours'); test.equal(a.add(1, 'days').date(), 13, 'Add date'); test.equal(a.add(1, 'weeks').date(), 20, 'Add week'); test.equal(a.add(1, 'months').month(), 10, 'Add month'); test.equal(a.add(1, 'years').year(), 2012, 'Add year'); test.done(); }, "add string short reverse args" : function (test) { test.expect(8); var a = moment(); a.year(2011); a.month(9); a.date(12); a.hours(6); a.minutes(7); a.seconds(8); a.milliseconds(500); test.equal(a.add(50, 'ms').milliseconds(), 550, 'Add milliseconds'); test.equal(a.add(1, 's').seconds(), 9, 'Add seconds'); test.equal(a.add(1, 'm').minutes(), 8, 'Add minutes'); test.equal(a.add(1, 'h').hours(), 7, 'Add hours'); test.equal(a.add(1, 'd').date(), 13, 'Add date'); test.equal(a.add(1, 'w').date(), 20, 'Add week'); test.equal(a.add(1, 'M').month(), 10, 'Add month'); test.equal(a.add(1, 'y').year(), 2012, 'Add year'); test.done(); }, "add across DST" : function (test) { test.expect(3); var a = moment(new Date(2011, 2, 12, 5, 0, 0)), b = moment(new Date(2011, 2, 12, 5, 0, 0)), c = moment(new Date(2011, 2, 12, 5, 0, 0)), d = moment(new Date(2011, 2, 12, 5, 0, 0)); a.add('days', 1); b.add('hours', 24); c.add('months', 1); test.equal(a.hours(), 5, 'adding days over DST difference should result in the same hour'); if (b.isDST() && !d.isDST()) { test.equal(b.hours(), 6, 'adding hours over DST difference should result in a different hour'); } else if (!b.isDST() && d.isDST()) { test.equal(b.hours(), 4, 'adding hours over DST difference should result in a different hour'); } else { test.equal(b.hours(), 5, 'adding hours over DST difference should result in a same hour if the timezone does not have daylight savings time'); } test.equal(c.hours(), 5, 'adding months over DST difference should result in the same hour'); test.done(); } }; assets/plugins/moment/test/moment/min_max.js000064400000004053152510437660015305 0ustar00var moment = require("../../moment"); var equalMoment = function (test, a, b, msg) { test.equal(a.valueOf(), b.valueOf(), msg); }; exports.min_max = { setUp : function (cb) { moment.lang('en'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "min" : function (test) { test.expect(6); var now = moment(), future = now.clone().add(1, 'month'), past = now.clone().subtract(1, 'month'); equalMoment(test, past.min(now), now, "A past date with the minimum of now should be now"); equalMoment(test, past.min(future), future, "A past date with the minimum of the future should be the future date"); equalMoment(test, future.min(now), future, "A future date with the minimum of now should be the future"); equalMoment(test, future.min(past), future, "A future date with the minimum of the past should be the future"); equalMoment(test, now.min(past), now, "Now with the minimum of the past should be now"); equalMoment(test, now.min(future), future, "Now with the minimum of the future should be the future"); test.done(); }, "max" : function (test) { test.expect(6); var now = moment(), future = now.clone().add(1, 'month'), past = now.clone().subtract(1, 'month'); equalMoment(test, past.max(now), past, "A past date with the maximum of now should be the past"); equalMoment(test, past.max(future), past, "A past date with the maximum of the future should be the past"); equalMoment(test, future.max(now), now, "A future date with the maximum of now should be now"); equalMoment(test, future.max(past), past, "A future date with the maximum of the past should be the past"); equalMoment(test, now.max(past), past, "Now with the maximum of the past should be the past"); equalMoment(test, now.max(future), now, "Now with the maximum of the future should be now"); test.done(); } }; assets/plugins/moment/test/moment/leapyear.js000064400000000655152510437660015463 0ustar00var moment = require("../../moment"); exports.leapyear = { "leap year" : function (test) { test.expect(4); test.equal(moment([2010, 0, 1]).isLeapYear(), false, '2010'); test.equal(moment([2100, 0, 1]).isLeapYear(), false, '2100'); test.equal(moment([2008, 0, 1]).isLeapYear(), true, '2008'); test.equal(moment([2000, 0, 1]).isLeapYear(), true, '2000'); test.done(); } }; assets/plugins/moment/test/moment/week_year.js000064400000007014152510437660015630 0ustar00var moment = require("../../moment"); exports.week_year = { "iso week year": function (test) { test.expect(19); // Some examples taken from http://en.wikipedia.org/wiki/ISO_week test.equal(moment([2005, 0, 1]).isoWeekYear(), 2004); test.equal(moment([2005, 0, 2]).isoWeekYear(), 2004); test.equal(moment([2005, 0, 3]).isoWeekYear(), 2005); test.equal(moment([2005, 11, 31]).isoWeekYear(), 2005); test.equal(moment([2006, 0, 1]).isoWeekYear(), 2005); test.equal(moment([2006, 0, 2]).isoWeekYear(), 2006); test.equal(moment([2007, 0, 1]).isoWeekYear(), 2007); test.equal(moment([2007, 11, 30]).isoWeekYear(), 2007); test.equal(moment([2007, 11, 31]).isoWeekYear(), 2008); test.equal(moment([2008, 0, 1]).isoWeekYear(), 2008); test.equal(moment([2008, 11, 28]).isoWeekYear(), 2008); test.equal(moment([2008, 11, 29]).isoWeekYear(), 2009); test.equal(moment([2008, 11, 30]).isoWeekYear(), 2009); test.equal(moment([2008, 11, 31]).isoWeekYear(), 2009); test.equal(moment([2009, 0, 1]).isoWeekYear(), 2009); test.equal(moment([2010, 0, 1]).isoWeekYear(), 2009); test.equal(moment([2010, 0, 2]).isoWeekYear(), 2009); test.equal(moment([2010, 0, 3]).isoWeekYear(), 2009); test.equal(moment([2010, 0, 4]).isoWeekYear(), 2010); test.done(); }, "week year": function (test) { test.expect(31); // Some examples taken from http://en.wikipedia.org/wiki/ISO_week moment.lang('dow: 1,doy: 4', {week: {dow: 1, doy: 4}}); // like iso test.equal(moment([2005, 0, 1]).weekYear(), 2004); test.equal(moment([2005, 0, 2]).weekYear(), 2004); test.equal(moment([2005, 0, 3]).weekYear(), 2005); test.equal(moment([2005, 11, 31]).weekYear(), 2005); test.equal(moment([2006, 0, 1]).weekYear(), 2005); test.equal(moment([2006, 0, 2]).weekYear(), 2006); test.equal(moment([2007, 0, 1]).weekYear(), 2007); test.equal(moment([2007, 11, 30]).weekYear(), 2007); test.equal(moment([2007, 11, 31]).weekYear(), 2008); test.equal(moment([2008, 0, 1]).weekYear(), 2008); test.equal(moment([2008, 11, 28]).weekYear(), 2008); test.equal(moment([2008, 11, 29]).weekYear(), 2009); test.equal(moment([2008, 11, 30]).weekYear(), 2009); test.equal(moment([2008, 11, 31]).weekYear(), 2009); test.equal(moment([2009, 0, 1]).weekYear(), 2009); test.equal(moment([2010, 0, 1]).weekYear(), 2009); test.equal(moment([2010, 0, 2]).weekYear(), 2009); test.equal(moment([2010, 0, 3]).weekYear(), 2009); test.equal(moment([2010, 0, 4]).weekYear(), 2010); moment.lang('dow: 1,doy: 7', {week: {dow: 1, doy: 7}}); test.equal(moment([2004, 11, 26]).weekYear(), 2004); test.equal(moment([2004, 11, 27]).weekYear(), 2005); test.equal(moment([2005, 11, 25]).weekYear(), 2005); test.equal(moment([2005, 11, 26]).weekYear(), 2006); test.equal(moment([2006, 11, 31]).weekYear(), 2006); test.equal(moment([2007, 0, 1]).weekYear(), 2007); test.equal(moment([2007, 11, 30]).weekYear(), 2007); test.equal(moment([2007, 11, 31]).weekYear(), 2008); test.equal(moment([2008, 11, 28]).weekYear(), 2008); test.equal(moment([2008, 11, 29]).weekYear(), 2009); test.equal(moment([2009, 11, 27]).weekYear(), 2009); test.equal(moment([2009, 11, 28]).weekYear(), 2010); test.done(); } }; assets/plugins/moment/test/moment/days_in_month.js000064400000002322152510437660016505 0ustar00var moment = require("../../moment"); exports.days_in_month = { "days in month" : function (test) { test.expect(24); var months = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], i; for (i = 0; i < 12; i++) { test.equal(moment([2012, i]).daysInMonth(), months[i], moment([2012, i]).format('L') + " should have " + months[i] + " days. (beginning of month " + i + ')'); } for (i = 0; i < 12; i++) { test.equal(moment([2012, i, months[i]]).daysInMonth(), months[i], moment([2012, i, months[i]]).format('L') + " should have " + months[i] + " days. (end of month " + i + ')'); } test.done(); }, "days in month leap years" : function (test) { test.expect(4); test.equal(moment([2010, 1]).daysInMonth(), 28, "Feb 2010 should have 28 days"); test.equal(moment([2100, 1]).daysInMonth(), 28, "Feb 2100 should have 28 days"); test.equal(moment([2008, 1]).daysInMonth(), 29, "Feb 2008 should have 29 days"); test.equal(moment([2000, 1]).daysInMonth(), 29, "Feb 2000 should have 29 days"); test.done(); } }; assets/plugins/moment/test/moment/is_before.js000064400000035564152510437660015625 0ustar00var moment = require("../../moment"); exports.is_before = { "is after without units" : function (test) { test.expect(17); var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); test.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 5, 5, 10))), true, "year is later"); test.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 3, 5, 10))), false, "year is earlier"); test.equal(m.isBefore(moment(new Date(2011, 4, 2, 3, 4, 5, 10))), true, "month is later"); test.equal(m.isBefore(moment(new Date(2011, 2, 2, 3, 4, 5, 10))), false, "month is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 3, 3, 4, 5, 10))), true, "day is later"); test.equal(m.isBefore(moment(new Date(2011, 3, 1, 3, 4, 5, 10))), false, "day is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 4, 5, 10))), true, "hour is later"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 2, 4, 5, 10))), false, "hour is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 5, 5, 10))), true, "minute is later"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 3, 5, 10))), false, "minute is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 10))), true, "second is later"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 11))), false, "second is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 10))), false, "millisecond match"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 11))), true, "millisecond is later"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 9))), false, "millisecond is earlier"); test.equal(m.isBefore(m), false, "moments are not before themselves"); test.equal(+m, +mCopy, "isBefore second should not change moment"); test.done(); }, "is before year" : function (test) { test.expect(11); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); test.equal(m.isBefore(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year'), false, "year match"); test.equal(m.isBefore(moment(new Date(2012, 5, 6, 7, 8, 9, 10)), 'years'), true, "plural should work"); test.equal(m.isBefore(moment(new Date(2013, 5, 6, 7, 8, 9, 10)), 'year'), true, "year is later"); test.equal(m.isBefore(moment(new Date(2010, 5, 6, 7, 8, 9, 10)), 'year'), false, "year is earlier"); test.equal(m.isBefore(moment(new Date(2011, 0, 1, 0, 0, 0, 0)), 'year'), false, "exact start of year"); test.equal(m.isBefore(moment(new Date(2011, 11, 31, 23, 59, 59, 999)), 'year'), false, "exact end of year"); test.equal(m.isBefore(moment(new Date(2012, 0, 1, 0, 0, 0, 0)), 'year'), true, "start of next year"); test.equal(m.isBefore(moment(new Date(2010, 11, 31, 23, 59, 59, 999)), 'year'), false, "end of previous year"); test.equal(m.isBefore(moment(new Date(1980, 11, 31, 23, 59, 59, 999)), 'year'), false, "end of year far before"); test.equal(m.isBefore(m, 'year'), false, "same moments are not before the same year"); test.equal(+m, +mCopy, "isBefore year should not change moment"); test.done(); }, "is before month" : function (test) { test.expect(13); var m = moment(new Date(2011, 2, 3, 4, 5, 6, 7)), mCopy = moment(m); test.equal(m.isBefore(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month'), false, "month match"); test.equal(m.isBefore(moment(new Date(2012, 2, 6, 7, 8, 9, 10)), 'months'), true, "plural should work"); test.equal(m.isBefore(moment(new Date(2012, 2, 6, 7, 8, 9, 10)), 'month'), true, "year is later"); test.equal(m.isBefore(moment(new Date(2010, 2, 6, 7, 8, 9, 10)), 'month'), false, "year is earlier"); test.equal(m.isBefore(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'month'), true, "month is later"); test.equal(m.isBefore(moment(new Date(2011, 1, 6, 7, 8, 9, 10)), 'month'), false, "month is earlier"); test.equal(m.isBefore(moment(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month'), false, "exact start of month"); test.equal(m.isBefore(moment(new Date(2011, 2, 31, 23, 59, 59, 999)), 'month'), false, "exact end of month"); test.equal(m.isBefore(moment(new Date(2011, 3, 1, 0, 0, 0, 0)), 'month'), true, "start of next month"); test.equal(m.isBefore(moment(new Date(2011, 1, 27, 23, 59, 59, 999)), 'month'), false, "end of previous month"); test.equal(m.isBefore(moment(new Date(2010, 12, 31, 23, 59, 59, 999)), 'month'), false, "later month but earlier year"); test.equal(m.isBefore(m, 'month'), false, "same moments are not before the same month"); test.equal(+m, +mCopy, "isBefore month should not change moment"); test.done(); }, "is before day" : function (test) { test.expect(15); var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 7, 8, 9, 10)), 'day'), false, "day match"); test.equal(m.isBefore(moment(new Date(2012, 3, 2, 7, 8, 9, 10)), 'days'), true, "plural should work"); test.equal(m.isBefore(moment(new Date(2012, 3, 2, 7, 8, 9, 10)), 'day'), true, "year is later"); test.equal(m.isBefore(moment(new Date(2010, 3, 2, 7, 8, 9, 10)), 'day'), false, "year is earlier"); test.equal(m.isBefore(moment(new Date(2011, 4, 2, 7, 8, 9, 10)), 'day'), true, "month is later"); test.equal(m.isBefore(moment(new Date(2011, 2, 2, 7, 8, 9, 10)), 'day'), false, "month is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 3, 7, 8, 9, 10)), 'day'), true, "day is later"); test.equal(m.isBefore(moment(new Date(2011, 3, 1, 7, 8, 9, 10)), 'day'), false, "day is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 0, 0, 0, 0)), 'day'), false, "exact start of day"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 23, 59, 59, 999)), 'day'), false, "exact end of day"); test.equal(m.isBefore(moment(new Date(2011, 3, 3, 0, 0, 0, 0)), 'day'), true, "start of next day"); test.equal(m.isBefore(moment(new Date(2011, 3, 1, 23, 59, 59, 999)), 'day'), false, "end of previous day"); test.equal(m.isBefore(moment(new Date(2010, 3, 10, 0, 0, 0, 0)), 'day'), false, "later day but earlier year"); test.equal(m.isBefore(m, 'day'), false, "same moments are not before the same day"); test.equal(+m, +mCopy, "isBefore day should not change moment"); test.done(); }, "is before hour" : function (test) { test.expect(16); var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 8, 9, 10)), 'hour'), false, "hour match"); test.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 8, 9, 10)), 'hours'), true, "plural should work"); test.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 8, 9, 10)), 'hour'), true, "year is later"); test.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 8, 9, 10)), 'hour'), false, "year is earlier"); test.equal(m.isBefore(moment(new Date(2011, 4, 2, 3, 8, 9, 10)), 'hour'), true, "month is later"); test.equal(m.isBefore(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hour'), false, "month is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 3, 3, 8, 9, 10)), 'hour'), true, "day is later"); test.equal(m.isBefore(moment(new Date(2011, 3, 1, 3, 8, 9, 10)), 'hour'), false, "day is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 8, 9, 10)), 'hour'), true, "hour is later"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 8, 9, 10)), 'hour'), false, "hour is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 0, 0, 0)), 'hour'), false, "exact start of hour"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 59, 59, 999)), 'hour'), false, "exact end of hour"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 0, 0, 0)), 'hour'), true, "start of next hour"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 2, 59, 59, 999)), 'hour'), false, "end of previous hour"); test.equal(m.isBefore(m, 'hour'), false, "same moments are not before the same hour"); test.equal(+m, +mCopy, "isBefore hour should not change moment"); test.done(); }, "is before minute" : function (test) { test.expect(18); var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 9, 10)), 'minute'), false, "minute match"); test.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 4, 9, 10)), 'minutes'), true, "plural should work"); test.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 4, 9, 10)), 'minute'), true, "year is later"); test.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 4, 9, 10)), 'minute'), false, "year is earlier"); test.equal(m.isBefore(moment(new Date(2011, 4, 2, 3, 4, 9, 10)), 'minute'), true, "month is later"); test.equal(m.isBefore(moment(new Date(2011, 2, 2, 3, 4, 9, 10)), 'minute'), false, "month is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 3, 3, 4, 9, 10)), 'minute'), true, "day is later"); test.equal(m.isBefore(moment(new Date(2011, 3, 1, 3, 4, 9, 10)), 'minute'), false, "day is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 4, 9, 10)), 'minute'), true, "hour is later"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 2, 4, 9, 10)), 'minute'), false, "hour is earler"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 5, 9, 10)), 'minute'), true, "minute is later"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 3, 9, 10)), 'minute'), false, "minute is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 0, 0)), 'minute'), false, "exact start of minute"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 59, 999)), 'minute'), false, "exact end of minute"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 5, 0, 0)), 'minute'), true, "start of next minute"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 3, 59, 999)), 'minute'), false, "end of previous minute"); test.equal(m.isBefore(m, 'minute'), false, "same moments are not before the same minute"); test.equal(+m, +mCopy, "isBefore minute should not change moment"); test.done(); }, "is before second" : function (test) { test.expect(20); var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'second'), false, "second match"); test.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'seconds'), true, "plural should work"); test.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'second'), true, "year is later"); test.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'second'), false, "year is earlier"); test.equal(m.isBefore(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'second'), true, "month is later"); test.equal(m.isBefore(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'second'), false, "month is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'second'), true, "day is later"); test.equal(m.isBefore(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'second'), false, "day is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'second'), true, "hour is later"); test.equal(m.isBefore(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'second'), false, "hour is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'second'), true, "minute is later"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'second'), false, "minute is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'second'), true, "second is later"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'second'), false, "second is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 0)), 'second'), false, "exact start of second"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 999)), 'second'), false, "exact end of second"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 0)), 'second'), true, "start of next second"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 999)), 'second'), false, "end of previous second"); test.equal(m.isBefore(m, 'second'), false, "same moments are not before the same second"); test.equal(+m, +mCopy, "isBefore second should not change moment"); test.done(); }, "is before millisecond" : function (test) { test.expect(18); var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, "millisecond match"); test.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'milliseconds'), false, "plural should work"); test.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'millisecond'), true, "year is later"); test.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, "year is earlier"); test.equal(m.isBefore(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'millisecond'), true, "month is later"); test.equal(m.isBefore(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'millisecond'), false, "month is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'millisecond'), true, "day is later"); test.equal(m.isBefore(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'millisecond'), false, "day is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'millisecond'), true, "hour is later"); test.equal(m.isBefore(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'millisecond'), false, "hour is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'millisecond'), true, "minute is later"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'millisecond'), false, "minute is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'millisecond'), true, "second is later"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'millisecond'), false, "second is earlier"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 11)), 'millisecond'), true, "millisecond is later"); test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 9)), 'millisecond'), false, "millisecond is earlier"); test.equal(m.isBefore(m, 'millisecond'), false, "same moments are not before the same millisecond"); test.equal(+m, +mCopy, "isBefore millisecond should not change moment"); test.done(); } }; assets/plugins/moment/test/moment/duration.js000064400000064273152510437660015514 0ustar00var moment = require("../../moment"); exports.duration = { "object instantiation" : function (test) { var d = moment.duration({ years: 2, months: 3, weeks: 2, days: 1, hours: 8, minutes: 9, seconds: 20, milliseconds: 12 }); test.expect(8); test.equal(d.years(), 2, "years"); test.equal(d.months(), 3, "months"); test.equal(d.weeks(), 2, "weeks"); test.equal(d.days(), 15, "days"); // two weeks + 1 day test.equal(d.hours(), 8, "hours"); test.equal(d.minutes(), 9, "minutes"); test.equal(d.seconds(), 20, "seconds"); test.equal(d.milliseconds(), 12, "milliseconds"); test.done(); }, "object instantiation with strings" : function (test) { var d = moment.duration({ years: '2', months: '3', weeks: '2', days: '1', hours: '8', minutes: '9', seconds: '20', milliseconds: '12' }); test.expect(8); test.equal(d.years(), 2, "years"); test.equal(d.months(), 3, "months"); test.equal(d.weeks(), 2, "weeks"); test.equal(d.days(), 15, "days"); // two weeks + 1 day test.equal(d.hours(), 8, "hours"); test.equal(d.minutes(), 9, "minutes"); test.equal(d.seconds(), 20, "seconds"); test.equal(d.milliseconds(), 12, "milliseconds"); test.done(); }, "milliseconds instantiation" : function (test) { test.expect(1); test.equal(moment.duration(72).milliseconds(), 72, "milliseconds"); test.done(); }, "instantiation by type" : function (test) { test.expect(16); test.equal(moment.duration(1, "years").years(), 1, "years"); test.equal(moment.duration(1, "y").years(), 1, "y"); test.equal(moment.duration(2, "months").months(), 2, "months"); test.equal(moment.duration(2, "M").months(), 2, "M"); test.equal(moment.duration(3, "weeks").weeks(), 3, "weeks"); test.equal(moment.duration(3, "w").weeks(), 3, "weeks"); test.equal(moment.duration(4, "days").days(), 4, "days"); test.equal(moment.duration(4, "d").days(), 4, "d"); test.equal(moment.duration(5, "hours").hours(), 5, "hours"); test.equal(moment.duration(5, "h").hours(), 5, "h"); test.equal(moment.duration(6, "minutes").minutes(), 6, "minutes"); test.equal(moment.duration(6, "m").minutes(), 6, "m"); test.equal(moment.duration(7, "seconds").seconds(), 7, "seconds"); test.equal(moment.duration(7, "s").seconds(), 7, "s"); test.equal(moment.duration(8, "milliseconds").milliseconds(), 8, "milliseconds"); test.equal(moment.duration(8, "ms").milliseconds(), 8, "ms"); test.done(); }, "shortcuts" : function (test) { test.expect(8); test.equal(moment.duration({y: 1}).years(), 1, "years = y"); test.equal(moment.duration({M: 2}).months(), 2, "months = M"); test.equal(moment.duration({w: 3}).weeks(), 3, "weeks = w"); test.equal(moment.duration({d: 4}).days(), 4, "days = d"); test.equal(moment.duration({h: 5}).hours(), 5, "hours = h"); test.equal(moment.duration({m: 6}).minutes(), 6, "minutes = m"); test.equal(moment.duration({s: 7}).seconds(), 7, "seconds = s"); test.equal(moment.duration({ms: 8}).milliseconds(), 8, "milliseconds = ms"); test.done(); }, "generic getter" : function (test) { test.expect(24); test.equal(moment.duration(1, "years").get("years"), 1, "years"); test.equal(moment.duration(1, "years").get("year"), 1, "years = year"); test.equal(moment.duration(1, "years").get("y"), 1, "years = y"); test.equal(moment.duration(2, "months").get("months"), 2, "months"); test.equal(moment.duration(2, "months").get("month"), 2, "months = month"); test.equal(moment.duration(2, "months").get("M"), 2, "months = M"); test.equal(moment.duration(3, "weeks").get("weeks"), 3, "weeks"); test.equal(moment.duration(3, "weeks").get("week"), 3, "weeks = week"); test.equal(moment.duration(3, "weeks").get("w"), 3, "weeks = w"); test.equal(moment.duration(4, "days").get("days"), 4, "days"); test.equal(moment.duration(4, "days").get("day"), 4, "days = day"); test.equal(moment.duration(4, "days").get("d"), 4, "days = d"); test.equal(moment.duration(5, "hours").get("hours"), 5, "hours"); test.equal(moment.duration(5, "hours").get("hour"), 5, "hours = hour"); test.equal(moment.duration(5, "hours").get("h"), 5, "hours = h"); test.equal(moment.duration(6, "minutes").get("minutes"), 6, "minutes"); test.equal(moment.duration(6, "minutes").get("minute"), 6, "minutes = minute"); test.equal(moment.duration(6, "minutes").get("m"), 6, "minutes = m"); test.equal(moment.duration(7, "seconds").get("seconds"), 7, "seconds"); test.equal(moment.duration(7, "seconds").get("second"), 7, "seconds = second"); test.equal(moment.duration(7, "seconds").get("s"), 7, "seconds = s"); test.equal(moment.duration(8, "milliseconds").get("milliseconds"), 8, "milliseconds"); test.equal(moment.duration(8, "milliseconds").get("millisecond"), 8, "milliseconds = millisecond"); test.equal(moment.duration(8, "milliseconds").get("ms"), 8, "milliseconds = ms"); test.done(); }, "instantiation from another duration" : function (test) { var simple = moment.duration(1234), lengthy = moment.duration(60 * 60 * 24 * 360 * 1e3), complicated = moment.duration({ years: 2, months: 3, weeks: 4, days: 1, hours: 8, minutes: 9, seconds: 20, milliseconds: 12 }); test.expect(3); test.deepEqual(moment.duration(simple), simple, "simple clones are equal"); test.deepEqual(moment.duration(lengthy), lengthy, "lengthy clones are equal"); test.deepEqual(moment.duration(complicated), complicated, "complicated clones are equal"); test.done(); }, "instantiation from 24-hour time zero" : function (test) { test.expect(6); test.equal(moment.duration("00:00").years(), 0, "0 years"); test.equal(moment.duration("00:00").days(), 0, "0 days"); test.equal(moment.duration("00:00").hours(), 0, "0 hours"); test.equal(moment.duration("00:00").minutes(), 0, "0 minutes"); test.equal(moment.duration("00:00").seconds(), 0, "0 seconds"); test.equal(moment.duration("00:00").milliseconds(), 0, "0 milliseconds"); test.done(); }, "instantiation from 24-hour time <24 hours" : function (test) { test.expect(6); test.equal(moment.duration("06:45").years(), 0, "0 years"); test.equal(moment.duration("06:45").days(), 0, "0 days"); test.equal(moment.duration("06:45").hours(), 6, "6 hours"); test.equal(moment.duration("06:45").minutes(), 45, "45 minutes"); test.equal(moment.duration("06:45").seconds(), 0, "0 seconds"); test.equal(moment.duration("06:45").milliseconds(), 0, "0 milliseconds"); test.done(); }, "instantiation from 24-hour time >24 hours" : function (test) { test.expect(6); test.equal(moment.duration("26:45").years(), 0, "0 years"); test.equal(moment.duration("26:45").days(), 1, "0 days"); test.equal(moment.duration("26:45").hours(), 2, "2 hours"); test.equal(moment.duration("26:45").minutes(), 45, "45 minutes"); test.equal(moment.duration("26:45").seconds(), 0, "0 seconds"); test.equal(moment.duration("26:45").milliseconds(), 0, "0 milliseconds"); test.done(); }, "instatiation from serialized C# TimeSpan zero" : function (test) { test.expect(6); test.equal(moment.duration("00:00:00").years(), 0, "0 years"); test.equal(moment.duration("00:00:00").days(), 0, "0 days"); test.equal(moment.duration("00:00:00").hours(), 0, "0 hours"); test.equal(moment.duration("00:00:00").minutes(), 0, "0 minutes"); test.equal(moment.duration("00:00:00").seconds(), 0, "0 seconds"); test.equal(moment.duration("00:00:00").milliseconds(), 0, "0 milliseconds"); test.done(); }, "instatiation from serialized C# TimeSpan with days" : function (test) { test.expect(6); test.equal(moment.duration("1.02:03:04.9999999").years(), 0, "0 years"); test.equal(moment.duration("1.02:03:04.9999999").days(), 1, "1 day"); test.equal(moment.duration("1.02:03:04.9999999").hours(), 2, "2 hours"); test.equal(moment.duration("1.02:03:04.9999999").minutes(), 3, "3 minutes"); test.equal(moment.duration("1.02:03:04.9999999").seconds(), 4, "4 seconds"); test.equal(moment.duration("1.02:03:04.9999999").milliseconds(), 999, "999 milliseconds"); test.done(); }, "instatiation from serialized C# TimeSpan without days" : function (test) { test.expect(10); test.equal(moment.duration("01:02:03.9999999").years(), 0, "0 years"); test.equal(moment.duration("01:02:03.9999999").days(), 0, "0 days"); test.equal(moment.duration("01:02:03.9999999").hours(), 1, "1 hour"); test.equal(moment.duration("01:02:03.9999999").minutes(), 2, "2 minutes"); test.equal(moment.duration("01:02:03.9999999").seconds(), 3, "3 seconds"); test.equal(moment.duration("01:02:03.9999999").milliseconds(), 999, "999 milliseconds"); test.equal(moment.duration("23:59:59.9999999").days(), 0, "0 days"); test.equal(moment.duration("23:59:59.9999999").hours(), 23, "23 hours"); test.equal(moment.duration("500:59:59.9999999").days(), 20, "500 hours overflows to 20 days"); test.equal(moment.duration("500:59:59.9999999").hours(), 20, "500 hours overflows to 20 hours"); test.done(); }, "instatiation from serialized C# TimeSpan without days or milliseconds" : function (test) { test.expect(6); test.equal(moment.duration("01:02:03").years(), 0, "0 years"); test.equal(moment.duration("01:02:03").days(), 0, "0 days"); test.equal(moment.duration("01:02:03").hours(), 1, "1 hour"); test.equal(moment.duration("01:02:03").minutes(), 2, "2 minutes"); test.equal(moment.duration("01:02:03").seconds(), 3, "3 seconds"); test.equal(moment.duration("01:02:03").milliseconds(), 0, "0 milliseconds"); test.done(); }, "instatiation from serialized C# TimeSpan without milliseconds" : function (test) { test.expect(6); test.equal(moment.duration("1.02:03:04").years(), 0, "0 years"); test.equal(moment.duration("1.02:03:04").days(), 1, "1 day"); test.equal(moment.duration("1.02:03:04").hours(), 2, "2 hours"); test.equal(moment.duration("1.02:03:04").minutes(), 3, "3 minutes"); test.equal(moment.duration("1.02:03:04").seconds(), 4, "4 seconds"); test.equal(moment.duration("1.02:03:04").milliseconds(), 0, "0 milliseconds"); test.done(); }, "instatiation from serialized C# TimeSpan maxValue" : function (test) { test.expect(6); test.equal(moment.duration("10675199.02:48:05.4775807").years(), 29653, "29653 years"); test.equal(moment.duration("10675199.02:48:05.4775807").days(), 29, "29 day"); test.equal(moment.duration("10675199.02:48:05.4775807").hours(), 2, "2 hours"); test.equal(moment.duration("10675199.02:48:05.4775807").minutes(), 48, "48 minutes"); test.equal(moment.duration("10675199.02:48:05.4775807").seconds(), 5, "5 seconds"); test.equal(moment.duration("10675199.02:48:05.4775807").milliseconds(), 477, "477 milliseconds"); test.done(); }, "instatiation from serialized C# TimeSpan minValue" : function (test) { test.expect(6); test.equal(moment.duration("-10675199.02:48:05.4775808").years(), -29653, "29653 years"); test.equal(moment.duration("-10675199.02:48:05.4775808").days(), -29, "29 day"); test.equal(moment.duration("-10675199.02:48:05.4775808").hours(), -2, "2 hours"); test.equal(moment.duration("-10675199.02:48:05.4775808").minutes(), -48, "48 minutes"); test.equal(moment.duration("-10675199.02:48:05.4775808").seconds(), -5, "5 seconds"); test.equal(moment.duration("-10675199.02:48:05.4775808").milliseconds(), -477, "477 milliseconds"); test.done(); }, "humanize" : function (test) { test.expect(32); moment.lang('en'); test.equal(moment.duration({seconds: 44}).humanize(), "a few seconds", "44 seconds = a few seconds"); test.equal(moment.duration({seconds: 45}).humanize(), "a minute", "45 seconds = a minute"); test.equal(moment.duration({seconds: 89}).humanize(), "a minute", "89 seconds = a minute"); test.equal(moment.duration({seconds: 90}).humanize(), "2 minutes", "90 seconds = 2 minutes"); test.equal(moment.duration({minutes: 44}).humanize(), "44 minutes", "44 minutes = 44 minutes"); test.equal(moment.duration({minutes: 45}).humanize(), "an hour", "45 minutes = an hour"); test.equal(moment.duration({minutes: 89}).humanize(), "an hour", "89 minutes = an hour"); test.equal(moment.duration({minutes: 90}).humanize(), "2 hours", "90 minutes = 2 hours"); test.equal(moment.duration({hours: 5}).humanize(), "5 hours", "5 hours = 5 hours"); test.equal(moment.duration({hours: 21}).humanize(), "21 hours", "21 hours = 21 hours"); test.equal(moment.duration({hours: 22}).humanize(), "a day", "22 hours = a day"); test.equal(moment.duration({hours: 35}).humanize(), "a day", "35 hours = a day"); test.equal(moment.duration({hours: 36}).humanize(), "2 days", "36 hours = 2 days"); test.equal(moment.duration({days: 1}).humanize(), "a day", "1 day = a day"); test.equal(moment.duration({days: 5}).humanize(), "5 days", "5 days = 5 days"); test.equal(moment.duration({weeks: 1}).humanize(), "7 days", "1 week = 7 days"); test.equal(moment.duration({days: 25}).humanize(), "25 days", "25 days = 25 days"); test.equal(moment.duration({days: 26}).humanize(), "a month", "26 days = a month"); test.equal(moment.duration({days: 30}).humanize(), "a month", "30 days = a month"); test.equal(moment.duration({days: 45}).humanize(), "a month", "45 days = a month"); test.equal(moment.duration({days: 46}).humanize(), "2 months", "46 days = 2 months"); test.equal(moment.duration({days: 74}).humanize(), "2 months", "75 days = 2 months"); test.equal(moment.duration({days: 76}).humanize(), "3 months", "76 days = 3 months"); test.equal(moment.duration({months: 1}).humanize(), "a month", "1 month = a month"); test.equal(moment.duration({months: 5}).humanize(), "5 months", "5 months = 5 months"); test.equal(moment.duration({days: 344}).humanize(), "11 months", "344 days = 11 months"); test.equal(moment.duration({days: 345}).humanize(), "a year", "345 days = a year"); test.equal(moment.duration({days: 547}).humanize(), "a year", "547 days = a year"); test.equal(moment.duration({days: 548}).humanize(), "2 years", "548 days = 2 years"); test.equal(moment.duration({years: 1}).humanize(), "a year", "1 year = a year"); test.equal(moment.duration({years: 5}).humanize(), "5 years", "5 years = 5 years"); test.equal(moment.duration(7200000).humanize(), "2 hours", "7200000 = 2 minutes"); test.done(); }, "humanize duration with suffix" : function (test) { test.expect(2); moment.lang('en'); test.equal(moment.duration({seconds: 44}).humanize(true), "in a few seconds", "44 seconds = a few seconds"); test.equal(moment.duration({seconds: -44}).humanize(true), "a few seconds ago", "44 seconds = a few seconds"); test.done(); }, "bubble value up" : function (test) { test.expect(5); test.equal(moment.duration({milliseconds: 61001}).milliseconds(), 1, "61001 milliseconds has 1 millisecond left over"); test.equal(moment.duration({milliseconds: 61001}).seconds(), 1, "61001 milliseconds has 1 second left over"); test.equal(moment.duration({milliseconds: 61001}).minutes(), 1, "61001 milliseconds has 1 minute left over"); test.equal(moment.duration({minutes: 350}).minutes(), 50, "350 minutes has 50 minutes left over"); test.equal(moment.duration({minutes: 350}).hours(), 5, "350 minutes has 5 hours left over"); test.done(); }, "clipping" : function (test) { test.expect(18); test.equal(moment.duration({months: 11}).months(), 11, "11 months is 11 months"); test.equal(moment.duration({months: 11}).years(), 0, "11 months makes no year"); test.equal(moment.duration({months: 12}).months(), 0, "12 months is 0 months left over"); test.equal(moment.duration({months: 12}).years(), 1, "12 months makes 1 year"); test.equal(moment.duration({months: 13}).months(), 1, "13 months is 1 month left over"); test.equal(moment.duration({months: 13}).years(), 1, "13 months makes 1 year"); test.equal(moment.duration({days: 29}).days(), 29, "29 days is 29 days"); test.equal(moment.duration({days: 29}).months(), 0, "29 days makes no month"); test.equal(moment.duration({days: 30}).days(), 0, "30 days is 0 days left over"); test.equal(moment.duration({days: 30}).months(), 1, "30 days is a month"); test.equal(moment.duration({days: 31}).days(), 1, "31 days is 1 day left over"); test.equal(moment.duration({days: 31}).months(), 1, "31 days is a month"); test.equal(moment.duration({hours: 23}).hours(), 23, "23 hours is 23 hours"); test.equal(moment.duration({hours: 23}).days(), 0, "23 hours makes no day"); test.equal(moment.duration({hours: 24}).hours(), 0, "24 hours is 0 hours left over"); test.equal(moment.duration({hours: 24}).days(), 1, "24 hours makes 1 day"); test.equal(moment.duration({hours: 25}).hours(), 1, "25 hours is 1 hour left over"); test.equal(moment.duration({hours: 25}).days(), 1, "25 hours makes 1 day"); test.done(); }, "effective equivalency" : function (test) { test.expect(7); test.deepEqual(moment.duration({seconds: 1})._data, moment.duration({milliseconds: 1000})._data, "1 second is the same as 1000 milliseconds"); test.deepEqual(moment.duration({seconds: 60})._data, moment.duration({minutes: 1})._data, "1 minute is the same as 60 seconds"); test.deepEqual(moment.duration({minutes: 60})._data, moment.duration({hours: 1})._data, "1 hour is the same as 60 minutes"); test.deepEqual(moment.duration({hours: 24})._data, moment.duration({days: 1})._data, "1 day is the same as 24 hours"); test.deepEqual(moment.duration({days: 7})._data, moment.duration({weeks: 1})._data, "1 week is the same as 7 days"); test.deepEqual(moment.duration({days: 30})._data, moment.duration({months: 1})._data, "1 month is the same as 30 days"); test.deepEqual(moment.duration({months: 12})._data, moment.duration({years: 1})._data, "1 years is the same as 12 months"); test.done(); }, "asGetters" : function (test) { var d = moment.duration({ years: 2, months: 3, weeks: 2, days: 1, hours: 8, minutes: 9, seconds: 20, milliseconds: 12 }); test.expect(8); test.equal(d.asYears().toFixed(2), "2.29", "years"); test.equal(d.asMonths().toFixed(2), "27.51", "months"); test.equal(d.asWeeks().toFixed(2), "119.33", "weeks"); test.equal(d.asDays().toFixed(2), "835.34", "days"); test.equal(d.asHours().toFixed(2), "20048.16", "hours"); test.equal(d.asMinutes().toFixed(2), "1202889.33", "minutes"); test.equal(d.asSeconds().toFixed(2), "72173360.01", "seconds"); test.equal(d.asMilliseconds(), 72173360012, "milliseconds"); test.done(); }, "generic as getter" : function (test) { var d = moment.duration({ years: 2, months: 3, weeks: 2, days: 1, hours: 8, minutes: 9, seconds: 20, milliseconds: 12 }); test.expect(24); test.equal(d.as("years").toFixed(2), "2.29", "years"); test.equal(d.as("year").toFixed(2), "2.29", "years = year"); test.equal(d.as("y").toFixed(2), "2.29", "years = y"); test.equal(d.as("months").toFixed(2), "27.51", "months"); test.equal(d.as("month").toFixed(2), "27.51", "months = month"); test.equal(d.as("M").toFixed(2), "27.51", "months = M"); test.equal(d.as("weeks").toFixed(2), "119.33", "weeks"); test.equal(d.as("week").toFixed(2), "119.33", "weeks = week"); test.equal(d.as("w").toFixed(2), "119.33", "weeks = w"); test.equal(d.as("days").toFixed(2), "835.34", "days"); test.equal(d.as("day").toFixed(2), "835.34", "days = day"); test.equal(d.as("d").toFixed(2), "835.34", "days = d"); test.equal(d.as("hours").toFixed(2), "20048.16", "hours"); test.equal(d.as("hour").toFixed(2), "20048.16", "hours = hour"); test.equal(d.as("h").toFixed(2), "20048.16", "hours = h"); test.equal(d.as("minutes").toFixed(2), "1202889.33", "minutes"); test.equal(d.as("minute").toFixed(2), "1202889.33", "minutes = minute"); test.equal(d.as("m").toFixed(2), "1202889.33", "minutes = m"); test.equal(d.as("seconds").toFixed(2), "72173360.01", "seconds"); test.equal(d.as("second").toFixed(2), "72173360.01", "seconds = second"); test.equal(d.as("s").toFixed(2), "72173360.01", "seconds = s"); test.equal(d.as("milliseconds"), 72173360012, "milliseconds"); test.equal(d.as("millisecond"), 72173360012, "milliseconds = millisecond"); test.equal(d.as("ms"), 72173360012, "milliseconds = ms"); test.done(); }, "isDuration" : function (test) { test.expect(3); test.ok(moment.isDuration(moment.duration(12345678)), "correctly says true"); test.ok(!moment.isDuration(moment()), "moment object is not a duration"); test.ok(!moment.isDuration({milliseconds: 1}), "plain object is not a duration"); test.done(); }, "add" : function (test) { test.expect(4); var d = moment.duration({months: 4, weeks: 3, days: 2}); // for some reason, d._data._months does not get updated; use d._months instead. test.equal(d.add(1, 'month')._months, 5, 'Add months'); test.equal(d.add(5, 'days')._days, 28, 'Add days'); test.equal(d.add(10000)._milliseconds, 10000, 'Add milliseconds'); test.equal(d.add({h: 23, m: 59})._milliseconds, 23 * 60 * 60 * 1000 + 59 * 60 * 1000 + 10000, 'Add hour:minute'); test.done(); }, "add and bubble" : function (test) { test.expect(4); test.equal(moment.duration(1, 'second').add(1000, 'milliseconds').seconds(), 2, 'Adding milliseconds should bubble up to seconds'); test.equal(moment.duration(1, 'minute').add(60, 'second').minutes(), 2, 'Adding seconds should bubble up to minutes'); test.equal(moment.duration(1, 'hour').add(60, 'minutes').hours(), 2, 'Adding minutes should bubble up to hours'); test.equal(moment.duration(1, 'day').add(24, 'hours').days(), 2, 'Adding hours should bubble up to days'); test.done(); }, "subtract and bubble" : function (test) { test.expect(4); test.equal(moment.duration(2, 'second').subtract(1000, 'milliseconds').seconds(), 1, 'Subtracting milliseconds should bubble up to seconds'); test.equal(moment.duration(2, 'minute').subtract(60, 'second').minutes(), 1, 'Subtracting seconds should bubble up to minutes'); test.equal(moment.duration(2, 'hour').subtract(60, 'minutes').hours(), 1, 'Subtracting minutes should bubble up to hours'); test.equal(moment.duration(2, 'day').subtract(24, 'hours').days(), 1, 'Subtracting hours should bubble up to days'); test.done(); }, "subtract" : function (test) { test.expect(4); var d = moment.duration({months: 2, weeks: 2, days: 0, hours: 5}); // for some reason, d._data._months does not get updated; use d._months instead. test.equal(d.subtract(1, 'months')._months, 1, 'Subtract months'); test.equal(d.subtract(14, 'days')._days, 0, 'Subtract days'); test.equal(d.subtract(10000)._milliseconds, 5 * 60 * 60 * 1000 - 10000, 'Subtract milliseconds'); test.equal(d.subtract({h: 1, m: 59})._milliseconds, 3 * 60 * 60 * 1000 + 1 * 60 * 1000 - 10000, 'Subtract hour:minute'); test.done(); } }; assets/plugins/moment/test/moment/is_valid.js000064400000021773152510437670015460 0ustar00var moment = require("../../moment"); exports.is_valid = { "array bad month" : function (test) { test.expect(2); test.equal(moment([2010, -1]).isValid(), false, 'month -1'); test.equal(moment([2100, 12]).isValid(), false, 'month 12'); test.done(); }, "array good month" : function (test) { test.expect(24); for (var i = 0; i < 12; i++) { test.equal(moment([2010, i]).isValid(), true, 'month ' + i); test.equal(moment.utc([2010, i]).isValid(), true, 'month ' + i); } test.done(); }, "array bad date" : function (test) { test.expect(4); test.equal(moment([2010, 0, 0]).isValid(), false, 'date 0'); test.equal(moment([2100, 0, 32]).isValid(), false, 'date 32'); test.equal(moment.utc([2010, 0, 0]).isValid(), false, 'utc date 0'); test.equal(moment.utc([2100, 0, 32]).isValid(), false, 'utc date 32'); test.done(); }, "array bad date leap year" : function (test) { test.expect(8); test.equal(moment([2010, 1, 29]).isValid(), false, '2010 feb 29'); test.equal(moment([2100, 1, 29]).isValid(), false, '2100 feb 29'); test.equal(moment([2008, 1, 30]).isValid(), false, '2008 feb 30'); test.equal(moment([2000, 1, 30]).isValid(), false, '2000 feb 30'); test.equal(moment.utc([2010, 1, 29]).isValid(), false, 'utc 2010 feb 29'); test.equal(moment.utc([2100, 1, 29]).isValid(), false, 'utc 2100 feb 29'); test.equal(moment.utc([2008, 1, 30]).isValid(), false, 'utc 2008 feb 30'); test.equal(moment.utc([2000, 1, 30]).isValid(), false, 'utc 2000 feb 30'); test.done(); }, "string + formats bad date" : function (test) { test.expect(9); test.equal(moment('2020-00-00', ['YYYY-MM-DD', 'DD-MM-YYYY']).isValid(), false, 'invalid on all in array'); test.equal(moment('2020-00-00', ['DD-MM-YYYY', 'YYYY-MM-DD']).isValid(), false, 'invalid on all in array'); test.equal(moment('2020-01-01', ['YYYY-MM-DD', 'DD-MM-YYYY']).isValid(), true, 'valid on first'); test.equal(moment('2020-01-01', ['DD-MM-YYYY', 'YYYY-MM-DD']).isValid(), true, 'valid on last'); test.equal(moment('2020-01-01', ['YYYY-MM-DD', 'YYYY-DD-MM']).isValid(), true, 'valid on both'); test.equal(moment('2020-13-01', ['YYYY-MM-DD', 'YYYY-DD-MM']).isValid(), true, 'valid on last'); test.equal(moment('12-13-2012', ['DD-MM-YYYY', 'YYYY-MM-DD']).isValid(), false, 'month rollover'); test.equal(moment('12-13-2012', ['DD-MM-YYYY', 'DD-MM-YYYY']).isValid(), false, 'month rollover'); test.equal(moment('38-12-2012', ['DD-MM-YYYY']).isValid(), false, 'day rollover'); test.done(); }, "string nonsensical" : function (test) { test.expect(1); test.equal(moment('fail').isValid(), false, 'string "fail"'); test.done(); }, "string nonsensical with format" : function (test) { test.expect(2); test.equal(moment('fail', "MM-DD-YYYY").isValid(), false, 'string "fail" with format "MM-DD-YYYY"'); test.equal(moment("xx-xx-2001", 'DD-MM-YYY').isValid(), false, 'string "xx-xx-2001" with format "MM-DD-YYYY"'); test.done(); }, "string with bad month name" : function (test) { test.expect(2); moment.lang('en'); test.equal(moment('01-Nam-2012', 'DD-MMM-YYYY').isValid(), false, '"Nam" is an invalid month'); test.equal(moment('01-Aug-2012', 'DD-MMM-YYYY').isValid(), true, '"Aug" is a valid month'); test.done(); }, "string with spaceless format" : function (test) { test.expect(1); test.equal(moment('10Sep2001', 'DDMMMYYYY').isValid(), true, "Parsing 10Sep2001 should result in a valid date"); test.done(); }, "invalid string iso 8601" : function (test) { var tests = [ '2010-00-00', '2010-01-00', '2010-01-40', '2010-01-01T24', '2010-01-01T23:60', '2010-01-01T23:59:60' ], i; test.expect(tests.length * 2); for (i = 0; i < tests.length; i++) { test.equal(moment(tests[i]).isValid(), false, tests[i] + ' should be invalid'); test.equal(moment.utc(tests[i]).isValid(), false, tests[i] + ' should be invalid'); } test.done(); }, "invalid string iso 8601 + timezone" : function (test) { var tests = [ '2010-00-00+00:00', '2010-01-00+00:00', '2010-01-40+00:00', '2010-01-40T24+00:00', '2010-01-40T23:60+00:00', '2010-01-40T23:59:60+00:00', '2010-01-40T23:59:59.9999+00:00' ], i; test.expect(tests.length * 2); for (i = 0; i < tests.length; i++) { test.equal(moment(tests[i]).isValid(), false, tests[i] + ' should be invalid'); test.equal(moment.utc(tests[i]).isValid(), false, tests[i] + ' should be invalid'); } test.done(); }, "valid string iso 8601 + timezone" : function (test) { var tests = [ '2010-01-01', '2010-01-30', '2010-01-30T23+00:00', '2010-01-30T23:59+00:00', '2010-01-30T23:59:59+00:00', '2010-01-30T23:59:59.999+00:00', '2010-01-30T23:59:59.999-07:00', '2010-01-30T00:00:00.000+07:00' ], i; test.expect(tests.length * 2); for (i = 0; i < tests.length; i++) { test.equal(moment(tests[i]).isValid(), true, tests[i] + ' should be valid'); test.equal(moment.utc(tests[i]).isValid(), true, tests[i] + ' should be valid'); } test.done(); }, "invalidAt" : function (test) { test.expect(7); test.equal(moment([2000, 12]).invalidAt(), 1, 'month 12 is invalid: 0-11'); test.equal(moment([2000, 1, 30]).invalidAt(), 2, '30 is not a valid february day'); test.equal(moment([2000, 1, 29, 24]).invalidAt(), 3, '24 is invalid hour'); test.equal(moment([2000, 1, 29, 23, 60]).invalidAt(), 4, '60 is invalid minute'); test.equal(moment([2000, 1, 29, 23, 59, 60]).invalidAt(), 5, '60 is invalid second'); test.equal(moment([2000, 1, 29, 23, 59, 59, 1000]).invalidAt(), 6, '1000 is invalid millisecond'); test.equal(moment([2000, 1, 29, 23, 59, 59, 999]).invalidAt(), -1, '-1 if everything is fine'); test.done(); }, "valid Unix timestamp" : function (test) { test.expect(21); test.equal(moment(1371065286, "X").isValid(), true, 'number integer'); test.equal(moment(1379066897.0, "X").isValid(), true, 'number whole 1dp'); test.equal(moment(1379066897.7, "X").isValid(), true, 'number 1dp'); test.equal(moment(1379066897.00, "X").isValid(), true, 'number whole 2dp'); test.equal(moment(1379066897.07, "X").isValid(), true, 'number 2dp'); test.equal(moment(1379066897.17, "X").isValid(), true, 'number 2dp'); test.equal(moment(1379066897.000, "X").isValid(), true, 'number whole 3dp'); test.equal(moment(1379066897.007, "X").isValid(), true, 'number 3dp'); test.equal(moment(1379066897.017, "X").isValid(), true, 'number 3dp'); test.equal(moment(1379066897.157, "X").isValid(), true, 'number 3dp'); test.equal(moment("1371065286", "X").isValid(), true, 'string integer'); test.equal(moment("1379066897.", "X").isValid(), true, 'string trailing .'); test.equal(moment("1379066897.0", "X").isValid(), true, 'string whole 1dp'); test.equal(moment("1379066897.7", "X").isValid(), true, 'string 1dp'); test.equal(moment("1379066897.00", "X").isValid(), true, 'string whole 2dp'); test.equal(moment("1379066897.07", "X").isValid(), true, 'string 2dp'); test.equal(moment("1379066897.17", "X").isValid(), true, 'string 2dp'); test.equal(moment("1379066897.000", "X").isValid(), true, 'string whole 3dp'); test.equal(moment("1379066897.007", "X").isValid(), true, 'string 3dp'); test.equal(moment("1379066897.017", "X").isValid(), true, 'string 3dp'); test.equal(moment("1379066897.157", "X").isValid(), true, 'string 3dp'); test.done(); }, "invalid Unix timestamp" : function (test) { test.expect(8); test.equal(moment(undefined, "X").isValid(), false, 'undefined'); test.equal(moment("undefined", "X").isValid(), false, 'string undefined'); try { test.equal(moment(null, "X").isValid(), false, 'null'); } catch (e) { test.ok(true, 'null'); } test.equal(moment("null", "X").isValid(), false, 'string null'); test.equal(moment([], "X").isValid(), false, 'array'); test.equal(moment("{}", "X").isValid(), false, 'object'); try { test.equal(moment("", "X").isValid(), false, 'string empty'); } catch (e) { test.ok(true, 'string empty'); } test.equal(moment(" ", "X").isValid(), false, 'string space'); test.done(); } }; assets/plugins/moment/test/moment/create.js000064400000073572152510437670015135 0ustar00var moment = require("../../moment"); exports.create = { "array" : function (test) { test.expect(8); test.ok(moment([2010]).toDate() instanceof Date, "[2010]"); test.ok(moment([2010, 1]).toDate() instanceof Date, "[2010, 1]"); test.ok(moment([2010, 1, 12]).toDate() instanceof Date, "[2010, 1, 12]"); test.ok(moment([2010, 1, 12, 1]).toDate() instanceof Date, "[2010, 1, 12, 1]"); test.ok(moment([2010, 1, 12, 1, 1]).toDate() instanceof Date, "[2010, 1, 12, 1, 1]"); test.ok(moment([2010, 1, 12, 1, 1, 1]).toDate() instanceof Date, "[2010, 1, 12, 1, 1, 1]"); test.ok(moment([2010, 1, 12, 1, 1, 1, 1]).toDate() instanceof Date, "[2010, 1, 12, 1, 1, 1, 1]"); test.equal(+moment(new Date(2010, 1, 14, 15, 25, 50, 125)), +moment([2010, 1, 14, 15, 25, 50, 125]), "constructing with array === constructing with new Date()"); test.done(); }, "array copying": function (test) { var importantArray = [2009, 11]; test.expect(1); moment(importantArray); test.deepEqual(importantArray, [2009, 11], "initializer should not mutate the original array"); test.done(); }, "object" : function (test) { test.expect(10); test.ok(moment({year: 2010}).toDate() instanceof Date, "{year: 2010}"); test.ok(moment({year: 2010, month: 1}).toDate() instanceof Date, "{year: 2010, month: 1}"); test.ok(moment({year: 2010, month: 1, day: 12}).toDate() instanceof Date, "{year: 2010, month: 1, day: 12}"); test.ok(moment({year: 2010, month: 1, day: 12, hours: 1}).toDate() instanceof Date, "{year: 2010, month: 1, day: 12, hours: 1}"); test.ok(moment({year: 2010, month: 1, day: 12, hours: 1, minutes: 1}).toDate() instanceof Date, "{year: 2010, month: 1, hours: 12, minutes: 1, seconds: 1}"); test.ok(moment({year: 2010, month: 1, day: 12, hours: 1, minutes: 1, seconds: 1}).toDate() instanceof Date, "{year: 2010, month: 1, day: 12, hours: 1, minutes: 1, seconds: 1}"); test.ok(moment({year: 2010, month: 1, day: 12, hours: 1, minutes: 1, seconds: 1, milliseconds: 1}).toDate() instanceof Date, "{year: 2010, month: 1, day: 12, hours: 1, minutes: 1, seconds: 1, milliseconds: 1}"); test.equal(+moment(new Date(2010, 1, 14, 15, 25, 50, 125)), +moment({years: 2010, months: 1, days: 14, hours: 15, minutes: 25, seconds: 50, milliseconds: 125}), "constructing with object (long plural) === constructing with new Date()"); test.equal(+moment(new Date(2010, 1, 14, 15, 25, 50, 125)), +moment({year: 2010, month: 1, day: 14, hour: 15, minute: 25, second: 50, millisecond: 125}), "constructing with object (long) === constructing with new Date()"); test.equal(+moment(new Date(2010, 1, 14, 15, 25, 50, 125)), +moment({y: 2010, M: 1, d: 14, h: 15, m: 25, s: 50, ms: 125}), "constructing with object (short) === constructing with new Date()"); test.done(); }, "multi format array copying": function (test) { var importantArray = ['MM/DD/YYYY', 'YYYY-MM-DD', 'MM-DD-YYYY']; test.expect(1); moment('1999-02-13', importantArray); test.deepEqual(importantArray, ['MM/DD/YYYY', 'YYYY-MM-DD', 'MM-DD-YYYY'], "initializer should not mutate the original array"); test.done(); }, "number" : function (test) { test.expect(3); test.ok(moment(1000).toDate() instanceof Date, "1000"); test.ok((moment(1000).valueOf() === 1000), "testing valueOf"); test.ok((moment.utc(1000).valueOf() === 1000), "testing valueOf"); test.done(); }, "unix" : function (test) { test.expect(8); test.equal(moment.unix(1).valueOf(), 1000, "1 unix timestamp == 1000 Date.valueOf"); test.equal(moment(1000).unix(), 1, "1000 Date.valueOf == 1 unix timestamp"); test.equal(moment.unix(1000).valueOf(), 1000000, "1000 unix timestamp == 1000000 Date.valueOf"); test.equal(moment(1500).unix(), 1, "1500 Date.valueOf == 1 unix timestamp"); test.equal(moment(1900).unix(), 1, "1900 Date.valueOf == 1 unix timestamp"); test.equal(moment(2100).unix(), 2, "2100 Date.valueOf == 2 unix timestamp"); test.equal(moment(1333129333524).unix(), 1333129333, "1333129333524 Date.valueOf == 1333129333 unix timestamp"); test.equal(moment(1333129333524000).unix(), 1333129333524, "1333129333524000 Date.valueOf == 1333129333524 unix timestamp"); test.done(); }, "date" : function (test) { test.expect(1); test.ok(moment(new Date()).toDate() instanceof Date, "new Date()"); test.done(); }, "date mutation" : function (test) { test.expect(1); var a = new Date(); test.ok(moment(a).toDate() !== a, "the date moment uses should not be the date passed in"); test.done(); }, "moment" : function (test) { test.expect(2); test.ok(moment(moment()).toDate() instanceof Date, "moment(moment())"); test.ok(moment(moment(moment())).toDate() instanceof Date, "moment(moment(moment()))"); test.done(); }, "cloning moment should only copy own properties" : function (test) { test.expect(2); test.ok(!moment().clone().hasOwnProperty('month'), "Should not clone prototype methods"); test.ok(!moment().clone().hasOwnProperty('_lang'), "Should not clone prototype objects"); test.done(); }, "undefined" : function (test) { test.expect(1); test.ok(moment().toDate() instanceof Date, "undefined"); test.done(); }, "string without format" : function (test) { test.expect(3); test.ok(moment("Aug 9, 1995").toDate() instanceof Date, "Aug 9, 1995"); test.ok(moment("Mon, 25 Dec 1995 13:30:00 GMT").toDate() instanceof Date, "Mon, 25 Dec 1995 13:30:00 GMT"); test.equal(new Date(2013, 8, 13, 7, 26).valueOf(), moment("2013-09-13 7:26 am").valueOf(), "2013-09-13 7:26 am"); test.done(); }, "string without format - json" : function (test) { test.expect(5); test.equal(moment("Date(1325132654000)").valueOf(), 1325132654000, "Date(1325132654000)"); test.equal(moment("Date(-1325132654000)").valueOf(), -1325132654000, "Date(-1325132654000)"); test.equal(moment("/Date(1325132654000)/").valueOf(), 1325132654000, "/Date(1325132654000)/"); test.equal(moment("/Date(1325132654000+0700)/").valueOf(), 1325132654000, "/Date(1325132654000+0700)/"); test.equal(moment("/Date(1325132654000-0700)/").valueOf(), 1325132654000, "/Date(1325132654000-0700)/"); test.done(); }, "string with format dropped am/pm bug" : function (test) { moment.lang('en'); test.expect(3); test.equal(moment('05/1/2012', 'MM/DD/YYYY h:m:s a').format('MM/DD/YYYY'), '05/01/2012', 'should not break if am/pm is left off from the parsing tokens'); test.equal(moment('05/1/2012 12:25:00 am', 'MM/DD/YYYY h:m:s a').format('MM/DD/YYYY'), '05/01/2012', 'should not break if am/pm is left off from the parsing tokens'); test.equal(moment('05/1/2012 12:25:00 pm', 'MM/DD/YYYY h:m:s a').format('MM/DD/YYYY'), '05/01/2012', 'should not break if am/pm is left off from the parsing tokens'); test.done(); }, "empty string with formats" : function (test) { test.expect(3); var currentDate = moment().startOf('day').format('YYYY-MM-DD HH:mm:ss'); test.equal(moment(' ', 'MM').format('YYYY-MM-DD HH:mm:ss'), currentDate, 'should not break if input is an empty string'); test.equal(moment(' ', 'DD').format('YYYY-MM-DD HH:mm:ss'), currentDate, 'should not break if input is an empty string'); test.equal(moment(' ', ['MM', "DD"]).format('YYYY-MM-DD HH:mm:ss'), currentDate, 'should not break if input is an empty string'); test.done(); }, "defaulting to current date" : function (test) { test.expect(4); var now = moment(); test.equal(moment('12:13:14', 'hh:mm:ss').format('YYYY-MM-DD hh:mm:ss'), now.clone().hour(12).minute(13).second(14).format('YYYY-MM-DD hh:mm:ss'), 'given only time default to current date'); test.equal(moment('05', 'DD').format('YYYY-MM-DD'), now.clone().date(5).format('YYYY-MM-DD'), 'given day of month default to current month, year'); test.equal(moment('05', 'MM').format('YYYY-MM-DD'), now.clone().month(4).date(1).format('YYYY-MM-DD'), 'given month default to current year'); test.equal(moment('1996', 'YYYY').format('YYYY-MM-DD'), now.clone().year(1996).month(0).date(1).format('YYYY-MM-DD'), 'given year do not default'); test.done(); }, "matching am/pm" : function (test) { test.expect(13); test.equal(moment('2012-09-03T03:00PM', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for PM'); test.equal(moment('2012-09-03T03:00P.M.', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for P.M.'); test.equal(moment('2012-09-03T03:00P', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for P'); test.equal(moment('2012-09-03T03:00pm', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for pm'); test.equal(moment('2012-09-03T03:00p.m.', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for p.m.'); test.equal(moment('2012-09-03T03:00p', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for p'); test.equal(moment('2012-09-03T03:00AM', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for AM'); test.equal(moment('2012-09-03T03:00A.M.', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for A.M.'); test.equal(moment('2012-09-03T03:00A', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for A'); test.equal(moment('2012-09-03T03:00am', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for am'); test.equal(moment('2012-09-03T03:00a.m.', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for a.m.'); test.equal(moment('2012-09-03T03:00a', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for a'); test.equal(moment('5:00p.m.March 4 2012', 'h:mmAMMMM D YYYY').format('YYYY-MM-DDThh:mmA'), '2012-03-04T05:00PM', 'am/pm should parse correctly before month names'); test.done(); }, "string with format" : function (test) { moment.lang('en'); var a = [ ['MM-DD-YYYY', '12-02-1999'], ['DD-MM-YYYY', '12-02-1999'], ['DD/MM/YYYY', '12/02/1999'], ['DD_MM_YYYY', '12_02_1999'], ['DD:MM:YYYY', '12:02:1999'], ['D-M-YY', '2-2-99'], ['YY', '99'], ['DDD-YYYY', '300-1999'], ['DD-MM-YYYY h:m:s', '12-02-1999 2:45:10'], ['DD-MM-YYYY h:m:s a', '12-02-1999 2:45:10 am'], ['DD-MM-YYYY h:m:s a', '12-02-1999 2:45:10 pm'], ['h:mm a', '12:00 pm'], ['h:mm a', '12:30 pm'], ['h:mm a', '12:00 am'], ['h:mm a', '12:30 am'], ['HH:mm', '12:00'], ['YYYY-MM-DDTHH:mm:ss', '2011-11-11T11:11:11'], ['MM-DD-YYYY [M]', '12-02-1999 M'], ['ddd MMM DD HH:mm:ss YYYY', 'Tue Apr 07 22:52:51 2009'], ['HH:mm:ss', '12:00:00'], ['HH:mm:ss', '12:30:00'], ['HH:mm:ss', '00:00:00'], ['HH:mm:ss S', '00:30:00 1'], ['HH:mm:ss SS', '00:30:00 12'], ['HH:mm:ss SSS', '00:30:00 123'], ['HH:mm:ss S', '00:30:00 7'], ['HH:mm:ss SS', '00:30:00 78'], ['HH:mm:ss SSS', '00:30:00 789'], ['X.SSS', '1234567890.123'], ['LT', '12:30 AM'], ['L', '09/02/1999'], ['l', '9/2/1999'], ['LL', 'September 2 1999'], ['ll', 'Sep 2 1999'], ['LLL', 'September 2 1999 12:30 AM'], ['lll', 'Sep 2 1999 12:30 AM'], ['LLLL', 'Thursday, September 2 1999 12:30 AM'], ['llll', 'Thu, Sep 2 1999 12:30 AM'] ], i; test.expect(a.length); for (i = 0; i < a.length; i++) { test.equal(moment(a[i][1], a[i][0]).format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "unix timestamp format" : function (test) { var formats = ['X', 'X.S', 'X.SS', 'X.SSS'], i, format; test.expect(formats.length * 4); for (i = 0; i < formats.length; i++) { format = formats[i]; test.equal(moment('1234567890', format).valueOf(), 1234567890 * 1000, format + " matches timestamp without milliseconds"); test.equal(moment('1234567890.1', format).valueOf(), 1234567890 * 1000 + 100, format + " matches timestamp with deciseconds"); test.equal(moment('1234567890.12', format).valueOf(), 1234567890 * 1000 + 120, format + " matches timestamp with centiseconds"); test.equal(moment('1234567890.123', format).valueOf(), 1234567890 * 1000 + 123, format + " matches timestamp with milliseconds"); } test.done(); }, "string with format no separators" : function (test) { moment.lang('en'); var a = [ ['MMDDYYYY', '12021999'], ['DDMMYYYY', '12021999'], ['YYYYMMDD', '19991202'], ['DDMMMYYYY', '10Sep2001'] ], i; test.expect(a.length); for (i = 0; i < a.length; i++) { test.equal(moment(a[i][1], a[i][0]).format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "string with format (timezone)" : function (test) { test.expect(8); test.equal(moment('5 -0700', 'H ZZ').toDate().getUTCHours(), 12, 'parse hours "5 -0700" ---> "H ZZ"'); test.equal(moment('5 -07:00', 'H Z').toDate().getUTCHours(), 12, 'parse hours "5 -07:00" ---> "H Z"'); test.equal(moment('5 -0730', 'H ZZ').toDate().getUTCMinutes(), 30, 'parse hours "5 -0730" ---> "H ZZ"'); test.equal(moment('5 -07:30', 'H Z').toDate().getUTCMinutes(), 30, 'parse hours "5 -07:0" ---> "H Z"'); test.equal(moment('5 +0100', 'H ZZ').toDate().getUTCHours(), 4, 'parse hours "5 +0100" ---> "H ZZ"'); test.equal(moment('5 +01:00', 'H Z').toDate().getUTCHours(), 4, 'parse hours "5 +01:00" ---> "H Z"'); test.equal(moment('5 +0130', 'H ZZ').toDate().getUTCMinutes(), 30, 'parse hours "5 +0130" ---> "H ZZ"'); test.equal(moment('5 +01:30', 'H Z').toDate().getUTCMinutes(), 30, 'parse hours "5 +01:30" ---> "H Z"'); test.done(); }, "string with format (timezone offset)" : function (test) { var a, b, c, d, e, f; test.expect(4); a = new Date(Date.UTC(2011, 0, 1, 1)); b = moment('2011 1 1 0 -01:00', 'YYYY MM DD HH Z'); test.equal(a.getHours(), b.hours(), 'date created with utc == parsed string with timezone offset'); test.equal(+a, +b, 'date created with utc == parsed string with timezone offset'); c = moment('2011 2 1 10 -05:00', 'YYYY MM DD HH Z'); d = moment('2011 2 1 8 -07:00', 'YYYY MM DD HH Z'); test.equal(c.hours(), d.hours(), '10 am central time == 8 am pacific time'); e = moment.utc('Fri, 20 Jul 2012 17:15:00', 'ddd, DD MMM YYYY HH:mm:ss'); f = moment.utc('Fri, 20 Jul 2012 10:15:00 -0700', 'ddd, DD MMM YYYY HH:mm:ss ZZ'); test.equal(e.hours(), f.hours(), 'parse timezone offset in utc'); test.done(); }, "string with array of formats" : function (test) { test.expect(16); test.equal(moment('11-02-1999', ['MM-DD-YYYY', 'DD-MM-YYYY']).format('MM DD YYYY'), '11 02 1999', 'switching month and day'); test.equal(moment('02-11-1999', ['MM/DD/YYYY', 'YYYY MM DD', 'MM-DD-YYYY']).format('MM DD YYYY'), '02 11 1999', 'year last'); test.equal(moment('1999-02-11', ['MM/DD/YYYY', 'YYYY MM DD', 'MM-DD-YYYY']).format('MM DD YYYY'), '02 11 1999', 'year first'); test.equal(moment('02-11-1999', ['MM/DD/YYYY', 'YYYY MM DD']).format('MM DD YYYY'), '02 11 1999', 'year last'); test.equal(moment('1999-02-11', ['MM/DD/YYYY', 'YYYY MM DD']).format('MM DD YYYY'), '02 11 1999', 'year first'); test.equal(moment('02-11-1999', ['YYYY MM DD', 'MM/DD/YYYY']).format('MM DD YYYY'), '02 11 1999', 'year last'); test.equal(moment('1999-02-11', ['YYYY MM DD', 'MM/DD/YYYY']).format('MM DD YYYY'), '02 11 1999', 'year first'); test.equal(moment('13-11-1999', ['MM/DD/YYYY', 'DD/MM/YYYY']).format('MM DD YYYY'), '11 13 1999', 'second must be month'); test.equal(moment('11-13-1999', ['MM/DD/YYYY', 'DD/MM/YYYY']).format('MM DD YYYY'), '11 13 1999', 'first must be month'); test.equal(moment('13-14-1999', ['MM/DD/YYYY', 'DD/MM/YYYY']).format('MM DD YYYY'), '01 14 2000', 'either can be a month, month first format'); test.equal(moment('13-14-1999', ['DD/MM/YYYY', 'MM/DD/YYYY']).format('MM DD YYYY'), '02 13 2000', 'either can be a month, day first format'); test.equal(moment('11-02-10', ['MM/DD/YY', 'YY MM DD', 'DD-MM-YY']).format('MM DD YYYY'), '02 11 2010', 'all unparsed substrings have influence on format penalty'); test.equal(moment('11-02-10', ['MM.DD.YY', 'DD-MM-YY']).format('MM DD YYYY'), '02 11 2010', 'escape RegExp special characters on comparing'); test.equal(moment('13-14-98', ['DD MM YY', 'DD MM YYYY'])._f, 'DD MM YY', 'use two digit year'); test.equal(moment('13-14-1998', ['DD MM YY', 'DD MM YYYY'])._f, 'DD MM YYYY', 'use four digit year'); test.equal(moment('01', ["MM", "DD"])._f, "MM", "Should use first valid format"); test.done(); }, "string with format - years" : function (test) { test.expect(4); test.equal(moment('67', 'YY').format('YYYY'), '2067', '67 > 2067'); test.equal(moment('68', 'YY').format('YYYY'), '2068', '68 > 2068'); test.equal(moment('69', 'YY').format('YYYY'), '1969', '69 > 1969'); test.equal(moment('70', 'YY').format('YYYY'), '1970', '70 > 1970'); test.done(); }, "implicit cloning" : function (test) { test.expect(2); var momentA = moment([2011, 10, 10]), momentB = moment(momentA); momentA.month(5); test.equal(momentB.month(), 10, "Calling moment() on a moment will create a clone"); test.equal(momentA.month(), 5, "Calling moment() on a moment will create a clone"); test.done(); }, "explicit cloning" : function (test) { test.expect(2); var momentA = moment([2011, 10, 10]), momentB = momentA.clone(); momentA.month(5); test.equal(momentB.month(), 10, "Calling moment() on a moment will create a clone"); test.equal(momentA.month(), 5, "Calling moment() on a moment will create a clone"); test.done(); }, "cloning carrying over utc mode" : function (test) { test.expect(8); test.equal(moment().local().clone()._isUTC, false, "An explicit cloned local moment should have _isUTC == false"); test.equal(moment().utc().clone()._isUTC, true, "An cloned utc moment should have _isUTC == true"); test.equal(moment().clone()._isUTC, false, "An explicit cloned local moment should have _isUTC == false"); test.equal(moment.utc().clone()._isUTC, true, "An explicit cloned utc moment should have _isUTC == true"); test.equal(moment(moment().local())._isUTC, false, "An implicit cloned local moment should have _isUTC == false"); test.equal(moment(moment().utc())._isUTC, true, "An implicit cloned utc moment should have _isUTC == true"); test.equal(moment(moment())._isUTC, false, "An implicit cloned local moment should have _isUTC == false"); test.equal(moment(moment.utc())._isUTC, true, "An implicit cloned utc moment should have _isUTC == true"); test.done(); }, "parsing iso" : function (test) { var offset = moment([2011, 9, 08]).zone(), pad = function (input) { if (input < 10) { return '0' + input; } return '' + input; }, hourOffset = (offset > 0) ? Math.floor(offset / 60) : Math.ceil(offset / 60), minOffset = offset - (hourOffset * 60), tz = (offset > 0) ? '-' + pad(hourOffset) + ':' + pad(minOffset) : '+' + pad(-hourOffset) + ':' + pad(-minOffset), tz2 = tz.replace(':', ''), formats = [ ['2011-10-08', '2011-10-08T00:00:00.000' + tz], ['2011-10-08T18', '2011-10-08T18:00:00.000' + tz], ['2011-10-08T18:04', '2011-10-08T18:04:00.000' + tz], ['2011-10-08T18:04:20', '2011-10-08T18:04:20.000' + tz], ['2011-10-08T18:04' + tz, '2011-10-08T18:04:00.000' + tz], ['2011-10-08T18:04:20' + tz, '2011-10-08T18:04:20.000' + tz], ['2011-10-08T18:04' + tz2, '2011-10-08T18:04:00.000' + tz], ['2011-10-08T18:04:20' + tz2, '2011-10-08T18:04:20.000' + tz], ['2011-10-08T18:04:20.1' + tz2, '2011-10-08T18:04:20.100' + tz], ['2011-10-08T18:04:20.11' + tz2, '2011-10-08T18:04:20.110' + tz], ['2011-10-08T18:04:20.111' + tz2, '2011-10-08T18:04:20.111' + tz], ['2011-10-08 18', '2011-10-08T18:00:00.000' + tz], ['2011-10-08 18:04', '2011-10-08T18:04:00.000' + tz], ['2011-10-08 18:04:20', '2011-10-08T18:04:20.000' + tz], ['2011-10-08 18:04' + tz, '2011-10-08T18:04:00.000' + tz], ['2011-10-08 18:04:20' + tz, '2011-10-08T18:04:20.000' + tz], ['2011-10-08 18:04' + tz2, '2011-10-08T18:04:00.000' + tz], ['2011-10-08 18:04:20' + tz2, '2011-10-08T18:04:20.000' + tz], ['2011-10-08 18:04:20.1' + tz2, '2011-10-08T18:04:20.100' + tz], ['2011-10-08 18:04:20.11' + tz2, '2011-10-08T18:04:20.110' + tz], ['2011-10-08 18:04:20.111' + tz2, '2011-10-08T18:04:20.111' + tz] ], i; test.expect(formats.length); for (i = 0; i < formats.length; i++) { test.equal(formats[i][1], moment(formats[i][0]).format('YYYY-MM-DDTHH:mm:ss.SSSZ'), "moment should be able to parse ISO " + formats[i][0]); } test.done(); }, "parsing iso with T" : function (test) { test.expect(9); test.equal(moment('2011-10-08T18')._f, "YYYY-MM-DDTHH", "should include 'T' in the format"); test.equal(moment('2011-10-08T18:20')._f, "YYYY-MM-DDTHH:mm", "should include 'T' in the format"); test.equal(moment('2011-10-08T18:20:13')._f, "YYYY-MM-DDTHH:mm:ss", "should include 'T' in the format"); test.equal(moment('2011-10-08T18:20:13.321')._f, "YYYY-MM-DDTHH:mm:ss.S", "should include 'T' in the format"); test.equal(moment('2011-10-08 18')._f, "YYYY-MM-DD HH", "should not include 'T' in the format"); test.equal(moment('2011-10-08 18:20')._f, "YYYY-MM-DD HH:mm", "should not include 'T' in the format"); test.equal(moment('2011-10-08 18:20:13')._f, "YYYY-MM-DD HH:mm:ss", "should not include 'T' in the format"); test.equal(moment('2011-10-08 18:20:13.321')._f, "YYYY-MM-DD HH:mm:ss.S", "should not include 'T' in the format"); test.ok(moment("2013-04-23 15:23:47 UTC").isValid(), "including a trailing UTC in the input should work"); test.done(); }, "parsing iso Z timezone" : function (test) { var i, formats = [ ['2011-10-08T18:04Z', '2011-10-08T18:04:00.000+00:00'], ['2011-10-08T18:04:20Z', '2011-10-08T18:04:20.000+00:00'], ['2011-10-08T18:04:20.111Z', '2011-10-08T18:04:20.111+00:00'] ]; test.expect(formats.length); for (i = 0; i < formats.length; i++) { test.equal(moment.utc(formats[i][0]).format('YYYY-MM-DDTHH:mm:ss.SSSZ'), formats[i][1], "moment should be able to parse ISO " + formats[i][0]); } test.done(); }, "parsing iso Z timezone into local" : function (test) { test.expect(1); var m = moment('2011-10-08T18:04:20.111Z'); test.equal(m.utc().format('YYYY-MM-DDTHH:mm:ss.SSS'), '2011-10-08T18:04:20.111', "moment should be able to parse ISO 2011-10-08T18:04:20.111Z"); test.done(); }, "null" : function (test) { test.expect(3); test.equal(moment(''), null, "Calling moment('')"); test.equal(moment(null), null, "Calling moment(null)"); test.equal(moment('', 'YYYY-MM-DD'), null, "Calling moment('', 'YYYY-MM-DD')"); test.done(); }, "first century" : function (test) { test.expect(9); test.equal(moment([0, 0, 1]).format("YYYY-MM-DD"), "0000-01-01", "Year AD 0"); test.equal(moment([99, 0, 1]).format("YYYY-MM-DD"), "0099-01-01", "Year AD 99"); test.equal(moment([999, 0, 1]).format("YYYY-MM-DD"), "0999-01-01", "Year AD 999"); test.equal(moment('0 1 1', 'YYYY MM DD').format("YYYY-MM-DD"), "0000-01-01", "Year AD 0"); test.equal(moment('99 1 1', 'YYYY MM DD').format("YYYY-MM-DD"), "0099-01-01", "Year AD 99"); test.equal(moment('999 1 1', 'YYYY MM DD').format("YYYY-MM-DD"), "0999-01-01", "Year AD 999"); test.equal(moment('0 1 1', 'YYYYY MM DD').format("YYYYY-MM-DD"), "00000-01-01", "Year AD 0"); test.equal(moment('99 1 1', 'YYYYY MM DD').format("YYYYY-MM-DD"), "00099-01-01", "Year AD 99"); test.equal(moment('999 1 1', 'YYYYY MM DD').format("YYYYY-MM-DD"), "00999-01-01", "Year AD 999"); test.done(); }, "six digit years" : function (test) { test.expect(8); test.equal(moment([-270000, 0, 1]).format("YYYYY-MM-DD"), "-270000-01-01", "format BC 270,001"); test.equal(moment([ 270000, 0, 1]).format("YYYYY-MM-DD"), "270000-01-01", "format AD 270,000"); test.equal(moment("-270000-01-01", "YYYYY-MM-DD").toDate().getFullYear(), -270000, "parse BC 270,001"); test.equal(moment("270000-01-01", "YYYYY-MM-DD").toDate().getFullYear(), 270000, "parse AD 270,000"); test.equal(moment("+270000-01-01", "YYYYY-MM-DD").toDate().getFullYear(), 270000, "parse AD +270,000"); test.equal(moment.utc("-270000-01-01", "YYYYY-MM-DD").toDate().getUTCFullYear(), -270000, "parse utc BC 270,001"); test.equal(moment.utc("270000-01-01", "YYYYY-MM-DD").toDate().getUTCFullYear(), 270000, "parse utc AD 270,000"); test.equal(moment.utc("+270000-01-01", "YYYYY-MM-DD").toDate().getUTCFullYear(), 270000, "parse utc AD +270,000"); test.done(); }, "negative four digit years" : function (test) { test.expect(2); test.equal(moment("-1000-01-01", "YYYYY-MM-DD").toDate().getFullYear(), -1000, "parse BC 1,001"); test.equal(moment.utc("-1000-01-01", "YYYYY-MM-DD").toDate().getUTCFullYear(), -1000, "parse utc BC 1,001"); test.done(); }, "strict parsing" : function (test) { test.expect(10); test.equal(moment("2012-05", "YYYY-MM", true).format("YYYY-MM"), "2012-05", "parse correct string"); test.equal(moment(" 2012-05", "YYYY-MM", true).isValid(), false, "fail on extra whitespace"); test.equal(moment("foo 2012-05", "[foo] YYYY-MM", true).format('YYYY-MM'), "2012-05", "handle fixed text"); test.equal(moment("2012 05", "YYYY-MM", true).isValid(), false, "fail on different separator"); test.equal(moment("05 30 2010", ["DD MM YYYY", "MM DD YYYY"], true).format("MM DD YYYY"), "05 30 2010", "array with bad date"); test.equal(moment("05 30 2010", ["", "MM DD YYYY"], true).format("MM DD YYYY"), "05 30 2010", "array with invalid format"); test.equal(moment("05 30 2010", [" DD MM YYYY", "MM DD YYYY"], true).format("MM DD YYYY"), "05 30 2010", "array with non-matching format"); test.equal(moment("2010.*...", "YYYY.*", true).isValid(), false, "invalid format with regex chars"); test.equal(moment("2010.*", "YYYY.*", true).year(), 2010, "valid format with regex chars"); test.equal(moment(".*2010.*", ".*YYYY.*", true).year(), 2010, "valid format with regex chars on both sides"); test.done(); }, "parsing into a language" : function (test) { test.expect(2); moment.lang('parselang', { months : "one_two_three_four_five_six_seven_eight_nine_ten_eleven_twelve".split('_'), monthsShort : "one_two_three_four_five_six_seven_eight_nine_ten_eleven_twelve".split("_") }); moment.lang('en'); test.equal(moment('2012 seven', 'YYYY MMM', 'parselang').month(), 6, "should be able to parse in a specific language"); moment.lang('parselang'); test.equal(moment('2012 july', 'YYYY MMM', 'en').month(), 6, "should be able to parse in a specific language"); moment.lang('parselang', null); test.done(); } }; assets/plugins/moment/test/moment/listers.js000064400000006515152510437670015350 0ustar00var moment = require("../../moment"); exports.listers = { setUp : function (cb) { moment.lang('en'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "default" : function (test) { test.expect(5); test.deepEqual(moment.months(), ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]); test.deepEqual(moment.monthsShort(), ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]); test.deepEqual(moment.weekdays(), ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]); test.deepEqual(moment.weekdaysShort(), ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]); test.deepEqual(moment.weekdaysMin(), ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]); test.done(); }, "index" : function (test) { test.expect(5); test.equal(moment.months(2), "March"); test.equal(moment.monthsShort(2), "Mar"); test.equal(moment.weekdays(2), "Tuesday"); test.equal(moment.weekdaysShort(2), "Tue"); test.equal(moment.weekdaysMin(2), "Tu"); test.done(); }, "localized" : function (test) { var months = "one_two_three_four_five_six_seven_eight_nine_ten_eleven_twelve".split('_'), monthsShort = "on_tw_th_fo_fi_si_se_ei_ni_te_el_tw".split("_"), weekdays = "one_two_three_four_five_six_seven".split("_"), weekdaysShort = "on_tw_th_fo_fi_si_se".split("_"), weekdaysMin = "1_2_3_4_5_6_7".split("_"); moment.lang('numerologists', { months : months, monthsShort : monthsShort, weekdays : weekdays, weekdaysShort: weekdaysShort, weekdaysMin: weekdaysMin }); test.expect(10); test.deepEqual(moment.months(), months); test.deepEqual(moment.monthsShort(), monthsShort); test.deepEqual(moment.weekdays(), weekdays); test.deepEqual(moment.weekdaysShort(), weekdaysShort); test.deepEqual(moment.weekdaysMin(), weekdaysMin); test.equal(moment.months(2), "three"); test.equal(moment.monthsShort(2), "th"); test.equal(moment.weekdays(2), "three"); test.equal(moment.weekdaysShort(2), "th"); test.equal(moment.weekdaysMin(2), "3"); test.done(); }, "with functions" : function (test) { var monthsShort = "one_two_three_four_five_six_seven_eight_nine_ten_eleven_twelve".split('_'), monthsShortWeird = "onesy_twosy_threesy_foursy_fivesy_sixsy_sevensy_eightsy_ninesy_tensy_elevensy_twelvesy".split('_'); moment.lang("difficult", { monthsShort: function (m, format) { var arr = format.match(/-MMM-/) ? monthsShortWeird : monthsShort; return arr[m.month()]; } }); test.expect(6); test.deepEqual(moment.monthsShort(), monthsShort); test.deepEqual(moment.monthsShort('MMM'), monthsShort); test.deepEqual(moment.monthsShort('-MMM-'), monthsShortWeird); test.deepEqual(moment.monthsShort('MMM', 2), 'three'); test.deepEqual(moment.monthsShort('-MMM-', 2), 'threesy'); test.deepEqual(moment.monthsShort(2), 'three'); test.done(); } }; assets/plugins/moment/test/moment/getters_setters.js000064400000016344152510437670017112 0ustar00var moment = require("../../moment"); exports.getters_setters = { "getters" : function (test) { test.expect(8); var a = moment([2011, 9, 12, 6, 7, 8, 9]); test.equal(a.year(), 2011, 'year'); test.equal(a.month(), 9, 'month'); test.equal(a.date(), 12, 'date'); test.equal(a.day(), 3, 'day'); test.equal(a.hours(), 6, 'hour'); test.equal(a.minutes(), 7, 'minute'); test.equal(a.seconds(), 8, 'second'); test.equal(a.milliseconds(), 9, 'milliseconds'); test.done(); }, "getters programmatic" : function (test) { test.expect(8); var a = moment([2011, 9, 12, 6, 7, 8, 9]); test.equal(a.get('year'), 2011, 'year'); test.equal(a.get('month'), 9, 'month'); test.equal(a.get('date'), 12, 'date'); test.equal(a.get('day'), 3, 'day'); test.equal(a.get('hour'), 6, 'hour'); test.equal(a.get('minute'), 7, 'minute'); test.equal(a.get('second'), 8, 'second'); test.equal(a.get('milliseconds'), 9, 'milliseconds'); test.done(); }, "setters plural" : function (test) { test.expect(8); var a = moment(); a.years(2011); a.months(9); a.dates(12); a.hours(6); a.minutes(7); a.seconds(8); a.milliseconds(9); test.equal(a.years(), 2011, 'years'); test.equal(a.months(), 9, 'months'); test.equal(a.dates(), 12, 'dates'); test.equal(a.days(), 3, 'days'); test.equal(a.hours(), 6, 'hours'); test.equal(a.minutes(), 7, 'minutes'); test.equal(a.seconds(), 8, 'seconds'); test.equal(a.milliseconds(), 9, 'milliseconds'); test.done(); }, "setters singular" : function (test) { test.expect(8); var a = moment(); a.year(2011); a.month(9); a.date(12); a.hour(6); a.minute(7); a.second(8); a.millisecond(9); test.equal(a.year(), 2011, 'year'); test.equal(a.month(), 9, 'month'); test.equal(a.date(), 12, 'date'); test.equal(a.day(), 3, 'day'); test.equal(a.hour(), 6, 'hour'); test.equal(a.minute(), 7, 'minute'); test.equal(a.second(), 8, 'second'); test.equal(a.millisecond(), 9, 'milliseconds'); test.done(); }, "setters" : function (test) { test.expect(9); var a = moment(); a.year(2011); a.month(9); a.date(12); a.hours(6); a.minutes(7); a.seconds(8); a.milliseconds(9); test.equal(a.year(), 2011, 'year'); test.equal(a.month(), 9, 'month'); test.equal(a.date(), 12, 'date'); test.equal(a.day(), 3, 'day'); test.equal(a.hours(), 6, 'hour'); test.equal(a.minutes(), 7, 'minute'); test.equal(a.seconds(), 8, 'second'); test.equal(a.milliseconds(), 9, 'milliseconds'); // Test month() behavior. See https://github.com/timrwood/moment/pull/822 a = moment('20130531', 'YYYYMMDD'); a.month(3); test.equal(a.month(), 3, 'month edge case'); test.done(); }, "setter programmatic" : function (test) { test.expect(9); var a = moment(); a.set('year', 2011); a.set('month', 9); a.set('date', 12); a.set('hours', 6); a.set('minutes', 7); a.set('seconds', 8); a.set('milliseconds', 9); test.equal(a.year(), 2011, 'year'); test.equal(a.month(), 9, 'month'); test.equal(a.date(), 12, 'date'); test.equal(a.day(), 3, 'day'); test.equal(a.hours(), 6, 'hour'); test.equal(a.minutes(), 7, 'minute'); test.equal(a.seconds(), 8, 'second'); test.equal(a.milliseconds(), 9, 'milliseconds'); // Test month() behavior. See https://github.com/timrwood/moment/pull/822 a = moment('20130531', 'YYYYMMDD'); a.month(3); test.equal(a.month(), 3, 'month edge case'); test.done(); }, "setters strings" : function (test) { test.expect(7); var a = moment([2012]).lang('en'); test.equal(a.clone().day(0).day('Wednesday').day(), 3, 'day full name'); test.equal(a.clone().day(0).day('Wed').day(), 3, 'day short name'); test.equal(a.clone().day(0).day('We').day(), 3, 'day minimal name'); test.equal(a.clone().day(0).day('invalid').day(), 0, 'invalid day name'); test.equal(a.clone().month(0).month('April').month(), 3, 'month full name'); test.equal(a.clone().month(0).month('Apr').month(), 3, 'month short name'); test.equal(a.clone().month(0).month('invalid').month(), 0, 'invalid month name'); test.done(); }, "setters - falsey values" : function (test) { test.expect(1); var a = moment(); // ensure minutes wasn't coincidentally 0 already a.minutes(1); a.minutes(0); test.equal(a.minutes(), 0, 'falsey value'); test.done(); }, "chaining setters" : function (test) { test.expect(7); var a = moment(); a.year(2011) .month(9) .date(12) .hours(6) .minutes(7) .seconds(8); test.equal(a.year(), 2011, 'year'); test.equal(a.month(), 9, 'month'); test.equal(a.date(), 12, 'date'); test.equal(a.day(), 3, 'day'); test.equal(a.hours(), 6, 'hour'); test.equal(a.minutes(), 7, 'minute'); test.equal(a.seconds(), 8, 'second'); test.done(); }, "day setter" : function (test) { test.expect(18); var a = moment([2011, 0, 15]); test.equal(moment(a).day(0).date(), 9, 'set from saturday to sunday'); test.equal(moment(a).day(6).date(), 15, 'set from saturday to saturday'); test.equal(moment(a).day(3).date(), 12, 'set from saturday to wednesday'); a = moment([2011, 0, 9]); test.equal(moment(a).day(0).date(), 9, 'set from sunday to sunday'); test.equal(moment(a).day(6).date(), 15, 'set from sunday to saturday'); test.equal(moment(a).day(3).date(), 12, 'set from sunday to wednesday'); a = moment([2011, 0, 12]); test.equal(moment(a).day(0).date(), 9, 'set from wednesday to sunday'); test.equal(moment(a).day(6).date(), 15, 'set from wednesday to saturday'); test.equal(moment(a).day(3).date(), 12, 'set from wednesday to wednesday'); test.equal(moment(a).day(-7).date(), 2, 'set from wednesday to last sunday'); test.equal(moment(a).day(-1).date(), 8, 'set from wednesday to last saturday'); test.equal(moment(a).day(-4).date(), 5, 'set from wednesday to last wednesday'); test.equal(moment(a).day(7).date(), 16, 'set from wednesday to next sunday'); test.equal(moment(a).day(13).date(), 22, 'set from wednesday to next saturday'); test.equal(moment(a).day(10).date(), 19, 'set from wednesday to next wednesday'); test.equal(moment(a).day(14).date(), 23, 'set from wednesday to second next sunday'); test.equal(moment(a).day(20).date(), 29, 'set from wednesday to second next saturday'); test.equal(moment(a).day(17).date(), 26, 'set from wednesday to second next wednesday'); test.done(); } }; assets/plugins/moment/test/moment/is_same.js000064400000027751152510437670015310 0ustar00var moment = require("../../moment"); exports.is_same = { "is same without units" : function (test) { test.expect(17); var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); test.equal(m.isSame(moment(new Date(2012, 3, 2, 3, 5, 5, 10))), false, "year is later"); test.equal(m.isSame(moment(new Date(2010, 3, 2, 3, 3, 5, 10))), false, "year is earlier"); test.equal(m.isSame(moment(new Date(2011, 4, 2, 3, 4, 5, 10))), false, "month is later"); test.equal(m.isSame(moment(new Date(2011, 2, 2, 3, 4, 5, 10))), false, "month is earlier"); test.equal(m.isSame(moment(new Date(2011, 3, 3, 3, 4, 5, 10))), false, "day is later"); test.equal(m.isSame(moment(new Date(2011, 3, 1, 3, 4, 5, 10))), false, "day is earlier"); test.equal(m.isSame(moment(new Date(2011, 3, 2, 4, 4, 5, 10))), false, "hour is later"); test.equal(m.isSame(moment(new Date(2011, 3, 2, 2, 4, 5, 10))), false, "hour is earlier"); test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 5, 5, 10))), false, "minute is later"); test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 3, 5, 10))), false, "minute is earlier"); test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 6, 10))), false, "second is later"); test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 4, 11))), false, "second is earlier"); test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 5, 10))), true, "millisecond match"); test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 5, 11))), false, "millisecond is later"); test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 5, 9))), false, "millisecond is earlier"); test.equal(m.isSame(m), true, "moments are the same as themselves"); test.equal(+m, +mCopy, "isSame second should not change moment"); test.done(); }, "is same year" : function (test) { test.expect(9); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); test.equal(m.isSame(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year'), true, "year match"); test.equal(m.isSame(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'years'), true, "plural should work"); test.equal(m.isSame(moment(new Date(2012, 5, 6, 7, 8, 9, 10)), 'year'), false, "year mismatch"); test.equal(m.isSame(moment(new Date(2011, 0, 1, 0, 0, 0, 0)), 'year'), true, "exact start of year"); test.equal(m.isSame(moment(new Date(2011, 11, 31, 23, 59, 59, 999)), 'year'), true, "exact end of year"); test.equal(m.isSame(moment(new Date(2012, 0, 1, 0, 0, 0, 0)), 'year'), false, "start of next year"); test.equal(m.isSame(moment(new Date(2010, 11, 31, 23, 59, 59, 999)), 'year'), false, "end of previous year"); test.equal(m.isSame(m, 'year'), true, "same moments are in the same year"); test.equal(+m, +mCopy, "isSame year should not change moment"); test.done(); }, "is same month" : function (test) { test.expect(10); var m = moment(new Date(2011, 2, 3, 4, 5, 6, 7)), mCopy = moment(m); test.equal(m.isSame(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month'), true, "month match"); test.equal(m.isSame(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'months'), true, "plural should work"); test.equal(m.isSame(moment(new Date(2012, 2, 6, 7, 8, 9, 10)), 'month'), false, "year mismatch"); test.equal(m.isSame(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'month'), false, "month mismatch"); test.equal(m.isSame(moment(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month'), true, "exact start of month"); test.equal(m.isSame(moment(new Date(2011, 2, 31, 23, 59, 59, 999)), 'month'), true, "exact end of month"); test.equal(m.isSame(moment(new Date(2011, 3, 1, 0, 0, 0, 0)), 'month'), false, "start of next month"); test.equal(m.isSame(moment(new Date(2011, 1, 27, 23, 59, 59, 999)), 'month'), false, "end of previous month"); test.equal(m.isSame(m, 'month'), true, "same moments are in the same month"); test.equal(+m, +mCopy, "isSame month should not change moment"); test.done(); }, "is same day" : function (test) { test.expect(11); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); test.equal(m.isSame(moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'day'), true, "day match"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'days'), true, "plural should work"); test.equal(m.isSame(moment(new Date(2012, 1, 2, 7, 8, 9, 10)), 'day'), false, "year mismatch"); test.equal(m.isSame(moment(new Date(2011, 2, 2, 7, 8, 9, 10)), 'day'), false, "month mismatch"); test.equal(m.isSame(moment(new Date(2011, 1, 3, 7, 8, 9, 10)), 'day'), false, "day mismatch"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 0, 0, 0, 0)), 'day'), true, "exact start of day"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 23, 59, 59, 999)), 'day'), true, "exact end of day"); test.equal(m.isSame(moment(new Date(2011, 1, 3, 0, 0, 0, 0)), 'day'), false, "start of next day"); test.equal(m.isSame(moment(new Date(2011, 1, 1, 23, 59, 59, 999)), 'day'), false, "end of previous day"); test.equal(m.isSame(m, 'day'), true, "same moments are in the same day"); test.equal(+m, +mCopy, "isSame day should not change moment"); test.done(); }, "is same hour" : function (test) { test.expect(12); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hour'), true, "hour match"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hours'), true, "plural should work"); test.equal(m.isSame(moment(new Date(2012, 1, 2, 3, 8, 9, 10)), 'hour'), false, "year mismatch"); test.equal(m.isSame(moment(new Date(2011, 2, 2, 3, 8, 9, 10)), 'hour'), false, "month mismatch"); test.equal(m.isSame(moment(new Date(2011, 1, 3, 3, 8, 9, 10)), 'hour'), false, "day mismatch"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 4, 8, 9, 10)), 'hour'), false, "hour mismatch"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 0, 0, 0)), 'hour'), true, "exact start of hour"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 59, 59, 999)), 'hour'), true, "exact end of hour"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 4, 0, 0, 0)), 'hour'), false, "start of next hour"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 2, 59, 59, 999)), 'hour'), false, "end of previous hour"); test.equal(m.isSame(m, 'hour'), true, "same moments are in the same hour"); test.equal(+m, +mCopy, "isSame hour should not change moment"); test.done(); }, "is same minute" : function (test) { test.expect(13); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minute'), true, "minute match"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minutes'), true, "plural should work"); test.equal(m.isSame(moment(new Date(2012, 1, 2, 3, 4, 9, 10)), 'minute'), false, "year mismatch"); test.equal(m.isSame(moment(new Date(2011, 2, 2, 3, 4, 9, 10)), 'minute'), false, "month mismatch"); test.equal(m.isSame(moment(new Date(2011, 1, 3, 3, 4, 9, 10)), 'minute'), false, "day mismatch"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 4, 4, 9, 10)), 'minute'), false, "hour mismatch"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 5, 9, 10)), 'minute'), false, "minute mismatch"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 0, 0)), 'minute'), true, "exact start of minute"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 59, 999)), 'minute'), true, "exact end of minute"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 5, 0, 0)), 'minute'), false, "start of next minute"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 3, 59, 999)), 'minute'), false, "end of previous minute"); test.equal(m.isSame(m, 'minute'), true, "same moments are in the same minute"); test.equal(+m, +mCopy, "isSame minute should not change moment"); test.done(); }, "is same second" : function (test) { test.expect(14); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 5, 10)), 'second'), true, "second match"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 5, 10)), 'seconds'), true, "plural should work"); test.equal(m.isSame(moment(new Date(2012, 1, 2, 3, 4, 5, 10)), 'second'), false, "year mismatch"); test.equal(m.isSame(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'second'), false, "month mismatch"); test.equal(m.isSame(moment(new Date(2011, 1, 3, 3, 4, 5, 10)), 'second'), false, "day mismatch"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 4, 4, 5, 10)), 'second'), false, "hour mismatch"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 5, 5, 10)), 'second'), false, "minute mismatch"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 6, 10)), 'second'), false, "second mismatch"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 5, 0)), 'second'), true, "exact start of second"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 5, 999)), 'second'), true, "exact end of second"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 6, 0)), 'second'), false, "start of next second"); test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 4, 999)), 'second'), false, "end of previous second"); test.equal(m.isSame(m, 'second'), true, "same moments are in the same second"); test.equal(+m, +mCopy, "isSame second should not change moment"); test.done(); }, "is same millisecond" : function (test) { test.expect(18); var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'millisecond'), true, "millisecond match"); test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds'), true, "plural should work"); test.equal(m.isSame(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, "year is later"); test.equal(m.isSame(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, "year is earlier"); test.equal(m.isSame(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'millisecond'), false, "month is later"); test.equal(m.isSame(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'millisecond'), false, "month is earlier"); test.equal(m.isSame(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'millisecond'), false, "day is later"); test.equal(m.isSame(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'millisecond'), false, "day is earlier"); test.equal(m.isSame(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'millisecond'), false, "hour is later"); test.equal(m.isSame(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'millisecond'), false, "hour is earlier"); test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'millisecond'), false, "minute is later"); test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'millisecond'), false, "minute is earlier"); test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'millisecond'), false, "second is later"); test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'millisecond'), false, "second is earlier"); test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 6, 11)), 'millisecond'), false, "millisecond is later"); test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 4, 9)), 'millisecond'), false, "millisecond is earlier"); test.equal(m.isSame(m, 'millisecond'), true, "same moments are in the same millisecond"); test.equal(+m, +mCopy, "isSame millisecond should not change moment"); test.done(); } }; assets/plugins/moment/test/moment/format.js000064400000033065152510437670015153 0ustar00var moment = require("../../moment"); exports.format = { "format YY" : function (test) { test.expect(1); var b = moment(new Date(2009, 1, 14, 15, 25, 50, 125)); test.equal(b.format('YY'), '09', 'YY ---> 09'); test.done(); }, "format escape brackets" : function (test) { test.expect(9); moment.lang('en'); var b = moment(new Date(2009, 1, 14, 15, 25, 50, 125)); test.equal(b.format('[day]'), 'day', 'Single bracket'); test.equal(b.format('[day] YY [YY]'), 'day 09 YY', 'Double bracket'); test.equal(b.format('[YY'), '[09', 'Un-ended bracket'); test.equal(b.format('[[YY]]'), '[YY]', 'Double nested brackets'); test.equal(b.format('[[]'), '[', 'Escape open bracket'); test.equal(b.format('[Last]'), 'Last', 'localized tokens'); test.equal(b.format('[L] L'), 'L 02/14/2009', 'localized tokens with escaped localized tokens'); test.equal(b.format('[L LL LLL LLLL aLa]'), 'L LL LLL LLLL aLa', 'localized tokens with escaped localized tokens'); test.equal(b.format('[LLL] LLL'), 'LLL February 14 2009 3:25 PM', 'localized tokens with escaped localized tokens (recursion)'); test.done(); }, "format milliseconds" : function (test) { test.expect(6); var b = moment(new Date(2009, 1, 14, 15, 25, 50, 123)); test.equal(b.format('S'), '1', 'Deciseconds'); test.equal(b.format('SS'), '12', 'Centiseconds'); test.equal(b.format('SSS'), '123', 'Milliseconds'); b.milliseconds(789); test.equal(b.format('S'), '7', 'Deciseconds'); test.equal(b.format('SS'), '78', 'Centiseconds'); test.equal(b.format('SSS'), '789', 'Milliseconds'); test.done(); }, "format timezone" : function (test) { test.expect(2); var b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), explanation = 'moment().format("z") = ' + b.format('z') + ' It should be something like "PST"'; if (moment().zone() === -60) { explanation += "For UTC+1 this is a known issue, see https://github.com/timrwood/moment/issues/162"; } test.ok(b.format('Z').match(/^[\+\-]\d\d:\d\d$/), b.format('Z') + ' should be something like "+07:30"'); test.ok(b.format('ZZ').match(/^[\+\-]\d{4}$/), b.format('ZZ') + ' should be something like "+0700"'); test.done(); }, "format multiple with zone" : function (test) { test.expect(1); var b = moment('2012-10-08 -1200', ['YYYY-MM-DD HH:mm ZZ', 'YYYY-MM-DD ZZ', 'YYYY-MM-DD']); test.equals(b.format('YYYY-MM'), '2012-10', 'Parsing multiple formats should not crash with different sized formats'); test.done(); }, "isDST" : function (test) { test.expect(2); var janOffset = new Date(2011, 0, 1).getTimezoneOffset(), julOffset = new Date(2011, 6, 1).getTimezoneOffset(), janIsDst = janOffset < julOffset, julIsDst = julOffset < janOffset, jan1 = moment([2011]), jul1 = moment([2011, 6]); if (janIsDst && julIsDst) { test.ok(0, 'January and July cannot both be in DST'); test.ok(0, 'January and July cannot both be in DST'); } else if (janIsDst) { test.ok(jan1.isDST(), 'January 1 is DST'); test.ok(!jul1.isDST(), 'July 1 is not DST'); } else if (julIsDst) { test.ok(!jan1.isDST(), 'January 1 is not DST'); test.ok(jul1.isDST(), 'July 1 is DST'); } else { test.ok(!jan1.isDST(), 'January 1 is not DST'); test.ok(!jul1.isDST(), 'July 1 is not DST'); } test.done(); }, "unix timestamp" : function (test) { test.expect(5); var m = moment('1234567890.123', 'X'); test.equals(m.format('X'), '1234567890', 'unix timestamp without milliseconds'); test.equals(m.format('X.S'), '1234567890.1', 'unix timestamp with deciseconds'); test.equals(m.format('X.SS'), '1234567890.12', 'unix timestamp with centiseconds'); test.equals(m.format('X.SSS'), '1234567890.123', 'unix timestamp with milliseconds'); m = moment(1234567890.123, 'X'); test.equals(m.format('X'), '1234567890', 'unix timestamp as integer'); test.done(); }, "zone" : function (test) { test.expect(3); if (moment().zone() > 0) { test.ok(moment().format('ZZ').indexOf('-') > -1, 'When the zone() offset is greater than 0, the ISO offset should be less than zero'); } if (moment().zone() < 0) { test.ok(moment().format('ZZ').indexOf('+') > -1, 'When the zone() offset is less than 0, the ISO offset should be greater than zero'); } if (moment().zone() === 0) { test.ok(moment().format('ZZ').indexOf('+') > -1, 'When the zone() offset is equal to 0, the ISO offset should be positive zero'); } if (moment().zone() === 0) { test.equal(moment().zone(), 0, 'moment.fn.zone should be a multiple of 15 (was ' + moment().zone() + ')'); } else { test.equal(moment().zone() % 15, 0, 'moment.fn.zone should be a multiple of 15 (was ' + moment().zone() + ')'); } test.equal(moment().zone(), new Date().getTimezoneOffset(), 'zone should equal getTimezoneOffset'); test.done(); }, "default format" : function (test) { test.expect(1); var isoRegex = /\d{4}.\d\d.\d\dT\d\d.\d\d.\d\d[\+\-]\d\d:\d\d/; test.ok(isoRegex.exec(moment().format()), "default format (" + moment().format() + ") should match ISO"); test.done(); }, "escaping quotes" : function (test) { test.expect(4); moment.lang('en'); var date = moment([2012, 0]); test.equal(date.format('MMM \'YY'), "Jan '12", "Should be able to format with single parenthesis"); test.equal(date.format('MMM "YY'), 'Jan "12', "Should be able to format with double parenthesis"); test.equal(date.format("MMM 'YY"), "Jan '12", "Should be able to format with single parenthesis"); test.equal(date.format("MMM \"YY"), 'Jan "12', "Should be able to format with double parenthesis"); test.done(); }, "toJSON" : function (test) { var supportsJson = typeof JSON !== "undefined" && JSON.stringify && JSON.stringify.call, date = moment("2012-10-09T21:30:40.678+0100"); test.expect(supportsJson ? 2 : 1); test.equal(date.toJSON(), "2012-10-09T20:30:40.678Z", "should output ISO8601 on moment.fn.toJSON"); if (supportsJson) { test.equal(JSON.stringify({ date : date }), '{"date":"2012-10-09T20:30:40.678Z"}', "should output ISO8601 on JSON.stringify"); } test.done(); }, "toISOString" : function (test) { var date = moment.utc("2012-10-09T20:30:40.678"); test.equal(date.toISOString(), "2012-10-09T20:30:40.678Z", "should output ISO8601 on moment.fn.toISOString"); test.done(); }, "weeks format" : function (test) { // http://en.wikipedia.org/wiki/ISO_week_date var cases = { "2005-01-02": "2004-53", "2005-12-31": "2005-52", "2007-01-01": "2007-01", "2007-12-30": "2007-52", "2007-12-31": "2008-01", "2008-01-01": "2008-01", "2008-12-28": "2008-52", "2008-12-29": "2009-01", "2008-12-30": "2009-01", "2008-12-31": "2009-01", "2009-01-01": "2009-01", "2009-12-31": "2009-53", "2010-01-01": "2009-53", "2010-01-02": "2009-53", "2010-01-03": "2009-53" }, i, iso, the; for (i in cases) { iso = cases[i].split('-').pop(); the = moment(i).format('WW'); test.equal(iso, the, i + ": should be " + iso + ", but " + the); } test.done(); }, "iso week year formats" : function (test) { // http://en.wikipedia.org/wiki/ISO_week var cases = { "2005-01-02": "2004-53", "2005-12-31": "2005-52", "2007-01-01": "2007-01", "2007-12-30": "2007-52", "2007-12-31": "2008-01", "2008-01-01": "2008-01", "2008-12-28": "2008-52", "2008-12-29": "2009-01", "2008-12-30": "2009-01", "2008-12-31": "2009-01", "2009-01-01": "2009-01", "2009-12-31": "2009-53", "2010-01-01": "2009-53", "2010-01-02": "2009-53", "2010-01-03": "2009-53" }, i, isoWeekYear, formatted5, formatted4, formatted2; for (i in cases) { isoWeekYear = cases[i].split('-')[0]; formatted5 = moment(i).format('GGGGG'); test.equal('0' + isoWeekYear, formatted5, i + ": should be " + isoWeekYear + ", but " + formatted4); formatted4 = moment(i).format('GGGG'); test.equal(isoWeekYear, formatted4, i + ": should be " + isoWeekYear + ", but " + formatted4); formatted2 = moment(i).format('GG'); test.equal(isoWeekYear.slice(2, 4), formatted2, i + ": should be " + isoWeekYear + ", but " + formatted2); } test.done(); }, "week year formats" : function (test) { // http://en.wikipedia.org/wiki/ISO_week var cases = { "2005-01-02": "2004-53", "2005-12-31": "2005-52", "2007-01-01": "2007-01", "2007-12-30": "2007-52", "2007-12-31": "2008-01", "2008-01-01": "2008-01", "2008-12-28": "2008-52", "2008-12-29": "2009-01", "2008-12-30": "2009-01", "2008-12-31": "2009-01", "2009-01-01": "2009-01", "2009-12-31": "2009-53", "2010-01-01": "2009-53", "2010-01-02": "2009-53", "2010-01-03": "2009-53" }, i, formatted5, formatted4, formatted2, isoWeekYear; moment.lang('en-gb'); // 1, 4 for (i in cases) { isoWeekYear = cases[i].split('-')[0]; formatted5 = moment(i).format('ggggg'); test.equal('0' + isoWeekYear, formatted5, i + ": should be " + isoWeekYear + ", but " + formatted4); formatted4 = moment(i).format('gggg'); test.equal(isoWeekYear, formatted4, i + ": should be " + isoWeekYear + ", but " + formatted4); formatted2 = moment(i).format('gg'); test.equal(isoWeekYear.slice(2, 4), formatted2, i + ": should be " + isoWeekYear + ", but " + formatted2); } test.done(); }, "iso weekday formats" : function (test) { test.expect(7); test.equal(moment([1985, 1, 4]).format('E'), '1', "Feb 4 1985 is Monday -- 1st day"); test.equal(moment([2029, 8, 18]).format('E'), '2', "Sep 18 2029 is Tuesday -- 2nd day"); test.equal(moment([2013, 3, 24]).format('E'), '3', "Apr 24 2013 is Wednesday -- 3rd day"); test.equal(moment([2015, 2, 5]).format('E'), '4', "Mar 5 2015 is Thursday -- 4th day"); test.equal(moment([1970, 0, 2]).format('E'), '5', "Jan 2 1970 is Friday -- 5th day"); test.equal(moment([2001, 4, 12]).format('E'), '6', "May 12 2001 is Saturday -- 6th day"); test.equal(moment([2000, 0, 2]).format('E'), '7', "Jan 2 2000 is Sunday -- 7th day"); test.done(); }, "weekday formats" : function (test) { test.expect(7); moment.lang('dow: 3,doy: 5', {week: {dow: 3, doy: 5}}); test.equal(moment([1985, 1, 6]).format('e'), '0', "Feb 6 1985 is Wednesday -- 0th day"); test.equal(moment([2029, 8, 20]).format('e'), '1', "Sep 20 2029 is Thursday -- 1st day"); test.equal(moment([2013, 3, 26]).format('e'), '2', "Apr 26 2013 is Friday -- 2nd day"); test.equal(moment([2015, 2, 7]).format('e'), '3', "Mar 7 2015 is Saturday -- 3nd day"); test.equal(moment([1970, 0, 4]).format('e'), '4', "Jan 4 1970 is Sunday -- 4th day"); test.equal(moment([2001, 4, 14]).format('e'), '5', "May 14 2001 is Monday -- 5th day"); test.equal(moment([2000, 0, 4]).format('e'), '6', "Jan 4 2000 is Tuesday -- 6th day"); test.done(); }, "toString is just human readable format" : function (test) { test.expect(1); var b = moment(new Date(2009, 1, 5, 15, 25, 50, 125)); test.equal(b.toString(), b.format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ')); test.done(); }, "toJSON skips postformat" : function (test) { test.expect(1); moment.lang('postformat', {postformat: function (s) { s.replace(/./g, 'X'); }}); test.equal(moment.utc([2000, 0, 1]).toJSON(), "2000-01-01T00:00:00.000Z", "toJSON doesn't postformat"); moment.lang('postformat', null); test.done(); }, "calendar day timezone" : function (test) { test.expect(10); var zones = [60, -60, 90, -90, 360, -360, 720, -720], b = moment().utc().startOf('day').subtract({ m : 1 }), c = moment().local().startOf('day').subtract({ m : 1 }); zones.forEach(function (z) { var a = moment().zone(z).startOf('day').subtract({ m: 1 }); test.equal(moment(a).zone(z).calendar(), "Yesterday at 11:59 PM", "Yesterday at 11:59 PM, not Today, or the wrong time"); }); test.equal(moment(b).utc().calendar(), "Yesterday at 11:59 PM", "Yesterday at 11:59 PM, not Today, or the wrong time"); test.equal(moment(c).local().calendar(), "Yesterday at 11:59 PM", "Yesterday at 11:59 PM, not Today, or the wrong time"); test.done(); } }; assets/plugins/moment/test/moment/lang.js000064400000021042152510437670014574 0ustar00var moment = require("../../moment"); exports.lang = { "library getter" : function (test) { test.expect(7); moment.lang('en'); test.equal(moment.lang(), 'en', 'Lang should return en by default'); moment.lang('fr'); test.equal(moment.lang(), 'fr', 'Lang should return the changed language'); moment.lang('en-gb'); test.equal(moment.lang(), 'en-gb', 'Lang should return the changed language'); moment.lang('en'); test.equal(moment.lang(), 'en', 'Lang should reset'); moment.lang('does-not-exist'); test.equal(moment.lang(), 'en', 'Lang should reset'); moment.lang('EN'); test.equal(moment.lang(), 'en', 'Normalize language key case'); moment.lang('EN_gb'); test.equal(moment.lang(), 'en-gb', 'Normalize language key underscore'); test.done(); }, "library ensure inheritance" : function (test) { test.expect(2); moment.lang('made-up', { // I put them out of order months : "February_March_April_May_June_July_August_September_October_November_December_January".split("_") // the rest of the properties should be inherited. }); test.equal(moment([2012, 5, 6]).format('MMMM'), 'July', 'Override some of the configs'); test.equal(moment([2012, 5, 6]).format('MMM'), 'Jun', 'But not all of them'); test.done(); }, "library ensure inheritance LT L LL LLL LLLL" : function (test) { test.expect(5); var lang = 'test-inherit-lt'; moment.lang(lang, { longDateFormat : { LT : "-[LT]-", L : "-[L]-", LL : "-[LL]-", LLL : "-[LLL]-", LLLL : "-[LLLL]-" }, calendar : { sameDay : '[sameDay] LT', nextDay : '[nextDay] L', nextWeek : '[nextWeek] LL', lastDay : '[lastDay] LLL', lastWeek : '[lastWeek] LLLL', sameElse : 'L' } }); moment.lang('es'); test.equal(moment().lang(lang).calendar(), "sameDay -LT-", "Should use instance lang in LT formatting"); test.equal(moment().add('days', 1).lang(lang).calendar(), "nextDay -L-", "Should use instance lang in L formatting"); test.equal(moment().add('days', -1).lang(lang).calendar(), "lastDay -LLL-", "Should use instance lang in LL formatting"); test.equal(moment().add('days', 4).lang(lang).calendar(), "nextWeek -LL-", "Should use instance lang in LLL formatting"); test.equal(moment().add('days', -4).lang(lang).calendar(), "lastWeek -LLLL-", "Should use instance lang in LLLL formatting"); test.done(); }, "library langData" : function (test) { test.expect(3); moment.lang('en'); var jan = moment([2000, 0]); test.equal(moment.langData().months(jan), 'January', 'no arguments returns global'); test.equal(moment.langData('zh-cn').months(jan), '一月', 'a string returns the language based on key'); test.equal(moment.langData(moment().lang('es')).months(jan), 'enero', "if you pass in a moment it uses the moment's language"); test.done(); }, "instance lang method" : function (test) { test.expect(3); moment.lang('en'); test.equal(moment([2012, 5, 6]).format('MMMM'), 'June', 'Normally default to global'); test.equal(moment([2012, 5, 6]).lang('es').format('MMMM'), 'junio', 'Use the instance specific language'); test.equal(moment([2012, 5, 6]).format('MMMM'), 'June', 'Using an instance specific language does not affect other moments'); test.done(); }, "instance lang persists with manipulation" : function (test) { test.expect(3); moment.lang('en'); test.equal(moment([2012, 5, 6]).lang('es').add({days: 1}).format('MMMM'), 'junio', 'With addition'); test.equal(moment([2012, 5, 6]).lang('es').day(0).format('MMMM'), 'junio', 'With day getter'); test.equal(moment([2012, 5, 6]).lang('es').endOf('day').format('MMMM'), 'junio', 'With endOf'); test.done(); }, "instance lang persists with cloning" : function (test) { test.expect(2); moment.lang('en'); var a = moment([2012, 5, 6]).lang('es'), b = a.clone(), c = moment(a); test.equal(b.format('MMMM'), 'junio', 'using moment.fn.clone()'); test.equal(b.format('MMMM'), 'junio', 'using moment()'); test.done(); }, "duration lang method" : function (test) { test.expect(3); moment.lang('en'); test.equal(moment.duration({seconds: 44}).humanize(), 'a few seconds', 'Normally default to global'); test.equal(moment.duration({seconds: 44}).lang('es').humanize(), 'unos segundos', 'Use the instance specific language'); test.equal(moment.duration({seconds: 44}).humanize(), 'a few seconds', 'Using an instance specific language does not affect other durations'); test.done(); }, "duration lang persists with cloning" : function (test) { test.expect(1); moment.lang('en'); var a = moment.duration({seconds: 44}).lang('es'), b = moment.duration(a); test.equal(b.humanize(), 'unos segundos', 'using moment.duration()'); test.done(); }, "instance lang used with from" : function (test) { test.expect(2); moment.lang('en'); var a = moment([2012, 5, 6]).lang('es'), b = moment([2012, 5, 7]); test.equal(a.from(b), 'hace un día', 'preserve language of first moment'); test.equal(b.from(a), 'in a day', 'do not preserve language of second moment'); test.done(); }, "month name callback function" : function (test) { test.expect(3); function fakeReplace(m, format) { if (/test/.test(format)) { return "test"; } if (m.date() === 1) { return "date"; } return 'default'; } moment.lang('made-up-2', { months : fakeReplace, monthsShort : fakeReplace, weekdays : fakeReplace, weekdaysShort : fakeReplace, weekdaysMin : fakeReplace }); test.equal(moment().format('[test] dd ddd dddd MMM MMMM'), 'test test test test test test', 'format month name function should be able to access the format string'); test.equal(moment([2011, 0, 1]).format('dd ddd dddd MMM MMMM'), 'date date date date date', 'format month name function should be able to access the moment object'); test.equal(moment([2011, 0, 2]).format('dd ddd dddd MMM MMMM'), 'default default default default default', 'format month name function should be able to access the moment object'); test.done(); }, "changing parts of a language config" : function (test) { test.expect(2); moment.lang('partial-lang', { months : 'a b c d e f g h i j k l'.split(' ') }); test.equal(moment([2011, 0, 1]).format('MMMM'), 'a', 'should be able to set language values when creating the language'); moment.lang('partial-lang', { monthsShort : 'A B C D E F G H I J K L'.split(' ') }); test.equal(moment([2011, 0, 1]).format('MMMM MMM'), 'a A', 'should be able to set language values after creating the language'); test.done(); }, "start/endOf week feature for first-day-is-monday langs" : function (test) { test.expect(2); moment.lang('monday-lang', { week : { dow : 1 // Monday is the first day of the week } }); moment.lang('monday-lang'); test.equal(moment([2013, 0, 1]).startOf('week').day(), 1, 'for lang monday-lang first day of the week should be monday'); test.equal(moment([2013, 0, 1]).endOf('week').day(), 0, 'for lang monday-lang last day of the week should be sunday'); test.done(); }, "meridiem parsing" : function (test) { test.expect(2); moment.lang('meridiem-parsing', { meridiemParse : /[bd]/i, isPM : function (input) { return input === 'b'; } }); moment.lang('meridiem-parsing'); test.equal(moment('2012-01-01 3b', 'YYYY-MM-DD ha').hour(), 15, 'Custom parsing of meridiem should work'); test.equal(moment('2012-01-01 3d', 'YYYY-MM-DD ha').hour(), 3, 'Custom parsing of meridiem should work'); test.done(); } }; assets/plugins/moment/test/moment/weekday.js000064400000022357152510437670015316 0ustar00var moment = require("../../moment"); exports.week_year = { "iso weekday": function (test) { var i; test.expect(7 * 7); for (i = 0; i < 7; ++i) { moment.lang('dow:' + i + ',doy: 6', {week: {dow: i, doy: 6}}); test.equal(moment([1985, 1, 4]).isoWeekday(), 1, "Feb 4 1985 is Monday -- 1st day"); test.equal(moment([2029, 8, 18]).isoWeekday(), 2, "Sep 18 2029 is Tuesday -- 2nd day"); test.equal(moment([2013, 3, 24]).isoWeekday(), 3, "Apr 24 2013 is Wednesday -- 3rd day"); test.equal(moment([2015, 2, 5]).isoWeekday(), 4, "Mar 5 2015 is Thursday -- 4th day"); test.equal(moment([1970, 0, 2]).isoWeekday(), 5, "Jan 2 1970 is Friday -- 5th day"); test.equal(moment([2001, 4, 12]).isoWeekday(), 6, "May 12 2001 is Saturday -- 6th day"); test.equal(moment([2000, 0, 2]).isoWeekday(), 7, "Jan 2 2000 is Sunday -- 7th day"); } test.done(); }, "iso weekday setter" : function (test) { test.expect(27); var a = moment([2011, 0, 10]); test.equal(moment(a).isoWeekday(1).date(), 10, 'set from mon to mon'); test.equal(moment(a).isoWeekday(4).date(), 13, 'set from mon to thu'); test.equal(moment(a).isoWeekday(7).date(), 16, 'set from mon to sun'); test.equal(moment(a).isoWeekday(-6).date(), 3, 'set from mon to last mon'); test.equal(moment(a).isoWeekday(-3).date(), 6, 'set from mon to last thu'); test.equal(moment(a).isoWeekday(0).date(), 9, 'set from mon to last sun'); test.equal(moment(a).isoWeekday(8).date(), 17, 'set from mon to next mon'); test.equal(moment(a).isoWeekday(11).date(), 20, 'set from mon to next thu'); test.equal(moment(a).isoWeekday(14).date(), 23, 'set from mon to next sun'); a = moment([2011, 0, 13]); test.equal(moment(a).isoWeekday(1).date(), 10, 'set from thu to mon'); test.equal(moment(a).isoWeekday(4).date(), 13, 'set from thu to thu'); test.equal(moment(a).isoWeekday(7).date(), 16, 'set from thu to sun'); test.equal(moment(a).isoWeekday(-6).date(), 3, 'set from thu to last mon'); test.equal(moment(a).isoWeekday(-3).date(), 6, 'set from thu to last thu'); test.equal(moment(a).isoWeekday(0).date(), 9, 'set from thu to last sun'); test.equal(moment(a).isoWeekday(8).date(), 17, 'set from thu to next mon'); test.equal(moment(a).isoWeekday(11).date(), 20, 'set from thu to next thu'); test.equal(moment(a).isoWeekday(14).date(), 23, 'set from thu to next sun'); a = moment([2011, 0, 16]); test.equal(moment(a).isoWeekday(1).date(), 10, 'set from sun to mon'); test.equal(moment(a).isoWeekday(4).date(), 13, 'set from sun to thu'); test.equal(moment(a).isoWeekday(7).date(), 16, 'set from sun to sun'); test.equal(moment(a).isoWeekday(-6).date(), 3, 'set from sun to last mon'); test.equal(moment(a).isoWeekday(-3).date(), 6, 'set from sun to last thu'); test.equal(moment(a).isoWeekday(0).date(), 9, 'set from sun to last sun'); test.equal(moment(a).isoWeekday(8).date(), 17, 'set from sun to next mon'); test.equal(moment(a).isoWeekday(11).date(), 20, 'set from sun to next thu'); test.equal(moment(a).isoWeekday(14).date(), 23, 'set from sun to next sun'); test.done(); }, "weekday first day of week Sunday (dow 0)": function (test) { test.expect(7); moment.lang('dow: 0,doy: 6', {week: {dow: 0, doy: 6}}); test.equal(moment([1985, 1, 3]).weekday(), 0, "Feb 3 1985 is Sunday -- 0th day"); test.equal(moment([2029, 8, 17]).weekday(), 1, "Sep 17 2029 is Monday -- 1st day"); test.equal(moment([2013, 3, 23]).weekday(), 2, "Apr 23 2013 is Tuesday -- 2nd day"); test.equal(moment([2015, 2, 4]).weekday(), 3, "Mar 4 2015 is Wednesday -- 3nd day"); test.equal(moment([1970, 0, 1]).weekday(), 4, "Jan 1 1970 is Thursday -- 4th day"); test.equal(moment([2001, 4, 11]).weekday(), 5, "May 11 2001 is Friday -- 5th day"); test.equal(moment([2000, 0, 1]).weekday(), 6, "Jan 1 2000 is Saturday -- 6th day"); test.done(); }, "weekday first day of week Monday (dow 1)": function (test) { test.expect(7); moment.lang('dow: 1,doy: 6', {week: {dow: 1, doy: 6}}); test.equal(moment([1985, 1, 4]).weekday(), 0, "Feb 4 1985 is Monday -- 0th day"); test.equal(moment([2029, 8, 18]).weekday(), 1, "Sep 18 2029 is Tuesday -- 1st day"); test.equal(moment([2013, 3, 24]).weekday(), 2, "Apr 24 2013 is Wednesday -- 2nd day"); test.equal(moment([2015, 2, 5]).weekday(), 3, "Mar 5 2015 is Thursday -- 3nd day"); test.equal(moment([1970, 0, 2]).weekday(), 4, "Jan 2 1970 is Friday -- 4th day"); test.equal(moment([2001, 4, 12]).weekday(), 5, "May 12 2001 is Saturday -- 5th day"); test.equal(moment([2000, 0, 2]).weekday(), 6, "Jan 2 2000 is Sunday -- 6th day"); test.done(); }, "weekday first day of week Tuesday (dow 2)": function (test) { test.expect(7); moment.lang('dow: 2,doy: 6', {week: {dow: 2, doy: 6}}); test.equal(moment([1985, 1, 5]).weekday(), 0, "Feb 5 1985 is Tuesday -- 0th day"); test.equal(moment([2029, 8, 19]).weekday(), 1, "Sep 19 2029 is Wednesday -- 1st day"); test.equal(moment([2013, 3, 25]).weekday(), 2, "Apr 25 2013 is Thursday -- 2nd day"); test.equal(moment([2015, 2, 6]).weekday(), 3, "Mar 6 2015 is Friday -- 3nd day"); test.equal(moment([1970, 0, 3]).weekday(), 4, "Jan 3 1970 is Staturday -- 4th day"); test.equal(moment([2001, 4, 13]).weekday(), 5, "May 13 2001 is Sunday -- 5th day"); test.equal(moment([2000, 0, 3]).weekday(), 6, "Jan 3 2000 is Monday -- 6th day"); test.done(); }, "weekday first day of week Wednesday (dow 3)": function (test) { test.expect(7); moment.lang('dow: 3,doy: 6', {week: {dow: 3, doy: 6}}); test.equal(moment([1985, 1, 6]).weekday(), 0, "Feb 6 1985 is Wednesday -- 0th day"); test.equal(moment([2029, 8, 20]).weekday(), 1, "Sep 20 2029 is Thursday -- 1st day"); test.equal(moment([2013, 3, 26]).weekday(), 2, "Apr 26 2013 is Friday -- 2nd day"); test.equal(moment([2015, 2, 7]).weekday(), 3, "Mar 7 2015 is Saturday -- 3nd day"); test.equal(moment([1970, 0, 4]).weekday(), 4, "Jan 4 1970 is Sunday -- 4th day"); test.equal(moment([2001, 4, 14]).weekday(), 5, "May 14 2001 is Monday -- 5th day"); test.equal(moment([2000, 0, 4]).weekday(), 6, "Jan 4 2000 is Tuesday -- 6th day"); moment.lang('dow:3,doy:6', null); test.done(); }, "weekday first day of week Thursday (dow 4)": function (test) { test.expect(7); moment.lang('dow: 4,doy: 6', {week: {dow: 4, doy: 6}}); test.equal(moment([1985, 1, 7]).weekday(), 0, "Feb 7 1985 is Thursday -- 0th day"); test.equal(moment([2029, 8, 21]).weekday(), 1, "Sep 21 2029 is Friday -- 1st day"); test.equal(moment([2013, 3, 27]).weekday(), 2, "Apr 27 2013 is Saturday -- 2nd day"); test.equal(moment([2015, 2, 8]).weekday(), 3, "Mar 8 2015 is Sunday -- 3nd day"); test.equal(moment([1970, 0, 5]).weekday(), 4, "Jan 5 1970 is Monday -- 4th day"); test.equal(moment([2001, 4, 15]).weekday(), 5, "May 15 2001 is Tuesday -- 5th day"); test.equal(moment([2000, 0, 5]).weekday(), 6, "Jan 5 2000 is Wednesday -- 6th day"); test.done(); }, "weekday first day of week Friday (dow 5)": function (test) { test.expect(7); moment.lang('dow: 5,doy: 6', {week: {dow: 5, doy: 6}}); test.equal(moment([1985, 1, 8]).weekday(), 0, "Feb 8 1985 is Friday -- 0th day"); test.equal(moment([2029, 8, 22]).weekday(), 1, "Sep 22 2029 is Staturday -- 1st day"); test.equal(moment([2013, 3, 28]).weekday(), 2, "Apr 28 2013 is Sunday -- 2nd day"); test.equal(moment([2015, 2, 9]).weekday(), 3, "Mar 9 2015 is Monday -- 3nd day"); test.equal(moment([1970, 0, 6]).weekday(), 4, "Jan 6 1970 is Tuesday -- 4th day"); test.equal(moment([2001, 4, 16]).weekday(), 5, "May 16 2001 is Wednesday -- 5th day"); test.equal(moment([2000, 0, 6]).weekday(), 6, "Jan 6 2000 is Thursday -- 6th day"); test.done(); }, "weekday first day of week Saturday (dow 6)": function (test) { test.expect(7); moment.lang('dow: 6,doy: 6', {week: {dow: 6, doy: 6}}); test.equal(moment([1985, 1, 9]).weekday(), 0, "Feb 9 1985 is Staturday -- 0th day"); test.equal(moment([2029, 8, 23]).weekday(), 1, "Sep 23 2029 is Sunday -- 1st day"); test.equal(moment([2013, 3, 29]).weekday(), 2, "Apr 29 2013 is Monday -- 2nd day"); test.equal(moment([2015, 2, 10]).weekday(), 3, "Mar 10 2015 is Tuesday -- 3nd day"); test.equal(moment([1970, 0, 7]).weekday(), 4, "Jan 7 1970 is Wednesday -- 4th day"); test.equal(moment([2001, 4, 17]).weekday(), 5, "May 17 2001 is Thursday -- 5th day"); test.equal(moment([2000, 0, 7]).weekday(), 6, "Jan 7 2000 is Friday -- 6th day"); test.done(); } }; assets/plugins/moment/test/moment/is_after.js000064400000035342152510437670015457 0ustar00var moment = require("../../moment"); exports.is_after = { "is after without units" : function (test) { test.expect(17); var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); test.equal(m.isAfter(moment(new Date(2012, 3, 2, 3, 5, 5, 10))), false, "year is later"); test.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 3, 5, 10))), true, "year is earlier"); test.equal(m.isAfter(moment(new Date(2011, 4, 2, 3, 4, 5, 10))), false, "month is later"); test.equal(m.isAfter(moment(new Date(2011, 2, 2, 3, 4, 5, 10))), true, "month is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 3, 3, 4, 5, 10))), false, "day is later"); test.equal(m.isAfter(moment(new Date(2011, 3, 1, 3, 4, 5, 10))), true, "day is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 4, 5, 10))), false, "hour is later"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 2, 4, 5, 10))), true, "hour is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 5, 5, 10))), false, "minute is later"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 3, 5, 10))), true, "minute is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 10))), false, "second is later"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 11))), true, "second is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 10))), false, "millisecond match"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 11))), false, "millisecond is later"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 9))), true, "millisecond is earlier"); test.equal(m.isAfter(m), false, "moments are not after themselves"); test.equal(+m, +mCopy, "isAfter second should not change moment"); test.done(); }, "is after year" : function (test) { test.expect(11); var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); test.equal(m.isAfter(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year'), false, "year match"); test.equal(m.isAfter(moment(new Date(2010, 5, 6, 7, 8, 9, 10)), 'years'), true, "plural should work"); test.equal(m.isAfter(moment(new Date(2013, 5, 6, 7, 8, 9, 10)), 'year'), false, "year is later"); test.equal(m.isAfter(moment(new Date(2010, 5, 6, 7, 8, 9, 10)), 'year'), true, "year is earlier"); test.equal(m.isAfter(moment(new Date(2011, 0, 1, 0, 0, 0, 0)), 'year'), false, "exact start of year"); test.equal(m.isAfter(moment(new Date(2011, 11, 31, 23, 59, 59, 999)), 'year'), false, "exact end of year"); test.equal(m.isAfter(moment(new Date(2012, 0, 1, 0, 0, 0, 0)), 'year'), false, "start of next year"); test.equal(m.isAfter(moment(new Date(2010, 11, 31, 23, 59, 59, 999)), 'year'), true, "end of previous year"); test.equal(m.isAfter(moment(new Date(1980, 11, 31, 23, 59, 59, 999)), 'year'), true, "end of year far before"); test.equal(m.isAfter(m, 'year'), false, "same moments are not after the same year"); test.equal(+m, +mCopy, "isAfter year should not change moment"); test.done(); }, "is after month" : function (test) { test.expect(13); var m = moment(new Date(2011, 2, 3, 4, 5, 6, 7)), mCopy = moment(m); test.equal(m.isAfter(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month'), false, "month match"); test.equal(m.isAfter(moment(new Date(2010, 2, 6, 7, 8, 9, 10)), 'months'), true, "plural should work"); test.equal(m.isAfter(moment(new Date(2012, 2, 6, 7, 8, 9, 10)), 'month'), false, "year is later"); test.equal(m.isAfter(moment(new Date(2010, 2, 6, 7, 8, 9, 10)), 'month'), true, "year is earlier"); test.equal(m.isAfter(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'month'), false, "month is later"); test.equal(m.isAfter(moment(new Date(2011, 1, 6, 7, 8, 9, 10)), 'month'), true, "month is earlier"); test.equal(m.isAfter(moment(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month'), false, "exact start of month"); test.equal(m.isAfter(moment(new Date(2011, 2, 31, 23, 59, 59, 999)), 'month'), false, "exact end of month"); test.equal(m.isAfter(moment(new Date(2011, 3, 1, 0, 0, 0, 0)), 'month'), false, "start of next month"); test.equal(m.isAfter(moment(new Date(2011, 1, 27, 23, 59, 59, 999)), 'month'), true, "end of previous month"); test.equal(m.isAfter(moment(new Date(2010, 12, 31, 23, 59, 59, 999)), 'month'), true, "later month but earlier year"); test.equal(m.isAfter(m, 'month'), false, "same moments are not after the same month"); test.equal(+m, +mCopy, "isAfter month should not change moment"); test.done(); }, "is after day" : function (test) { test.expect(15); var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 7, 8, 9, 10)), 'day'), false, "day match"); test.equal(m.isAfter(moment(new Date(2010, 3, 2, 7, 8, 9, 10)), 'days'), true, "plural should work"); test.equal(m.isAfter(moment(new Date(2012, 3, 2, 7, 8, 9, 10)), 'day'), false, "year is later"); test.equal(m.isAfter(moment(new Date(2010, 3, 2, 7, 8, 9, 10)), 'day'), true, "year is earlier"); test.equal(m.isAfter(moment(new Date(2011, 4, 2, 7, 8, 9, 10)), 'day'), false, "month is later"); test.equal(m.isAfter(moment(new Date(2011, 2, 2, 7, 8, 9, 10)), 'day'), true, "month is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 3, 7, 8, 9, 10)), 'day'), false, "day is later"); test.equal(m.isAfter(moment(new Date(2011, 3, 1, 7, 8, 9, 10)), 'day'), true, "day is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 0, 0, 0, 0)), 'day'), false, "exact start of day"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 23, 59, 59, 999)), 'day'), false, "exact end of day"); test.equal(m.isAfter(moment(new Date(2011, 3, 3, 0, 0, 0, 0)), 'day'), false, "start of next day"); test.equal(m.isAfter(moment(new Date(2011, 3, 1, 23, 59, 59, 999)), 'day'), true, "end of previous day"); test.equal(m.isAfter(moment(new Date(2010, 3, 10, 0, 0, 0, 0)), 'day'), true, "later day but earlier year"); test.equal(m.isAfter(m, 'day'), false, "same moments are not after the same day"); test.equal(+m, +mCopy, "isAfter day should not change moment"); test.done(); }, "is after hour" : function (test) { test.expect(16); var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 8, 9, 10)), 'hour'), false, "hour match"); test.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 8, 9, 10)), 'hours'), true, "plural should work"); test.equal(m.isAfter(moment(new Date(2012, 3, 2, 3, 8, 9, 10)), 'hour'), false, "year is later"); test.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 8, 9, 10)), 'hour'), true, "year is earlier"); test.equal(m.isAfter(moment(new Date(2011, 4, 2, 3, 8, 9, 10)), 'hour'), false, "month is later"); test.equal(m.isAfter(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hour'), true, "month is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 3, 3, 8, 9, 10)), 'hour'), false, "day is later"); test.equal(m.isAfter(moment(new Date(2011, 3, 1, 3, 8, 9, 10)), 'hour'), true, "day is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 8, 9, 10)), 'hour'), false, "hour is later"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 8, 9, 10)), 'hour'), false, "hour is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 0, 0, 0)), 'hour'), false, "exact start of hour"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 59, 59, 999)), 'hour'), false, "exact end of hour"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 0, 0, 0)), 'hour'), false, "start of next hour"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 2, 59, 59, 999)), 'hour'), true, "end of previous hour"); test.equal(m.isAfter(m, 'hour'), false, "same moments are not after the same hour"); test.equal(+m, +mCopy, "isAfter hour should not change moment"); test.done(); }, "is after minute" : function (test) { test.expect(18); var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 9, 10)), 'minute'), false, "minute match"); test.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 9, 10)), 'minutes'), true, "plural should work"); test.equal(m.isAfter(moment(new Date(2012, 3, 2, 3, 4, 9, 10)), 'minute'), false, "year is later"); test.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 9, 10)), 'minute'), true, "year is earlier"); test.equal(m.isAfter(moment(new Date(2011, 4, 2, 3, 4, 9, 10)), 'minute'), false, "month is later"); test.equal(m.isAfter(moment(new Date(2011, 2, 2, 3, 4, 9, 10)), 'minute'), true, "month is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 3, 3, 4, 9, 10)), 'minute'), false, "day is later"); test.equal(m.isAfter(moment(new Date(2011, 3, 1, 3, 4, 9, 10)), 'minute'), true, "day is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 4, 9, 10)), 'minute'), false, "hour is later"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 2, 4, 9, 10)), 'minute'), true, "hour is earler"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 5, 9, 10)), 'minute'), false, "minute is later"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 3, 9, 10)), 'minute'), true, "minute is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 0, 0)), 'minute'), false, "exact start of minute"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 59, 999)), 'minute'), false, "exact end of minute"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 5, 0, 0)), 'minute'), false, "start of next minute"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 3, 59, 999)), 'minute'), true, "end of previous minute"); test.equal(m.isAfter(m, 'minute'), false, "same moments are not after the same minute"); test.equal(+m, +mCopy, "isAfter minute should not change moment"); test.done(); }, "is after second" : function (test) { test.expect(20); var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'second'), false, "second match"); test.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'seconds'), true, "plural should work"); test.equal(m.isAfter(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'second'), false, "year is later"); test.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'second'), true, "year is earlier"); test.equal(m.isAfter(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'second'), false, "month is later"); test.equal(m.isAfter(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'second'), true, "month is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'second'), false, "day is later"); test.equal(m.isAfter(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'second'), true, "day is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'second'), false, "hour is later"); test.equal(m.isAfter(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'second'), true, "hour is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'second'), false, "minute is later"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'second'), true, "minute is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'second'), false, "second is later"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'second'), true, "second is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 0)), 'second'), false, "exact start of second"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 999)), 'second'), false, "exact end of second"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 0)), 'second'), false, "start of next second"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 999)), 'second'), true, "end of previous second"); test.equal(m.isAfter(m, 'second'), false, "same moments are not after the same second"); test.equal(+m, +mCopy, "isAfter second should not change moment"); test.done(); }, "is after millisecond" : function (test) { test.expect(18); var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, "millisecond match"); test.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'milliseconds'), true, "plural should work"); test.equal(m.isAfter(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, "year is later"); test.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'millisecond'), true, "year is earlier"); test.equal(m.isAfter(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'millisecond'), false, "month is later"); test.equal(m.isAfter(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'millisecond'), true, "month is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'millisecond'), false, "day is later"); test.equal(m.isAfter(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'millisecond'), true, "day is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'millisecond'), false, "hour is later"); test.equal(m.isAfter(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'millisecond'), true, "hour is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'millisecond'), false, "minute is later"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'millisecond'), true, "minute is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'millisecond'), false, "second is later"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'millisecond'), true, "second is earlier"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 11)), 'millisecond'), false, "millisecond is later"); test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 9)), 'millisecond'), true, "millisecond is earlier"); test.equal(m.isAfter(m, 'millisecond'), false, "same moments are not after the same millisecond"); test.equal(+m, +mCopy, "isAfter millisecond should not change moment"); test.done(); } }; assets/plugins/moment/test/moment/diff.js000064400000031070152510437670014565 0ustar00var moment = require("../../moment"); function equal(test, a, b, message) { test.ok(Math.abs(a - b) < 0.00000001, "(" + a + " === " + b + ") " + message); } function dstForYear(year) { var start = moment([year]), end = moment([year + 1]), current = start.clone(), last; while (current < end) { last = current.clone(); current.add(24, 'hour'); if (last.zone() !== current.zone()) { end = current.clone(); current = last.clone(); break; } } while (current < end) { last = current.clone(); current.add(1, 'hour'); if (last.zone() !== current.zone()) { return { moment : last, diff : (current.zone() - last.zone()) / 60 }; } } } exports.diff = { "diff" : function (test) { test.expect(5); test.equal(moment(1000).diff(0), 1000, "1 second - 0 = 1000"); test.equal(moment(1000).diff(500), 500, "1 second - 0.5 seconds = 500"); test.equal(moment(0).diff(1000), -1000, "0 - 1 second = -1000"); test.equal(moment(new Date(1000)).diff(1000), 0, "1 second - 1 second = 0"); var oneHourDate = new Date(), nowDate = new Date(+oneHourDate); oneHourDate.setHours(oneHourDate.getHours() + 1); test.equal(moment(oneHourDate).diff(nowDate), 60 * 60 * 1000, "1 hour from now = 3600000"); test.done(); }, "diff key after" : function (test) { test.expect(10); test.equal(moment([2010]).diff([2011], 'years'), -1, "year diff"); test.equal(moment([2010]).diff([2010, 2], 'months'), -2, "month diff"); test.equal(moment([2010]).diff([2010, 0, 7], 'weeks'), 0, "week diff"); test.equal(moment([2010]).diff([2010, 0, 8], 'weeks'), -1, "week diff"); test.equal(moment([2010]).diff([2010, 0, 21], 'weeks'), -2, "week diff"); test.equal(moment([2010]).diff([2010, 0, 22], 'weeks'), -3, "week diff"); test.equal(moment([2010]).diff([2010, 0, 4], 'days'), -3, "day diff"); test.equal(moment([2010]).diff([2010, 0, 1, 4], 'hours'), -4, "hour diff"); test.equal(moment([2010]).diff([2010, 0, 1, 0, 5], 'minutes'), -5, "minute diff"); test.equal(moment([2010]).diff([2010, 0, 1, 0, 0, 6], 'seconds'), -6, "second diff"); test.done(); }, "diff key before" : function (test) { test.expect(10); test.equal(moment([2011]).diff([2010], 'years'), 1, "year diff"); test.equal(moment([2010, 2]).diff([2010], 'months'), 2, "month diff"); test.equal(moment([2010, 0, 4]).diff([2010], 'days'), 3, "day diff"); test.equal(moment([2010, 0, 7]).diff([2010], 'weeks'), 0, "week diff"); test.equal(moment([2010, 0, 8]).diff([2010], 'weeks'), 1, "week diff"); test.equal(moment([2010, 0, 21]).diff([2010], 'weeks'), 2, "week diff"); test.equal(moment([2010, 0, 22]).diff([2010], 'weeks'), 3, "week diff"); test.equal(moment([2010, 0, 1, 4]).diff([2010], 'hours'), 4, "hour diff"); test.equal(moment([2010, 0, 1, 0, 5]).diff([2010], 'minutes'), 5, "minute diff"); test.equal(moment([2010, 0, 1, 0, 0, 6]).diff([2010], 'seconds'), 6, "second diff"); test.done(); }, "diff key before singular" : function (test) { test.expect(10); test.equal(moment([2011]).diff([2010], 'year'), 1, "year diff singular"); test.equal(moment([2010, 2]).diff([2010], 'month'), 2, "month diff singular"); test.equal(moment([2010, 0, 4]).diff([2010], 'day'), 3, "day diff singular"); test.equal(moment([2010, 0, 7]).diff([2010], 'week'), 0, "week diff singular"); test.equal(moment([2010, 0, 8]).diff([2010], 'week'), 1, "week diff singular"); test.equal(moment([2010, 0, 21]).diff([2010], 'week'), 2, "week diff singular"); test.equal(moment([2010, 0, 22]).diff([2010], 'week'), 3, "week diff singular"); test.equal(moment([2010, 0, 1, 4]).diff([2010], 'hour'), 4, "hour diff singular"); test.equal(moment([2010, 0, 1, 0, 5]).diff([2010], 'minute'), 5, "minute diff singular"); test.equal(moment([2010, 0, 1, 0, 0, 6]).diff([2010], 'second'), 6, "second diff singular"); test.done(); }, "diff key before abbreviated" : function (test) { test.expect(10); test.equal(moment([2011]).diff([2010], 'y'), 1, "year diff abbreviated"); test.equal(moment([2010, 2]).diff([2010], 'M'), 2, "month diff abbreviated"); test.equal(moment([2010, 0, 4]).diff([2010], 'd'), 3, "day diff abbreviated"); test.equal(moment([2010, 0, 7]).diff([2010], 'w'), 0, "week diff abbreviated"); test.equal(moment([2010, 0, 8]).diff([2010], 'w'), 1, "week diff abbreviated"); test.equal(moment([2010, 0, 21]).diff([2010], 'w'), 2, "week diff abbreviated"); test.equal(moment([2010, 0, 22]).diff([2010], 'w'), 3, "week diff abbreviated"); test.equal(moment([2010, 0, 1, 4]).diff([2010], 'h'), 4, "hour diff abbreviated"); test.equal(moment([2010, 0, 1, 0, 5]).diff([2010], 'm'), 5, "minute diff abbreviated"); test.equal(moment([2010, 0, 1, 0, 0, 6]).diff([2010], 's'), 6, "second diff abbreviated"); test.done(); }, "diff month" : function (test) { test.expect(1); test.equal(moment([2011, 0, 31]).diff([2011, 2, 1], 'months'), -1, "month diff"); test.done(); }, "diff across DST" : function (test) { var dst = dstForYear(2012), a, b, daysInMonth; if (!dst) { console.log("No DST?"); test.done(); return; } test.expect(16); a = dst.moment; b = a.clone().utc().add(12, 'hours').local(); daysInMonth = (a.daysInMonth() + b.daysInMonth()) / 2; equal(test, b.diff(a, 'ms', true), 12 * 60 * 60 * 1000, "ms diff across DST"); equal(test, b.diff(a, 's', true), 12 * 60 * 60, "second diff across DST"); equal(test, b.diff(a, 'm', true), 12 * 60, "minute diff across DST"); equal(test, b.diff(a, 'h', true), 12, "hour diff across DST"); equal(test, b.diff(a, 'd', true), (12 - dst.diff) / 24, "day diff across DST"); equal(test, b.diff(a, 'w', true), (12 - dst.diff) / 24 / 7, "week diff across DST"); equal(test, b.diff(a, 'M', true), (12 - dst.diff) / 24 / daysInMonth, "month diff across DST"); equal(test, b.diff(a, 'y', true), (12 - dst.diff) / 24 / daysInMonth / 12, "year diff across DST"); a = dst.moment; b = a.clone().utc().add(12 + dst.diff, 'hours').local(); daysInMonth = (a.daysInMonth() + b.daysInMonth()) / 2; equal(test, b.diff(a, 'ms', true), (12 + dst.diff) * 60 * 60 * 1000, "ms diff across DST"); equal(test, b.diff(a, 's', true), (12 + dst.diff) * 60 * 60, "second diff across DST"); equal(test, b.diff(a, 'm', true), (12 + dst.diff) * 60, "minute diff across DST"); equal(test, b.diff(a, 'h', true), (12 + dst.diff), "hour diff across DST"); equal(test, b.diff(a, 'd', true), 12 / 24, "day diff across DST"); equal(test, b.diff(a, 'w', true), 12 / 24 / 7, "week diff across DST"); equal(test, b.diff(a, 'M', true), 12 / 24 / daysInMonth, "month diff across DST"); equal(test, b.diff(a, 'y', true), 12 / 24 / daysInMonth / 12, "year diff across DST"); test.done(); }, "diff overflow" : function (test) { test.expect(4); test.equal(moment([2011]).diff([2010], 'months'), 12, "month diff"); test.equal(moment([2010, 0, 2]).diff([2010], 'hours'), 24, "hour diff"); test.equal(moment([2010, 0, 1, 2]).diff([2010], 'minutes'), 120, "minute diff"); test.equal(moment([2010, 0, 1, 0, 4]).diff([2010], 'seconds'), 240, "second diff"); test.done(); }, "diff between utc and local" : function (test) { test.expect(7); test.equal(moment([2012]).utc().diff([2011], 'years'), 1, "year diff"); test.equal(moment([2010, 2, 2]).utc().diff([2010, 0, 2], 'months'), 2, "month diff"); test.equal(moment([2010, 0, 4]).utc().diff([2010], 'days'), 3, "day diff"); test.equal(moment([2010, 0, 22]).utc().diff([2010], 'weeks'), 3, "week diff"); test.equal(moment([2010, 0, 1, 4]).utc().diff([2010], 'hours'), 4, "hour diff"); test.equal(moment([2010, 0, 1, 0, 5]).utc().diff([2010], 'minutes'), 5, "minute diff"); test.equal(moment([2010, 0, 1, 0, 0, 6]).utc().diff([2010], 'seconds'), 6, "second diff"); test.done(); }, "diff floored" : function (test) { test.expect(7); test.equal(moment([2010, 0, 1, 23]).diff([2010], 'day'), 0, "23 hours = 0 days"); test.equal(moment([2010, 0, 1, 23, 59]).diff([2010], 'day'), 0, "23:59 hours = 0 days"); test.equal(moment([2010, 0, 1, 24]).diff([2010], 'day'), 1, "24 hours = 1 day"); test.equal(moment([2010, 0, 2]).diff([2011, 0, 1], 'year'), 0, "year rounded down"); test.equal(moment([2011, 0, 1]).diff([2010, 0, 2], 'year'), 0, "year rounded down"); test.equal(moment([2010, 0, 2]).diff([2011, 0, 2], 'year'), -1, "year rounded down"); test.equal(moment([2011, 0, 2]).diff([2010, 0, 2], 'year'), 1, "year rounded down"); test.done(); }, "year diffs include dates" : function (test) { test.expect(1); test.ok(moment([2012, 1, 19]).diff(moment([2002, 1, 20]), 'years', true) < 10, "year diff should include date of month"); test.done(); }, "month diffs" : function (test) { test.expect(8); // due to floating point math errors, these tests just need to be accurate within 0.00000001 equal(test, moment([2012, 0, 1]).diff([2012, 1, 1], 'months', true), -1, 'Jan 1 to Feb 1 should be 1 month'); equal(test, moment([2012, 0, 1]).diff([2012, 0, 1, 12], 'months', true), -0.5 / 31, 'Jan 1 to Jan 1 noon should be 0.5 / 31 months'); equal(test, moment([2012, 0, 15]).diff([2012, 1, 15], 'months', true), -1, 'Jan 15 to Feb 15 should be 1 month'); equal(test, moment([2012, 0, 28]).diff([2012, 1, 28], 'months', true), -1, 'Jan 28 to Feb 28 should be 1 month'); equal(test, moment([2012, 0, 31]).diff([2012, 1, 29], 'months', true), -1 + (2 / 30), 'Jan 31 to Feb 29 should be 1 - (2 / 30) months'); equal(test, moment([2012, 0, 31]).diff([2012, 2, 1], 'months', true), -2 + (30 / 31), 'Jan 31 to Mar 1 should be 2 - (30 / 31) months'); equal(test, moment([2012, 0, 31]).diff([2012, 2, 1, 12], 'months', true), -2 + (29.5 / 31), 'Jan 31 to Mar 1 should be 2 - (29.5 / 31) months'); equal(test, moment([2012, 0, 1]).diff([2012, 0, 31], 'months', true), -(30 / 31), 'Jan 1 to Jan 31 should be 30 / 31 months'); test.done(); }, "year diffs" : function (test) { test.expect(10); // due to floating point math errors, these tests just need to be accurate within 0.00000001 equal(test, moment([2012, 0, 1]).diff([2013, 0, 1], 'years', true), -1, 'Jan 1 2012 to Jan 1 2013 should be 1 year'); equal(test, moment([2012, 1, 28]).diff([2013, 1, 28], 'years', true), -1, 'Feb 28 2012 to Feb 28 2013 should be 1 year'); equal(test, moment([2012, 2, 1]).diff([2013, 2, 1], 'years', true), -1, 'Mar 1 2012 to Mar 1 2013 should be 1 year'); equal(test, moment([2012, 11, 1]).diff([2013, 11, 1], 'years', true), -1, 'Dec 1 2012 to Dec 1 2013 should be 1 year'); equal(test, moment([2012, 11, 31]).diff([2013, 11, 31], 'years', true), -1, 'Dec 31 2012 to Dec 31 2013 should be 1 year'); equal(test, moment([2012, 0, 1]).diff([2013, 6, 1], 'years', true), -1.5, 'Jan 1 2012 to Jul 1 2013 should be 1.5 years'); equal(test, moment([2012, 0, 31]).diff([2013, 6, 31], 'years', true), -1.5, 'Jan 31 2012 to Jul 31 2013 should be 1.5 years'); equal(test, moment([2012, 0, 1]).diff([2013, 0, 1, 12], 'years', true), -1 - (0.5 / 31) / 12, 'Jan 1 2012 to Jan 1 2013 noon should be 1+(0.5 / 31) / 12 years'); equal(test, moment([2012, 0, 1]).diff([2013, 6, 1, 12], 'years', true), -1.5 - (0.5 / 31) / 12, 'Jan 1 2012 to Jul 1 2013 noon should be 1.5+(0.5 / 31) / 12 years'); equal(test, moment([2012, 1, 29]).diff([2013, 1, 28], 'years', true), -1 + (1 / 28.5) / 12, 'Feb 29 2012 to Feb 28 2013 should be 1-(1 / 28.5) / 12 years'); test.done(); } }; assets/plugins/moment/test/moment/is_moment.js000064400000002134152510437670015646 0ustar00var moment = require('../../moment'); exports.is_moment = { "is moment object": function (test) { test.expect(11); var MyObj = function () {}; MyObj.prototype.toDate = function () { return new Date(); }; test.ok(moment.isMoment(moment()), 'simple moment object'); test.ok(moment.isMoment(moment('invalid date')), 'invalid moment object'); test.ok(!moment.isMoment(new MyObj()), 'myObj is not moment object'); test.ok(!moment.isMoment(moment), 'moment function is not moment object'); test.ok(!moment.isMoment(new Date()), 'date object is not moment object'); test.ok(!moment.isMoment(Object), 'Object is not moment object'); test.ok(!moment.isMoment('foo'), 'string is not moment object'); test.ok(!moment.isMoment(1), 'number is not moment object'); test.ok(!moment.isMoment(NaN), 'NaN is not moment object'); test.ok(!moment.isMoment(null), 'null is not moment object'); test.ok(!moment.isMoment(undefined), 'undefined is not moment object'); test.done(); } }; assets/plugins/moment/test/lang/sq.js000064400000044023152510437670013724 0ustar00var moment = require("../../moment"); /************************************************** Albanian *************************************************/ exports["lang:sq"] = { setUp : function (cb) { moment.lang('sq'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var i, tests = 'Janar Jan_Shkurt Shk_Mars Mar_Prill Pri_Maj Maj_Qershor Qer_Korrik Kor_Gusht Gus_Shtator Sht_Tetor Tet_Nëntor Nën_Dhjetor Dhj'.split("_"); function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, HH:mm:ss', 'E Diel, Shkurt 14. 2010, 15:25:50'], ['ddd, HH', 'Die, 15'], ['M Mo MM MMMM MMM', '2 2. 02 Shkurt Shk'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14. 14'], ['d do dddd ddd dd', '0 0. E Diel Die D'], ['DDD DDDo DDDD', '45 45. 045'], ['w wo ww', '6 6. 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45. day of the year'], ['L', '14/02/2010'], ['LL', '14 Shkurt 2010'], ['LLL', '14 Shkurt 2010 15:25'], ['LLLL', 'E Diel, 14 Shkurt 2010 15:25'], ['l', '14/2/2010'], ['ll', '14 Shk 2010'], ['lll', '14 Shk 2010 15:25'], ['llll', 'Die, 14 Shk 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); test.done(); }, "format month" : function (test) { test.expect(12); var i, expected = 'Janar Jan_Shkurt Shk_Mars Mar_Prill Pri_Maj Maj_Qershor Qer_Korrik Kor_Gusht Gus_Shtator Sht_Tetor Tet_Nëntor Nën_Dhjetor Dhj'.split("_"); for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var i, expected = 'E Diel Die D_E Hënë Hën H_E Marte Mar Ma_E Mërkure Mër Më_E Enjte Enj E_E Premte Pre P_E Shtunë Sht Sh'.split("_"); for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "disa seconda", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "një minut", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "një minut", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutea", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutea", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "një orë", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "një orë", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 orë", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 orë", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 orë", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "një ditë", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "një ditë", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 ditë", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "një ditë", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 ditë", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 ditë", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "një muaj", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "një muaj", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "një muaj", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 muaj", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 muaj", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 muaj", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "një muaj", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 muaj", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 muaj", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "një vit", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "një vit", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 vite", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "një vit", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 vite", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "në disa seconda", "prefix"); test.equal(moment(0).from(30000), "disa seconda me parë", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "disa seconda me parë", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "në disa seconda", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "në 5 ditë", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Sot në 02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Sot në 02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Sot në 03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Neser në 02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Sot në 01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Dje në 02:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [në] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [në] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [në] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('dddd [e kaluar në] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [e kaluar në] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [e kaluar në] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4th is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/test/lang/de.js000064400000043711152510437670013674 0ustar00var moment = require("../../moment"); /************************************************** German *************************************************/ exports["lang:de"] = { setUp : function (cb) { moment.lang('de'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'Januar Jan._Februar Febr._März Mrz._April Apr._Mai Mai_Juni Jun._Juli Jul._August Aug._September Sept._Oktober Okt._November Nov._Dezember Dez.'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, Do MMMM YYYY, h:mm:ss a', 'Sonntag, 14. Februar 2010, 3:25:50 pm'], ['ddd, hA', 'So., 3PM'], ['M Mo MM MMMM MMM', '2 2. 02 Februar Febr.'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14. 14'], ['d do dddd ddd dd', '0 0. Sonntag So. So'], ['DDD DDDo DDDD', '45 45. 045'], ['w wo ww', '6 6. 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45. day of the year'], ['L', '14.02.2010'], ['LL', '14. Februar 2010'], ['LLL', '14. Februar 2010 15:25 Uhr'], ['LLLL', 'Sonntag, 14. Februar 2010 15:25 Uhr'], ['l', '14.2.2010'], ['ll', '14. Febr. 2010'], ['lll', '14. Febr. 2010 15:25 Uhr'], ['llll', 'So., 14. Febr. 2010 15:25 Uhr'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'Januar Jan._Februar Febr._März Mrz._April Apr._Mai Mai_Juni Jun._Juli Jul._August Aug._September Sept._Oktober Okt._November Nov._Dezember Dez.'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'Sonntag So. So_Montag Mo. Mo_Dienstag Di. Di_Mittwoch Mi. Mi_Donnerstag Do. Do_Freitag Fr. Fr_Samstag Sa. Sa'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "ein paar Sekunden", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "eine Minute", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "eine Minute", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 Minuten", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 Minuten", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "eine Stunde", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "eine Stunde", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 Stunden", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 Stunden", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 Stunden", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "ein Tag", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "ein Tag", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 Tage", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "ein Tag", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 Tage", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 Tage", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "ein Monat", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "ein Monat", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "ein Monat", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 Monate", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 Monate", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 Monate", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "ein Monat", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 Monate", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 Monate", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "ein Jahr", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "ein Jahr", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 Jahre", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ein Jahr", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 Jahre", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "in ein paar Sekunden", "prefix"); test.equal(moment(0).from(30000), "vor ein paar Sekunden", "suffix"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "in ein paar Sekunden", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "in 5 Tagen", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Heute um 2:00 Uhr", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Heute um 2:25 Uhr", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Heute um 3:00 Uhr", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Morgen um 2:00 Uhr", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Heute um 1:00 Uhr", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Gestern um 2:00 Uhr", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [um] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [um] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [um] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[letzten] dddd [um] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[letzten] dddd [um] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[letzten] dddd [um] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4th is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/test/lang/sl.js000064400000045202152510437670013717 0ustar00var moment = require("../../moment"); /************************************************** Slovenian *************************************************/ exports["lang:sl"] = { setUp : function (cb) { moment.lang('sl'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'januar jan._februar feb._marec mar._april apr._maj maj_junij jun._julij jul._avgust avg._september sep._oktober okt._november nov._december dec.'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, Do MMMM YYYY, h:mm:ss a', 'nedelja, 14. februar 2010, 3:25:50 pm'], ['ddd, hA', 'ned., 3PM'], ['M Mo MM MMMM MMM', '2 2. 02 februar feb.'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14. 14'], ['d do dddd ddd dd', '0 0. nedelja ned. ne'], ['DDD DDDo DDDD', '45 45. 045'], ['w wo ww', '7 7. 07'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45. day of the year'], ['L', '14. 02. 2010'], ['LL', '14. februar 2010'], ['LLL', '14. februar 2010 15:25'], ['LLLL', 'nedelja, 14. februar 2010 15:25'], ['l', '14. 2. 2010'], ['ll', '14. feb. 2010'], ['lll', '14. feb. 2010 15:25'], ['llll', 'ned., 14. feb. 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'januar jan._februar feb._marec mar._april apr._maj maj._junij jun._julij jul._avgust avg._september sep._oktober okt._november nov._december dec.'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'nedelja ned. ne_ponedeljek pon. po_torek tor. to_sreda sre. sr_četrtek čet. če_petek pet. pe_sobota sob. so'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "nekaj sekund", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "ena minuta", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "ena minuta", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minuti", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minut", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "ena ura", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "ena ura", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 uri", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 ur", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 ur", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "en dan", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "en dan", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dni", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "en dan", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dni", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dni", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "en mesec", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "en mesec", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "en mesec", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 meseca", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 meseca", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mesece", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "en mesec", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mesecev", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 mesecev", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "eno leto", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "eno leto", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 leti", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "eno leto", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 let", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "čez nekaj sekund", "prefix"); test.equal(moment(0).from(30000), "nekaj sekund nazaj", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "nekaj sekund nazaj", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "čez nekaj sekund", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "čez 5 dni", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "danes ob 2:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "danes ob 2:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "danes ob 3:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "jutri ob 2:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "danes ob 1:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "včeraj ob 2:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; function makeFormat(d) { switch (d.day()) { case 0: return '[v] [nedeljo] [ob] LT'; case 3: return '[v] [sredo] [ob] LT'; case 6: return '[v] [soboto] [ob] LT'; case 1: case 2: case 4: case 5: return '[v] dddd [ob] LT'; } } for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; function makeFormat(d) { switch (d.day()) { case 0: case 3: case 6: return '[prejšnja] dddd [ob] LT'; case 1: case 2: case 4: case 5: return '[prejšnji] dddd [ob] LT'; } } for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', "Jan 9 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/bg.js000064400000046310152510437670013672 0ustar00var moment = require("../../moment"); /************************************************** Bulgarian *************************************************/ exports["lang:bg"] = { setUp : function (cb) { moment.lang('bg'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'януари янр_февруари фев_март мар_април апр_май май_юни юни_юли юли_август авг_септември сеп_октомври окт_ноември ное_декември дек'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'неделя, февруари 14-ти 2010, 3:25:50 pm'], ['ddd, hA', 'нед, 3PM'], ['M Mo MM MMMM MMM', '2 2-ри 02 февруари фев'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14-ти 14'], ['d do dddd ddd dd', '0 0-ев неделя нед нд'], ['DDD DDDo DDDD', '45 45-ти 045'], ['w wo ww', '7 7-ми 07'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45-ти day of the year'], ['L', '14.02.2010'], ['LL', '14 февруари 2010'], ['LLL', '14 февруари 2010 3:25'], ['LLLL', 'неделя, 14 февруари 2010 3:25'], ['l', '14.2.2010'], ['ll', '14 фев 2010'], ['lll', '14 фев 2010 3:25'], ['llll', 'нед, 14 фев 2010 3:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1-ви', '1-ви'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2-ри', '2-ри'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3-ти', '3-ти'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4-ти', '4-ти'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5-ти', '5-ти'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6-ти', '6-ти'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7-ми', '7-ми'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8-ми', '8-ми'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9-ти', '9-ти'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10-ти', '10-ти'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11-ти', '11-ти'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12-ти', '12-ти'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13-ти', '13-ти'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14-ти', '14-ти'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15-ти', '15-ти'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16-ти', '16-ти'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17-ти', '17-ти'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18-ти', '18-ти'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19-ти', '19-ти'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20-ти', '20-ти'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21-ви', '21-ви'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22-ри', '22-ри'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23-ти', '23-ти'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24-ти', '24-ти'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25-ти', '25-ти'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26-ти', '26-ти'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27-ми', '27-ми'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28-ми', '28-ми'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29-ти', '29-ти'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30-ти', '30-ти'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31-ви', '31-ви'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'януари янр_февруари фев_март мар_април апр_май май_юни юни_юли юли_август авг_септември сеп_октомври окт_ноември ное_декември дек'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'неделя нед нд_понеделник пон пн_вторник вто вт_сряда сря ср_четвъртък чет чт_петък пет пт_събота съб сб'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "няколко секунди", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "минута", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "минута", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 минути", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 минути", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "час", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "час", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 часа", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 часа", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 часа", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "ден", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "ден", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 дни", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "ден", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 дни", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 дни", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "месец", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "месец", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "месец", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 месеца", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 месеца", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 месеца", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "месец", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 месеца", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 месеца", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "година", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "година", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 години", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "година", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 години", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "след няколко секунди", "prefix"); test.equal(moment(0).from(30000), "преди няколко секунди", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "преди няколко секунди", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "след няколко секунди", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "след 5 дни", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Днес в 2:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Днес в 2:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Днес в 3:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Утре в 2:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Днес в 1:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Вчера в 2:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [в] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [в] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [в] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; function makeFormat(d) { switch (d.day()) { case 0: case 3: case 6: return '[В изминалата] dddd [в] LT'; case 1: case 2: case 4: case 5: return '[В изминалия] dddd [в] LT'; } } for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-ви', "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-ви', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-ри', "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-ри', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-ти', "Jan 9 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/br.js000064400000035240152510437670013705 0ustar00var moment = require("../../moment"); /************************************************** Breton *************************************************/ exports["lang:br"] = { setUp : function (cb) { moment.lang('br'); cb(); }, tearDown : function (cb) { moment.lang('br'); cb(); }, "parse" : function (test) { test.expect(96); var tests = "Genver Gen_C'hwevrer C'hwe_Meurzh Meu_Ebrel Ebr_Mae Mae_Mezheven Eve_Gouere Gou_Eost Eos_Gwengolo Gwe_Here Her_Du Du_Kerzu Ker".split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(17); moment.lang('br'); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', "Sul, C'hwevrer 14vet 2010, 3:25:50 pm"], ['ddd, h A', 'Sul, 3 PM'], ['M Mo MM MMMM MMM', "2 2vet 02 C'hwevrer C'hwe"], ['YYYY YY', '2010 10'], ['D Do DD', '14 14vet 14'], ['d do dddd ddd dd', '0 0vet Sul Sul Su'], ['DDD DDDo DDDD', '45 45vet 045'], ['w wo ww', '6 6vet 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['DDDo [devezh] [ar] [vloaz]', '45vet devezh ar vloaz'], ['L', '14/02/2010'], ['LL', "14 a viz C'hwevrer 2010"], ['LLL', "14 a viz C'hwevrer 2010 3e25 PM"], ['LLLL', "Sul, 14 a viz C'hwevrer 2010 3e25 PM"] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); moment.lang('br'); test.equal(moment([2011, 0, 1]).format('DDDo'), '1añ', '1añ'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2vet', '2vet'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3vet', '3vet'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4vet', '4vet'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5vet', '5vet'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6vet', '6vet'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7vet', '7vet'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8vet', '8vet'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9vet', '9vet'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10vet', '10vet'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11vet', '11vet'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12vet', '12vet'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13vet', '13vet'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14vet', '14vet'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15vet', '15vet'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16vet', '16vet'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17vet', '17vet'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18vet', '18vet'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19vet', '19vet'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20vet', '20vet'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21vet', '21vet'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22vet', '22vet'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23vet', '23vet'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24vet', '24vet'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25vet', '25vet'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26vet', '26vet'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27vet', '27vet'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28vet', '28vet'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29vet', '29vet'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30vet', '30vet'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31vet', '31vet'); test.done(); }, "format month" : function (test) { test.expect(12); moment.lang('br'); var expected = "Genver Gen_C'hwevrer C'hwe_Meurzh Meu_Ebrel Ebr_Mae Mae_Mezheven Eve_Gouere Gou_Eost Eos_Gwengolo Gwe_Here Her_Du Du_Kerzu Ker".split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); moment.lang('br'); var expected = "Sul Sul Su_Lun Lun Lu_Meurzh Meu Me_Merc'her Mer Mer_Yaou Yao Ya_Gwener Gwe Gw_Sadorn Sad Sa".split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); moment.lang('br'); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "un nebeud segondennoù", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "ur vunutenn", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "ur vunutenn", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 vunutenn", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 munutenn", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "un eur", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "un eur", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 eur", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 eur", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 eur", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "un devezh", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "un devezh", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 zevezh", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "un devezh", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 devezh", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 devezh", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "ur miz", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "ur miz", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "ur miz", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 viz", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 viz", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 miz", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "ur miz", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 miz", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 miz", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "ur bloaz", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "ur bloaz", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 vloaz", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ur bloaz", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 bloaz", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); moment.lang('br'); test.equal(moment(30000).from(0), "a-benn un nebeud segondennoù", "prefix"); test.equal(moment(0).from(30000), "un nebeud segondennoù 'zo", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); moment.lang('br'); test.equal(moment().fromNow(), "un nebeud segondennoù 'zo", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); moment.lang('br'); test.equal(moment().add({s: 30}).fromNow(), "a-benn un nebeud segondennoù", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "a-benn 5 devezh", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); moment.lang('br'); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Hiziv da 2e00 AM", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Hiziv da 2e25 AM", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Hiziv da 3e00 AM", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Warc'hoazh da 2e00 AM", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Hiziv da 1e00 AM", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Dec'h da 2e00 AM", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); moment.lang('br'); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [da] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [da] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [da] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); moment.lang('br'); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('dddd [paset da] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [paset da] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [paset da] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); moment.lang('br'); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, "special mutations for years": function (test) { test.expect(12); moment.lang('br'); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ur bloaz", "mutation 1 year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 2}), true), "2 vloaz", "mutation 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 3}), true), "3 bloaz", "mutation 3 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 4}), true), "4 bloaz", "mutation 4 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 bloaz", "mutation 5 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 9}), true), "9 bloaz", "mutation 9 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 10}), true), "10 vloaz", "mutation 10 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 21}), true), "21 bloaz", "mutation 21 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 22}), true), "22 vloaz", "mutation 22 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 133}), true), "133 bloaz", "mutation 133 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 148}), true), "148 vloaz", "mutation 148 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 261}), true), "261 bloaz", "mutation 261 years"); test.done(); } }; assets/plugins/moment/test/lang/he.js000064400000040240152510437670013672 0ustar00var moment = require("../../moment"); /************************************************** Hebrew **************************************************/ exports["lang:he"] = { setUp : function (cb) { moment.lang('he'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'ינואר ינו׳_פברואר פבר׳_מרץ מרץ_אפריל אפר׳_מאי מאי_יוני יוני_יולי יולי_אוגוסט אוג׳_ספטמבר ספט׳_אוקטובר אוק׳_נובמבר נוב׳_דצמבר דצמ׳'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'ראשון, פברואר 14 2010, 3:25:50 pm'], ['ddd, hA', 'א׳, 3PM'], ['M Mo MM MMMM MMM', '2 2 02 פברואר פבר׳'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14 14'], ['d do dddd ddd dd', '0 0 ראשון א׳ א'], ['DDD DDDo DDDD', '45 45 045'], ['w wo ww', '8 8 08'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45 day of the year'], ['L', '14/02/2010'], ['LL', '14 בפברואר 2010'], ['LLL', '14 בפברואר 2010 15:25'], ['LLLL', 'ראשון, 14 בפברואר 2010 15:25'], ['l', '14/2/2010'], ['ll', '14 פבר׳ 2010'], ['lll', '14 פבר׳ 2010 15:25'], ['llll', 'א׳, 14 פבר׳ 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'ינואר ינו׳_פברואר פבר׳_מרץ מרץ_אפריל אפר׳_מאי מאי_יוני יוני_יולי יולי_אוגוסט אוג׳_ספטמבר ספט׳_אוקטובר אוק׳_נובמבר נוב׳_דצמבר דצמ׳'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'ראשון א׳ א|שני ב׳ ב|שלישי ג׳ ג|רביעי ד׳ ד|חמישי ה׳ ה|שישי ו׳ ו|שבת ש׳ ש'.split("|"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "מספר שניות", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "דקה", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "דקה", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 דקות", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 דקות", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "שעה", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "שעה", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "שעתיים", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 שעות", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 שעות", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "יום", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "יום", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "יומיים", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "יום", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 ימים", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 ימים", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "חודש", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "חודש", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "חודש", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "חודשיים", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "חודשיים", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 חודשים", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "חודש", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 חודשים", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 חודשים", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "שנה", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "שנה", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "שנתיים", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "שנה", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 שנים", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "בעוד מספר שניות", "prefix"); test.equal(moment(0).from(30000), "לפני מספר שניות", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "לפני מספר שניות", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "בעוד מספר שניות", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "בעוד 5 ימים", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "היום ב־02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "היום ב־02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "היום ב־03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "מחר ב־02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "היום ב־01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "אתמול ב־02:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [בשעה] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [בשעה] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [בשעה] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[ביום] dddd [האחרון בשעה] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[ביום] dddd [האחרון בשעה] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[ביום] dddd [האחרון בשעה] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Sunday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(6); test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(5); test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); test.done(); }, "weeks year starting sunday format" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1', "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2', "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', "Jan 15 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/ru.js000064400000053106152510437670013731 0ustar00var moment = require("../../moment"); /************************************************** Russian *************************************************/ exports["lang:ru"] = { setUp : function (cb) { moment.lang('ru'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'январь янв_февраль фев_март мар_апрель апр_май май_июнь июнь_июль июль_август авг_сентябрь сен_октябрь окт_ноябрь ноя_декабрь дек'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "parse exceptional case" : function (test) { test.equal(moment('11 мая 1989', ['DD MMMM YYYY']).format('DD-MM-YYYY'), '11-05-1989'); test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, Do MMMM YYYY, HH:mm:ss', 'воскресенье, 14-го февраля 2010, 15:25:50'], ['ddd, h A', 'вс, 3 дня'], ['M Mo MM MMMM MMM', '2 2-й 02 февраль фев'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14-го 14'], ['d do dddd ddd dd', '0 0-й воскресенье вс вс'], ['DDD DDDo DDDD', '45 45-й 045'], ['w wo ww', '7 7-я 07'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'дня дня'], ['DDDo [день года]', '45-й день года'], ['L', '14.02.2010'], ['LL', '14 февраля 2010 г.'], ['LLL', '14 февраля 2010 г., 15:25'], ['LLLL', 'воскресенье, 14 февраля 2010 г., 15:25'], ['l', '14.2.2010'], ['ll', '14 фев 2010 г.'], ['lll', '14 фев 2010 г., 15:25'], ['llll', 'вс, 14 фев 2010 г., 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format meridiem" : function (test) { test.expect(8); test.equal(moment([2012, 11, 28, 0, 0]).format("A"), "ночи", "night"); test.equal(moment([2012, 11, 28, 3, 59]).format("A"), "ночи", "night"); test.equal(moment([2012, 11, 28, 4, 0]).format("A"), "утра", "morning"); test.equal(moment([2012, 11, 28, 11, 59]).format("A"), "утра", "morning"); test.equal(moment([2012, 11, 28, 12, 0]).format("A"), "дня", "afternoon"); test.equal(moment([2012, 11, 28, 16, 59]).format("A"), "дня", "afternoon"); test.equal(moment([2012, 11, 28, 17, 0]).format("A"), "вечера", "evening"); test.equal(moment([2012, 11, 28, 23, 59]).format("A"), "вечера", "evening"); test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1-й', '1-й'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2-й', '2-й'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3-й', '3-й'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4-й', '4-й'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5-й', '5-й'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6-й', '6-й'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7-й', '7-й'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8-й', '8-й'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9-й', '9-й'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10-й', '10-й'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11-й', '11-й'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12-й', '12-й'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13-й', '13-й'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14-й', '14-й'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15-й', '15-й'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16-й', '16-й'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17-й', '17-й'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18-й', '18-й'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19-й', '19-й'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20-й', '20-й'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21-й', '21-й'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22-й', '22-й'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23-й', '23-й'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24-й', '24-й'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25-й', '25-й'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26-й', '26-й'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27-й', '27-й'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28-й', '28-й'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29-й', '29-й'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30-й', '30-й'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31-й', '31-й'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'январь янв_февраль фев_март мар_апрель апр_май май_июнь июнь_июль июль_август авг_сентябрь сен_октябрь окт_ноябрь ноя_декабрь дек'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format month case" : function (test) { test.expect(24); var months = { 'nominative': 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'), 'accusative': 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_') }, i; for (i = 0; i < 12; i++) { test.equal(moment([2011, i, 1]).format('D MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]); test.equal(moment([2011, i, 1]).format('MMMM'), months.nominative[i], '1 ' + months.nominative[i]); } test.done(); }, "format month short case" : function (test) { test.expect(24); var monthsShort = { 'nominative': 'янв_фев_мар_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'), 'accusative': 'янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек'.split('_') }, i; for (i = 0; i < 12; i++) { test.equal(moment([2011, i, 1]).format('D MMM'), '1 ' + monthsShort.accusative[i], '1 ' + monthsShort.accusative[i]); test.equal(moment([2011, i, 1]).format('MMM'), monthsShort.nominative[i], '1 ' + monthsShort.nominative[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'воскресенье вс вс_понедельник пн пн_вторник вт вт_среда ср ср_четверг чт чт_пятница пт пт_суббота сб сб'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(32); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "несколько секунд", "44 seconds = seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "минута", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "минута", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 минуты", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 минуты", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "час", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "час", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 часа", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 часов", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 час", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "день", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "день", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 дня", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "день", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 дней", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 11}), true), "11 дней", "11 days = 11 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 21}), true), "21 день", "21 days = 21 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 дней", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "месяц", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "месяц", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "месяц", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 месяца", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 месяца", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 месяца", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "месяц", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 месяцев", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 месяцев", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "год", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "год", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 года", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "год", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 лет", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "через несколько секунд", "prefix"); test.equal(moment(0).from(30000), "несколько секунд назад", "suffix"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "через несколько секунд", "in seconds"); test.equal(moment().add({d: 5}).fromNow(), "через 5 дней", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Сегодня в 02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Сегодня в 02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Сегодня в 03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Завтра в 02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Сегодня в 01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Вчера в 02:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; function makeFormat(d) { return d.day() === 2 ? '[Во] dddd [в] LT' : '[В] dddd [в] LT'; } for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; function makeFormat(d) { switch (d.day()) { case 0: return '[В прошлое] dddd [в] LT'; case 1: case 2: case 4: return '[В прошлый] dddd [в] LT'; case 3: case 5: case 6: return '[В прошлую] dddd [в] LT'; } } for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-я', "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-я', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-я', "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-я', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-я', "Jan 9 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/gl.js000064400000041377152510437670013714 0ustar00var moment = require("../../moment"); /************************************************** Galego *************************************************/ exports["lang:gl"] = { setUp : function (cb) { moment.lang('gl'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = "Xaneiro Xan._Febreiro Feb._Marzo Mar._Abril Abr._Maio Mai._Xuño Xuñ._Xullo Xul._Agosto Ago._Setembro Set._Outubro Out._Novembro Nov._Decembro Dec.".split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = "Xaneiro Xan._Febreiro Feb._Marzo Mar._Abril Abr._Maio Mai._Xuño Xuñ._Xullo Xul._Agosto Ago._Setembro Set._Outubro Out._Novembro Nov._Decembro Dec.".split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = "Domingo Dom. Do_Luns Lun. Lu_Martes Mar. Ma_Mércores Mér. Mé_Xoves Xov. Xo_Venres Ven. Ve_Sábado Sáb. Sá".split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "uns segundos", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "un minuto", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "un minuto", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutos", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutos", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "unha hora", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "unha hora", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 horas", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 horas", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 horas", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "un día", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "un día", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 días", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "un día", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 días", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 días", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "un mes", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "un mes", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "un mes", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 meses", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 meses", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 meses", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "un mes", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 meses", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 meses", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "un ano", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "un ano", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 anos", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "un ano", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 anos", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "nuns segundos", "prefix"); test.equal(moment(0).from(30000), "hai uns segundos", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "hai uns segundos", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "nuns segundos", "en unos segundos"); test.equal(moment().add({d: 5}).fromNow(), "en 5 días", "en 5 días"); test.done(); }, "calendar day" : function (test) { test.expect(7); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "hoxe ás 2:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "hoxe ás 2:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "hoxe ás 3:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "mañá ás 2:00", "tomorrow at the same time"); test.equal(moment(a).add({ d: 1, h : -1 }).calendar(), "mañá á 1:00", "tomorrow minus 1 hour"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "hoxe á 1:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "onte á 2:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[o] dddd [pasado ' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[o] dddd [pasado ' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[o] dddd [pasado ' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, "regression tests" : function (test) { test.expect(1); var lastWeek = moment().subtract({ d: 4 }).hours(1); test.equal(lastWeek.calendar(), lastWeek.format('[o] dddd [pasado a] LT'), "1 o'clock bug"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1º', "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1º', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2º', "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2º', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3º', "Jan 9 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/en-ca.js000064400000044125152510437670014267 0ustar00var moment = require("../../moment"); /************************************************** English (Canadian) *************************************************/ exports["lang:en-ca"] = { setUp : function (cb) { moment.lang('en-ca'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var i, tests = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split("_"); function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sunday, February 14th 2010, 3:25:50 pm'], ['ddd, hA', 'Sun, 3PM'], ['M Mo MM MMMM MMM', '2 2nd 02 February Feb'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14th 14'], ['d do dddd ddd dd', '0 0th Sunday Sun Su'], ['DDD DDDo DDDD', '45 45th 045'], ['w wo ww', '8 8th 08'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45th day of the year'], ['L', '2010-02-14'], ['LL', '14 February, 2010'], ['LLL', '14 February, 2010 3:25 PM'], ['LLLL', 'Sunday, 14 February, 2010 3:25 PM'], ['l', '2010-2-14'], ['ll', '14 Feb, 2010'], ['lll', '14 Feb, 2010 3:25 PM'], ['llll', 'Sun, 14 Feb, 2010 3:25 PM'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st'); test.done(); }, "format month" : function (test) { test.expect(12); var i, expected = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split("_"); for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var i, expected = 'Sunday Sun Su_Monday Mon Mo_Tuesday Tue Tu_Wednesday Wed We_Thursday Thu Th_Friday Fri Fr_Saturday Sat Sa'.split("_"); for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "a few seconds", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "a minute", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "a minute", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutes", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutes", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "an hour", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "an hour", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 hours", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 hours", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 hours", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "a day", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "a day", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 days", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "a day", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 days", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 days", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "a month", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "a month", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "a month", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 months", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 months", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 months", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "a month", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 months", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 months", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "a year", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "a year", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 years", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "a year", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 years", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "in a few seconds", "prefix"); test.equal(moment(0).from(30000), "a few seconds ago", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "a few seconds ago", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "in a few seconds", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "in 5 days", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Today at 2:00 AM", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Today at 2:25 AM", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Today at 3:00 AM", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Tomorrow at 2:00 AM", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Today at 1:00 AM", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Yesterday at 2:00 AM", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [at] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [at] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [at] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[Last] dddd [at] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[Last] dddd [at] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[Last] dddd [at] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Sunday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(6); test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(5); test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); test.done(); }, "weeks year starting sunday format" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1st', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1st', "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2nd', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2nd', "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3rd', "Jan 15 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/cv.js000064400000047034152510437670013716 0ustar00var moment = require("../../moment"); /************************************************** Chuvash *************************************************/ exports["lang:cv"] = { setUp : function (cb) { moment.lang('cv'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'кăрлач кăр_нарăс нар_пуш пуш_ака ака_май май_çĕртме çĕр_утă утă_çурла çур_авăн ав_юпа юпа_чӳк чӳк_раштав раш'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'вырсарникун, нарăс 14-мĕш 2010, 3:25:50 pm'], ['ddd, hA', 'выр, 3PM'], ['M Mo MM MMMM MMM', '2 2-мĕш 02 нарăс нар'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14-мĕш 14'], ['d do dddd ddd dd', '0 0-мĕш вырсарникун выр вр'], ['DDD DDDo DDDD', '45 45-мĕш 045'], ['w wo ww', '7 7-мĕш 07'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['Çулăн DDDo кунĕ', 'Çулăн 45-мĕш кунĕ'], ['L', '14-02-2010'], ['LL', '2010 çулхи нарăс уйăхĕн 14-мĕшĕ'], ['LLL', '2010 çулхи нарăс уйăхĕн 14-мĕшĕ, 15:25'], ['LLLL', 'вырсарникун, 2010 çулхи нарăс уйăхĕн 14-мĕшĕ, 15:25'], ['l', '14-2-2010'], ['ll', '2010 çулхи нар уйăхĕн 14-мĕшĕ'], ['lll', '2010 çулхи нар уйăхĕн 14-мĕшĕ, 15:25'], ['llll', 'выр, 2010 çулхи нар уйăхĕн 14-мĕшĕ, 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1-мĕш', '1-мĕш'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2-мĕш', '2-мĕш'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3-мĕш', '3-мĕш'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4-мĕш', '4-мĕш'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5-мĕш', '5-мĕш'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6-мĕш', '6-мĕш'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7-мĕш', '7-мĕш'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8-мĕш', '8-мĕш'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9-мĕш', '9-мĕш'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10-мĕш', '10-мĕш'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11-мĕш', '11-мĕш'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12-мĕш', '12-мĕш'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13-мĕш', '13-мĕш'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14-мĕш', '14-мĕш'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15-мĕш', '15-мĕш'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16-мĕш', '16-мĕш'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17-мĕш', '17-мĕш'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18-мĕш', '18-мĕш'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19-мĕш', '19-мĕш'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20-мĕш', '20-мĕш'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21-мĕш', '21-мĕш'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22-мĕш', '22-мĕш'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23-мĕш', '23-мĕш'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24-мĕш', '24-мĕш'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25-мĕш', '25-мĕш'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26-мĕш', '26-мĕш'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27-мĕш', '27-мĕш'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28-мĕш', '28-мĕш'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29-мĕш', '29-мĕш'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30-мĕш', '30-мĕш'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31-мĕш', '31-мĕш'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'кăрлач кăр_нарăс нар_пуш пуш_ака ака_май май_çĕртме çĕр_утă утă_çурла çур_авăн ав_юпа юпа_чӳк чӳк_раштав раш'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'вырсарникун выр вр_тунтикун тун тн_ытларикун ытл ыт_юнкун юн юн_кĕçнерникун кĕç кç_эрнекун эрн эр_шăматкун шăм шм'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "пĕр-ик çеккунт", "44 sekunder = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "пĕр минут", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "пĕр минут", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 минут", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 минут", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "пĕр сехет", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "пĕр сехет", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 сехет", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 сехет", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 сехет", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "пĕр кун", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "пĕр кун", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 кун", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "пĕр кун", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 кун", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 кун", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "пĕр уйăх", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "пĕр уйăх", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "пĕр уйăх", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 уйăх", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 уйăх", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 уйăх", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "пĕр уйăх", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 уйăх", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 уйăх", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "пĕр çул", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "пĕр çул", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 çул", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "пĕр çул", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 çул", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "пĕр-ик çеккунтран", "prefix"); test.equal(moment(0).from(30000), "пĕр-ик çеккунт каялла", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "пĕр-ик çеккунт каялла", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(4); test.equal(moment().add({s: 30}).fromNow(), "пĕр-ик çеккунтран", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "5 кунран", "in 5 days"); test.equal(moment().add({h: 2}).fromNow(), "2 сехетрен", "in 2 hours, the right suffix!"); test.equal(moment().add({y: 3}).fromNow(), "3 çултан", "in 3 years, the right suffix!"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Паян 02:00 сехетре", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Паян 02:25 сехетре", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Паян 03:00 сехетре", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Ыран 02:00 сехетре", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Паян 01:00 сехетре", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Ĕнер 02:00 сехетре", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('[Çитес] dddd LT [сехетре]'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[Çитес] dddd LT [сехетре]'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[Çитес] dddd LT [сехетре]'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[Иртнĕ] dddd LT [сехетре]'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[Иртнĕ] dddd LT [сехетре]'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[Иртнĕ] dddd LT [сехетре]'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-мĕш', "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-мĕш', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-мĕш', "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-мĕш', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-мĕш', "Jan 9 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/fi.js000064400000044505152510437670013704 0ustar00var moment = require("../../moment"); /************************************************** Finnish *************************************************/ exports["lang:fi"] = { setUp : function (cb) { moment.lang('fi'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'tammikuu tammi_helmikuu helmi_maaliskuu maalis_huhtikuu huhti_toukokuu touko_kesäkuu kesä_heinäkuu heinä_elokuu elo_syyskuu syys_lokakuu loka_marraskuu marras_joulukuu joulu'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'sunnuntai, helmikuu 14. 2010, 3:25:50 pm'], ['ddd, hA', 'su, 3PM'], ['M Mo MM MMMM MMM', '2 2. 02 helmikuu helmi'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14. 14'], ['d do dddd ddd dd', '0 0. sunnuntai su su'], ['DDD DDDo DDDD', '45 45. 045'], ['w wo ww', '6 6. 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[vuoden] DDDo [päivä]', 'vuoden 45. päivä'], ['L', '14.02.2010'], ['LL', '14. helmikuuta 2010'], ['LLL', '14. helmikuuta 2010, klo 15.25'], ['LLLL', 'sunnuntai, 14. helmikuuta 2010, klo 15.25'], ['l', '14.2.2010'], ['ll', '14. helmi 2010'], ['lll', '14. helmi 2010, klo 15.25'], ['llll', 'su, 14. helmi 2010, klo 15.25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1st'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2nd'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3rd'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4th'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5th'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6th'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7th'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8th'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9th'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10th'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11th'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12th'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13th'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14th'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15th'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16th'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17th'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18th'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19th'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20th'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21st'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22nd'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23rd'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24th'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25th'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26th'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27th'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28th'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29th'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30th'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31st'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'tammikuu tammi_helmikuu helmi_maaliskuu maalis_huhtikuu huhti_toukokuu touko_kesäkuu kesä_heinäkuu heinä_elokuu elo_syyskuu syys_lokakuu loka_marraskuu marras_joulukuu joulu'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'sunnuntai su su_maanantai ma ma_tiistai ti ti_keskiviikko ke ke_torstai to to_perjantai pe pe_lauantai la la'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "muutama sekunti", "44 seconds = few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "minuutti", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "minuutti", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "kaksi minuuttia", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minuuttia", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "tunti", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "tunti", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "kaksi tuntia", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "viisi tuntia", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 tuntia", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "päivä", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "päivä", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "kaksi päivää", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "päivä", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "viisi päivää", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 päivää", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "kuukausi", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "kuukausi", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "kuukausi", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "kaksi kuukautta", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "kaksi kuukautta", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "kolme kuukautta", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "kuukausi", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "viisi kuukautta", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 kuukautta", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "vuosi", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "vuosi", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "kaksi vuotta", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "vuosi", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "viisi vuotta", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "muutaman sekunnin päästä", "prefix"); test.equal(moment(0).from(30000), "muutama sekunti sitten", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "muutama sekunti sitten", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "muutaman sekunnin päästä", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "viiden päivän päästä", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "tänään klo 02.00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "tänään klo 02.25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "tänään klo 03.00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "huomenna klo 02.00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "tänään klo 01.00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "eilen klo 02.00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [klo] LT'), "today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [klo] LT'), "today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [klo] LT'), "today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[viime] dddd[na] [klo] LT'), "today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[viime] dddd[na] [klo] LT'), "today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[viime] dddd[na] [klo] LT'), "today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "yksi viikko sitten"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "yhden viikon päästä"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "kaksi viikkoa sitten"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "kaden viikon päästä"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4th is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/test/lang/sv.js000064400000043725152510437670013741 0ustar00var moment = require("../../moment"); /************************************************** Swedish *************************************************/ exports["lang:sv"] = { setUp : function (cb) { moment.lang('sv'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'januari jan_februari feb_mars mar_april apr_maj maj_juni jun_juli jul_augusti aug_september sep_oktober okt_november nov_december dec'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'söndag, februari 14e 2010, 3:25:50 pm'], ['ddd, hA', 'sön, 3PM'], ['M Mo MM MMMM MMM', '2 2a 02 februari feb'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14e 14'], ['d do dddd ddd dd', '0 0e söndag sön sö'], ['DDD DDDo DDDD', '45 45e 045'], ['w wo ww', '6 6e 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45e day of the year'], ['L', '2010-02-14'], ['LL', '14 februari 2010'], ['LLL', '14 februari 2010 15:25'], ['LLLL', 'söndag 14 februari 2010 15:25'], ['l', '2010-2-14'], ['ll', '14 feb 2010'], ['lll', '14 feb 2010 15:25'], ['llll', 'sön 14 feb 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1a', '1a'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2a', '2a'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3e', '3e'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4e', '4e'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5e', '5e'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6e', '6e'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7e', '7e'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8e', '8e'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9e', '9e'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10e', '10e'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11e', '11e'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12e', '12e'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13e', '13e'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14e', '14e'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15e', '15e'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16e', '16e'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17e', '17e'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18e', '18e'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19e', '19e'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20e', '20e'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21a', '21a'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22a', '22a'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23e', '23e'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24e', '24e'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25e', '25e'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26e', '26e'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27e', '27e'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28e', '28e'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29e', '29e'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30e', '30e'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31a', '31a'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'januari jan_februari feb_mars mar_april apr_maj maj_juni jun_juli jul_augusti aug_september sep_oktober okt_november nov_december dec'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'söndag sön sö_måndag mån må_tisdag tis ti_onsdag ons on_torsdag tor to_fredag fre fr_lördag lör lö'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "några sekunder", "44 sekunder = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "en minut", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "en minut", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minuter", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minuter", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "en timme", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "en timme", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 timmar", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 timmar", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 timmar", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "en dag", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "en dag", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dagar", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "en dag", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dagar", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dagar", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "en månad", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "en månad", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "en månad", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 månader", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 månader", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 månader", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "en månad", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 månader", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 månader", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "ett år", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "ett år", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 år", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ett år", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 år", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "om några sekunder", "prefix"); test.equal(moment(0).from(30000), "för några sekunder sedan", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "för några sekunder sedan", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "om några sekunder", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "om 5 dagar", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Idag 02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Idag 02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Idag 03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Imorgon 02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Idag 01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Igår 02:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[Förra] dddd[en] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[Förra] dddd[en] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[Förra] dddd[en] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4th is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52a', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1a', "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1a', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2a', "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2a', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/test/lang/lv.js000064400000044266152510437700013725 0ustar00var moment = require("../../moment"); /************************************************** Latvian *************************************************/ exports["lang:lv"] = { setUp : function (cb) { moment.lang('lv'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'janvāris jan_februāris feb_marts mar_aprīlis apr_maijs mai_jūnijs jūn_jūlijs jūl_augusts aug_septembris sep_oktobris okt_novembris nov_decembris dec'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, Do MMMM YYYY, h:mm:ss a', 'svētdiena, 14. februāris 2010, 3:25:50 pm'], ['ddd, hA', 'Sv, 3PM'], ['M Mo MM MMMM MMM', '2 2. 02 februāris feb'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14. 14'], ['d do dddd ddd dd', '0 0. svētdiena Sv Sv'], ['DDD DDDo DDDD', '45 45. 045'], ['w wo ww', '6 6. 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45. day of the year'], ['L', '14.02.2010'], ['LL', '2010. gada 14. februāris'], ['LLL', '2010. gada 14. februāris, 15:25'], ['LLLL', '2010. gada 14. februāris, svētdiena, 15:25'], ['l', '14.2.2010'], ['ll', '2010. gada 14. feb'], ['lll', '2010. gada 14. feb, 15:25'], ['llll', '2010. gada 14. feb, Sv, 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'janvāris jan_februāris feb_marts mar_aprīlis apr_maijs mai_jūnijs jūn_jūlijs jūl_augusts aug_septembris sep_oktobris okt_novembris nov_decembris dec'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'svētdiena Sv Sv_pirmdiena P P_otrdiena O O_trešdiena T T_ceturtdiena C C_piektdiena Pk Pk_sestdiena S S'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "dažas sekundes", "44 seconds = seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "minūti", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "minūti", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minūtes", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minūtes", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "stundu", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "stundu", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 stundas", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 stundas", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 stunda", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "dienu", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "dienu", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dienas", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "dienu", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dienas", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dienas", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "mēnesi", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "mēnesi", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "mēnesi", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 mēneši", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 mēneši", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mēneši", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "mēnesi", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mēneši", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 mēneši", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "gadu", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "gadu", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 gadi", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "gadu", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 gadi", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "dažas sekundes vēlāk", "prefix"); test.equal(moment(0).from(30000), "dažas sekundes agrāk", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "dažas sekundes agrāk", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "dažas sekundes vēlāk", "in seconds"); test.equal(moment().add({d: 5}).fromNow(), "5 dienas vēlāk", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Šodien pulksten 02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Šodien pulksten 02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Šodien pulksten 03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Rīt pulksten 02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Šodien pulksten 01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Vakar pulksten 02:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [pulksten] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [pulksten] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [pulksten] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[Pagājušā] dddd [pulksten] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[Pagājušā] dddd [pulksten] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[Pagājušā] dddd [pulksten] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4th is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/test/lang/fr.js000064400000043341152510437700013704 0ustar00var moment = require("../../moment"); /************************************************** French *************************************************/ exports["lang:fr"] = { setUp : function (cb) { moment.lang('fr'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'janvier janv._février févr._mars mars_avril avr._mai mai_juin juin_juillet juil._août août_septembre sept._octobre oct._novembre nov._décembre déc.'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'dimanche, février 14 2010, 3:25:50 pm'], ['ddd, hA', 'dim., 3PM'], ['M Mo MM MMMM MMM', '2 2 02 février févr.'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14 14'], ['d do dddd ddd dd', '0 0 dimanche dim. Di'], ['DDD DDDo DDDD', '45 45 045'], ['w wo ww', '6 6 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45 day of the year'], ['L', '14/02/2010'], ['LL', '14 février 2010'], ['LLL', '14 février 2010 15:25'], ['LLLL', 'dimanche 14 février 2010 15:25'], ['l', '14/2/2010'], ['ll', '14 févr. 2010'], ['lll', '14 févr. 2010 15:25'], ['llll', 'dim. 14 févr. 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1er', '1er'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'janvier janv._février févr._mars mars_avril avr._mai mai_juin juin_juillet juil._août août_septembre sept._octobre oct._novembre nov._décembre déc.'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'dimanche dim. Di_lundi lun. Lu_mardi mar. Ma_mercredi mer. Me_jeudi jeu. Je_vendredi ven. Ve_samedi sam. Sa'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "quelques secondes", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "une minute", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "une minute", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutes", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutes", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "une heure", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "une heure", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 heures", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 heures", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 heures", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "un jour", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "un jour", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 jours", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "un jour", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 jours", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 jours", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "un mois", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "un mois", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "un mois", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 mois", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 mois", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mois", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "un mois", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mois", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 mois", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "un an", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "un an", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 ans", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "un an", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 ans", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "dans quelques secondes", "prefix"); test.equal(moment(0).from(30000), "il y a quelques secondes", "suffix"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "dans quelques secondes", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "dans 5 jours", "in 5 days"); test.done(); }, "same day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Aujourd'hui à 02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Aujourd'hui à 02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Aujourd'hui à 03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Demain à 02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Aujourd'hui à 01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Hier à 02:00", "yesterday at the same time"); test.done(); }, "same next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [à] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [à] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [à] LT'), "Today + " + i + " days end of day"); } test.done(); }, "same last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('dddd [dernier à] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [dernier à] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [dernier à] LT'), "Today - " + i + " days end of day"); } test.done(); }, "same all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4th is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1er', "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1er', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2', "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/test/lang/uk.js000064400000051202152510437700013707 0ustar00var moment = require("../../moment"); /************************************************** Ukrainian *************************************************/ exports["lang:uk"] = { setUp : function (cb) { moment.lang('uk'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'січень січ_лютий лют_березень бер_квітень квіт_травень трав_червень черв_липень лип_серпень серп_вересень вер_жовтень жовт_листопад лист_грудень груд'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(18); var a = [ ['dddd, Do MMMM YYYY, HH:mm:ss', 'неділя, 14-го лютого 2010, 15:25:50'], ['ddd, h A', 'нд, 3 дня'], ['M Mo MM MMMM MMM', '2 2-й 02 лютий лют'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14-го 14'], ['d do dddd ddd dd', '0 0-й неділя нд нд'], ['DDD DDDo DDDD', '45 45-й 045'], ['w wo ww', '7 7-й 07'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'дня дня'], ['DDDo [день року]', '45-й день року'], ['L', '14.02.2010'], ['LL', '14 лютого 2010 р.'], ['LLL', '14 лютого 2010 р., 15:25'], ['LLLL', 'неділя, 14 лютого 2010 р., 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format meridiem" : function (test) { test.expect(8); test.equal(moment([2012, 11, 28, 0, 0]).format("A"), "ночі", "night"); test.equal(moment([2012, 11, 28, 3, 59]).format("A"), "ночі", "night"); test.equal(moment([2012, 11, 28, 4, 0]).format("A"), "ранку", "morning"); test.equal(moment([2012, 11, 28, 11, 59]).format("A"), "ранку", "morning"); test.equal(moment([2012, 11, 28, 12, 0]).format("A"), "дня", "afternoon"); test.equal(moment([2012, 11, 28, 16, 59]).format("A"), "дня", "afternoon"); test.equal(moment([2012, 11, 28, 17, 0]).format("A"), "вечора", "evening"); test.equal(moment([2012, 11, 28, 23, 59]).format("A"), "вечора", "evening"); test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1-й', '1-й'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2-й', '2-й'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3-й', '3-й'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4-й', '4-й'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5-й', '5-й'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6-й', '6-й'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7-й', '7-й'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8-й', '8-й'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9-й', '9-й'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10-й', '10-й'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11-й', '11-й'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12-й', '12-й'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13-й', '13-й'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14-й', '14-й'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15-й', '15-й'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16-й', '16-й'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17-й', '17-й'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18-й', '18-й'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19-й', '19-й'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20-й', '20-й'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21-й', '21-й'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22-й', '22-й'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23-й', '23-й'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24-й', '24-й'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25-й', '25-й'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26-й', '26-й'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27-й', '27-й'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28-й', '28-й'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29-й', '29-й'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30-й', '30-й'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31-й', '31-й'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'січень січ_лютий лют_березень бер_квітень квіт_травень трав_червень черв_липень лип_серпень серп_вересень вер_жовтень жовт_листопад лист_грудень груд'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format month case" : function (test) { test.expect(24); var months = { 'nominative': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_'), 'accusative': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_') }, i; for (i = 0; i < 12; i++) { test.equal(moment([2011, i, 1]).format('D MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]); test.equal(moment([2011, i, 1]).format('MMMM'), months.nominative[i], '1 ' + months.nominative[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'неділя нд нд_понеділок пн пн_вівторок вт вт_середа ср ср_четвер чт чт_п’ятниця пт пт_субота сб сб'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(32); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "декілька секунд", "44 seconds = seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "хвилина", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "хвилина", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 хвилини", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 хвилини", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "годину", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "годину", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 години", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 годин", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 година", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "день", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "день", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 дні", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "день", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 днів", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 11}), true), "11 днів", "11 days = 11 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 21}), true), "21 день", "21 days = 21 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 днів", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "місяць", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "місяць", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "місяць", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 місяці", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 місяці", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 місяці", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "місяць", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 місяців", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 місяців", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "рік", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "рік", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 роки", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "рік", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 років", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "за декілька секунд", "prefix"); test.equal(moment(0).from(30000), "декілька секунд тому", "suffix"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "за декілька секунд", "in seconds"); test.equal(moment().add({d: 5}).fromNow(), "за 5 днів", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(7); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Сьогодні о 02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Сьогодні о 02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Сьогодні о 03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Завтра о 02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Сьогодні о 01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Вчора о 02:00", "yesterday at the same time"); // A special case for Ukrainian since 11 hours have different preposition test.equal(moment(a).add({ h: 9 }).calendar(), "Сьогодні об 11:00", "same day at 11 o'clock"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('[У] dddd [о' + (m.hours() === 11 ? 'б' : '') + '] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[У] dddd [о] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[У] dddd [о] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; function makeFormat(d) { switch (d.day()) { case 0: case 3: case 5: case 6: return '[Минулої] dddd [о' + (d.hours() === 11 ? 'б' : '') + '] LT'; case 1: case 2: case 4: return '[Минулого] dddd [о' + (d.hours() === 11 ? 'б' : '') + '] LT'; } } for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-й', "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-й', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-й', "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-й', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-й', "Jan 9 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/tzm.js000064400000046133152510437700014111 0ustar00// moment.js Morocco Central Atlas Tamaziɣt (tzm) tests // author : Abdel Said : https://github.com/abdelsaid var moment = require("../../moment"); exports["lang:tzm"] = { setUp : function (cb) { moment.lang('tzm'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'ⵉⵏⵏⴰⵢⵔ ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ ⴷⵓⵊⵏⴱⵉⵔ'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'ⴰⵙⴰⵎⴰⵙ, ⴱⵕⴰⵢⵕ 14 2010, 3:25:50 pm'], ['ddd, hA', 'ⴰⵙⴰⵎⴰⵙ, 3PM'], ['M Mo MM MMMM MMM', '2 2 02 ⴱⵕⴰⵢⵕ ⴱⵕⴰⵢⵕ'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14 14'], ['d do dddd ddd dd', '0 0 ⴰⵙⴰⵎⴰⵙ ⴰⵙⴰⵎⴰⵙ ⴰⵙⴰⵎⴰⵙ'], ['DDD DDDo DDDD', '45 45 045'], ['w wo ww', '8 8 08'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45 day of the year'], ['L', '14/02/2010'], ['LL', '14 ⴱⵕⴰⵢⵕ 2010'], ['LLL', '14 ⴱⵕⴰⵢⵕ 2010 15:25'], ['LLLL', 'ⴰⵙⴰⵎⴰⵙ 14 ⴱⵕⴰⵢⵕ 2010 15:25'], ['l', '14/2/2010'], ['ll', '14 ⴱⵕⴰⵢⵕ 2010'], ['lll', '14 ⴱⵕⴰⵢⵕ 2010 15:25'], ['llll', 'ⴰⵙⴰⵎⴰⵙ 14 ⴱⵕⴰⵢⵕ 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'ⵉⵏⵏⴰⵢⵔ ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ ⴷⵓⵊⵏⴱⵉⵔ'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'ⴰⵙⴰⵎⴰⵙ ⴰⵙⴰⵎⴰⵙ ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ ⴰⵢⵏⴰⵙ ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ ⴰⵙⵉⵏⴰⵙ ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ ⴰⴽⵔⴰⵙ ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ ⴰⴽⵡⴰⵙ ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ ⴰⵙⵉⵎⵡⴰⵙ ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ ⴰⵙⵉⴹⵢⴰⵙ ⴰⵙⵉⴹⵢⴰⵙ'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "ⵉⵎⵉⴽ", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "ⵎⵉⵏⵓⴺ", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "ⵎⵉⵏⵓⴺ", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 ⵎⵉⵏⵓⴺ", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 ⵎⵉⵏⵓⴺ", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "ⵙⴰⵄⴰ", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "ⵙⴰⵄⴰ", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 ⵜⴰⵙⵙⴰⵄⵉⵏ", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 ⵜⴰⵙⵙⴰⵄⵉⵏ", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 ⵜⴰⵙⵙⴰⵄⵉⵏ", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "ⴰⵙⵙ", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "ⴰⵙⵙ", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 oⵙⵙⴰⵏ", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "ⴰⵙⵙ", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 oⵙⵙⴰⵏ", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 oⵙⵙⴰⵏ", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "ⴰⵢoⵓⵔ", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "ⴰⵢoⵓⵔ", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "ⴰⵢoⵓⵔ", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 ⵉⵢⵢⵉⵔⵏ", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 ⵉⵢⵢⵉⵔⵏ", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 ⵉⵢⵢⵉⵔⵏ", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "ⴰⵢoⵓⵔ", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 ⵉⵢⵢⵉⵔⵏ", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 ⵉⵢⵢⵉⵔⵏ", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "ⴰⵙⴳⴰⵙ", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "ⴰⵙⴳⴰⵙ", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 ⵉⵙⴳⴰⵙⵏ", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ⴰⵙⴳⴰⵙ", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 ⵉⵙⴳⴰⵙⵏ", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ ⵉⵎⵉⴽ", "prefix"); test.equal(moment(0).from(30000), "ⵢⴰⵏ ⵉⵎⵉⴽ", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "ⵢⴰⵏ ⵉⵎⵉⴽ", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ ⵉⵎⵉⴽ", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ 5 oⵙⵙⴰⵏ", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "ⴰⵙⴷⵅ ⴴ 02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "ⴰⵙⴷⵅ ⴴ 02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "ⴰⵙⴷⵅ ⴴ 03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "ⴰⵙⴽⴰ ⴴ 02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "ⴰⵙⴷⵅ ⴴ 01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "ⴰⵚⴰⵏⵜ ⴴ 02:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [ⴴ] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [ⴴ] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [ⴴ] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('dddd [ⴴ] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [ⴴ] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [ⴴ] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Saturday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2011, 11, 31]).week(), 1, "Dec 31 2011 should be week 1"); test.equal(moment([2012, 0, 6]).week(), 1, "Jan 6 2012 should be week 1"); test.equal(moment([2012, 0, 7]).week(), 2, "Jan 7 2012 should be week 2"); test.equal(moment([2012, 0, 13]).week(), 2, "Jan 13 2012 should be week 2"); test.equal(moment([2012, 0, 14]).week(), 3, "Jan 14 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2006, 11, 30]).week(), 1, "Dec 30 2006 should be week 1"); test.equal(moment([2007, 0, 5]).week(), 1, "Jan 5 2007 should be week 1"); test.equal(moment([2007, 0, 6]).week(), 2, "Jan 6 2007 should be week 2"); test.equal(moment([2007, 0, 12]).week(), 2, "Jan 12 2007 should be week 2"); test.equal(moment([2007, 0, 13]).week(), 3, "Jan 13 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 29]).week(), 1, "Dec 29 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 4]).week(), 1, "Jan 4 2008 should be week 1"); test.equal(moment([2008, 0, 5]).week(), 2, "Jan 5 2008 should be week 2"); test.equal(moment([2008, 0, 11]).week(), 2, "Jan 11 2008 should be week 2"); test.equal(moment([2008, 0, 12]).week(), 3, "Jan 12 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 28]).week(), 1, "Dec 28 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 3]).week(), 1, "Jan 3 2003 should be week 1"); test.equal(moment([2003, 0, 4]).week(), 2, "Jan 4 2003 should be week 2"); test.equal(moment([2003, 0, 10]).week(), 2, "Jan 10 2003 should be week 2"); test.equal(moment([2003, 0, 11]).week(), 3, "Jan 11 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 27]).week(), 1, "Dec 27 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 2]).week(), 1, "Jan 2 2009 should be week 1"); test.equal(moment([2009, 0, 3]).week(), 2, "Jan 3 2009 should be week 2"); test.equal(moment([2009, 0, 9]).week(), 2, "Jan 9 2009 should be week 2"); test.equal(moment([2009, 0, 10]).week(), 3, "Jan 10 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(5); test.equal(moment([2009, 11, 26]).week(), 1, "Dec 26 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 2]).week(), 2, "Jan 2 2010 should be week 2"); test.equal(moment([2010, 0, 8]).week(), 2, "Jan 8 2010 should be week 2"); test.equal(moment([2010, 0, 9]).week(), 3, "Jan 9 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(5); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 7]).week(), 1, "Jan 7 2011 should be week 1"); test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); test.equal(moment([2011, 0, 14]).week(), 2, "Jan 14 2011 should be week 2"); test.equal(moment([2011, 0, 15]).week(), 3, "Jan 15 2011 should be week 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2011, 11, 31]).format('w ww wo'), '1 01 1', "Dec 31 2011 should be week 1"); test.equal(moment([2012, 0, 6]).format('w ww wo'), '1 01 1', "Jan 6 2012 should be week 1"); test.equal(moment([2012, 0, 7]).format('w ww wo'), '2 02 2', "Jan 7 2012 should be week 2"); test.equal(moment([2012, 0, 13]).format('w ww wo'), '2 02 2', "Jan 13 2012 should be week 2"); test.equal(moment([2012, 0, 14]).format('w ww wo'), '3 03 3', "Jan 14 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/hi.js000064400000051662152510437700013702 0ustar00var moment = require("../../moment"); /************************************************** Hindi *************************************************/ exports["lang:hi"] = { setUp : function (cb) { moment.lang('hi'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'जनवरी जन._फ़रवरी फ़र._मार्च मार्च_अप्रैल अप्रै._मई मई_जून जून_जुलाई जुल._अगस्त अग._सितम्बर सित._अक्टूबर अक्टू._नवम्बर नव._दिसम्बर दिस.'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(21); var a = [ ['dddd, Do MMMM YYYY, a h:mm:ss बजे', 'रविवार, १४ फ़रवरी २०१०, दोपहर ३:२५:५० बजे'], ['ddd, a h बजे', 'रवि, दोपहर ३ बजे'], ['M Mo MM MMMM MMM', '२ २ ०२ फ़रवरी फ़र.'], ['YYYY YY', '२०१० १०'], ['D Do DD', '१४ १४ १४'], ['d do dddd ddd dd', '० ० रविवार रवि र'], ['DDD DDDo DDDD', '४५ ४५ ०४५'], ['w wo ww', '८ ८ ०८'], ['h hh', '३ ०३'], ['H HH', '१५ १५'], ['m mm', '२५ २५'], ['s ss', '५० ५०'], ['a A', 'दोपहर दोपहर'], ['L', '१४/०२/२०१०'], ['LL', '१४ फ़रवरी २०१०'], ['LLL', '१४ फ़रवरी २०१०, दोपहर ३:२५ बजे'], ['LLLL', 'रविवार, १४ फ़रवरी २०१०, दोपहर ३:२५ बजे'], ['l', '१४/२/२०१०'], ['ll', '१४ फ़र. २०१०'], ['lll', '१४ फ़र. २०१०, दोपहर ३:२५ बजे'], ['llll', 'रवि, १४ फ़र. २०१०, दोपहर ३:२५ बजे'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '१', '१'); test.equal(moment([2011, 0, 2]).format('DDDo'), '२', '२'); test.equal(moment([2011, 0, 3]).format('DDDo'), '३', '३'); test.equal(moment([2011, 0, 4]).format('DDDo'), '४', '४'); test.equal(moment([2011, 0, 5]).format('DDDo'), '५', '५'); test.equal(moment([2011, 0, 6]).format('DDDo'), '६', '६'); test.equal(moment([2011, 0, 7]).format('DDDo'), '७', '७'); test.equal(moment([2011, 0, 8]).format('DDDo'), '८', '८'); test.equal(moment([2011, 0, 9]).format('DDDo'), '९', '९'); test.equal(moment([2011, 0, 10]).format('DDDo'), '१०', '१०'); test.equal(moment([2011, 0, 11]).format('DDDo'), '११', '११'); test.equal(moment([2011, 0, 12]).format('DDDo'), '१२', '१२'); test.equal(moment([2011, 0, 13]).format('DDDo'), '१३', '१३'); test.equal(moment([2011, 0, 14]).format('DDDo'), '१४', '१४'); test.equal(moment([2011, 0, 15]).format('DDDo'), '१५', '१५'); test.equal(moment([2011, 0, 16]).format('DDDo'), '१६', '१६'); test.equal(moment([2011, 0, 17]).format('DDDo'), '१७', '१७'); test.equal(moment([2011, 0, 18]).format('DDDo'), '१८', '१८'); test.equal(moment([2011, 0, 19]).format('DDDo'), '१९', '१९'); test.equal(moment([2011, 0, 20]).format('DDDo'), '२०', '२०'); test.equal(moment([2011, 0, 21]).format('DDDo'), '२१', '२१'); test.equal(moment([2011, 0, 22]).format('DDDo'), '२२', '२२'); test.equal(moment([2011, 0, 23]).format('DDDo'), '२३', '२३'); test.equal(moment([2011, 0, 24]).format('DDDo'), '२४', '२४'); test.equal(moment([2011, 0, 25]).format('DDDo'), '२५', '२५'); test.equal(moment([2011, 0, 26]).format('DDDo'), '२६', '२६'); test.equal(moment([2011, 0, 27]).format('DDDo'), '२७', '२७'); test.equal(moment([2011, 0, 28]).format('DDDo'), '२८', '२८'); test.equal(moment([2011, 0, 29]).format('DDDo'), '२९', '२९'); test.equal(moment([2011, 0, 30]).format('DDDo'), '३०', '३०'); test.equal(moment([2011, 0, 31]).format('DDDo'), '३१', '३१'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'जनवरी जन._फ़रवरी फ़र._मार्च मार्च_अप्रैल अप्रै._मई मई_जून जून_जुलाई जुल._अगस्त अग._सितम्बर सित._अक्टूबर अक्टू._नवम्बर नव._दिसम्बर दिस.'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'रविवार रवि र_सोमवार सोम सो_मंगलवार मंगल मं_बुधवार बुध बु_गुरूवार गुरू गु_शुक्रवार शुक्र शु_शनिवार शनि श'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "कुछ ही क्षण", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "एक मिनट", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "एक मिनट", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "२ मिनट", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "४४ मिनट", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "एक घंटा", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "एक घंटा", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "२ घंटे", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "५ घंटे", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "२१ घंटे", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "एक दिन", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "एक दिन", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "२ दिन", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "एक दिन", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "५ दिन", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "२५ दिन", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "एक महीने", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "एक महीने", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "एक महीने", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "२ महीने", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "२ महीने", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "३ महीने", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "एक महीने", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "५ महीने", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "११ महीने", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "एक वर्ष", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "एक वर्ष", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "२ वर्ष", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "एक वर्ष", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "५ वर्ष", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "कुछ ही क्षण में", "prefix"); test.equal(moment(0).from(30000), "कुछ ही क्षण पहले", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "कुछ ही क्षण पहले", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "कुछ ही क्षण में", "कुछ ही क्षण में"); test.equal(moment().add({d: 5}).fromNow(), "५ दिन में", "५ दिन में"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "आज रात २:०० बजे", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "आज रात २:२५ बजे", "Now plus 25 min"); test.equal(moment(a).add({ h: 3 }).calendar(), "आज सुबह ५:०० बजे", "Now plus 3 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "कल रात २:०० बजे", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "आज रात १:०० बजे", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "कल रात २:०० बजे", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd[,] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd[,] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd[,] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[पिछले] dddd[,] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[पिछले] dddd[,] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[पिछले] dddd[,] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, "meridiem" : function (test) { test.expect(12); test.equal(moment([2011, 2, 23, 2, 30]).format('a'), "रात", "before dawn"); test.equal(moment([2011, 2, 23, 9, 30]).format('a'), "सुबह", "morning"); test.equal(moment([2011, 2, 23, 14, 30]).format('a'), "दोपहर", "during day"); test.equal(moment([2011, 2, 23, 17, 30]).format('a'), "शाम", "evening"); test.equal(moment([2011, 2, 23, 19, 30]).format('a'), "शाम", "late evening"); test.equal(moment([2011, 2, 23, 21, 20]).format('a'), "रात", "night"); test.equal(moment([2011, 2, 23, 2, 30]).format('A'), "रात", "before dawn"); test.equal(moment([2011, 2, 23, 9, 30]).format('A'), "सुबह", "morning"); test.equal(moment([2011, 2, 23, 14, 30]).format('A'), "दोपहर", " during day"); test.equal(moment([2011, 2, 23, 17, 30]).format('A'), "शाम", "evening"); test.equal(moment([2011, 2, 23, 19, 30]).format('A'), "शाम", "late evening"); test.equal(moment([2011, 2, 23, 21, 20]).format('A'), "रात", "night"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(6); test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(5); test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '१ ०१ १', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).format('w ww wo'), '१ ०१ १', "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '२ ०२ २', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).format('w ww wo'), '२ ०२ २', "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '३ ०३ ३', "Jan 15 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/tzm-la.js000064400000043522152510437700014502 0ustar00// moment.js Morocco Central Atlas Tamaziɣt in Latin (tzm-la) tests // author : Abdel Said : https://github.com/abdelsaid var moment = require("../../moment"); exports["lang:tzm-la"] = { setUp : function (cb) { moment.lang('tzm-la'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'innayr innayr_brˤayrˤ brˤayrˤ_marˤsˤ marˤsˤ_ibrir ibrir_mayyw mayyw_ywnyw ywnyw_ywlywz ywlywz_ɣwšt ɣwšt_šwtanbir šwtanbir_ktˤwbrˤ ktˤwbrˤ_nwwanbir nwwanbir_dwjnbir dwjnbir'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'asamas, brˤayrˤ 14 2010, 3:25:50 pm'], ['ddd, hA', 'asamas, 3PM'], ['M Mo MM MMMM MMM', '2 2 02 brˤayrˤ brˤayrˤ'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14 14'], ['d do dddd ddd dd', '0 0 asamas asamas asamas'], ['DDD DDDo DDDD', '45 45 045'], ['w wo ww', '8 8 08'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45 day of the year'], ['L', '14/02/2010'], ['LL', '14 brˤayrˤ 2010'], ['LLL', '14 brˤayrˤ 2010 15:25'], ['LLLL', 'asamas 14 brˤayrˤ 2010 15:25'], ['l', '14/2/2010'], ['ll', '14 brˤayrˤ 2010'], ['lll', '14 brˤayrˤ 2010 15:25'], ['llll', 'asamas 14 brˤayrˤ 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'innayr innayr_brˤayrˤ brˤayrˤ_marˤsˤ marˤsˤ_ibrir ibrir_mayyw mayyw_ywnyw ywnyw_ywlywz ywlywz_ɣwšt ɣwšt_šwtanbir šwtanbir_ktˤwbrˤ ktˤwbrˤ_nwwanbir nwwanbir_dwjnbir dwjnbir'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'asamas asamas asamas_aynas aynas aynas_asinas asinas asinas_akras akras akras_akwas akwas akwas_asimwas asimwas asimwas_asiḍyas asiḍyas asiḍyas'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "imik", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "minuḍ", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "minuḍ", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minuḍ", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minuḍ", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "saɛa", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "saɛa", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 tassaɛin", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 tassaɛin", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 tassaɛin", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "ass", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "ass", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 ossan", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "ass", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 ossan", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 ossan", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "ayowr", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "ayowr", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "ayowr", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 iyyirn", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 iyyirn", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 iyyirn", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "ayowr", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 iyyirn", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 iyyirn", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "asgas", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "asgas", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 isgasn", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "asgas", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 isgasn", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "dadkh s yan imik", "prefix"); test.equal(moment(0).from(30000), "yan imik", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "yan imik", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "dadkh s yan imik", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "dadkh s yan 5 ossan", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "asdkh g 02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "asdkh g 02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "asdkh g 03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "aska g 02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "asdkh g 01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "assant g 02:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [g] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [g] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [g] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('dddd [g] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [g] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [g] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Saturday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2011, 11, 31]).week(), 1, "Dec 31 2011 should be week 1"); test.equal(moment([2012, 0, 6]).week(), 1, "Jan 6 2012 should be week 1"); test.equal(moment([2012, 0, 7]).week(), 2, "Jan 7 2012 should be week 2"); test.equal(moment([2012, 0, 13]).week(), 2, "Jan 13 2012 should be week 2"); test.equal(moment([2012, 0, 14]).week(), 3, "Jan 14 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2006, 11, 30]).week(), 1, "Dec 30 2006 should be week 1"); test.equal(moment([2007, 0, 5]).week(), 1, "Jan 5 2007 should be week 1"); test.equal(moment([2007, 0, 6]).week(), 2, "Jan 6 2007 should be week 2"); test.equal(moment([2007, 0, 12]).week(), 2, "Jan 12 2007 should be week 2"); test.equal(moment([2007, 0, 13]).week(), 3, "Jan 13 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 29]).week(), 1, "Dec 29 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 4]).week(), 1, "Jan 4 2008 should be week 1"); test.equal(moment([2008, 0, 5]).week(), 2, "Jan 5 2008 should be week 2"); test.equal(moment([2008, 0, 11]).week(), 2, "Jan 11 2008 should be week 2"); test.equal(moment([2008, 0, 12]).week(), 3, "Jan 12 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 28]).week(), 1, "Dec 28 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 3]).week(), 1, "Jan 3 2003 should be week 1"); test.equal(moment([2003, 0, 4]).week(), 2, "Jan 4 2003 should be week 2"); test.equal(moment([2003, 0, 10]).week(), 2, "Jan 10 2003 should be week 2"); test.equal(moment([2003, 0, 11]).week(), 3, "Jan 11 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 27]).week(), 1, "Dec 27 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 2]).week(), 1, "Jan 2 2009 should be week 1"); test.equal(moment([2009, 0, 3]).week(), 2, "Jan 3 2009 should be week 2"); test.equal(moment([2009, 0, 9]).week(), 2, "Jan 9 2009 should be week 2"); test.equal(moment([2009, 0, 10]).week(), 3, "Jan 10 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(5); test.equal(moment([2009, 11, 26]).week(), 1, "Dec 26 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 2]).week(), 2, "Jan 2 2010 should be week 2"); test.equal(moment([2010, 0, 8]).week(), 2, "Jan 8 2010 should be week 2"); test.equal(moment([2010, 0, 9]).week(), 3, "Jan 9 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(5); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 7]).week(), 1, "Jan 7 2011 should be week 1"); test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); test.equal(moment([2011, 0, 14]).week(), 2, "Jan 14 2011 should be week 2"); test.equal(moment([2011, 0, 15]).week(), 3, "Jan 15 2011 should be week 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2011, 11, 31]).format('w ww wo'), '1 01 1', "Dec 31 2011 should be week 1"); test.equal(moment([2012, 0, 6]).format('w ww wo'), '1 01 1', "Jan 6 2012 should be week 1"); test.equal(moment([2012, 0, 7]).format('w ww wo'), '2 02 2', "Jan 7 2012 should be week 2"); test.equal(moment([2012, 0, 13]).format('w ww wo'), '2 02 2', "Jan 13 2012 should be week 2"); test.equal(moment([2012, 0, 14]).format('w ww wo'), '3 03 3', "Jan 14 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/is.js000064400000045456152510437700013721 0ustar00var moment = require("../../moment"); /************************************************** Icelandic *************************************************/ exports["lang:is"] = { setUp : function (cb) { moment.lang('is'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'janúar jan_febrúar feb_mars mar_apríl apr_maí maí_júní jún_júlí júl_ágúst ágú_september sep_október okt_nóvember nóv_desember des'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, Do MMMM YYYY, h:mm:ss a', 'sunnudagur, 14. febrúar 2010, 3:25:50 pm'], ['ddd, hA', 'sun, 3PM'], ['M Mo MM MMMM MMM', '2 2. 02 febrúar feb'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14. 14'], ['d do dddd ddd dd', '0 0. sunnudagur sun Su'], ['DDD DDDo DDDD', '45 45. 045'], ['w wo ww', '6 6. 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45. day of the year'], ['L', '14/02/2010'], ['LL', '14. febrúar 2010'], ['LLL', '14. febrúar 2010 kl. 15:25'], ['LLLL', 'sunnudagur, 14. febrúar 2010 kl. 15:25'], ['l', '14/2/2010'], ['ll', '14. feb 2010'], ['lll', '14. feb 2010 kl. 15:25'], ['llll', 'sun, 14. feb 2010 kl. 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'janúar jan_febrúar feb_mars mar_apríl apr_maí maí_júní jún_júlí júl_ágúst ágú_september sep_október okt_nóvember nóv_desember des'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'sunnudagur sun Su_mánudagur mán Má_þriðjudagur þri Þr_miðvikudagur mið Mi_fimmtudagur fim Fi_föstudagur fös Fö_laugardagur lau La'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(34); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "nokkrar sekúndur", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "mínúta", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "mínúta", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 mínútur", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 mínútur", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 21}), true), "21 mínúta", "21 minutes = 21 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "klukkustund", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "klukkustund", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 klukkustundir", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 klukkustundir", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 klukkustund", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "dagur", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "dagur", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dagar", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "dagur", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dagar", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dagar", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 11}), true), "11 dagar", "11 days = 11 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 21}), true), "21 dagur", "21 days = 21 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "mánuður", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "mánuður", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "mánuður", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 mánuðir", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 mánuðir", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mánuðir", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "mánuður", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mánuðir", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 mánuðir", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "ár", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "ár", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 ár", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ár", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 ár", "5 years = 5 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 21}), true), "21 ár", "21 years = 21 years"); test.done(); }, "suffix" : function (test) { test.expect(3); test.equal(moment(30000).from(0), "eftir nokkrar sekúndur", "prefix"); test.equal(moment(0).from(30000), "fyrir nokkrum sekúndum síðan", "suffix"); test.equal(moment().subtract({m: 1}).fromNow(), "fyrir mínútu síðan", "a minute ago"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "fyrir nokkrum sekúndum síðan", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(3); test.equal(moment().add({s: 30}).fromNow(), "eftir nokkrar sekúndur", "in a few seconds"); test.equal(moment().add({m: 1}).fromNow(), "eftir mínútu", "in a minute"); test.equal(moment().add({d: 5}).fromNow(), "eftir 5 daga", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "í dag kl. 2:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "í dag kl. 2:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "í dag kl. 3:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "á morgun kl. 2:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "í dag kl. 1:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "í gær kl. 2:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [kl.] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [kl.] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [kl.] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[síðasta] dddd [kl.] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[síðasta] dddd [kl.] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[síðasta] dddd [kl.] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4th is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/test/lang/pt-br.js000064400000043737152510437700014332 0ustar00var moment = require("../../moment"); /************************************************** Portuguese - Brazilian *************************************************/ exports["lang:pt-br"] = { setUp : function (cb) { moment.lang('pt-br'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'Janeiro Jan_Fevereiro Fev_Março Mar_Abril Abr_Maio Mai_Junho Jun_Julho Jul_Agosto Ago_Setembro Set_Outubro Out_Novembro Nov_Dezembro Dez'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Domingo, Fevereiro 14º 2010, 3:25:50 pm'], ['ddd, hA', 'Dom, 3PM'], ['M Mo MM MMMM MMM', '2 2º 02 Fevereiro Fev'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14º 14'], ['d do dddd ddd', '0 0º Domingo Dom'], ['DDD DDDo DDDD', '45 45º 045'], ['w wo ww', '8 8º 08'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45º day of the year'], ['L', '14/02/2010'], ['LL', '14 de Fevereiro de 2010'], ['LLL', '14 de Fevereiro de 2010 15:25'], ['LLLL', 'Domingo, 14 de Fevereiro de 2010 15:25'], ['l', '14/2/2010'], ['ll', '14 de Fev de 2010'], ['lll', '14 de Fev de 2010 15:25'], ['llll', 'Dom, 14 de Fev de 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'Janeiro Jan_Fevereiro Fev_Março Mar_Abril Abr_Maio Mai_Junho Jun_Julho Jul_Agosto Ago_Setembro Set_Outubro Out_Novembro Nov_Dezembro Dez'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'Domingo Dom_Segunda-feira Seg_Terça-feira Ter_Quarta-feira Qua_Quinta-feira Qui_Sexta-feira Sex_Sábado Sáb'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "segundos", "44 seconds = seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "um minuto", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "um minuto", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutos", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutos", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "uma hora", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "uma hora", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 horas", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 horas", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 horas", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "um dia", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "um dia", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dias", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "um dia", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dias", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dias", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "um mês", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "um mês", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "um mês", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 meses", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 meses", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 meses", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "um mês", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 meses", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 meses", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "um ano", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "um ano", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 anos", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "um ano", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 anos", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "em segundos", "prefix"); test.equal(moment(0).from(30000), "segundos atrás", "suffix"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "em segundos", "in seconds"); test.equal(moment().add({d: 5}).fromNow(), "em 5 dias", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Hoje às 02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Hoje às 02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Hoje às 03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Amanhã às 02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Hoje às 01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Ontem às 02:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [às] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [às] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [às] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Sunday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(6); test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(5); test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); test.done(); }, "weeks year starting sunday format" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1º', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1º', "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2º', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2º', "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3º', "Jan 15 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/nb.js000064400000044076152510437700013702 0ustar00var moment = require("../../moment"); /************************************************** Norwegian bokmål *************************************************/ exports["lang:nb"] = { setUp : function (cb) { moment.lang('nb'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'januar jan_februar feb_mars mars_april april_mai mai_juni juni_juli juli_august aug_september sep_oktober okt_november nov_desember des'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'søndag, februar 14. 2010, 3:25:50 pm'], ['ddd, hA', 'sø., 3PM'], ['M Mo MM MMMM MMM', '2 2. 02 februar feb.'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14. 14'], ['d do dddd ddd dd', '0 0. søndag sø. sø'], ['DDD DDDo DDDD', '45 45. 045'], ['w wo ww', '6 6. 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[den] DDDo [dagen i året]', 'den 45. dagen i året'], ['L', '14.02.2010'], ['LL', '14. februar 2010'], ['LLL', '14. februar 2010 kl. 15.25'], ['LLLL', 'søndag 14. februar 2010 kl. 15.25'], ['l', '14.2.2010'], ['ll', '14. feb. 2010'], ['lll', '14. feb. 2010 kl. 15.25'], ['llll', 'sø. 14. feb. 2010 kl. 15.25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'januar jan._februar feb._mars mars_april april_mai mai_juni juni_juli juli_august aug._september sep._oktober okt._november nov._desember des.'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'søndag sø. sø_mandag ma. ma_tirsdag ti. ti_onsdag on. on_torsdag to. to_fredag fr. fr_lørdag lø. lø'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "noen sekunder", "44 sekunder = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "ett minutt", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "ett minutt", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutter", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutter", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "en time", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "en time", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 timer", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 timer", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 timer", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "en dag", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "en dag", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dager", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "en dag", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dager", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dager", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "en måned", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "en måned", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "en måned", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 måneder", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 måneder", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 måneder", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "en måned", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 måneder", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 måneder", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "ett år", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "ett år", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 år", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ett år", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 år", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "om noen sekunder", "prefix"); test.equal(moment(0).from(30000), "for noen sekunder siden", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "for noen sekunder siden", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "om noen sekunder", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "om 5 dager", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "i dag kl. 2.00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "i dag kl. 2.25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "i dag kl. 3.00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "i morgen kl. 2.00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "i dag kl. 1.00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "i går kl. 2.00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [kl.] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [kl.] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [kl.] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[forrige] dddd [kl.] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[forrige] dddd [kl.] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[forrige] dddd [kl.] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4th is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/test/lang/en.js000064400000044112152510437700013674 0ustar00var moment = require("../../moment"); /************************************************** English *************************************************/ exports["lang:en"] = { setUp : function (cb) { moment.lang('en'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var i, tests = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split("_"); function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sunday, February 14th 2010, 3:25:50 pm'], ['ddd, hA', 'Sun, 3PM'], ['M Mo MM MMMM MMM', '2 2nd 02 February Feb'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14th 14'], ['d do dddd ddd dd', '0 0th Sunday Sun Su'], ['DDD DDDo DDDD', '45 45th 045'], ['w wo ww', '8 8th 08'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45th day of the year'], ['L', '02/14/2010'], ['LL', 'February 14 2010'], ['LLL', 'February 14 2010 3:25 PM'], ['LLLL', 'Sunday, February 14 2010 3:25 PM'], ['l', '2/14/2010'], ['ll', 'Feb 14 2010'], ['lll', 'Feb 14 2010 3:25 PM'], ['llll', 'Sun, Feb 14 2010 3:25 PM'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st'); test.done(); }, "format month" : function (test) { test.expect(12); var i, expected = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split("_"); for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var i, expected = 'Sunday Sun Su_Monday Mon Mo_Tuesday Tue Tu_Wednesday Wed We_Thursday Thu Th_Friday Fri Fr_Saturday Sat Sa'.split("_"); for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "a few seconds", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "a minute", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "a minute", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutes", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutes", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "an hour", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "an hour", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 hours", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 hours", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 hours", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "a day", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "a day", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 days", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "a day", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 days", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 days", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "a month", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "a month", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "a month", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 months", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 months", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 months", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "a month", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 months", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 months", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "a year", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "a year", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 years", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "a year", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 years", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "in a few seconds", "prefix"); test.equal(moment(0).from(30000), "a few seconds ago", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "a few seconds ago", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "in a few seconds", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "in 5 days", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Today at 2:00 AM", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Today at 2:25 AM", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Today at 3:00 AM", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Tomorrow at 2:00 AM", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Today at 1:00 AM", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Yesterday at 2:00 AM", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [at] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [at] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [at] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[Last] dddd [at] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[Last] dddd [at] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[Last] dddd [at] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Sunday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(6); test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(5); test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); test.done(); }, "weeks year starting sunday format" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1st', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1st', "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2nd', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2nd', "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3rd', "Jan 15 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/nn.js000064400000044056152510437700013714 0ustar00var moment = require("../../moment"); /************************************************** Norwegian nynorsk *************************************************/ exports["lang:nn"] = { setUp : function (cb) { moment.lang('nn'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'januar jan_februar feb_mars mar_april apr_mai mai_juni jun_juli jul_august aug_september sep_oktober okt_november nov_desember des'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'sundag, februar 14. 2010, 3:25:50 pm'], ['ddd, hA', 'sun, 3PM'], ['M Mo MM MMMM MMM', '2 2. 02 februar feb'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14. 14'], ['d do dddd ddd dd', '0 0. sundag sun su'], ['DDD DDDo DDDD', '45 45. 045'], ['w wo ww', '6 6. 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45. day of the year'], ['L', '14.02.2010'], ['LL', '14 februar 2010'], ['LLL', '14 februar 2010 15:25'], ['LLLL', 'sundag 14 februar 2010 15:25'], ['l', '14.2.2010'], ['ll', '14 feb 2010'], ['lll', '14 feb 2010 15:25'], ['llll', 'sun 14 feb 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'januar jan_februar feb_mars mar_april apr_mai mai_juni jun_juli jul_august aug_september sep_oktober okt_november nov_desember des'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'sundag sun su_måndag mån må_tysdag tys ty_onsdag ons on_torsdag tor to_fredag fre fr_laurdag lau lø'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "noen sekund", "44 sekunder = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "ett minutt", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "ett minutt", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutt", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutt", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "en time", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "en time", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 timar", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 timar", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 timar", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "en dag", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "en dag", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dagar", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "en dag", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dagar", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dagar", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "en månad", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "en månad", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "en månad", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 månader", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 månader", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 månader", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "en månad", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 månader", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 månader", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "ett år", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "ett år", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 år", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ett år", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 år", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "om noen sekund", "prefix"); test.equal(moment(0).from(30000), "for noen sekund siden", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "for noen sekund siden", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "om noen sekund", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "om 5 dagar", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "I dag klokka 02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "I dag klokka 02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "I dag klokka 03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "I morgon klokka 02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "I dag klokka 01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "I går klokka 02:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [klokka] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [klokka] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [klokka] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[Føregående] dddd [klokka] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[Føregående] dddd [klokka] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[Føregående] dddd [klokka] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4th is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/test/lang/ro.js000064400000043474152510437700013724 0ustar00var moment = require("../../moment"); /************************************************** Romanian *************************************************/ exports["lang:ro"] = { setUp : function (cb) { moment.lang('ro'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'Ianuarie Ian_Februarie Feb_Martie Mar_Aprilie Apr_Mai Mai_Iunie Iun_Iulie Iul_August Aug_Septembrie Sep_Octombrie Oct_Noiembrie Noi_Decembrie Dec'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss A', 'Duminică, Februarie 14 2010, 3:25:50 PM'], ['ddd, hA', 'Dum, 3PM'], ['M Mo MM MMMM MMM', '2 2 02 Februarie Feb'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14 14'], ['d do dddd ddd dd', '0 0 Duminică Dum Du'], ['DDD DDDo DDDD', '45 45 045'], ['w wo ww', '7 7 07'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[a] DDDo[a zi a anului]', 'a 45a zi a anului'], ['L', '14/02/2010'], ['LL', '14 Februarie 2010'], ['LLL', '14 Februarie 2010 15:25'], ['LLLL', 'Duminică, 14 Februarie 2010 15:25'], ['l', '14/2/2010'], ['ll', '14 Feb 2010'], ['lll', '14 Feb 2010 15:25'], ['llll', 'Dum, 14 Feb 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'Ianuarie Ian_Februarie Feb_Martie Mar_Aprilie Apr_Mai Mai_Iunie Iun_Iulie Iul_August Aug_Septembrie Sep_Octombrie Oct_Noiembrie Noi_Decembrie Dec'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'Duminică Dum Du_Luni Lun Lu_Marţi Mar Ma_Miercuri Mie Mi_Joi Joi Jo_Vineri Vin Vi_Sâmbătă Sâm Sâ'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "câteva secunde", "44 secunde = câteva secunde"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "un minut", "45 secunde = un minut"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "un minut", "89 secunde = un minut"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minute", "90 secunde = 2 minute"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minute", "44 minute = 44 minute"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "o oră", "45 minute = o oră"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "o oră", "89 minute = o oră"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 ore", "90 minute = 2 ore"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 ore", "5 ore = 5 ore"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 ore", "21 ore = 21 ore"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "o zi", "22 ore = o zi"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "o zi", "35 ore = o zi"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 zile", "36 ore = 2 zile"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "o zi", "1 zi = o zi"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 zile", "5 zile = 5 zile"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 zile", "25 zile = 25 zile"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "o lună", "26 zile = o lună"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "o lună", "30 zile = o lună"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "o lună", "45 zile = o lună"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 luni", "46 zile = 2 luni"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 luni", "75 zile = 2 luni"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 luni", "76 zile = 3 luni"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "o lună", "1 lună = o lună"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 luni", "5 luni = 5 luni"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 luni", "344 zile = 11 luni"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "un an", "345 zile = un an"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "un an", "547 zile = un an"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 ani", "548 zile = 2 ani"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "un an", "1 an = un an"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 ani", "5 ani = 5 ani"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "peste câteva secunde", "prefix"); test.equal(moment(0).from(30000), "câteva secunde în urmă", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "câteva secunde în urmă", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "peste câteva secunde", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "peste 5 zile", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "azi la 2:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "azi la 2:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "azi la 3:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "mâine la 2:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "azi la 1:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "ieri la 2:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [la] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [la] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [la] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[fosta] dddd [la] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[fosta] dddd [la] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[fosta] dddd [la] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1', "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2', "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3', "Jan 9 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/cs.js000064400000054462152510437700013710 0ustar00var moment = require("../../moment"); /************************************************** Czech *************************************************/ exports["lang:cs"] = { setUp : function (cb) { moment.lang('cs'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'leden led_únor úno_březen bře_duben dub_květen kvě_červen čvn_červenec čvc_srpen srp_září zář_říjen říj_listopad lis_prosinec pro'.split("_"), i; function equalTest(input, mmm, monthIndex) { test.equal(moment(input, mmm).month(), monthIndex, input + ' should be month ' + (monthIndex + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss', 'neděle, únor 14. 2010, 3:25:50'], ['ddd, h', 'ne, 3'], ['M Mo MM MMMM MMM', '2 2. 02 únor úno'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14. 14'], ['d do dddd ddd dd', '0 0. neděle ne ne'], ['DDD DDDo DDDD', '45 45. 045'], ['w wo ww', '6 6. 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['DDDo [den v roce]', '45. den v roce'], ['L', '14.02.2010'], ['LL', '14. únor 2010'], ['LLL', '14. únor 2010 15:25'], ['LLLL', 'neděle 14. únor 2010 15:25'], ['l', '14.2.2010'], ['ll', '14. úno 2010'], ['lll', '14. úno 2010 15:25'], ['llll', 'ne 14. úno 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'leden led_únor úno_březen bře_duben dub_květen kvě_červen čvn_červenec čvc_srpen srp_září zář_říjen říj_listopad lis_prosinec pro'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'neděle ne ne_pondělí po po_úterý út út_středa st st_čtvrtek čt čt_pátek pá pá_sobota so so'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "pár vteřin", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "minuta", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "minuta", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minuty", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minut", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "hodina", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "hodina", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 hodiny", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 hodin", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 hodin", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "den", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "den", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dny", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "den", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dní", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dní", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "měsíc", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "měsíc", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "měsíc", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 měsíce", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 měsíce", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 měsíce", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "měsíc", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 měsíců", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 měsíců", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "rok", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "rok", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 roky", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "rok", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 let", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "za pár vteřin", "prefix"); test.equal(moment(0).from(30000), "před pár vteřinami", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "před pár vteřinami", "now from now should display as in the past"); test.done(); }, "fromNow (future)" : function (test) { test.expect(16); test.equal(moment().add({s: 30}).fromNow(), "za pár vteřin", "in a few seconds"); test.equal(moment().add({m: 1}).fromNow(), "za minutu", "in a minute"); test.equal(moment().add({m: 3}).fromNow(), "za 3 minuty", "in 3 minutes"); test.equal(moment().add({m: 10}).fromNow(), "za 10 minut", "in 10 minutes"); test.equal(moment().add({h: 1}).fromNow(), "za hodinu", "in an hour"); test.equal(moment().add({h: 3}).fromNow(), "za 3 hodiny", "in 3 hours"); test.equal(moment().add({h: 10}).fromNow(), "za 10 hodin", "in 10 hours"); test.equal(moment().add({d: 1}).fromNow(), "za den", "in a day"); test.equal(moment().add({d: 3}).fromNow(), "za 3 dny", "in 3 days"); test.equal(moment().add({d: 10}).fromNow(), "za 10 dní", "in 10 days"); test.equal(moment().add({M: 1}).fromNow(), "za měsíc", "in a month"); test.equal(moment().add({M: 3}).fromNow(), "za 3 měsíce", "in 3 months"); test.equal(moment().add({M: 10}).fromNow(), "za 10 měsíců", "in 10 months"); test.equal(moment().add({y: 1}).fromNow(), "za rok", "in a year"); test.equal(moment().add({y: 3}).fromNow(), "za 3 roky", "in 3 years"); test.equal(moment().add({y: 10}).fromNow(), "za 10 let", "in 10 years"); test.done(); }, "fromNow (past)" : function (test) { test.expect(16); test.equal(moment().subtract({s: 30}).fromNow(), "před pár vteřinami", "a few seconds ago"); test.equal(moment().subtract({m: 1}).fromNow(), "před minutou", "a minute ago"); test.equal(moment().subtract({m: 3}).fromNow(), "před 3 minutami", "3 minutes ago"); test.equal(moment().subtract({m: 10}).fromNow(), "před 10 minutami", "10 minutes ago"); test.equal(moment().subtract({h: 1}).fromNow(), "před hodinou", "an hour ago"); test.equal(moment().subtract({h: 3}).fromNow(), "před 3 hodinami", "3 hours ago"); test.equal(moment().subtract({h: 10}).fromNow(), "před 10 hodinami", "10 hours ago"); test.equal(moment().subtract({d: 1}).fromNow(), "před dnem", "a day ago"); test.equal(moment().subtract({d: 3}).fromNow(), "před 3 dny", "3 days ago"); test.equal(moment().subtract({d: 10}).fromNow(), "před 10 dny", "10 days ago"); test.equal(moment().subtract({M: 1}).fromNow(), "před měsícem", "a month ago"); test.equal(moment().subtract({M: 3}).fromNow(), "před 3 měsíci", "3 months ago"); test.equal(moment().subtract({M: 10}).fromNow(), "před 10 měsíci", "10 months ago"); test.equal(moment().subtract({y: 1}).fromNow(), "před rokem", "a year ago"); test.equal(moment().subtract({y: 3}).fromNow(), "před 3 lety", "3 years ago"); test.equal(moment().subtract({y: 10}).fromNow(), "před 10 lety", "10 years ago"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "dnes v 2:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "dnes v 2:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "dnes v 3:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "zítra v 2:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "dnes v 1:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "včera v 2:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m, nextDay; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); nextDay = ''; switch (m.day()) { case 0: nextDay = 'v neděli'; break; case 1: nextDay = 'v pondělí'; break; case 2: nextDay = 'v úterý'; break; case 3: nextDay = 've středu'; break; case 4: nextDay = 've čtvrtek'; break; case 5: nextDay = 'v pátek'; break; case 6: nextDay = 'v sobotu'; break; } test.equal(m.calendar(), m.format('[' + nextDay + '] [v] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[' + nextDay + '] [v] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[' + nextDay + '] [v] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m, lastDay; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); lastDay = ''; switch (m.day()) { case 0: lastDay = 'minulou neděli'; break; case 1: lastDay = 'minulé pondělí'; break; case 2: lastDay = 'minulé úterý'; break; case 3: lastDay = 'minulou středu'; break; case 4: lastDay = 'minulý čtvrtek'; break; case 5: lastDay = 'minulý pátek'; break; case 6: lastDay = 'minulou sobotu'; break; } test.equal(m.calendar(), m.format('[' + lastDay + '] [v] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[' + lastDay + '] [v] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[' + lastDay + '] [v] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, "humanize duration" : function (test) { test.expect(4); test.equal(moment.duration(1, "minutes").humanize(), "minuta", "a minute (future)"); test.equal(moment.duration(1, "minutes").humanize(true), "za minutu", "in a minute"); test.equal(moment.duration(-1, "minutes").humanize(), "minuta", "a minute (past)"); test.equal(moment.duration(-1, "minutes").humanize(true), "před minutou", "a minute ago"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4th is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/test/lang/et.js000064400000043661152510437700013712 0ustar00var moment = require("../../moment"); /************************************************** Estonian **************************************************/ exports["lang:et"] = { setUp : function (cb) { moment.lang('et'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'jaanuar jaan_veebruar veebr_märts märts_aprill apr_mai mai_juuni juuni_juuli juuli_august aug_september sept_oktoober okt_november nov_detsember dets'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' peaks olema kuu ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, Do MMMM YYYY, H:mm:ss', 'pühapäev, 14. veebruar 2010, 15:25:50'], ['ddd, h', 'P, 3'], ['M Mo MM MMMM MMM', '2 2. 02 veebruar veebr'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14. 14'], ['d do dddd ddd dd', '0 0. pühapäev P P'], ['DDD DDDo DDDD', '45 45. 045'], ['w wo ww', '6 6. 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[aasta] DDDo [päev]', 'aasta 45. päev'], ['L', '14.02.2010'], ['LL', '14. veebruar 2010'], ['LLL', '14. veebruar 2010 15:25'], ['LLLL', 'pühapäev, 14. veebruar 2010 15:25'], ['l', '14.2.2010'], ['ll', '14. veebr 2010'], ['lll', '14. veebr 2010 15:25'], ['llll', 'P, 14. veebr 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'jaanuar jaan_veebruar veebr_märts märts_aprill apr_mai mai_juuni juuni_juuli juuli_august aug_september sept_oktoober okt_november nov_detsember dets'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'pühapäev P P_esmaspäev E E_teisipäev T T_kolmapäev K K_neljapäev N N_reede R R_laupäev L L'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "paari sekundi", "44 seconds = paari sekundi"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "minut", "45 seconds = minut"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "minut", "89 seconds = minut"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutit", "90 seconds = 2 minutit"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutit", "44 minutes = 44 minutit"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "tund", "45 minutes = tund"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "tund", "89 minutes = tund"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 tundi", "90 minutes = 2 tundi"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 tundi", "5 hours = 5 tundi"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 tundi", "21 hours = 21 tundi"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "päev", "22 hours = päev"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "päev", "35 hours = päev"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 päeva", "36 hours = 2 päeva"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "päev", "1 day = päev"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 päeva", "5 days = 5 päeva"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 päeva", "25 days = 25 päeva"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "kuu", "26 days = kuu"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "kuu", "30 days = kuu"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "kuu", "45 days = kuu"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 kuud", "46 days = 2 kuud"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 kuud", "75 days = 2 kuud"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 kuud", "76 days = 3 kuud"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "kuu", "1 month = kuu"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 kuud", "5 months = 5 kuud"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 kuud", "344 days = 11 kuud"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "aasta", "345 days = aasta"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "aasta", "547 days = aasta"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 aastat", "548 days = 2 aastat"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "aasta", "1 year = aasta"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 aastat", "5 years = 5 aastat"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "paari sekundi pärast", "prefix"); test.equal(moment(0).from(30000), "paar sekundit tagasi", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "paar sekundit tagasi", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "paari sekundi pärast", "paari sekundi pärast"); test.equal(moment().add({d: 5}).fromNow(), "5 päeva pärast", "5 päeva pärast"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Täna, 2:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Täna, 2:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Täna, 3:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Homme, 2:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Täna, 1:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Eile, 2:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('[Järgmine] dddd LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[Järgmine] dddd LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[Järgmine] dddd LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[Eelmine] dddd LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[Eelmine] dddd LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[Eelmine] dddd LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 nädal tagasi"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "1 nädala pärast"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 nädalat tagasi"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "2 nädala pärast"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4th is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/test/lang/fa.js000064400000044361152510437700013666 0ustar00// moment.js Persian (fa) tests // author: Ebrahim Byagowi : https://github.com/ebraminio var moment = require("../../moment"); exports["lang:fa"] = { setUp : function (cb) { moment.lang('fa'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(24); var tests = 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1) + ' instead is month ' + moment(input, mmm).month()); } for (i = 0; i < 12; i++) { equalTest(tests[i], 'MMM', i); equalTest(tests[i], 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'یک\u200cشنبه، فوریه ۱۴م ۲۰۱۰، ۳:۲۵:۵۰ بعد از ظهر'], ['ddd, hA', 'یک\u200cشنبه، ۳بعد از ظهر'], ['M Mo MM MMMM MMM', '۲ ۲م ۰۲ فوریه فوریه'], ['YYYY YY', '۲۰۱۰ ۱۰'], ['D Do DD', '۱۴ ۱۴م ۱۴'], ['d do dddd ddd dd', '۰ ۰م یک\u200cشنبه یک\u200cشنبه ی'], ['DDD DDDo DDDD', '۴۵ ۴۵م ۰۴۵'], ['w wo ww', '۸ ۸م ۰۸'], ['h hh', '۳ ۰۳'], ['H HH', '۱۵ ۱۵'], ['m mm', '۲۵ ۲۵'], ['s ss', '۵۰ ۵۰'], ['a A', 'بعد از ظهر بعد از ظهر'], ['DDDo [روز سال]', '۴۵م روز سال'], ['L', '۱۴/۰۲/۲۰۱۰'], ['LL', '۱۴ فوریه ۲۰۱۰'], ['LLL', '۱۴ فوریه ۲۰۱۰ ۱۵:۲۵'], ['LLLL', 'یک\u200cشنبه، ۱۴ فوریه ۲۰۱۰ ۱۵:۲۵'], ['l', '۱۴/۲/۲۰۱۰'], ['ll', '۱۴ فوریه ۲۰۱۰'], ['lll', '۱۴ فوریه ۲۰۱۰ ۱۵:۲۵'], ['llll', 'یک\u200cشنبه، ۱۴ فوریه ۲۰۱۰ ۱۵:۲۵'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '۱م', '1'); test.equal(moment([2011, 0, 2]).format('DDDo'), '۲م', '2'); test.equal(moment([2011, 0, 3]).format('DDDo'), '۳م', '3'); test.equal(moment([2011, 0, 4]).format('DDDo'), '۴م', '4'); test.equal(moment([2011, 0, 5]).format('DDDo'), '۵م', '5'); test.equal(moment([2011, 0, 6]).format('DDDo'), '۶م', '6'); test.equal(moment([2011, 0, 7]).format('DDDo'), '۷م', '7'); test.equal(moment([2011, 0, 8]).format('DDDo'), '۸م', '8'); test.equal(moment([2011, 0, 9]).format('DDDo'), '۹م', '9'); test.equal(moment([2011, 0, 10]).format('DDDo'), '۱۰م', '10'); test.equal(moment([2011, 0, 11]).format('DDDo'), '۱۱م', '11'); test.equal(moment([2011, 0, 12]).format('DDDo'), '۱۲م', '12'); test.equal(moment([2011, 0, 13]).format('DDDo'), '۱۳م', '13'); test.equal(moment([2011, 0, 14]).format('DDDo'), '۱۴م', '14'); test.equal(moment([2011, 0, 15]).format('DDDo'), '۱۵م', '15'); test.equal(moment([2011, 0, 16]).format('DDDo'), '۱۶م', '16'); test.equal(moment([2011, 0, 17]).format('DDDo'), '۱۷م', '17'); test.equal(moment([2011, 0, 18]).format('DDDo'), '۱۸م', '18'); test.equal(moment([2011, 0, 19]).format('DDDo'), '۱۹م', '19'); test.equal(moment([2011, 0, 20]).format('DDDo'), '۲۰م', '20'); test.equal(moment([2011, 0, 21]).format('DDDo'), '۲۱م', '21'); test.equal(moment([2011, 0, 22]).format('DDDo'), '۲۲م', '22'); test.equal(moment([2011, 0, 23]).format('DDDo'), '۲۳م', '23'); test.equal(moment([2011, 0, 24]).format('DDDo'), '۲۴م', '24'); test.equal(moment([2011, 0, 25]).format('DDDo'), '۲۵م', '25'); test.equal(moment([2011, 0, 26]).format('DDDo'), '۲۶م', '26'); test.equal(moment([2011, 0, 27]).format('DDDo'), '۲۷م', '27'); test.equal(moment([2011, 0, 28]).format('DDDo'), '۲۸م', '28'); test.equal(moment([2011, 0, 29]).format('DDDo'), '۲۹م', '29'); test.equal(moment([2011, 0, 30]).format('DDDo'), '۳۰م', '30'); test.equal(moment([2011, 0, 31]).format('DDDo'), '۳۱م', '31'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'ژانویه ژانویه_فوریه فوریه_مارس مارس_آوریل آوریل_مه مه_ژوئن ژوئن_ژوئیه ژوئیه_اوت اوت_سپتامبر سپتامبر_اکتبر اکتبر_نوامبر نوامبر_دسامبر دسامبر'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'یک\u200cشنبه یک\u200cشنبه ی_دوشنبه دوشنبه د_سه\u200cشنبه سه\u200cشنبه س_چهارشنبه چهارشنبه چ_پنج\u200cشنبه پنج\u200cشنبه پ_جمعه جمعه ج_شنبه شنبه ش'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "چندین ثانیه", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "یک دقیقه", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "یک دقیقه", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "۲ دقیقه", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "۴۴ دقیقه", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "یک ساعت", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "یک ساعت", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "۲ ساعت", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "۵ ساعت", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "۲۱ ساعت", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "یک روز", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "یک روز", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "۲ روز", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "یک روز", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "۵ روز", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "۲۵ روز", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "یک ماه", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "یک ماه", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "یک ماه", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "۲ ماه", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "۲ ماه", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "۳ ماه", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "یک ماه", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "۵ ماه", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "۱۱ ماه", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "یک سال", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "یک سال", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "۲ سال", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "یک سال", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "۵ سال", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "در چندین ثانیه", "prefix"); test.equal(moment(0).from(30000), "چندین ثانیه پیش", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "چندین ثانیه پیش", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "در چندین ثانیه", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "در ۵ روز", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "امروز ساعت ۰۲:۰۰", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "امروز ساعت ۰۲:۲۵", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "امروز ساعت ۰۳:۰۰", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "فردا ساعت ۰۲:۰۰", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "امروز ساعت ۰۱:۰۰", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "دیروز ساعت ۰۲:۰۰", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [ساعت] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [ساعت] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [ساعت] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('dddd [پیش ساعت] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [پیش ساعت] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [پیش ساعت] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Saturday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2011, 11, 31]).week(), 1, "Dec 31 2011 should be week 1"); test.equal(moment([2012, 0, 6]).week(), 1, "Jan 6 2012 should be week 1"); test.equal(moment([2012, 0, 7]).week(), 2, "Jan 7 2012 should be week 2"); test.equal(moment([2012, 0, 13]).week(), 2, "Jan 13 2012 should be week 2"); test.equal(moment([2012, 0, 14]).week(), 3, "Jan 14 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2006, 11, 30]).week(), 1, "Dec 30 2006 should be week 1"); test.equal(moment([2007, 0, 5]).week(), 1, "Jan 5 2007 should be week 1"); test.equal(moment([2007, 0, 6]).week(), 2, "Jan 6 2007 should be week 2"); test.equal(moment([2007, 0, 12]).week(), 2, "Jan 12 2007 should be week 2"); test.equal(moment([2007, 0, 13]).week(), 3, "Jan 13 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 29]).week(), 1, "Dec 29 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 4]).week(), 1, "Jan 4 2008 should be week 1"); test.equal(moment([2008, 0, 5]).week(), 2, "Jan 5 2008 should be week 2"); test.equal(moment([2008, 0, 11]).week(), 2, "Jan 11 2008 should be week 2"); test.equal(moment([2008, 0, 12]).week(), 3, "Jan 12 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 28]).week(), 1, "Dec 28 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 3]).week(), 1, "Jan 3 2003 should be week 1"); test.equal(moment([2003, 0, 4]).week(), 2, "Jan 4 2003 should be week 2"); test.equal(moment([2003, 0, 10]).week(), 2, "Jan 10 2003 should be week 2"); test.equal(moment([2003, 0, 11]).week(), 3, "Jan 11 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 27]).week(), 1, "Dec 27 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 2]).week(), 1, "Jan 2 2009 should be week 1"); test.equal(moment([2009, 0, 3]).week(), 2, "Jan 3 2009 should be week 2"); test.equal(moment([2009, 0, 9]).week(), 2, "Jan 9 2009 should be week 2"); test.equal(moment([2009, 0, 10]).week(), 3, "Jan 10 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(5); test.equal(moment([2009, 11, 26]).week(), 1, "Dec 26 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 2]).week(), 2, "Jan 2 2010 should be week 2"); test.equal(moment([2010, 0, 8]).week(), 2, "Jan 8 2010 should be week 2"); test.equal(moment([2010, 0, 9]).week(), 3, "Jan 9 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(5); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 7]).week(), 1, "Jan 7 2011 should be week 1"); test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); test.equal(moment([2011, 0, 14]).week(), 2, "Jan 14 2011 should be week 2"); test.equal(moment([2011, 0, 15]).week(), 3, "Jan 15 2011 should be week 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2011, 11, 31]).format('w ww wo'), '۱ ۰۱ ۱م', "Dec 31 2011 should be week 1"); test.equal(moment([2012, 0, 6]).format('w ww wo'), '۱ ۰۱ ۱م', "Jan 6 2012 should be week 1"); test.equal(moment([2012, 0, 7]).format('w ww wo'), '۲ ۰۲ ۲م', "Jan 7 2012 should be week 2"); test.equal(moment([2012, 0, 13]).format('w ww wo'), '۲ ۰۲ ۲م', "Jan 13 2012 should be week 2"); test.equal(moment([2012, 0, 14]).format('w ww wo'), '۳ ۰۳ ۳م', "Jan 14 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/da.js000064400000036263152510437700013666 0ustar00var moment = require("../../moment"); /************************************************** Danish *************************************************/ exports["lang:da"] = { setUp : function (cb) { moment.lang('da'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'januar jan_februar feb_marts mar_april apr_maj maj_juni jun_juli jul_august aug_september sep_oktober okt_november nov_december dec'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd [den] Do MMMM YYYY, h:mm:ss a', 'søndag den 14. februar 2010, 3:25:50 pm'], ['ddd hA', 'søn 3PM'], ['M Mo MM MMMM MMM', '2 2. 02 februar feb'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14. 14'], ['d do dddd ddd dd', '0 0. søndag søn sø'], ['DDD DDDo DDDD', '45 45. 045'], ['w wo ww', '6 6. 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[den] DDDo [dag på året]', 'den 45. dag på året'], ['L', '14/02/2010'], ['LL', '14 februar 2010'], ['LLL', '14 februar 2010 15:25'], ['LLLL', 'søndag 14. februar, 2010 15:25'], ['l', '14/2/2010'], ['ll', '14 feb 2010'], ['lll', '14 feb 2010 15:25'], ['llll', 'søn 14. feb, 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'januar jan_februar feb_marts mar_april apr_maj maj_juni jun_juli jul_august aug_september sep_oktober okt_november nov_december dec'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'søndag søn sø_mandag man ma_tirsdag tir ti_onsdag ons on_torsdag tor to_fredag fre fr_lørdag lør lø'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "få sekunder", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "et minut", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "et minut", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutter", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutter", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "en time", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "en time", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 timer", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 timer", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 timer", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "en dag", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "en dag", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dage", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "en dag", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dage", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dage", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "en måned", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "en måned", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "en måned", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 måneder", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 måneder", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 måneder", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "en måned", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 måneder", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 måneder", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "et år", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "et år", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 år", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "et år", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 år", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "om få sekunder", "prefix"); test.equal(moment(0).from(30000), "få sekunder siden", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "få sekunder siden", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "om få sekunder", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "om 5 dage", "in 5 days"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4th is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/test/lang/zh-cn.js000064400000041126152510437700014313 0ustar00var moment = require("../../moment"); /************************************************** Simplified Chinese **************************************************/ exports["lang:zh-cn"] = { setUp : function (cb) { moment.lang('zh-cn'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = '一月 1月_二月 2月_三月 3月_四月 4月_五月 5月_六月 6月_七月 7月_八月 8月_九月 9月_十月 10月_十一月 11月_十二月 12月'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, a h:mm:ss', '星期日, 二月 14日 2010, 下午 3:25:50'], ['ddd, Ah', '周日, 下午3'], ['M Mo MM MMMM MMM', '2 2月 02 二月 2月'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14日 14'], ['d do dddd ddd dd', '0 0日 星期日 周日 日'], ['DDD DDDo DDDD', '45 45日 045'], ['w wo ww', '8 8周 08'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', '下午 下午'], ['[这年的第] DDDo', '这年的第 45日'], ['L', '2010年2月14日'], ['LL', '2010年2月14日'], ['LLL', '2010年2月14日下午3点25'], ['LLLL', '2010年2月14日星期日下午3点25'], ['l', '2010年2月14日'], ['ll', '2010年2月14日'], ['lll', '2010年2月14日下午3点25'], ['llll', '2010年2月14日星期日下午3点25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format month" : function (test) { test.expect(12); var expected = '一月 1月_二月 2月_三月 3月_四月 4月_五月 5月_六月 6月_七月 7月_八月 8月_九月 9月_十月 10月_十一月 11月_十二月 12月'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = '星期日 周日 日_星期一 周一 一_星期二 周二 二_星期三 周三 三_星期四 周四 四_星期五 周五 五_星期六 周六 六'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "几秒", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "1分钟", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "1分钟", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2分钟", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44分钟", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "1小时", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "1小时", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2小时", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5小时", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21小时", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "1天", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "1天", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2天", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "1天", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5天", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25天", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "1个月", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "1个月", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "1个月", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2个月", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2个月", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3个月", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "1个月", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5个月", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11个月", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "1年", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "1年", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2年", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "1年", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5年", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "几秒内", "prefix"); test.equal(moment(0).from(30000), "几秒前", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "几秒前", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "几秒内", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "5天内", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "今天早上2点00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "今天早上2点25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "今天早上3点00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "明天早上2点00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "今天早上1点00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "昨天早上2点00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('[下]ddddLT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[下]ddddLT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[下]ddddLT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[上]ddddLT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[上]ddddLT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[上]ddddLT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, "meridiem" : function (test) { test.expect(10); test.equal(moment([2011, 2, 23, 0, 0]).format('a'), "早上", "morning"); test.equal(moment([2011, 2, 23, 9, 0]).format('a'), "上午", "before noon"); test.equal(moment([2011, 2, 23, 12, 0]).format('a'), "中午", "noon"); test.equal(moment([2011, 2, 23, 13, 0]).format('a'), "下午", "after noon"); test.equal(moment([2011, 2, 23, 18, 0]).format('a'), "晚上", "night"); test.equal(moment([2011, 2, 23, 0, 0]).format('A'), "早上", "morning"); test.equal(moment([2011, 2, 23, 9, 0]).format('A'), "上午", "before noon"); test.equal(moment([2011, 2, 23, 12, 0]).format('A'), "中午", "noon"); test.equal(moment([2011, 2, 23, 13, 0]).format('A'), "下午", "afternoon"); test.equal(moment([2011, 2, 23, 18, 0]).format('A'), "晚上", "night"); test.done(); }, // Sunday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(6); test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(5); test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); test.done(); }, "weeks year starting sunday format" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1周', "Jan 1 2012 应该是第 1周"); test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1周', "Jan 7 2012 应该是第 1周"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2周', "Jan 8 2012 应该是第 2周"); test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2周', "Jan 14 2012 应该是第 2周"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3周', "Jan 15 2012 应该是第 3周"); test.done(); } }; assets/plugins/moment/test/lang/hr.js000064400000045304152510437700013707 0ustar00var moment = require("../../moment"); /************************************************** Croatian *************************************************/ exports["lang:hr"] = { setUp : function (cb) { moment.lang('hr'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'sječanj sje._veljača vel._ožujak ožu._travanj tra._svibanj svi._lipanj lip._srpanj srp._kolovoz kol._rujan ruj._listopad lis._studeni stu._prosinac pro.'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, Do MMMM YYYY, h:mm:ss a', 'nedjelja, 14. veljača 2010, 3:25:50 pm'], ['ddd, hA', 'ned., 3PM'], ['M Mo MM MMMM MMM', '2 2. 02 veljača vel.'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14. 14'], ['d do dddd ddd dd', '0 0. nedjelja ned. ne'], ['DDD DDDo DDDD', '45 45. 045'], ['w wo ww', '7 7. 07'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45. day of the year'], ['L', '14. 02. 2010'], ['LL', '14. veljača 2010'], ['LLL', '14. veljača 2010 15:25'], ['LLLL', 'nedjelja, 14. veljača 2010 15:25'], ['l', '14. 2. 2010'], ['ll', '14. vel. 2010'], ['lll', '14. vel. 2010 15:25'], ['llll', 'ned., 14. vel. 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'sječanj sje._veljača vel._ožujak ožu._travanj tra._svibanj svi._lipanj lip._srpanj srp._kolovoz kol._rujan ruj._listopad lis._studeni stu._prosinac pro.'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'nedjelja ned. ne_ponedjeljak pon. po_utorak uto. ut_srijeda sri. sr_četvrtak čet. če_petak pet. pe_subota sub. su'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "par sekundi", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "jedna minuta", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "jedna minuta", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minute", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minuta", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "jedan sat", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "jedan sat", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 sata", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 sati", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 sati", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "dan", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "dan", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dana", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "dan", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dana", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dana", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "mjesec", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "mjesec", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "mjesec", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 mjeseca", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 mjeseca", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mjeseca", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "mjesec", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mjeseci", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 mjeseci", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "godinu", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "godinu", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 godine", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "godinu", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 godina", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "za par sekundi", "prefix"); test.equal(moment(0).from(30000), "prije par sekundi", "prefix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "prije par sekundi", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "za par sekundi", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "za 5 dana", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "danas u 2:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "danas u 2:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "danas u 3:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "sutra u 2:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "danas u 1:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "jučer u 2:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; function makeFormat(d) { switch (d.day()) { case 0: return '[u] [nedjelju] [u] LT'; case 3: return '[u] [srijedu] [u] LT'; case 6: return '[u] [subotu] [u] LT'; case 1: case 2: case 4: case 5: return '[u] dddd [u] LT'; } } for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; function makeFormat(d) { switch (d.day()) { case 0: case 3: return '[prošlu] dddd [u] LT'; case 6: return '[prošle] [subote] [u] LT'; case 1: case 2: case 4: case 5: return '[prošli] dddd [u] LT'; } } for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', "Jan 9 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/ca.js000064400000040774152510437700013667 0ustar00var moment = require("../../moment"); /************************************************** Català *************************************************/ exports["lang:ca"] = { setUp : function (cb) { moment.lang('ca'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = "Gener Gen._Febrer Febr._Març Mar._Abril Abr._Maig Mai._Juny Jun._Juliol Jul._Agost Ag._Setembre Set._Octubre Oct._Novembre Nov._Desembre Des.".split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = "Gener Gen._Febrer Febr._Març Mar._Abril Abr._Maig Mai._Juny Jun._Juliol Jul._Agost Ag._Setembre Set._Octubre Oct._Novembre Nov._Desembre Des.".split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = "Diumenge Dg. Dg_Dilluns Dl. Dl_Dimarts Dt. Dt_Dimecres Dc. Dc_Dijous Dj. Dj_Divendres Dv. Dv_Dissabte Ds. Ds".split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "uns segons", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "un minut", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "un minut", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minuts", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minuts", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "una hora", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "una hora", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 hores", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 hores", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 hores", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "un dia", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "un dia", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dies", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "un dia", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dies", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dies", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "un mes", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "un mes", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "un mes", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 mesos", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 mesos", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mesos", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "un mes", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mesos", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 mesos", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "un any", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "un any", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 anys", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "un any", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 anys", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "en uns segons", "prefix"); test.equal(moment(0).from(30000), "fa uns segons", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "fa uns segons", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "en uns segons", "en uns segons"); test.equal(moment().add({d: 5}).fromNow(), "en 5 dies", "en 5 dies"); test.done(); }, "calendar day" : function (test) { test.expect(7); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "avui a les 2:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "avui a les 2:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "avui a les 3:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "demà a les 2:00", "tomorrow at the same time"); test.equal(moment(a).add({ d: 1, h : -1 }).calendar(), "demà a la 1:00", "tomorrow minus 1 hour"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "avui a la 1:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "ahir a les 2:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[el] dddd [passat a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[el] dddd [passat a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[el] dddd [passat a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4th is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52º', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1º', "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1º', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2º', "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2º', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/test/lang/hu.js000064400000044457152510437700013722 0ustar00var moment = require("../../moment"); /************************************************** Hungarian *************************************************/ exports["lang:hu"] = { setUp : function (cb) { moment.lang('hu'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'január jan_február feb_március márc_április ápr_május máj_június jún_július júl_augusztus aug_szeptember szept_október okt_november nov_december dec'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(20); var a = [ ['dddd, MMMM Do YYYY, HH:mm:ss', 'vasárnap, február 14. 2010, 15:25:50'], ['ddd, HH', 'v, 15'], ['M Mo MM MMMM MMM', '2 2. 02 február feb'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14. 14'], ['d do dddd ddd', '0 0. vasárnap v'], ['DDD DDDo DDDD', '45 45. 045'], ['w wo ww', '7 7. 07'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['[az év] DDDo [napja]', 'az év 45. napja'], ['L', '2010.02.14.'], ['LL', '2010. február 14.'], ['LLL', '2010. február 14., 15:25'], ['LLLL', '2010. február 14., vasárnap 15:25'], ['l', '2010.2.14.'], ['ll', '2010. feb 14.'], ['lll', '2010. feb 14., 15:25'], ['llll', '2010. feb 14., v 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'január jan_február feb_március márc_április ápr_május máj_június jún_július júl_augusztus aug_szeptember szept_október okt_november nov_december dec'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'vasárnap v_hétfő h_kedd k_szerda sze_csütörtök cs_péntek p_szombat szo'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "néhány másodperc", "44 másodperc = néhány másodperc"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "egy perc", "45 másodperc = egy perc"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "egy perc", "89 másodperc = egy perc"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 perc", "90 másodperc = 2 perc"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 perc", "44 perc = 44 perc"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "egy óra", "45 perc = egy óra"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "egy óra", "89 perc = egy óra"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 óra", "90 perc = 2 óra"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 óra", "5 óra = 5 óra"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 óra", "21 óra = 21 óra"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "egy nap", "22 óra = egy nap"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "egy nap", "35 óra = egy nap"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 nap", "36 óra = 2 nap"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "egy nap", "1 nap = egy nap"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 nap", "5 nap = 5 nap"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 nap", "25 nap = 25 nap"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "egy hónap", "26 nap = egy hónap"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "egy hónap", "30 nap = egy hónap"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "egy hónap", "45 nap = egy hónap"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 hónap", "46 nap = 2 hónap"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 hónap", "75 nap = 2 hónap"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 hónap", "76 nap = 3 hónap"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "egy hónap", "1 hónap = egy hónap"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 hónap", "5 hónap = 5 hónap"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 hónap", "344 nap = 11 hónap"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "egy év", "345 nap = egy év"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "egy év", "547 nap = egy év"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 év", "548 nap = 2 év"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "egy év", "1 év = egy év"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 év", "5 év = 5 év"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "néhány másodperc múlva", "prefix"); test.equal(moment(0).from(30000), "néhány másodperce", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "néhány másodperce", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "néhány másodperc múlva", "néhány másodperc múlva"); test.equal(moment().add({d: 5}).fromNow(), "5 nap múlva", "5 nap múlva"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "ma 2:00-kor", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "ma 2:25-kor", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "ma 3:00-kor", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "holnap 2:00-kor", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "ma 1:00-kor", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "tegnap 2:00-kor", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m, days = 'vasárnap_hétfőn_kedden_szerdán_csütörtökön_pénteken_szombaton'.split('_'); for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('[' + days[m.day()] + '] LT[-kor]'), "today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[' + days[m.day()] + '] LT[-kor]'), "today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[' + days[m.day()] + '] LT[-kor]'), "today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m, days = 'vasárnap_hétfőn_kedden_szerdán_csütörtökön_pénteken_szombaton'.split('_'); for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[múlt ' + days[m.day()] + '] LT[-kor]'), "today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[múlt ' + days[m.day()] + '] LT[-kor]'), "today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[múlt ' + days[m.day()] + '] LT[-kor]'), "today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "egy héte"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "egy hét múlva"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 hete"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "2 hét múlva"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', "Jan 9 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/ml.js000064400000052577152510437710013721 0ustar00var moment = require("../../moment"); /************************************************** Malayalam *************************************************/ exports["lang:ml"] = { setUp : function (cb) { moment.lang('ml'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'ജനുവരി ജനു._ഫെബ്രുവരി ഫെബ്രു._മാർച്ച് മാർ._ഏപ്രിൽ ഏപ്രി._മേയ് മേയ്_ജൂൺ ജൂൺ_ജൂലൈ ജൂലൈ._ഓഗസ്റ്റ് ഓഗ._സെപ്റ്റംബർ സെപ്റ്റ._ഒക്ടോബർ ഒക്ടോ._നവംബർ നവം._ഡിസംബർ ഡിസം.'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(21); var a = [ ['dddd, Do MMMM YYYY, a h:mm:ss -നു', 'ഞായറാഴ്ച, 14 ഫെബ്രുവരി 2010, ഉച്ച കഴിഞ്ഞ് 3:25:50 -നു'], ['ddd, a h -നു', 'ഞായർ, ഉച്ച കഴിഞ്ഞ് 3 -നു'], ['M Mo MM MMMM MMM', '2 2 02 ഫെബ്രുവരി ഫെബ്രു.'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14 14'], ['d do dddd ddd dd', '0 0 ഞായറാഴ്ച ഞായർ ഞാ'], ['DDD DDDo DDDD', '45 45 045'], ['w wo ww', '8 8 08'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'ഉച്ച കഴിഞ്ഞ് ഉച്ച കഴിഞ്ഞ്'], ['L', '14/02/2010'], ['LL', '14 ഫെബ്രുവരി 2010'], ['LLL', '14 ഫെബ്രുവരി 2010, ഉച്ച കഴിഞ്ഞ് 3:25 -നു'], ['LLLL', 'ഞായറാഴ്ച, 14 ഫെബ്രുവരി 2010, ഉച്ച കഴിഞ്ഞ് 3:25 -നു'], ['l', '14/2/2010'], ['ll', '14 ഫെബ്രു. 2010'], ['lll', '14 ഫെബ്രു. 2010, ഉച്ച കഴിഞ്ഞ് 3:25 -നു'], ['llll', 'ഞായർ, 14 ഫെബ്രു. 2010, ഉച്ച കഴിഞ്ഞ് 3:25 -നു'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'ജനുവരി ജനു._ഫെബ്രുവരി ഫെബ്രു._മാർച്ച് മാർ._ഏപ്രിൽ ഏപ്രി._മേയ് മേയ്_ജൂൺ ജൂൺ_ജൂലൈ ജൂലൈ._ഓഗസ്റ്റ് ഓഗ._സെപ്റ്റംബർ സെപ്റ്റ._ഒക്ടോബർ ഒക്ടോ._നവംബർ നവം._ഡിസംബർ ഡിസം.'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'ഞായറാഴ്ച ഞായർ ഞാ_തിങ്കളാഴ്ച തിങ്കൾ തി_ചൊവ്വാഴ്ച ചൊവ്വ ചൊ_ബുധനാഴ്ച ബുധൻ ബു_വ്യാഴാഴ്ച വ്യാഴം വ്യാ_വെള്ളിയാഴ്ച വെള്ളി വെ_ശനിയാഴ്ച ശനി ശ'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "അൽപ നിമിഷങ്ങൾ", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "ഒരു മിനിറ്റ്", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "ഒരു മിനിറ്റ്", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 മിനിറ്റ്", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 മിനിറ്റ്", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "ഒരു മണിക്കൂർ", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "ഒരു മണിക്കൂർ", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 മണിക്കൂർ", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 മണിക്കൂർ", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 മണിക്കൂർ", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "ഒരു ദിവസം", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "ഒരു ദിവസം", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 ദിവസം", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "ഒരു ദിവസം", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 ദിവസം", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 ദിവസം", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "ഒരു മാസം", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "ഒരു മാസം", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "ഒരു മാസം", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 മാസം", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 മാസം", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 മാസം", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "ഒരു മാസം", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 മാസം", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 മാസം", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "ഒരു വർഷം", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "ഒരു വർഷം", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 വർഷം", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ഒരു വർഷം", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 വർഷം", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "അൽപ നിമിഷങ്ങൾ കഴിഞ്ഞ്", "prefix"); test.equal(moment(0).from(30000), "അൽപ നിമിഷങ്ങൾ മുൻപ്", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "അൽപ നിമിഷങ്ങൾ മുൻപ്", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "അൽപ നിമിഷങ്ങൾ കഴിഞ്ഞ്", "അൽപ നിമിഷങ്ങൾ കഴിഞ്ഞ്"); test.equal(moment().add({d: 5}).fromNow(), "5 ദിവസം കഴിഞ്ഞ്", "5 ദിവസം കഴിഞ്ഞ്"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "ഇന്ന് രാത്രി 2:00 -നു", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "ഇന്ന് രാത്രി 2:25 -നു", "Now plus 25 min"); test.equal(moment(a).add({ h: 3 }).calendar(), "ഇന്ന് രാവിലെ 5:00 -നു", "Now plus 3 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "നാളെ രാത്രി 2:00 -നു", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "ഇന്ന് രാത്രി 1:00 -നു", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "ഇന്നലെ രാത്രി 2:00 -നു", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd[,] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd[,] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd[,] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[കഴിഞ്ഞ] dddd[,] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[കഴിഞ്ഞ] dddd[,] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[കഴിഞ്ഞ] dddd[,] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, "meridiem" : function (test) { test.expect(12); test.equal(moment([2011, 2, 23, 2, 30]).format('a'), "രാത്രി", "before dawn"); test.equal(moment([2011, 2, 23, 9, 30]).format('a'), "രാവിലെ", "morning"); test.equal(moment([2011, 2, 23, 14, 30]).format('a'), "ഉച്ച കഴിഞ്ഞ്", "during day"); test.equal(moment([2011, 2, 23, 17, 30]).format('a'), "വൈകുന്നേരം", "evening"); test.equal(moment([2011, 2, 23, 19, 30]).format('a'), "വൈകുന്നേരം", "late evening"); test.equal(moment([2011, 2, 23, 21, 20]).format('a'), "രാത്രി", "night"); test.equal(moment([2011, 2, 23, 2, 30]).format('A'), "രാത്രി", "before dawn"); test.equal(moment([2011, 2, 23, 9, 30]).format('A'), "രാവിലെ", "morning"); test.equal(moment([2011, 2, 23, 14, 30]).format('A'), "ഉച്ച കഴിഞ്ഞ്", " during day"); test.equal(moment([2011, 2, 23, 17, 30]).format('A'), "വൈകുന്നേരം", "evening"); test.equal(moment([2011, 2, 23, 19, 30]).format('A'), "വൈകുന്നേരം", "late evening"); test.equal(moment([2011, 2, 23, 21, 20]).format('A'), "രാത്രി", "night"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(6); test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(5); test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1', "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2', "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', "Jan 15 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/eu.js000064400000044056152510437710013713 0ustar00var moment = require("../../moment"); /************************************************** Euskara *************************************************/ exports["lang:eu"] = { setUp : function (cb) { moment.lang('eu'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'urtarrila urt._otsaila ots._martxoa mar._apirila api._maiatza mai._ekaina eka._uztaila uzt._abuztua abu._iraila ira._urria urr._azaroa aza._abendua abe.'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'igandea, otsaila 14. 2010, 3:25:50 pm'], ['ddd, hA', 'ig., 3PM'], ['M Mo MM MMMM MMM', '2 2. 02 otsaila ots.'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14. 14'], ['d do dddd ddd dd', '0 0. igandea ig. ig'], ['DDD DDDo DDDD', '45 45. 045'], ['w wo ww', '7 7. 07'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45. day of the year'], ['L', '2010-02-14'], ['LL', '2010ko otsailaren 14a'], ['LLL', '2010ko otsailaren 14a 15:25'], ['LLLL', 'igandea, 2010ko otsailaren 14a 15:25'], ['l', '2010-2-14'], ['ll', '2010ko ots. 14a'], ['lll', '2010ko ots. 14a 15:25'], ['llll', 'ig., 2010ko ots. 14a 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'urtarrila urt._otsaila ots._martxoa mar._apirila api._maiatza mai._ekaina eka._uztaila uzt._abuztua abu._iraila ira._urria urr._azaroa aza._abendua abe.'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'igandea ig. ig_astelehena al. al_asteartea ar. ar_asteazkena az. az_osteguna og. og_ostirala ol. ol_larunbata lr. lr'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "segundo batzuk", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "minutu bat", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "minutu bat", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutu", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutu", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "ordu bat", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "ordu bat", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 ordu", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 ordu", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 ordu", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "egun bat", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "egun bat", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 egun", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "egun bat", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 egun", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 egun", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "hilabete bat", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "hilabete bat", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "hilabete bat", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 hilabete", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 hilabete", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 hilabete", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "hilabete bat", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 hilabete", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 hilabete", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "urte bat", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "urte bat", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 urte", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "urte bat", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 urte", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "segundo batzuk barru", "prefix"); test.equal(moment(0).from(30000), "duela segundo batzuk", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "duela segundo batzuk", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "segundo batzuk barru", "in seconds"); test.equal(moment().add({d: 5}).fromNow(), "5 egun barru", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "gaur 02:00etan", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "gaur 02:25etan", "now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "gaur 03:00etan", "now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "bihar 02:00etan", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "gaur 01:00etan", "now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "atzo 02:00etan", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd LT[etan]'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd LT[etan]'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd LT[etan]'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[aurreko] dddd LT[etan]'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[aurreko] dddd LT[etan]'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[aurreko] dddd LT[etan]'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', "Jan 9 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/ko.js000064400000044017152510437710013710 0ustar00var moment = require("../../moment"); /************************************************** Korean *************************************************/ exports["lang:kr"] = { setUp : function (cb) { moment.lang('ko'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = '1월 1월_2월 2월_3월 3월_4월 4월_5월 5월_6월 6월_7월 7월_8월 8월_9월 9월_10월 10월_11월 11월_12월 12월'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['YYYY년 MMMM Do dddd a h:mm:ss', '2010년 2월 14일 일요일 오후 3:25:50'], ['ddd A h', '일 오후 3'], ['M Mo MM MMMM MMM', '2 2일 02 2월 2월'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14일 14'], ['d do dddd ddd dd', '0 0일 일요일 일 일'], ['DDD DDDo DDDD', '45 45일 045'], ['w wo ww', '8 8일 08'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', '오후 오후'], ['일년 중 DDDo째 되는 날', '일년 중 45일째 되는 날'], ['L', '2010.02.14'], ['LL', '2010년 2월 14일'], ['LLL', '2010년 2월 14일 오후 3시 25분'], ['LLLL', '2010년 2월 14일 일요일 오후 3시 25분'], ['l', '2010.2.14'], ['ll', '2010년 2월 14일'], ['lll', '2010년 2월 14일 오후 3시 25분'], ['llll', '2010년 2월 14일 일 오후 3시 25분'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1일', '1일'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2일', '2일'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3일', '3일'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4일', '4일'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5일', '5일'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6일', '6일'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7일', '7일'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8일', '8일'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9일', '9일'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10일', '10일'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11일', '11일'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12일', '12일'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13일', '13일'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14일', '14일'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15일', '15일'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16일', '16일'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17일', '17일'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18일', '18일'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19일', '19일'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20일', '20일'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21일', '21일'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22일', '22일'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23일', '23일'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24일', '24일'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25일', '25일'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26일', '26일'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27일', '27일'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28일', '28일'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29일', '29일'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30일', '30일'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31일', '31일'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = '1월 1월_2월 2월_3월 3월_4월 4월_5월 5월_6월 6월_7월 7월_8월 8월_9월 9월_10월 10월_11월 11월_12월 12월'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = '일요일 일 일_월요일 월 월_화요일 화 화_수요일 수 수_목요일 목 목_금요일 금 금_토요일 토 토'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "몇초", "44초 = 몇초"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "일분", "45초 = 일분"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "일분", "89초 = 일분"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2분", "90초 = 2분"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44분", "44분 = 44분"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "한시간", "45분 = 한시간"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "한시간", "89분 = 한시간"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2시간", "90분 = 2시간"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5시간", "5시간 = 5시간"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21시간", "21시간 = 21시간"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "하루", "22시간 = 하루"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "하루", "35시간 = 하루"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2일", "36시간 = 2일"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "하루", "하루 = 하루"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5일", "5일 = 5일"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25일", "25일 = 25일"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "한달", "26일 = 한달"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "한달", "30일 = 한달"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "한달", "45일 = 한달"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2달", "46일 = 2달"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2달", "75일 = 2달"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3달", "76일 = 3달"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "한달", "1달 = 한달"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5달", "5달 = 5달"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11달", "344일 = 11달"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "일년", "345일 = 일년"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "일년", "547일 = 일년"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2년", "548일 = 2년"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "일년", "일년 = 일년"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5년", "5년 = 5년"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "몇초 후", "prefix"); test.equal(moment(0).from(30000), "몇초 전", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "몇초 전", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "몇초 후", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "5일 후", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "오늘 오전 2시 00분", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "오늘 오전 2시 25분", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "오늘 오전 3시 00분", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "내일 오전 2시 00분", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "오늘 오전 1시 00분", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "어제 오전 2시 00분", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('지난주 dddd LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('지난주 dddd LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('지난주 dddd LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Sunday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(6); test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(5); test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); test.done(); }, "weeks year starting sunday format" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1일', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1일', "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2일', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2일', "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3일', "Jan 15 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/ar.js000064400000046315152510437710013704 0ustar00// moment.js arabic (ar) tests // author: Abdel Said : https://github.com/abdelsaid var moment = require("../../moment"); exports["lang:ar"] = { setUp : function (cb) { moment.lang('ar'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'يناير/ كانون الثاني:يناير/ كانون الثاني_فبراير/ شباط:فبراير/ شباط_مارس/ آذار:مارس/ آذار_أبريل/ نيسان:أبريل/ نيسان_مايو/ أيار:مايو/ أيار_يونيو/ حزيران:يونيو/ حزيران_يوليو/ تموز:يوليو/ تموز_أغسطس/ آب:أغسطس/ آب_سبتمبر/ أيلول:سبتمبر/ أيلول_أكتوبر/ تشرين الأول:أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني:نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول:ديسمبر/ كانون الأول'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1) + ' instead is month ' + moment(input, mmm).month()); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(':'); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'الأحد, فبراير/ شباط 14 2010, 3:25:50 pm'], ['ddd, hA', 'الأحد, 3PM'], ['M Mo MM MMMM MMM', '2 2 02 فبراير/ شباط فبراير/ شباط'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14 14'], ['d do dddd ddd dd', '0 0 الأحد الأحد ح'], ['DDD DDDo DDDD', '45 45 045'], ['w wo ww', '8 8 08'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45 day of the year'], ['L', '14/02/2010'], ['LL', '14 فبراير/ شباط 2010'], ['LLL', '14 فبراير/ شباط 2010 15:25'], ['LLLL', 'الأحد 14 فبراير/ شباط 2010 15:25'], ['l', '14/2/2010'], ['ll', '14 فبراير/ شباط 2010'], ['lll', '14 فبراير/ شباط 2010 15:25'], ['llll', 'الأحد 14 فبراير/ شباط 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'يناير/ كانون الثاني يناير/ كانون الثاني_فبراير/ شباط فبراير/ شباط_مارس/ آذار مارس/ آذار_أبريل/ نيسان أبريل/ نيسان_مايو/ أيار مايو/ أيار_يونيو/ حزيران يونيو/ حزيران_يوليو/ تموز يوليو/ تموز_أغسطس/ آب أغسطس/ آب_سبتمبر/ أيلول سبتمبر/ أيلول_أكتوبر/ تشرين الأول أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول ديسمبر/ كانون الأول'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'الأحد الأحد ح_الإثنين الإثنين ن_الثلاثاء الثلاثاء ث_الأربعاء الأربعاء ر_الخميس الخميس خ_الجمعة الجمعة ج_السبت السبت س'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "ثوان", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "دقيقة", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "دقيقة", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 دقائق", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 دقائق", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "ساعة", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "ساعة", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 ساعات", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 ساعات", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 ساعات", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "يوم", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "يوم", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 أيام", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "يوم", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 أيام", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 أيام", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "شهر", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "شهر", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "شهر", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 أشهر", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 أشهر", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 أشهر", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "شهر", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 أشهر", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 أشهر", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "سنة", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "سنة", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 سنوات", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "سنة", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 سنوات", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "في ثوان", "prefix"); test.equal(moment(0).from(30000), "منذ ثوان", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "منذ ثوان", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "في ثوان", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "في 5 أيام", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "اليوم على الساعة 02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "اليوم على الساعة 02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "اليوم على الساعة 03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "غدا على الساعة 02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "اليوم على الساعة 01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "أمس على الساعة 02:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Saturday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2011, 11, 31]).week(), 1, "Dec 31 2011 should be week 1"); test.equal(moment([2012, 0, 6]).week(), 1, "Jan 6 2012 should be week 1"); test.equal(moment([2012, 0, 7]).week(), 2, "Jan 7 2012 should be week 2"); test.equal(moment([2012, 0, 13]).week(), 2, "Jan 13 2012 should be week 2"); test.equal(moment([2012, 0, 14]).week(), 3, "Jan 14 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2006, 11, 30]).week(), 1, "Dec 30 2006 should be week 1"); test.equal(moment([2007, 0, 5]).week(), 1, "Jan 5 2007 should be week 1"); test.equal(moment([2007, 0, 6]).week(), 2, "Jan 6 2007 should be week 2"); test.equal(moment([2007, 0, 12]).week(), 2, "Jan 12 2007 should be week 2"); test.equal(moment([2007, 0, 13]).week(), 3, "Jan 13 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 29]).week(), 1, "Dec 29 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 4]).week(), 1, "Jan 4 2008 should be week 1"); test.equal(moment([2008, 0, 5]).week(), 2, "Jan 5 2008 should be week 2"); test.equal(moment([2008, 0, 11]).week(), 2, "Jan 11 2008 should be week 2"); test.equal(moment([2008, 0, 12]).week(), 3, "Jan 12 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 28]).week(), 1, "Dec 28 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 3]).week(), 1, "Jan 3 2003 should be week 1"); test.equal(moment([2003, 0, 4]).week(), 2, "Jan 4 2003 should be week 2"); test.equal(moment([2003, 0, 10]).week(), 2, "Jan 10 2003 should be week 2"); test.equal(moment([2003, 0, 11]).week(), 3, "Jan 11 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 27]).week(), 1, "Dec 27 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 2]).week(), 1, "Jan 2 2009 should be week 1"); test.equal(moment([2009, 0, 3]).week(), 2, "Jan 3 2009 should be week 2"); test.equal(moment([2009, 0, 9]).week(), 2, "Jan 9 2009 should be week 2"); test.equal(moment([2009, 0, 10]).week(), 3, "Jan 10 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(5); test.equal(moment([2009, 11, 26]).week(), 1, "Dec 26 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 2]).week(), 2, "Jan 2 2010 should be week 2"); test.equal(moment([2010, 0, 8]).week(), 2, "Jan 8 2010 should be week 2"); test.equal(moment([2010, 0, 9]).week(), 3, "Jan 9 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(5); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 7]).week(), 1, "Jan 7 2011 should be week 1"); test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); test.equal(moment([2011, 0, 14]).week(), 2, "Jan 14 2011 should be week 2"); test.equal(moment([2011, 0, 15]).week(), 3, "Jan 15 2011 should be week 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2011, 11, 31]).format('w ww wo'), '1 01 1', "Dec 31 2011 should be week 1"); test.equal(moment([2012, 0, 6]).format('w ww wo'), '1 01 1', "Jan 6 2012 should be week 1"); test.equal(moment([2012, 0, 7]).format('w ww wo'), '2 02 2', "Jan 7 2012 should be week 2"); test.equal(moment([2012, 0, 13]).format('w ww wo'), '2 02 2', "Jan 13 2012 should be week 2"); test.equal(moment([2012, 0, 14]).format('w ww wo'), '3 03 3', "Jan 14 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/mr.js000064400000052557152510437710013725 0ustar00var moment = require("../../moment"); /************************************************** Marathi *************************************************/ exports["lang:mr"] = { setUp : function (cb) { moment.lang('mr'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'जानेवारी जाने._फेब्रुवारी फेब्रु._मार्च मार्च._एप्रिल एप्रि._मे मे._जून जून._जुलै जुलै._ऑगस्ट ऑग._सप्टेंबर सप्टें._ऑक्टोबर ऑक्टो._नोव्हेंबर नोव्हें._डिसेंबर डिसें.'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(21); var a = [ ['dddd, Do MMMM YYYY, a h:mm:ss वाजता', 'रविवार, १४ फेब्रुवारी २०१०, दुपारी ३:२५:५० वाजता'], ['ddd, a h वाजता', 'रवि, दुपारी ३ वाजता'], ['M Mo MM MMMM MMM', '२ २ ०२ फेब्रुवारी फेब्रु.'], ['YYYY YY', '२०१० १०'], ['D Do DD', '१४ १४ १४'], ['d do dddd ddd dd', '० ० रविवार रवि र'], ['DDD DDDo DDDD', '४५ ४५ ०४५'], ['w wo ww', '८ ८ ०८'], ['h hh', '३ ०३'], ['H HH', '१५ १५'], ['m mm', '२५ २५'], ['s ss', '५० ५०'], ['a A', 'दुपारी दुपारी'], ['L', '१४/०२/२०१०'], ['LL', '१४ फेब्रुवारी २०१०'], ['LLL', '१४ फेब्रुवारी २०१०, दुपारी ३:२५ वाजता'], ['LLLL', 'रविवार, १४ फेब्रुवारी २०१०, दुपारी ३:२५ वाजता'], ['l', '१४/२/२०१०'], ['ll', '१४ फेब्रु. २०१०'], ['lll', '१४ फेब्रु. २०१०, दुपारी ३:२५ वाजता'], ['llll', 'रवि, १४ फेब्रु. २०१०, दुपारी ३:२५ वाजता'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '१', '१'); test.equal(moment([2011, 0, 2]).format('DDDo'), '२', '२'); test.equal(moment([2011, 0, 3]).format('DDDo'), '३', '३'); test.equal(moment([2011, 0, 4]).format('DDDo'), '४', '४'); test.equal(moment([2011, 0, 5]).format('DDDo'), '५', '५'); test.equal(moment([2011, 0, 6]).format('DDDo'), '६', '६'); test.equal(moment([2011, 0, 7]).format('DDDo'), '७', '७'); test.equal(moment([2011, 0, 8]).format('DDDo'), '८', '८'); test.equal(moment([2011, 0, 9]).format('DDDo'), '९', '९'); test.equal(moment([2011, 0, 10]).format('DDDo'), '१०', '१०'); test.equal(moment([2011, 0, 11]).format('DDDo'), '११', '११'); test.equal(moment([2011, 0, 12]).format('DDDo'), '१२', '१२'); test.equal(moment([2011, 0, 13]).format('DDDo'), '१३', '१३'); test.equal(moment([2011, 0, 14]).format('DDDo'), '१४', '१४'); test.equal(moment([2011, 0, 15]).format('DDDo'), '१५', '१५'); test.equal(moment([2011, 0, 16]).format('DDDo'), '१६', '१६'); test.equal(moment([2011, 0, 17]).format('DDDo'), '१७', '१७'); test.equal(moment([2011, 0, 18]).format('DDDo'), '१८', '१८'); test.equal(moment([2011, 0, 19]).format('DDDo'), '१९', '१९'); test.equal(moment([2011, 0, 20]).format('DDDo'), '२०', '२०'); test.equal(moment([2011, 0, 21]).format('DDDo'), '२१', '२१'); test.equal(moment([2011, 0, 22]).format('DDDo'), '२२', '२२'); test.equal(moment([2011, 0, 23]).format('DDDo'), '२३', '२३'); test.equal(moment([2011, 0, 24]).format('DDDo'), '२४', '२४'); test.equal(moment([2011, 0, 25]).format('DDDo'), '२५', '२५'); test.equal(moment([2011, 0, 26]).format('DDDo'), '२६', '२६'); test.equal(moment([2011, 0, 27]).format('DDDo'), '२७', '२७'); test.equal(moment([2011, 0, 28]).format('DDDo'), '२८', '२८'); test.equal(moment([2011, 0, 29]).format('DDDo'), '२९', '२९'); test.equal(moment([2011, 0, 30]).format('DDDo'), '३०', '३०'); test.equal(moment([2011, 0, 31]).format('DDDo'), '३१', '३१'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'जानेवारी जाने._फेब्रुवारी फेब्रु._मार्च मार्च._एप्रिल एप्रि._मे मे._जून जून._जुलै जुलै._ऑगस्ट ऑग._सप्टेंबर सप्टें._ऑक्टोबर ऑक्टो._नोव्हेंबर नोव्हें._डिसेंबर डिसें.'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'रविवार रवि र_सोमवार सोम सो_मंगळवार मंगळ मं_बुधवार बुध बु_गुरूवार गुरू गु_शुक्रवार शुक्र शु_शनिवार शनि श'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "सेकंद", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "एक मिनिट", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "एक मिनिट", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "२ मिनिटे", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({ m: 44 }), true), "४४ मिनिटे", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "एक तास", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "एक तास", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "२ तास", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "५ तास", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "२१ तास", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "एक दिवस", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "एक दिवस", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "२ दिवस", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "एक दिवस", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "५ दिवस", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "२५ दिवस", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({ d: 26 }), true), "एक महिना", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({ d: 30 }), true), "एक महिना", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({ d: 45 }), true), "एक महिना", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({ d: 46 }), true), "२ महिने", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({ d: 74 }), true), "२ महिने", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({ d: 76 }), true), "३ महिने", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({ M: 1 }), true), "एक महिना", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({ M: 5 }), true), "५ महिने", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({ d: 344 }), true), "११ महिने", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "एक वर्ष", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "एक वर्ष", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "२ वर्षे", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "एक वर्ष", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({ y: 5 }), true), "५ वर्षे", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "सेकंद नंतर", "prefix"); test.equal(moment(0).from(30000), "सेकंद पूर्वी", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "सेकंद पूर्वी", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({ s: 30 }).fromNow(), "सेकंद नंतर", "सेकंद नंतर"); test.equal(moment().add({ d: 5 }).fromNow(), "५ दिवस नंतर", "५ दिवस नंतर"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "आज रात्री २:०० वाजता", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "आज रात्री २:२५ वाजता", "Now plus 25 min"); test.equal(moment(a).add({ h: 3 }).calendar(), "आज सकाळी ५:०० वाजता", "Now plus 3 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "उद्या रात्री २:०० वाजता", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "आज रात्री १:०० वाजता", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "काल रात्री २:०० वाजता", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd[,] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd[,] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd[,] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[मागील] dddd[,] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[मागील] dddd[,] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[मागील] dddd[,] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, "meridiem" : function (test) { test.expect(12); test.equal(moment([2011, 2, 23, 2, 30]).format('a'), "रात्री", "before dawn"); test.equal(moment([2011, 2, 23, 9, 30]).format('a'), "सकाळी", "morning"); test.equal(moment([2011, 2, 23, 14, 30]).format('a'), "दुपारी", "during day"); test.equal(moment([2011, 2, 23, 17, 30]).format('a'), "सायंकाळी", "evening"); test.equal(moment([2011, 2, 23, 19, 30]).format('a'), "सायंकाळी", "late evening"); test.equal(moment([2011, 2, 23, 21, 20]).format('a'), "रात्री", "night"); test.equal(moment([2011, 2, 23, 2, 30]).format('A'), "रात्री", "before dawn"); test.equal(moment([2011, 2, 23, 9, 30]).format('A'), "सकाळी", "morning"); test.equal(moment([2011, 2, 23, 14, 30]).format('A'), "दुपारी", " during day"); test.equal(moment([2011, 2, 23, 17, 30]).format('A'), "सायंकाळी", "evening"); test.equal(moment([2011, 2, 23, 19, 30]).format('A'), "सायंकाळी", "late evening"); test.equal(moment([2011, 2, 23, 21, 20]).format('A'), "रात्री", "night"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(6); test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(5); test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '१ ०१ १', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).format('w ww wo'), '१ ०१ १', "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '२ ०२ २', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).format('w ww wo'), '२ ०२ २', "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '३ ०३ ३', "Jan 15 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/id.js000064400000037343152510437710013677 0ustar00var moment = require("../../moment"); /************************************************** Indonesian *************************************************/ exports["lang:id"] = { setUp : function (cb) { moment.lang('id'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'Januari Jan_Februari Feb_Maret Mar_April Apr_Mei Mei_Juni Jun_Juli Jul_Agustus Ags_September Sep_Oktober Okt_November Nov_Desember Des'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Minggu, Februari 14 2010, 3:25:50 sore'], ['ddd, hA', 'Min, 3sore'], ['M Mo MM MMMM MMM', '2 2 02 Februari Feb'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14 14'], ['d do dddd ddd dd', '0 0 Minggu Min Mg'], ['DDD DDDo DDDD', '45 45 045'], ['w wo ww', '7 7 07'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'sore sore'], ['[the] DDDo [day of the year]', 'the 45 day of the year'], ['L', '14/02/2010'], ['LL', '14 Februari 2010'], ['LLL', '14 Februari 2010 pukul 15.25'], ['LLLL', 'Minggu, 14 Februari 2010 pukul 15.25'], ['l', '14/2/2010'], ['ll', '14 Feb 2010'], ['lll', '14 Feb 2010 pukul 15.25'], ['llll', 'Min, 14 Feb 2010 pukul 15.25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'Januari Jan_Februari Feb_Maret Mar_April Apr_Mei Mei_Juni Jun_Juli Jul_Agustus Ags_September Sep_Oktober Okt_November Nov_Desember Des'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'Minggu Min Mg_Senin Sen Sn_Selasa Sel Sl_Rabu Rab Rb_Kamis Kam Km_Jumat Jum Jm_Sabtu Sab Sb'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "beberapa detik", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "semenit", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "semenit", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 menit", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 menit", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "sejam", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "sejam", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 jam", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 jam", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 jam", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "sehari", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "sehari", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 hari", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "sehari", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 hari", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 hari", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "sebulan", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "sebulan", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "sebulan", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 bulan", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 bulan", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 bulan", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "sebulan", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 bulan", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 bulan", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "setahun", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "setahun", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 tahun", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "setahun", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 tahun", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "dalam beberapa detik", "prefix"); test.equal(moment(0).from(30000), "beberapa detik yang lalu", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "beberapa detik yang lalu", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "dalam beberapa detik", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "dalam 5 hari", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Hari ini pukul 02.00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Hari ini pukul 02.25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Hari ini pukul 03.00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Besok pukul 02.00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Hari ini pukul 01.00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Kemarin pukul 02.00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [pukul] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [pukul] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [pukul] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('dddd [lalu pukul] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [lalu pukul] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [lalu pukul] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1', "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2', "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3', "Jan 9 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/zh-tw.js000064400000041176152510437710014353 0ustar00var moment = require("../../moment"); /************************************************** Traditional Chinese *************************************************/ exports["lang:zh-tw"] = { setUp : function (cb) { moment.lang('zh-tw'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = '一月 1月_二月 2月_三月 3月_四月 4月_五月 5月_六月 6月_七月 7月_八月 8月_九月 9月_十月 10月_十一月 11月_十二月 12月'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, a h:mm:ss', '星期日, 二月 14日 2010, 下午 3:25:50'], ['ddd, Ah', '週日, 下午3'], ['M Mo MM MMMM MMM', '2 2月 02 二月 2月'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14日 14'], ['d do dddd ddd dd', '0 0日 星期日 週日 日'], ['DDD DDDo DDDD', '45 45日 045'], ['w wo ww', '8 8週 08'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', '下午 下午'], ['[這年的第] DDDo', '這年的第 45日'], ['L', '2010年2月14日'], ['LL', '2010年2月14日'], ['LLL', '2010年2月14日下午3點25'], ['LLLL', '2010年2月14日星期日下午3點25'], ['l', '2010年2月14日'], ['ll', '2010年2月14日'], ['lll', '2010年2月14日下午3點25'], ['llll', '2010年2月14日星期日下午3點25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format month" : function (test) { test.expect(12); var expected = '一月 1月_二月 2月_三月 3月_四月 4月_五月 5月_六月 6月_七月 7月_八月 8月_九月 9月_十月 10月_十一月 11月_十二月 12月'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = '星期日 週日 日_星期一 週一 一_星期二 週二 二_星期三 週三 三_星期四 週四 四_星期五 週五 五_星期六 週六 六'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "幾秒", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "一分鐘", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "一分鐘", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2分鐘", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44分鐘", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "一小時", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "一小時", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2小時", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5小時", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21小時", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "一天", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "一天", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2天", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "一天", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5天", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25天", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "一個月", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "一個月", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "一個月", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2個月", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2個月", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3個月", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "一個月", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5個月", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11個月", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "一年", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "一年", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2年", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "一年", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5年", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "幾秒內", "prefix"); test.equal(moment(0).from(30000), "幾秒前", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "幾秒前", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "幾秒內", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "5天內", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "今天早上2點00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "今天早上2點25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "今天早上3點00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "明天早上2點00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "今天早上1點00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "昨天早上2點00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('[下]ddddLT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[下]ddddLT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[下]ddddLT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[上]ddddLT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[上]ddddLT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[上]ddddLT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, "meridiem" : function (test) { test.expect(10); test.equal(moment([2011, 2, 23, 0, 0]).format('a'), "早上", "morning"); test.equal(moment([2011, 2, 23, 9, 0]).format('a'), "上午", "before noon"); test.equal(moment([2011, 2, 23, 12, 0]).format('a'), "中午", "noon"); test.equal(moment([2011, 2, 23, 13, 0]).format('a'), "下午", "after noon"); test.equal(moment([2011, 2, 23, 18, 0]).format('a'), "晚上", "night"); test.equal(moment([2011, 2, 23, 0, 0]).format('A'), "早上", "morning"); test.equal(moment([2011, 2, 23, 9, 0]).format('A'), "上午", "before noon"); test.equal(moment([2011, 2, 23, 12, 0]).format('A'), "中午", "noon"); test.equal(moment([2011, 2, 23, 13, 0]).format('A'), "下午", "afternoon"); test.equal(moment([2011, 2, 23, 18, 0]).format('A'), "晚上", "night"); test.done(); }, // Sunday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(6); test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(5); test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); test.done(); }, "weeks year starting sunday format" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1週', "Jan 1 2012 應該是第 1週"); test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1週', "Jan 7 2012 應該是第 1週"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2週', "Jan 8 2012 應該是第 2週"); test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2週', "Jan 14 2012 應該是第 2週"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3週', "Jan 15 2012 應該是第 3週"); test.done(); } }; assets/plugins/moment/test/lang/th.js000064400000043470152510437710013714 0ustar00var moment = require("../../moment"); /************************************************** Thai *************************************************/ exports["lang:th"] = { setUp : function (cb) { moment.lang('th'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'มกราคม มกรา_กุมภาพันธ์ กุมภา_มีนาคม มีนา_เมษายน เมษา_พฤษภาคม พฤษภา_มิถุนายน มิถุนา_กรกฎาคม กรกฎา_สิงหาคม สิงหา_กันยายน กันยา_ตุลาคม ตุลา_พฤศจิกายน พฤศจิกา_ธันวาคม ธันวา'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, Do MMMM YYYY, h:mm:ss a', 'อาทิตย์, 14 กุมภาพันธ์ 2010, 3:25:50 หลังเที่ยง'], ['ddd, h A', 'อาทิตย์, 3 หลังเที่ยง'], ['M Mo MM MMMM MMM', '2 2 02 กุมภาพันธ์ กุมภา'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14 14'], ['d do dddd ddd dd', '0 0 อาทิตย์ อาทิตย์ อา.'], ['DDD DDDo DDDD', '45 45 045'], ['w wo ww', '8 8 08'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'หลังเที่ยง หลังเที่ยง'], ['[the] DDDo [day of the year]', 'the 45 day of the year'], ['L', '2010/02/14'], ['LL', '14 กุมภาพันธ์ 2010'], ['LLL', '14 กุมภาพันธ์ 2010 เวลา 15 นาฬิกา 25 นาที'], ['LLLL', 'วันอาทิตย์ที่ 14 กุมภาพันธ์ 2010 เวลา 15 นาฬิกา 25 นาที'], ['l', '2010/2/14'], ['ll', '14 กุมภา 2010'], ['lll', '14 กุมภา 2010 เวลา 15 นาฬิกา 25 นาที'], ['llll', 'วันอาทิตย์ที่ 14 กุมภา 2010 เวลา 15 นาฬิกา 25 นาที'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'มกราคม มกรา_กุมภาพันธ์ กุมภา_มีนาคม มีนา_เมษายน เมษา_พฤษภาคม พฤษภา_มิถุนายน มิถุนา_กรกฎาคม กรกฎา_สิงหาคม สิงหา_กันยายน กันยา_ตุลาคม ตุลา_พฤศจิกายน พฤศจิกา_ธันวาคม ธันวา'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'อาทิตย์ อาทิตย์ อา._จันทร์ จันทร์ จ._อังคาร อังคาร อ._พุธ พุธ พ._พฤหัสบดี พฤหัส พฤ._ศุกร์ ศุกร์ ศ._เสาร์ เสาร์ ส.'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "ไม่กี่วินาที", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "1 นาที", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "1 นาที", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 นาที", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 นาที", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "1 ชั่วโมง", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "1 ชั่วโมง", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 ชั่วโมง", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 ชั่วโมง", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 ชั่วโมง", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "1 วัน", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "1 วัน", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 วัน", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "1 วัน", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 วัน", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 วัน", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "1 เดือน", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "1 เดือน", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "1 เดือน", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 เดือน", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 เดือน", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 เดือน", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "1 เดือน", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 เดือน", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 เดือน", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "1 ปี", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "1 ปี", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 ปี", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "1 ปี", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 ปี", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "อีก ไม่กี่วินาที", "prefix"); test.equal(moment(0).from(30000), "ไม่กี่วินาทีที่แล้ว", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "ไม่กี่วินาทีที่แล้ว", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "อีก ไม่กี่วินาที", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "อีก 5 วัน", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "วันนี้ เวลา 2 นาฬิกา 0 นาที", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "วันนี้ เวลา 2 นาฬิกา 25 นาที", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "วันนี้ เวลา 3 นาฬิกา 0 นาที", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "พรุ่งนี้ เวลา 2 นาฬิกา 0 นาที", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "วันนี้ เวลา 1 นาฬิกา 0 นาที", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "เมื่อวานนี้ เวลา 2 นาฬิกา 0 นาที", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd[หน้า เวลา] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd[หน้า เวลา] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd[หน้า เวลา] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[วัน]dddd[ที่แล้ว เวลา] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[วัน]dddd[ที่แล้ว เวลา] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[วัน]dddd[ที่แล้ว เวลา] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Sunday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(6); test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(5); test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); test.done(); }, "weeks year starting sunday format" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1', "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2', "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', "Jan 15 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/el.js000064400000047162152510437710013703 0ustar00var moment = require("../../moment"); /************************************************** Modern Greek *************************************************/ exports["lang:el"] = { setUp : function (cb) { moment.lang('el'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var i, tests = 'Ιανουάριος Ιαν_Φεβρουάριος Φεβ_Μάρτιος Μαρ_Απρίλιος Απρ_Μάιος Μαϊ_Ιούνιος Ιουν_Ιούλιος Ιουλ_Αύγουστος Αυγ_Σεπτέμβριος Σεπ_Οκτώβριος Οκτ_Νοέμβριος Νοε_Δεκέμβριος Δεκ'.split("_"); function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(24); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Κυριακή, Φεβρουάριος 14η 2010, 3:25:50 μμ'], ['dddd, D MMMM YYYY, h:mm:ss a', 'Κυριακή, 14 Φεβρουαρίου 2010, 3:25:50 μμ'], ['ddd, hA', 'Κυρ, 3ΜΜ'], ['dddd, MMMM YYYY', 'Κυριακή, Φεβρουάριος 2010'], ['M Mo MM MMMM MMM', '2 2η 02 Φεβρουάριος Φεβ'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14η 14'], ['d do dddd ddd dd', '0 0η Κυριακή Κυρ Κυ'], ['DDD DDDo DDDD', '45 45η 045'], ['w wo ww', '6 6η 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'μμ ΜΜ'], ['[the] DDDo [day of the year]', 'the 45η day of the year'], ['L', '14/02/2010'], ['LL', '14 Φεβρουαρίου 2010'], ['LLL', '14 Φεβρουαρίου 2010 3:25 ΜΜ'], ['LLLL', 'Κυριακή, 14 Φεβρουαρίου 2010 3:25 ΜΜ'], ['l', '14/2/2010'], ['ll', '14 Φεβ 2010'], ['lll', '14 Φεβ 2010 3:25 ΜΜ'], ['llll', 'Κυρ, 14 Φεβ 2010 3:25 ΜΜ'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1η', '1η'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2η', '2η'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3η', '3η'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4η', '4η'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5η', '5η'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6η', '6η'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7η', '7η'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8η', '8η'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9η', '9η'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10η', '10η'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11η', '11η'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12η', '12η'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13η', '13η'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14η', '14η'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15η', '15η'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16η', '16η'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17η', '17η'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18η', '18η'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19η', '19η'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20η', '20η'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21η', '21η'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22η', '22η'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23η', '23η'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24η', '24η'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25η', '25η'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26η', '26η'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27η', '27η'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28η', '28η'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29η', '29η'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30η', '30η'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31η', '31η'); test.done(); }, "format month" : function (test) { test.expect(12); var i, expected = 'Ιανουάριος Ιαν_Φεβρουάριος Φεβ_Μάρτιος Μαρ_Απρίλιος Απρ_Μάιος Μαϊ_Ιούνιος Ιουν_Ιούλιος Ιουλ_Αύγουστος Αυγ_Σεπτέμβριος Σεπ_Οκτώβριος Οκτ_Νοέμβριος Νοε_Δεκέμβριος Δεκ'.split("_"); for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var i, expected = 'Κυριακή Κυρ Κυ_Δευτέρα Δευ Δε_Τρίτη Τρι Τρ_Τετάρτη Τετ Τε_Πέμπτη Πεμ Πε_Παρασκευή Παρ Πα_Σάββατο Σαβ Σα'.split("_"); for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "δευτερόλεπτα", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "ένα λεπτό", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "ένα λεπτό", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 λεπτά", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 λεπτά", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "μία ώρα", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "μία ώρα", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 ώρες", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 ώρες", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 ώρες", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "μία μέρα", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "μία μέρα", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 μέρες", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "μία μέρα", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 μέρες", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 μέρες", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "ένας μήνας", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "ένας μήνας", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "ένας μήνας", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 μήνες", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 μήνες", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 μήνες", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "ένας μήνας", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 μήνες", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 μήνες", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "ένας χρόνος", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "ένας χρόνος", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 χρόνια", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ένας χρόνος", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 χρόνια", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "σε δευτερόλεπτα", "prefix"); test.equal(moment(0).from(30000), "δευτερόλεπτα πριν", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "δευτερόλεπτα πριν", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "σε δευτερόλεπτα", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "σε 5 μέρες", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Σήμερα στις 2:00 ΠΜ", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Σήμερα στις 2:25 ΠΜ", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Σήμερα στις 3:00 ΠΜ", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Αύριο στις 2:00 ΠΜ", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Σήμερα στη 1:00 ΠΜ", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Χθες στις 2:00 ΠΜ", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [' + (m.hours() % 12 === 1 ? 'στη' : 'στις') + '] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [στις] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [στις] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[την προηγούμενη] dddd [' + (m.hours() % 12 === 1 ? 'στη' : 'στις') + '] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[την προηγούμενη] dddd [στις] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[την προηγούμενη] dddd [στις] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(6); test.equal(moment([2006, 11, 31]).week(), 52, "Dec 31 2006 should be week 52"); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 30]).week(), 52, "Dec 30 2007 should be week 52"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 29]).week(), 52, "Dec 29 2002 should be week 52"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 28]).week(), 52, "Dec 28 2008 should be week 52"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(7); test.equal(moment([2009, 11, 27]).week(), 52, "Dec 27 2009 should be week 52"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 2]).week(), 53, "Jan 2 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 1"); test.equal(moment([2010, 0, 9]).week(), 1, "Jan 9 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 26]).week(), 51, "Dec 26 2010 should be week 51"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 8]).week(), 1, "Jan 8 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday format" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52η', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1η', "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1η', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2η', "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2η', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/test/lang/ka.js000064400000055021152510437710013667 0ustar00// moment.js language configuration // language : Georgian (ka) // author : Irakli Janiashvili : https://github.com/irakli-janiashvili var moment = require("../../moment"); exports["lang:ka"] = { setUp : function (cb) { moment.lang('ka'); cb(); }, tearDown : function (cb) { moment.lang('ka'); cb(); }, "parse" : function (test) { test.expect(96); var i, tests = 'იანვარი იან_თებერვალი თებ_მარტი მარ_აპრილი აპრ_მაისი მაი_ივნისი ივნ_ივლისი ივლ_აგვისტო აგვ_სექტემბერი სექ_ოქტომბერი ოქტ_ნოემბერი ნოე_დეკემბერი დეკ'.split("_"); function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' უნდა იყოს თვე ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'კვირა, თებერვალი მე-14 2010, 3:25:50 pm'], ['ddd, hA', 'კვი, 3PM'], ['M Mo MM MMMM MMM', '2 მე-2 02 თებერვალი თებ'], ['YYYY YY', '2010 10'], ['D Do DD', '14 მე-14 14'], ['d do dddd ddd dd', '0 0 კვირა კვი კვ'], ['DDD DDDo DDDD', '45 45-ე 045'], ['w wo ww', '7 მე-7 07'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['წლის DDDo დღე', 'წლის 45-ე დღე'], ['L', '14/02/2010'], ['LL', '14 თებერვალი 2010'], ['LLL', '14 თებერვალი 2010 3:25 PM'], ['LLLL', 'კვირა, 14 თებერვალი 2010 3:25 PM'], ['l', '14/2/2010'], ['ll', '14 თებ 2010'], ['lll', '14 თებ 2010 3:25 PM'], ['llll', 'კვი, 14 თებ 2010 3:25 PM'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(35); test.equal(moment([2011, 0, 1]).format('DDDo'), '1-ლი', '1-ლი'); test.equal(moment([2011, 0, 2]).format('DDDo'), 'მე-2', 'მე-2'); test.equal(moment([2011, 0, 3]).format('DDDo'), 'მე-3', 'მე-3'); test.equal(moment([2011, 0, 4]).format('DDDo'), 'მე-4', 'მე-4'); test.equal(moment([2011, 0, 5]).format('DDDo'), 'მე-5', 'მე-5'); test.equal(moment([2011, 0, 6]).format('DDDo'), 'მე-6', 'მე-6'); test.equal(moment([2011, 0, 7]).format('DDDo'), 'მე-7', 'მე-7'); test.equal(moment([2011, 0, 8]).format('DDDo'), 'მე-8', 'მე-8'); test.equal(moment([2011, 0, 9]).format('DDDo'), 'მე-9', 'მე-9'); test.equal(moment([2011, 0, 10]).format('DDDo'), 'მე-10', 'მე-10'); test.equal(moment([2011, 0, 11]).format('DDDo'), 'მე-11', 'მე-11'); test.equal(moment([2011, 0, 12]).format('DDDo'), 'მე-12', 'მე-12'); test.equal(moment([2011, 0, 13]).format('DDDo'), 'მე-13', 'მე-13'); test.equal(moment([2011, 0, 14]).format('DDDo'), 'მე-14', 'მე-14'); test.equal(moment([2011, 0, 15]).format('DDDo'), 'მე-15', 'მე-15'); test.equal(moment([2011, 0, 16]).format('DDDo'), 'მე-16', 'მე-16'); test.equal(moment([2011, 0, 17]).format('DDDo'), 'მე-17', 'მე-17'); test.equal(moment([2011, 0, 18]).format('DDDo'), 'მე-18', 'მე-18'); test.equal(moment([2011, 0, 19]).format('DDDo'), 'მე-19', 'მე-19'); test.equal(moment([2011, 0, 20]).format('DDDo'), 'მე-20', 'მე-20'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21-ე', '21-ე'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22-ე', '22-ე'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23-ე', '23-ე'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24-ე', '24-ე'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25-ე', '25-ე'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26-ე', '26-ე'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27-ე', '27-ე'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28-ე', '28-ე'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29-ე', '29-ე'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30-ე', '30-ე'); test.equal(moment([2011, 0, 0]).add('days', 40).format('DDDo'), 'მე-40', 'მე-40'); test.equal(moment([2011, 0, 0]).add('days', 50).format('DDDo'), '50-ე', '50-ე'); test.equal(moment([2011, 0, 0]).add('days', 60).format('DDDo'), 'მე-60', 'მე-60'); test.equal(moment([2011, 0, 0]).add('days', 100).format('DDDo'), 'მე-100', 'მე-100'); test.equal(moment([2011, 0, 0]).add('days', 101).format('DDDo'), '101-ე', '101-ე'); test.done(); }, "format month" : function (test) { test.expect(12); var i, expected = 'იანვარი იან_თებერვალი თებ_მარტი მარ_აპრილი აპრ_მაისი მაი_ივნისი ივნ_ივლისი ივლ_აგვისტო აგვ_სექტემბერი სექ_ოქტომბერი ოქტ_ნოემბერი ნოე_დეკემბერი დეკ'.split("_"); for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var i, expected = 'კვირა კვი კვ_ორშაბათი ორშ ორ_სამშაბათი სამ სა_ოთხშაბათი ოთხ ოთ_ხუთშაბათი ხუთ ხუ_პარასკევი პარ პა_შაბათი შაბ შა'.split("_"); for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "რამდენიმე წამი", "44 წამი = რამდენიმე წამი"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "წუთი", "45 წამი = წუთი"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "წუთი", "89 წამი = წუთი"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 წუთი", "90 წამი = 2 წუთი"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 წუთი", "44 წამი = 44 წუთი"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "საათი", "45 წამი = საათი"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "საათი", "89 წამი = საათი"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 საათი", "90 წამი = 2 საათი"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 საათი", "5 საათი = 5 საათი"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 საათი", "21 საათი = 21 საათი"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "დღე", "22 საათი = დღე"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "დღე", "35 საათი = დღე"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 დღე", "36 საათი = 2 დღე"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "დღე", "1 დღე = დღე"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 დღე", "5 დღე = 5 დღე"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 დღე", "25 დღე = 25 დღე"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "თვე", "26 დღე = თვე"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "თვე", "30 დღე = თვე"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "თვე", "45 დღე = თვე"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 თვე", "46 დღე = 2 თვე"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 თვე", "75 დღე = 2 თვე"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 თვე", "76 დღე = 3 თვე"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "თვე", "1 თვე = თვე"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 თვე", "5 თვე = 5 თვე"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 თვე", "344 დღე = 11 თვე"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "წელი", "345 დღე = წელი"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "წელი", "547 დღე = წელი"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 წელი", "548 დღე = 2 წელი"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "წელი", "1 წელი = წელი"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 წელი", "5 წელი = 5 წელი"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "რამდენიმე წამში", "ში სუფიქსი"); test.equal(moment(0).from(30000), "რამდენიმე წამის წინ", "წინ სუფიქსი"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "რამდენიმე წამის წინ", "უნდა აჩვენოს როგორც წარსული"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "რამდენიმე წამში", "რამდენიმე წამში"); test.equal(moment().add({d: 5}).fromNow(), "5 დღეში", "5 დღეში"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "დღეს 2:00 AM-ზე", "დღეს ამავე დროს"); test.equal(moment(a).add({ m: 25 }).calendar(), "დღეს 2:25 AM-ზე", "ახლანდელ დროს დამატებული 25 წუთი"); test.equal(moment(a).add({ h: 1 }).calendar(), "დღეს 3:00 AM-ზე", "ახლანდელ დროს დამატებული 1 საათი"); test.equal(moment(a).add({ d: 1 }).calendar(), "ხვალ 2:00 AM-ზე", "ხვალ ამავე დროს"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "დღეს 1:00 AM-ზე", "ახლანდელ დროს გამოკლებული 1 საათი"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "გუშინ 2:00 AM-ზე", "გუშინ ამავე დროს"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('[შემდეგ] dddd LT[-ზე]'), "დღეს + " + i + " დღე ახლანდელ დროს"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[შემდეგ] dddd LT[-ზე]'), "დღეს + " + i + " დღე დღის დასაწყისში"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[შემდეგ] dddd LT[-ზე]'), "დღეს + " + i + " დღე დღის დასასრულს"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[წინა] dddd LT[-ზე]'), "დღეს - " + i + " დღე ახლანდელ დროს"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[წინა] dddd LT[-ზე]'), "დღეს - " + i + " დღე დღის დასაწყისში"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[წინა] dddd LT[-ზე]'), "დღეს - " + i + " დღე დღის დასასრულს"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 კვირის წინ"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "1 კვირაში"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 კვირის წინ"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "2 კვირაში"); test.done(); }, "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).week(), 1, "დეკ 26 2011 უნდა იყოს კვირა 1"); test.equal(moment([2012, 0, 1]).week(), 1, "იან 1 2012 უნდა იყოს კვირა 1"); test.equal(moment([2012, 0, 2]).week(), 2, "იან 2 2012 უნდა იყოს კვირა 2"); test.equal(moment([2012, 0, 8]).week(), 2, "იან 8 2012 უნდა იყოს კვირა 2"); test.equal(moment([2012, 0, 9]).week(), 3, "იან 9 2012 უნდა იყოს კვირა 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "იან 1 2007 უნდა იყოს კვირა 1"); test.equal(moment([2007, 0, 7]).week(), 1, "იან 7 2007 უნდა იყოს კვირა 1"); test.equal(moment([2007, 0, 8]).week(), 2, "იან 8 2007 უნდა იყოს კვირა 2"); test.equal(moment([2007, 0, 14]).week(), 2, "იან 14 2007 უნდა იყოს კვირა 2"); test.equal(moment([2007, 0, 15]).week(), 3, "იან 15 2007 უნდა იყოს კვირა 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "დეკ 31 2007 უნდა იყოს კვირა 1"); test.equal(moment([2008, 0, 1]).week(), 1, "იან 1 2008 უნდა იყოს კვირა 1"); test.equal(moment([2008, 0, 6]).week(), 1, "იან 6 2008 უნდა იყოს კვირა 1"); test.equal(moment([2008, 0, 7]).week(), 2, "იან 7 2008 უნდა იყოს კვირა 2"); test.equal(moment([2008, 0, 13]).week(), 2, "იან 13 2008 უნდა იყოს კვირა 2"); test.equal(moment([2008, 0, 14]).week(), 3, "იან 14 2008 უნდა იყოს კვირა 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "დეკ 30 2002 უნდა იყოს კვირა 1"); test.equal(moment([2003, 0, 1]).week(), 1, "იან 1 2003 უნდა იყოს კვირა 1"); test.equal(moment([2003, 0, 5]).week(), 1, "იან 5 2003 უნდა იყოს კვირა 1"); test.equal(moment([2003, 0, 6]).week(), 2, "იან 6 2003 უნდა იყოს კვირა 2"); test.equal(moment([2003, 0, 12]).week(), 2, "იან 12 2003 უნდა იყოს კვირა 2"); test.equal(moment([2003, 0, 13]).week(), 3, "იან 13 2003 უნდა იყოს კვირა 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "დეკ 29 2008 უნდა იყოს კვირა 1"); test.equal(moment([2009, 0, 1]).week(), 1, "იან 1 2009 უნდა იყოს კვირა 1"); test.equal(moment([2009, 0, 4]).week(), 1, "იან 4 2009 უნდა იყოს კვირა 1"); test.equal(moment([2009, 0, 5]).week(), 2, "იან 5 2009 უნდა იყოს კვირა 2"); test.equal(moment([2009, 0, 11]).week(), 2, "იან 11 2009 უნდა იყოს კვირა 2"); test.equal(moment([2009, 0, 12]).week(), 3, "იან 12 2009 უნდა იყოს კვირა 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 1, "დეკ 28 2009 უნდა იყოს კვირა 1"); test.equal(moment([2010, 0, 1]).week(), 1, "იან 1 2010 უნდა იყოს კვირა 1"); test.equal(moment([2010, 0, 3]).week(), 1, "იან 3 2010 უნდა იყოს კვირა 1"); test.equal(moment([2010, 0, 4]).week(), 2, "იან 4 2010 უნდა იყოს კვირა 2"); test.equal(moment([2010, 0, 10]).week(), 2, "იან 10 2010 უნდა იყოს კვირა 2"); test.equal(moment([2010, 0, 11]).week(), 3, "იან 11 2010 უნდა იყოს კვირა 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 1, "დეკ 27 2010 უნდა იყოს კვირა 1"); test.equal(moment([2011, 0, 1]).week(), 1, "იან 1 2011 უნდა იყოს კვირა 1"); test.equal(moment([2011, 0, 2]).week(), 1, "იან 2 2011 უნდა იყოს კვირა 1"); test.equal(moment([2011, 0, 3]).week(), 2, "იან 3 2011 უნდა იყოს კვირა 2"); test.equal(moment([2011, 0, 9]).week(), 2, "იან 9 2011 უნდა იყოს კვირა 2"); test.equal(moment([2011, 0, 10]).week(), 3, "იან 10 2011 უნდა იყოს კვირა 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-ლი', "დეკ 26 2011 უნდა იყოს კვირა 1"); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-ლი', "იან 1 2012 უნდა იყოს კვირა 1"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 მე-2', "იან 2 2012 უნდა იყოს კვირა 2"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 მე-2', "იან 8 2012 უნდა იყოს კვირა 2"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 მე-3', "იან 9 2012 უნდა იყოს კვირა 3"); test.done(); } }; assets/plugins/moment/test/lang/vn.js000064400000044370152510437710013724 0ustar00var moment = require("../../moment"); /************************************************** Vietnamese *************************************************/ exports["lang:vn"] = { setUp : function (cb) { moment.lang('vn'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var i, tests = 'tháng 1,Th01_tháng 2,Th02_tháng 3,Th03_tháng 4,Th04_tháng 5,Th05_tháng 6,Th06_tháng 7,Th07_tháng 8,Th08_tháng 9,Th09_tháng 10,Th10_tháng 11,Th11_tháng 12,Th12'.split("_"); function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + i); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(','); equalTest(tests[i][0], '[tháng] M', i); equalTest(tests[i][1], '[Th]M', i); equalTest(tests[i][0], '[tháng] MM', i); equalTest(tests[i][1], '[Th]MM', i); equalTest(tests[i][0].toLocaleLowerCase(), '[THÁNG] M', i); equalTest(tests[i][1].toLocaleLowerCase(), '[TH]M', i); equalTest(tests[i][0].toLocaleUpperCase(), '[THÁNG] MM', i); equalTest(tests[i][1].toLocaleUpperCase(), '[TH]MM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'chủ nhật, tháng 2 14 2010, 3:25:50 pm'], ['ddd, hA', 'CN, 3PM'], ['M Mo MM MMMM MMM', '2 2 02 tháng 2 Th02'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14 14'], ['d do dddd ddd dd', '0 0 chủ nhật CN CN'], ['DDD DDDo DDDD', '45 45 045'], ['w wo ww', '6 6 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[ngày thứ] DDDo [của năm]', 'ngày thứ 45 của năm'], ['L', '14/02/2010'], ['LL', '14 tháng 2 năm 2010'], ['LLL', '14 tháng 2 năm 2010 15:25'], ['LLLL', 'chủ nhật, 14 tháng 2 năm 2010 15:25'], ['l', '14/2/2010'], ['ll', '14 Th02 2010'], ['lll', '14 Th02 2010 15:25'], ['llll', 'CN, 14 Th02 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); test.done(); }, "format month" : function (test) { test.expect(12); var i, expected = 'tháng 1,Th01_tháng 2,Th02_tháng 3,Th03_tháng 4,Th04_tháng 5,Th05_tháng 6,Th06_tháng 7,Th07_tháng 8,Th08_tháng 9,Th09_tháng 10,Th10_tháng 11,Th11_tháng 12,Th12'.split("_"); for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM,MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var i, expected = 'chủ nhật CN CN_thứ hai T2 T2_thứ ba T3 T3_thứ tư T4 T4_thứ năm T5 T5_thứ sáu T6 T6_thứ bảy T7 T7'.split("_"); for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "vài giây", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "một phút", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "một phút", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 phút", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 phút", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "một giờ", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "một giờ", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 giờ", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 giờ", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 giờ", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "một ngày", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "một ngày", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 ngày", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "một ngày", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 ngày", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 ngày", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "một tháng", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "một tháng", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "một tháng", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 tháng", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 tháng", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 tháng", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "một tháng", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 tháng", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 tháng", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "một năm", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "một năm", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 năm", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "một năm", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 năm", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "vài giây tới", "prefix"); test.equal(moment(0).from(30000), "vài giây trước", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "vài giây trước", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "vài giây tới", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "5 ngày tới", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Hôm nay lúc 02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Hôm nay lúc 02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Hôm nay lúc 03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Ngày mai lúc 02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Hôm nay lúc 01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Hôm qua lúc 02:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [tuần tới lúc] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [tuần tới lúc] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [tuần tới lúc] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('dddd [tuần rồi lúc] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [tuần rồi lúc] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [tuần rồi lúc] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4th is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1', "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2', "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/test/lang/it.js000064400000043416152510437710013715 0ustar00var moment = require("../../moment"); /************************************************** Italian *************************************************/ exports["lang:it"] = { setUp : function (cb) { moment.lang('it'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'Gennaio Gen_Febbraio Feb_Marzo Mar_Aprile Apr_Maggio Mag_Giugno Giu_Luglio Lug_Agosto Ago_Settembre Set_Ottobre Ott_Novembre Nov_Dicembre Dic'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Domenica, Febbraio 14º 2010, 3:25:50 pm'], ['ddd, hA', 'Dom, 3PM'], ['M Mo MM MMMM MMM', '2 2º 02 Febbraio Feb'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14º 14'], ['d do dddd ddd dd', '0 0º Domenica Dom D'], ['DDD DDDo DDDD', '45 45º 045'], ['w wo ww', '6 6º 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45º day of the year'], ['L', '14/02/2010'], ['LL', '14 Febbraio 2010'], ['LLL', '14 Febbraio 2010 15:25'], ['LLLL', 'Domenica, 14 Febbraio 2010 15:25'], ['l', '14/2/2010'], ['ll', '14 Feb 2010'], ['lll', '14 Feb 2010 15:25'], ['llll', 'Dom, 14 Feb 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'Gennaio Gen_Febbraio Feb_Marzo Mar_Aprile Apr_Maggio Mag_Giugno Giu_Luglio Lug_Agosto Ago_Settembre Set_Ottobre Ott_Novembre Nov_Dicembre Dic'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'Domenica Dom D_Lunedì Lun L_Martedì Mar Ma_Mercoledì Mer Me_Giovedì Gio G_Venerdì Ven V_Sabato Sab S'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "secondi", "44 seconds = seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "un minuto", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "un minuto", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minuti", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minuti", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "un'ora", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "un'ora", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 ore", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 ore", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 ore", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "un giorno", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "un giorno", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 giorni", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "un giorno", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 giorni", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 giorni", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "un mese", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "un mese", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "un mese", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 mesi", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 mesi", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mesi", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "un mese", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mesi", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 mesi", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "un anno", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "un anno", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 anni", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "un anno", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 anni", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "in secondi", "prefix"); test.equal(moment(0).from(30000), "secondi fa", "suffix"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "in secondi", "in seconds"); test.equal(moment().add({d: 5}).fromNow(), "tra 5 giorni", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Oggi alle 02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Oggi alle 02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Oggi alle 03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Domani alle 02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Oggi alle 01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Ieri alle 02:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [alle] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [alle] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [alle] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[lo scorso] dddd [alle] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[lo scorso] dddd [alle] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[lo scorso] dddd [alle] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4th is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52º', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1º', "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1º', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2º', "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2º', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/test/lang/es.js000064400000044771152510437710013715 0ustar00var moment = require("../../moment"); /************************************************** Spanish *************************************************/ exports["lang:es"] = { setUp : function (cb) { moment.lang('es'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'enero ene._febrero feb._marzo mar._abril abr._mayo may._junio jun._julio jul._agosto ago._septiembre sep._octubre oct._noviembre nov._diciembre dic.'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'domingo, febrero 14º 2010, 3:25:50 pm'], ['ddd, hA', 'dom., 3PM'], ['M Mo MM MMMM MMM', '2 2º 02 febrero feb.'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14º 14'], ['d do dddd ddd dd', '0 0º domingo dom. Do'], ['DDD DDDo DDDD', '45 45º 045'], ['w wo ww', '6 6º 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45º day of the year'], ['L', '14/02/2010'], ['LL', '14 de febrero de 2010'], ['LLL', '14 de febrero de 2010 15:25'], ['LLLL', 'domingo, 14 de febrero de 2010 15:25'], ['l', '14/2/2010'], ['ll', '14 de feb. de 2010'], ['lll', '14 de feb. de 2010 15:25'], ['llll', 'dom., 14 de feb. de 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'enero ene._febrero feb._marzo mar._abril abr._mayo may._junio jun._julio jul._agosto ago._septiembre sep._octubre oct._noviembre nov._diciembre dic.'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'domingo dom. Do_lunes lun. Lu_martes mar. Ma_miércoles mié. Mi_jueves jue. Ju_viernes vie. Vi_sábado sáb. Sá'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "unos segundos", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "un minuto", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "un minuto", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutos", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutos", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "una hora", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "una hora", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 horas", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 horas", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 horas", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "un día", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "un día", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 días", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "un día", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 días", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 días", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "un mes", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "un mes", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "un mes", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 meses", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 meses", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 meses", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "un mes", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 meses", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 meses", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "un año", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "un año", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 años", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "un año", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 años", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "en unos segundos", "prefix"); test.equal(moment(0).from(30000), "hace unos segundos", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "hace unos segundos", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "en unos segundos", "en unos segundos"); test.equal(moment().add({d: 5}).fromNow(), "en 5 días", "en 5 días"); test.done(); }, "calendar day" : function (test) { test.expect(7); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "hoy a las 2:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "hoy a las 2:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "hoy a las 3:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "mañana a las 2:00", "tomorrow at the same time"); test.equal(moment(a).add({ d: 1, h : -1 }).calendar(), "mañana a la 1:00", "tomorrow minus 1 hour"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "hoy a la 1:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "ayer a las 2:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[el] dddd [pasado a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[el] dddd [pasado a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[el] dddd [pasado a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4th is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52º', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1º', "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1º', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2º', "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2º', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/test/lang/pl.js000064400000044633152510437710013716 0ustar00var moment = require("../../moment"); /************************************************** Polish *************************************************/ exports["lang:pl"] = { setUp : function (cb) { moment.lang('pl'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'styczeń sty_luty lut_marzec mar_kwiecień kwi_maj maj_czerwiec cze_lipiec lip_sierpień sie_wrzesień wrz_październik paź_listopad lis_grudzień gru'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'niedziela, luty 14. 2010, 3:25:50 pm'], ['ddd, hA', 'nie, 3PM'], ['M Mo MM MMMM MMM', '2 2. 02 luty lut'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14. 14'], ['d do dddd ddd dd', '0 0. niedziela nie N'], ['DDD DDDo DDDD', '45 45. 045'], ['w wo ww', '6 6. 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45. day of the year'], ['L', '14.02.2010'], ['LL', '14 lutego 2010'], ['LLL', '14 lutego 2010 15:25'], ['LLLL', 'niedziela, 14 lutego 2010 15:25'], ['l', '14.2.2010'], ['ll', '14 lut 2010'], ['lll', '14 lut 2010 15:25'], ['llll', 'nie, 14 lut 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'styczeń sty_luty lut_marzec mar_kwiecień kwi_maj maj_czerwiec cze_lipiec lip_sierpień sie_wrzesień wrz_październik paź_listopad lis_grudzień gru'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'niedziela nie N_poniedziałek pon Pn_wtorek wt Wt_środa śr Śr_czwartek czw Cz_piątek pt Pt_sobota sb So'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "kilka sekund", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "minuta", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "minuta", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minuty", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minuty", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "godzina", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "godzina", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 godziny", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 godzin", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 godzin", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "1 dzień", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "1 dzień", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dni", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "1 dzień", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dni", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dni", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "miesiąc", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "miesiąc", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "miesiąc", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 miesiące", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 miesiące", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 miesiące", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "miesiąc", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 miesięcy", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 miesięcy", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "rok", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "rok", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 lata", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "rok", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 lat", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "za kilka sekund", "prefix"); test.equal(moment(0).from(30000), "kilka sekund temu", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "kilka sekund temu", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(3); test.equal(moment().add({s: 30}).fromNow(), "za kilka sekund", "in a few seconds"); test.equal(moment().add({h: 1}).fromNow(), "za godzinę", "in an hour"); test.equal(moment().add({d: 5}).fromNow(), "za 5 dni", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Dziś o 02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Dziś o 02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Dziś o 03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Jutro o 02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Dziś o 01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Wczoraj o 02:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('[W] dddd [o] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[W] dddd [o] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[W] dddd [o] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; function makeFormat(d) { switch (d.day()) { case 0: return '[W zeszłą niedzielę o] LT'; case 3: return '[W zeszłą środę o] LT'; case 6: return '[W zeszłą sobotę o] LT'; default: return '[W zeszły] dddd [o] LT'; } } for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4th is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/test/lang/ja.js000064400000037101152510437710013665 0ustar00var moment = require("../../moment"); /************************************************** Japanese *************************************************/ exports["lang:ja"] = { setUp : function (cb) { moment.lang('ja'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = '1月 1月_2月 2月_3月 3月_4月 4月_5月 5月_6月 6月_7月 7月_8月 8月_9月 9月_10月 10月_11月 11月_12月 12月'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, a h:mm:ss', '日曜日, 2月 14 2010, 午後 3:25:50'], ['ddd, Ah', '日, 午後3'], ['M Mo MM MMMM MMM', '2 2 02 2月 2月'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14 14'], ['d do dddd ddd dd', '0 0 日曜日 日 日'], ['DDD DDDo DDDD', '45 45 045'], ['w wo ww', '8 8 08'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', '午後 午後'], ['[the] DDDo [day of the year]', 'the 45 day of the year'], ['L', '2010/02/14'], ['LL', '2010年2月14日'], ['LLL', '2010年2月14日午後3時25分'], ['LLLL', '2010年2月14日午後3時25分 日曜日'], ['l', '2010/2/14'], ['ll', '2010年2月14日'], ['lll', '2010年2月14日午後3時25分'], ['llll', '2010年2月14日午後3時25分 日'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format month" : function (test) { test.expect(12); var expected = '1月 1月_2月 2月_3月 3月_4月 4月_5月 5月_6月 6月_7月 7月_8月 8月_9月 9月_10月 10月_11月 11月_12月 12月'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = '日曜日 日 日_月曜日 月 月_火曜日 火 火_水曜日 水 水_木曜日 木 木_金曜日 金 金_土曜日 土 土'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "数秒", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "1分", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "1分", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2分", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44分", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "1時間", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "1時間", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2時間", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5時間", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21時間", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "1日", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "1日", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2日", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "1日", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5日", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25日", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "1ヶ月", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "1ヶ月", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "1ヶ月", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2ヶ月", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2ヶ月", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3ヶ月", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "1ヶ月", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5ヶ月", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11ヶ月", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "1年", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "1年", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2年", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "1年", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5年", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "数秒後", "prefix"); test.equal(moment(0).from(30000), "数秒前", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "数秒前", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "数秒後", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "5日後", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "今日 午前2時0分", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "今日 午前2時25分", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "今日 午前3時0分", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "明日 午前2時0分", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "今日 午前1時0分", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "昨日 午前2時0分", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('[来週]dddd LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[来週]dddd LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[来週]dddd LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[前週]dddd LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[前週]dddd LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[前週]dddd LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Sunday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(6); test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(5); test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); test.done(); }, "weeks year starting sunday format" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1', "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2', "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', "Jan 15 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/en-gb.js000064400000044040152510437710014263 0ustar00var moment = require("../../moment"); /************************************************** English *************************************************/ exports["lang:en-gb"] = { setUp : function (cb) { moment.lang('en-gb'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sunday, February 14th 2010, 3:25:50 pm'], ['ddd, hA', 'Sun, 3PM'], ['M Mo MM MMMM MMM', '2 2nd 02 February Feb'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14th 14'], ['d do dddd ddd dd', '0 0th Sunday Sun Su'], ['DDD DDDo DDDD', '45 45th 045'], ['w wo ww', '6 6th 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45th day of the year'], ['L', '14/02/2010'], ['LL', '14 February 2010'], ['LLL', '14 February 2010 15:25'], ['LLLL', 'Sunday, 14 February 2010 15:25'], ['l', '14/2/2010'], ['ll', '14 Feb 2010'], ['lll', '14 Feb 2010 15:25'], ['llll', 'Sun, 14 Feb 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'Sunday Sun Su_Monday Mon Mo_Tuesday Tue Tu_Wednesday Wed We_Thursday Thu Th_Friday Fri Fr_Saturday Sat Sa'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "a few seconds", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "a minute", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "a minute", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutes", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutes", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "an hour", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "an hour", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 hours", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 hours", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 hours", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "a day", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "a day", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 days", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "a day", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 days", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 days", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "a month", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "a month", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "a month", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 months", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 months", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 months", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "a month", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 months", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 months", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "a year", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "a year", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 years", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "a year", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 years", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "in a few seconds", "prefix"); test.equal(moment(0).from(30000), "a few seconds ago", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "a few seconds ago", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "in a few seconds", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "in 5 days", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Today at 02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Today at 02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Today at 03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Tomorrow at 02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Today at 01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Yesterday at 02:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [at] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [at] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [at] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[Last] dddd [at] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[Last] dddd [at] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[Last] dddd [at] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4th is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52nd', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1st', "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1st', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2nd', "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2nd', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/test/lang/fr-ca.js000064400000043370152510437710014270 0ustar00var moment = require("../../moment"); /************************************************** French (Canadian) *************************************************/ exports["lang:fr-ca"] = { setUp : function (cb) { moment.lang('fr-ca'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var i, tests = 'janvier janv._février févr._mars mars_avril avr._mai mai_juin juin_juillet juil._août août_septembre sept._octobre oct._novembre nov._décembre déc.'.split("_"); function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'dimanche, février 14 2010, 3:25:50 pm'], ['ddd, hA', 'dim., 3PM'], ['M Mo MM MMMM MMM', '2 2 02 février févr.'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14 14'], ['d do dddd ddd dd', '0 0 dimanche dim. Di'], ['DDD DDDo DDDD', '45 45 045'], ['w wo ww', '8 8 08'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45 day of the year'], ['L', '2010-02-14'], ['LL', '14 février 2010'], ['LLL', '14 février 2010 15:25'], ['LLLL', 'dimanche 14 février 2010 15:25'], ['l', '2010-2-14'], ['ll', '14 févr. 2010'], ['lll', '14 févr. 2010 15:25'], ['llll', 'dim. 14 févr. 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1er', '1er'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); test.done(); }, "format month" : function (test) { test.expect(12); var i, expected = 'janvier janv._février févr._mars mars_avril avr._mai mai_juin juin_juillet juil._août août_septembre sept._octobre oct._novembre nov._décembre déc.'.split("_"); for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var i, expected = 'dimanche dim. Di_lundi lun. Lu_mardi mar. Ma_mercredi mer. Me_jeudi jeu. Je_vendredi ven. Ve_samedi sam. Sa'.split("_"); for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "quelques secondes", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "une minute", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "une minute", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutes", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutes", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "une heure", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "une heure", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 heures", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 heures", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 heures", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "un jour", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "un jour", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 jours", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "un jour", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 jours", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 jours", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "un mois", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "un mois", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "un mois", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 mois", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 mois", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mois", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "un mois", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mois", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 mois", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "un an", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "un an", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 ans", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "un an", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 ans", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "dans quelques secondes", "prefix"); test.equal(moment(0).from(30000), "il y a quelques secondes", "suffix"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "dans quelques secondes", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "dans 5 jours", "in 5 days"); test.done(); }, "same day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Aujourd'hui à 02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Aujourd'hui à 02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Aujourd'hui à 03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Demain à 02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Aujourd'hui à 01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Hier à 02:00", "yesterday at the same time"); test.done(); }, "same next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [à] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [à] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [à] LT'), "Today + " + i + " days end of day"); } test.done(); }, "same last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('dddd [dernier à] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [dernier à] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [dernier à] LT'), "Today - " + i + " days end of day"); } test.done(); }, "same all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Sunday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(6); test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(5); test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); test.done(); }, "weeks year starting sunday format" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1er', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1er', "Jan 7 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2', "Jan 14 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', "Jan 15 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/ms-my.js000064400000044256152510437710014346 0ustar00var moment = require("../../moment"); /************************************************** Bahasa Melayu *************************************************/ exports["lang:ms-my"] = { setUp : function (cb) { moment.lang('ms-my'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var i, tests = 'Januari Jan_Februari Feb_Mac Mac_April Apr_Mei Mei_Jun Jun_Julai Jul_Ogos Ogs_September Sep_Oktober Okt_November Nov_Disember Dis'.split("_"); function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' sepatutnya bulan ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Ahad, Februari 14 2010, 3:25:50 petang'], ['ddd, hA', 'Ahd, 3petang'], ['M Mo MM MMMM MMM', '2 2 02 Februari Feb'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14 14'], ['d do dddd ddd dd', '0 0 Ahad Ahd Ah'], ['DDD DDDo DDDD', '45 45 045'], ['w wo ww', '7 7 07'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'petang petang'], ['[hari] [ke] DDDo [tahun] ini', 'hari ke 45 tahun ini'], ['L', '14/02/2010'], ['LL', '14 Februari 2010'], ['LLL', '14 Februari 2010 pukul 15.25'], ['LLLL', 'Ahad, 14 Februari 2010 pukul 15.25'], ['l', '14/2/2010'], ['ll', '14 Feb 2010'], ['lll', '14 Feb 2010 pukul 15.25'], ['llll', 'Ahd, 14 Feb 2010 pukul 15.25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); test.done(); }, "format month" : function (test) { test.expect(12); var i, expected = 'Januari Jan_Februari Feb_Mac Mac_April Apr_Mei Mei_Jun Jun_Julai Jul_Ogos Ogs_September Sep_Oktober Okt_November Nov_Disember Dis'.split("_"); for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var i, expected = 'Ahad Ahd Ah_Isnin Isn Is_Selasa Sel Sl_Rabu Rab Rb_Khamis Kha Km_Jumaat Jum Jm_Sabtu Sab Sb'.split("_"); for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "beberapa saat", "44 saat = beberapa saat"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "seminit", "45 saat = seminit"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "seminit", "89 saat = seminit"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minit", "90 saat = 2 minit"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minit", "44 minit = 44 minit"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "sejam", "45 minit = sejam"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "sejam", "89 minit = sejam"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 jam", "90 minit = 2 jam"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 jam", "5 jam = 5 jam"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 jam", "21 jam = 21 jam"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "sehari", "22 jam = sehari"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "sehari", "35 jam = sehari"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 hari", "36 jam = 2 hari"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "sehari", "1 hari = sehari"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 hari", "5 hari = 5 hari"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 hari", "25 hari = 25 hari"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "sebulan", "26 hari = sebulan"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "sebulan", "30 hari = sebulan"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "sebulan", "45 hari = sebulan"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 bulan", "46 hari = 2 bulan"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 bulan", "75 hari = 2 bulan"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 bulan", "76 hari = 3 bulan"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "sebulan", "1 bulan = sebulan"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 bulan", "5 bulan = 5 bulan"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 bulan", "344 hari = 11 bulan"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "setahun", "345 hari = setahun"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "setahun", "547 hari = setahun"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 tahun", "548 hari = 2 tahun"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "setahun", "1 tahun = setahun"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 tahun", "5 tahun = 5 tahun"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "dalam beberapa saat", "prefix"); test.equal(moment(0).from(30000), "beberapa saat yang lepas", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "beberapa saat yang lepas", "waktu sekarang dari sekarang sepatutnya menunjukkan sebagai telah lepas"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "dalam beberapa saat", "dalam beberapa saat"); test.equal(moment().add({d: 5}).fromNow(), "dalam 5 hari", "dalam 5 hari"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Hari ini pukul 02.00", "hari ini pada waktu yang sama"); test.equal(moment(a).add({ m: 25 }).calendar(), "Hari ini pukul 02.25", "Sekarang tambah 25 minit"); test.equal(moment(a).add({ h: 1 }).calendar(), "Hari ini pukul 03.00", "Sekarang tambah 1 jam"); test.equal(moment(a).add({ d: 1 }).calendar(), "Esok pukul 02.00", "esok pada waktu yang sama"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Hari ini pukul 01.00", "Sekarang tolak 1 jam"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Kelmarin pukul 02.00", "kelmarin pada waktu yang sama"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [pukul] LT'), "Hari ini + " + i + " hari waktu sekarang"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [pukul] LT'), "Hari ini + " + i + " hari permulaan hari"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [pukul] LT'), "Hari ini + " + i + " hari tamat hari"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('dddd [lepas] [pukul] LT'), "Hari ini - " + i + " hari waktu sekarang"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [lepas] [pukul] LT'), "Hari ini - " + i + " hari permulaan hari"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [lepas] [pukul] LT'), "Hari ini - " + i + " hari tamat hari"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 minggu lepas"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "dalam 1 minggu"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 minggu lepas"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "dalam 2 minggu"); test.done(); }, // Sunday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 sepatutnya minggu 1"); test.equal(moment([2012, 0, 7]).week(), 2, "Jan 7 2012 sepatutnya minggu 2"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 sepatutnya minggu 2"); test.equal(moment([2012, 0, 14]).week(), 3, "Jan 14 2012 sepatutnya minggu 3"); test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 sepatutnya minggu 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(6); test.equal(moment([2006, 11, 31]).week(), 53, "Dec 31 2006 sepatutnya minggu 53"); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 sepatutnya minggu 1"); test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 sepatutnya minggu 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 sepatutnya minggu 1"); test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 sepatutnya minggu 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 sepatutnya minggu 2"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 30]).week(), 52, "Dec 30 2007 sepatutnya minggu 52"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 sepatutnya minggu 1"); test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 sepatutnya minggu 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 sepatutnya minggu 1"); test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 sepatutnya minggu 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 sepatutnya minggu 2"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 29]).week(), 52, "Dec 29 2002 sepatutnya minggu 52"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 sepatutnya minggu 1"); test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 sepatutnya minggu 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 sepatutnya minggu 1"); test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 sepatutnya minggu 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 sepatutnya minggu 2"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 28]).week(), 52, "Dec 28 2008 sepatutnya minggu 52"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 sepatutnya minggu 1"); test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 sepatutnya minggu 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 sepatutnya minggu 1"); test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 sepatutnya minggu 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 sepatutnya minggu 2"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 27]).week(), 52, "Dec 27 2009 sepatutnya minggu 52"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 sepatutnya minggu 1"); test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 sepatutnya minggu 1"); test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 sepatutnya minggu 1"); test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 sepatutnya minggu 2"); test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 sepatutnya minggu 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(5); test.equal(moment([2010, 11, 26]).week(), 52, "Dec 26 2010 sepatutnya minggu 52"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 sepatutnya minggu 1"); test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 sepatutnya minggu 1"); test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 sepatutnya minggu 2"); test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 sepatutnya minggu 2"); test.done(); }, "weeks year starting sunday format" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', "Jan 1 2012 sepatutnya minggu 1"); test.equal(moment([2012, 0, 7]).format('w ww wo'), '2 02 2', "Jan 7 2012 sepatutnya minggu 2"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', "Jan 8 2012 sepatutnya minggu 2"); test.equal(moment([2012, 0, 14]).format('w ww wo'), '3 03 3', "Jan 14 2012 sepatutnya minggu 3"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', "Jan 15 2012 sepatutnya minggu 3"); test.done(); } }; assets/plugins/moment/test/lang/lt.js000064400000046324152510437710013721 0ustar00var moment = require("../../moment"); /************************************************** Lithuanian *************************************************/ exports["lang:lt"] = { setUp : function (cb) { moment.lang('lt'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'sausio sau_vasario vas_kovo kov_balandžio bal_gegužės geg_biržėlio bir_liepos lie_rugpjūčio rgp_rugsėjo rgs_spalio spa_lapkričio lap_gruodžio grd'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, Do MMMM YYYY, h:mm:ss a', 'sekmadienis, 14-oji vasario 2010, 3:25:50 pm'], ['ddd, hA', 'Sek, 3PM'], ['M Mo MM MMMM MMM', '2 2-oji 02 vasario vas'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14-oji 14'], ['d do dddd ddd dd', '0 0-oji sekmadienis Sek S'], ['DDD DDDo DDDD', '45 45-oji 045'], ['w wo ww', '6 6-oji 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['DDDo [metų diena]', '45-oji metų diena'], ['L', '2010-02-14'], ['LL', '2010 m. vasario 14 d.'], ['LLL', '2010 m. vasario 14 d., 15:25 val.'], ['LLLL', '2010 m. vasario 14 d., sekmadienis, 15:25 val.'], ['l', '2010-02-14'], ['ll', '2010 m. vasario 14 d.'], ['lll', '2010 m. vasario 14 d., 15:25 val.'], ['llll', '2010 m. vasario 14 d., Sek, 15:25 val.'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1-oji', '1-oji'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2-oji', '2-oji'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3-oji', '3-oji'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4-oji', '4-oji'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5-oji', '5-oji'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6-oji', '6-oji'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7-oji', '7-oji'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8-oji', '8-oji'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9-oji', '9-oji'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10-oji', '10-oji'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11-oji', '11-oji'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12-oji', '12-oji'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13-oji', '13-oji'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14-oji', '14-oji'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15-oji', '15-oji'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16-oji', '16-oji'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17-oji', '17-oji'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18-oji', '18-oji'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19-oji', '19-oji'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20-oji', '20-oji'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21-oji', '21-oji'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22-oji', '22-oji'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23-oji', '23-oji'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24-oji', '24-oji'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25-oji', '25-oji'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26-oji', '26-oji'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27-oji', '27-oji'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28-oji', '28-oji'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29-oji', '29-oji'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30-oji', '30-oji'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31-oji', '31-oji'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'sausio sau_vasario vas_kovo kov_balandžio bal_gegužės geg_biržėlio bir_liepos lie_rugpjūčio rgp_rugsėjo rgs_spalio spa_lapkričio lap_gruodžio grd'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'sekmadienis Sek S_pirmadienis Pir P_antradienis Ant A_trečiadienis Tre T_ketvirtadienis Ket K_penktadienis Pen Pn_šeštadienis Šeš Š'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(37); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "kelios sekundės", "44 seconds = seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "minutė", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "minutė", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutės", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 10}), true), "10 minučių", "10 minutes = 10 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 11}), true), "11 minučių", "11 minutes = 11 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 19}), true), "19 minučių", "19 minutes = 19 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 20}), true), "20 minučių", "20 minutes = 20 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutės", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "valanda", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "valanda", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 valandos", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 valandos", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 10}), true), "10 valandų", "10 hours = 10 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 valandos", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "diena", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "diena", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dienos", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "diena", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dienos", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 10}), true), "10 dienų", "10 days = 10 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dienos", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "mėnuo", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "mėnuo", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "mėnuo", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 mėnesiai", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 mėnesiai", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mėnesiai", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "mėnuo", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mėnesiai", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 10}), true), "10 mėnesių", "10 months = 10 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 mėnesių", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "metai", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "metai", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 metai", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "metai", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 metai", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "po kelių sekundžių", "prefix"); test.equal(moment(0).from(30000), "prieš kelias sekundes", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "prieš kelias sekundes", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "po kelių sekundžių", "in seconds"); test.equal(moment().add({d: 5}).fromNow(), "po 5 dienų", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Šiandien 02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Šiandien 02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Šiandien 03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Rytoj 02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Šiandien 01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Vakar 02:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[Praėjusį] dddd LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[Praėjusį] dddd LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[Praėjusį] dddd LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4th is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52-oji', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1-oji', "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1-oji', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2-oji', "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2-oji', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/test/lang/sk.js000064400000054452152510437710013720 0ustar00var moment = require("../../moment"); /************************************************** Slovak *************************************************/ exports["lang:sk"] = { setUp : function (cb) { moment.lang('sk'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'január jan._február feb._marec mar._apríl apr._máj máj_jún jún._júl júl._august aug._september sep._október okt._november nov._december dec.'.split("_"), i; function equalTest(input, mmm, monthIndex) { test.equal(moment(input, mmm).month(), monthIndex, input + ' should be month ' + (monthIndex + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss', 'nedeľa, február 14. 2010, 3:25:50'], ['ddd, h', 'ne, 3'], ['M Mo MM MMMM MMM', '2 2. 02 február feb'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14. 14'], ['d do dddd ddd dd', '0 0. nedeľa ne ne'], ['DDD DDDo DDDD', '45 45. 045'], ['w wo ww', '6 6. 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['DDDo [deň v roku]', '45. deň v roku'], ['L', '14.02.2010'], ['LL', '14. február 2010'], ['LLL', '14. február 2010 15:25'], ['LLLL', 'nedeľa 14. február 2010 15:25'], ['l', '14.2.2010'], ['ll', '14. feb 2010'], ['lll', '14. feb 2010 15:25'], ['llll', 'ne 14. feb 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'január jan_február feb_marec mar_apríl apr_máj máj_jún jún_júl júl_august aug_september sep_október okt_november nov_december dec'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'nedeľa ne ne_pondelok po po_utorok ut ut_streda st st_štvrtok št št_piatok pi pi_sobota so so'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "pár sekúnd", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "minúta", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "minúta", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minúty", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minút", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "hodina", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "hodina", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 hodiny", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 hodín", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 hodín", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "deň", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "deň", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dni", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "deň", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dní", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dní", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "mesiac", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "mesiac", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "mesiac", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 mesiace", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 mesiace", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mesiace", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "mesiac", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mesiacov", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 mesiacov", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "rok", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "rok", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 roky", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "rok", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 rokov", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "za pár sekúnd", "prefix"); test.equal(moment(0).from(30000), "pred pár sekundami", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "pred pár sekundami", "now from now should display as in the past"); test.done(); }, "fromNow (future)" : function (test) { test.expect(16); test.equal(moment().add({s: 30}).fromNow(), "za pár sekúnd", "in a few seconds"); test.equal(moment().add({m: 1}).fromNow(), "za minútu", "in a minute"); test.equal(moment().add({m: 3}).fromNow(), "za 3 minúty", "in 3 minutes"); test.equal(moment().add({m: 10}).fromNow(), "za 10 minút", "in 10 minutes"); test.equal(moment().add({h: 1}).fromNow(), "za hodinu", "in an hour"); test.equal(moment().add({h: 3}).fromNow(), "za 3 hodiny", "in 3 hours"); test.equal(moment().add({h: 10}).fromNow(), "za 10 hodín", "in 10 hours"); test.equal(moment().add({d: 1}).fromNow(), "za deň", "in a day"); test.equal(moment().add({d: 3}).fromNow(), "za 3 dni", "in 3 days"); test.equal(moment().add({d: 10}).fromNow(), "za 10 dní", "in 10 days"); test.equal(moment().add({M: 1}).fromNow(), "za mesiac", "in a month"); test.equal(moment().add({M: 3}).fromNow(), "za 3 mesiace", "in 3 months"); test.equal(moment().add({M: 10}).fromNow(), "za 10 mesiacov", "in 10 months"); test.equal(moment().add({y: 1}).fromNow(), "za rok", "in a year"); test.equal(moment().add({y: 3}).fromNow(), "za 3 roky", "in 3 years"); test.equal(moment().add({y: 10}).fromNow(), "za 10 rokov", "in 10 years"); test.done(); }, "fromNow (past)" : function (test) { test.expect(16); test.equal(moment().subtract({s: 30}).fromNow(), "pred pár sekundami", "a few seconds ago"); test.equal(moment().subtract({m: 1}).fromNow(), "pred minútou", "a minute ago"); test.equal(moment().subtract({m: 3}).fromNow(), "pred 3 minútami", "3 minutes ago"); test.equal(moment().subtract({m: 10}).fromNow(), "pred 10 minútami", "10 minutes ago"); test.equal(moment().subtract({h: 1}).fromNow(), "pred hodinou", "an hour ago"); test.equal(moment().subtract({h: 3}).fromNow(), "pred 3 hodinami", "3 hours ago"); test.equal(moment().subtract({h: 10}).fromNow(), "pred 10 hodinami", "10 hours ago"); test.equal(moment().subtract({d: 1}).fromNow(), "pred dňom", "a day ago"); test.equal(moment().subtract({d: 3}).fromNow(), "pred 3 dňami", "3 days ago"); test.equal(moment().subtract({d: 10}).fromNow(), "pred 10 dňami", "10 days ago"); test.equal(moment().subtract({M: 1}).fromNow(), "pred mesiacom", "a month ago"); test.equal(moment().subtract({M: 3}).fromNow(), "pred 3 mesiacmi", "3 months ago"); test.equal(moment().subtract({M: 10}).fromNow(), "pred 10 mesiacmi", "10 months ago"); test.equal(moment().subtract({y: 1}).fromNow(), "pred rokom", "a year ago"); test.equal(moment().subtract({y: 3}).fromNow(), "pred 3 rokmi", "3 years ago"); test.equal(moment().subtract({y: 10}).fromNow(), "pred 10 rokmi", "10 years ago"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "dnes o 2:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "dnes o 2:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "dnes o 3:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "zajtra o 2:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "dnes o 1:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "včera o 2:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m, nextDay; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); nextDay = ''; switch (m.day()) { case 0: nextDay = 'v nedeľu'; break; case 1: nextDay = 'v pondelok'; break; case 2: nextDay = 'v utorok'; break; case 3: nextDay = 'v stredu'; break; case 4: nextDay = 'vo štvrtok'; break; case 5: nextDay = 'v piatok'; break; case 6: nextDay = 'v sobotu'; break; } test.equal(m.calendar(), m.format('[' + nextDay + '] [o] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[' + nextDay + '] [o] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[' + nextDay + '] [o] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m, lastDay; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); lastDay = ''; switch (m.day()) { case 0: lastDay = 'minulú nedeľu'; break; case 1: lastDay = 'minulý pondelok'; break; case 2: lastDay = 'minulý utorok'; break; case 3: lastDay = 'minulú stredu'; break; case 4: lastDay = 'minulý štvrtok'; break; case 5: lastDay = 'minulý piatok'; break; case 6: lastDay = 'minulú sobotu'; break; } test.equal(m.calendar(), m.format('[' + lastDay + '] [o] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[' + lastDay + '] [o] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[' + lastDay + '] [o] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, "humanize duration" : function (test) { test.expect(4); test.equal(moment.duration(1, "minutes").humanize(), "minúta", "a minute (future)"); test.equal(moment.duration(1, "minutes").humanize(true), "za minútu", "in a minute"); test.equal(moment.duration(-1, "minutes").humanize(), "minúta", "a minute (past)"); test.equal(moment.duration(-1, "minutes").humanize(true), "pred minútou", "a minute ago"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4th is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/test/lang/ar-ma.js000064400000044453152510437710014300 0ustar00// moment.js Moroccan arabic (ar-ma) tests // author: Abdel Said : https://github.com/abdelsaid var moment = require("../../moment"); exports["lang:ar-ma"] = { setUp : function (cb) { moment.lang('ar-ma'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'يناير:يناير_فبراير:فبراير_مارس:مارس_أبريل:أبريل_ماي:ماي_يونيو:يونيو_يوليوز:يوليوز_غشت:غشت_شتنبر:شتنبر_أكتوبر:أكتوبر_نونبر:نونبر_دجنبر:دجنبر'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(':'); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'الأحد, فبراير 14 2010, 3:25:50 pm'], ['ddd, hA', 'احد, 3PM'], ['M Mo MM MMMM MMM', '2 2 02 فبراير فبراير'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14 14'], ['d do dddd ddd dd', '0 0 الأحد احد ح'], ['DDD DDDo DDDD', '45 45 045'], ['w wo ww', '8 8 08'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45 day of the year'], ['L', '14/02/2010'], ['LL', '14 فبراير 2010'], ['LLL', '14 فبراير 2010 15:25'], ['LLLL', 'الأحد 14 فبراير 2010 15:25'], ['l', '14/2/2010'], ['ll', '14 فبراير 2010'], ['lll', '14 فبراير 2010 15:25'], ['llll', 'احد 14 فبراير 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'يناير يناير_فبراير فبراير_مارس مارس_أبريل أبريل_ماي ماي_يونيو يونيو_يوليوز يوليوز_غشت غشت_شتنبر شتنبر_أكتوبر أكتوبر_نونبر نونبر_دجنبر دجنبر'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'الأحد احد ح_الإتنين اتنين ن_الثلاثاء ثلاثاء ث_الأربعاء اربعاء ر_الخميس خميس خ_الجمعة جمعة ج_السبت سبت س'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "ثوان", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "دقيقة", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "دقيقة", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 دقائق", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 دقائق", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "ساعة", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "ساعة", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 ساعات", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 ساعات", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 ساعات", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "يوم", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "يوم", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 أيام", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "يوم", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 أيام", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 أيام", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "شهر", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "شهر", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "شهر", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 أشهر", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 أشهر", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 أشهر", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "شهر", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 أشهر", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 أشهر", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "سنة", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "سنة", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 سنوات", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "سنة", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 سنوات", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "في ثوان", "prefix"); test.equal(moment(0).from(30000), "منذ ثوان", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "منذ ثوان", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "في ثوان", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "في 5 أيام", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "اليوم على الساعة 02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "اليوم على الساعة 02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "اليوم على الساعة 03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "غدا على الساعة 02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "اليوم على الساعة 01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "أمس على الساعة 02:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({d: i}); test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Saturday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2011, 11, 31]).week(), 1, "Dec 31 2011 should be week 1"); test.equal(moment([2012, 0, 6]).week(), 1, "Jan 6 2012 should be week 1"); test.equal(moment([2012, 0, 7]).week(), 2, "Jan 7 2012 should be week 2"); test.equal(moment([2012, 0, 13]).week(), 2, "Jan 13 2012 should be week 2"); test.equal(moment([2012, 0, 14]).week(), 3, "Jan 14 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2006, 11, 30]).week(), 1, "Dec 30 2006 should be week 1"); test.equal(moment([2007, 0, 5]).week(), 1, "Jan 5 2007 should be week 1"); test.equal(moment([2007, 0, 6]).week(), 2, "Jan 6 2007 should be week 2"); test.equal(moment([2007, 0, 12]).week(), 2, "Jan 12 2007 should be week 2"); test.equal(moment([2007, 0, 13]).week(), 3, "Jan 13 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 29]).week(), 1, "Dec 29 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 4]).week(), 1, "Jan 4 2008 should be week 1"); test.equal(moment([2008, 0, 5]).week(), 2, "Jan 5 2008 should be week 2"); test.equal(moment([2008, 0, 11]).week(), 2, "Jan 11 2008 should be week 2"); test.equal(moment([2008, 0, 12]).week(), 3, "Jan 12 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 28]).week(), 1, "Dec 28 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 3]).week(), 1, "Jan 3 2003 should be week 1"); test.equal(moment([2003, 0, 4]).week(), 2, "Jan 4 2003 should be week 2"); test.equal(moment([2003, 0, 10]).week(), 2, "Jan 10 2003 should be week 2"); test.equal(moment([2003, 0, 11]).week(), 3, "Jan 11 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 27]).week(), 1, "Dec 27 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 2]).week(), 1, "Jan 2 2009 should be week 1"); test.equal(moment([2009, 0, 3]).week(), 2, "Jan 3 2009 should be week 2"); test.equal(moment([2009, 0, 9]).week(), 2, "Jan 9 2009 should be week 2"); test.equal(moment([2009, 0, 10]).week(), 3, "Jan 10 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(5); test.equal(moment([2009, 11, 26]).week(), 1, "Dec 26 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 2]).week(), 2, "Jan 2 2010 should be week 2"); test.equal(moment([2010, 0, 8]).week(), 2, "Jan 8 2010 should be week 2"); test.equal(moment([2010, 0, 9]).week(), 3, "Jan 9 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(5); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 7]).week(), 1, "Jan 7 2011 should be week 1"); test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); test.equal(moment([2011, 0, 14]).week(), 2, "Jan 14 2011 should be week 2"); test.equal(moment([2011, 0, 15]).week(), 3, "Jan 15 2011 should be week 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2011, 11, 31]).format('w ww wo'), '1 01 1', "Dec 31 2011 should be week 1"); test.equal(moment([2012, 0, 6]).format('w ww wo'), '1 01 1', "Jan 6 2012 should be week 1"); test.equal(moment([2012, 0, 7]).format('w ww wo'), '2 02 2', "Jan 7 2012 should be week 2"); test.equal(moment([2012, 0, 13]).format('w ww wo'), '2 02 2', "Jan 13 2012 should be week 2"); test.equal(moment([2012, 0, 14]).format('w ww wo'), '3 03 3', "Jan 14 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/nl.js000064400000045136152510437720013714 0ustar00var moment = require("../../moment"); /************************************************** Dutch *************************************************/ exports["lang:nl"] = { setUp : function (cb) { moment.lang('nl'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'januari jan._februari feb._maart mrt._april apr._mei mei._juni jun._juli jul._augustus aug._september sep._oktober okt._november nov._december dec.'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, HH:mm:ss', 'zondag, februari 14de 2010, 15:25:50'], ['ddd, HH', 'zo., 15'], ['M Mo MM MMMM MMM', '2 2de 02 februari feb.'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14de 14'], ['d do dddd ddd dd', '0 0de zondag zo. Zo'], ['DDD DDDo DDDD', '45 45ste 045'], ['w wo ww', '6 6de 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45ste day of the year'], ['L', '14-02-2010'], ['LL', '14 februari 2010'], ['LLL', '14 februari 2010 15:25'], ['LLLL', 'zondag 14 februari 2010 15:25'], ['l', '14-2-2010'], ['ll', '14 feb. 2010'], ['lll', '14 feb. 2010 15:25'], ['llll', 'zo. 14 feb. 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1ste', '1ste'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2de', '2de'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3de', '3de'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4de', '4de'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5de', '5de'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6de', '6de'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7de', '7de'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8ste', '8ste'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9de', '9de'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10de', '10de'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11de', '11de'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12de', '12de'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13de', '13de'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14de', '14de'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15de', '15de'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16de', '16de'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17de', '17de'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18de', '18de'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19de', '19de'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20ste', '20ste'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21ste', '21ste'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22ste', '22ste'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23ste', '23ste'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24ste', '24ste'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25ste', '25ste'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26ste', '26ste'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27ste', '27ste'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28ste', '28ste'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29ste', '29ste'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30ste', '30ste'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31ste', '31ste'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'januari jan._februari feb._maart mrt._april apr._mei mei_juni jun._juli jul._augustus aug._september sep._oktober okt._november nov._december dec.'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'zondag zo. Zo_maandag ma. Ma_dinsdag di. Di_woensdag wo. Wo_donderdag do. Do_vrijdag vr. Vr_zaterdag za. Za'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "een paar seconden", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "één minuut", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "één minuut", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minuten", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minuten", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "één uur", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "één uur", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 uur", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 uur", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 uur", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "één dag", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "één dag", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dagen", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "één dag", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dagen", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dagen", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "één maand", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "één maand", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "één maand", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 maanden", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 maanden", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 maanden", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "één maand", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 maanden", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 maanden", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "één jaar", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "één jaar", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 jaar", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "één jaar", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 jaar", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "over een paar seconden", "prefix"); test.equal(moment(0).from(30000), "een paar seconden geleden", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "een paar seconden geleden", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "over een paar seconden", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "over 5 dagen", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "vandaag om 02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "vandaag om 02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "vandaag om 03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "morgen om 02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "vandaag om 01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "gisteren om 02:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [om] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [om] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [om] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[afgelopen] dddd [om] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[afgelopen] dddd [om] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[afgelopen] dddd [om] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, "month abbreviation" : function (test) { test.expect(2); test.equal(moment([2012, 5, 23]).format('D-MMM-YYYY'), '23-jun-2012', 'format month abbreviation surrounded by dashes should not include a dot'); test.equal(moment([2012, 5, 23]).format('D MMM YYYY'), '23 jun. 2012', 'format month abbreviation not surrounded by dashes should include a dot'); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4th is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52ste', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1ste', "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1ste', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2de', "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2de', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/test/lang/tr.js000064400000045203152510437720013723 0ustar00var moment = require("../../moment"); /************************************************** Turkish *************************************************/ exports["lang:tr"] = { setUp : function (cb) { moment.lang('tr'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'Ocak Oca_Şubat Şub_Mart Mar_Nisan Nis_Mayıs May_Haziran Haz_Temmuz Tem_Ağustos Ağu_Eylül Eyl_Ekim Eki_Kasım Kas_Aralık Ara'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Pazar, Şubat 14\'üncü 2010, 3:25:50 pm'], ['ddd, hA', 'Paz, 3PM'], ['M Mo MM MMMM MMM', '2 2\'nci 02 Şubat Şub'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14\'üncü 14'], ['d do dddd ddd dd', '0 0\'ıncı Pazar Paz Pz'], ['DDD DDDo DDDD', '45 45\'inci 045'], ['w wo ww', "7 7'nci 07"], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[yılın] DDDo [günü]', 'yılın 45\'inci günü'], ['L', '14.02.2010'], ['LL', '14 Şubat 2010'], ['LLL', '14 Şubat 2010 15:25'], ['LLLL', 'Pazar, 14 Şubat 2010 15:25'], ['l', '14.2.2010'], ['ll', '14 Şub 2010'], ['lll', '14 Şub 2010 15:25'], ['llll', 'Paz, 14 Şub 2010 15:25'] ], DDDo = [ [359, '360\'ıncı'], [199, '200\'üncü'], [149, '150\'nci'] ], dt = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), DDDoDt, i; test.expect(a.length + DDDo.length); for (i = 0; i < a.length; i++) { test.equal(dt.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } for (i = 0; i < DDDo.length; i++) { DDDoDt = moment([2010]); test.equal(DDDoDt.add('days', DDDo[i][0]).format('DDDo'), DDDo[i][1], DDDo[i][0] + ' ---> ' + DDDo[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1\'inci', '1st'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2\'nci', '2nd'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3\'üncü', '3rd'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4\'üncü', '4th'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5\'inci', '5th'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6\'ncı', '6th'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7\'nci', '7th'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8\'inci', '8th'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9\'uncu', '9th'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10\'uncu', '10th'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11\'inci', '11th'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12\'nci', '12th'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13\'üncü', '13th'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14\'üncü', '14th'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15\'inci', '15th'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16\'ncı', '16th'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17\'nci', '17th'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18\'inci', '18th'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19\'uncu', '19th'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20\'nci', '20th'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21\'inci', '21th'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22\'nci', '22th'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23\'üncü', '23th'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24\'üncü', '24th'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25\'inci', '25th'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26\'ncı', '26th'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27\'nci', '27th'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28\'inci', '28th'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29\'uncu', '29th'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30\'uncu', '30th'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31\'inci', '31st'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'Ocak Oca_Şubat Şub_Mart Mar_Nisan Nis_Mayıs May_Haziran Haz_Temmuz Tem_Ağustos Ağu_Eylül Eyl_Ekim Eki_Kasım Kas_Aralık Ara'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'Pazar Paz Pz_Pazartesi Pts Pt_Salı Sal Sa_Çarşamba Çar Ça_Perşembe Per Pe_Cuma Cum Cu_Cumartesi Cts Ct'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "birkaç saniye", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "bir dakika", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "bir dakika", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 dakika", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 dakika", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "bir saat", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "bir saat", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 saat", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 saat", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 saat", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "bir gün", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "bir gün", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 gün", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "bir gün", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 gün", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 gün", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "bir ay", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "bir ay", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "bir ay", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 ay", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 ay", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 ay", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "bir ay", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 ay", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 ay", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "bir yıl", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "bir yıl", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 yıl", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "bir yıl", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 yıl", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "birkaç saniye sonra", "prefix"); test.equal(moment(0).from(30000), "birkaç saniye önce", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "birkaç saniye önce", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "birkaç saniye sonra", "in a few seconds"); test.equal(moment().add({d: 5}).fromNow(), "5 gün sonra", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "bugün saat 02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "bugün saat 02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "bugün saat 03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "yarın saat 02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "bugün saat 01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "dün 02:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('[haftaya] dddd [saat] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[haftaya] dddd [saat] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[haftaya] dddd [saat] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[geçen hafta] dddd [saat] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[geçen hafta] dddd [saat] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[geçen hafta] dddd [saat] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).format('w ww wo'), "1 01 1'inci", "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).format('w ww wo'), "1 01 1'inci", "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).format('w ww wo'), "2 02 2'nci", "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).format('w ww wo'), "2 02 2'nci", "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).format('w ww wo'), "3 03 3'üncü", "Jan 9 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/ne.js000064400000052555152510437720013710 0ustar00var moment = require("../../moment"); /************************************************** Nepali *************************************************/ exports["lang:ne"] = { setUp : function (cb) { moment.lang('ne'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'जनवरी जन._फेब्रुवरी फेब्रु._मार्च मार्च_अप्रिल अप्रि._मई मई_जुन जुन_जुलाई जुलाई._अगष्ट अग._सेप्टेम्बर सेप्ट._अक्टोबर अक्टो._नोभेम्बर नोभे._डिसेम्बर डिसे.'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(21); var a = [ ['dddd, Do MMMM YYYY, aको h:mm:ss बजे', 'आइतबार, १४ फेब्रुवरी २०१०, बेलुकाको ३:२५:५० बजे'], ['ddd, aको h बजे', 'आइत., बेलुकाको ३ बजे'], ['M Mo MM MMMM MMM', '२ २ ०२ फेब्रुवरी फेब्रु.'], ['YYYY YY', '२०१० १०'], ['D Do DD', '१४ १४ १४'], ['d do dddd ddd dd', '० ० आइतबार आइत. आइ.'], ['DDD DDDo DDDD', '४५ ४५ ०४५'], ['w wo ww', '७ ७ ०७'], ['h hh', '३ ०३'], ['H HH', '१५ १५'], ['m mm', '२५ २५'], ['s ss', '५० ५०'], ['a A', 'बेलुका बेलुका'], ['L', '१४/०२/२०१०'], ['LL', '१४ फेब्रुवरी २०१०'], ['LLL', '१४ फेब्रुवरी २०१०, बेलुकाको ३:२५ बजे'], ['LLLL', 'आइतबार, १४ फेब्रुवरी २०१०, बेलुकाको ३:२५ बजे'], ['l', '१४/२/२०१०'], ['ll', '१४ फेब्रु. २०१०'], ['lll', '१४ फेब्रु. २०१०, बेलुकाको ३:२५ बजे'], ['llll', 'आइत., १४ फेब्रु. २०१०, बेलुकाको ३:२५ बजे'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '१', '१'); test.equal(moment([2011, 0, 2]).format('DDDo'), '२', '२'); test.equal(moment([2011, 0, 3]).format('DDDo'), '३', '३'); test.equal(moment([2011, 0, 4]).format('DDDo'), '४', '४'); test.equal(moment([2011, 0, 5]).format('DDDo'), '५', '५'); test.equal(moment([2011, 0, 6]).format('DDDo'), '६', '६'); test.equal(moment([2011, 0, 7]).format('DDDo'), '७', '७'); test.equal(moment([2011, 0, 8]).format('DDDo'), '८', '८'); test.equal(moment([2011, 0, 9]).format('DDDo'), '९', '९'); test.equal(moment([2011, 0, 10]).format('DDDo'), '१०', '१०'); test.equal(moment([2011, 0, 11]).format('DDDo'), '११', '११'); test.equal(moment([2011, 0, 12]).format('DDDo'), '१२', '१२'); test.equal(moment([2011, 0, 13]).format('DDDo'), '१३', '१३'); test.equal(moment([2011, 0, 14]).format('DDDo'), '१४', '१४'); test.equal(moment([2011, 0, 15]).format('DDDo'), '१५', '१५'); test.equal(moment([2011, 0, 16]).format('DDDo'), '१६', '१६'); test.equal(moment([2011, 0, 17]).format('DDDo'), '१७', '१७'); test.equal(moment([2011, 0, 18]).format('DDDo'), '१८', '१८'); test.equal(moment([2011, 0, 19]).format('DDDo'), '१९', '१९'); test.equal(moment([2011, 0, 20]).format('DDDo'), '२०', '२०'); test.equal(moment([2011, 0, 21]).format('DDDo'), '२१', '२१'); test.equal(moment([2011, 0, 22]).format('DDDo'), '२२', '२२'); test.equal(moment([2011, 0, 23]).format('DDDo'), '२३', '२३'); test.equal(moment([2011, 0, 24]).format('DDDo'), '२४', '२४'); test.equal(moment([2011, 0, 25]).format('DDDo'), '२५', '२५'); test.equal(moment([2011, 0, 26]).format('DDDo'), '२६', '२६'); test.equal(moment([2011, 0, 27]).format('DDDo'), '२७', '२७'); test.equal(moment([2011, 0, 28]).format('DDDo'), '२८', '२८'); test.equal(moment([2011, 0, 29]).format('DDDo'), '२९', '२९'); test.equal(moment([2011, 0, 30]).format('DDDo'), '३०', '३०'); test.equal(moment([2011, 0, 31]).format('DDDo'), '३१', '३१'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'जनवरी जन._फेब्रुवरी फेब्रु._मार्च मार्च_अप्रिल अप्रि._मई मई_जुन जुन_जुलाई जुलाई._अगष्ट अग._सेप्टेम्बर सेप्ट._अक्टोबर अक्टो._नोभेम्बर नोभे._डिसेम्बर डिसे.'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'आइतबार आइत. आइ._सोमबार सोम. सो._मङ्गलबार मङ्गल. मङ्_बुधबार बुध. बु._बिहिबार बिहि. बि._शुक्रबार शुक्र. शु._शनिबार शनि. श.'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "केही समय", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "एक मिनेट", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "एक मिनेट", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "२ मिनेट", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "४४ मिनेट", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "एक घण्टा", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "एक घण्टा", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "२ घण्टा", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "५ घण्टा", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "२१ घण्टा", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "एक दिन", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "एक दिन", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "२ दिन", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "एक दिन", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "५ दिन", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "२५ दिन", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "एक महिना", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "एक महिना", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "एक महिना", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "२ महिना", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "२ महिना", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "३ महिना", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "एक महिना", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "५ महिना", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "११ महिना", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "एक बर्ष", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "एक बर्ष", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "२ बर्ष", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "एक बर्ष", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "५ बर्ष", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "केही समयमा", "prefix"); test.equal(moment(0).from(30000), "केही समय अगाडी", "suffix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "केही समय अगाडी", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "केही समयमा", "केही समयमा"); test.equal(moment().add({d: 5}).fromNow(), "५ दिनमा", "५ दिनमा"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "आज रातीको २:०० बजे", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "आज रातीको २:२५ बजे", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "आज बिहानको ३:०० बजे", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "भोली रातीको २:०० बजे", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "आज रातीको १:०० बजे", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "हिजो रातीको २:०० बजे", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('[आउँदो] dddd[,] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[आउँदो] dddd[,] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[आउँदो] dddd[,] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[गएको] dddd[,] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[गएको] dddd[,] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[गएको] dddd[,] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, "meridiem" : function (test) { test.expect(12); test.equal(moment([2011, 2, 23, 2, 30]).format('a'), "राती", "before dawn"); test.equal(moment([2011, 2, 23, 9, 30]).format('a'), "बिहान", "morning"); test.equal(moment([2011, 2, 23, 14, 30]).format('a'), "दिउँसो", "during day"); test.equal(moment([2011, 2, 23, 17, 30]).format('a'), "बेलुका", "evening"); test.equal(moment([2011, 2, 23, 19, 30]).format('a'), "साँझ", "late evening"); test.equal(moment([2011, 2, 23, 21, 20]).format('a'), "राती", "night"); test.equal(moment([2011, 2, 23, 2, 30]).format('A'), "राती", "before dawn"); test.equal(moment([2011, 2, 23, 9, 30]).format('A'), "बिहान", "morning"); test.equal(moment([2011, 2, 23, 14, 30]).format('A'), "दिउँसो", "during day"); test.equal(moment([2011, 2, 23, 17, 30]).format('A'), "बेलुका", "evening"); test.equal(moment([2011, 2, 23, 19, 30]).format('A'), "साँझ", "late evening"); test.equal(moment([2011, 2, 23, 21, 20]).format('A'), "राती", "night"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).format('w ww wo'), '१ ०१ १', "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).format('w ww wo'), '१ ०१ १', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '२ ०२ २', "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '२ ०२ २', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '३ ०३ ३', "Jan 9 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/eo.js000064400000044007152510437720013702 0ustar00var moment = require("../../moment"); /************************************************** Esperanto *************************************************/ exports["lang:eo"] = { setUp : function (cb) { moment.lang('eo'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'januaro jan_februaro feb_marto mar_aprilo apr_majo maj_junio jun_julio jul_aŭgusto aŭg_septembro sep_oktobro okt_novembro nov_decembro dec'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Dimanĉo, februaro 14a 2010, 3:25:50 p.t.m.'], ['ddd, hA', 'Dim, 3P.T.M.'], ['M Mo MM MMMM MMM', '2 2a 02 februaro feb'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14a 14'], ['d do dddd ddd dd', '0 0a Dimanĉo Dim Di'], ['DDD DDDo DDDD', '45 45a 045'], ['w wo ww', '7 7a 07'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'p.t.m. P.T.M.'], ['[la] DDDo [tago] [de] [la] [jaro]', 'la 45a tago de la jaro'], ['L', '2010-02-14'], ['LL', '14-an de februaro, 2010'], ['LLL', '14-an de februaro, 2010 15:25'], ['LLLL', 'Dimanĉo, la 14-an de februaro, 2010 15:25'], ['l', '2010-2-14'], ['ll', '14-an de feb, 2010'], ['lll', '14-an de feb, 2010 15:25'], ['llll', 'Dim, la 14-an de feb, 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1a', '1a'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2a', '2a'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3a', '3a'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4a', '4a'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5a', '5a'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6a', '6a'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7a', '7a'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8a', '8a'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9a', '9a'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10a', '10a'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11a', '11a'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12a', '12a'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13a', '13a'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14a', '14a'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15a', '15a'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16a', '16a'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17a', '17a'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18a', '18a'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19a', '19a'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20a', '20a'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21a', '21a'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22a', '22a'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23a', '23a'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24a', '24a'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25a', '25a'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26a', '26a'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27a', '27a'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28a', '28a'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29a', '29a'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30a', '30a'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31a', '31a'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'januaro jan_februaro feb_marto mar_aprilo apr_majo maj_junio jun_julio jul_aŭgusto aŭg_septembro sep_oktobro okt_novembro nov_decembro dec'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'Dimanĉo Dim Di_Lundo Lun Lu_Mardo Mard Ma_Merkredo Merk Me_Ĵaŭdo Ĵaŭ Ĵa_Vendredo Ven Ve_Sabato Sab Sa'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "sekundoj", "44 seconds = a few seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "minuto", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "minuto", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutoj", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutoj", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "horo", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "horo", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 horoj", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 horoj", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 horoj", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "tago", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "tago", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 tagoj", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "tago", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 tagoj", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 tagoj", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "monato", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "monato", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "monato", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 monatoj", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 monatoj", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 monatoj", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "monato", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 monatoj", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 monatoj", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "jaro", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "jaro", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 jaroj", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "jaro", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 jaroj", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "je sekundoj", "je prefix"); test.equal(moment(0).from(30000), "antaŭ sekundoj", "antaŭ prefix"); test.done(); }, "now from now" : function (test) { test.expect(1); test.equal(moment().fromNow(), "antaŭ sekundoj", "now from now should display as in the past"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "je sekundoj", "je sekundoj"); test.equal(moment().add({d: 5}).fromNow(), "je 5 tagoj", "je 5 tagoj"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Hodiaŭ je 02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Hodiaŭ je 02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Hodiaŭ je 03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Morgaŭ je 02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Hodiaŭ je 01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Hieraŭ je 02:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [je] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [je] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [je] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format('[pasinta] dddd [je] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('[pasinta] dddd [je] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('[pasinta] dddd [je] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 1st is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1a', "Dec 26 2011 should be week 1"); test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1a', "Jan 1 2012 should be week 1"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2a', "Jan 2 2012 should be week 2"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2a', "Jan 8 2012 should be week 2"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3a', "Jan 9 2012 should be week 3"); test.done(); } }; assets/plugins/moment/test/lang/pt.js000064400000043775152510437720013735 0ustar00var moment = require("../../moment"); /************************************************** Portuguese *************************************************/ exports["lang:pt"] = { setUp : function (cb) { moment.lang('pt'); cb(); }, tearDown : function (cb) { moment.lang('en'); cb(); }, "parse" : function (test) { test.expect(96); var tests = 'Janeiro Jan_Fevereiro Fev_Março Mar_Abril Abr_Maio Mai_Junho Jun_Julho Jul_Agosto Ago_Setembro Set_Outubro Out_Novembro Nov_Dezembro Dez'.split("_"), i; function equalTest(input, mmm, i) { test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); } for (i = 0; i < 12; i++) { tests[i] = tests[i].split(' '); equalTest(tests[i][0], 'MMM', i); equalTest(tests[i][1], 'MMM', i); equalTest(tests[i][0], 'MMMM', i); equalTest(tests[i][1], 'MMMM', i); equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); } test.done(); }, "format" : function (test) { test.expect(22); var a = [ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Domingo, Fevereiro 14º 2010, 3:25:50 pm'], ['ddd, hA', 'Dom, 3PM'], ['M Mo MM MMMM MMM', '2 2º 02 Fevereiro Fev'], ['YYYY YY', '2010 10'], ['D Do DD', '14 14º 14'], ['d do dddd ddd dd', '0 0º Domingo Dom Dom'], ['DDD DDDo DDDD', '45 45º 045'], ['w wo ww', '6 6º 06'], ['h hh', '3 03'], ['H HH', '15 15'], ['m mm', '25 25'], ['s ss', '50 50'], ['a A', 'pm PM'], ['[the] DDDo [day of the year]', 'the 45º day of the year'], ['L', '14/02/2010'], ['LL', '14 de Fevereiro de 2010'], ['LLL', '14 de Fevereiro de 2010 15:25'], ['LLLL', 'Domingo, 14 de Fevereiro de 2010 15:25'], ['l', '14/2/2010'], ['ll', '14 de Fev de 2010'], ['lll', '14 de Fev de 2010 15:25'], ['llll', 'Dom, 14 de Fev de 2010 15:25'] ], b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), i; for (i = 0; i < a.length; i++) { test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); } test.done(); }, "format ordinal" : function (test) { test.expect(31); test.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º'); test.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º'); test.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º'); test.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º'); test.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º'); test.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º'); test.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º'); test.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º'); test.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º'); test.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º'); test.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º'); test.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º'); test.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º'); test.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º'); test.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º'); test.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º'); test.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º'); test.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º'); test.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º'); test.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º'); test.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º'); test.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º'); test.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º'); test.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º'); test.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º'); test.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º'); test.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º'); test.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º'); test.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º'); test.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º'); test.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º'); test.done(); }, "format month" : function (test) { test.expect(12); var expected = 'Janeiro Jan_Fevereiro Fev_Março Mar_Abril Abr_Maio Mai_Junho Jun_Julho Jul_Agosto Ago_Setembro Set_Outubro Out_Novembro Nov_Dezembro Dez'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); } test.done(); }, "format week" : function (test) { test.expect(7); var expected = 'Domingo Dom Dom_Segunda-feira Seg 2ª_Terça-feira Ter 3ª_Quarta-feira Qua 4ª_Quinta-feira Qui 5ª_Sexta-feira Sex 6ª_Sábado Sáb Sáb'.split("_"), i; for (i = 0; i < expected.length; i++) { test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); } test.done(); }, "from" : function (test) { test.expect(30); var start = moment([2007, 1, 28]); test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "segundos", "44 seconds = seconds"); test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "um minuto", "45 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "um minuto", "89 seconds = a minute"); test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutos", "90 seconds = 2 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutos", "44 minutes = 44 minutes"); test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "uma hora", "45 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "uma hora", "89 minutes = an hour"); test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 horas", "90 minutes = 2 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 horas", "5 hours = 5 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 horas", "21 hours = 21 hours"); test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "um dia", "22 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "um dia", "35 hours = a day"); test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dias", "36 hours = 2 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "um dia", "1 day = a day"); test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dias", "5 days = 5 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dias", "25 days = 25 days"); test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "um mês", "26 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "um mês", "30 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 45}), true), "um mês", "45 days = a month"); test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 meses", "46 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 meses", "75 days = 2 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 meses", "76 days = 3 months"); test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "um mês", "1 month = a month"); test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 meses", "5 months = 5 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 344}), true), "11 meses", "344 days = 11 months"); test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "um ano", "345 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 547}), true), "um ano", "547 days = a year"); test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 anos", "548 days = 2 years"); test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "um ano", "1 year = a year"); test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 anos", "5 years = 5 years"); test.done(); }, "suffix" : function (test) { test.expect(2); test.equal(moment(30000).from(0), "em segundos", "prefix"); test.equal(moment(0).from(30000), "segundos atrás", "suffix"); test.done(); }, "fromNow" : function (test) { test.expect(2); test.equal(moment().add({s: 30}).fromNow(), "em segundos", "in seconds"); test.equal(moment().add({d: 5}).fromNow(), "em 5 dias", "in 5 days"); test.done(); }, "calendar day" : function (test) { test.expect(6); var a = moment().hours(2).minutes(0).seconds(0); test.equal(moment(a).calendar(), "Hoje às 02:00", "today at the same time"); test.equal(moment(a).add({ m: 25 }).calendar(), "Hoje às 02:25", "Now plus 25 min"); test.equal(moment(a).add({ h: 1 }).calendar(), "Hoje às 03:00", "Now plus 1 hour"); test.equal(moment(a).add({ d: 1 }).calendar(), "Amanhã às 02:00", "tomorrow at the same time"); test.equal(moment(a).subtract({ h: 1 }).calendar(), "Hoje às 01:00", "Now minus 1 hour"); test.equal(moment(a).subtract({ d: 1 }).calendar(), "Ontem às 02:00", "yesterday at the same time"); test.done(); }, "calendar next week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().add({ d: i }); test.equal(m.calendar(), m.format('dddd [às] LT'), "Today + " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format('dddd [às] LT'), "Today + " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format('dddd [às] LT'), "Today + " + i + " days end of day"); } test.done(); }, "calendar last week" : function (test) { test.expect(15); var i, m; for (i = 2; i < 7; i++) { m = moment().subtract({ d: i }); test.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), "Today - " + i + " days current time"); m.hours(0).minutes(0).seconds(0).milliseconds(0); test.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), "Today - " + i + " days beginning of day"); m.hours(23).minutes(59).seconds(59).milliseconds(999); test.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), "Today - " + i + " days end of day"); } test.done(); }, "calendar all else" : function (test) { test.expect(4); var weeksAgo = moment().subtract({ w: 1 }), weeksFromNow = moment().add({ w: 1 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); weeksAgo = moment().subtract({ w: 2 }); weeksFromNow = moment().add({ w: 2 }); test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); test.done(); }, // Monday is the first day of the week. // The week that contains Jan 4th is the first week of the year. "weeks year starting sunday" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); test.done(); }, "weeks year starting monday" : function (test) { test.expect(5); test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); test.done(); }, "weeks year starting tuesday" : function (test) { test.expect(6); test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); test.done(); }, "weeks year starting wednesday" : function (test) { test.expect(6); test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); test.done(); }, "weeks year starting thursday" : function (test) { test.expect(6); test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); test.done(); }, "weeks year starting friday" : function (test) { test.expect(6); test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); test.done(); }, "weeks year starting saturday" : function (test) { test.expect(6); test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); test.done(); }, "weeks year starting sunday formatted" : function (test) { test.expect(5); test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52º', "Jan 1 2012 should be week 52"); test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1º', "Jan 2 2012 should be week 1"); test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1º', "Jan 8 2012 should be week 1"); test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2º', "Jan 9 2012 should be week 2"); test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2º', "Jan 15 2012 should be week 2"); test.done(); } }; assets/plugins/moment/min/langs.js000064400000477015152510437720013277 0ustar00// moment.js language configuration // language : Moroccan Arabic (ar-ma) // author : ElFadili Yassine : https://github.com/ElFadiliY // author : Abdel Said : https://github.com/abdelsaid (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('ar-ma', { months : "يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"), monthsShort : "يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"), weekdays : "الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"), weekdaysShort : "احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"), weekdaysMin : "ح_ن_ث_ر_خ_ج_س".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: "[اليوم على الساعة] LT", nextDay: '[غدا على الساعة] LT', nextWeek: 'dddd [على الساعة] LT', lastDay: '[أمس على الساعة] LT', lastWeek: 'dddd [على الساعة] LT', sameElse: 'L' }, relativeTime : { future : "في %s", past : "منذ %s", s : "ثوان", m : "دقيقة", mm : "%d دقائق", h : "ساعة", hh : "%d ساعات", d : "يوم", dd : "%d أيام", M : "شهر", MM : "%d أشهر", y : "سنة", yy : "%d سنوات" }, week : { dow : 6, // Saturday is the first day of the week. doy : 12 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : Arabic (ar) // author : Abdel Said : https://github.com/abdelsaid // changes in months, weekdays : Ahmed Elkhatib (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('ar', { months : "يناير/ كانون الثاني_فبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"), monthsShort : "يناير/ كانون الثاني_فبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"), weekdays : "الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"), weekdaysShort : "الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"), weekdaysMin : "ح_ن_ث_ر_خ_ج_س".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: "[اليوم على الساعة] LT", nextDay: '[غدا على الساعة] LT', nextWeek: 'dddd [على الساعة] LT', lastDay: '[أمس على الساعة] LT', lastWeek: 'dddd [على الساعة] LT', sameElse: 'L' }, relativeTime : { future : "في %s", past : "منذ %s", s : "ثوان", m : "دقيقة", mm : "%d دقائق", h : "ساعة", hh : "%d ساعات", d : "يوم", dd : "%d أيام", M : "شهر", MM : "%d أشهر", y : "سنة", yy : "%d سنوات" }, week : { dow : 6, // Saturday is the first day of the week. doy : 12 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : bulgarian (bg) // author : Krasen Borisov : https://github.com/kraz (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('bg', { months : "януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"), monthsShort : "янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"), weekdays : "неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"), weekdaysShort : "нед_пон_вто_сря_чет_пет_съб".split("_"), weekdaysMin : "нд_пн_вт_ср_чт_пт_сб".split("_"), longDateFormat : { LT : "h:mm", L : "D.MM.YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendar : { sameDay : '[Днес в] LT', nextDay : '[Утре в] LT', nextWeek : 'dddd [в] LT', lastDay : '[Вчера в] LT', lastWeek : function () { switch (this.day()) { case 0: case 3: case 6: return '[В изминалата] dddd [в] LT'; case 1: case 2: case 4: case 5: return '[В изминалия] dddd [в] LT'; } }, sameElse : 'L' }, relativeTime : { future : "след %s", past : "преди %s", s : "няколко секунди", m : "минута", mm : "%d минути", h : "час", hh : "%d часа", d : "ден", dd : "%d дни", M : "месец", MM : "%d месеца", y : "година", yy : "%d години" }, ordinal : function (number) { var lastDigit = number % 10, last2Digits = number % 100; if (number === 0) { return number + '-ев'; } else if (last2Digits === 0) { return number + '-ен'; } else if (last2Digits > 10 && last2Digits < 20) { return number + '-ти'; } else if (lastDigit === 1) { return number + '-ви'; } else if (lastDigit === 2) { return number + '-ри'; } else if (lastDigit === 7 || lastDigit === 8) { return number + '-ми'; } else { return number + '-ти'; } }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : breton (br) // author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { function relativeTimeWithMutation(number, withoutSuffix, key) { var format = { 'mm': "munutenn", 'MM': "miz", 'dd': "devezh" }; return number + ' ' + mutation(format[key], number); } function specialMutationForYears(number) { switch (lastNumber(number)) { case 1: case 3: case 4: case 5: case 9: return number + ' bloaz'; default: return number + ' vloaz'; } } function lastNumber(number) { if (number > 9) { return lastNumber(number % 10); } return number; } function mutation(text, number) { if (number === 2) { return softMutation(text); } return text; } function softMutation(text) { var mutationTable = { 'm': 'v', 'b': 'v', 'd': 'z' }; if (mutationTable[text.charAt(0)] === undefined) { return text; } return mutationTable[text.charAt(0)] + text.substring(1); } moment.lang('br', { months : "Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"), monthsShort : "Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"), weekdays : "Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"), weekdaysShort : "Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"), weekdaysMin : "Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"), longDateFormat : { LT : "h[e]mm A", L : "DD/MM/YYYY", LL : "D [a viz] MMMM YYYY", LLL : "D [a viz] MMMM YYYY LT", LLLL : "dddd, D [a viz] MMMM YYYY LT" }, calendar : { sameDay : '[Hiziv da] LT', nextDay : '[Warc\'hoazh da] LT', nextWeek : 'dddd [da] LT', lastDay : '[Dec\'h da] LT', lastWeek : 'dddd [paset da] LT', sameElse : 'L' }, relativeTime : { future : "a-benn %s", past : "%s 'zo", s : "un nebeud segondennoù", m : "ur vunutenn", mm : relativeTimeWithMutation, h : "un eur", hh : "%d eur", d : "un devezh", dd : relativeTimeWithMutation, M : "ur miz", MM : relativeTimeWithMutation, y : "ur bloaz", yy : specialMutationForYears }, ordinal : function (number) { var output = (number === 1) ? 'añ' : 'vet'; return number + output; }, week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : catalan (ca) // author : Juan G. Hurtado : https://github.com/juanghurtado (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('ca', { months : "Gener_Febrer_Març_Abril_Maig_Juny_Juliol_Agost_Setembre_Octubre_Novembre_Desembre".split("_"), monthsShort : "Gen._Febr._Mar._Abr._Mai._Jun._Jul._Ag._Set._Oct._Nov._Des.".split("_"), weekdays : "Diumenge_Dilluns_Dimarts_Dimecres_Dijous_Divendres_Dissabte".split("_"), weekdaysShort : "Dg._Dl._Dt._Dc._Dj._Dv._Ds.".split("_"), weekdaysMin : "Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"), longDateFormat : { LT : "H:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay : function () { return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; }, nextDay : function () { return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; }, nextWeek : function () { return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; }, lastDay : function () { return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; }, lastWeek : function () { return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; }, sameElse : 'L' }, relativeTime : { future : "en %s", past : "fa %s", s : "uns segons", m : "un minut", mm : "%d minuts", h : "una hora", hh : "%d hores", d : "un dia", dd : "%d dies", M : "un mes", MM : "%d mesos", y : "un any", yy : "%d anys" }, ordinal : '%dº', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : czech (cs) // author : petrbela : https://github.com/petrbela (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var months = "leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"), monthsShort = "led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"); function plural(n) { return (n > 1) && (n < 5) && (~~(n / 10) !== 1); } function translate(number, withoutSuffix, key, isFuture) { var result = number + " "; switch (key) { case 's': // a few seconds / in a few seconds / a few seconds ago return (withoutSuffix || isFuture) ? 'pár vteřin' : 'pár vteřinami'; case 'm': // a minute / in a minute / a minute ago return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou'); case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'minuty' : 'minut'); } else { return result + 'minutami'; } break; case 'h': // an hour / in an hour / an hour ago return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou'); case 'hh': // 9 hours / in 9 hours / 9 hours ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'hodiny' : 'hodin'); } else { return result + 'hodinami'; } break; case 'd': // a day / in a day / a day ago return (withoutSuffix || isFuture) ? 'den' : 'dnem'; case 'dd': // 9 days / in 9 days / 9 days ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'dny' : 'dní'); } else { return result + 'dny'; } break; case 'M': // a month / in a month / a month ago return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem'; case 'MM': // 9 months / in 9 months / 9 months ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'měsíce' : 'měsíců'); } else { return result + 'měsíci'; } break; case 'y': // a year / in a year / a year ago return (withoutSuffix || isFuture) ? 'rok' : 'rokem'; case 'yy': // 9 years / in 9 years / 9 years ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'roky' : 'let'); } else { return result + 'lety'; } break; } } moment.lang('cs', { months : months, monthsShort : monthsShort, monthsParse : (function (months, monthsShort) { var i, _monthsParse = []; for (i = 0; i < 12; i++) { // use custom parser to solve problem with July (červenec) _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i'); } return _monthsParse; }(months, monthsShort)), weekdays : "neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"), weekdaysShort : "ne_po_út_st_čt_pá_so".split("_"), weekdaysMin : "ne_po_út_st_čt_pá_so".split("_"), longDateFormat : { LT: "H:mm", L : "DD.MM.YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY LT", LLLL : "dddd D. MMMM YYYY LT" }, calendar : { sameDay: "[dnes v] LT", nextDay: '[zítra v] LT', nextWeek: function () { switch (this.day()) { case 0: return '[v neděli v] LT'; case 1: case 2: return '[v] dddd [v] LT'; case 3: return '[ve středu v] LT'; case 4: return '[ve čtvrtek v] LT'; case 5: return '[v pátek v] LT'; case 6: return '[v sobotu v] LT'; } }, lastDay: '[včera v] LT', lastWeek: function () { switch (this.day()) { case 0: return '[minulou neděli v] LT'; case 1: case 2: return '[minulé] dddd [v] LT'; case 3: return '[minulou středu v] LT'; case 4: case 5: return '[minulý] dddd [v] LT'; case 6: return '[minulou sobotu v] LT'; } }, sameElse: "L" }, relativeTime : { future : "za %s", past : "před %s", s : translate, m : translate, mm : translate, h : translate, hh : translate, d : translate, dd : translate, M : translate, MM : translate, y : translate, yy : translate }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : chuvash (cv) // author : Anatoly Mironov : https://github.com/mirontoli (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('cv', { months : "кăрлач_нарăс_пуш_ака_май_çĕртме_утă_çурла_авăн_юпа_чӳк_раштав".split("_"), monthsShort : "кăр_нар_пуш_ака_май_çĕр_утă_çур_ав_юпа_чӳк_раш".split("_"), weekdays : "вырсарникун_тунтикун_ытларикун_юнкун_кĕçнерникун_эрнекун_шăматкун".split("_"), weekdaysShort : "выр_тун_ытл_юн_кĕç_эрн_шăм".split("_"), weekdaysMin : "вр_тн_ыт_юн_кç_эр_шм".split("_"), longDateFormat : { LT : "HH:mm", L : "DD-MM-YYYY", LL : "YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ]", LLL : "YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT", LLLL : "dddd, YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT" }, calendar : { sameDay: '[Паян] LT [сехетре]', nextDay: '[Ыран] LT [сехетре]', lastDay: '[Ĕнер] LT [сехетре]', nextWeek: '[Çитес] dddd LT [сехетре]', lastWeek: '[Иртнĕ] dddd LT [сехетре]', sameElse: 'L' }, relativeTime : { future : function (output) { var affix = /сехет$/i.exec(output) ? "рен" : /çул$/i.exec(output) ? "тан" : "ран"; return output + affix; }, past : "%s каялла", s : "пĕр-ик çеккунт", m : "пĕр минут", mm : "%d минут", h : "пĕр сехет", hh : "%d сехет", d : "пĕр кун", dd : "%d кун", M : "пĕр уйăх", MM : "%d уйăх", y : "пĕр çул", yy : "%d çул" }, ordinal : '%d-мĕш', week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : danish (da) // author : Ulrik Nielsen : https://github.com/mrbase (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('da', { months : "januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"), monthsShort : "jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"), weekdays : "søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"), weekdaysShort : "søn_man_tir_ons_tor_fre_lør".split("_"), weekdaysMin : "sø_ma_ti_on_to_fr_lø".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D. MMMM, YYYY LT" }, calendar : { sameDay : '[I dag kl.] LT', nextDay : '[I morgen kl.] LT', nextWeek : 'dddd [kl.] LT', lastDay : '[I går kl.] LT', lastWeek : '[sidste] dddd [kl] LT', sameElse : 'L' }, relativeTime : { future : "om %s", past : "%s siden", s : "få sekunder", m : "et minut", mm : "%d minutter", h : "en time", hh : "%d timer", d : "en dag", dd : "%d dage", M : "en måned", MM : "%d måneder", y : "et år", yy : "%d år" }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : german (de) // author : lluchs : https://github.com/lluchs // author: Menelion Elensúle: https://github.com/Oire (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { function processRelativeTime(number, withoutSuffix, key, isFuture) { var format = { 'm': ['eine Minute', 'einer Minute'], 'h': ['eine Stunde', 'einer Stunde'], 'd': ['ein Tag', 'einem Tag'], 'dd': [number + ' Tage', number + ' Tagen'], 'M': ['ein Monat', 'einem Monat'], 'MM': [number + ' Monate', number + ' Monaten'], 'y': ['ein Jahr', 'einem Jahr'], 'yy': [number + ' Jahre', number + ' Jahren'] }; return withoutSuffix ? format[key][0] : format[key][1]; } moment.lang('de', { months : "Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"), monthsShort : "Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"), weekdays : "Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"), weekdaysShort : "So._Mo._Di._Mi._Do._Fr._Sa.".split("_"), weekdaysMin : "So_Mo_Di_Mi_Do_Fr_Sa".split("_"), longDateFormat : { LT: "H:mm [Uhr]", L : "DD.MM.YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY LT", LLLL : "dddd, D. MMMM YYYY LT" }, calendar : { sameDay: "[Heute um] LT", sameElse: "L", nextDay: '[Morgen um] LT', nextWeek: 'dddd [um] LT', lastDay: '[Gestern um] LT', lastWeek: '[letzten] dddd [um] LT' }, relativeTime : { future : "in %s", past : "vor %s", s : "ein paar Sekunden", m : processRelativeTime, mm : "%d Minuten", h : processRelativeTime, hh : "%d Stunden", d : processRelativeTime, dd : processRelativeTime, M : processRelativeTime, MM : processRelativeTime, y : processRelativeTime, yy : processRelativeTime }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : modern greek (el) // author : Aggelos Karalias : https://github.com/mehiel (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('el', { monthsNominativeEl : "Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"), monthsGenitiveEl : "Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"), months : function (momentToFormat, format) { if (/D/.test(format.substring(0, format.indexOf("MMMM")))) { // if there is a day number before 'MMMM' return this._monthsGenitiveEl[momentToFormat.month()]; } else { return this._monthsNominativeEl[momentToFormat.month()]; } }, monthsShort : "Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"), weekdays : "Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"), weekdaysShort : "Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"), weekdaysMin : "Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"), meridiem : function (hours, minutes, isLower) { if (hours > 11) { return isLower ? 'μμ' : 'ΜΜ'; } else { return isLower ? 'πμ' : 'ΠΜ'; } }, longDateFormat : { LT : "h:mm A", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendarEl : { sameDay : '[Σήμερα {}] LT', nextDay : '[Αύριο {}] LT', nextWeek : 'dddd [{}] LT', lastDay : '[Χθες {}] LT', lastWeek : '[την προηγούμενη] dddd [{}] LT', sameElse : 'L' }, calendar : function (key, mom) { var output = this._calendarEl[key], hours = mom && mom.hours(); return output.replace("{}", (hours % 12 === 1 ? "στη" : "στις")); }, relativeTime : { future : "σε %s", past : "%s πριν", s : "δευτερόλεπτα", m : "ένα λεπτό", mm : "%d λεπτά", h : "μία ώρα", hh : "%d ώρες", d : "μία μέρα", dd : "%d μέρες", M : "ένας μήνας", MM : "%d μήνες", y : "ένας χρόνος", yy : "%d χρόνια" }, ordinal : function (number) { return number + 'η'; }, week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4st is the first week of the year. } }); })); // moment.js language configuration // language : canadian english (en-ca) // author : Jonathan Abourbih : https://github.com/jonbca (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('en-ca', { months : "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), monthsShort : "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"), weekdays : "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), weekdaysShort : "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"), weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), longDateFormat : { LT : "h:mm A", L : "YYYY-MM-DD", LL : "D MMMM, YYYY", LLL : "D MMMM, YYYY LT", LLLL : "dddd, D MMMM, YYYY LT" }, calendar : { sameDay : '[Today at] LT', nextDay : '[Tomorrow at] LT', nextWeek : 'dddd [at] LT', lastDay : '[Yesterday at] LT', lastWeek : '[Last] dddd [at] LT', sameElse : 'L' }, relativeTime : { future : "in %s", past : "%s ago", s : "a few seconds", m : "a minute", mm : "%d minutes", h : "an hour", hh : "%d hours", d : "a day", dd : "%d days", M : "a month", MM : "%d months", y : "a year", yy : "%d years" }, ordinal : function (number) { var b = number % 10, output = (~~ (number % 100 / 10) === 1) ? 'th' : (b === 1) ? 'st' : (b === 2) ? 'nd' : (b === 3) ? 'rd' : 'th'; return number + output; } }); })); // moment.js language configuration // language : great britain english (en-gb) // author : Chris Gedrim : https://github.com/chrisgedrim (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('en-gb', { months : "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), monthsShort : "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"), weekdays : "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), weekdaysShort : "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"), weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendar : { sameDay : '[Today at] LT', nextDay : '[Tomorrow at] LT', nextWeek : 'dddd [at] LT', lastDay : '[Yesterday at] LT', lastWeek : '[Last] dddd [at] LT', sameElse : 'L' }, relativeTime : { future : "in %s", past : "%s ago", s : "a few seconds", m : "a minute", mm : "%d minutes", h : "an hour", hh : "%d hours", d : "a day", dd : "%d days", M : "a month", MM : "%d months", y : "a year", yy : "%d years" }, ordinal : function (number) { var b = number % 10, output = (~~ (number % 100 / 10) === 1) ? 'th' : (b === 1) ? 'st' : (b === 2) ? 'nd' : (b === 3) ? 'rd' : 'th'; return number + output; }, week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : esperanto (eo) // author : Colin Dean : https://github.com/colindean // komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko. // Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni! (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('eo', { months : "januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"), monthsShort : "jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"), weekdays : "Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato".split("_"), weekdaysShort : "Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab".split("_"), weekdaysMin : "Di_Lu_Ma_Me_Ĵa_Ve_Sa".split("_"), longDateFormat : { LT : "HH:mm", L : "YYYY-MM-DD", LL : "D[-an de] MMMM, YYYY", LLL : "D[-an de] MMMM, YYYY LT", LLLL : "dddd, [la] D[-an de] MMMM, YYYY LT" }, meridiem : function (hours, minutes, isLower) { if (hours > 11) { return isLower ? 'p.t.m.' : 'P.T.M.'; } else { return isLower ? 'a.t.m.' : 'A.T.M.'; } }, calendar : { sameDay : '[Hodiaŭ je] LT', nextDay : '[Morgaŭ je] LT', nextWeek : 'dddd [je] LT', lastDay : '[Hieraŭ je] LT', lastWeek : '[pasinta] dddd [je] LT', sameElse : 'L' }, relativeTime : { future : "je %s", past : "antaŭ %s", s : "sekundoj", m : "minuto", mm : "%d minutoj", h : "horo", hh : "%d horoj", d : "tago",//ne 'diurno', ĉar estas uzita por proksimumo dd : "%d tagoj", M : "monato", MM : "%d monatoj", y : "jaro", yy : "%d jaroj" }, ordinal : "%da", week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : spanish (es) // author : Julio Napurí : https://github.com/julionc (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('es', { months : "enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"), monthsShort : "ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"), weekdays : "domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"), weekdaysShort : "dom._lun._mar._mié._jue._vie._sáb.".split("_"), weekdaysMin : "Do_Lu_Ma_Mi_Ju_Vi_Sá".split("_"), longDateFormat : { LT : "H:mm", L : "DD/MM/YYYY", LL : "D [de] MMMM [de] YYYY", LLL : "D [de] MMMM [de] YYYY LT", LLLL : "dddd, D [de] MMMM [de] YYYY LT" }, calendar : { sameDay : function () { return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; }, nextDay : function () { return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; }, nextWeek : function () { return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; }, lastDay : function () { return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; }, lastWeek : function () { return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; }, sameElse : 'L' }, relativeTime : { future : "en %s", past : "hace %s", s : "unos segundos", m : "un minuto", mm : "%d minutos", h : "una hora", hh : "%d horas", d : "un día", dd : "%d días", M : "un mes", MM : "%d meses", y : "un año", yy : "%d años" }, ordinal : '%dº', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : estonian (et) // author : Henry Kehlmann : https://github.com/madhenry (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { function translateSeconds(number, withoutSuffix, key, isFuture) { return (isFuture || withoutSuffix) ? 'paari sekundi' : 'paar sekundit'; } moment.lang('et', { months : "jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"), monthsShort : "jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"), weekdays : "pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"), weekdaysShort : "P_E_T_K_N_R_L".split("_"), weekdaysMin : "P_E_T_K_N_R_L".split("_"), longDateFormat : { LT : "H:mm", L : "DD.MM.YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY LT", LLLL : "dddd, D. MMMM YYYY LT" }, calendar : { sameDay : '[Täna,] LT', nextDay : '[Homme,] LT', nextWeek : '[Järgmine] dddd LT', lastDay : '[Eile,] LT', lastWeek : '[Eelmine] dddd LT', sameElse : 'L' }, relativeTime : { future : "%s pärast", past : "%s tagasi", s : translateSeconds, m : "minut", mm : "%d minutit", h : "tund", hh : "%d tundi", d : "päev", dd : "%d päeva", M : "kuu", MM : "%d kuud", y : "aasta", yy : "%d aastat" }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : euskara (eu) // author : Eneko Illarramendi : https://github.com/eillarra (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('eu', { months : "urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"), monthsShort : "urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"), weekdays : "igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"), weekdaysShort : "ig._al._ar._az._og._ol._lr.".split("_"), weekdaysMin : "ig_al_ar_az_og_ol_lr".split("_"), longDateFormat : { LT : "HH:mm", L : "YYYY-MM-DD", LL : "YYYY[ko] MMMM[ren] D[a]", LLL : "YYYY[ko] MMMM[ren] D[a] LT", LLLL : "dddd, YYYY[ko] MMMM[ren] D[a] LT", l : "YYYY-M-D", ll : "YYYY[ko] MMM D[a]", lll : "YYYY[ko] MMM D[a] LT", llll : "ddd, YYYY[ko] MMM D[a] LT" }, calendar : { sameDay : '[gaur] LT[etan]', nextDay : '[bihar] LT[etan]', nextWeek : 'dddd LT[etan]', lastDay : '[atzo] LT[etan]', lastWeek : '[aurreko] dddd LT[etan]', sameElse : 'L' }, relativeTime : { future : "%s barru", past : "duela %s", s : "segundo batzuk", m : "minutu bat", mm : "%d minutu", h : "ordu bat", hh : "%d ordu", d : "egun bat", dd : "%d egun", M : "hilabete bat", MM : "%d hilabete", y : "urte bat", yy : "%d urte" }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : Persian Language // author : Ebrahim Byagowi : https://github.com/ebraminio (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var symbolMap = { '1': '۱', '2': '۲', '3': '۳', '4': '۴', '5': '۵', '6': '۶', '7': '۷', '8': '۸', '9': '۹', '0': '۰' }, numberMap = { '۱': '1', '۲': '2', '۳': '3', '۴': '4', '۵': '5', '۶': '6', '۷': '7', '۸': '8', '۹': '9', '۰': '0' }; moment.lang('fa', { months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'), longDateFormat : { LT : 'HH:mm', L : 'DD/MM/YYYY', LL : 'D MMMM YYYY', LLL : 'D MMMM YYYY LT', LLLL : 'dddd, D MMMM YYYY LT' }, meridiem : function (hour, minute, isLower) { if (hour < 12) { return "قبل از ظهر"; } else { return "بعد از ظهر"; } }, calendar : { sameDay : '[امروز ساعت] LT', nextDay : '[فردا ساعت] LT', nextWeek : 'dddd [ساعت] LT', lastDay : '[دیروز ساعت] LT', lastWeek : 'dddd [پیش] [ساعت] LT', sameElse : 'L' }, relativeTime : { future : 'در %s', past : '%s پیش', s : 'چندین ثانیه', m : 'یک دقیقه', mm : '%d دقیقه', h : 'یک ساعت', hh : '%d ساعت', d : 'یک روز', dd : '%d روز', M : 'یک ماه', MM : '%d ماه', y : 'یک سال', yy : '%d سال' }, preparse: function (string) { return string.replace(/[۰-۹]/g, function (match) { return numberMap[match]; }).replace(/،/g, ','); }, postformat: function (string) { return string.replace(/\d/g, function (match) { return symbolMap[match]; }).replace(/,/g, '،'); }, ordinal : '%dم', week : { dow : 6, // Saturday is the first day of the week. doy : 12 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : finnish (fi) // author : Tarmo Aidantausta : https://github.com/bleadof (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var numbers_past = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '), numbers_future = ['nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden', numbers_past[7], numbers_past[8], numbers_past[9]]; function translate(number, withoutSuffix, key, isFuture) { var result = ""; switch (key) { case 's': return isFuture ? 'muutaman sekunnin' : 'muutama sekunti'; case 'm': return isFuture ? 'minuutin' : 'minuutti'; case 'mm': result = isFuture ? 'minuutin' : 'minuuttia'; break; case 'h': return isFuture ? 'tunnin' : 'tunti'; case 'hh': result = isFuture ? 'tunnin' : 'tuntia'; break; case 'd': return isFuture ? 'päivän' : 'päivä'; case 'dd': result = isFuture ? 'päivän' : 'päivää'; break; case 'M': return isFuture ? 'kuukauden' : 'kuukausi'; case 'MM': result = isFuture ? 'kuukauden' : 'kuukautta'; break; case 'y': return isFuture ? 'vuoden' : 'vuosi'; case 'yy': result = isFuture ? 'vuoden' : 'vuotta'; break; } result = verbal_number(number, isFuture) + " " + result; return result; } function verbal_number(number, isFuture) { return number < 10 ? (isFuture ? numbers_future[number] : numbers_past[number]) : number; } moment.lang('fi', { months : "tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"), monthsShort : "tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"), weekdays : "sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"), weekdaysShort : "su_ma_ti_ke_to_pe_la".split("_"), weekdaysMin : "su_ma_ti_ke_to_pe_la".split("_"), longDateFormat : { LT : "HH.mm", L : "DD.MM.YYYY", LL : "Do MMMM[ta] YYYY", LLL : "Do MMMM[ta] YYYY, [klo] LT", LLLL : "dddd, Do MMMM[ta] YYYY, [klo] LT", l : "D.M.YYYY", ll : "Do MMM YYYY", lll : "Do MMM YYYY, [klo] LT", llll : "ddd, Do MMM YYYY, [klo] LT" }, calendar : { sameDay : '[tänään] [klo] LT', nextDay : '[huomenna] [klo] LT', nextWeek : 'dddd [klo] LT', lastDay : '[eilen] [klo] LT', lastWeek : '[viime] dddd[na] [klo] LT', sameElse : 'L' }, relativeTime : { future : "%s päästä", past : "%s sitten", s : translate, m : translate, mm : translate, h : translate, hh : translate, d : translate, dd : translate, M : translate, MM : translate, y : translate, yy : translate }, ordinal : "%d.", week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : canadian french (fr-ca) // author : Jonathan Abourbih : https://github.com/jonbca (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('fr-ca', { months : "janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"), monthsShort : "janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"), weekdays : "dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"), weekdaysShort : "dim._lun._mar._mer._jeu._ven._sam.".split("_"), weekdaysMin : "Di_Lu_Ma_Me_Je_Ve_Sa".split("_"), longDateFormat : { LT : "HH:mm", L : "YYYY-MM-DD", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: "[Aujourd'hui à] LT", nextDay: '[Demain à] LT', nextWeek: 'dddd [à] LT', lastDay: '[Hier à] LT', lastWeek: 'dddd [dernier à] LT', sameElse: 'L' }, relativeTime : { future : "dans %s", past : "il y a %s", s : "quelques secondes", m : "une minute", mm : "%d minutes", h : "une heure", hh : "%d heures", d : "un jour", dd : "%d jours", M : "un mois", MM : "%d mois", y : "un an", yy : "%d ans" }, ordinal : function (number) { return number + (number === 1 ? 'er' : ''); } }); })); // moment.js language configuration // language : french (fr) // author : John Fischer : https://github.com/jfroffice (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('fr', { months : "janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"), monthsShort : "janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"), weekdays : "dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"), weekdaysShort : "dim._lun._mar._mer._jeu._ven._sam.".split("_"), weekdaysMin : "Di_Lu_Ma_Me_Je_Ve_Sa".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: "[Aujourd'hui à] LT", nextDay: '[Demain à] LT', nextWeek: 'dddd [à] LT', lastDay: '[Hier à] LT', lastWeek: 'dddd [dernier à] LT', sameElse: 'L' }, relativeTime : { future : "dans %s", past : "il y a %s", s : "quelques secondes", m : "une minute", mm : "%d minutes", h : "une heure", hh : "%d heures", d : "un jour", dd : "%d jours", M : "un mois", MM : "%d mois", y : "un an", yy : "%d ans" }, ordinal : function (number) { return number + (number === 1 ? 'er' : ''); }, week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : galician (gl) // author : Juan G. Hurtado : https://github.com/juanghurtado (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('gl', { months : "Xaneiro_Febreiro_Marzo_Abril_Maio_Xuño_Xullo_Agosto_Setembro_Outubro_Novembro_Decembro".split("_"), monthsShort : "Xan._Feb._Mar._Abr._Mai._Xuñ._Xul._Ago._Set._Out._Nov._Dec.".split("_"), weekdays : "Domingo_Luns_Martes_Mércores_Xoves_Venres_Sábado".split("_"), weekdaysShort : "Dom._Lun._Mar._Mér._Xov._Ven._Sáb.".split("_"), weekdaysMin : "Do_Lu_Ma_Mé_Xo_Ve_Sá".split("_"), longDateFormat : { LT : "H:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay : function () { return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; }, nextDay : function () { return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; }, nextWeek : function () { return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; }, lastDay : function () { return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT'; }, lastWeek : function () { return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; }, sameElse : 'L' }, relativeTime : { future : function (str) { if (str === "uns segundos") { return "nuns segundos"; } return "en " + str; }, past : "hai %s", s : "uns segundos", m : "un minuto", mm : "%d minutos", h : "unha hora", hh : "%d horas", d : "un día", dd : "%d días", M : "un mes", MM : "%d meses", y : "un ano", yy : "%d anos" }, ordinal : '%dº', week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : Hebrew (he) // author : Tomer Cohen : https://github.com/tomer // author : Moshe Simantov : https://github.com/DevelopmentIL // author : Tal Ater : https://github.com/TalAter (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('he', { months : "ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"), monthsShort : "ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"), weekdays : "ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"), weekdaysShort : "א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"), weekdaysMin : "א_ב_ג_ד_ה_ו_ש".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D [ב]MMMM YYYY", LLL : "D [ב]MMMM YYYY LT", LLLL : "dddd, D [ב]MMMM YYYY LT", l : "D/M/YYYY", ll : "D MMM YYYY", lll : "D MMM YYYY LT", llll : "ddd, D MMM YYYY LT" }, calendar : { sameDay : '[היום ב־]LT', nextDay : '[מחר ב־]LT', nextWeek : 'dddd [בשעה] LT', lastDay : '[אתמול ב־]LT', lastWeek : '[ביום] dddd [האחרון בשעה] LT', sameElse : 'L' }, relativeTime : { future : "בעוד %s", past : "לפני %s", s : "מספר שניות", m : "דקה", mm : "%d דקות", h : "שעה", hh : function (number) { if (number === 2) { return "שעתיים"; } return number + " שעות"; }, d : "יום", dd : function (number) { if (number === 2) { return "יומיים"; } return number + " ימים"; }, M : "חודש", MM : function (number) { if (number === 2) { return "חודשיים"; } return number + " חודשים"; }, y : "שנה", yy : function (number) { if (number === 2) { return "שנתיים"; } return number + " שנים"; } } }); })); // moment.js language configuration // language : hindi (hi) // author : Mayank Singhal : https://github.com/mayanksinghal (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var symbolMap = { '1': '१', '2': '२', '3': '३', '4': '४', '5': '५', '6': '६', '7': '७', '8': '८', '9': '९', '0': '०' }, numberMap = { '१': '1', '२': '2', '३': '3', '४': '4', '५': '5', '६': '6', '७': '7', '८': '8', '९': '9', '०': '0' }; moment.lang('hi', { months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split("_"), monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split("_"), weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split("_"), weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split("_"), weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split("_"), longDateFormat : { LT : "A h:mm बजे", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY, LT", LLLL : "dddd, D MMMM YYYY, LT" }, calendar : { sameDay : '[आज] LT', nextDay : '[कल] LT', nextWeek : 'dddd, LT', lastDay : '[कल] LT', lastWeek : '[पिछले] dddd, LT', sameElse : 'L' }, relativeTime : { future : "%s में", past : "%s पहले", s : "कुछ ही क्षण", m : "एक मिनट", mm : "%d मिनट", h : "एक घंटा", hh : "%d घंटे", d : "एक दिन", dd : "%d दिन", M : "एक महीने", MM : "%d महीने", y : "एक वर्ष", yy : "%d वर्ष" }, preparse: function (string) { return string.replace(/[१२३४५६७८९०]/g, function (match) { return numberMap[match]; }); }, postformat: function (string) { return string.replace(/\d/g, function (match) { return symbolMap[match]; }); }, // Hindi notation for meridiems are quite fuzzy in practice. While there exists // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi. meridiem : function (hour, minute, isLower) { if (hour < 4) { return "रात"; } else if (hour < 10) { return "सुबह"; } else if (hour < 17) { return "दोपहर"; } else if (hour < 20) { return "शाम"; } else { return "रात"; } }, week : { dow : 0, // Sunday is the first day of the week. doy : 6 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : hrvatski (hr) // author : Bojan Marković : https://github.com/bmarkovic // based on (sl) translation by Robert Sedovšek (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { function translate(number, withoutSuffix, key) { var result = number + " "; switch (key) { case 'm': return withoutSuffix ? 'jedna minuta' : 'jedne minute'; case 'mm': if (number === 1) { result += 'minuta'; } else if (number === 2 || number === 3 || number === 4) { result += 'minute'; } else { result += 'minuta'; } return result; case 'h': return withoutSuffix ? 'jedan sat' : 'jednog sata'; case 'hh': if (number === 1) { result += 'sat'; } else if (number === 2 || number === 3 || number === 4) { result += 'sata'; } else { result += 'sati'; } return result; case 'dd': if (number === 1) { result += 'dan'; } else { result += 'dana'; } return result; case 'MM': if (number === 1) { result += 'mjesec'; } else if (number === 2 || number === 3 || number === 4) { result += 'mjeseca'; } else { result += 'mjeseci'; } return result; case 'yy': if (number === 1) { result += 'godina'; } else if (number === 2 || number === 3 || number === 4) { result += 'godine'; } else { result += 'godina'; } return result; } } moment.lang('hr', { months : "sječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_"), monthsShort : "sje._vel._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"), weekdays : "nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"), weekdaysShort : "ned._pon._uto._sri._čet._pet._sub.".split("_"), weekdaysMin : "ne_po_ut_sr_če_pe_su".split("_"), longDateFormat : { LT : "H:mm", L : "DD. MM. YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY LT", LLLL : "dddd, D. MMMM YYYY LT" }, calendar : { sameDay : '[danas u] LT', nextDay : '[sutra u] LT', nextWeek : function () { switch (this.day()) { case 0: return '[u] [nedjelju] [u] LT'; case 3: return '[u] [srijedu] [u] LT'; case 6: return '[u] [subotu] [u] LT'; case 1: case 2: case 4: case 5: return '[u] dddd [u] LT'; } }, lastDay : '[jučer u] LT', lastWeek : function () { switch (this.day()) { case 0: case 3: return '[prošlu] dddd [u] LT'; case 6: return '[prošle] [subote] [u] LT'; case 1: case 2: case 4: case 5: return '[prošli] dddd [u] LT'; } }, sameElse : 'L' }, relativeTime : { future : "za %s", past : "prije %s", s : "par sekundi", m : translate, mm : translate, h : translate, hh : translate, d : "dan", dd : translate, M : "mjesec", MM : translate, y : "godinu", yy : translate }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : hungarian (hu) // author : Adam Brunner : https://github.com/adambrunner (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' '); function translate(number, withoutSuffix, key, isFuture) { var num = number, suffix; switch (key) { case 's': return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce'; case 'm': return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce'); case 'mm': return num + (isFuture || withoutSuffix ? ' perc' : ' perce'); case 'h': return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája'); case 'hh': return num + (isFuture || withoutSuffix ? ' óra' : ' órája'); case 'd': return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja'); case 'dd': return num + (isFuture || withoutSuffix ? ' nap' : ' napja'); case 'M': return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); case 'MM': return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); case 'y': return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve'); case 'yy': return num + (isFuture || withoutSuffix ? ' év' : ' éve'); } return ''; } function week(isFuture) { return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]'; } moment.lang('hu', { months : "január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"), monthsShort : "jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"), weekdays : "vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"), weekdaysShort : "v_h_k_sze_cs_p_szo".split("_"), longDateFormat : { LT : "H:mm", L : "YYYY.MM.DD.", LL : "YYYY. MMMM D.", LLL : "YYYY. MMMM D., LT", LLLL : "YYYY. MMMM D., dddd LT" }, calendar : { sameDay : '[ma] LT[-kor]', nextDay : '[holnap] LT[-kor]', nextWeek : function () { return week.call(this, true); }, lastDay : '[tegnap] LT[-kor]', lastWeek : function () { return week.call(this, false); }, sameElse : 'L' }, relativeTime : { future : "%s múlva", past : "%s", s : translate, m : translate, mm : translate, h : translate, hh : translate, d : translate, dd : translate, M : translate, MM : translate, y : translate, yy : translate }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : Bahasa Indonesia (id) // author : Mohammad Satrio Utomo : https://github.com/tyok // reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('id', { months : "Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"), monthsShort : "Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"), weekdays : "Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"), weekdaysShort : "Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"), weekdaysMin : "Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"), longDateFormat : { LT : "HH.mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY [pukul] LT", LLLL : "dddd, D MMMM YYYY [pukul] LT" }, meridiem : function (hours, minutes, isLower) { if (hours < 11) { return 'pagi'; } else if (hours < 15) { return 'siang'; } else if (hours < 19) { return 'sore'; } else { return 'malam'; } }, calendar : { sameDay : '[Hari ini pukul] LT', nextDay : '[Besok pukul] LT', nextWeek : 'dddd [pukul] LT', lastDay : '[Kemarin pukul] LT', lastWeek : 'dddd [lalu pukul] LT', sameElse : 'L' }, relativeTime : { future : "dalam %s", past : "%s yang lalu", s : "beberapa detik", m : "semenit", mm : "%d menit", h : "sejam", hh : "%d jam", d : "sehari", dd : "%d hari", M : "sebulan", MM : "%d bulan", y : "setahun", yy : "%d tahun" }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : icelandic (is) // author : Hinrik Örn Sigurðsson : https://github.com/hinrik (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { function plural(n) { if (n % 100 === 11) { return true; } else if (n % 10 === 1) { return false; } return true; } function translate(number, withoutSuffix, key, isFuture) { var result = number + " "; switch (key) { case 's': return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum'; case 'm': return withoutSuffix ? 'mínúta' : 'mínútu'; case 'mm': if (plural(number)) { return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum'); } else if (withoutSuffix) { return result + 'mínúta'; } return result + 'mínútu'; case 'hh': if (plural(number)) { return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum'); } return result + 'klukkustund'; case 'd': if (withoutSuffix) { return 'dagur'; } return isFuture ? 'dag' : 'degi'; case 'dd': if (plural(number)) { if (withoutSuffix) { return result + 'dagar'; } return result + (isFuture ? 'daga' : 'dögum'); } else if (withoutSuffix) { return result + 'dagur'; } return result + (isFuture ? 'dag' : 'degi'); case 'M': if (withoutSuffix) { return 'mánuður'; } return isFuture ? 'mánuð' : 'mánuði'; case 'MM': if (plural(number)) { if (withoutSuffix) { return result + 'mánuðir'; } return result + (isFuture ? 'mánuði' : 'mánuðum'); } else if (withoutSuffix) { return result + 'mánuður'; } return result + (isFuture ? 'mánuð' : 'mánuði'); case 'y': return withoutSuffix || isFuture ? 'ár' : 'ári'; case 'yy': if (plural(number)) { return result + (withoutSuffix || isFuture ? 'ár' : 'árum'); } return result + (withoutSuffix || isFuture ? 'ár' : 'ári'); } } moment.lang('is', { months : "janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"), monthsShort : "jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"), weekdays : "sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"), weekdaysShort : "sun_mán_þri_mið_fim_fös_lau".split("_"), weekdaysMin : "Su_Má_Þr_Mi_Fi_Fö_La".split("_"), longDateFormat : { LT : "H:mm", L : "DD/MM/YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY [kl.] LT", LLLL : "dddd, D. MMMM YYYY [kl.] LT" }, calendar : { sameDay : '[í dag kl.] LT', nextDay : '[á morgun kl.] LT', nextWeek : 'dddd [kl.] LT', lastDay : '[í gær kl.] LT', lastWeek : '[síðasta] dddd [kl.] LT', sameElse : 'L' }, relativeTime : { future : "eftir %s", past : "fyrir %s síðan", s : translate, m : translate, mm : translate, h : "klukkustund", hh : translate, d : translate, dd : translate, M : translate, MM : translate, y : translate, yy : translate }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : italian (it) // author : Lorenzo : https://github.com/aliem // author: Mattia Larentis: https://github.com/nostalgiaz (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('it', { months : "Gennaio_Febbraio_Marzo_Aprile_Maggio_Giugno_Luglio_Agosto_Settembre_Ottobre_Novembre_Dicembre".split("_"), monthsShort : "Gen_Feb_Mar_Apr_Mag_Giu_Lug_Ago_Set_Ott_Nov_Dic".split("_"), weekdays : "Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato".split("_"), weekdaysShort : "Dom_Lun_Mar_Mer_Gio_Ven_Sab".split("_"), weekdaysMin : "D_L_Ma_Me_G_V_S".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendar : { sameDay: '[Oggi alle] LT', nextDay: '[Domani alle] LT', nextWeek: 'dddd [alle] LT', lastDay: '[Ieri alle] LT', lastWeek: '[lo scorso] dddd [alle] LT', sameElse: 'L' }, relativeTime : { future : function (s) { return ((/^[0-9].+$/).test(s) ? "tra" : "in") + " " + s; }, past : "%s fa", s : "secondi", m : "un minuto", mm : "%d minuti", h : "un'ora", hh : "%d ore", d : "un giorno", dd : "%d giorni", M : "un mese", MM : "%d mesi", y : "un anno", yy : "%d anni" }, ordinal: '%dº', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : japanese (ja) // author : LI Long : https://github.com/baryon (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('ja', { months : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), weekdays : "日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"), weekdaysShort : "日_月_火_水_木_金_土".split("_"), weekdaysMin : "日_月_火_水_木_金_土".split("_"), longDateFormat : { LT : "Ah時m分", L : "YYYY/MM/DD", LL : "YYYY年M月D日", LLL : "YYYY年M月D日LT", LLLL : "YYYY年M月D日LT dddd" }, meridiem : function (hour, minute, isLower) { if (hour < 12) { return "午前"; } else { return "午後"; } }, calendar : { sameDay : '[今日] LT', nextDay : '[明日] LT', nextWeek : '[来週]dddd LT', lastDay : '[昨日] LT', lastWeek : '[前週]dddd LT', sameElse : 'L' }, relativeTime : { future : "%s後", past : "%s前", s : "数秒", m : "1分", mm : "%d分", h : "1時間", hh : "%d時間", d : "1日", dd : "%d日", M : "1ヶ月", MM : "%dヶ月", y : "1年", yy : "%d年" } }); })); // moment.js language configuration // language : Georgian (ka) // author : Irakli Janiashvili : https://github.com/irakli-janiashvili (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { function monthsCaseReplace(m, format) { var months = { 'nominative': 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'), 'accusative': 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_') }, nounCase = (/D[oD] *MMMM?/).test(format) ? 'accusative' : 'nominative'; return months[nounCase][m.month()]; } function weekdaysCaseReplace(m, format) { var weekdays = { 'nominative': 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'), 'accusative': 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_') }, nounCase = (/(წინა|შემდეგ)/).test(format) ? 'accusative' : 'nominative'; return weekdays[nounCase][m.day()]; } moment.lang('ka', { months : monthsCaseReplace, monthsShort : "იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"), weekdays : weekdaysCaseReplace, weekdaysShort : "კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"), weekdaysMin : "კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"), longDateFormat : { LT : "h:mm A", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendar : { sameDay : '[დღეს] LT[-ზე]', nextDay : '[ხვალ] LT[-ზე]', lastDay : '[გუშინ] LT[-ზე]', nextWeek : '[შემდეგ] dddd LT[-ზე]', lastWeek : '[წინა] dddd LT-ზე', sameElse : 'L' }, relativeTime : { future : function (s) { return (/(წამი|წუთი|საათი|წელი)/).test(s) ? s.replace(/ი$/, "ში") : s + "ში"; }, past : function (s) { if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) { return s.replace(/(ი|ე)$/, "ის წინ"); } if ((/წელი/).test(s)) { return s.replace(/წელი$/, "წლის წინ"); } }, s : "რამდენიმე წამი", m : "წუთი", mm : "%d წუთი", h : "საათი", hh : "%d საათი", d : "დღე", dd : "%d დღე", M : "თვე", MM : "%d თვე", y : "წელი", yy : "%d წელი" }, ordinal : function (number) { if (number === 0) { return number; } if (number === 1) { return number + "-ლი"; } if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) { return "მე-" + number; } return number + "-ე"; }, week : { dow : 1, doy : 7 } }); })); // moment.js language configuration // language : korean (ko) // author : Kyungwook, Park : https://github.com/kyungw00k (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('ko', { months : "1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"), monthsShort : "1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"), weekdays : "일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"), weekdaysShort : "일_월_화_수_목_금_토".split("_"), weekdaysMin : "일_월_화_수_목_금_토".split("_"), longDateFormat : { LT : "A h시 mm분", L : "YYYY.MM.DD", LL : "YYYY년 MMMM D일", LLL : "YYYY년 MMMM D일 LT", LLLL : "YYYY년 MMMM D일 dddd LT" }, meridiem : function (hour, minute, isUpper) { return hour < 12 ? '오전' : '오후'; }, calendar : { sameDay : '오늘 LT', nextDay : '내일 LT', nextWeek : 'dddd LT', lastDay : '어제 LT', lastWeek : '지난주 dddd LT', sameElse : 'L' }, relativeTime : { future : "%s 후", past : "%s 전", s : "몇초", ss : "%d초", m : "일분", mm : "%d분", h : "한시간", hh : "%d시간", d : "하루", dd : "%d일", M : "한달", MM : "%d달", y : "일년", yy : "%d년" }, ordinal : '%d일' }); })); // moment.js language configuration // language : latvian (lv) // author : Kristaps Karlsons : https://github.com/skakri (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var units = { 'mm': 'minūti_minūtes_minūte_minūtes', 'hh': 'stundu_stundas_stunda_stundas', 'dd': 'dienu_dienas_diena_dienas', 'MM': 'mēnesi_mēnešus_mēnesis_mēneši', 'yy': 'gadu_gadus_gads_gadi' }; function format(word, number, withoutSuffix) { var forms = word.split('_'); if (withoutSuffix) { return number % 10 === 1 && number !== 11 ? forms[2] : forms[3]; } else { return number % 10 === 1 && number !== 11 ? forms[0] : forms[1]; } } function relativeTimeWithPlural(number, withoutSuffix, key) { return number + ' ' + format(units[key], number, withoutSuffix); } moment.lang('lv', { months : "janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"), monthsShort : "jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"), weekdays : "svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"), weekdaysShort : "Sv_P_O_T_C_Pk_S".split("_"), weekdaysMin : "Sv_P_O_T_C_Pk_S".split("_"), longDateFormat : { LT : "HH:mm", L : "DD.MM.YYYY", LL : "YYYY. [gada] D. MMMM", LLL : "YYYY. [gada] D. MMMM, LT", LLLL : "YYYY. [gada] D. MMMM, dddd, LT" }, calendar : { sameDay : '[Šodien pulksten] LT', nextDay : '[Rīt pulksten] LT', nextWeek : 'dddd [pulksten] LT', lastDay : '[Vakar pulksten] LT', lastWeek : '[Pagājušā] dddd [pulksten] LT', sameElse : 'L' }, relativeTime : { future : "%s vēlāk", past : "%s agrāk", s : "dažas sekundes", m : "minūti", mm : relativeTimeWithPlural, h : "stundu", hh : relativeTimeWithPlural, d : "dienu", dd : relativeTimeWithPlural, M : "mēnesi", MM : relativeTimeWithPlural, y : "gadu", yy : relativeTimeWithPlural }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : malayalam (ml) // author : Floyd Pink : https://github.com/floydpink (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('ml', { months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split("_"), monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split("_"), weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split("_"), weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split("_"), weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split("_"), longDateFormat : { LT : "A h:mm -നു", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY, LT", LLLL : "dddd, D MMMM YYYY, LT" }, calendar : { sameDay : '[ഇന്ന്] LT', nextDay : '[നാളെ] LT', nextWeek : 'dddd, LT', lastDay : '[ഇന്നലെ] LT', lastWeek : '[കഴിഞ്ഞ] dddd, LT', sameElse : 'L' }, relativeTime : { future : "%s കഴിഞ്ഞ്", past : "%s മുൻപ്", s : "അൽപ നിമിഷങ്ങൾ", m : "ഒരു മിനിറ്റ്", mm : "%d മിനിറ്റ്", h : "ഒരു മണിക്കൂർ", hh : "%d മണിക്കൂർ", d : "ഒരു ദിവസം", dd : "%d ദിവസം", M : "ഒരു മാസം", MM : "%d മാസം", y : "ഒരു വർഷം", yy : "%d വർഷം" }, meridiem : function (hour, minute, isLower) { if (hour < 4) { return "രാത്രി"; } else if (hour < 12) { return "രാവിലെ"; } else if (hour < 17) { return "ഉച്ച കഴിഞ്ഞ്"; } else if (hour < 20) { return "വൈകുന്നേരം"; } else { return "രാത്രി"; } } }); })); // moment.js language configuration // language : Marathi (mr) // author : Harshad Kale : https://github.com/kalehv (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var symbolMap = { '1': '१', '2': '२', '3': '३', '4': '४', '5': '५', '6': '६', '7': '७', '8': '८', '9': '९', '0': '०' }, numberMap = { '१': '1', '२': '2', '३': '3', '४': '4', '५': '5', '६': '6', '७': '7', '८': '8', '९': '9', '०': '0' }; moment.lang('mr', { months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split("_"), monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split("_"), weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split("_"), weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split("_"), weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split("_"), longDateFormat : { LT : "A h:mm वाजता", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY, LT", LLLL : "dddd, D MMMM YYYY, LT" }, calendar : { sameDay : '[आज] LT', nextDay : '[उद्या] LT', nextWeek : 'dddd, LT', lastDay : '[काल] LT', lastWeek: '[मागील] dddd, LT', sameElse : 'L' }, relativeTime : { future : "%s नंतर", past : "%s पूर्वी", s : "सेकंद", m: "एक मिनिट", mm: "%d मिनिटे", h : "एक तास", hh : "%d तास", d : "एक दिवस", dd : "%d दिवस", M : "एक महिना", MM : "%d महिने", y : "एक वर्ष", yy : "%d वर्षे" }, preparse: function (string) { return string.replace(/[१२३४५६७८९०]/g, function (match) { return numberMap[match]; }); }, postformat: function (string) { return string.replace(/\d/g, function (match) { return symbolMap[match]; }); }, meridiem: function (hour, minute, isLower) { if (hour < 4) { return "रात्री"; } else if (hour < 10) { return "सकाळी"; } else if (hour < 17) { return "दुपारी"; } else if (hour < 20) { return "सायंकाळी"; } else { return "रात्री"; } }, week : { dow : 0, // Sunday is the first day of the week. doy : 6 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : Bahasa Malaysia (ms-MY) // author : Weldan Jamili : https://github.com/weldan (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('ms-my', { months : "Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"), monthsShort : "Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"), weekdays : "Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"), weekdaysShort : "Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"), weekdaysMin : "Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"), longDateFormat : { LT : "HH.mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY [pukul] LT", LLLL : "dddd, D MMMM YYYY [pukul] LT" }, meridiem : function (hours, minutes, isLower) { if (hours < 11) { return 'pagi'; } else if (hours < 15) { return 'tengahari'; } else if (hours < 19) { return 'petang'; } else { return 'malam'; } }, calendar : { sameDay : '[Hari ini pukul] LT', nextDay : '[Esok pukul] LT', nextWeek : 'dddd [pukul] LT', lastDay : '[Kelmarin pukul] LT', lastWeek : 'dddd [lepas pukul] LT', sameElse : 'L' }, relativeTime : { future : "dalam %s", past : "%s yang lepas", s : "beberapa saat", m : "seminit", mm : "%d minit", h : "sejam", hh : "%d jam", d : "sehari", dd : "%d hari", M : "sebulan", MM : "%d bulan", y : "setahun", yy : "%d tahun" }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : norwegian bokmål (nb) // authors : Espen Hovlandsdal : https://github.com/rexxars // Sigurd Gartmann : https://github.com/sigurdga (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('nb', { months : "januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"), monthsShort : "jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"), weekdays : "søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"), weekdaysShort : "sø._ma._ti._on._to._fr._lø.".split("_"), weekdaysMin : "sø_ma_ti_on_to_fr_lø".split("_"), longDateFormat : { LT : "H.mm", L : "DD.MM.YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY [kl.] LT", LLLL : "dddd D. MMMM YYYY [kl.] LT" }, calendar : { sameDay: '[i dag kl.] LT', nextDay: '[i morgen kl.] LT', nextWeek: 'dddd [kl.] LT', lastDay: '[i går kl.] LT', lastWeek: '[forrige] dddd [kl.] LT', sameElse: 'L' }, relativeTime : { future : "om %s", past : "for %s siden", s : "noen sekunder", m : "ett minutt", mm : "%d minutter", h : "en time", hh : "%d timer", d : "en dag", dd : "%d dager", M : "en måned", MM : "%d måneder", y : "ett år", yy : "%d år" }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : nepali/nepalese // author : suvash : https://github.com/suvash (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var symbolMap = { '1': '१', '2': '२', '3': '३', '4': '४', '5': '५', '6': '६', '7': '७', '8': '८', '9': '९', '0': '०' }, numberMap = { '१': '1', '२': '2', '३': '3', '४': '4', '५': '5', '६': '6', '७': '7', '८': '8', '९': '9', '०': '0' }; moment.lang('ne', { months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split("_"), monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split("_"), weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split("_"), weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split("_"), weekdaysMin : 'आइ._सो._मङ्_बु._बि._शु._श.'.split("_"), longDateFormat : { LT : "Aको h:mm बजे", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY, LT", LLLL : "dddd, D MMMM YYYY, LT" }, preparse: function (string) { return string.replace(/[१२३४५६७८९०]/g, function (match) { return numberMap[match]; }); }, postformat: function (string) { return string.replace(/\d/g, function (match) { return symbolMap[match]; }); }, meridiem : function (hour, minute, isLower) { if (hour < 3) { return "राती"; } else if (hour < 10) { return "बिहान"; } else if (hour < 15) { return "दिउँसो"; } else if (hour < 18) { return "बेलुका"; } else if (hour < 20) { return "साँझ"; } else { return "राती"; } }, calendar : { sameDay : '[आज] LT', nextDay : '[भोली] LT', nextWeek : '[आउँदो] dddd[,] LT', lastDay : '[हिजो] LT', lastWeek : '[गएको] dddd[,] LT', sameElse : 'L' }, relativeTime : { future : "%sमा", past : "%s अगाडी", s : "केही समय", m : "एक मिनेट", mm : "%d मिनेट", h : "एक घण्टा", hh : "%d घण्टा", d : "एक दिन", dd : "%d दिन", M : "एक महिना", MM : "%d महिना", y : "एक बर्ष", yy : "%d बर्ष" }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : dutch (nl) // author : Joris Röling : https://github.com/jjupiter (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var monthsShortWithDots = "jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"), monthsShortWithoutDots = "jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"); moment.lang('nl', { months : "januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"), monthsShort : function (m, format) { if (/-MMM-/.test(format)) { return monthsShortWithoutDots[m.month()]; } else { return monthsShortWithDots[m.month()]; } }, weekdays : "zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"), weekdaysShort : "zo._ma._di._wo._do._vr._za.".split("_"), weekdaysMin : "Zo_Ma_Di_Wo_Do_Vr_Za".split("_"), longDateFormat : { LT : "HH:mm", L : "DD-MM-YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: '[Vandaag om] LT', nextDay: '[Morgen om] LT', nextWeek: 'dddd [om] LT', lastDay: '[Gisteren om] LT', lastWeek: '[afgelopen] dddd [om] LT', sameElse: 'L' }, relativeTime : { future : "over %s", past : "%s geleden", s : "een paar seconden", m : "één minuut", mm : "%d minuten", h : "één uur", hh : "%d uur", d : "één dag", dd : "%d dagen", M : "één maand", MM : "%d maanden", y : "één jaar", yy : "%d jaar" }, ordinal : function (number) { return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); }, week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : norwegian nynorsk (nn) // author : https://github.com/mechuwind (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('nn', { months : "januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"), monthsShort : "jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"), weekdays : "sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"), weekdaysShort : "sun_mån_tys_ons_tor_fre_lau".split("_"), weekdaysMin : "su_må_ty_on_to_fr_lø".split("_"), longDateFormat : { LT : "HH:mm", L : "DD.MM.YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: '[I dag klokka] LT', nextDay: '[I morgon klokka] LT', nextWeek: 'dddd [klokka] LT', lastDay: '[I går klokka] LT', lastWeek: '[Føregående] dddd [klokka] LT', sameElse: 'L' }, relativeTime : { future : "om %s", past : "for %s siden", s : "noen sekund", m : "ett minutt", mm : "%d minutt", h : "en time", hh : "%d timar", d : "en dag", dd : "%d dagar", M : "en månad", MM : "%d månader", y : "ett år", yy : "%d år" }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : polish (pl) // author : Rafal Hirsz : https://github.com/evoL (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var monthsNominative = "styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"), monthsSubjective = "stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_"); function plural(n) { return (n % 10 < 5) && (n % 10 > 1) && (~~(n / 10) !== 1); } function translate(number, withoutSuffix, key) { var result = number + " "; switch (key) { case 'm': return withoutSuffix ? 'minuta' : 'minutę'; case 'mm': return result + (plural(number) ? 'minuty' : 'minut'); case 'h': return withoutSuffix ? 'godzina' : 'godzinę'; case 'hh': return result + (plural(number) ? 'godziny' : 'godzin'); case 'MM': return result + (plural(number) ? 'miesiące' : 'miesięcy'); case 'yy': return result + (plural(number) ? 'lata' : 'lat'); } } moment.lang('pl', { months : function (momentToFormat, format) { if (/D MMMM/.test(format)) { return monthsSubjective[momentToFormat.month()]; } else { return monthsNominative[momentToFormat.month()]; } }, monthsShort : "sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"), weekdays : "niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"), weekdaysShort : "nie_pon_wt_śr_czw_pt_sb".split("_"), weekdaysMin : "N_Pn_Wt_Śr_Cz_Pt_So".split("_"), longDateFormat : { LT : "HH:mm", L : "DD.MM.YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendar : { sameDay: '[Dziś o] LT', nextDay: '[Jutro o] LT', nextWeek: '[W] dddd [o] LT', lastDay: '[Wczoraj o] LT', lastWeek: function () { switch (this.day()) { case 0: return '[W zeszłą niedzielę o] LT'; case 3: return '[W zeszłą środę o] LT'; case 6: return '[W zeszłą sobotę o] LT'; default: return '[W zeszły] dddd [o] LT'; } }, sameElse: 'L' }, relativeTime : { future : "za %s", past : "%s temu", s : "kilka sekund", m : translate, mm : translate, h : translate, hh : translate, d : "1 dzień", dd : '%d dni', M : "miesiąc", MM : translate, y : "rok", yy : translate }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : brazilian portuguese (pt-br) // author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('pt-br', { months : "Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"), monthsShort : "Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"), weekdays : "Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"), weekdaysShort : "Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"), weekdaysMin : "Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D [de] MMMM [de] YYYY", LLL : "D [de] MMMM [de] YYYY LT", LLLL : "dddd, D [de] MMMM [de] YYYY LT" }, calendar : { sameDay: '[Hoje às] LT', nextDay: '[Amanhã às] LT', nextWeek: 'dddd [às] LT', lastDay: '[Ontem às] LT', lastWeek: function () { return (this.day() === 0 || this.day() === 6) ? '[Último] dddd [às] LT' : // Saturday + Sunday '[Última] dddd [às] LT'; // Monday - Friday }, sameElse: 'L' }, relativeTime : { future : "em %s", past : "%s atrás", s : "segundos", m : "um minuto", mm : "%d minutos", h : "uma hora", hh : "%d horas", d : "um dia", dd : "%d dias", M : "um mês", MM : "%d meses", y : "um ano", yy : "%d anos" }, ordinal : '%dº' }); })); // moment.js language configuration // language : portuguese (pt) // author : Jefferson : https://github.com/jalex79 (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('pt', { months : "Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"), monthsShort : "Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"), weekdays : "Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"), weekdaysShort : "Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"), weekdaysMin : "Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D [de] MMMM [de] YYYY", LLL : "D [de] MMMM [de] YYYY LT", LLLL : "dddd, D [de] MMMM [de] YYYY LT" }, calendar : { sameDay: '[Hoje às] LT', nextDay: '[Amanhã às] LT', nextWeek: 'dddd [às] LT', lastDay: '[Ontem às] LT', lastWeek: function () { return (this.day() === 0 || this.day() === 6) ? '[Último] dddd [às] LT' : // Saturday + Sunday '[Última] dddd [às] LT'; // Monday - Friday }, sameElse: 'L' }, relativeTime : { future : "em %s", past : "%s atrás", s : "segundos", m : "um minuto", mm : "%d minutos", h : "uma hora", hh : "%d horas", d : "um dia", dd : "%d dias", M : "um mês", MM : "%d meses", y : "um ano", yy : "%d anos" }, ordinal : '%dº', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : romanian (ro) // author : Vlad Gurdiga : https://github.com/gurdiga // author : Valentin Agachi : https://github.com/avaly (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('ro', { months : "Ianuarie_Februarie_Martie_Aprilie_Mai_Iunie_Iulie_August_Septembrie_Octombrie_Noiembrie_Decembrie".split("_"), monthsShort : "Ian_Feb_Mar_Apr_Mai_Iun_Iul_Aug_Sep_Oct_Noi_Dec".split("_"), weekdays : "Duminică_Luni_Marţi_Miercuri_Joi_Vineri_Sâmbătă".split("_"), weekdaysShort : "Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"), weekdaysMin : "Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"), longDateFormat : { LT : "H:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY H:mm", LLLL : "dddd, D MMMM YYYY H:mm" }, calendar : { sameDay: "[azi la] LT", nextDay: '[mâine la] LT', nextWeek: 'dddd [la] LT', lastDay: '[ieri la] LT', lastWeek: '[fosta] dddd [la] LT', sameElse: 'L' }, relativeTime : { future : "peste %s", past : "%s în urmă", s : "câteva secunde", m : "un minut", mm : "%d minute", h : "o oră", hh : "%d ore", d : "o zi", dd : "%d zile", M : "o lună", MM : "%d luni", y : "un an", yy : "%d ani" }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : russian (ru) // author : Viktorminator : https://github.com/Viktorminator // Author : Menelion Elensúle : https://github.com/Oire (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { function plural(word, num) { var forms = word.split('_'); return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); } function relativeTimeWithPlural(number, withoutSuffix, key) { var format = { 'mm': 'минута_минуты_минут', 'hh': 'час_часа_часов', 'dd': 'день_дня_дней', 'MM': 'месяц_месяца_месяцев', 'yy': 'год_года_лет' }; if (key === 'm') { return withoutSuffix ? 'минута' : 'минуту'; } else { return number + ' ' + plural(format[key], +number); } } function monthsCaseReplace(m, format) { var months = { 'nominative': 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'), 'accusative': 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_') }, nounCase = (/D[oD]? *MMMM?/).test(format) ? 'accusative' : 'nominative'; return months[nounCase][m.month()]; } function monthsShortCaseReplace(m, format) { var monthsShort = { 'nominative': 'янв_фев_мар_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'), 'accusative': 'янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек'.split('_') }, nounCase = (/D[oD]? *MMMM?/).test(format) ? 'accusative' : 'nominative'; return monthsShort[nounCase][m.month()]; } function weekdaysCaseReplace(m, format) { var weekdays = { 'nominative': 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'), 'accusative': 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_') }, nounCase = (/\[ ?[Вв] ?(?:прошлую|следующую)? ?\] ?dddd/).test(format) ? 'accusative' : 'nominative'; return weekdays[nounCase][m.day()]; } moment.lang('ru', { months : monthsCaseReplace, monthsShort : monthsShortCaseReplace, weekdays : weekdaysCaseReplace, weekdaysShort : "вск_пнд_втр_срд_чтв_птн_сбт".split("_"), weekdaysMin : "вс_пн_вт_ср_чт_пт_сб".split("_"), longDateFormat : { LT : "HH:mm", L : "DD.MM.YYYY", LL : "D MMMM YYYY г.", LLL : "D MMMM YYYY г., LT", LLLL : "dddd, D MMMM YYYY г., LT" }, calendar : { sameDay: '[Сегодня в] LT', nextDay: '[Завтра в] LT', lastDay: '[Вчера в] LT', nextWeek: function () { return this.day() === 2 ? '[Во] dddd [в] LT' : '[В] dddd [в] LT'; }, lastWeek: function () { switch (this.day()) { case 0: return '[В прошлое] dddd [в] LT'; case 1: case 2: case 4: return '[В прошлый] dddd [в] LT'; case 3: case 5: case 6: return '[В прошлую] dddd [в] LT'; } }, sameElse: 'L' }, relativeTime : { future : "через %s", past : "%s назад", s : "несколько секунд", m : relativeTimeWithPlural, mm : relativeTimeWithPlural, h : "час", hh : relativeTimeWithPlural, d : "день", dd : relativeTimeWithPlural, M : "месяц", MM : relativeTimeWithPlural, y : "год", yy : relativeTimeWithPlural }, ordinal: function (number, period) { switch (period) { case 'M': case 'd': case 'DDD': return number + '-й'; case 'D': return number + '-го'; case 'w': case 'W': return number + '-я'; default: return number; } }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : slovak (sk) // author : Martin Minka : https://github.com/k2s // based on work of petrbela : https://github.com/petrbela (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var months = "január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"), monthsShort = "jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_"); function plural(n) { return (n > 1) && (n < 5); } function translate(number, withoutSuffix, key, isFuture) { var result = number + " "; switch (key) { case 's': // a few seconds / in a few seconds / a few seconds ago return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami'; case 'm': // a minute / in a minute / a minute ago return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou'); case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'minúty' : 'minút'); } else { return result + 'minútami'; } break; case 'h': // an hour / in an hour / an hour ago return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou'); case 'hh': // 9 hours / in 9 hours / 9 hours ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'hodiny' : 'hodín'); } else { return result + 'hodinami'; } break; case 'd': // a day / in a day / a day ago return (withoutSuffix || isFuture) ? 'deň' : 'dňom'; case 'dd': // 9 days / in 9 days / 9 days ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'dni' : 'dní'); } else { return result + 'dňami'; } break; case 'M': // a month / in a month / a month ago return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom'; case 'MM': // 9 months / in 9 months / 9 months ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'mesiace' : 'mesiacov'); } else { return result + 'mesiacmi'; } break; case 'y': // a year / in a year / a year ago return (withoutSuffix || isFuture) ? 'rok' : 'rokom'; case 'yy': // 9 years / in 9 years / 9 years ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'roky' : 'rokov'); } else { return result + 'rokmi'; } break; } } moment.lang('sk', { months : months, monthsShort : monthsShort, monthsParse : (function (months, monthsShort) { var i, _monthsParse = []; for (i = 0; i < 12; i++) { // use custom parser to solve problem with July (červenec) _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i'); } return _monthsParse; }(months, monthsShort)), weekdays : "nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"), weekdaysShort : "ne_po_ut_st_št_pi_so".split("_"), weekdaysMin : "ne_po_ut_st_št_pi_so".split("_"), longDateFormat : { LT: "H:mm", L : "DD.MM.YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY LT", LLLL : "dddd D. MMMM YYYY LT" }, calendar : { sameDay: "[dnes o] LT", nextDay: '[zajtra o] LT', nextWeek: function () { switch (this.day()) { case 0: return '[v nedeľu o] LT'; case 1: case 2: return '[v] dddd [o] LT'; case 3: return '[v stredu o] LT'; case 4: return '[vo štvrtok o] LT'; case 5: return '[v piatok o] LT'; case 6: return '[v sobotu o] LT'; } }, lastDay: '[včera o] LT', lastWeek: function () { switch (this.day()) { case 0: return '[minulú nedeľu o] LT'; case 1: case 2: return '[minulý] dddd [o] LT'; case 3: return '[minulú stredu o] LT'; case 4: case 5: return '[minulý] dddd [o] LT'; case 6: return '[minulú sobotu o] LT'; } }, sameElse: "L" }, relativeTime : { future : "za %s", past : "pred %s", s : translate, m : translate, mm : translate, h : translate, hh : translate, d : translate, dd : translate, M : translate, MM : translate, y : translate, yy : translate }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : slovenian (sl) // author : Robert Sedovšek : https://github.com/sedovsek (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { function translate(number, withoutSuffix, key) { var result = number + " "; switch (key) { case 'm': return withoutSuffix ? 'ena minuta' : 'eno minuto'; case 'mm': if (number === 1) { result += 'minuta'; } else if (number === 2) { result += 'minuti'; } else if (number === 3 || number === 4) { result += 'minute'; } else { result += 'minut'; } return result; case 'h': return withoutSuffix ? 'ena ura' : 'eno uro'; case 'hh': if (number === 1) { result += 'ura'; } else if (number === 2) { result += 'uri'; } else if (number === 3 || number === 4) { result += 'ure'; } else { result += 'ur'; } return result; case 'dd': if (number === 1) { result += 'dan'; } else { result += 'dni'; } return result; case 'MM': if (number === 1) { result += 'mesec'; } else if (number === 2) { result += 'meseca'; } else if (number === 3 || number === 4) { result += 'mesece'; } else { result += 'mesecev'; } return result; case 'yy': if (number === 1) { result += 'leto'; } else if (number === 2) { result += 'leti'; } else if (number === 3 || number === 4) { result += 'leta'; } else { result += 'let'; } return result; } } moment.lang('sl', { months : "januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"), monthsShort : "jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"), weekdays : "nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"), weekdaysShort : "ned._pon._tor._sre._čet._pet._sob.".split("_"), weekdaysMin : "ne_po_to_sr_če_pe_so".split("_"), longDateFormat : { LT : "H:mm", L : "DD. MM. YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY LT", LLLL : "dddd, D. MMMM YYYY LT" }, calendar : { sameDay : '[danes ob] LT', nextDay : '[jutri ob] LT', nextWeek : function () { switch (this.day()) { case 0: return '[v] [nedeljo] [ob] LT'; case 3: return '[v] [sredo] [ob] LT'; case 6: return '[v] [soboto] [ob] LT'; case 1: case 2: case 4: case 5: return '[v] dddd [ob] LT'; } }, lastDay : '[včeraj ob] LT', lastWeek : function () { switch (this.day()) { case 0: case 3: case 6: return '[prejšnja] dddd [ob] LT'; case 1: case 2: case 4: case 5: return '[prejšnji] dddd [ob] LT'; } }, sameElse : 'L' }, relativeTime : { future : "čez %s", past : "%s nazaj", s : "nekaj sekund", m : translate, mm : translate, h : translate, hh : translate, d : "en dan", dd : translate, M : "en mesec", MM : translate, y : "eno leto", yy : translate }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : Albanian (sq) // author : Flakërim Ismani : https://github.com/flakerimi // author: Menelion Elensúle: https://github.com/Oire (tests) (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('sq', { months : "Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"), monthsShort : "Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"), weekdays : "E Diel_E Hënë_E Marte_E Mërkure_E Enjte_E Premte_E Shtunë".split("_"), weekdaysShort : "Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"), weekdaysMin : "D_H_Ma_Më_E_P_Sh".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendar : { sameDay : '[Sot në] LT', nextDay : '[Neser në] LT', nextWeek : 'dddd [në] LT', lastDay : '[Dje në] LT', lastWeek : 'dddd [e kaluar në] LT', sameElse : 'L' }, relativeTime : { future : "në %s", past : "%s me parë", s : "disa seconda", m : "një minut", mm : "%d minutea", h : "një orë", hh : "%d orë", d : "një ditë", dd : "%d ditë", M : "një muaj", MM : "%d muaj", y : "një vit", yy : "%d vite" }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : swedish (sv) // author : Jens Alm : https://github.com/ulmus (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('sv', { months : "januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"), monthsShort : "jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"), weekdays : "söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"), weekdaysShort : "sön_mån_tis_ons_tor_fre_lör".split("_"), weekdaysMin : "sö_må_ti_on_to_fr_lö".split("_"), longDateFormat : { LT : "HH:mm", L : "YYYY-MM-DD", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: '[Idag] LT', nextDay: '[Imorgon] LT', lastDay: '[Igår] LT', nextWeek: 'dddd LT', lastWeek: '[Förra] dddd[en] LT', sameElse: 'L' }, relativeTime : { future : "om %s", past : "för %s sedan", s : "några sekunder", m : "en minut", mm : "%d minuter", h : "en timme", hh : "%d timmar", d : "en dag", dd : "%d dagar", M : "en månad", MM : "%d månader", y : "ett år", yy : "%d år" }, ordinal : function (number) { var b = number % 10, output = (~~ (number % 100 / 10) === 1) ? 'e' : (b === 1) ? 'a' : (b === 2) ? 'a' : (b === 3) ? 'e' : 'e'; return number + output; }, week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : thai (th) // author : Kridsada Thanabulpong : https://github.com/sirn (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('th', { months : "มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"), monthsShort : "มกรา_กุมภา_มีนา_เมษา_พฤษภา_มิถุนา_กรกฎา_สิงหา_กันยา_ตุลา_พฤศจิกา_ธันวา".split("_"), weekdays : "อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"), weekdaysShort : "อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"), // yes, three characters difference weekdaysMin : "อา._จ._อ._พ._พฤ._ศ._ส.".split("_"), longDateFormat : { LT : "H นาฬิกา m นาที", L : "YYYY/MM/DD", LL : "D MMMM YYYY", LLL : "D MMMM YYYY เวลา LT", LLLL : "วันddddที่ D MMMM YYYY เวลา LT" }, meridiem : function (hour, minute, isLower) { if (hour < 12) { return "ก่อนเที่ยง"; } else { return "หลังเที่ยง"; } }, calendar : { sameDay : '[วันนี้ เวลา] LT', nextDay : '[พรุ่งนี้ เวลา] LT', nextWeek : 'dddd[หน้า เวลา] LT', lastDay : '[เมื่อวานนี้ เวลา] LT', lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT', sameElse : 'L' }, relativeTime : { future : "อีก %s", past : "%sที่แล้ว", s : "ไม่กี่วินาที", m : "1 นาที", mm : "%d นาที", h : "1 ชั่วโมง", hh : "%d ชั่วโมง", d : "1 วัน", dd : "%d วัน", M : "1 เดือน", MM : "%d เดือน", y : "1 ปี", yy : "%d ปี" } }); })); // moment.js language configuration // language : turkish (tr) // authors : Erhan Gundogan : https://github.com/erhangundogan, // Burak Yiğit Kaya: https://github.com/BYK (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { var suffixes = { 1: "'inci", 5: "'inci", 8: "'inci", 70: "'inci", 80: "'inci", 2: "'nci", 7: "'nci", 20: "'nci", 50: "'nci", 3: "'üncü", 4: "'üncü", 100: "'üncü", 6: "'ncı", 9: "'uncu", 10: "'uncu", 30: "'uncu", 60: "'ıncı", 90: "'ıncı" }; moment.lang('tr', { months : "Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"), monthsShort : "Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"), weekdays : "Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"), weekdaysShort : "Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"), weekdaysMin : "Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"), longDateFormat : { LT : "HH:mm", L : "DD.MM.YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendar : { sameDay : '[bugün saat] LT', nextDay : '[yarın saat] LT', nextWeek : '[haftaya] dddd [saat] LT', lastDay : '[dün] LT', lastWeek : '[geçen hafta] dddd [saat] LT', sameElse : 'L' }, relativeTime : { future : "%s sonra", past : "%s önce", s : "birkaç saniye", m : "bir dakika", mm : "%d dakika", h : "bir saat", hh : "%d saat", d : "bir gün", dd : "%d gün", M : "bir ay", MM : "%d ay", y : "bir yıl", yy : "%d yıl" }, ordinal : function (number) { if (number === 0) { // special case for zero return number + "'ıncı"; } var a = number % 10, b = number % 100 - a, c = number >= 100 ? 100 : null; return number + (suffixes[a] || suffixes[b] || suffixes[c]); }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : Morocco Central Atlas Tamaziɣt in Latin (tzm-la) // author : Abdel Said : https://github.com/abdelsaid (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('tzm-la', { months : "innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"), monthsShort : "innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"), weekdays : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"), weekdaysShort : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"), weekdaysMin : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: "[asdkh g] LT", nextDay: '[aska g] LT', nextWeek: 'dddd [g] LT', lastDay: '[assant g] LT', lastWeek: 'dddd [g] LT', sameElse: 'L' }, relativeTime : { future : "dadkh s yan %s", past : "yan %s", s : "imik", m : "minuḍ", mm : "%d minuḍ", h : "saɛa", hh : "%d tassaɛin", d : "ass", dd : "%d ossan", M : "ayowr", MM : "%d iyyirn", y : "asgas", yy : "%d isgasn" }, week : { dow : 6, // Saturday is the first day of the week. doy : 12 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : Morocco Central Atlas Tamaziɣt (tzm) // author : Abdel Said : https://github.com/abdelsaid (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('tzm', { months : "ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"), monthsShort : "ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"), weekdays : "ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"), weekdaysShort : "ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"), weekdaysMin : "ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: "[ⴰⵙⴷⵅ ⴴ] LT", nextDay: '[ⴰⵙⴽⴰ ⴴ] LT', nextWeek: 'dddd [ⴴ] LT', lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT', lastWeek: 'dddd [ⴴ] LT', sameElse: 'L' }, relativeTime : { future : "ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s", past : "ⵢⴰⵏ %s", s : "ⵉⵎⵉⴽ", m : "ⵎⵉⵏⵓⴺ", mm : "%d ⵎⵉⵏⵓⴺ", h : "ⵙⴰⵄⴰ", hh : "%d ⵜⴰⵙⵙⴰⵄⵉⵏ", d : "ⴰⵙⵙ", dd : "%d oⵙⵙⴰⵏ", M : "ⴰⵢoⵓⵔ", MM : "%d ⵉⵢⵢⵉⵔⵏ", y : "ⴰⵙⴳⴰⵙ", yy : "%d ⵉⵙⴳⴰⵙⵏ" }, week : { dow : 6, // Saturday is the first day of the week. doy : 12 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : ukrainian (uk) // author : zemlanin : https://github.com/zemlanin // Author : Menelion Elensúle : https://github.com/Oire (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { function plural(word, num) { var forms = word.split('_'); return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); } function relativeTimeWithPlural(number, withoutSuffix, key) { var format = { 'mm': 'хвилина_хвилини_хвилин', 'hh': 'година_години_годин', 'dd': 'день_дні_днів', 'MM': 'місяць_місяці_місяців', 'yy': 'рік_роки_років' }; if (key === 'm') { return withoutSuffix ? 'хвилина' : 'хвилину'; } else if (key === 'h') { return withoutSuffix ? 'година' : 'годину'; } else { return number + ' ' + plural(format[key], +number); } } function monthsCaseReplace(m, format) { var months = { 'nominative': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_'), 'accusative': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_') }, nounCase = (/D[oD]? *MMMM?/).test(format) ? 'accusative' : 'nominative'; return months[nounCase][m.month()]; } function weekdaysCaseReplace(m, format) { var weekdays = { 'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'), 'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'), 'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_') }, nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ? 'accusative' : ((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ? 'genitive' : 'nominative'); return weekdays[nounCase][m.day()]; } function processHoursFunction(str) { return function () { return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT'; }; } moment.lang('uk', { months : monthsCaseReplace, monthsShort : "січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"), weekdays : weekdaysCaseReplace, weekdaysShort : "нед_пон_вів_сер_чет_п’ят_суб".split("_"), weekdaysMin : "нд_пн_вт_ср_чт_пт_сб".split("_"), longDateFormat : { LT : "HH:mm", L : "DD.MM.YYYY", LL : "D MMMM YYYY р.", LLL : "D MMMM YYYY р., LT", LLLL : "dddd, D MMMM YYYY р., LT" }, calendar : { sameDay: processHoursFunction('[Сьогодні '), nextDay: processHoursFunction('[Завтра '), lastDay: processHoursFunction('[Вчора '), nextWeek: processHoursFunction('[У] dddd ['), lastWeek: function () { switch (this.day()) { case 0: case 3: case 5: case 6: return processHoursFunction('[Минулої] dddd [').call(this); case 1: case 2: case 4: return processHoursFunction('[Минулого] dddd [').call(this); } }, sameElse: 'L' }, relativeTime : { future : "за %s", past : "%s тому", s : "декілька секунд", m : relativeTimeWithPlural, mm : relativeTimeWithPlural, h : "годину", hh : relativeTimeWithPlural, d : "день", dd : relativeTimeWithPlural, M : "місяць", MM : relativeTimeWithPlural, y : "рік", yy : relativeTimeWithPlural }, ordinal: function (number, period) { switch (period) { case 'M': case 'd': case 'DDD': case 'w': case 'W': return number + '-й'; case 'D': return number + '-го'; default: return number; } }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : chinese // author : suupic : https://github.com/suupic (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('zh-cn', { months : "一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"), monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), weekdays : "星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"), weekdaysShort : "周日_周一_周二_周三_周四_周五_周六".split("_"), weekdaysMin : "日_一_二_三_四_五_六".split("_"), longDateFormat : { LT : "Ah点mm", L : "YYYY年MMMD日", LL : "YYYY年MMMD日", LLL : "YYYY年MMMD日LT", LLLL : "YYYY年MMMD日ddddLT", l : "YYYY年MMMD日", ll : "YYYY年MMMD日", lll : "YYYY年MMMD日LT", llll : "YYYY年MMMD日ddddLT" }, meridiem : function (hour, minute, isLower) { if (hour < 9) { return "早上"; } else if (hour < 11 && minute < 30) { return "上午"; } else if (hour < 13 && minute < 30) { return "中午"; } else if (hour < 18) { return "下午"; } else { return "晚上"; } }, calendar : { sameDay : '[今天]LT', nextDay : '[明天]LT', nextWeek : '[下]ddddLT', lastDay : '[昨天]LT', lastWeek : '[上]ddddLT', sameElse : 'L' }, ordinal : function (number, period) { switch (period) { case "d" : case "D" : case "DDD" : return number + "日"; case "M" : return number + "月"; case "w" : case "W" : return number + "周"; default : return number; } }, relativeTime : { future : "%s内", past : "%s前", s : "几秒", m : "1分钟", mm : "%d分钟", h : "1小时", hh : "%d小时", d : "1天", dd : "%d天", M : "1个月", MM : "%d个月", y : "1年", yy : "%d年" } }); })); // moment.js language configuration // language : traditional chinese (zh-tw) // author : Ben : https://github.com/ben-lin (function (factory) { if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else if (typeof exports === 'object') { factory(require('../moment')); // Node } else { factory(window.moment); // Browser global } }(function (moment) { moment.lang('zh-tw', { months : "一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"), monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), weekdays : "星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"), weekdaysShort : "週日_週一_週二_週三_週四_週五_週六".split("_"), weekdaysMin : "日_一_二_三_四_五_六".split("_"), longDateFormat : { LT : "Ah點mm", L : "YYYY年MMMD日", LL : "YYYY年MMMD日", LLL : "YYYY年MMMD日LT", LLLL : "YYYY年MMMD日ddddLT", l : "YYYY年MMMD日", ll : "YYYY年MMMD日", lll : "YYYY年MMMD日LT", llll : "YYYY年MMMD日ddddLT" }, meridiem : function (hour, minute, isLower) { if (hour < 9) { return "早上"; } else if (hour < 11 && minute < 30) { return "上午"; } else if (hour < 13 && minute < 30) { return "中午"; } else if (hour < 18) { return "下午"; } else { return "晚上"; } }, calendar : { sameDay : '[今天]LT', nextDay : '[明天]LT', nextWeek : '[下]ddddLT', lastDay : '[昨天]LT', lastWeek : '[上]ddddLT', sameElse : 'L' }, ordinal : function (number, period) { switch (period) { case "d" : case "D" : case "DDD" : return number + "日"; case "M" : return number + "月"; case "w" : case "W" : return number + "週"; default : return number; } }, relativeTime : { future : "%s內", past : "%s前", s : "幾秒", m : "一分鐘", mm : "%d分鐘", h : "一小時", hh : "%d小時", d : "一天", dd : "%d天", M : "一個月", MM : "%d個月", y : "一年", yy : "%d年" } }); })); assets/plugins/moment/min/langs.min.js000064400000240613152510437720014051 0ustar00!function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("ar",{months:"يناير/ كانون الثاني_فبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"),monthsShort:"يناير/ كانون الثاني_فبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"h:mm",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&20>c?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){function b(a,b,c){var d={mm:"munutenn",MM:"miz",dd:"devezh"};return a+" "+e(d[c],a)}function c(a){switch(d(a)){case 1:case 3:case 4:case 5:case 9:return a+" bloaz";default:return a+" vloaz"}}function d(a){return a>9?d(a%10):a}function e(a,b){return 2===b?f(a):a}function f(a){var b={m:"v",b:"v",d:"z"};return void 0===b[a.charAt(0)]?a:b[a.charAt(0)]+a.substring(1)}a.lang("br",{months:"Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),longDateFormat:{LT:"h[e]mm A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY LT",LLLL:"dddd, D [a viz] MMMM YYYY LT"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondennoù",m:"ur vunutenn",mm:b,h:"un eur",hh:"%d eur",d:"un devezh",dd:b,M:"ur miz",MM:b,y:"ur bloaz",yy:c},ordinal:function(a){var b=1===a?"añ":"vet";return a+b},week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("ca",{months:"Gener_Febrer_Març_Abril_Maig_Juny_Juliol_Agost_Setembre_Octubre_Novembre_Desembre".split("_"),monthsShort:"Gen._Febr._Mar._Abr._Mai._Jun._Jul._Ag._Set._Oct._Nov._Des.".split("_"),weekdays:"Diumenge_Dilluns_Dimarts_Dimecres_Dijous_Divendres_Dissabte".split("_"),weekdaysShort:"Dg._Dl._Dt._Dc._Dj._Dv._Ds.".split("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),longDateFormat:{LT:"H:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},ordinal:"%dº",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){function b(a){return a>1&&5>a&&1!==~~(a/10)}function c(a,c,d,e){var f=a+" ";switch(d){case"s":return c||e?"pár vteřin":"pár vteřinami";case"m":return c?"minuta":e?"minutu":"minutou";case"mm":return c||e?f+(b(a)?"minuty":"minut"):f+"minutami";break;case"h":return c?"hodina":e?"hodinu":"hodinou";case"hh":return c||e?f+(b(a)?"hodiny":"hodin"):f+"hodinami";break;case"d":return c||e?"den":"dnem";case"dd":return c||e?f+(b(a)?"dny":"dní"):f+"dny";break;case"M":return c||e?"měsíc":"měsícem";case"MM":return c||e?f+(b(a)?"měsíce":"měsíců"):f+"měsíci";break;case"y":return c||e?"rok":"rokem";case"yy":return c||e?f+(b(a)?"roky":"let"):f+"lety"}}var d="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),e="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_");a.lang("cs",{months:d,monthsShort:e,monthsParse:function(a,b){var c,d=[];for(c=0;12>c;c++)d[c]=new RegExp("^"+a[c]+"$|^"+b[c]+"$","i");return d}(d,e),weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd D. MMMM YYYY LT"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:c,m:c,mm:c,h:c,hh:c,d:c,dd:c,M:c,MM:c,y:c,yy:c},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("cv",{months:"кăрлач_нарăс_пуш_ака_май_çĕртме_утă_çурла_авăн_юпа_чӳк_раштав".split("_"),monthsShort:"кăр_нар_пуш_ака_май_çĕр_утă_çур_ав_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кĕçнерникун_эрнекун_шăматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кĕç_эрн_шăм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кç_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",L:"DD-MM-YYYY",LL:"YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ]",LLL:"YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT",LLLL:"dddd, YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ĕнер] LT [сехетре]",nextWeek:"[Çитес] dddd LT [сехетре]",lastWeek:"[Иртнĕ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(a){var b=/сехет$/i.exec(a)?"рен":/çул$/i.exec(a)?"тан":"ран";return a+b},past:"%s каялла",s:"пĕр-ик çеккунт",m:"пĕр минут",mm:"%d минут",h:"пĕр сехет",hh:"%d сехет",d:"пĕр кун",dd:"%d кун",M:"пĕр уйăх",MM:"%d уйăх",y:"пĕр çул",yy:"%d çул"},ordinal:"%d-мĕш",week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D. MMMM, YYYY LT"},calendar:{sameDay:"[I dag kl.] LT",nextDay:"[I morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[I går kl.] LT",lastWeek:"[sidste] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){function b(a,b,c){var d={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?d[c][0]:d[c][1]}a.lang("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),longDateFormat:{LT:"H:mm [Uhr]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[Heute um] LT",sameElse:"L",nextDay:"[Morgen um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gestern um] LT",lastWeek:"[letzten] dddd [um] LT"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:b,mm:"%d Minuten",h:b,hh:"%d Stunden",d:b,dd:b,M:b,MM:b,y:b,yy:b},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(a,b){return/D/.test(b.substring(0,b.indexOf("MMMM")))?this._monthsGenitiveEl[a.month()]:this._monthsNominativeEl[a.month()]},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(a,b,c){return a>11?c?"μμ":"ΜΜ":c?"πμ":"ΠΜ"},longDateFormat:{LT:"h:mm A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:"[την προηγούμενη] dddd [{}] LT",sameElse:"L"},calendar:function(a,b){var c=this._calendarEl[a],d=b&&b.hours();return c.replace("{}",1===d%12?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},ordinal:function(a){return a+"η"},week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",L:"YYYY-MM-DD",LL:"D MMMM, YYYY",LLL:"D MMMM, YYYY LT",LLLL:"dddd, D MMMM, YYYY LT"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdays:"Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato".split("_"),weekdaysShort:"Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Ĵa_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",L:"YYYY-MM-DD",LL:"D[-an de] MMMM, YYYY",LLL:"D[-an de] MMMM, YYYY LT",LLLL:"dddd, [la] D[-an de] MMMM, YYYY LT"},meridiem:function(a,b,c){return a>11?c?"p.t.m.":"P.T.M.":c?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd [je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasinta] dddd [je] LT",sameElse:"L"},relativeTime:{future:"je %s",past:"antaŭ %s",s:"sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"},ordinal:"%da",week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"Do_Lu_Ma_Mi_Ju_Vi_Sá".split("_"),longDateFormat:{LT:"H:mm",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY LT",LLLL:"dddd, D [de] MMMM [de] YYYY LT"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinal:"%dº",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){function b(a,b,c,d){return d||b?"paari sekundi":"paar sekundit"}a.lang("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:b,m:"minut",mm:"%d minutit",h:"tund",hh:"%d tundi",d:"päev",dd:"%d päeva",M:"kuu",MM:"%d kuud",y:"aasta",yy:"%d aastat"},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),longDateFormat:{LT:"HH:mm",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] LT",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] LT",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] LT",llll:"ddd, YYYY[ko] MMM D[a] LT"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},ordinal:"%d.",week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){var b={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},c={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};a.lang("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},meridiem:function(a){return 12>a?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چندین ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(a){return a.replace(/[۰-۹]/g,function(a){return c[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]}).replace(/,/g,"،")},ordinal:"%dم",week:{dow:6,doy:12}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){function b(a,b,d,e){var f="";switch(d){case"s":return e?"muutaman sekunnin":"muutama sekunti";case"m":return e?"minuutin":"minuutti";case"mm":f=e?"minuutin":"minuuttia";break;case"h":return e?"tunnin":"tunti";case"hh":f=e?"tunnin":"tuntia";break;case"d":return e?"päivän":"päivä";case"dd":f=e?"päivän":"päivää";break;case"M":return e?"kuukauden":"kuukausi";case"MM":f=e?"kuukauden":"kuukautta";break;case"y":return e?"vuoden":"vuosi";case"yy":f=e?"vuoden":"vuotta"}return f=c(a,e)+" "+f}function c(a,b){return 10>a?b?e[a]:d[a]:a}var d="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),e=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",d[7],d[8],d[9]];a.lang("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] LT",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] LT",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] LT",llll:"ddd, Do MMM YYYY, [klo] LT"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:b,m:b,mm:b,h:b,hh:b,d:b,dd:b,M:b,MM:b,y:b,yy:b},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinal:function(a){return a+(1===a?"er":"")}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinal:function(a){return a+(1===a?"er":"")},week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("gl",{months:"Xaneiro_Febreiro_Marzo_Abril_Maio_Xuño_Xullo_Agosto_Setembro_Outubro_Novembro_Decembro".split("_"),monthsShort:"Xan._Feb._Mar._Abr._Mai._Xuñ._Xul._Ago._Set._Out._Nov._Dec.".split("_"),weekdays:"Domingo_Luns_Martes_Mércores_Xoves_Venres_Sábado".split("_"),weekdaysShort:"Dom._Lun._Mar._Mér._Xov._Ven._Sáb.".split("_"),weekdaysMin:"Do_Lu_Ma_Mé_Xo_Ve_Sá".split("_"),longDateFormat:{LT:"H:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(a){return"uns segundos"===a?"nuns segundos":"en "+a},past:"hai %s",s:"uns segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},ordinal:"%dº",week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY LT",LLLL:"dddd, D [ב]MMMM YYYY LT",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY LT",llll:"ddd, D MMM YYYY LT"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(a){return 2===a?"שעתיים":a+" שעות"},d:"יום",dd:function(a){return 2===a?"יומיים":a+" ימים"},M:"חודש",MM:function(a){return 2===a?"חודשיים":a+" חודשים"},y:"שנה",yy:function(a){return 2===a?"שנתיים":a+" שנים"}}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){var b={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},c={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.lang("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, LT",LLLL:"dddd, D MMMM YYYY, LT"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return c[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]})},meridiem:function(a){return 4>a?"रात":10>a?"सुबह":17>a?"दोपहर":20>a?"शाम":"रात"},week:{dow:0,doy:6}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){function b(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}a.lang("hr",{months:"sječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_"),monthsShort:"sje._vel._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),longDateFormat:{LT:"H:mm",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:b,mm:b,h:b,hh:b,d:"dan",dd:b,M:"mjesec",MM:b,y:"godinu",yy:b},ordinal:"%d.",week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){function b(a,b,c,d){var e=a;switch(c){case"s":return d||b?"néhány másodperc":"néhány másodperce";case"m":return"egy"+(d||b?" perc":" perce");case"mm":return e+(d||b?" perc":" perce");case"h":return"egy"+(d||b?" óra":" órája");case"hh":return e+(d||b?" óra":" órája");case"d":return"egy"+(d||b?" nap":" napja");case"dd":return e+(d||b?" nap":" napja");case"M":return"egy"+(d||b?" hónap":" hónapja");case"MM":return e+(d||b?" hónap":" hónapja");case"y":return"egy"+(d||b?" év":" éve");case"yy":return e+(d||b?" év":" éve")}return""}function c(a){return(a?"":"[múlt] ")+"["+d[this.day()]+"] LT[-kor]"}var d="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");a.lang("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D., LT",LLLL:"YYYY. MMMM D., dddd LT"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return c.call(this,!0) },lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return c.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:b,m:b,mm:b,h:b,hh:b,d:b,dd:b,M:b,MM:b,y:b,yy:b},ordinal:"%d.",week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] LT",LLLL:"dddd, D MMMM YYYY [pukul] LT"},meridiem:function(a){return 11>a?"pagi":15>a?"siang":19>a?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){function b(a){return 11===a%100?!0:1===a%10?!1:!0}function c(a,c,d,e){var f=a+" ";switch(d){case"s":return c||e?"nokkrar sekúndur":"nokkrum sekúndum";case"m":return c?"mínúta":"mínútu";case"mm":return b(a)?f+(c||e?"mínútur":"mínútum"):c?f+"mínúta":f+"mínútu";case"hh":return b(a)?f+(c||e?"klukkustundir":"klukkustundum"):f+"klukkustund";case"d":return c?"dagur":e?"dag":"degi";case"dd":return b(a)?c?f+"dagar":f+(e?"daga":"dögum"):c?f+"dagur":f+(e?"dag":"degi");case"M":return c?"mánuður":e?"mánuð":"mánuði";case"MM":return b(a)?c?f+"mánuðir":f+(e?"mánuði":"mánuðum"):c?f+"mánuður":f+(e?"mánuð":"mánuði");case"y":return c||e?"ár":"ári";case"yy":return b(a)?f+(c||e?"ár":"árum"):f+(c||e?"ár":"ári")}}a.lang("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",L:"DD/MM/YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] LT",LLLL:"dddd, D. MMMM YYYY [kl.] LT"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:c,m:c,mm:c,h:"klukkustund",hh:c,d:c,dd:c,M:c,MM:c,y:c,yy:c},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("it",{months:"Gennaio_Febbraio_Marzo_Aprile_Maggio_Giugno_Luglio_Agosto_Settembre_Ottobre_Novembre_Dicembre".split("_"),monthsShort:"Gen_Feb_Mar_Apr_Mag_Giu_Lug_Ago_Set_Ott_Nov_Dic".split("_"),weekdays:"Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato".split("_"),weekdaysShort:"Dom_Lun_Mar_Mer_Gio_Ven_Sab".split("_"),weekdaysMin:"D_L_Ma_Me_G_V_S".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:"[lo scorso] dddd [alle] LT",sameElse:"L"},relativeTime:{future:function(a){return(/^[0-9].+$/.test(a)?"tra":"in")+" "+a},past:"%s fa",s:"secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},ordinal:"%dº",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("ja",{months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"Ah時m分",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日LT",LLLL:"YYYY年M月D日LT dddd"},meridiem:function(a){return 12>a?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){function b(a,b){var c={nominative:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),accusative:"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს".split("_")},d=/D[oD] *MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function c(a,b){var c={nominative:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),accusative:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_")},d=/(წინა|შემდეგ)/.test(b)?"accusative":"nominative";return c[d][a.day()]}a.lang("ka",{months:b,monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:c,weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"h:mm A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(a){return/(წამი|წუთი|საათი|წელი)/.test(a)?a.replace(/ი$/,"ში"):a+"ში"},past:function(a){return/(წამი|წუთი|საათი|დღე|თვე)/.test(a)?a.replace(/(ი|ე)$/,"ის წინ"):/წელი/.test(a)?a.replace(/წელი$/,"წლის წინ"):void 0},s:"რამდენიმე წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},ordinal:function(a){return 0===a?a:1===a?a+"-ლი":20>a||100>=a&&0===a%20||0===a%100?"მე-"+a:a+"-ე"},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h시 mm분",L:"YYYY.MM.DD",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 LT",LLLL:"YYYY년 MMMM D일 dddd LT"},meridiem:function(a){return 12>a?"오전":"오후"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇초",ss:"%d초",m:"일분",mm:"%d분",h:"한시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한달",MM:"%d달",y:"일년",yy:"%d년"},ordinal:"%d일"})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){function b(a,b,c){var d=a.split("_");return c?1===b%10&&11!==b?d[2]:d[3]:1===b%10&&11!==b?d[0]:d[1]}function c(a,c,e){return a+" "+b(d[e],a,c)}var d={mm:"minūti_minūtes_minūte_minūtes",hh:"stundu_stundas_stunda_stundas",dd:"dienu_dienas_diena_dienas",MM:"mēnesi_mēnešus_mēnesis_mēneši",yy:"gadu_gadus_gads_gadi"};a.lang("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, LT",LLLL:"YYYY. [gada] D. MMMM, dddd, LT"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"%s vēlāk",past:"%s agrāk",s:"dažas sekundes",m:"minūti",mm:c,h:"stundu",hh:c,d:"dienu",dd:c,M:"mēnesi",MM:c,y:"gadu",yy:c},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, LT",LLLL:"dddd, D MMMM YYYY, LT"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiem:function(a){return 4>a?"രാത്രി":12>a?"രാവിലെ":17>a?"ഉച്ച കഴിഞ്ഞ്":20>a?"വൈകുന്നേരം":"രാത്രി"}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){var b={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},c={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.lang("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, LT",LLLL:"dddd, D MMMM YYYY, LT"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%s नंतर",past:"%s पूर्वी",s:"सेकंद",m:"एक मिनिट",mm:"%d मिनिटे",h:"एक तास",hh:"%d तास",d:"एक दिवस",dd:"%d दिवस",M:"एक महिना",MM:"%d महिने",y:"एक वर्ष",yy:"%d वर्षे"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return c[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]})},meridiem:function(a){return 4>a?"रात्री":10>a?"सकाळी":17>a?"दुपारी":20>a?"सायंकाळी":"रात्री"},week:{dow:0,doy:6}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] LT",LLLL:"dddd, D MMMM YYYY [pukul] LT"},meridiem:function(a){return 11>a?"pagi":15>a?"tengahari":19>a?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"H.mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] LT",LLLL:"dddd D. MMMM YYYY [kl.] LT"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"for %s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){var b={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},c={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.lang("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आइ._सो._मङ्_बु._बि._शु._श.".split("_"),longDateFormat:{LT:"Aको h:mm बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, LT",LLLL:"dddd, D MMMM YYYY, LT"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return c[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]})},meridiem:function(a){return 3>a?"राती":10>a?"बिहान":15>a?"दिउँसो":18>a?"बेलुका":20>a?"साँझ":"राती"},calendar:{sameDay:"[आज] LT",nextDay:"[भोली] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडी",s:"केही समय",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){var b="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),c="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_");a.lang("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(a,d){return/-MMM-/.test(d)?c[a.month()]:b[a.month()]},weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),longDateFormat:{LT:"HH:mm",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[Vandaag om] LT",nextDay:"[Morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregående] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"for %s siden",s:"noen sekund",m:"ett minutt",mm:"%d minutt",h:"en time",hh:"%d timar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){function b(a){return 5>a%10&&a%10>1&&1!==~~(a/10)}function c(a,c,d){var e=a+" ";switch(d){case"m":return c?"minuta":"minutę";case"mm":return e+(b(a)?"minuty":"minut");case"h":return c?"godzina":"godzinę";case"hh":return e+(b(a)?"godziny":"godzin");case"MM":return e+(b(a)?"miesiące":"miesięcy");case"yy":return e+(b(a)?"lata":"lat")}}var d="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),e="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");a.lang("pl",{months:function(a,b){return/D MMMM/.test(b)?e[a.month()]:d[a.month()]},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"nie_pon_wt_śr_czw_pt_sb".split("_"),weekdaysMin:"N_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:"[W] dddd [o] LT",lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:c,mm:c,h:c,hh:c,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:c,y:"rok",yy:c},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("pt-br",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY LT",LLLL:"dddd, D [de] MMMM [de] YYYY LT"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinal:"%dº"})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("pt",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY LT",LLLL:"dddd, D [de] MMMM [de] YYYY LT"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinal:"%dº",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("ro",{months:"Ianuarie_Februarie_Martie_Aprilie_Mai_Iunie_Iulie_August_Septembrie_Octombrie_Noiembrie_Decembrie".split("_"),monthsShort:"Ian_Feb_Mar_Apr_Mai_Iun_Iul_Aug_Sep_Oct_Noi_Dec".split("_"),weekdays:"Duminică_Luni_Marţi_Miercuri_Joi_Vineri_Sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",m:"un minut",mm:"%d minute",h:"o oră",hh:"%d ore",d:"o zi",dd:"%d zile",M:"o lună",MM:"%d luni",y:"un an",yy:"%d ani"},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){function b(a,b){var c=a.split("_");return 1===b%10&&11!==b%100?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function c(a,c,d){var e={mm:"минута_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};return"m"===d?c?"минута":"минуту":a+" "+b(e[d],+a)}function d(a,b){var c={nominative:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),accusative:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_")},d=/D[oD]? *MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function e(a,b){var c={nominative:"янв_фев_мар_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),accusative:"янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек".split("_")},d=/D[oD]? *MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function f(a,b){var c={nominative:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),accusative:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_")},d=/\[ ?[Вв] ?(?:прошлую|следующую)? ?\] ?dddd/.test(b)?"accusative":"nominative";return c[d][a.day()]}a.lang("ru",{months:d,monthsShort:e,weekdays:f,weekdaysShort:"вск_пнд_втр_срд_чтв_птн_сбт".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., LT",LLLL:"dddd, D MMMM YYYY г., LT"},calendar:{sameDay:"[Сегодня в] LT",nextDay:"[Завтра в] LT",lastDay:"[Вчера в] LT",nextWeek:function(){return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT"},lastWeek:function(){switch(this.day()){case 0:return"[В прошлое] dddd [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:c,mm:c,h:"час",hh:c,d:"день",dd:c,M:"месяц",MM:c,y:"год",yy:c},ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":return a+"-й";case"D":return a+"-го";case"w":case"W":return a+"-я";default:return a}},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){function b(a){return a>1&&5>a}function c(a,c,d,e){var f=a+" ";switch(d){case"s":return c||e?"pár sekúnd":"pár sekundami";case"m":return c?"minúta":e?"minútu":"minútou";case"mm":return c||e?f+(b(a)?"minúty":"minút"):f+"minútami";break;case"h":return c?"hodina":e?"hodinu":"hodinou";case"hh":return c||e?f+(b(a)?"hodiny":"hodín"):f+"hodinami";break;case"d":return c||e?"deň":"dňom";case"dd":return c||e?f+(b(a)?"dni":"dní"):f+"dňami";break;case"M":return c||e?"mesiac":"mesiacom";case"MM":return c||e?f+(b(a)?"mesiace":"mesiacov"):f+"mesiacmi";break;case"y":return c||e?"rok":"rokom";case"yy":return c||e?f+(b(a)?"roky":"rokov"):f+"rokmi"}}var d="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),e="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");a.lang("sk",{months:d,monthsShort:e,monthsParse:function(a,b){var c,d=[];for(c=0;12>c;c++)d[c]=new RegExp("^"+a[c]+"$|^"+b[c]+"$","i");return d}(d,e),weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd D. MMMM YYYY LT"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:c,m:c,mm:c,h:c,hh:c,d:c,dd:c,M:c,MM:c,y:c,yy:c},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){function b(a,b,c){var d=a+" ";switch(c){case"m":return b?"ena minuta":"eno minuto";case"mm":return d+=1===a?"minuta":2===a?"minuti":3===a||4===a?"minute":"minut";case"h":return b?"ena ura":"eno uro";case"hh":return d+=1===a?"ura":2===a?"uri":3===a||4===a?"ure":"ur";case"dd":return d+=1===a?"dan":"dni";case"MM":return d+=1===a?"mesec":2===a?"meseca":3===a||4===a?"mesece":"mesecev";case"yy":return d+=1===a?"leto":2===a?"leti":3===a||4===a?"leta":"let"}}a.lang("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),longDateFormat:{LT:"H:mm",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[prejšnja] dddd [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"%s nazaj",s:"nekaj sekund",m:b,mm:b,h:b,hh:b,d:"en dan",dd:b,M:"en mesec",MM:b,y:"eno leto",yy:b},ordinal:"%d.",week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Marte_E Mërkure_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Neser në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s me parë",s:"disa seconda",m:"një minut",mm:"%d minutea",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"dddd LT",lastWeek:"[Förra] dddd[en] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"e":1===b?"a":2===b?"a":3===b?"e":"e";return a+c},week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"มกรา_กุมภา_มีนา_เมษา_พฤษภา_มิถุนา_กรกฎา_สิงหา_กันยา_ตุลา_พฤศจิกา_ธันวา".split("_"),weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),longDateFormat:{LT:"H นาฬิกา m นาที",L:"YYYY/MM/DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา LT",LLLL:"วันddddที่ D MMMM YYYY เวลา LT"},meridiem:function(a){return 12>a?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){var b={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};a.lang("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[haftaya] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen hafta] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(a){if(0===a)return a+"'ıncı"; var c=a%10,d=a%100-c,e=a>=100?100:null;return a+(b[c]||b[d]||b[e])},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("tzm-la",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,doy:12}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){function b(a,b){var c=a.split("_");return 1===b%10&&11!==b%100?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function c(a,c,d){var e={mm:"хвилина_хвилини_хвилин",hh:"година_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===d?c?"хвилина":"хвилину":"h"===d?c?"година":"годину":a+" "+b(e[d],+a)}function d(a,b){var c={nominative:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_"),accusative:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_")},d=/D[oD]? *MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function e(a,b){var c={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")},d=/(\[[ВвУу]\]) ?dddd/.test(b)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(b)?"genitive":"nominative";return c[d][a.day()]}function f(a){return function(){return a+"о"+(11===this.hours()?"б":"")+"] LT"}}a.lang("uk",{months:d,monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:e,weekdaysShort:"нед_пон_вів_сер_чет_п’ят_суб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., LT",LLLL:"dddd, D MMMM YYYY р., LT"},calendar:{sameDay:f("[Сьогодні "),nextDay:f("[Завтра "),lastDay:f("[Вчора "),nextWeek:f("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return f("[Минулої] dddd [").call(this);case 1:case 2:case 4:return f("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",m:c,mm:c,h:"годину",hh:c,d:"день",dd:c,M:"місяць",MM:c,y:"рік",yy:c},ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a+"-й";case"D":return a+"-го";default:return a}},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"Ah点mm",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日LT",LLLL:"YYYY年MMMD日ddddLT",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日LT",llll:"YYYY年MMMD日ddddLT"},meridiem:function(a,b){return 9>a?"早上":11>a&&30>b?"上午":13>a&&30>b?"中午":18>a?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"周";default:return a}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",m:"1分钟",mm:"%d分钟",h:"1小时",hh:"%d小时",d:"1天",dd:"%d天",M:"1个月",MM:"%d个月",y:"1年",yy:"%d年"}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?a(require("../moment")):a(window.moment)}(function(a){a.lang("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"Ah點mm",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日LT",LLLL:"YYYY年MMMD日ddddLT",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日LT",llll:"YYYY年MMMD日ddddLT"},meridiem:function(a,b){return 9>a?"早上":11>a&&30>b?"上午":13>a&&30>b?"中午":18>a?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"一分鐘",mm:"%d分鐘",h:"一小時",hh:"%d小時",d:"一天",dd:"%d天",M:"一個月",MM:"%d個月",y:"一年",yy:"%d年"}})});assets/plugins/moment/min/moment+langs.min.js000064400000271321152510437720015344 0ustar00//! moment.js //! version : 2.2.1 //! authors : Tim Wood, Iskren Chernev, Moment.js contributors //! license : MIT //! momentjs.com (function(a){function b(a,b){return function(c){return i(a.call(this,c),b)}}function c(a,b){return function(c){return this.lang().ordinal(a.call(this,c),b)}}function d(){}function e(a){g(this,a)}function f(a){var b=a.years||a.year||a.y||0,c=a.months||a.month||a.M||0,d=a.weeks||a.week||a.w||0,e=a.days||a.day||a.d||0,f=a.hours||a.hour||a.h||0,g=a.minutes||a.minute||a.m||0,h=a.seconds||a.second||a.s||0,i=a.milliseconds||a.millisecond||a.ms||0;this._input=a,this._milliseconds=+i+1e3*h+6e4*g+36e5*f,this._days=+e+7*d,this._months=+c+12*b,this._data={},this._bubble()}function g(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function h(a){return 0>a?Math.ceil(a):Math.floor(a)}function i(a,b){for(var c=a+"";c.lengthc;c++)~~a[c]!==~~b[c]&&f++;return f+e}function m(a){return a?ib[a]||a.toLowerCase().replace(/(.)s$/,"$1"):a}function n(a,b){return b.abbr=a,P[a]||(P[a]=new d),P[a].set(b),P[a]}function o(a){delete P[a]}function p(a){if(!a)return L.fn._lang;if(!P[a]&&Q)try{require("./lang/"+a)}catch(b){return L.fn._lang}return P[a]||L.fn._lang}function q(a){return a.match(/\[.*\]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function r(a){var b,c,d=a.match(T);for(b=0,c=d.length;c>b;b++)d[b]=mb[d[b]]?mb[d[b]]:q(d[b]);return function(e){var f="";for(b=0;c>b;b++)f+=d[b]instanceof Function?d[b].call(e,a):d[b];return f}}function s(a,b){return b=t(b,a.lang()),jb[b]||(jb[b]=r(b)),jb[b](a)}function t(a,b){function c(a){return b.longDateFormat(a)||a}for(var d=5;d--&&(U.lastIndex=0,U.test(a));)a=a.replace(U,c);return a}function u(a,b){switch(a){case"DDDD":return X;case"YYYY":return Y;case"YYYYY":return Z;case"S":case"SS":case"SSS":case"DDD":return W;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return $;case"a":case"A":return p(b._l)._meridiemParse;case"X":return bb;case"Z":case"ZZ":return _;case"T":return ab;case"MM":case"DD":case"YY":case"HH":case"hh":case"mm":case"ss":case"M":case"D":case"d":case"H":case"h":case"m":case"s":return V;default:return new RegExp(a.replace("\\",""))}}function v(a){var b=(_.exec(a)||[])[0],c=(b+"").match(fb)||["-",0,0],d=+(60*c[1])+~~c[2];return"+"===c[0]?-d:d}function w(a,b,c){var d,e=c._a;switch(a){case"M":case"MM":null!=b&&(e[1]=~~b-1);break;case"MMM":case"MMMM":d=p(c._l).monthsParse(b),null!=d?e[1]=d:c._isValid=!1;break;case"D":case"DD":null!=b&&(e[2]=~~b);break;case"DDD":case"DDDD":null!=b&&(e[1]=0,e[2]=~~b);break;case"YY":e[0]=~~b+(~~b>68?1900:2e3);break;case"YYYY":case"YYYYY":e[0]=~~b;break;case"a":case"A":c._isPm=p(c._l).isPM(b);break;case"H":case"HH":case"h":case"hh":e[3]=~~b;break;case"m":case"mm":e[4]=~~b;break;case"s":case"ss":e[5]=~~b;break;case"S":case"SS":case"SSS":e[6]=~~(1e3*("0."+b));break;case"X":c._d=new Date(1e3*parseFloat(b));break;case"Z":case"ZZ":c._useUTC=!0,c._tzm=v(b)}null==b&&(c._isValid=!1)}function x(a){var b,c,d,e=[];if(!a._d){for(d=z(a),b=0;3>b&&null==a._a[b];++b)a._a[b]=e[b]=d[b];for(;7>b;b++)a._a[b]=e[b]=null==a._a[b]?2===b?1:0:a._a[b];e[3]+=~~((a._tzm||0)/60),e[4]+=~~((a._tzm||0)%60),c=new Date(0),a._useUTC?(c.setUTCFullYear(e[0],e[1],e[2]),c.setUTCHours(e[3],e[4],e[5],e[6])):(c.setFullYear(e[0],e[1],e[2]),c.setHours(e[3],e[4],e[5],e[6])),a._d=c}}function y(a){var b=a._i;a._d||(a._a=[b.years||b.year||b.y,b.months||b.month||b.M,b.days||b.day||b.d,b.hours||b.hour||b.h,b.minutes||b.minute||b.m,b.seconds||b.second||b.s,b.milliseconds||b.millisecond||b.ms],x(a))}function z(a){var b=new Date;return a._useUTC?[b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()]:[b.getFullYear(),b.getMonth(),b.getDate()]}function A(a){var b,c,d,e=p(a._l),f=""+a._i;for(d=t(a._f,e).match(T),a._a=[],b=0;bh&&(i=h,d=c);g(a,d)}function C(a){var b,c=a._i,d=cb.exec(c);if(d){for(a._f="YYYY-MM-DD"+(d[2]||" "),b=0;4>b;b++)if(eb[b][1].exec(c)){a._f+=eb[b][0];break}_.exec(c)&&(a._f+=" Z"),A(a)}else a._d=new Date(c)}function D(b){var c=b._i,d=R.exec(c);c===a?b._d=new Date:d?b._d=new Date(+d[1]):"string"==typeof c?C(b):k(c)?(b._a=c.slice(0),x(b)):c instanceof Date?b._d=new Date(+c):"object"==typeof c?y(b):b._d=new Date(c)}function E(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function F(a,b,c){var d=O(Math.abs(a)/1e3),e=O(d/60),f=O(e/60),g=O(f/24),h=O(g/365),i=45>d&&["s",d]||1===e&&["m"]||45>e&&["mm",e]||1===f&&["h"]||22>f&&["hh",f]||1===g&&["d"]||25>=g&&["dd",g]||45>=g&&["M"]||345>g&&["MM",O(g/30)]||1===h&&["y"]||["yy",h];return i[2]=b,i[3]=a>0,i[4]=c,E.apply({},i)}function G(a,b,c){var d,e=c-b,f=c-a.day();return f>e&&(f-=7),e-7>f&&(f+=7),d=L(a).add("d",f),{week:Math.ceil(d.dayOfYear()/7),year:d.year()}}function H(a){var b=a._i,c=a._f;return null===b||""===b?null:("string"==typeof b&&(a._i=b=p().preparse(b)),L.isMoment(b)?(a=g({},b),a._d=new Date(+b._d)):c?k(c)?B(a):A(a):D(a),new e(a))}function I(a,b){L.fn[a]=L.fn[a+"s"]=function(a){var c=this._isUTC?"UTC":"";return null!=a?(this._d["set"+c+b](a),L.updateOffset(this),this):this._d["get"+c+b]()}}function J(a){L.duration.fn[a]=function(){return this._data[a]}}function K(a,b){L.duration.fn["as"+a]=function(){return+this/b}}for(var L,M,N="2.2.1",O=Math.round,P={},Q="undefined"!=typeof module&&module.exports,R=/^\/?Date\((\-?\d+)/i,S=/(\-)?(?:(\d*)\.)?(\d+)\:(\d+)\:(\d+)\.?(\d{3})?/,T=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|SS?S?|X|zz?|ZZ?|.)/g,U=/(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g,V=/\d\d?/,W=/\d{1,3}/,X=/\d{3}/,Y=/\d{1,4}/,Z=/[+\-]?\d{1,6}/,$=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,_=/Z|[\+\-]\d\d:?\d\d/i,ab=/T/i,bb=/[\+\-]?\d+(\.\d{1,3})?/,cb=/^\s*\d{4}-\d\d-\d\d((T| )(\d\d(:\d\d(:\d\d(\.\d\d?\d?)?)?)?)?([\+\-]\d\d:?\d\d)?)?/,db="YYYY-MM-DDTHH:mm:ssZ",eb=[["HH:mm:ss.S",/(T| )\d\d:\d\d:\d\d\.\d{1,3}/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],fb=/([\+\-]|\d\d)/gi,gb="Date|Hours|Minutes|Seconds|Milliseconds".split("|"),hb={Milliseconds:1,Seconds:1e3,Minutes:6e4,Hours:36e5,Days:864e5,Months:2592e6,Years:31536e6},ib={ms:"millisecond",s:"second",m:"minute",h:"hour",d:"day",w:"week",W:"isoweek",M:"month",y:"year"},jb={},kb="DDD w W M D d".split(" "),lb="M D H h m s w W".split(" "),mb={M:function(){return this.month()+1},MMM:function(a){return this.lang().monthsShort(this,a)},MMMM:function(a){return this.lang().months(this,a)},D:function(){return this.date()},DDD:function(){return this.dayOfYear()},d:function(){return this.day()},dd:function(a){return this.lang().weekdaysMin(this,a)},ddd:function(a){return this.lang().weekdaysShort(this,a)},dddd:function(a){return this.lang().weekdays(this,a)},w:function(){return this.week()},W:function(){return this.isoWeek()},YY:function(){return i(this.year()%100,2)},YYYY:function(){return i(this.year(),4)},YYYYY:function(){return i(this.year(),5)},gg:function(){return i(this.weekYear()%100,2)},gggg:function(){return this.weekYear()},ggggg:function(){return i(this.weekYear(),5)},GG:function(){return i(this.isoWeekYear()%100,2)},GGGG:function(){return this.isoWeekYear()},GGGGG:function(){return i(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.lang().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.lang().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return~~(this.milliseconds()/100)},SS:function(){return i(~~(this.milliseconds()/10),2)},SSS:function(){return i(this.milliseconds(),3)},Z:function(){var a=-this.zone(),b="+";return 0>a&&(a=-a,b="-"),b+i(~~(a/60),2)+":"+i(~~a%60,2)},ZZ:function(){var a=-this.zone(),b="+";return 0>a&&(a=-a,b="-"),b+i(~~(10*a/6),4)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()}};kb.length;)M=kb.pop(),mb[M+"o"]=c(mb[M],M);for(;lb.length;)M=lb.pop(),mb[M+M]=b(mb[M],2);for(mb.DDDD=b(mb.DDD,3),g(d.prototype,{set:function(a){var b,c;for(c in a)b=a[c],"function"==typeof b?this[c]=b:this["_"+c]=b},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(a){return this._months[a.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(a){return this._monthsShort[a.month()]},monthsParse:function(a){var b,c,d;for(this._monthsParse||(this._monthsParse=[]),b=0;12>b;b++)if(this._monthsParse[b]||(c=L.utc([2e3,b]),d="^"+this.months(c,"")+"|^"+this.monthsShort(c,""),this._monthsParse[b]=new RegExp(d.replace(".",""),"i")),this._monthsParse[b].test(a))return b},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(a){return this._weekdays[a.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(a){return this._weekdaysShort[a.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(a){return this._weekdaysMin[a.day()]},weekdaysParse:function(a){var b,c,d;for(this._weekdaysParse||(this._weekdaysParse=[]),b=0;7>b;b++)if(this._weekdaysParse[b]||(c=L([2e3,1]).day(b),d="^"+this.weekdays(c,"")+"|^"+this.weekdaysShort(c,"")+"|^"+this.weekdaysMin(c,""),this._weekdaysParse[b]=new RegExp(d.replace(".",""),"i")),this._weekdaysParse[b].test(a))return b},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D YYYY",LLL:"MMMM D YYYY LT",LLLL:"dddd, MMMM D YYYY LT"},longDateFormat:function(a){var b=this._longDateFormat[a];return!b&&this._longDateFormat[a.toUpperCase()]&&(b=this._longDateFormat[a.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a]=b),b},isPM:function(a){return"p"===(a+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(a,b){var c=this._calendar[a];return"function"==typeof c?c.apply(b):c},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(a,b,c,d){var e=this._relativeTime[c];return"function"==typeof e?e(a,b,c,d):e.replace(/%d/i,a)},pastFuture:function(a,b){var c=this._relativeTime[a>0?"future":"past"];return"function"==typeof c?c(b):c.replace(/%s/i,b)},ordinal:function(a){return this._ordinal.replace("%d",a)},_ordinal:"%d",preparse:function(a){return a},postformat:function(a){return a},week:function(a){return G(a,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6}}),L=function(a,b,c){return H({_i:a,_f:b,_l:c,_isUTC:!1})},L.utc=function(a,b,c){return H({_useUTC:!0,_isUTC:!0,_l:c,_i:a,_f:b}).utc()},L.unix=function(a){return L(1e3*a)},L.duration=function(a,b){var c,d,e=L.isDuration(a),g="number"==typeof a,h=e?a._input:g?{}:a,i=S.exec(a);return g?b?h[b]=a:h.milliseconds=a:i&&(c="-"===i[1]?-1:1,h={y:0,d:~~i[2]*c,h:~~i[3]*c,m:~~i[4]*c,s:~~i[5]*c,ms:~~i[6]*c}),d=new f(h),e&&a.hasOwnProperty("_lang")&&(d._lang=a._lang),d},L.version=N,L.defaultFormat=db,L.updateOffset=function(){},L.lang=function(a,b){return a?(a=a.toLowerCase(),a=a.replace("_","-"),b?n(a,b):null===b?(o(a),a="en"):P[a]||p(a),L.duration.fn._lang=L.fn._lang=p(a),void 0):L.fn._lang._abbr},L.langData=function(a){return a&&a._lang&&a._lang._abbr&&(a=a._lang._abbr),p(a)},L.isMoment=function(a){return a instanceof e},L.isDuration=function(a){return a instanceof f},g(L.fn=e.prototype,{clone:function(){return L(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){return s(L(this).utc(),"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")},toArray:function(){var a=this;return[a.year(),a.month(),a.date(),a.hours(),a.minutes(),a.seconds(),a.milliseconds()]},isValid:function(){return null==this._isValid&&(this._isValid=this._a?!l(this._a,(this._isUTC?L.utc(this._a):L(this._a)).toArray()):!isNaN(this._d.getTime())),!!this._isValid},invalidAt:function(){var a,b=this._a,c=(this._isUTC?L.utc(this._a):L(this._a)).toArray();for(a=6;a>=0&&b[a]===c[a];--a);return a},utc:function(){return this.zone(0)},local:function(){return this.zone(0),this._isUTC=!1,this},format:function(a){var b=s(this,a||L.defaultFormat);return this.lang().postformat(b)},add:function(a,b){var c;return c="string"==typeof a?L.duration(+b,a):L.duration(a,b),j(this,c,1),this},subtract:function(a,b){var c;return c="string"==typeof a?L.duration(+b,a):L.duration(a,b),j(this,c,-1),this},diff:function(a,b,c){var d,e,f=this._isUTC?L(a).zone(this._offset||0):L(a).local(),g=6e4*(this.zone()-f.zone());return b=m(b),"year"===b||"month"===b?(d=432e5*(this.daysInMonth()+f.daysInMonth()),e=12*(this.year()-f.year())+(this.month()-f.month()),e+=(this-L(this).startOf("month")-(f-L(f).startOf("month")))/d,e-=6e4*(this.zone()-L(this).startOf("month").zone()-(f.zone()-L(f).startOf("month").zone()))/d,"year"===b&&(e/=12)):(d=this-f,e="second"===b?d/1e3:"minute"===b?d/6e4:"hour"===b?d/36e5:"day"===b?(d-g)/864e5:"week"===b?(d-g)/6048e5:d),c?e:h(e)},from:function(a,b){return L.duration(this.diff(a)).lang(this.lang()._abbr).humanize(!b)},fromNow:function(a){return this.from(L(),a)},calendar:function(){var a=this.diff(L().zone(this.zone()).startOf("day"),"days",!0),b=-6>a?"sameElse":-1>a?"lastWeek":0>a?"lastDay":1>a?"sameDay":2>a?"nextDay":7>a?"nextWeek":"sameElse";return this.format(this.lang().calendar(b,this))},isLeapYear:function(){var a=this.year();return 0===a%4&&0!==a%100||0===a%400},isDST:function(){return this.zone()+L(a).startOf(b)},isBefore:function(a,b){return b="undefined"!=typeof b?b:"millisecond",+this.clone().startOf(b)<+L(a).startOf(b)},isSame:function(a,b){return b="undefined"!=typeof b?b:"millisecond",+this.clone().startOf(b)===+L(a).startOf(b)},min:function(a){return a=L.apply(null,arguments),this>a?this:a},max:function(a){return a=L.apply(null,arguments),a>this?this:a},zone:function(a){var b=this._offset||0;return null==a?this._isUTC?b:this._d.getTimezoneOffset():("string"==typeof a&&(a=v(a)),Math.abs(a)<16&&(a=60*a),this._offset=a,this._isUTC=!0,b!==a&&j(this,L.duration(b-a,"m"),1,!0),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},hasAlignedHourOffset:function(a){return a=a?L(a).zone():0,0===(this.zone()-a)%60},daysInMonth:function(){return L.utc([this.year(),this.month()+1,0]).date()},dayOfYear:function(a){var b=O((L(this).startOf("day")-L(this).startOf("year"))/864e5)+1;return null==a?b:this.add("d",a-b)},weekYear:function(a){var b=G(this,this.lang()._week.dow,this.lang()._week.doy).year;return null==a?b:this.add("y",a-b)},isoWeekYear:function(a){var b=G(this,1,4).year;return null==a?b:this.add("y",a-b)},week:function(a){var b=this.lang().week(this);return null==a?b:this.add("d",7*(a-b))},isoWeek:function(a){var b=G(this,1,4).week;return null==a?b:this.add("d",7*(a-b))},weekday:function(a){var b=(this._d.getDay()+7-this.lang()._week.dow)%7;return null==a?b:this.add("d",a-b)},isoWeekday:function(a){return null==a?this.day()||7:this.day(this.day()%7?a:a-7)},get:function(a){return a=m(a),this[a.toLowerCase()]()},set:function(a,b){a=m(a),this[a.toLowerCase()](b)},lang:function(b){return b===a?this._lang:(this._lang=p(b),this)}}),M=0;M10&&20>c?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,doy:7}})}),function(a){a(L)}(function(b){function c(a,b,c){var d={mm:"munutenn",MM:"miz",dd:"devezh"};return a+" "+f(d[c],a)}function d(a){switch(e(a)){case 1:case 3:case 4:case 5:case 9:return a+" bloaz";default:return a+" vloaz"}}function e(a){return a>9?e(a%10):a}function f(a,b){return 2===b?g(a):a}function g(b){var c={m:"v",b:"v",d:"z"};return c[b.charAt(0)]===a?b:c[b.charAt(0)]+b.substring(1)}b.lang("br",{months:"Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),longDateFormat:{LT:"h[e]mm A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY LT",LLLL:"dddd, D [a viz] MMMM YYYY LT"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondennoù",m:"ur vunutenn",mm:c,h:"un eur",hh:"%d eur",d:"un devezh",dd:c,M:"ur miz",MM:c,y:"ur bloaz",yy:d},ordinal:function(a){var b=1===a?"añ":"vet";return a+b},week:{dow:1,doy:4}})}),function(a){a(L)}(function(a){a.lang("ca",{months:"Gener_Febrer_Març_Abril_Maig_Juny_Juliol_Agost_Setembre_Octubre_Novembre_Desembre".split("_"),monthsShort:"Gen._Febr._Mar._Abr._Mai._Jun._Jul._Ag._Set._Oct._Nov._Des.".split("_"),weekdays:"Diumenge_Dilluns_Dimarts_Dimecres_Dijous_Divendres_Dissabte".split("_"),weekdaysShort:"Dg._Dl._Dt._Dc._Dj._Dv._Ds.".split("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),longDateFormat:{LT:"H:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},ordinal:"%dº",week:{dow:1,doy:4}})}),function(a){a(L)}(function(a){function b(a){return a>1&&5>a&&1!==~~(a/10)}function c(a,c,d,e){var f=a+" ";switch(d){case"s":return c||e?"pár vteřin":"pár vteřinami";case"m":return c?"minuta":e?"minutu":"minutou";case"mm":return c||e?f+(b(a)?"minuty":"minut"):f+"minutami";break;case"h":return c?"hodina":e?"hodinu":"hodinou";case"hh":return c||e?f+(b(a)?"hodiny":"hodin"):f+"hodinami";break;case"d":return c||e?"den":"dnem";case"dd":return c||e?f+(b(a)?"dny":"dní"):f+"dny";break;case"M":return c||e?"měsíc":"měsícem";case"MM":return c||e?f+(b(a)?"měsíce":"měsíců"):f+"měsíci";break;case"y":return c||e?"rok":"rokem";case"yy":return c||e?f+(b(a)?"roky":"let"):f+"lety"}}var d="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),e="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_");a.lang("cs",{months:d,monthsShort:e,monthsParse:function(a,b){var c,d=[];for(c=0;12>c;c++)d[c]=new RegExp("^"+a[c]+"$|^"+b[c]+"$","i");return d}(d,e),weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd D. MMMM YYYY LT"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:c,m:c,mm:c,h:c,hh:c,d:c,dd:c,M:c,MM:c,y:c,yy:c},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(L)}(function(a){a.lang("cv",{months:"кăрлач_нарăс_пуш_ака_май_çĕртме_утă_çурла_авăн_юпа_чӳк_раштав".split("_"),monthsShort:"кăр_нар_пуш_ака_май_çĕр_утă_çур_ав_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кĕçнерникун_эрнекун_шăматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кĕç_эрн_шăм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кç_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",L:"DD-MM-YYYY",LL:"YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ]",LLL:"YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT",LLLL:"dddd, YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ĕнер] LT [сехетре]",nextWeek:"[Çитес] dddd LT [сехетре]",lastWeek:"[Иртнĕ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(a){var b=/сехет$/i.exec(a)?"рен":/çул$/i.exec(a)?"тан":"ран";return a+b},past:"%s каялла",s:"пĕр-ик çеккунт",m:"пĕр минут",mm:"%d минут",h:"пĕр сехет",hh:"%d сехет",d:"пĕр кун",dd:"%d кун",M:"пĕр уйăх",MM:"%d уйăх",y:"пĕр çул",yy:"%d çул"},ordinal:"%d-мĕш",week:{dow:1,doy:7}})}),function(a){a(L)}(function(a){a.lang("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D. MMMM, YYYY LT"},calendar:{sameDay:"[I dag kl.] LT",nextDay:"[I morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[I går kl.] LT",lastWeek:"[sidste] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(L)}(function(a){function b(a,b,c){var d={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?d[c][0]:d[c][1]}a.lang("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),longDateFormat:{LT:"H:mm [Uhr]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[Heute um] LT",sameElse:"L",nextDay:"[Morgen um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gestern um] LT",lastWeek:"[letzten] dddd [um] LT"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:b,mm:"%d Minuten",h:b,hh:"%d Stunden",d:b,dd:b,M:b,MM:b,y:b,yy:b},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(L)}(function(a){a.lang("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(a,b){return/D/.test(b.substring(0,b.indexOf("MMMM")))?this._monthsGenitiveEl[a.month()]:this._monthsNominativeEl[a.month()]},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(a,b,c){return a>11?c?"μμ":"ΜΜ":c?"πμ":"ΠΜ"},longDateFormat:{LT:"h:mm A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:"[την προηγούμενη] dddd [{}] LT",sameElse:"L"},calendar:function(a,b){var c=this._calendarEl[a],d=b&&b.hours();return c.replace("{}",1===d%12?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},ordinal:function(a){return a+"η"},week:{dow:1,doy:4}})}),function(a){a(L)}(function(a){a.lang("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",L:"YYYY-MM-DD",LL:"D MMMM, YYYY",LLL:"D MMMM, YYYY LT",LLLL:"dddd, D MMMM, YYYY LT"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}})}),function(a){a(L)}(function(a){a.lang("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"; return a+c},week:{dow:1,doy:4}})}),function(a){a(L)}(function(a){a.lang("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdays:"Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato".split("_"),weekdaysShort:"Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Ĵa_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",L:"YYYY-MM-DD",LL:"D[-an de] MMMM, YYYY",LLL:"D[-an de] MMMM, YYYY LT",LLLL:"dddd, [la] D[-an de] MMMM, YYYY LT"},meridiem:function(a,b,c){return a>11?c?"p.t.m.":"P.T.M.":c?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd [je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasinta] dddd [je] LT",sameElse:"L"},relativeTime:{future:"je %s",past:"antaŭ %s",s:"sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"},ordinal:"%da",week:{dow:1,doy:7}})}),function(a){a(L)}(function(a){a.lang("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"Do_Lu_Ma_Mi_Ju_Vi_Sá".split("_"),longDateFormat:{LT:"H:mm",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY LT",LLLL:"dddd, D [de] MMMM [de] YYYY LT"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinal:"%dº",week:{dow:1,doy:4}})}),function(a){a(L)}(function(a){function b(a,b,c,d){return d||b?"paari sekundi":"paar sekundit"}a.lang("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:b,m:"minut",mm:"%d minutit",h:"tund",hh:"%d tundi",d:"päev",dd:"%d päeva",M:"kuu",MM:"%d kuud",y:"aasta",yy:"%d aastat"},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(L)}(function(a){a.lang("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),longDateFormat:{LT:"HH:mm",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] LT",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] LT",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] LT",llll:"ddd, YYYY[ko] MMM D[a] LT"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},ordinal:"%d.",week:{dow:1,doy:7}})}),function(a){a(L)}(function(a){var b={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},c={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};a.lang("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},meridiem:function(a){return 12>a?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چندین ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(a){return a.replace(/[۰-۹]/g,function(a){return c[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]}).replace(/,/g,"،")},ordinal:"%dم",week:{dow:6,doy:12}})}),function(a){a(L)}(function(a){function b(a,b,d,e){var f="";switch(d){case"s":return e?"muutaman sekunnin":"muutama sekunti";case"m":return e?"minuutin":"minuutti";case"mm":f=e?"minuutin":"minuuttia";break;case"h":return e?"tunnin":"tunti";case"hh":f=e?"tunnin":"tuntia";break;case"d":return e?"päivän":"päivä";case"dd":f=e?"päivän":"päivää";break;case"M":return e?"kuukauden":"kuukausi";case"MM":f=e?"kuukauden":"kuukautta";break;case"y":return e?"vuoden":"vuosi";case"yy":f=e?"vuoden":"vuotta"}return f=c(a,e)+" "+f}function c(a,b){return 10>a?b?e[a]:d[a]:a}var d="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),e=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",d[7],d[8],d[9]];a.lang("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] LT",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] LT",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] LT",llll:"ddd, Do MMM YYYY, [klo] LT"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:b,m:b,mm:b,h:b,hh:b,d:b,dd:b,M:b,MM:b,y:b,yy:b},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(L)}(function(a){a.lang("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinal:function(a){return a+(1===a?"er":"")}})}),function(a){a(L)}(function(a){a.lang("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinal:function(a){return a+(1===a?"er":"")},week:{dow:1,doy:4}})}),function(a){a(L)}(function(a){a.lang("gl",{months:"Xaneiro_Febreiro_Marzo_Abril_Maio_Xuño_Xullo_Agosto_Setembro_Outubro_Novembro_Decembro".split("_"),monthsShort:"Xan._Feb._Mar._Abr._Mai._Xuñ._Xul._Ago._Set._Out._Nov._Dec.".split("_"),weekdays:"Domingo_Luns_Martes_Mércores_Xoves_Venres_Sábado".split("_"),weekdaysShort:"Dom._Lun._Mar._Mér._Xov._Ven._Sáb.".split("_"),weekdaysMin:"Do_Lu_Ma_Mé_Xo_Ve_Sá".split("_"),longDateFormat:{LT:"H:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(a){return"uns segundos"===a?"nuns segundos":"en "+a},past:"hai %s",s:"uns segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},ordinal:"%dº",week:{dow:1,doy:7}})}),function(a){a(L)}(function(a){a.lang("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY LT",LLLL:"dddd, D [ב]MMMM YYYY LT",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY LT",llll:"ddd, D MMM YYYY LT"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(a){return 2===a?"שעתיים":a+" שעות"},d:"יום",dd:function(a){return 2===a?"יומיים":a+" ימים"},M:"חודש",MM:function(a){return 2===a?"חודשיים":a+" חודשים"},y:"שנה",yy:function(a){return 2===a?"שנתיים":a+" שנים"}}})}),function(a){a(L)}(function(a){var b={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},c={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.lang("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, LT",LLLL:"dddd, D MMMM YYYY, LT"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return c[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]})},meridiem:function(a){return 4>a?"रात":10>a?"सुबह":17>a?"दोपहर":20>a?"शाम":"रात"},week:{dow:0,doy:6}})}),function(a){a(L)}(function(a){function b(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}a.lang("hr",{months:"sječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_"),monthsShort:"sje._vel._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),longDateFormat:{LT:"H:mm",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:b,mm:b,h:b,hh:b,d:"dan",dd:b,M:"mjesec",MM:b,y:"godinu",yy:b},ordinal:"%d.",week:{dow:1,doy:7}})}),function(a){a(L)}(function(a){function b(a,b,c,d){var e=a;switch(c){case"s":return d||b?"néhány másodperc":"néhány másodperce";case"m":return"egy"+(d||b?" perc":" perce");case"mm":return e+(d||b?" perc":" perce");case"h":return"egy"+(d||b?" óra":" órája");case"hh":return e+(d||b?" óra":" órája");case"d":return"egy"+(d||b?" nap":" napja");case"dd":return e+(d||b?" nap":" napja");case"M":return"egy"+(d||b?" hónap":" hónapja");case"MM":return e+(d||b?" hónap":" hónapja");case"y":return"egy"+(d||b?" év":" éve");case"yy":return e+(d||b?" év":" éve")}return""}function c(a){return(a?"":"[múlt] ")+"["+d[this.day()]+"] LT[-kor]"}var d="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");a.lang("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D., LT",LLLL:"YYYY. MMMM D., dddd LT"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return c.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return c.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:b,m:b,mm:b,h:b,hh:b,d:b,dd:b,M:b,MM:b,y:b,yy:b},ordinal:"%d.",week:{dow:1,doy:7}})}),function(a){a(L)}(function(a){a.lang("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] LT",LLLL:"dddd, D MMMM YYYY [pukul] LT"},meridiem:function(a){return 11>a?"pagi":15>a?"siang":19>a?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}),function(a){a(L)}(function(a){function b(a){return 11===a%100?!0:1===a%10?!1:!0}function c(a,c,d,e){var f=a+" ";switch(d){case"s":return c||e?"nokkrar sekúndur":"nokkrum sekúndum";case"m":return c?"mínúta":"mínútu";case"mm":return b(a)?f+(c||e?"mínútur":"mínútum"):c?f+"mínúta":f+"mínútu";case"hh":return b(a)?f+(c||e?"klukkustundir":"klukkustundum"):f+"klukkustund";case"d":return c?"dagur":e?"dag":"degi";case"dd":return b(a)?c?f+"dagar":f+(e?"daga":"dögum"):c?f+"dagur":f+(e?"dag":"degi");case"M":return c?"mánuður":e?"mánuð":"mánuði";case"MM":return b(a)?c?f+"mánuðir":f+(e?"mánuði":"mánuðum"):c?f+"mánuður":f+(e?"mánuð":"mánuði");case"y":return c||e?"ár":"ári";case"yy":return b(a)?f+(c||e?"ár":"árum"):f+(c||e?"ár":"ári")}}a.lang("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",L:"DD/MM/YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] LT",LLLL:"dddd, D. MMMM YYYY [kl.] LT"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:c,m:c,mm:c,h:"klukkustund",hh:c,d:c,dd:c,M:c,MM:c,y:c,yy:c},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(L)}(function(a){a.lang("it",{months:"Gennaio_Febbraio_Marzo_Aprile_Maggio_Giugno_Luglio_Agosto_Settembre_Ottobre_Novembre_Dicembre".split("_"),monthsShort:"Gen_Feb_Mar_Apr_Mag_Giu_Lug_Ago_Set_Ott_Nov_Dic".split("_"),weekdays:"Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato".split("_"),weekdaysShort:"Dom_Lun_Mar_Mer_Gio_Ven_Sab".split("_"),weekdaysMin:"D_L_Ma_Me_G_V_S".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:"[lo scorso] dddd [alle] LT",sameElse:"L"},relativeTime:{future:function(a){return(/^[0-9].+$/.test(a)?"tra":"in")+" "+a},past:"%s fa",s:"secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},ordinal:"%dº",week:{dow:1,doy:4}})}),function(a){a(L)}(function(a){a.lang("ja",{months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"Ah時m分",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日LT",LLLL:"YYYY年M月D日LT dddd"},meridiem:function(a){return 12>a?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}})}),function(a){a(L)}(function(a){function b(a,b){var c={nominative:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),accusative:"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს".split("_")},d=/D[oD] *MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function c(a,b){var c={nominative:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),accusative:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_")},d=/(წინა|შემდეგ)/.test(b)?"accusative":"nominative";return c[d][a.day()]}a.lang("ka",{months:b,monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:c,weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"h:mm A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(a){return/(წამი|წუთი|საათი|წელი)/.test(a)?a.replace(/ი$/,"ში"):a+"ში"},past:function(a){return/(წამი|წუთი|საათი|დღე|თვე)/.test(a)?a.replace(/(ი|ე)$/,"ის წინ"):/წელი/.test(a)?a.replace(/წელი$/,"წლის წინ"):void 0},s:"რამდენიმე წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},ordinal:function(a){return 0===a?a:1===a?a+"-ლი":20>a||100>=a&&0===a%20||0===a%100?"მე-"+a:a+"-ე"},week:{dow:1,doy:7}})}),function(a){a(L)}(function(a){a.lang("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h시 mm분",L:"YYYY.MM.DD",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 LT",LLLL:"YYYY년 MMMM D일 dddd LT"},meridiem:function(a){return 12>a?"오전":"오후"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇초",ss:"%d초",m:"일분",mm:"%d분",h:"한시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한달",MM:"%d달",y:"일년",yy:"%d년"},ordinal:"%d일"})}),function(a){a(L)}(function(a){function b(a,b,c){var d=a.split("_");return c?1===b%10&&11!==b?d[2]:d[3]:1===b%10&&11!==b?d[0]:d[1]}function c(a,c,e){return a+" "+b(d[e],a,c)}var d={mm:"minūti_minūtes_minūte_minūtes",hh:"stundu_stundas_stunda_stundas",dd:"dienu_dienas_diena_dienas",MM:"mēnesi_mēnešus_mēnesis_mēneši",yy:"gadu_gadus_gads_gadi"};a.lang("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, LT",LLLL:"YYYY. [gada] D. MMMM, dddd, LT"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"%s vēlāk",past:"%s agrāk",s:"dažas sekundes",m:"minūti",mm:c,h:"stundu",hh:c,d:"dienu",dd:c,M:"mēnesi",MM:c,y:"gadu",yy:c},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(L)}(function(a){a.lang("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, LT",LLLL:"dddd, D MMMM YYYY, LT"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiem:function(a){return 4>a?"രാത്രി":12>a?"രാവിലെ":17>a?"ഉച്ച കഴിഞ്ഞ്":20>a?"വൈകുന്നേരം":"രാത്രി"}})}),function(a){a(L)}(function(a){var b={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},c={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.lang("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, LT",LLLL:"dddd, D MMMM YYYY, LT"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%s नंतर",past:"%s पूर्वी",s:"सेकंद",m:"एक मिनिट",mm:"%d मिनिटे",h:"एक तास",hh:"%d तास",d:"एक दिवस",dd:"%d दिवस",M:"एक महिना",MM:"%d महिने",y:"एक वर्ष",yy:"%d वर्षे"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return c[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]})},meridiem:function(a){return 4>a?"रात्री":10>a?"सकाळी":17>a?"दुपारी":20>a?"सायंकाळी":"रात्री"},week:{dow:0,doy:6}})}),function(a){a(L)}(function(a){a.lang("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] LT",LLLL:"dddd, D MMMM YYYY [pukul] LT"},meridiem:function(a){return 11>a?"pagi":15>a?"tengahari":19>a?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}),function(a){a(L)}(function(a){a.lang("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"H.mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] LT",LLLL:"dddd D. MMMM YYYY [kl.] LT"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"for %s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(L)}(function(a){var b={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},c={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.lang("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आइ._सो._मङ्_बु._बि._शु._श.".split("_"),longDateFormat:{LT:"Aको h:mm बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, LT",LLLL:"dddd, D MMMM YYYY, LT"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return c[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]})},meridiem:function(a){return 3>a?"राती":10>a?"बिहान":15>a?"दिउँसो":18>a?"बेलुका":20>a?"साँझ":"राती"},calendar:{sameDay:"[आज] LT",nextDay:"[भोली] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडी",s:"केही समय",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:1,doy:7}})}),function(a){a(L)}(function(a){var b="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),c="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_");a.lang("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(a,d){return/-MMM-/.test(d)?c[a.month()]:b[a.month()]},weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),longDateFormat:{LT:"HH:mm",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[Vandaag om] LT",nextDay:"[Morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}})}),function(a){a(L)}(function(a){a.lang("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregående] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"for %s siden",s:"noen sekund",m:"ett minutt",mm:"%d minutt",h:"en time",hh:"%d timar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(L)}(function(a){function b(a){return 5>a%10&&a%10>1&&1!==~~(a/10)}function c(a,c,d){var e=a+" ";switch(d){case"m":return c?"minuta":"minutę";case"mm":return e+(b(a)?"minuty":"minut");case"h":return c?"godzina":"godzinę";case"hh":return e+(b(a)?"godziny":"godzin");case"MM":return e+(b(a)?"miesiące":"miesięcy");case"yy":return e+(b(a)?"lata":"lat")}}var d="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),e="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");a.lang("pl",{months:function(a,b){return/D MMMM/.test(b)?e[a.month()]:d[a.month()]},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"nie_pon_wt_śr_czw_pt_sb".split("_"),weekdaysMin:"N_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:"[W] dddd [o] LT",lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT"; case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:c,mm:c,h:c,hh:c,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:c,y:"rok",yy:c},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(L)}(function(a){a.lang("pt-br",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY LT",LLLL:"dddd, D [de] MMMM [de] YYYY LT"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinal:"%dº"})}),function(a){a(L)}(function(a){a.lang("pt",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY LT",LLLL:"dddd, D [de] MMMM [de] YYYY LT"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinal:"%dº",week:{dow:1,doy:4}})}),function(a){a(L)}(function(a){a.lang("ro",{months:"Ianuarie_Februarie_Martie_Aprilie_Mai_Iunie_Iulie_August_Septembrie_Octombrie_Noiembrie_Decembrie".split("_"),monthsShort:"Ian_Feb_Mar_Apr_Mai_Iun_Iul_Aug_Sep_Oct_Noi_Dec".split("_"),weekdays:"Duminică_Luni_Marţi_Miercuri_Joi_Vineri_Sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",m:"un minut",mm:"%d minute",h:"o oră",hh:"%d ore",d:"o zi",dd:"%d zile",M:"o lună",MM:"%d luni",y:"un an",yy:"%d ani"},week:{dow:1,doy:7}})}),function(a){a(L)}(function(a){function b(a,b){var c=a.split("_");return 1===b%10&&11!==b%100?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function c(a,c,d){var e={mm:"минута_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};return"m"===d?c?"минута":"минуту":a+" "+b(e[d],+a)}function d(a,b){var c={nominative:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),accusative:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_")},d=/D[oD]? *MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function e(a,b){var c={nominative:"янв_фев_мар_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),accusative:"янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек".split("_")},d=/D[oD]? *MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function f(a,b){var c={nominative:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),accusative:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_")},d=/\[ ?[Вв] ?(?:прошлую|следующую)? ?\] ?dddd/.test(b)?"accusative":"nominative";return c[d][a.day()]}a.lang("ru",{months:d,monthsShort:e,weekdays:f,weekdaysShort:"вск_пнд_втр_срд_чтв_птн_сбт".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., LT",LLLL:"dddd, D MMMM YYYY г., LT"},calendar:{sameDay:"[Сегодня в] LT",nextDay:"[Завтра в] LT",lastDay:"[Вчера в] LT",nextWeek:function(){return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT"},lastWeek:function(){switch(this.day()){case 0:return"[В прошлое] dddd [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:c,mm:c,h:"час",hh:c,d:"день",dd:c,M:"месяц",MM:c,y:"год",yy:c},ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":return a+"-й";case"D":return a+"-го";case"w":case"W":return a+"-я";default:return a}},week:{dow:1,doy:7}})}),function(a){a(L)}(function(a){function b(a){return a>1&&5>a}function c(a,c,d,e){var f=a+" ";switch(d){case"s":return c||e?"pár sekúnd":"pár sekundami";case"m":return c?"minúta":e?"minútu":"minútou";case"mm":return c||e?f+(b(a)?"minúty":"minút"):f+"minútami";break;case"h":return c?"hodina":e?"hodinu":"hodinou";case"hh":return c||e?f+(b(a)?"hodiny":"hodín"):f+"hodinami";break;case"d":return c||e?"deň":"dňom";case"dd":return c||e?f+(b(a)?"dni":"dní"):f+"dňami";break;case"M":return c||e?"mesiac":"mesiacom";case"MM":return c||e?f+(b(a)?"mesiace":"mesiacov"):f+"mesiacmi";break;case"y":return c||e?"rok":"rokom";case"yy":return c||e?f+(b(a)?"roky":"rokov"):f+"rokmi"}}var d="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),e="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");a.lang("sk",{months:d,monthsShort:e,monthsParse:function(a,b){var c,d=[];for(c=0;12>c;c++)d[c]=new RegExp("^"+a[c]+"$|^"+b[c]+"$","i");return d}(d,e),weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd D. MMMM YYYY LT"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:c,m:c,mm:c,h:c,hh:c,d:c,dd:c,M:c,MM:c,y:c,yy:c},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(L)}(function(a){function b(a,b,c){var d=a+" ";switch(c){case"m":return b?"ena minuta":"eno minuto";case"mm":return d+=1===a?"minuta":2===a?"minuti":3===a||4===a?"minute":"minut";case"h":return b?"ena ura":"eno uro";case"hh":return d+=1===a?"ura":2===a?"uri":3===a||4===a?"ure":"ur";case"dd":return d+=1===a?"dan":"dni";case"MM":return d+=1===a?"mesec":2===a?"meseca":3===a||4===a?"mesece":"mesecev";case"yy":return d+=1===a?"leto":2===a?"leti":3===a||4===a?"leta":"let"}}a.lang("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),longDateFormat:{LT:"H:mm",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[prejšnja] dddd [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"%s nazaj",s:"nekaj sekund",m:b,mm:b,h:b,hh:b,d:"en dan",dd:b,M:"en mesec",MM:b,y:"eno leto",yy:b},ordinal:"%d.",week:{dow:1,doy:7}})}),function(a){a(L)}(function(a){a.lang("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Marte_E Mërkure_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Neser në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s me parë",s:"disa seconda",m:"një minut",mm:"%d minutea",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(L)}(function(a){a.lang("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"dddd LT",lastWeek:"[Förra] dddd[en] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"e":1===b?"a":2===b?"a":3===b?"e":"e";return a+c},week:{dow:1,doy:4}})}),function(a){a(L)}(function(a){a.lang("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"มกรา_กุมภา_มีนา_เมษา_พฤษภา_มิถุนา_กรกฎา_สิงหา_กันยา_ตุลา_พฤศจิกา_ธันวา".split("_"),weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),longDateFormat:{LT:"H นาฬิกา m นาที",L:"YYYY/MM/DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา LT",LLLL:"วันddddที่ D MMMM YYYY เวลา LT"},meridiem:function(a){return 12>a?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}})}),function(a){a(L)}(function(a){var b={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};a.lang("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[haftaya] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen hafta] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(a){if(0===a)return a+"'ıncı";var c=a%10,d=a%100-c,e=a>=100?100:null;return a+(b[c]||b[d]||b[e])},week:{dow:1,doy:7}})}),function(a){a(L)}(function(a){a.lang("tzm-la",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}})}),function(a){a(L)}(function(a){a.lang("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,doy:12}})}),function(a){a(L)}(function(a){function b(a,b){var c=a.split("_");return 1===b%10&&11!==b%100?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function c(a,c,d){var e={mm:"хвилина_хвилини_хвилин",hh:"година_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===d?c?"хвилина":"хвилину":"h"===d?c?"година":"годину":a+" "+b(e[d],+a)}function d(a,b){var c={nominative:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_"),accusative:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_")},d=/D[oD]? *MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function e(a,b){var c={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")},d=/(\[[ВвУу]\]) ?dddd/.test(b)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(b)?"genitive":"nominative";return c[d][a.day()]}function f(a){return function(){return a+"о"+(11===this.hours()?"б":"")+"] LT"}}a.lang("uk",{months:d,monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:e,weekdaysShort:"нед_пон_вів_сер_чет_п’ят_суб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., LT",LLLL:"dddd, D MMMM YYYY р., LT"},calendar:{sameDay:f("[Сьогодні "),nextDay:f("[Завтра "),lastDay:f("[Вчора "),nextWeek:f("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return f("[Минулої] dddd [").call(this);case 1:case 2:case 4:return f("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",m:c,mm:c,h:"годину",hh:c,d:"день",dd:c,M:"місяць",MM:c,y:"рік",yy:c},ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a+"-й";case"D":return a+"-го";default:return a}},week:{dow:1,doy:7}})}),function(a){a(L)}(function(a){a.lang("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"Ah点mm",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日LT",LLLL:"YYYY年MMMD日ddddLT",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日LT",llll:"YYYY年MMMD日ddddLT"},meridiem:function(a,b){return 9>a?"早上":11>a&&30>b?"上午":13>a&&30>b?"中午":18>a?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"周";default:return a}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",m:"1分钟",mm:"%d分钟",h:"1小时",hh:"%d小时",d:"1天",dd:"%d天",M:"1个月",MM:"%d个月",y:"1年",yy:"%d年"}})}),function(a){a(L)}(function(a){a.lang("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"Ah點mm",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日LT",LLLL:"YYYY年MMMD日ddddLT",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日LT",llll:"YYYY年MMMD日ddddLT"},meridiem:function(a,b){return 9>a?"早上":11>a&&30>b?"上午":13>a&&30>b?"中午":18>a?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"一分鐘",mm:"%d分鐘",h:"一小時",hh:"%d小時",d:"一天",dd:"%d天",M:"一個月",MM:"%d個月",y:"一年",yy:"%d年"}})}),L.lang("en"),Q&&(module.exports=L),"undefined"==typeof ender&&(this.moment=L),"function"==typeof define&&define.amd&&define("moment",[],function(){return L})}).call(this);assets/plugins/moment/min/moment+langs.js000064400000624043152510437720014565 0ustar00//! moment.js //! version : 2.2.1 //! authors : Tim Wood, Iskren Chernev, Moment.js contributors //! license : MIT //! momentjs.com (function (undefined) { /************************************ Constants ************************************/ var moment, VERSION = "2.2.1", round = Math.round, i, // internal storage for language config files languages = {}, // check for nodeJS hasModule = (typeof module !== 'undefined' && module.exports), // ASP.NET json date format regex aspNetJsonRegex = /^\/?Date\((\-?\d+)/i, aspNetTimeSpanJsonRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)\:(\d+)\.?(\d{3})?/, // format tokens formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|SS?S?|X|zz?|ZZ?|.)/g, localFormattingTokens = /(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g, // parsing token regexes parseTokenOneOrTwoDigits = /\d\d?/, // 0 - 99 parseTokenOneToThreeDigits = /\d{1,3}/, // 0 - 999 parseTokenThreeDigits = /\d{3}/, // 000 - 999 parseTokenFourDigits = /\d{1,4}/, // 0 - 9999 parseTokenSixDigits = /[+\-]?\d{1,6}/, // -999,999 - 999,999 parseTokenWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i, // any word (or two) characters or numbers including two/three word month in arabic. parseTokenTimezone = /Z|[\+\-]\d\d:?\d\d/i, // +00:00 -00:00 +0000 -0000 or Z parseTokenT = /T/i, // T (ISO seperator) parseTokenTimestampMs = /[\+\-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123 // preliminary iso regex // 0000-00-00 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 isoRegex = /^\s*\d{4}-\d\d-\d\d((T| )(\d\d(:\d\d(:\d\d(\.\d\d?\d?)?)?)?)?([\+\-]\d\d:?\d\d)?)?/, isoFormat = 'YYYY-MM-DDTHH:mm:ssZ', // iso time formats and regexes isoTimes = [ ['HH:mm:ss.S', /(T| )\d\d:\d\d:\d\d\.\d{1,3}/], ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/], ['HH:mm', /(T| )\d\d:\d\d/], ['HH', /(T| )\d\d/] ], // timezone chunker "+10:00" > ["10", "00"] or "-1530" > ["-15", "30"] parseTimezoneChunker = /([\+\-]|\d\d)/gi, // getter and setter names proxyGettersAndSetters = 'Date|Hours|Minutes|Seconds|Milliseconds'.split('|'), unitMillisecondFactors = { 'Milliseconds' : 1, 'Seconds' : 1e3, 'Minutes' : 6e4, 'Hours' : 36e5, 'Days' : 864e5, 'Months' : 2592e6, 'Years' : 31536e6 }, unitAliases = { ms : 'millisecond', s : 'second', m : 'minute', h : 'hour', d : 'day', w : 'week', W : 'isoweek', M : 'month', y : 'year' }, // format function strings formatFunctions = {}, // tokens to ordinalize and pad ordinalizeTokens = 'DDD w W M D d'.split(' '), paddedTokens = 'M D H h m s w W'.split(' '), formatTokenFunctions = { M : function () { return this.month() + 1; }, MMM : function (format) { return this.lang().monthsShort(this, format); }, MMMM : function (format) { return this.lang().months(this, format); }, D : function () { return this.date(); }, DDD : function () { return this.dayOfYear(); }, d : function () { return this.day(); }, dd : function (format) { return this.lang().weekdaysMin(this, format); }, ddd : function (format) { return this.lang().weekdaysShort(this, format); }, dddd : function (format) { return this.lang().weekdays(this, format); }, w : function () { return this.week(); }, W : function () { return this.isoWeek(); }, YY : function () { return leftZeroFill(this.year() % 100, 2); }, YYYY : function () { return leftZeroFill(this.year(), 4); }, YYYYY : function () { return leftZeroFill(this.year(), 5); }, gg : function () { return leftZeroFill(this.weekYear() % 100, 2); }, gggg : function () { return this.weekYear(); }, ggggg : function () { return leftZeroFill(this.weekYear(), 5); }, GG : function () { return leftZeroFill(this.isoWeekYear() % 100, 2); }, GGGG : function () { return this.isoWeekYear(); }, GGGGG : function () { return leftZeroFill(this.isoWeekYear(), 5); }, e : function () { return this.weekday(); }, E : function () { return this.isoWeekday(); }, a : function () { return this.lang().meridiem(this.hours(), this.minutes(), true); }, A : function () { return this.lang().meridiem(this.hours(), this.minutes(), false); }, H : function () { return this.hours(); }, h : function () { return this.hours() % 12 || 12; }, m : function () { return this.minutes(); }, s : function () { return this.seconds(); }, S : function () { return ~~(this.milliseconds() / 100); }, SS : function () { return leftZeroFill(~~(this.milliseconds() / 10), 2); }, SSS : function () { return leftZeroFill(this.milliseconds(), 3); }, Z : function () { var a = -this.zone(), b = "+"; if (a < 0) { a = -a; b = "-"; } return b + leftZeroFill(~~(a / 60), 2) + ":" + leftZeroFill(~~a % 60, 2); }, ZZ : function () { var a = -this.zone(), b = "+"; if (a < 0) { a = -a; b = "-"; } return b + leftZeroFill(~~(10 * a / 6), 4); }, z : function () { return this.zoneAbbr(); }, zz : function () { return this.zoneName(); }, X : function () { return this.unix(); } }; function padToken(func, count) { return function (a) { return leftZeroFill(func.call(this, a), count); }; } function ordinalizeToken(func, period) { return function (a) { return this.lang().ordinal(func.call(this, a), period); }; } while (ordinalizeTokens.length) { i = ordinalizeTokens.pop(); formatTokenFunctions[i + 'o'] = ordinalizeToken(formatTokenFunctions[i], i); } while (paddedTokens.length) { i = paddedTokens.pop(); formatTokenFunctions[i + i] = padToken(formatTokenFunctions[i], 2); } formatTokenFunctions.DDDD = padToken(formatTokenFunctions.DDD, 3); /************************************ Constructors ************************************/ function Language() { } // Moment prototype object function Moment(config) { extend(this, config); } // Duration Constructor function Duration(duration) { var years = duration.years || duration.year || duration.y || 0, months = duration.months || duration.month || duration.M || 0, weeks = duration.weeks || duration.week || duration.w || 0, days = duration.days || duration.day || duration.d || 0, hours = duration.hours || duration.hour || duration.h || 0, minutes = duration.minutes || duration.minute || duration.m || 0, seconds = duration.seconds || duration.second || duration.s || 0, milliseconds = duration.milliseconds || duration.millisecond || duration.ms || 0; // store reference to input for deterministic cloning this._input = duration; // representation for dateAddRemove this._milliseconds = +milliseconds + seconds * 1e3 + // 1000 minutes * 6e4 + // 1000 * 60 hours * 36e5; // 1000 * 60 * 60 // Because of dateAddRemove treats 24 hours as different from a // day when working around DST, we need to store them separately this._days = +days + weeks * 7; // It is impossible translate months into days without knowing // which months you are are talking about, so we have to store // it separately. this._months = +months + years * 12; this._data = {}; this._bubble(); } /************************************ Helpers ************************************/ function extend(a, b) { for (var i in b) { if (b.hasOwnProperty(i)) { a[i] = b[i]; } } return a; } function absRound(number) { if (number < 0) { return Math.ceil(number); } else { return Math.floor(number); } } // left zero fill a number // see http://jsperf.com/left-zero-filling for performance comparison function leftZeroFill(number, targetLength) { var output = number + ''; while (output.length < targetLength) { output = '0' + output; } return output; } // helper function for _.addTime and _.subtractTime function addOrSubtractDurationFromMoment(mom, duration, isAdding, ignoreUpdateOffset) { var milliseconds = duration._milliseconds, days = duration._days, months = duration._months, minutes, hours; if (milliseconds) { mom._d.setTime(+mom._d + milliseconds * isAdding); } // store the minutes and hours so we can restore them if (days || months) { minutes = mom.minute(); hours = mom.hour(); } if (days) { mom.date(mom.date() + days * isAdding); } if (months) { mom.month(mom.month() + months * isAdding); } if (milliseconds && !ignoreUpdateOffset) { moment.updateOffset(mom); } // restore the minutes and hours after possibly changing dst if (days || months) { mom.minute(minutes); mom.hour(hours); } } // check if is an array function isArray(input) { return Object.prototype.toString.call(input) === '[object Array]'; } // compare two arrays, return the number of differences function compareArrays(array1, array2) { var len = Math.min(array1.length, array2.length), lengthDiff = Math.abs(array1.length - array2.length), diffs = 0, i; for (i = 0; i < len; i++) { if (~~array1[i] !== ~~array2[i]) { diffs++; } } return diffs + lengthDiff; } function normalizeUnits(units) { return units ? unitAliases[units] || units.toLowerCase().replace(/(.)s$/, '$1') : units; } /************************************ Languages ************************************/ extend(Language.prototype, { set : function (config) { var prop, i; for (i in config) { prop = config[i]; if (typeof prop === 'function') { this[i] = prop; } else { this['_' + i] = prop; } } }, _months : "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), months : function (m) { return this._months[m.month()]; }, _monthsShort : "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"), monthsShort : function (m) { return this._monthsShort[m.month()]; }, monthsParse : function (monthName) { var i, mom, regex; if (!this._monthsParse) { this._monthsParse = []; } for (i = 0; i < 12; i++) { // make the regex if we don't have it already if (!this._monthsParse[i]) { mom = moment.utc([2000, i]); regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); } // test the regex if (this._monthsParse[i].test(monthName)) { return i; } } }, _weekdays : "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), weekdays : function (m) { return this._weekdays[m.day()]; }, _weekdaysShort : "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"), weekdaysShort : function (m) { return this._weekdaysShort[m.day()]; }, _weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), weekdaysMin : function (m) { return this._weekdaysMin[m.day()]; }, weekdaysParse : function (weekdayName) { var i, mom, regex; if (!this._weekdaysParse) { this._weekdaysParse = []; } for (i = 0; i < 7; i++) { // make the regex if we don't have it already if (!this._weekdaysParse[i]) { mom = moment([2000, 1]).day(i); regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); } // test the regex if (this._weekdaysParse[i].test(weekdayName)) { return i; } } }, _longDateFormat : { LT : "h:mm A", L : "MM/DD/YYYY", LL : "MMMM D YYYY", LLL : "MMMM D YYYY LT", LLLL : "dddd, MMMM D YYYY LT" }, longDateFormat : function (key) { var output = this._longDateFormat[key]; if (!output && this._longDateFormat[key.toUpperCase()]) { output = this._longDateFormat[key.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function (val) { return val.slice(1); }); this._longDateFormat[key] = output; } return output; }, isPM : function (input) { // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays // Using charAt should be more compatible. return ((input + '').toLowerCase().charAt(0) === 'p'); }, _meridiemParse : /[ap]\.?m?\.?/i, meridiem : function (hours, minutes, isLower) { if (hours > 11) { return isLower ? 'pm' : 'PM'; } else { return isLower ? 'am' : 'AM'; } }, _calendar : { sameDay : '[Today at] LT', nextDay : '[Tomorrow at] LT', nextWeek : 'dddd [at] LT', lastDay : '[Yesterday at] LT', lastWeek : '[Last] dddd [at] LT', sameElse : 'L' }, calendar : function (key, mom) { var output = this._calendar[key]; return typeof output === 'function' ? output.apply(mom) : output; }, _relativeTime : { future : "in %s", past : "%s ago", s : "a few seconds", m : "a minute", mm : "%d minutes", h : "an hour", hh : "%d hours", d : "a day", dd : "%d days", M : "a month", MM : "%d months", y : "a year", yy : "%d years" }, relativeTime : function (number, withoutSuffix, string, isFuture) { var output = this._relativeTime[string]; return (typeof output === 'function') ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number); }, pastFuture : function (diff, output) { var format = this._relativeTime[diff > 0 ? 'future' : 'past']; return typeof format === 'function' ? format(output) : format.replace(/%s/i, output); }, ordinal : function (number) { return this._ordinal.replace("%d", number); }, _ordinal : "%d", preparse : function (string) { return string; }, postformat : function (string) { return string; }, week : function (mom) { return weekOfYear(mom, this._week.dow, this._week.doy).week; }, _week : { dow : 0, // Sunday is the first day of the week. doy : 6 // The week that contains Jan 1st is the first week of the year. } }); // Loads a language definition into the `languages` cache. The function // takes a key and optionally values. If not in the browser and no values // are provided, it will load the language file module. As a convenience, // this function also returns the language values. function loadLang(key, values) { values.abbr = key; if (!languages[key]) { languages[key] = new Language(); } languages[key].set(values); return languages[key]; } // Remove a language from the `languages` cache. Mostly useful in tests. function unloadLang(key) { delete languages[key]; } // Determines which language definition to use and returns it. // // With no parameters, it will return the global language. If you // pass in a language key, such as 'en', it will return the // definition for 'en', so long as 'en' has already been loaded using // moment.lang. function getLangDefinition(key) { if (!key) { return moment.fn._lang; } if (!languages[key] && hasModule) { try { require('./lang/' + key); } catch (e) { // call with no params to set to default return moment.fn._lang; } } return languages[key] || moment.fn._lang; } /************************************ Formatting ************************************/ function removeFormattingTokens(input) { if (input.match(/\[.*\]/)) { return input.replace(/^\[|\]$/g, ""); } return input.replace(/\\/g, ""); } function makeFormatFunction(format) { var array = format.match(formattingTokens), i, length; for (i = 0, length = array.length; i < length; i++) { if (formatTokenFunctions[array[i]]) { array[i] = formatTokenFunctions[array[i]]; } else { array[i] = removeFormattingTokens(array[i]); } } return function (mom) { var output = ""; for (i = 0; i < length; i++) { output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; } return output; }; } // format date using native date object function formatMoment(m, format) { format = expandFormat(format, m.lang()); if (!formatFunctions[format]) { formatFunctions[format] = makeFormatFunction(format); } return formatFunctions[format](m); } function expandFormat(format, lang) { var i = 5; function replaceLongDateFormatTokens(input) { return lang.longDateFormat(input) || input; } while (i-- && (localFormattingTokens.lastIndex = 0, localFormattingTokens.test(format))) { format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); } return format; } /************************************ Parsing ************************************/ // get the regex to find the next token function getParseRegexForToken(token, config) { switch (token) { case 'DDDD': return parseTokenThreeDigits; case 'YYYY': return parseTokenFourDigits; case 'YYYYY': return parseTokenSixDigits; case 'S': case 'SS': case 'SSS': case 'DDD': return parseTokenOneToThreeDigits; case 'MMM': case 'MMMM': case 'dd': case 'ddd': case 'dddd': return parseTokenWord; case 'a': case 'A': return getLangDefinition(config._l)._meridiemParse; case 'X': return parseTokenTimestampMs; case 'Z': case 'ZZ': return parseTokenTimezone; case 'T': return parseTokenT; case 'MM': case 'DD': case 'YY': case 'HH': case 'hh': case 'mm': case 'ss': case 'M': case 'D': case 'd': case 'H': case 'h': case 'm': case 's': return parseTokenOneOrTwoDigits; default : return new RegExp(token.replace('\\', '')); } } function timezoneMinutesFromString(string) { var tzchunk = (parseTokenTimezone.exec(string) || [])[0], parts = (tzchunk + '').match(parseTimezoneChunker) || ['-', 0, 0], minutes = +(parts[1] * 60) + ~~parts[2]; return parts[0] === '+' ? -minutes : minutes; } // function to convert string input to date function addTimeToArrayFromToken(token, input, config) { var a, datePartArray = config._a; switch (token) { // MONTH case 'M' : // fall through to MM case 'MM' : if (input != null) { datePartArray[1] = ~~input - 1; } break; case 'MMM' : // fall through to MMMM case 'MMMM' : a = getLangDefinition(config._l).monthsParse(input); // if we didn't find a month name, mark the date as invalid. if (a != null) { datePartArray[1] = a; } else { config._isValid = false; } break; // DAY OF MONTH case 'D' : // fall through to DD case 'DD' : if (input != null) { datePartArray[2] = ~~input; } break; // DAY OF YEAR case 'DDD' : // fall through to DDDD case 'DDDD' : if (input != null) { datePartArray[1] = 0; datePartArray[2] = ~~input; } break; // YEAR case 'YY' : datePartArray[0] = ~~input + (~~input > 68 ? 1900 : 2000); break; case 'YYYY' : case 'YYYYY' : datePartArray[0] = ~~input; break; // AM / PM case 'a' : // fall through to A case 'A' : config._isPm = getLangDefinition(config._l).isPM(input); break; // 24 HOUR case 'H' : // fall through to hh case 'HH' : // fall through to hh case 'h' : // fall through to hh case 'hh' : datePartArray[3] = ~~input; break; // MINUTE case 'm' : // fall through to mm case 'mm' : datePartArray[4] = ~~input; break; // SECOND case 's' : // fall through to ss case 'ss' : datePartArray[5] = ~~input; break; // MILLISECOND case 'S' : case 'SS' : case 'SSS' : datePartArray[6] = ~~ (('0.' + input) * 1000); break; // UNIX TIMESTAMP WITH MS case 'X': config._d = new Date(parseFloat(input) * 1000); break; // TIMEZONE case 'Z' : // fall through to ZZ case 'ZZ' : config._useUTC = true; config._tzm = timezoneMinutesFromString(input); break; } // if the input is null, the date is not valid if (input == null) { config._isValid = false; } } // convert an array to a date. // the array should mirror the parameters below // note: all values past the year are optional and will default to the lowest possible value. // [year, month, day , hour, minute, second, millisecond] function dateFromArray(config) { var i, date, input = [], currentDate; if (config._d) { return; } // Default to current date. // * if no year, month, day of month are given, default to today // * if day of month is given, default month and year // * if month is given, default only year // * if year is given, don't default anything currentDate = currentDateArray(config); for (i = 0; i < 3 && config._a[i] == null; ++i) { config._a[i] = input[i] = currentDate[i]; } // Zero out whatever was not defaulted, including time for (; i < 7; i++) { config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; } // add the offsets to the time to be parsed so that we can have a clean array for checking isValid input[3] += ~~((config._tzm || 0) / 60); input[4] += ~~((config._tzm || 0) % 60); date = new Date(0); if (config._useUTC) { date.setUTCFullYear(input[0], input[1], input[2]); date.setUTCHours(input[3], input[4], input[5], input[6]); } else { date.setFullYear(input[0], input[1], input[2]); date.setHours(input[3], input[4], input[5], input[6]); } config._d = date; } function dateFromObject(config) { var o = config._i; if (config._d) { return; } config._a = [ o.years || o.year || o.y, o.months || o.month || o.M, o.days || o.day || o.d, o.hours || o.hour || o.h, o.minutes || o.minute || o.m, o.seconds || o.second || o.s, o.milliseconds || o.millisecond || o.ms ]; dateFromArray(config); } function currentDateArray(config) { var now = new Date(); if (config._useUTC) { return [ now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate() ]; } else { return [now.getFullYear(), now.getMonth(), now.getDate()]; } } // date from string and format string function makeDateFromStringAndFormat(config) { // This array is used to make a Date, either with `new Date` or `Date.UTC` var lang = getLangDefinition(config._l), string = '' + config._i, i, parsedInput, tokens; tokens = expandFormat(config._f, lang).match(formattingTokens); config._a = []; for (i = 0; i < tokens.length; i++) { parsedInput = (getParseRegexForToken(tokens[i], config).exec(string) || [])[0]; if (parsedInput) { string = string.slice(string.indexOf(parsedInput) + parsedInput.length); } // don't parse if its not a known token if (formatTokenFunctions[tokens[i]]) { addTimeToArrayFromToken(tokens[i], parsedInput, config); } } // add remaining unparsed input to the string if (string) { config._il = string; } // handle am pm if (config._isPm && config._a[3] < 12) { config._a[3] += 12; } // if is 12 am, change hours to 0 if (config._isPm === false && config._a[3] === 12) { config._a[3] = 0; } // return dateFromArray(config); } // date from string and array of format strings function makeDateFromStringAndArray(config) { var tempConfig, tempMoment, bestMoment, scoreToBeat = 99, i, currentScore; for (i = 0; i < config._f.length; i++) { tempConfig = extend({}, config); tempConfig._f = config._f[i]; makeDateFromStringAndFormat(tempConfig); tempMoment = new Moment(tempConfig); currentScore = compareArrays(tempConfig._a, tempMoment.toArray()); // if there is any input that was not parsed // add a penalty for that format if (tempMoment._il) { currentScore += tempMoment._il.length; } if (currentScore < scoreToBeat) { scoreToBeat = currentScore; bestMoment = tempMoment; } } extend(config, bestMoment); } // date from iso format function makeDateFromString(config) { var i, string = config._i, match = isoRegex.exec(string); if (match) { // match[2] should be "T" or undefined config._f = 'YYYY-MM-DD' + (match[2] || " "); for (i = 0; i < 4; i++) { if (isoTimes[i][1].exec(string)) { config._f += isoTimes[i][0]; break; } } if (parseTokenTimezone.exec(string)) { config._f += " Z"; } makeDateFromStringAndFormat(config); } else { config._d = new Date(string); } } function makeDateFromInput(config) { var input = config._i, matched = aspNetJsonRegex.exec(input); if (input === undefined) { config._d = new Date(); } else if (matched) { config._d = new Date(+matched[1]); } else if (typeof input === 'string') { makeDateFromString(config); } else if (isArray(input)) { config._a = input.slice(0); dateFromArray(config); } else if (input instanceof Date) { config._d = new Date(+input); } else if (typeof(input) === 'object') { dateFromObject(config); } else { config._d = new Date(input); } } /************************************ Relative Time ************************************/ // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize function substituteTimeAgo(string, number, withoutSuffix, isFuture, lang) { return lang.relativeTime(number || 1, !!withoutSuffix, string, isFuture); } function relativeTime(milliseconds, withoutSuffix, lang) { var seconds = round(Math.abs(milliseconds) / 1000), minutes = round(seconds / 60), hours = round(minutes / 60), days = round(hours / 24), years = round(days / 365), args = seconds < 45 && ['s', seconds] || minutes === 1 && ['m'] || minutes < 45 && ['mm', minutes] || hours === 1 && ['h'] || hours < 22 && ['hh', hours] || days === 1 && ['d'] || days <= 25 && ['dd', days] || days <= 45 && ['M'] || days < 345 && ['MM', round(days / 30)] || years === 1 && ['y'] || ['yy', years]; args[2] = withoutSuffix; args[3] = milliseconds > 0; args[4] = lang; return substituteTimeAgo.apply({}, args); } /************************************ Week of Year ************************************/ // firstDayOfWeek 0 = sun, 6 = sat // the day of the week that starts the week // (usually sunday or monday) // firstDayOfWeekOfYear 0 = sun, 6 = sat // the first week is the week that contains the first // of this day of the week // (eg. ISO weeks use thursday (4)) function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) { var end = firstDayOfWeekOfYear - firstDayOfWeek, daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(), adjustedMoment; if (daysToDayOfWeek > end) { daysToDayOfWeek -= 7; } if (daysToDayOfWeek < end - 7) { daysToDayOfWeek += 7; } adjustedMoment = moment(mom).add('d', daysToDayOfWeek); return { week: Math.ceil(adjustedMoment.dayOfYear() / 7), year: adjustedMoment.year() }; } /************************************ Top Level Functions ************************************/ function makeMoment(config) { var input = config._i, format = config._f; if (input === null || input === '') { return null; } if (typeof input === 'string') { config._i = input = getLangDefinition().preparse(input); } if (moment.isMoment(input)) { config = extend({}, input); config._d = new Date(+input._d); } else if (format) { if (isArray(format)) { makeDateFromStringAndArray(config); } else { makeDateFromStringAndFormat(config); } } else { makeDateFromInput(config); } return new Moment(config); } moment = function (input, format, lang) { return makeMoment({ _i : input, _f : format, _l : lang, _isUTC : false }); }; // creating with utc moment.utc = function (input, format, lang) { return makeMoment({ _useUTC : true, _isUTC : true, _l : lang, _i : input, _f : format }).utc(); }; // creating with unix timestamp (in seconds) moment.unix = function (input) { return moment(input * 1000); }; // duration moment.duration = function (input, key) { var isDuration = moment.isDuration(input), isNumber = (typeof input === 'number'), duration = (isDuration ? input._input : (isNumber ? {} : input)), matched = aspNetTimeSpanJsonRegex.exec(input), sign, ret; if (isNumber) { if (key) { duration[key] = input; } else { duration.milliseconds = input; } } else if (matched) { sign = (matched[1] === "-") ? -1 : 1; duration = { y: 0, d: ~~matched[2] * sign, h: ~~matched[3] * sign, m: ~~matched[4] * sign, s: ~~matched[5] * sign, ms: ~~matched[6] * sign }; } ret = new Duration(duration); if (isDuration && input.hasOwnProperty('_lang')) { ret._lang = input._lang; } return ret; }; // version number moment.version = VERSION; // default format moment.defaultFormat = isoFormat; // This function will be called whenever a moment is mutated. // It is intended to keep the offset in sync with the timezone. moment.updateOffset = function () {}; // This function will load languages and then set the global language. If // no arguments are passed in, it will simply return the current global // language key. moment.lang = function (key, values) { if (!key) { return moment.fn._lang._abbr; } key = key.toLowerCase(); key = key.replace('_', '-'); if (values) { loadLang(key, values); } else if (values === null) { unloadLang(key); key = 'en'; } else if (!languages[key]) { getLangDefinition(key); } moment.duration.fn._lang = moment.fn._lang = getLangDefinition(key); }; // returns language data moment.langData = function (key) { if (key && key._lang && key._lang._abbr) { key = key._lang._abbr; } return getLangDefinition(key); }; // compare moment object moment.isMoment = function (obj) { return obj instanceof Moment; }; // for typechecking Duration objects moment.isDuration = function (obj) { return obj instanceof Duration; }; /************************************ Moment Prototype ************************************/ extend(moment.fn = Moment.prototype, { clone : function () { return moment(this); }, valueOf : function () { return +this._d + ((this._offset || 0) * 60000); }, unix : function () { return Math.floor(+this / 1000); }, toString : function () { return this.format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ"); }, toDate : function () { return this._offset ? new Date(+this) : this._d; }, toISOString : function () { return formatMoment(moment(this).utc(), 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); }, toArray : function () { var m = this; return [ m.year(), m.month(), m.date(), m.hours(), m.minutes(), m.seconds(), m.milliseconds() ]; }, isValid : function () { if (this._isValid == null) { if (this._a) { this._isValid = !compareArrays(this._a, (this._isUTC ? moment.utc(this._a) : moment(this._a)).toArray()); } else { this._isValid = !isNaN(this._d.getTime()); } } return !!this._isValid; }, invalidAt: function () { var i, arr1 = this._a, arr2 = (this._isUTC ? moment.utc(this._a) : moment(this._a)).toArray(); for (i = 6; i >= 0 && arr1[i] === arr2[i]; --i) { // empty loop body } return i; }, utc : function () { return this.zone(0); }, local : function () { this.zone(0); this._isUTC = false; return this; }, format : function (inputString) { var output = formatMoment(this, inputString || moment.defaultFormat); return this.lang().postformat(output); }, add : function (input, val) { var dur; // switch args to support add('s', 1) and add(1, 's') if (typeof input === 'string') { dur = moment.duration(+val, input); } else { dur = moment.duration(input, val); } addOrSubtractDurationFromMoment(this, dur, 1); return this; }, subtract : function (input, val) { var dur; // switch args to support subtract('s', 1) and subtract(1, 's') if (typeof input === 'string') { dur = moment.duration(+val, input); } else { dur = moment.duration(input, val); } addOrSubtractDurationFromMoment(this, dur, -1); return this; }, diff : function (input, units, asFloat) { var that = this._isUTC ? moment(input).zone(this._offset || 0) : moment(input).local(), zoneDiff = (this.zone() - that.zone()) * 6e4, diff, output; units = normalizeUnits(units); if (units === 'year' || units === 'month') { // average number of days in the months in the given dates diff = (this.daysInMonth() + that.daysInMonth()) * 432e5; // 24 * 60 * 60 * 1000 / 2 // difference in months output = ((this.year() - that.year()) * 12) + (this.month() - that.month()); // adjust by taking difference in days, average number of days // and dst in the given months. output += ((this - moment(this).startOf('month')) - (that - moment(that).startOf('month'))) / diff; // same as above but with zones, to negate all dst output -= ((this.zone() - moment(this).startOf('month').zone()) - (that.zone() - moment(that).startOf('month').zone())) * 6e4 / diff; if (units === 'year') { output = output / 12; } } else { diff = (this - that); output = units === 'second' ? diff / 1e3 : // 1000 units === 'minute' ? diff / 6e4 : // 1000 * 60 units === 'hour' ? diff / 36e5 : // 1000 * 60 * 60 units === 'day' ? (diff - zoneDiff) / 864e5 : // 1000 * 60 * 60 * 24, negate dst units === 'week' ? (diff - zoneDiff) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst diff; } return asFloat ? output : absRound(output); }, from : function (time, withoutSuffix) { return moment.duration(this.diff(time)).lang(this.lang()._abbr).humanize(!withoutSuffix); }, fromNow : function (withoutSuffix) { return this.from(moment(), withoutSuffix); }, calendar : function () { var diff = this.diff(moment().zone(this.zone()).startOf('day'), 'days', true), format = diff < -6 ? 'sameElse' : diff < -1 ? 'lastWeek' : diff < 0 ? 'lastDay' : diff < 1 ? 'sameDay' : diff < 2 ? 'nextDay' : diff < 7 ? 'nextWeek' : 'sameElse'; return this.format(this.lang().calendar(format, this)); }, isLeapYear : function () { var year = this.year(); return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; }, isDST : function () { return (this.zone() < this.clone().month(0).zone() || this.zone() < this.clone().month(5).zone()); }, day : function (input) { var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); if (input != null) { if (typeof input === 'string') { input = this.lang().weekdaysParse(input); if (typeof input !== 'number') { return this; } } return this.add({ d : input - day }); } else { return day; } }, month : function (input) { var utc = this._isUTC ? 'UTC' : '', dayOfMonth; if (input != null) { if (typeof input === 'string') { input = this.lang().monthsParse(input); if (typeof input !== 'number') { return this; } } dayOfMonth = this.date(); this.date(1); this._d['set' + utc + 'Month'](input); this.date(Math.min(dayOfMonth, this.daysInMonth())); moment.updateOffset(this); return this; } else { return this._d['get' + utc + 'Month'](); } }, startOf: function (units) { units = normalizeUnits(units); // the following switch intentionally omits break keywords // to utilize falling through the cases. switch (units) { case 'year': this.month(0); /* falls through */ case 'month': this.date(1); /* falls through */ case 'week': case 'isoweek': case 'day': this.hours(0); /* falls through */ case 'hour': this.minutes(0); /* falls through */ case 'minute': this.seconds(0); /* falls through */ case 'second': this.milliseconds(0); /* falls through */ } // weeks are a special case if (units === 'week') { this.weekday(0); } else if (units === 'isoweek') { this.isoWeekday(1); } return this; }, endOf: function (units) { units = normalizeUnits(units); return this.startOf(units).add((units === 'isoweek' ? 'week' : units), 1).subtract('ms', 1); }, isAfter: function (input, units) { units = typeof units !== 'undefined' ? units : 'millisecond'; return +this.clone().startOf(units) > +moment(input).startOf(units); }, isBefore: function (input, units) { units = typeof units !== 'undefined' ? units : 'millisecond'; return +this.clone().startOf(units) < +moment(input).startOf(units); }, isSame: function (input, units) { units = typeof units !== 'undefined' ? units : 'millisecond'; return +this.clone().startOf(units) === +moment(input).startOf(units); }, min: function (other) { other = moment.apply(null, arguments); return other < this ? this : other; }, max: function (other) { other = moment.apply(null, arguments); return other > this ? this : other; }, zone : function (input) { var offset = this._offset || 0; if (input != null) { if (typeof input === "string") { input = timezoneMinutesFromString(input); } if (Math.abs(input) < 16) { input = input * 60; } this._offset = input; this._isUTC = true; if (offset !== input) { addOrSubtractDurationFromMoment(this, moment.duration(offset - input, 'm'), 1, true); } } else { return this._isUTC ? offset : this._d.getTimezoneOffset(); } return this; }, zoneAbbr : function () { return this._isUTC ? "UTC" : ""; }, zoneName : function () { return this._isUTC ? "Coordinated Universal Time" : ""; }, hasAlignedHourOffset : function (input) { if (!input) { input = 0; } else { input = moment(input).zone(); } return (this.zone() - input) % 60 === 0; }, daysInMonth : function () { return moment.utc([this.year(), this.month() + 1, 0]).date(); }, dayOfYear : function (input) { var dayOfYear = round((moment(this).startOf('day') - moment(this).startOf('year')) / 864e5) + 1; return input == null ? dayOfYear : this.add("d", (input - dayOfYear)); }, weekYear : function (input) { var year = weekOfYear(this, this.lang()._week.dow, this.lang()._week.doy).year; return input == null ? year : this.add("y", (input - year)); }, isoWeekYear : function (input) { var year = weekOfYear(this, 1, 4).year; return input == null ? year : this.add("y", (input - year)); }, week : function (input) { var week = this.lang().week(this); return input == null ? week : this.add("d", (input - week) * 7); }, isoWeek : function (input) { var week = weekOfYear(this, 1, 4).week; return input == null ? week : this.add("d", (input - week) * 7); }, weekday : function (input) { var weekday = (this._d.getDay() + 7 - this.lang()._week.dow) % 7; return input == null ? weekday : this.add("d", input - weekday); }, isoWeekday : function (input) { // behaves the same as moment#day except // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) // as a setter, sunday should belong to the previous week. return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7); }, get : function (units) { units = normalizeUnits(units); return this[units.toLowerCase()](); }, set : function (units, value) { units = normalizeUnits(units); this[units.toLowerCase()](value); }, // If passed a language key, it will set the language for this // instance. Otherwise, it will return the language configuration // variables for this instance. lang : function (key) { if (key === undefined) { return this._lang; } else { this._lang = getLangDefinition(key); return this; } } }); // helper for adding shortcuts function makeGetterAndSetter(name, key) { moment.fn[name] = moment.fn[name + 's'] = function (input) { var utc = this._isUTC ? 'UTC' : ''; if (input != null) { this._d['set' + utc + key](input); moment.updateOffset(this); return this; } else { return this._d['get' + utc + key](); } }; } // loop through and add shortcuts (Month, Date, Hours, Minutes, Seconds, Milliseconds) for (i = 0; i < proxyGettersAndSetters.length; i ++) { makeGetterAndSetter(proxyGettersAndSetters[i].toLowerCase().replace(/s$/, ''), proxyGettersAndSetters[i]); } // add shortcut for year (uses different syntax than the getter/setter 'year' == 'FullYear') makeGetterAndSetter('year', 'FullYear'); // add plural methods moment.fn.days = moment.fn.day; moment.fn.months = moment.fn.month; moment.fn.weeks = moment.fn.week; moment.fn.isoWeeks = moment.fn.isoWeek; // add aliased format methods moment.fn.toJSON = moment.fn.toISOString; /************************************ Duration Prototype ************************************/ extend(moment.duration.fn = Duration.prototype, { _bubble : function () { var milliseconds = this._milliseconds, days = this._days, months = this._months, data = this._data, seconds, minutes, hours, years; // The following code bubbles up values, see the tests for // examples of what that means. data.milliseconds = milliseconds % 1000; seconds = absRound(milliseconds / 1000); data.seconds = seconds % 60; minutes = absRound(seconds / 60); data.minutes = minutes % 60; hours = absRound(minutes / 60); data.hours = hours % 24; days += absRound(hours / 24); data.days = days % 30; months += absRound(days / 30); data.months = months % 12; years = absRound(months / 12); data.years = years; }, weeks : function () { return absRound(this.days() / 7); }, valueOf : function () { return this._milliseconds + this._days * 864e5 + (this._months % 12) * 2592e6 + ~~(this._months / 12) * 31536e6; }, humanize : function (withSuffix) { var difference = +this, output = relativeTime(difference, !withSuffix, this.lang()); if (withSuffix) { output = this.lang().pastFuture(difference, output); } return this.lang().postformat(output); }, add : function (input, val) { // supports only 2.0-style add(1, 's') or add(moment) var dur = moment.duration(input, val); this._milliseconds += dur._milliseconds; this._days += dur._days; this._months += dur._months; this._bubble(); return this; }, subtract : function (input, val) { var dur = moment.duration(input, val); this._milliseconds -= dur._milliseconds; this._days -= dur._days; this._months -= dur._months; this._bubble(); return this; }, get : function (units) { units = normalizeUnits(units); return this[units.toLowerCase() + 's'](); }, as : function (units) { units = normalizeUnits(units); return this['as' + units.charAt(0).toUpperCase() + units.slice(1) + 's'](); }, lang : moment.fn.lang }); function makeDurationGetter(name) { moment.duration.fn[name] = function () { return this._data[name]; }; } function makeDurationAsGetter(name, factor) { moment.duration.fn['as' + name] = function () { return +this / factor; }; } for (i in unitMillisecondFactors) { if (unitMillisecondFactors.hasOwnProperty(i)) { makeDurationAsGetter(i, unitMillisecondFactors[i]); makeDurationGetter(i.toLowerCase()); } } makeDurationAsGetter('Weeks', 6048e5); moment.duration.fn.asMonths = function () { return (+this - this.years() * 31536e6) / 2592e6 + this.years() * 12; }; /************************************ Default Lang ************************************/ // Set default language, other languages will inherit from English. moment.lang('en', { ordinal : function (number) { var b = number % 10, output = (~~ (number % 100 / 10) === 1) ? 'th' : (b === 1) ? 'st' : (b === 2) ? 'nd' : (b === 3) ? 'rd' : 'th'; return number + output; } }); // moment.js language configuration // language : Moroccan Arabic (ar-ma) // author : ElFadili Yassine : https://github.com/ElFadiliY // author : Abdel Said : https://github.com/abdelsaid (function (factory) { factory(moment); }(function (moment) { moment.lang('ar-ma', { months : "يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"), monthsShort : "يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"), weekdays : "الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"), weekdaysShort : "احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"), weekdaysMin : "ح_ن_ث_ر_خ_ج_س".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: "[اليوم على الساعة] LT", nextDay: '[غدا على الساعة] LT', nextWeek: 'dddd [على الساعة] LT', lastDay: '[أمس على الساعة] LT', lastWeek: 'dddd [على الساعة] LT', sameElse: 'L' }, relativeTime : { future : "في %s", past : "منذ %s", s : "ثوان", m : "دقيقة", mm : "%d دقائق", h : "ساعة", hh : "%d ساعات", d : "يوم", dd : "%d أيام", M : "شهر", MM : "%d أشهر", y : "سنة", yy : "%d سنوات" }, week : { dow : 6, // Saturday is the first day of the week. doy : 12 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : Arabic (ar) // author : Abdel Said : https://github.com/abdelsaid // changes in months, weekdays : Ahmed Elkhatib (function (factory) { factory(moment); }(function (moment) { moment.lang('ar', { months : "يناير/ كانون الثاني_فبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"), monthsShort : "يناير/ كانون الثاني_فبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"), weekdays : "الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"), weekdaysShort : "الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"), weekdaysMin : "ح_ن_ث_ر_خ_ج_س".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: "[اليوم على الساعة] LT", nextDay: '[غدا على الساعة] LT', nextWeek: 'dddd [على الساعة] LT', lastDay: '[أمس على الساعة] LT', lastWeek: 'dddd [على الساعة] LT', sameElse: 'L' }, relativeTime : { future : "في %s", past : "منذ %s", s : "ثوان", m : "دقيقة", mm : "%d دقائق", h : "ساعة", hh : "%d ساعات", d : "يوم", dd : "%d أيام", M : "شهر", MM : "%d أشهر", y : "سنة", yy : "%d سنوات" }, week : { dow : 6, // Saturday is the first day of the week. doy : 12 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : bulgarian (bg) // author : Krasen Borisov : https://github.com/kraz (function (factory) { factory(moment); }(function (moment) { moment.lang('bg', { months : "януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"), monthsShort : "янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"), weekdays : "неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"), weekdaysShort : "нед_пон_вто_сря_чет_пет_съб".split("_"), weekdaysMin : "нд_пн_вт_ср_чт_пт_сб".split("_"), longDateFormat : { LT : "h:mm", L : "D.MM.YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendar : { sameDay : '[Днес в] LT', nextDay : '[Утре в] LT', nextWeek : 'dddd [в] LT', lastDay : '[Вчера в] LT', lastWeek : function () { switch (this.day()) { case 0: case 3: case 6: return '[В изминалата] dddd [в] LT'; case 1: case 2: case 4: case 5: return '[В изминалия] dddd [в] LT'; } }, sameElse : 'L' }, relativeTime : { future : "след %s", past : "преди %s", s : "няколко секунди", m : "минута", mm : "%d минути", h : "час", hh : "%d часа", d : "ден", dd : "%d дни", M : "месец", MM : "%d месеца", y : "година", yy : "%d години" }, ordinal : function (number) { var lastDigit = number % 10, last2Digits = number % 100; if (number === 0) { return number + '-ев'; } else if (last2Digits === 0) { return number + '-ен'; } else if (last2Digits > 10 && last2Digits < 20) { return number + '-ти'; } else if (lastDigit === 1) { return number + '-ви'; } else if (lastDigit === 2) { return number + '-ри'; } else if (lastDigit === 7 || lastDigit === 8) { return number + '-ми'; } else { return number + '-ти'; } }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : breton (br) // author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou (function (factory) { factory(moment); }(function (moment) { function relativeTimeWithMutation(number, withoutSuffix, key) { var format = { 'mm': "munutenn", 'MM': "miz", 'dd': "devezh" }; return number + ' ' + mutation(format[key], number); } function specialMutationForYears(number) { switch (lastNumber(number)) { case 1: case 3: case 4: case 5: case 9: return number + ' bloaz'; default: return number + ' vloaz'; } } function lastNumber(number) { if (number > 9) { return lastNumber(number % 10); } return number; } function mutation(text, number) { if (number === 2) { return softMutation(text); } return text; } function softMutation(text) { var mutationTable = { 'm': 'v', 'b': 'v', 'd': 'z' }; if (mutationTable[text.charAt(0)] === undefined) { return text; } return mutationTable[text.charAt(0)] + text.substring(1); } moment.lang('br', { months : "Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"), monthsShort : "Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"), weekdays : "Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"), weekdaysShort : "Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"), weekdaysMin : "Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"), longDateFormat : { LT : "h[e]mm A", L : "DD/MM/YYYY", LL : "D [a viz] MMMM YYYY", LLL : "D [a viz] MMMM YYYY LT", LLLL : "dddd, D [a viz] MMMM YYYY LT" }, calendar : { sameDay : '[Hiziv da] LT', nextDay : '[Warc\'hoazh da] LT', nextWeek : 'dddd [da] LT', lastDay : '[Dec\'h da] LT', lastWeek : 'dddd [paset da] LT', sameElse : 'L' }, relativeTime : { future : "a-benn %s", past : "%s 'zo", s : "un nebeud segondennoù", m : "ur vunutenn", mm : relativeTimeWithMutation, h : "un eur", hh : "%d eur", d : "un devezh", dd : relativeTimeWithMutation, M : "ur miz", MM : relativeTimeWithMutation, y : "ur bloaz", yy : specialMutationForYears }, ordinal : function (number) { var output = (number === 1) ? 'añ' : 'vet'; return number + output; }, week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : catalan (ca) // author : Juan G. Hurtado : https://github.com/juanghurtado (function (factory) { factory(moment); }(function (moment) { moment.lang('ca', { months : "Gener_Febrer_Març_Abril_Maig_Juny_Juliol_Agost_Setembre_Octubre_Novembre_Desembre".split("_"), monthsShort : "Gen._Febr._Mar._Abr._Mai._Jun._Jul._Ag._Set._Oct._Nov._Des.".split("_"), weekdays : "Diumenge_Dilluns_Dimarts_Dimecres_Dijous_Divendres_Dissabte".split("_"), weekdaysShort : "Dg._Dl._Dt._Dc._Dj._Dv._Ds.".split("_"), weekdaysMin : "Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"), longDateFormat : { LT : "H:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay : function () { return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; }, nextDay : function () { return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; }, nextWeek : function () { return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; }, lastDay : function () { return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; }, lastWeek : function () { return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; }, sameElse : 'L' }, relativeTime : { future : "en %s", past : "fa %s", s : "uns segons", m : "un minut", mm : "%d minuts", h : "una hora", hh : "%d hores", d : "un dia", dd : "%d dies", M : "un mes", MM : "%d mesos", y : "un any", yy : "%d anys" }, ordinal : '%dº', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : czech (cs) // author : petrbela : https://github.com/petrbela (function (factory) { factory(moment); }(function (moment) { var months = "leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"), monthsShort = "led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"); function plural(n) { return (n > 1) && (n < 5) && (~~(n / 10) !== 1); } function translate(number, withoutSuffix, key, isFuture) { var result = number + " "; switch (key) { case 's': // a few seconds / in a few seconds / a few seconds ago return (withoutSuffix || isFuture) ? 'pár vteřin' : 'pár vteřinami'; case 'm': // a minute / in a minute / a minute ago return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou'); case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'minuty' : 'minut'); } else { return result + 'minutami'; } break; case 'h': // an hour / in an hour / an hour ago return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou'); case 'hh': // 9 hours / in 9 hours / 9 hours ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'hodiny' : 'hodin'); } else { return result + 'hodinami'; } break; case 'd': // a day / in a day / a day ago return (withoutSuffix || isFuture) ? 'den' : 'dnem'; case 'dd': // 9 days / in 9 days / 9 days ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'dny' : 'dní'); } else { return result + 'dny'; } break; case 'M': // a month / in a month / a month ago return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem'; case 'MM': // 9 months / in 9 months / 9 months ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'měsíce' : 'měsíců'); } else { return result + 'měsíci'; } break; case 'y': // a year / in a year / a year ago return (withoutSuffix || isFuture) ? 'rok' : 'rokem'; case 'yy': // 9 years / in 9 years / 9 years ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'roky' : 'let'); } else { return result + 'lety'; } break; } } moment.lang('cs', { months : months, monthsShort : monthsShort, monthsParse : (function (months, monthsShort) { var i, _monthsParse = []; for (i = 0; i < 12; i++) { // use custom parser to solve problem with July (červenec) _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i'); } return _monthsParse; }(months, monthsShort)), weekdays : "neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"), weekdaysShort : "ne_po_út_st_čt_pá_so".split("_"), weekdaysMin : "ne_po_út_st_čt_pá_so".split("_"), longDateFormat : { LT: "H:mm", L : "DD.MM.YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY LT", LLLL : "dddd D. MMMM YYYY LT" }, calendar : { sameDay: "[dnes v] LT", nextDay: '[zítra v] LT', nextWeek: function () { switch (this.day()) { case 0: return '[v neděli v] LT'; case 1: case 2: return '[v] dddd [v] LT'; case 3: return '[ve středu v] LT'; case 4: return '[ve čtvrtek v] LT'; case 5: return '[v pátek v] LT'; case 6: return '[v sobotu v] LT'; } }, lastDay: '[včera v] LT', lastWeek: function () { switch (this.day()) { case 0: return '[minulou neděli v] LT'; case 1: case 2: return '[minulé] dddd [v] LT'; case 3: return '[minulou středu v] LT'; case 4: case 5: return '[minulý] dddd [v] LT'; case 6: return '[minulou sobotu v] LT'; } }, sameElse: "L" }, relativeTime : { future : "za %s", past : "před %s", s : translate, m : translate, mm : translate, h : translate, hh : translate, d : translate, dd : translate, M : translate, MM : translate, y : translate, yy : translate }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : chuvash (cv) // author : Anatoly Mironov : https://github.com/mirontoli (function (factory) { factory(moment); }(function (moment) { moment.lang('cv', { months : "кăрлач_нарăс_пуш_ака_май_çĕртме_утă_çурла_авăн_юпа_чӳк_раштав".split("_"), monthsShort : "кăр_нар_пуш_ака_май_çĕр_утă_çур_ав_юпа_чӳк_раш".split("_"), weekdays : "вырсарникун_тунтикун_ытларикун_юнкун_кĕçнерникун_эрнекун_шăматкун".split("_"), weekdaysShort : "выр_тун_ытл_юн_кĕç_эрн_шăм".split("_"), weekdaysMin : "вр_тн_ыт_юн_кç_эр_шм".split("_"), longDateFormat : { LT : "HH:mm", L : "DD-MM-YYYY", LL : "YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ]", LLL : "YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT", LLLL : "dddd, YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT" }, calendar : { sameDay: '[Паян] LT [сехетре]', nextDay: '[Ыран] LT [сехетре]', lastDay: '[Ĕнер] LT [сехетре]', nextWeek: '[Çитес] dddd LT [сехетре]', lastWeek: '[Иртнĕ] dddd LT [сехетре]', sameElse: 'L' }, relativeTime : { future : function (output) { var affix = /сехет$/i.exec(output) ? "рен" : /çул$/i.exec(output) ? "тан" : "ран"; return output + affix; }, past : "%s каялла", s : "пĕр-ик çеккунт", m : "пĕр минут", mm : "%d минут", h : "пĕр сехет", hh : "%d сехет", d : "пĕр кун", dd : "%d кун", M : "пĕр уйăх", MM : "%d уйăх", y : "пĕр çул", yy : "%d çул" }, ordinal : '%d-мĕш', week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : danish (da) // author : Ulrik Nielsen : https://github.com/mrbase (function (factory) { factory(moment); }(function (moment) { moment.lang('da', { months : "januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"), monthsShort : "jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"), weekdays : "søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"), weekdaysShort : "søn_man_tir_ons_tor_fre_lør".split("_"), weekdaysMin : "sø_ma_ti_on_to_fr_lø".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D. MMMM, YYYY LT" }, calendar : { sameDay : '[I dag kl.] LT', nextDay : '[I morgen kl.] LT', nextWeek : 'dddd [kl.] LT', lastDay : '[I går kl.] LT', lastWeek : '[sidste] dddd [kl] LT', sameElse : 'L' }, relativeTime : { future : "om %s", past : "%s siden", s : "få sekunder", m : "et minut", mm : "%d minutter", h : "en time", hh : "%d timer", d : "en dag", dd : "%d dage", M : "en måned", MM : "%d måneder", y : "et år", yy : "%d år" }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : german (de) // author : lluchs : https://github.com/lluchs // author: Menelion Elensúle: https://github.com/Oire (function (factory) { factory(moment); }(function (moment) { function processRelativeTime(number, withoutSuffix, key, isFuture) { var format = { 'm': ['eine Minute', 'einer Minute'], 'h': ['eine Stunde', 'einer Stunde'], 'd': ['ein Tag', 'einem Tag'], 'dd': [number + ' Tage', number + ' Tagen'], 'M': ['ein Monat', 'einem Monat'], 'MM': [number + ' Monate', number + ' Monaten'], 'y': ['ein Jahr', 'einem Jahr'], 'yy': [number + ' Jahre', number + ' Jahren'] }; return withoutSuffix ? format[key][0] : format[key][1]; } moment.lang('de', { months : "Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"), monthsShort : "Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"), weekdays : "Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"), weekdaysShort : "So._Mo._Di._Mi._Do._Fr._Sa.".split("_"), weekdaysMin : "So_Mo_Di_Mi_Do_Fr_Sa".split("_"), longDateFormat : { LT: "H:mm [Uhr]", L : "DD.MM.YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY LT", LLLL : "dddd, D. MMMM YYYY LT" }, calendar : { sameDay: "[Heute um] LT", sameElse: "L", nextDay: '[Morgen um] LT', nextWeek: 'dddd [um] LT', lastDay: '[Gestern um] LT', lastWeek: '[letzten] dddd [um] LT' }, relativeTime : { future : "in %s", past : "vor %s", s : "ein paar Sekunden", m : processRelativeTime, mm : "%d Minuten", h : processRelativeTime, hh : "%d Stunden", d : processRelativeTime, dd : processRelativeTime, M : processRelativeTime, MM : processRelativeTime, y : processRelativeTime, yy : processRelativeTime }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : modern greek (el) // author : Aggelos Karalias : https://github.com/mehiel (function (factory) { factory(moment); }(function (moment) { moment.lang('el', { monthsNominativeEl : "Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"), monthsGenitiveEl : "Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"), months : function (momentToFormat, format) { if (/D/.test(format.substring(0, format.indexOf("MMMM")))) { // if there is a day number before 'MMMM' return this._monthsGenitiveEl[momentToFormat.month()]; } else { return this._monthsNominativeEl[momentToFormat.month()]; } }, monthsShort : "Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"), weekdays : "Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"), weekdaysShort : "Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"), weekdaysMin : "Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"), meridiem : function (hours, minutes, isLower) { if (hours > 11) { return isLower ? 'μμ' : 'ΜΜ'; } else { return isLower ? 'πμ' : 'ΠΜ'; } }, longDateFormat : { LT : "h:mm A", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendarEl : { sameDay : '[Σήμερα {}] LT', nextDay : '[Αύριο {}] LT', nextWeek : 'dddd [{}] LT', lastDay : '[Χθες {}] LT', lastWeek : '[την προηγούμενη] dddd [{}] LT', sameElse : 'L' }, calendar : function (key, mom) { var output = this._calendarEl[key], hours = mom && mom.hours(); return output.replace("{}", (hours % 12 === 1 ? "στη" : "στις")); }, relativeTime : { future : "σε %s", past : "%s πριν", s : "δευτερόλεπτα", m : "ένα λεπτό", mm : "%d λεπτά", h : "μία ώρα", hh : "%d ώρες", d : "μία μέρα", dd : "%d μέρες", M : "ένας μήνας", MM : "%d μήνες", y : "ένας χρόνος", yy : "%d χρόνια" }, ordinal : function (number) { return number + 'η'; }, week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4st is the first week of the year. } }); })); // moment.js language configuration // language : canadian english (en-ca) // author : Jonathan Abourbih : https://github.com/jonbca (function (factory) { factory(moment); }(function (moment) { moment.lang('en-ca', { months : "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), monthsShort : "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"), weekdays : "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), weekdaysShort : "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"), weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), longDateFormat : { LT : "h:mm A", L : "YYYY-MM-DD", LL : "D MMMM, YYYY", LLL : "D MMMM, YYYY LT", LLLL : "dddd, D MMMM, YYYY LT" }, calendar : { sameDay : '[Today at] LT', nextDay : '[Tomorrow at] LT', nextWeek : 'dddd [at] LT', lastDay : '[Yesterday at] LT', lastWeek : '[Last] dddd [at] LT', sameElse : 'L' }, relativeTime : { future : "in %s", past : "%s ago", s : "a few seconds", m : "a minute", mm : "%d minutes", h : "an hour", hh : "%d hours", d : "a day", dd : "%d days", M : "a month", MM : "%d months", y : "a year", yy : "%d years" }, ordinal : function (number) { var b = number % 10, output = (~~ (number % 100 / 10) === 1) ? 'th' : (b === 1) ? 'st' : (b === 2) ? 'nd' : (b === 3) ? 'rd' : 'th'; return number + output; } }); })); // moment.js language configuration // language : great britain english (en-gb) // author : Chris Gedrim : https://github.com/chrisgedrim (function (factory) { factory(moment); }(function (moment) { moment.lang('en-gb', { months : "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), monthsShort : "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"), weekdays : "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), weekdaysShort : "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"), weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendar : { sameDay : '[Today at] LT', nextDay : '[Tomorrow at] LT', nextWeek : 'dddd [at] LT', lastDay : '[Yesterday at] LT', lastWeek : '[Last] dddd [at] LT', sameElse : 'L' }, relativeTime : { future : "in %s", past : "%s ago", s : "a few seconds", m : "a minute", mm : "%d minutes", h : "an hour", hh : "%d hours", d : "a day", dd : "%d days", M : "a month", MM : "%d months", y : "a year", yy : "%d years" }, ordinal : function (number) { var b = number % 10, output = (~~ (number % 100 / 10) === 1) ? 'th' : (b === 1) ? 'st' : (b === 2) ? 'nd' : (b === 3) ? 'rd' : 'th'; return number + output; }, week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : esperanto (eo) // author : Colin Dean : https://github.com/colindean // komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko. // Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni! (function (factory) { factory(moment); }(function (moment) { moment.lang('eo', { months : "januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"), monthsShort : "jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"), weekdays : "Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato".split("_"), weekdaysShort : "Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab".split("_"), weekdaysMin : "Di_Lu_Ma_Me_Ĵa_Ve_Sa".split("_"), longDateFormat : { LT : "HH:mm", L : "YYYY-MM-DD", LL : "D[-an de] MMMM, YYYY", LLL : "D[-an de] MMMM, YYYY LT", LLLL : "dddd, [la] D[-an de] MMMM, YYYY LT" }, meridiem : function (hours, minutes, isLower) { if (hours > 11) { return isLower ? 'p.t.m.' : 'P.T.M.'; } else { return isLower ? 'a.t.m.' : 'A.T.M.'; } }, calendar : { sameDay : '[Hodiaŭ je] LT', nextDay : '[Morgaŭ je] LT', nextWeek : 'dddd [je] LT', lastDay : '[Hieraŭ je] LT', lastWeek : '[pasinta] dddd [je] LT', sameElse : 'L' }, relativeTime : { future : "je %s", past : "antaŭ %s", s : "sekundoj", m : "minuto", mm : "%d minutoj", h : "horo", hh : "%d horoj", d : "tago",//ne 'diurno', ĉar estas uzita por proksimumo dd : "%d tagoj", M : "monato", MM : "%d monatoj", y : "jaro", yy : "%d jaroj" }, ordinal : "%da", week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : spanish (es) // author : Julio Napurí : https://github.com/julionc (function (factory) { factory(moment); }(function (moment) { moment.lang('es', { months : "enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"), monthsShort : "ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"), weekdays : "domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"), weekdaysShort : "dom._lun._mar._mié._jue._vie._sáb.".split("_"), weekdaysMin : "Do_Lu_Ma_Mi_Ju_Vi_Sá".split("_"), longDateFormat : { LT : "H:mm", L : "DD/MM/YYYY", LL : "D [de] MMMM [de] YYYY", LLL : "D [de] MMMM [de] YYYY LT", LLLL : "dddd, D [de] MMMM [de] YYYY LT" }, calendar : { sameDay : function () { return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; }, nextDay : function () { return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; }, nextWeek : function () { return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; }, lastDay : function () { return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; }, lastWeek : function () { return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; }, sameElse : 'L' }, relativeTime : { future : "en %s", past : "hace %s", s : "unos segundos", m : "un minuto", mm : "%d minutos", h : "una hora", hh : "%d horas", d : "un día", dd : "%d días", M : "un mes", MM : "%d meses", y : "un año", yy : "%d años" }, ordinal : '%dº', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : estonian (et) // author : Henry Kehlmann : https://github.com/madhenry (function (factory) { factory(moment); }(function (moment) { function translateSeconds(number, withoutSuffix, key, isFuture) { return (isFuture || withoutSuffix) ? 'paari sekundi' : 'paar sekundit'; } moment.lang('et', { months : "jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"), monthsShort : "jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"), weekdays : "pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"), weekdaysShort : "P_E_T_K_N_R_L".split("_"), weekdaysMin : "P_E_T_K_N_R_L".split("_"), longDateFormat : { LT : "H:mm", L : "DD.MM.YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY LT", LLLL : "dddd, D. MMMM YYYY LT" }, calendar : { sameDay : '[Täna,] LT', nextDay : '[Homme,] LT', nextWeek : '[Järgmine] dddd LT', lastDay : '[Eile,] LT', lastWeek : '[Eelmine] dddd LT', sameElse : 'L' }, relativeTime : { future : "%s pärast", past : "%s tagasi", s : translateSeconds, m : "minut", mm : "%d minutit", h : "tund", hh : "%d tundi", d : "päev", dd : "%d päeva", M : "kuu", MM : "%d kuud", y : "aasta", yy : "%d aastat" }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : euskara (eu) // author : Eneko Illarramendi : https://github.com/eillarra (function (factory) { factory(moment); }(function (moment) { moment.lang('eu', { months : "urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"), monthsShort : "urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"), weekdays : "igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"), weekdaysShort : "ig._al._ar._az._og._ol._lr.".split("_"), weekdaysMin : "ig_al_ar_az_og_ol_lr".split("_"), longDateFormat : { LT : "HH:mm", L : "YYYY-MM-DD", LL : "YYYY[ko] MMMM[ren] D[a]", LLL : "YYYY[ko] MMMM[ren] D[a] LT", LLLL : "dddd, YYYY[ko] MMMM[ren] D[a] LT", l : "YYYY-M-D", ll : "YYYY[ko] MMM D[a]", lll : "YYYY[ko] MMM D[a] LT", llll : "ddd, YYYY[ko] MMM D[a] LT" }, calendar : { sameDay : '[gaur] LT[etan]', nextDay : '[bihar] LT[etan]', nextWeek : 'dddd LT[etan]', lastDay : '[atzo] LT[etan]', lastWeek : '[aurreko] dddd LT[etan]', sameElse : 'L' }, relativeTime : { future : "%s barru", past : "duela %s", s : "segundo batzuk", m : "minutu bat", mm : "%d minutu", h : "ordu bat", hh : "%d ordu", d : "egun bat", dd : "%d egun", M : "hilabete bat", MM : "%d hilabete", y : "urte bat", yy : "%d urte" }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : Persian Language // author : Ebrahim Byagowi : https://github.com/ebraminio (function (factory) { factory(moment); }(function (moment) { var symbolMap = { '1': '۱', '2': '۲', '3': '۳', '4': '۴', '5': '۵', '6': '۶', '7': '۷', '8': '۸', '9': '۹', '0': '۰' }, numberMap = { '۱': '1', '۲': '2', '۳': '3', '۴': '4', '۵': '5', '۶': '6', '۷': '7', '۸': '8', '۹': '9', '۰': '0' }; moment.lang('fa', { months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'), longDateFormat : { LT : 'HH:mm', L : 'DD/MM/YYYY', LL : 'D MMMM YYYY', LLL : 'D MMMM YYYY LT', LLLL : 'dddd, D MMMM YYYY LT' }, meridiem : function (hour, minute, isLower) { if (hour < 12) { return "قبل از ظهر"; } else { return "بعد از ظهر"; } }, calendar : { sameDay : '[امروز ساعت] LT', nextDay : '[فردا ساعت] LT', nextWeek : 'dddd [ساعت] LT', lastDay : '[دیروز ساعت] LT', lastWeek : 'dddd [پیش] [ساعت] LT', sameElse : 'L' }, relativeTime : { future : 'در %s', past : '%s پیش', s : 'چندین ثانیه', m : 'یک دقیقه', mm : '%d دقیقه', h : 'یک ساعت', hh : '%d ساعت', d : 'یک روز', dd : '%d روز', M : 'یک ماه', MM : '%d ماه', y : 'یک سال', yy : '%d سال' }, preparse: function (string) { return string.replace(/[۰-۹]/g, function (match) { return numberMap[match]; }).replace(/،/g, ','); }, postformat: function (string) { return string.replace(/\d/g, function (match) { return symbolMap[match]; }).replace(/,/g, '،'); }, ordinal : '%dم', week : { dow : 6, // Saturday is the first day of the week. doy : 12 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : finnish (fi) // author : Tarmo Aidantausta : https://github.com/bleadof (function (factory) { factory(moment); }(function (moment) { var numbers_past = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '), numbers_future = ['nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden', numbers_past[7], numbers_past[8], numbers_past[9]]; function translate(number, withoutSuffix, key, isFuture) { var result = ""; switch (key) { case 's': return isFuture ? 'muutaman sekunnin' : 'muutama sekunti'; case 'm': return isFuture ? 'minuutin' : 'minuutti'; case 'mm': result = isFuture ? 'minuutin' : 'minuuttia'; break; case 'h': return isFuture ? 'tunnin' : 'tunti'; case 'hh': result = isFuture ? 'tunnin' : 'tuntia'; break; case 'd': return isFuture ? 'päivän' : 'päivä'; case 'dd': result = isFuture ? 'päivän' : 'päivää'; break; case 'M': return isFuture ? 'kuukauden' : 'kuukausi'; case 'MM': result = isFuture ? 'kuukauden' : 'kuukautta'; break; case 'y': return isFuture ? 'vuoden' : 'vuosi'; case 'yy': result = isFuture ? 'vuoden' : 'vuotta'; break; } result = verbal_number(number, isFuture) + " " + result; return result; } function verbal_number(number, isFuture) { return number < 10 ? (isFuture ? numbers_future[number] : numbers_past[number]) : number; } moment.lang('fi', { months : "tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"), monthsShort : "tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"), weekdays : "sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"), weekdaysShort : "su_ma_ti_ke_to_pe_la".split("_"), weekdaysMin : "su_ma_ti_ke_to_pe_la".split("_"), longDateFormat : { LT : "HH.mm", L : "DD.MM.YYYY", LL : "Do MMMM[ta] YYYY", LLL : "Do MMMM[ta] YYYY, [klo] LT", LLLL : "dddd, Do MMMM[ta] YYYY, [klo] LT", l : "D.M.YYYY", ll : "Do MMM YYYY", lll : "Do MMM YYYY, [klo] LT", llll : "ddd, Do MMM YYYY, [klo] LT" }, calendar : { sameDay : '[tänään] [klo] LT', nextDay : '[huomenna] [klo] LT', nextWeek : 'dddd [klo] LT', lastDay : '[eilen] [klo] LT', lastWeek : '[viime] dddd[na] [klo] LT', sameElse : 'L' }, relativeTime : { future : "%s päästä", past : "%s sitten", s : translate, m : translate, mm : translate, h : translate, hh : translate, d : translate, dd : translate, M : translate, MM : translate, y : translate, yy : translate }, ordinal : "%d.", week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : canadian french (fr-ca) // author : Jonathan Abourbih : https://github.com/jonbca (function (factory) { factory(moment); }(function (moment) { moment.lang('fr-ca', { months : "janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"), monthsShort : "janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"), weekdays : "dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"), weekdaysShort : "dim._lun._mar._mer._jeu._ven._sam.".split("_"), weekdaysMin : "Di_Lu_Ma_Me_Je_Ve_Sa".split("_"), longDateFormat : { LT : "HH:mm", L : "YYYY-MM-DD", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: "[Aujourd'hui à] LT", nextDay: '[Demain à] LT', nextWeek: 'dddd [à] LT', lastDay: '[Hier à] LT', lastWeek: 'dddd [dernier à] LT', sameElse: 'L' }, relativeTime : { future : "dans %s", past : "il y a %s", s : "quelques secondes", m : "une minute", mm : "%d minutes", h : "une heure", hh : "%d heures", d : "un jour", dd : "%d jours", M : "un mois", MM : "%d mois", y : "un an", yy : "%d ans" }, ordinal : function (number) { return number + (number === 1 ? 'er' : ''); } }); })); // moment.js language configuration // language : french (fr) // author : John Fischer : https://github.com/jfroffice (function (factory) { factory(moment); }(function (moment) { moment.lang('fr', { months : "janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"), monthsShort : "janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"), weekdays : "dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"), weekdaysShort : "dim._lun._mar._mer._jeu._ven._sam.".split("_"), weekdaysMin : "Di_Lu_Ma_Me_Je_Ve_Sa".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: "[Aujourd'hui à] LT", nextDay: '[Demain à] LT', nextWeek: 'dddd [à] LT', lastDay: '[Hier à] LT', lastWeek: 'dddd [dernier à] LT', sameElse: 'L' }, relativeTime : { future : "dans %s", past : "il y a %s", s : "quelques secondes", m : "une minute", mm : "%d minutes", h : "une heure", hh : "%d heures", d : "un jour", dd : "%d jours", M : "un mois", MM : "%d mois", y : "un an", yy : "%d ans" }, ordinal : function (number) { return number + (number === 1 ? 'er' : ''); }, week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : galician (gl) // author : Juan G. Hurtado : https://github.com/juanghurtado (function (factory) { factory(moment); }(function (moment) { moment.lang('gl', { months : "Xaneiro_Febreiro_Marzo_Abril_Maio_Xuño_Xullo_Agosto_Setembro_Outubro_Novembro_Decembro".split("_"), monthsShort : "Xan._Feb._Mar._Abr._Mai._Xuñ._Xul._Ago._Set._Out._Nov._Dec.".split("_"), weekdays : "Domingo_Luns_Martes_Mércores_Xoves_Venres_Sábado".split("_"), weekdaysShort : "Dom._Lun._Mar._Mér._Xov._Ven._Sáb.".split("_"), weekdaysMin : "Do_Lu_Ma_Mé_Xo_Ve_Sá".split("_"), longDateFormat : { LT : "H:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay : function () { return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; }, nextDay : function () { return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; }, nextWeek : function () { return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; }, lastDay : function () { return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT'; }, lastWeek : function () { return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; }, sameElse : 'L' }, relativeTime : { future : function (str) { if (str === "uns segundos") { return "nuns segundos"; } return "en " + str; }, past : "hai %s", s : "uns segundos", m : "un minuto", mm : "%d minutos", h : "unha hora", hh : "%d horas", d : "un día", dd : "%d días", M : "un mes", MM : "%d meses", y : "un ano", yy : "%d anos" }, ordinal : '%dº', week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : Hebrew (he) // author : Tomer Cohen : https://github.com/tomer // author : Moshe Simantov : https://github.com/DevelopmentIL // author : Tal Ater : https://github.com/TalAter (function (factory) { factory(moment); }(function (moment) { moment.lang('he', { months : "ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"), monthsShort : "ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"), weekdays : "ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"), weekdaysShort : "א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"), weekdaysMin : "א_ב_ג_ד_ה_ו_ש".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D [ב]MMMM YYYY", LLL : "D [ב]MMMM YYYY LT", LLLL : "dddd, D [ב]MMMM YYYY LT", l : "D/M/YYYY", ll : "D MMM YYYY", lll : "D MMM YYYY LT", llll : "ddd, D MMM YYYY LT" }, calendar : { sameDay : '[היום ב־]LT', nextDay : '[מחר ב־]LT', nextWeek : 'dddd [בשעה] LT', lastDay : '[אתמול ב־]LT', lastWeek : '[ביום] dddd [האחרון בשעה] LT', sameElse : 'L' }, relativeTime : { future : "בעוד %s", past : "לפני %s", s : "מספר שניות", m : "דקה", mm : "%d דקות", h : "שעה", hh : function (number) { if (number === 2) { return "שעתיים"; } return number + " שעות"; }, d : "יום", dd : function (number) { if (number === 2) { return "יומיים"; } return number + " ימים"; }, M : "חודש", MM : function (number) { if (number === 2) { return "חודשיים"; } return number + " חודשים"; }, y : "שנה", yy : function (number) { if (number === 2) { return "שנתיים"; } return number + " שנים"; } } }); })); // moment.js language configuration // language : hindi (hi) // author : Mayank Singhal : https://github.com/mayanksinghal (function (factory) { factory(moment); }(function (moment) { var symbolMap = { '1': '१', '2': '२', '3': '३', '4': '४', '5': '५', '6': '६', '7': '७', '8': '८', '9': '९', '0': '०' }, numberMap = { '१': '1', '२': '2', '३': '3', '४': '4', '५': '5', '६': '6', '७': '7', '८': '8', '९': '9', '०': '0' }; moment.lang('hi', { months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split("_"), monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split("_"), weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split("_"), weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split("_"), weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split("_"), longDateFormat : { LT : "A h:mm बजे", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY, LT", LLLL : "dddd, D MMMM YYYY, LT" }, calendar : { sameDay : '[आज] LT', nextDay : '[कल] LT', nextWeek : 'dddd, LT', lastDay : '[कल] LT', lastWeek : '[पिछले] dddd, LT', sameElse : 'L' }, relativeTime : { future : "%s में", past : "%s पहले", s : "कुछ ही क्षण", m : "एक मिनट", mm : "%d मिनट", h : "एक घंटा", hh : "%d घंटे", d : "एक दिन", dd : "%d दिन", M : "एक महीने", MM : "%d महीने", y : "एक वर्ष", yy : "%d वर्ष" }, preparse: function (string) { return string.replace(/[१२३४५६७८९०]/g, function (match) { return numberMap[match]; }); }, postformat: function (string) { return string.replace(/\d/g, function (match) { return symbolMap[match]; }); }, // Hindi notation for meridiems are quite fuzzy in practice. While there exists // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi. meridiem : function (hour, minute, isLower) { if (hour < 4) { return "रात"; } else if (hour < 10) { return "सुबह"; } else if (hour < 17) { return "दोपहर"; } else if (hour < 20) { return "शाम"; } else { return "रात"; } }, week : { dow : 0, // Sunday is the first day of the week. doy : 6 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : hrvatski (hr) // author : Bojan Marković : https://github.com/bmarkovic // based on (sl) translation by Robert Sedovšek (function (factory) { factory(moment); }(function (moment) { function translate(number, withoutSuffix, key) { var result = number + " "; switch (key) { case 'm': return withoutSuffix ? 'jedna minuta' : 'jedne minute'; case 'mm': if (number === 1) { result += 'minuta'; } else if (number === 2 || number === 3 || number === 4) { result += 'minute'; } else { result += 'minuta'; } return result; case 'h': return withoutSuffix ? 'jedan sat' : 'jednog sata'; case 'hh': if (number === 1) { result += 'sat'; } else if (number === 2 || number === 3 || number === 4) { result += 'sata'; } else { result += 'sati'; } return result; case 'dd': if (number === 1) { result += 'dan'; } else { result += 'dana'; } return result; case 'MM': if (number === 1) { result += 'mjesec'; } else if (number === 2 || number === 3 || number === 4) { result += 'mjeseca'; } else { result += 'mjeseci'; } return result; case 'yy': if (number === 1) { result += 'godina'; } else if (number === 2 || number === 3 || number === 4) { result += 'godine'; } else { result += 'godina'; } return result; } } moment.lang('hr', { months : "sječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_"), monthsShort : "sje._vel._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"), weekdays : "nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"), weekdaysShort : "ned._pon._uto._sri._čet._pet._sub.".split("_"), weekdaysMin : "ne_po_ut_sr_če_pe_su".split("_"), longDateFormat : { LT : "H:mm", L : "DD. MM. YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY LT", LLLL : "dddd, D. MMMM YYYY LT" }, calendar : { sameDay : '[danas u] LT', nextDay : '[sutra u] LT', nextWeek : function () { switch (this.day()) { case 0: return '[u] [nedjelju] [u] LT'; case 3: return '[u] [srijedu] [u] LT'; case 6: return '[u] [subotu] [u] LT'; case 1: case 2: case 4: case 5: return '[u] dddd [u] LT'; } }, lastDay : '[jučer u] LT', lastWeek : function () { switch (this.day()) { case 0: case 3: return '[prošlu] dddd [u] LT'; case 6: return '[prošle] [subote] [u] LT'; case 1: case 2: case 4: case 5: return '[prošli] dddd [u] LT'; } }, sameElse : 'L' }, relativeTime : { future : "za %s", past : "prije %s", s : "par sekundi", m : translate, mm : translate, h : translate, hh : translate, d : "dan", dd : translate, M : "mjesec", MM : translate, y : "godinu", yy : translate }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : hungarian (hu) // author : Adam Brunner : https://github.com/adambrunner (function (factory) { factory(moment); }(function (moment) { var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' '); function translate(number, withoutSuffix, key, isFuture) { var num = number, suffix; switch (key) { case 's': return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce'; case 'm': return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce'); case 'mm': return num + (isFuture || withoutSuffix ? ' perc' : ' perce'); case 'h': return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája'); case 'hh': return num + (isFuture || withoutSuffix ? ' óra' : ' órája'); case 'd': return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja'); case 'dd': return num + (isFuture || withoutSuffix ? ' nap' : ' napja'); case 'M': return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); case 'MM': return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); case 'y': return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve'); case 'yy': return num + (isFuture || withoutSuffix ? ' év' : ' éve'); } return ''; } function week(isFuture) { return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]'; } moment.lang('hu', { months : "január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"), monthsShort : "jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"), weekdays : "vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"), weekdaysShort : "v_h_k_sze_cs_p_szo".split("_"), longDateFormat : { LT : "H:mm", L : "YYYY.MM.DD.", LL : "YYYY. MMMM D.", LLL : "YYYY. MMMM D., LT", LLLL : "YYYY. MMMM D., dddd LT" }, calendar : { sameDay : '[ma] LT[-kor]', nextDay : '[holnap] LT[-kor]', nextWeek : function () { return week.call(this, true); }, lastDay : '[tegnap] LT[-kor]', lastWeek : function () { return week.call(this, false); }, sameElse : 'L' }, relativeTime : { future : "%s múlva", past : "%s", s : translate, m : translate, mm : translate, h : translate, hh : translate, d : translate, dd : translate, M : translate, MM : translate, y : translate, yy : translate }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : Bahasa Indonesia (id) // author : Mohammad Satrio Utomo : https://github.com/tyok // reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan (function (factory) { factory(moment); }(function (moment) { moment.lang('id', { months : "Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"), monthsShort : "Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"), weekdays : "Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"), weekdaysShort : "Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"), weekdaysMin : "Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"), longDateFormat : { LT : "HH.mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY [pukul] LT", LLLL : "dddd, D MMMM YYYY [pukul] LT" }, meridiem : function (hours, minutes, isLower) { if (hours < 11) { return 'pagi'; } else if (hours < 15) { return 'siang'; } else if (hours < 19) { return 'sore'; } else { return 'malam'; } }, calendar : { sameDay : '[Hari ini pukul] LT', nextDay : '[Besok pukul] LT', nextWeek : 'dddd [pukul] LT', lastDay : '[Kemarin pukul] LT', lastWeek : 'dddd [lalu pukul] LT', sameElse : 'L' }, relativeTime : { future : "dalam %s", past : "%s yang lalu", s : "beberapa detik", m : "semenit", mm : "%d menit", h : "sejam", hh : "%d jam", d : "sehari", dd : "%d hari", M : "sebulan", MM : "%d bulan", y : "setahun", yy : "%d tahun" }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : icelandic (is) // author : Hinrik Örn Sigurðsson : https://github.com/hinrik (function (factory) { factory(moment); }(function (moment) { function plural(n) { if (n % 100 === 11) { return true; } else if (n % 10 === 1) { return false; } return true; } function translate(number, withoutSuffix, key, isFuture) { var result = number + " "; switch (key) { case 's': return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum'; case 'm': return withoutSuffix ? 'mínúta' : 'mínútu'; case 'mm': if (plural(number)) { return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum'); } else if (withoutSuffix) { return result + 'mínúta'; } return result + 'mínútu'; case 'hh': if (plural(number)) { return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum'); } return result + 'klukkustund'; case 'd': if (withoutSuffix) { return 'dagur'; } return isFuture ? 'dag' : 'degi'; case 'dd': if (plural(number)) { if (withoutSuffix) { return result + 'dagar'; } return result + (isFuture ? 'daga' : 'dögum'); } else if (withoutSuffix) { return result + 'dagur'; } return result + (isFuture ? 'dag' : 'degi'); case 'M': if (withoutSuffix) { return 'mánuður'; } return isFuture ? 'mánuð' : 'mánuði'; case 'MM': if (plural(number)) { if (withoutSuffix) { return result + 'mánuðir'; } return result + (isFuture ? 'mánuði' : 'mánuðum'); } else if (withoutSuffix) { return result + 'mánuður'; } return result + (isFuture ? 'mánuð' : 'mánuði'); case 'y': return withoutSuffix || isFuture ? 'ár' : 'ári'; case 'yy': if (plural(number)) { return result + (withoutSuffix || isFuture ? 'ár' : 'árum'); } return result + (withoutSuffix || isFuture ? 'ár' : 'ári'); } } moment.lang('is', { months : "janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"), monthsShort : "jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"), weekdays : "sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"), weekdaysShort : "sun_mán_þri_mið_fim_fös_lau".split("_"), weekdaysMin : "Su_Má_Þr_Mi_Fi_Fö_La".split("_"), longDateFormat : { LT : "H:mm", L : "DD/MM/YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY [kl.] LT", LLLL : "dddd, D. MMMM YYYY [kl.] LT" }, calendar : { sameDay : '[í dag kl.] LT', nextDay : '[á morgun kl.] LT', nextWeek : 'dddd [kl.] LT', lastDay : '[í gær kl.] LT', lastWeek : '[síðasta] dddd [kl.] LT', sameElse : 'L' }, relativeTime : { future : "eftir %s", past : "fyrir %s síðan", s : translate, m : translate, mm : translate, h : "klukkustund", hh : translate, d : translate, dd : translate, M : translate, MM : translate, y : translate, yy : translate }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : italian (it) // author : Lorenzo : https://github.com/aliem // author: Mattia Larentis: https://github.com/nostalgiaz (function (factory) { factory(moment); }(function (moment) { moment.lang('it', { months : "Gennaio_Febbraio_Marzo_Aprile_Maggio_Giugno_Luglio_Agosto_Settembre_Ottobre_Novembre_Dicembre".split("_"), monthsShort : "Gen_Feb_Mar_Apr_Mag_Giu_Lug_Ago_Set_Ott_Nov_Dic".split("_"), weekdays : "Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato".split("_"), weekdaysShort : "Dom_Lun_Mar_Mer_Gio_Ven_Sab".split("_"), weekdaysMin : "D_L_Ma_Me_G_V_S".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendar : { sameDay: '[Oggi alle] LT', nextDay: '[Domani alle] LT', nextWeek: 'dddd [alle] LT', lastDay: '[Ieri alle] LT', lastWeek: '[lo scorso] dddd [alle] LT', sameElse: 'L' }, relativeTime : { future : function (s) { return ((/^[0-9].+$/).test(s) ? "tra" : "in") + " " + s; }, past : "%s fa", s : "secondi", m : "un minuto", mm : "%d minuti", h : "un'ora", hh : "%d ore", d : "un giorno", dd : "%d giorni", M : "un mese", MM : "%d mesi", y : "un anno", yy : "%d anni" }, ordinal: '%dº', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : japanese (ja) // author : LI Long : https://github.com/baryon (function (factory) { factory(moment); }(function (moment) { moment.lang('ja', { months : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), weekdays : "日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"), weekdaysShort : "日_月_火_水_木_金_土".split("_"), weekdaysMin : "日_月_火_水_木_金_土".split("_"), longDateFormat : { LT : "Ah時m分", L : "YYYY/MM/DD", LL : "YYYY年M月D日", LLL : "YYYY年M月D日LT", LLLL : "YYYY年M月D日LT dddd" }, meridiem : function (hour, minute, isLower) { if (hour < 12) { return "午前"; } else { return "午後"; } }, calendar : { sameDay : '[今日] LT', nextDay : '[明日] LT', nextWeek : '[来週]dddd LT', lastDay : '[昨日] LT', lastWeek : '[前週]dddd LT', sameElse : 'L' }, relativeTime : { future : "%s後", past : "%s前", s : "数秒", m : "1分", mm : "%d分", h : "1時間", hh : "%d時間", d : "1日", dd : "%d日", M : "1ヶ月", MM : "%dヶ月", y : "1年", yy : "%d年" } }); })); // moment.js language configuration // language : Georgian (ka) // author : Irakli Janiashvili : https://github.com/irakli-janiashvili (function (factory) { factory(moment); }(function (moment) { function monthsCaseReplace(m, format) { var months = { 'nominative': 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'), 'accusative': 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_') }, nounCase = (/D[oD] *MMMM?/).test(format) ? 'accusative' : 'nominative'; return months[nounCase][m.month()]; } function weekdaysCaseReplace(m, format) { var weekdays = { 'nominative': 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'), 'accusative': 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_') }, nounCase = (/(წინა|შემდეგ)/).test(format) ? 'accusative' : 'nominative'; return weekdays[nounCase][m.day()]; } moment.lang('ka', { months : monthsCaseReplace, monthsShort : "იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"), weekdays : weekdaysCaseReplace, weekdaysShort : "კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"), weekdaysMin : "კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"), longDateFormat : { LT : "h:mm A", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendar : { sameDay : '[დღეს] LT[-ზე]', nextDay : '[ხვალ] LT[-ზე]', lastDay : '[გუშინ] LT[-ზე]', nextWeek : '[შემდეგ] dddd LT[-ზე]', lastWeek : '[წინა] dddd LT-ზე', sameElse : 'L' }, relativeTime : { future : function (s) { return (/(წამი|წუთი|საათი|წელი)/).test(s) ? s.replace(/ი$/, "ში") : s + "ში"; }, past : function (s) { if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) { return s.replace(/(ი|ე)$/, "ის წინ"); } if ((/წელი/).test(s)) { return s.replace(/წელი$/, "წლის წინ"); } }, s : "რამდენიმე წამი", m : "წუთი", mm : "%d წუთი", h : "საათი", hh : "%d საათი", d : "დღე", dd : "%d დღე", M : "თვე", MM : "%d თვე", y : "წელი", yy : "%d წელი" }, ordinal : function (number) { if (number === 0) { return number; } if (number === 1) { return number + "-ლი"; } if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) { return "მე-" + number; } return number + "-ე"; }, week : { dow : 1, doy : 7 } }); })); // moment.js language configuration // language : korean (ko) // author : Kyungwook, Park : https://github.com/kyungw00k (function (factory) { factory(moment); }(function (moment) { moment.lang('ko', { months : "1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"), monthsShort : "1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"), weekdays : "일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"), weekdaysShort : "일_월_화_수_목_금_토".split("_"), weekdaysMin : "일_월_화_수_목_금_토".split("_"), longDateFormat : { LT : "A h시 mm분", L : "YYYY.MM.DD", LL : "YYYY년 MMMM D일", LLL : "YYYY년 MMMM D일 LT", LLLL : "YYYY년 MMMM D일 dddd LT" }, meridiem : function (hour, minute, isUpper) { return hour < 12 ? '오전' : '오후'; }, calendar : { sameDay : '오늘 LT', nextDay : '내일 LT', nextWeek : 'dddd LT', lastDay : '어제 LT', lastWeek : '지난주 dddd LT', sameElse : 'L' }, relativeTime : { future : "%s 후", past : "%s 전", s : "몇초", ss : "%d초", m : "일분", mm : "%d분", h : "한시간", hh : "%d시간", d : "하루", dd : "%d일", M : "한달", MM : "%d달", y : "일년", yy : "%d년" }, ordinal : '%d일' }); })); // moment.js language configuration // language : latvian (lv) // author : Kristaps Karlsons : https://github.com/skakri (function (factory) { factory(moment); }(function (moment) { var units = { 'mm': 'minūti_minūtes_minūte_minūtes', 'hh': 'stundu_stundas_stunda_stundas', 'dd': 'dienu_dienas_diena_dienas', 'MM': 'mēnesi_mēnešus_mēnesis_mēneši', 'yy': 'gadu_gadus_gads_gadi' }; function format(word, number, withoutSuffix) { var forms = word.split('_'); if (withoutSuffix) { return number % 10 === 1 && number !== 11 ? forms[2] : forms[3]; } else { return number % 10 === 1 && number !== 11 ? forms[0] : forms[1]; } } function relativeTimeWithPlural(number, withoutSuffix, key) { return number + ' ' + format(units[key], number, withoutSuffix); } moment.lang('lv', { months : "janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"), monthsShort : "jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"), weekdays : "svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"), weekdaysShort : "Sv_P_O_T_C_Pk_S".split("_"), weekdaysMin : "Sv_P_O_T_C_Pk_S".split("_"), longDateFormat : { LT : "HH:mm", L : "DD.MM.YYYY", LL : "YYYY. [gada] D. MMMM", LLL : "YYYY. [gada] D. MMMM, LT", LLLL : "YYYY. [gada] D. MMMM, dddd, LT" }, calendar : { sameDay : '[Šodien pulksten] LT', nextDay : '[Rīt pulksten] LT', nextWeek : 'dddd [pulksten] LT', lastDay : '[Vakar pulksten] LT', lastWeek : '[Pagājušā] dddd [pulksten] LT', sameElse : 'L' }, relativeTime : { future : "%s vēlāk", past : "%s agrāk", s : "dažas sekundes", m : "minūti", mm : relativeTimeWithPlural, h : "stundu", hh : relativeTimeWithPlural, d : "dienu", dd : relativeTimeWithPlural, M : "mēnesi", MM : relativeTimeWithPlural, y : "gadu", yy : relativeTimeWithPlural }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : malayalam (ml) // author : Floyd Pink : https://github.com/floydpink (function (factory) { factory(moment); }(function (moment) { moment.lang('ml', { months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split("_"), monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split("_"), weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split("_"), weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split("_"), weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split("_"), longDateFormat : { LT : "A h:mm -നു", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY, LT", LLLL : "dddd, D MMMM YYYY, LT" }, calendar : { sameDay : '[ഇന്ന്] LT', nextDay : '[നാളെ] LT', nextWeek : 'dddd, LT', lastDay : '[ഇന്നലെ] LT', lastWeek : '[കഴിഞ്ഞ] dddd, LT', sameElse : 'L' }, relativeTime : { future : "%s കഴിഞ്ഞ്", past : "%s മുൻപ്", s : "അൽപ നിമിഷങ്ങൾ", m : "ഒരു മിനിറ്റ്", mm : "%d മിനിറ്റ്", h : "ഒരു മണിക്കൂർ", hh : "%d മണിക്കൂർ", d : "ഒരു ദിവസം", dd : "%d ദിവസം", M : "ഒരു മാസം", MM : "%d മാസം", y : "ഒരു വർഷം", yy : "%d വർഷം" }, meridiem : function (hour, minute, isLower) { if (hour < 4) { return "രാത്രി"; } else if (hour < 12) { return "രാവിലെ"; } else if (hour < 17) { return "ഉച്ച കഴിഞ്ഞ്"; } else if (hour < 20) { return "വൈകുന്നേരം"; } else { return "രാത്രി"; } } }); })); // moment.js language configuration // language : Marathi (mr) // author : Harshad Kale : https://github.com/kalehv (function (factory) { factory(moment); }(function (moment) { var symbolMap = { '1': '१', '2': '२', '3': '३', '4': '४', '5': '५', '6': '६', '7': '७', '8': '८', '9': '९', '0': '०' }, numberMap = { '१': '1', '२': '2', '३': '3', '४': '4', '५': '5', '६': '6', '७': '7', '८': '8', '९': '9', '०': '0' }; moment.lang('mr', { months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split("_"), monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split("_"), weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split("_"), weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split("_"), weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split("_"), longDateFormat : { LT : "A h:mm वाजता", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY, LT", LLLL : "dddd, D MMMM YYYY, LT" }, calendar : { sameDay : '[आज] LT', nextDay : '[उद्या] LT', nextWeek : 'dddd, LT', lastDay : '[काल] LT', lastWeek: '[मागील] dddd, LT', sameElse : 'L' }, relativeTime : { future : "%s नंतर", past : "%s पूर्वी", s : "सेकंद", m: "एक मिनिट", mm: "%d मिनिटे", h : "एक तास", hh : "%d तास", d : "एक दिवस", dd : "%d दिवस", M : "एक महिना", MM : "%d महिने", y : "एक वर्ष", yy : "%d वर्षे" }, preparse: function (string) { return string.replace(/[१२३४५६७८९०]/g, function (match) { return numberMap[match]; }); }, postformat: function (string) { return string.replace(/\d/g, function (match) { return symbolMap[match]; }); }, meridiem: function (hour, minute, isLower) { if (hour < 4) { return "रात्री"; } else if (hour < 10) { return "सकाळी"; } else if (hour < 17) { return "दुपारी"; } else if (hour < 20) { return "सायंकाळी"; } else { return "रात्री"; } }, week : { dow : 0, // Sunday is the first day of the week. doy : 6 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : Bahasa Malaysia (ms-MY) // author : Weldan Jamili : https://github.com/weldan (function (factory) { factory(moment); }(function (moment) { moment.lang('ms-my', { months : "Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"), monthsShort : "Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"), weekdays : "Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"), weekdaysShort : "Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"), weekdaysMin : "Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"), longDateFormat : { LT : "HH.mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY [pukul] LT", LLLL : "dddd, D MMMM YYYY [pukul] LT" }, meridiem : function (hours, minutes, isLower) { if (hours < 11) { return 'pagi'; } else if (hours < 15) { return 'tengahari'; } else if (hours < 19) { return 'petang'; } else { return 'malam'; } }, calendar : { sameDay : '[Hari ini pukul] LT', nextDay : '[Esok pukul] LT', nextWeek : 'dddd [pukul] LT', lastDay : '[Kelmarin pukul] LT', lastWeek : 'dddd [lepas pukul] LT', sameElse : 'L' }, relativeTime : { future : "dalam %s", past : "%s yang lepas", s : "beberapa saat", m : "seminit", mm : "%d minit", h : "sejam", hh : "%d jam", d : "sehari", dd : "%d hari", M : "sebulan", MM : "%d bulan", y : "setahun", yy : "%d tahun" }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : norwegian bokmål (nb) // authors : Espen Hovlandsdal : https://github.com/rexxars // Sigurd Gartmann : https://github.com/sigurdga (function (factory) { factory(moment); }(function (moment) { moment.lang('nb', { months : "januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"), monthsShort : "jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"), weekdays : "søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"), weekdaysShort : "sø._ma._ti._on._to._fr._lø.".split("_"), weekdaysMin : "sø_ma_ti_on_to_fr_lø".split("_"), longDateFormat : { LT : "H.mm", L : "DD.MM.YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY [kl.] LT", LLLL : "dddd D. MMMM YYYY [kl.] LT" }, calendar : { sameDay: '[i dag kl.] LT', nextDay: '[i morgen kl.] LT', nextWeek: 'dddd [kl.] LT', lastDay: '[i går kl.] LT', lastWeek: '[forrige] dddd [kl.] LT', sameElse: 'L' }, relativeTime : { future : "om %s", past : "for %s siden", s : "noen sekunder", m : "ett minutt", mm : "%d minutter", h : "en time", hh : "%d timer", d : "en dag", dd : "%d dager", M : "en måned", MM : "%d måneder", y : "ett år", yy : "%d år" }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : nepali/nepalese // author : suvash : https://github.com/suvash (function (factory) { factory(moment); }(function (moment) { var symbolMap = { '1': '१', '2': '२', '3': '३', '4': '४', '5': '५', '6': '६', '7': '७', '8': '८', '9': '९', '0': '०' }, numberMap = { '१': '1', '२': '2', '३': '3', '४': '4', '५': '5', '६': '6', '७': '7', '८': '8', '९': '9', '०': '0' }; moment.lang('ne', { months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split("_"), monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split("_"), weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split("_"), weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split("_"), weekdaysMin : 'आइ._सो._मङ्_बु._बि._शु._श.'.split("_"), longDateFormat : { LT : "Aको h:mm बजे", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY, LT", LLLL : "dddd, D MMMM YYYY, LT" }, preparse: function (string) { return string.replace(/[१२३४५६७८९०]/g, function (match) { return numberMap[match]; }); }, postformat: function (string) { return string.replace(/\d/g, function (match) { return symbolMap[match]; }); }, meridiem : function (hour, minute, isLower) { if (hour < 3) { return "राती"; } else if (hour < 10) { return "बिहान"; } else if (hour < 15) { return "दिउँसो"; } else if (hour < 18) { return "बेलुका"; } else if (hour < 20) { return "साँझ"; } else { return "राती"; } }, calendar : { sameDay : '[आज] LT', nextDay : '[भोली] LT', nextWeek : '[आउँदो] dddd[,] LT', lastDay : '[हिजो] LT', lastWeek : '[गएको] dddd[,] LT', sameElse : 'L' }, relativeTime : { future : "%sमा", past : "%s अगाडी", s : "केही समय", m : "एक मिनेट", mm : "%d मिनेट", h : "एक घण्टा", hh : "%d घण्टा", d : "एक दिन", dd : "%d दिन", M : "एक महिना", MM : "%d महिना", y : "एक बर्ष", yy : "%d बर्ष" }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : dutch (nl) // author : Joris Röling : https://github.com/jjupiter (function (factory) { factory(moment); }(function (moment) { var monthsShortWithDots = "jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"), monthsShortWithoutDots = "jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"); moment.lang('nl', { months : "januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"), monthsShort : function (m, format) { if (/-MMM-/.test(format)) { return monthsShortWithoutDots[m.month()]; } else { return monthsShortWithDots[m.month()]; } }, weekdays : "zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"), weekdaysShort : "zo._ma._di._wo._do._vr._za.".split("_"), weekdaysMin : "Zo_Ma_Di_Wo_Do_Vr_Za".split("_"), longDateFormat : { LT : "HH:mm", L : "DD-MM-YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: '[Vandaag om] LT', nextDay: '[Morgen om] LT', nextWeek: 'dddd [om] LT', lastDay: '[Gisteren om] LT', lastWeek: '[afgelopen] dddd [om] LT', sameElse: 'L' }, relativeTime : { future : "over %s", past : "%s geleden", s : "een paar seconden", m : "één minuut", mm : "%d minuten", h : "één uur", hh : "%d uur", d : "één dag", dd : "%d dagen", M : "één maand", MM : "%d maanden", y : "één jaar", yy : "%d jaar" }, ordinal : function (number) { return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); }, week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : norwegian nynorsk (nn) // author : https://github.com/mechuwind (function (factory) { factory(moment); }(function (moment) { moment.lang('nn', { months : "januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"), monthsShort : "jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"), weekdays : "sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"), weekdaysShort : "sun_mån_tys_ons_tor_fre_lau".split("_"), weekdaysMin : "su_må_ty_on_to_fr_lø".split("_"), longDateFormat : { LT : "HH:mm", L : "DD.MM.YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: '[I dag klokka] LT', nextDay: '[I morgon klokka] LT', nextWeek: 'dddd [klokka] LT', lastDay: '[I går klokka] LT', lastWeek: '[Føregående] dddd [klokka] LT', sameElse: 'L' }, relativeTime : { future : "om %s", past : "for %s siden", s : "noen sekund", m : "ett minutt", mm : "%d minutt", h : "en time", hh : "%d timar", d : "en dag", dd : "%d dagar", M : "en månad", MM : "%d månader", y : "ett år", yy : "%d år" }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : polish (pl) // author : Rafal Hirsz : https://github.com/evoL (function (factory) { factory(moment); }(function (moment) { var monthsNominative = "styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"), monthsSubjective = "stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_"); function plural(n) { return (n % 10 < 5) && (n % 10 > 1) && (~~(n / 10) !== 1); } function translate(number, withoutSuffix, key) { var result = number + " "; switch (key) { case 'm': return withoutSuffix ? 'minuta' : 'minutę'; case 'mm': return result + (plural(number) ? 'minuty' : 'minut'); case 'h': return withoutSuffix ? 'godzina' : 'godzinę'; case 'hh': return result + (plural(number) ? 'godziny' : 'godzin'); case 'MM': return result + (plural(number) ? 'miesiące' : 'miesięcy'); case 'yy': return result + (plural(number) ? 'lata' : 'lat'); } } moment.lang('pl', { months : function (momentToFormat, format) { if (/D MMMM/.test(format)) { return monthsSubjective[momentToFormat.month()]; } else { return monthsNominative[momentToFormat.month()]; } }, monthsShort : "sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"), weekdays : "niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"), weekdaysShort : "nie_pon_wt_śr_czw_pt_sb".split("_"), weekdaysMin : "N_Pn_Wt_Śr_Cz_Pt_So".split("_"), longDateFormat : { LT : "HH:mm", L : "DD.MM.YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendar : { sameDay: '[Dziś o] LT', nextDay: '[Jutro o] LT', nextWeek: '[W] dddd [o] LT', lastDay: '[Wczoraj o] LT', lastWeek: function () { switch (this.day()) { case 0: return '[W zeszłą niedzielę o] LT'; case 3: return '[W zeszłą środę o] LT'; case 6: return '[W zeszłą sobotę o] LT'; default: return '[W zeszły] dddd [o] LT'; } }, sameElse: 'L' }, relativeTime : { future : "za %s", past : "%s temu", s : "kilka sekund", m : translate, mm : translate, h : translate, hh : translate, d : "1 dzień", dd : '%d dni', M : "miesiąc", MM : translate, y : "rok", yy : translate }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : brazilian portuguese (pt-br) // author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira (function (factory) { factory(moment); }(function (moment) { moment.lang('pt-br', { months : "Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"), monthsShort : "Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"), weekdays : "Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"), weekdaysShort : "Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"), weekdaysMin : "Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D [de] MMMM [de] YYYY", LLL : "D [de] MMMM [de] YYYY LT", LLLL : "dddd, D [de] MMMM [de] YYYY LT" }, calendar : { sameDay: '[Hoje às] LT', nextDay: '[Amanhã às] LT', nextWeek: 'dddd [às] LT', lastDay: '[Ontem às] LT', lastWeek: function () { return (this.day() === 0 || this.day() === 6) ? '[Último] dddd [às] LT' : // Saturday + Sunday '[Última] dddd [às] LT'; // Monday - Friday }, sameElse: 'L' }, relativeTime : { future : "em %s", past : "%s atrás", s : "segundos", m : "um minuto", mm : "%d minutos", h : "uma hora", hh : "%d horas", d : "um dia", dd : "%d dias", M : "um mês", MM : "%d meses", y : "um ano", yy : "%d anos" }, ordinal : '%dº' }); })); // moment.js language configuration // language : portuguese (pt) // author : Jefferson : https://github.com/jalex79 (function (factory) { factory(moment); }(function (moment) { moment.lang('pt', { months : "Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"), monthsShort : "Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"), weekdays : "Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"), weekdaysShort : "Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"), weekdaysMin : "Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D [de] MMMM [de] YYYY", LLL : "D [de] MMMM [de] YYYY LT", LLLL : "dddd, D [de] MMMM [de] YYYY LT" }, calendar : { sameDay: '[Hoje às] LT', nextDay: '[Amanhã às] LT', nextWeek: 'dddd [às] LT', lastDay: '[Ontem às] LT', lastWeek: function () { return (this.day() === 0 || this.day() === 6) ? '[Último] dddd [às] LT' : // Saturday + Sunday '[Última] dddd [às] LT'; // Monday - Friday }, sameElse: 'L' }, relativeTime : { future : "em %s", past : "%s atrás", s : "segundos", m : "um minuto", mm : "%d minutos", h : "uma hora", hh : "%d horas", d : "um dia", dd : "%d dias", M : "um mês", MM : "%d meses", y : "um ano", yy : "%d anos" }, ordinal : '%dº', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : romanian (ro) // author : Vlad Gurdiga : https://github.com/gurdiga // author : Valentin Agachi : https://github.com/avaly (function (factory) { factory(moment); }(function (moment) { moment.lang('ro', { months : "Ianuarie_Februarie_Martie_Aprilie_Mai_Iunie_Iulie_August_Septembrie_Octombrie_Noiembrie_Decembrie".split("_"), monthsShort : "Ian_Feb_Mar_Apr_Mai_Iun_Iul_Aug_Sep_Oct_Noi_Dec".split("_"), weekdays : "Duminică_Luni_Marţi_Miercuri_Joi_Vineri_Sâmbătă".split("_"), weekdaysShort : "Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"), weekdaysMin : "Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"), longDateFormat : { LT : "H:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY H:mm", LLLL : "dddd, D MMMM YYYY H:mm" }, calendar : { sameDay: "[azi la] LT", nextDay: '[mâine la] LT', nextWeek: 'dddd [la] LT', lastDay: '[ieri la] LT', lastWeek: '[fosta] dddd [la] LT', sameElse: 'L' }, relativeTime : { future : "peste %s", past : "%s în urmă", s : "câteva secunde", m : "un minut", mm : "%d minute", h : "o oră", hh : "%d ore", d : "o zi", dd : "%d zile", M : "o lună", MM : "%d luni", y : "un an", yy : "%d ani" }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : russian (ru) // author : Viktorminator : https://github.com/Viktorminator // Author : Menelion Elensúle : https://github.com/Oire (function (factory) { factory(moment); }(function (moment) { function plural(word, num) { var forms = word.split('_'); return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); } function relativeTimeWithPlural(number, withoutSuffix, key) { var format = { 'mm': 'минута_минуты_минут', 'hh': 'час_часа_часов', 'dd': 'день_дня_дней', 'MM': 'месяц_месяца_месяцев', 'yy': 'год_года_лет' }; if (key === 'm') { return withoutSuffix ? 'минута' : 'минуту'; } else { return number + ' ' + plural(format[key], +number); } } function monthsCaseReplace(m, format) { var months = { 'nominative': 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'), 'accusative': 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_') }, nounCase = (/D[oD]? *MMMM?/).test(format) ? 'accusative' : 'nominative'; return months[nounCase][m.month()]; } function monthsShortCaseReplace(m, format) { var monthsShort = { 'nominative': 'янв_фев_мар_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'), 'accusative': 'янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек'.split('_') }, nounCase = (/D[oD]? *MMMM?/).test(format) ? 'accusative' : 'nominative'; return monthsShort[nounCase][m.month()]; } function weekdaysCaseReplace(m, format) { var weekdays = { 'nominative': 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'), 'accusative': 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_') }, nounCase = (/\[ ?[Вв] ?(?:прошлую|следующую)? ?\] ?dddd/).test(format) ? 'accusative' : 'nominative'; return weekdays[nounCase][m.day()]; } moment.lang('ru', { months : monthsCaseReplace, monthsShort : monthsShortCaseReplace, weekdays : weekdaysCaseReplace, weekdaysShort : "вск_пнд_втр_срд_чтв_птн_сбт".split("_"), weekdaysMin : "вс_пн_вт_ср_чт_пт_сб".split("_"), longDateFormat : { LT : "HH:mm", L : "DD.MM.YYYY", LL : "D MMMM YYYY г.", LLL : "D MMMM YYYY г., LT", LLLL : "dddd, D MMMM YYYY г., LT" }, calendar : { sameDay: '[Сегодня в] LT', nextDay: '[Завтра в] LT', lastDay: '[Вчера в] LT', nextWeek: function () { return this.day() === 2 ? '[Во] dddd [в] LT' : '[В] dddd [в] LT'; }, lastWeek: function () { switch (this.day()) { case 0: return '[В прошлое] dddd [в] LT'; case 1: case 2: case 4: return '[В прошлый] dddd [в] LT'; case 3: case 5: case 6: return '[В прошлую] dddd [в] LT'; } }, sameElse: 'L' }, relativeTime : { future : "через %s", past : "%s назад", s : "несколько секунд", m : relativeTimeWithPlural, mm : relativeTimeWithPlural, h : "час", hh : relativeTimeWithPlural, d : "день", dd : relativeTimeWithPlural, M : "месяц", MM : relativeTimeWithPlural, y : "год", yy : relativeTimeWithPlural }, ordinal: function (number, period) { switch (period) { case 'M': case 'd': case 'DDD': return number + '-й'; case 'D': return number + '-го'; case 'w': case 'W': return number + '-я'; default: return number; } }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : slovak (sk) // author : Martin Minka : https://github.com/k2s // based on work of petrbela : https://github.com/petrbela (function (factory) { factory(moment); }(function (moment) { var months = "január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"), monthsShort = "jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_"); function plural(n) { return (n > 1) && (n < 5); } function translate(number, withoutSuffix, key, isFuture) { var result = number + " "; switch (key) { case 's': // a few seconds / in a few seconds / a few seconds ago return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami'; case 'm': // a minute / in a minute / a minute ago return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou'); case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'minúty' : 'minút'); } else { return result + 'minútami'; } break; case 'h': // an hour / in an hour / an hour ago return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou'); case 'hh': // 9 hours / in 9 hours / 9 hours ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'hodiny' : 'hodín'); } else { return result + 'hodinami'; } break; case 'd': // a day / in a day / a day ago return (withoutSuffix || isFuture) ? 'deň' : 'dňom'; case 'dd': // 9 days / in 9 days / 9 days ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'dni' : 'dní'); } else { return result + 'dňami'; } break; case 'M': // a month / in a month / a month ago return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom'; case 'MM': // 9 months / in 9 months / 9 months ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'mesiace' : 'mesiacov'); } else { return result + 'mesiacmi'; } break; case 'y': // a year / in a year / a year ago return (withoutSuffix || isFuture) ? 'rok' : 'rokom'; case 'yy': // 9 years / in 9 years / 9 years ago if (withoutSuffix || isFuture) { return result + (plural(number) ? 'roky' : 'rokov'); } else { return result + 'rokmi'; } break; } } moment.lang('sk', { months : months, monthsShort : monthsShort, monthsParse : (function (months, monthsShort) { var i, _monthsParse = []; for (i = 0; i < 12; i++) { // use custom parser to solve problem with July (červenec) _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i'); } return _monthsParse; }(months, monthsShort)), weekdays : "nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"), weekdaysShort : "ne_po_ut_st_št_pi_so".split("_"), weekdaysMin : "ne_po_ut_st_št_pi_so".split("_"), longDateFormat : { LT: "H:mm", L : "DD.MM.YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY LT", LLLL : "dddd D. MMMM YYYY LT" }, calendar : { sameDay: "[dnes o] LT", nextDay: '[zajtra o] LT', nextWeek: function () { switch (this.day()) { case 0: return '[v nedeľu o] LT'; case 1: case 2: return '[v] dddd [o] LT'; case 3: return '[v stredu o] LT'; case 4: return '[vo štvrtok o] LT'; case 5: return '[v piatok o] LT'; case 6: return '[v sobotu o] LT'; } }, lastDay: '[včera o] LT', lastWeek: function () { switch (this.day()) { case 0: return '[minulú nedeľu o] LT'; case 1: case 2: return '[minulý] dddd [o] LT'; case 3: return '[minulú stredu o] LT'; case 4: case 5: return '[minulý] dddd [o] LT'; case 6: return '[minulú sobotu o] LT'; } }, sameElse: "L" }, relativeTime : { future : "za %s", past : "pred %s", s : translate, m : translate, mm : translate, h : translate, hh : translate, d : translate, dd : translate, M : translate, MM : translate, y : translate, yy : translate }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : slovenian (sl) // author : Robert Sedovšek : https://github.com/sedovsek (function (factory) { factory(moment); }(function (moment) { function translate(number, withoutSuffix, key) { var result = number + " "; switch (key) { case 'm': return withoutSuffix ? 'ena minuta' : 'eno minuto'; case 'mm': if (number === 1) { result += 'minuta'; } else if (number === 2) { result += 'minuti'; } else if (number === 3 || number === 4) { result += 'minute'; } else { result += 'minut'; } return result; case 'h': return withoutSuffix ? 'ena ura' : 'eno uro'; case 'hh': if (number === 1) { result += 'ura'; } else if (number === 2) { result += 'uri'; } else if (number === 3 || number === 4) { result += 'ure'; } else { result += 'ur'; } return result; case 'dd': if (number === 1) { result += 'dan'; } else { result += 'dni'; } return result; case 'MM': if (number === 1) { result += 'mesec'; } else if (number === 2) { result += 'meseca'; } else if (number === 3 || number === 4) { result += 'mesece'; } else { result += 'mesecev'; } return result; case 'yy': if (number === 1) { result += 'leto'; } else if (number === 2) { result += 'leti'; } else if (number === 3 || number === 4) { result += 'leta'; } else { result += 'let'; } return result; } } moment.lang('sl', { months : "januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"), monthsShort : "jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"), weekdays : "nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"), weekdaysShort : "ned._pon._tor._sre._čet._pet._sob.".split("_"), weekdaysMin : "ne_po_to_sr_če_pe_so".split("_"), longDateFormat : { LT : "H:mm", L : "DD. MM. YYYY", LL : "D. MMMM YYYY", LLL : "D. MMMM YYYY LT", LLLL : "dddd, D. MMMM YYYY LT" }, calendar : { sameDay : '[danes ob] LT', nextDay : '[jutri ob] LT', nextWeek : function () { switch (this.day()) { case 0: return '[v] [nedeljo] [ob] LT'; case 3: return '[v] [sredo] [ob] LT'; case 6: return '[v] [soboto] [ob] LT'; case 1: case 2: case 4: case 5: return '[v] dddd [ob] LT'; } }, lastDay : '[včeraj ob] LT', lastWeek : function () { switch (this.day()) { case 0: case 3: case 6: return '[prejšnja] dddd [ob] LT'; case 1: case 2: case 4: case 5: return '[prejšnji] dddd [ob] LT'; } }, sameElse : 'L' }, relativeTime : { future : "čez %s", past : "%s nazaj", s : "nekaj sekund", m : translate, mm : translate, h : translate, hh : translate, d : "en dan", dd : translate, M : "en mesec", MM : translate, y : "eno leto", yy : translate }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : Albanian (sq) // author : Flakërim Ismani : https://github.com/flakerimi // author: Menelion Elensúle: https://github.com/Oire (tests) (function (factory) { factory(moment); }(function (moment) { moment.lang('sq', { months : "Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"), monthsShort : "Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"), weekdays : "E Diel_E Hënë_E Marte_E Mërkure_E Enjte_E Premte_E Shtunë".split("_"), weekdaysShort : "Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"), weekdaysMin : "D_H_Ma_Më_E_P_Sh".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendar : { sameDay : '[Sot në] LT', nextDay : '[Neser në] LT', nextWeek : 'dddd [në] LT', lastDay : '[Dje në] LT', lastWeek : 'dddd [e kaluar në] LT', sameElse : 'L' }, relativeTime : { future : "në %s", past : "%s me parë", s : "disa seconda", m : "një minut", mm : "%d minutea", h : "një orë", hh : "%d orë", d : "një ditë", dd : "%d ditë", M : "një muaj", MM : "%d muaj", y : "një vit", yy : "%d vite" }, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : swedish (sv) // author : Jens Alm : https://github.com/ulmus (function (factory) { factory(moment); }(function (moment) { moment.lang('sv', { months : "januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"), monthsShort : "jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"), weekdays : "söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"), weekdaysShort : "sön_mån_tis_ons_tor_fre_lör".split("_"), weekdaysMin : "sö_må_ti_on_to_fr_lö".split("_"), longDateFormat : { LT : "HH:mm", L : "YYYY-MM-DD", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: '[Idag] LT', nextDay: '[Imorgon] LT', lastDay: '[Igår] LT', nextWeek: 'dddd LT', lastWeek: '[Förra] dddd[en] LT', sameElse: 'L' }, relativeTime : { future : "om %s", past : "för %s sedan", s : "några sekunder", m : "en minut", mm : "%d minuter", h : "en timme", hh : "%d timmar", d : "en dag", dd : "%d dagar", M : "en månad", MM : "%d månader", y : "ett år", yy : "%d år" }, ordinal : function (number) { var b = number % 10, output = (~~ (number % 100 / 10) === 1) ? 'e' : (b === 1) ? 'a' : (b === 2) ? 'a' : (b === 3) ? 'e' : 'e'; return number + output; }, week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } }); })); // moment.js language configuration // language : thai (th) // author : Kridsada Thanabulpong : https://github.com/sirn (function (factory) { factory(moment); }(function (moment) { moment.lang('th', { months : "มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"), monthsShort : "มกรา_กุมภา_มีนา_เมษา_พฤษภา_มิถุนา_กรกฎา_สิงหา_กันยา_ตุลา_พฤศจิกา_ธันวา".split("_"), weekdays : "อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"), weekdaysShort : "อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"), // yes, three characters difference weekdaysMin : "อา._จ._อ._พ._พฤ._ศ._ส.".split("_"), longDateFormat : { LT : "H นาฬิกา m นาที", L : "YYYY/MM/DD", LL : "D MMMM YYYY", LLL : "D MMMM YYYY เวลา LT", LLLL : "วันddddที่ D MMMM YYYY เวลา LT" }, meridiem : function (hour, minute, isLower) { if (hour < 12) { return "ก่อนเที่ยง"; } else { return "หลังเที่ยง"; } }, calendar : { sameDay : '[วันนี้ เวลา] LT', nextDay : '[พรุ่งนี้ เวลา] LT', nextWeek : 'dddd[หน้า เวลา] LT', lastDay : '[เมื่อวานนี้ เวลา] LT', lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT', sameElse : 'L' }, relativeTime : { future : "อีก %s", past : "%sที่แล้ว", s : "ไม่กี่วินาที", m : "1 นาที", mm : "%d นาที", h : "1 ชั่วโมง", hh : "%d ชั่วโมง", d : "1 วัน", dd : "%d วัน", M : "1 เดือน", MM : "%d เดือน", y : "1 ปี", yy : "%d ปี" } }); })); // moment.js language configuration // language : turkish (tr) // authors : Erhan Gundogan : https://github.com/erhangundogan, // Burak Yiğit Kaya: https://github.com/BYK (function (factory) { factory(moment); }(function (moment) { var suffixes = { 1: "'inci", 5: "'inci", 8: "'inci", 70: "'inci", 80: "'inci", 2: "'nci", 7: "'nci", 20: "'nci", 50: "'nci", 3: "'üncü", 4: "'üncü", 100: "'üncü", 6: "'ncı", 9: "'uncu", 10: "'uncu", 30: "'uncu", 60: "'ıncı", 90: "'ıncı" }; moment.lang('tr', { months : "Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"), monthsShort : "Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"), weekdays : "Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"), weekdaysShort : "Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"), weekdaysMin : "Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"), longDateFormat : { LT : "HH:mm", L : "DD.MM.YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd, D MMMM YYYY LT" }, calendar : { sameDay : '[bugün saat] LT', nextDay : '[yarın saat] LT', nextWeek : '[haftaya] dddd [saat] LT', lastDay : '[dün] LT', lastWeek : '[geçen hafta] dddd [saat] LT', sameElse : 'L' }, relativeTime : { future : "%s sonra", past : "%s önce", s : "birkaç saniye", m : "bir dakika", mm : "%d dakika", h : "bir saat", hh : "%d saat", d : "bir gün", dd : "%d gün", M : "bir ay", MM : "%d ay", y : "bir yıl", yy : "%d yıl" }, ordinal : function (number) { if (number === 0) { // special case for zero return number + "'ıncı"; } var a = number % 10, b = number % 100 - a, c = number >= 100 ? 100 : null; return number + (suffixes[a] || suffixes[b] || suffixes[c]); }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : Morocco Central Atlas Tamaziɣt in Latin (tzm-la) // author : Abdel Said : https://github.com/abdelsaid (function (factory) { factory(moment); }(function (moment) { moment.lang('tzm-la', { months : "innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"), monthsShort : "innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"), weekdays : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"), weekdaysShort : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"), weekdaysMin : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: "[asdkh g] LT", nextDay: '[aska g] LT', nextWeek: 'dddd [g] LT', lastDay: '[assant g] LT', lastWeek: 'dddd [g] LT', sameElse: 'L' }, relativeTime : { future : "dadkh s yan %s", past : "yan %s", s : "imik", m : "minuḍ", mm : "%d minuḍ", h : "saɛa", hh : "%d tassaɛin", d : "ass", dd : "%d ossan", M : "ayowr", MM : "%d iyyirn", y : "asgas", yy : "%d isgasn" }, week : { dow : 6, // Saturday is the first day of the week. doy : 12 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : Morocco Central Atlas Tamaziɣt (tzm) // author : Abdel Said : https://github.com/abdelsaid (function (factory) { factory(moment); }(function (moment) { moment.lang('tzm', { months : "ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"), monthsShort : "ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"), weekdays : "ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"), weekdaysShort : "ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"), weekdaysMin : "ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"), longDateFormat : { LT : "HH:mm", L : "DD/MM/YYYY", LL : "D MMMM YYYY", LLL : "D MMMM YYYY LT", LLLL : "dddd D MMMM YYYY LT" }, calendar : { sameDay: "[ⴰⵙⴷⵅ ⴴ] LT", nextDay: '[ⴰⵙⴽⴰ ⴴ] LT', nextWeek: 'dddd [ⴴ] LT', lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT', lastWeek: 'dddd [ⴴ] LT', sameElse: 'L' }, relativeTime : { future : "ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s", past : "ⵢⴰⵏ %s", s : "ⵉⵎⵉⴽ", m : "ⵎⵉⵏⵓⴺ", mm : "%d ⵎⵉⵏⵓⴺ", h : "ⵙⴰⵄⴰ", hh : "%d ⵜⴰⵙⵙⴰⵄⵉⵏ", d : "ⴰⵙⵙ", dd : "%d oⵙⵙⴰⵏ", M : "ⴰⵢoⵓⵔ", MM : "%d ⵉⵢⵢⵉⵔⵏ", y : "ⴰⵙⴳⴰⵙ", yy : "%d ⵉⵙⴳⴰⵙⵏ" }, week : { dow : 6, // Saturday is the first day of the week. doy : 12 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : ukrainian (uk) // author : zemlanin : https://github.com/zemlanin // Author : Menelion Elensúle : https://github.com/Oire (function (factory) { factory(moment); }(function (moment) { function plural(word, num) { var forms = word.split('_'); return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); } function relativeTimeWithPlural(number, withoutSuffix, key) { var format = { 'mm': 'хвилина_хвилини_хвилин', 'hh': 'година_години_годин', 'dd': 'день_дні_днів', 'MM': 'місяць_місяці_місяців', 'yy': 'рік_роки_років' }; if (key === 'm') { return withoutSuffix ? 'хвилина' : 'хвилину'; } else if (key === 'h') { return withoutSuffix ? 'година' : 'годину'; } else { return number + ' ' + plural(format[key], +number); } } function monthsCaseReplace(m, format) { var months = { 'nominative': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_'), 'accusative': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_') }, nounCase = (/D[oD]? *MMMM?/).test(format) ? 'accusative' : 'nominative'; return months[nounCase][m.month()]; } function weekdaysCaseReplace(m, format) { var weekdays = { 'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'), 'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'), 'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_') }, nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ? 'accusative' : ((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ? 'genitive' : 'nominative'); return weekdays[nounCase][m.day()]; } function processHoursFunction(str) { return function () { return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT'; }; } moment.lang('uk', { months : monthsCaseReplace, monthsShort : "січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"), weekdays : weekdaysCaseReplace, weekdaysShort : "нед_пон_вів_сер_чет_п’ят_суб".split("_"), weekdaysMin : "нд_пн_вт_ср_чт_пт_сб".split("_"), longDateFormat : { LT : "HH:mm", L : "DD.MM.YYYY", LL : "D MMMM YYYY р.", LLL : "D MMMM YYYY р., LT", LLLL : "dddd, D MMMM YYYY р., LT" }, calendar : { sameDay: processHoursFunction('[Сьогодні '), nextDay: processHoursFunction('[Завтра '), lastDay: processHoursFunction('[Вчора '), nextWeek: processHoursFunction('[У] dddd ['), lastWeek: function () { switch (this.day()) { case 0: case 3: case 5: case 6: return processHoursFunction('[Минулої] dddd [').call(this); case 1: case 2: case 4: return processHoursFunction('[Минулого] dddd [').call(this); } }, sameElse: 'L' }, relativeTime : { future : "за %s", past : "%s тому", s : "декілька секунд", m : relativeTimeWithPlural, mm : relativeTimeWithPlural, h : "годину", hh : relativeTimeWithPlural, d : "день", dd : relativeTimeWithPlural, M : "місяць", MM : relativeTimeWithPlural, y : "рік", yy : relativeTimeWithPlural }, ordinal: function (number, period) { switch (period) { case 'M': case 'd': case 'DDD': case 'w': case 'W': return number + '-й'; case 'D': return number + '-го'; default: return number; } }, week : { dow : 1, // Monday is the first day of the week. doy : 7 // The week that contains Jan 1st is the first week of the year. } }); })); // moment.js language configuration // language : chinese // author : suupic : https://github.com/suupic (function (factory) { factory(moment); }(function (moment) { moment.lang('zh-cn', { months : "一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"), monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), weekdays : "星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"), weekdaysShort : "周日_周一_周二_周三_周四_周五_周六".split("_"), weekdaysMin : "日_一_二_三_四_五_六".split("_"), longDateFormat : { LT : "Ah点mm", L : "YYYY年MMMD日", LL : "YYYY年MMMD日", LLL : "YYYY年MMMD日LT", LLLL : "YYYY年MMMD日ddddLT", l : "YYYY年MMMD日", ll : "YYYY年MMMD日", lll : "YYYY年MMMD日LT", llll : "YYYY年MMMD日ddddLT" }, meridiem : function (hour, minute, isLower) { if (hour < 9) { return "早上"; } else if (hour < 11 && minute < 30) { return "上午"; } else if (hour < 13 && minute < 30) { return "中午"; } else if (hour < 18) { return "下午"; } else { return "晚上"; } }, calendar : { sameDay : '[今天]LT', nextDay : '[明天]LT', nextWeek : '[下]ddddLT', lastDay : '[昨天]LT', lastWeek : '[上]ddddLT', sameElse : 'L' }, ordinal : function (number, period) { switch (period) { case "d" : case "D" : case "DDD" : return number + "日"; case "M" : return number + "月"; case "w" : case "W" : return number + "周"; default : return number; } }, relativeTime : { future : "%s内", past : "%s前", s : "几秒", m : "1分钟", mm : "%d分钟", h : "1小时", hh : "%d小时", d : "1天", dd : "%d天", M : "1个月", MM : "%d个月", y : "1年", yy : "%d年" } }); })); // moment.js language configuration // language : traditional chinese (zh-tw) // author : Ben : https://github.com/ben-lin (function (factory) { factory(moment); }(function (moment) { moment.lang('zh-tw', { months : "一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"), monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), weekdays : "星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"), weekdaysShort : "週日_週一_週二_週三_週四_週五_週六".split("_"), weekdaysMin : "日_一_二_三_四_五_六".split("_"), longDateFormat : { LT : "Ah點mm", L : "YYYY年MMMD日", LL : "YYYY年MMMD日", LLL : "YYYY年MMMD日LT", LLLL : "YYYY年MMMD日ddddLT", l : "YYYY年MMMD日", ll : "YYYY年MMMD日", lll : "YYYY年MMMD日LT", llll : "YYYY年MMMD日ddddLT" }, meridiem : function (hour, minute, isLower) { if (hour < 9) { return "早上"; } else if (hour < 11 && minute < 30) { return "上午"; } else if (hour < 13 && minute < 30) { return "中午"; } else if (hour < 18) { return "下午"; } else { return "晚上"; } }, calendar : { sameDay : '[今天]LT', nextDay : '[明天]LT', nextWeek : '[下]ddddLT', lastDay : '[昨天]LT', lastWeek : '[上]ddddLT', sameElse : 'L' }, ordinal : function (number, period) { switch (period) { case "d" : case "D" : case "DDD" : return number + "日"; case "M" : return number + "月"; case "w" : case "W" : return number + "週"; default : return number; } }, relativeTime : { future : "%s內", past : "%s前", s : "幾秒", m : "一分鐘", mm : "%d分鐘", h : "一小時", hh : "%d小時", d : "一天", dd : "%d天", M : "一個月", MM : "%d個月", y : "一年", yy : "%d年" } }); })); moment.lang('en'); /************************************ Exposing Moment ************************************/ // CommonJS module is defined if (hasModule) { module.exports = moment; } /*global ender:false */ if (typeof ender === 'undefined') { // here, `this` means `window` in the browser, or `global` on the server // add `moment` as a global object via a string identifier, // for Closure Compiler "advanced" mode this['moment'] = moment; } /*global define:false */ if (typeof define === "function" && define.amd) { define("moment", [], function () { return moment; }); } }).call(this); assets/plugins/moment/min/moment.min.js000064400000045407152510437720014250 0ustar00//! moment.js //! version : 2.2.1 //! authors : Tim Wood, Iskren Chernev, Moment.js contributors //! license : MIT //! momentjs.com (function(a){function b(a,b){return function(c){return i(a.call(this,c),b)}}function c(a,b){return function(c){return this.lang().ordinal(a.call(this,c),b)}}function d(){}function e(a){g(this,a)}function f(a){var b=a.years||a.year||a.y||0,c=a.months||a.month||a.M||0,d=a.weeks||a.week||a.w||0,e=a.days||a.day||a.d||0,f=a.hours||a.hour||a.h||0,g=a.minutes||a.minute||a.m||0,h=a.seconds||a.second||a.s||0,i=a.milliseconds||a.millisecond||a.ms||0;this._input=a,this._milliseconds=+i+1e3*h+6e4*g+36e5*f,this._days=+e+7*d,this._months=+c+12*b,this._data={},this._bubble()}function g(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function h(a){return 0>a?Math.ceil(a):Math.floor(a)}function i(a,b){for(var c=a+"";c.lengthc;c++)~~a[c]!==~~b[c]&&f++;return f+e}function m(a){return a?ib[a]||a.toLowerCase().replace(/(.)s$/,"$1"):a}function n(a,b){return b.abbr=a,P[a]||(P[a]=new d),P[a].set(b),P[a]}function o(a){delete P[a]}function p(a){if(!a)return L.fn._lang;if(!P[a]&&Q)try{require("./lang/"+a)}catch(b){return L.fn._lang}return P[a]||L.fn._lang}function q(a){return a.match(/\[.*\]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function r(a){var b,c,d=a.match(T);for(b=0,c=d.length;c>b;b++)d[b]=mb[d[b]]?mb[d[b]]:q(d[b]);return function(e){var f="";for(b=0;c>b;b++)f+=d[b]instanceof Function?d[b].call(e,a):d[b];return f}}function s(a,b){return b=t(b,a.lang()),jb[b]||(jb[b]=r(b)),jb[b](a)}function t(a,b){function c(a){return b.longDateFormat(a)||a}for(var d=5;d--&&(U.lastIndex=0,U.test(a));)a=a.replace(U,c);return a}function u(a,b){switch(a){case"DDDD":return X;case"YYYY":return Y;case"YYYYY":return Z;case"S":case"SS":case"SSS":case"DDD":return W;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return $;case"a":case"A":return p(b._l)._meridiemParse;case"X":return bb;case"Z":case"ZZ":return _;case"T":return ab;case"MM":case"DD":case"YY":case"HH":case"hh":case"mm":case"ss":case"M":case"D":case"d":case"H":case"h":case"m":case"s":return V;default:return new RegExp(a.replace("\\",""))}}function v(a){var b=(_.exec(a)||[])[0],c=(b+"").match(fb)||["-",0,0],d=+(60*c[1])+~~c[2];return"+"===c[0]?-d:d}function w(a,b,c){var d,e=c._a;switch(a){case"M":case"MM":null!=b&&(e[1]=~~b-1);break;case"MMM":case"MMMM":d=p(c._l).monthsParse(b),null!=d?e[1]=d:c._isValid=!1;break;case"D":case"DD":null!=b&&(e[2]=~~b);break;case"DDD":case"DDDD":null!=b&&(e[1]=0,e[2]=~~b);break;case"YY":e[0]=~~b+(~~b>68?1900:2e3);break;case"YYYY":case"YYYYY":e[0]=~~b;break;case"a":case"A":c._isPm=p(c._l).isPM(b);break;case"H":case"HH":case"h":case"hh":e[3]=~~b;break;case"m":case"mm":e[4]=~~b;break;case"s":case"ss":e[5]=~~b;break;case"S":case"SS":case"SSS":e[6]=~~(1e3*("0."+b));break;case"X":c._d=new Date(1e3*parseFloat(b));break;case"Z":case"ZZ":c._useUTC=!0,c._tzm=v(b)}null==b&&(c._isValid=!1)}function x(a){var b,c,d,e=[];if(!a._d){for(d=z(a),b=0;3>b&&null==a._a[b];++b)a._a[b]=e[b]=d[b];for(;7>b;b++)a._a[b]=e[b]=null==a._a[b]?2===b?1:0:a._a[b];e[3]+=~~((a._tzm||0)/60),e[4]+=~~((a._tzm||0)%60),c=new Date(0),a._useUTC?(c.setUTCFullYear(e[0],e[1],e[2]),c.setUTCHours(e[3],e[4],e[5],e[6])):(c.setFullYear(e[0],e[1],e[2]),c.setHours(e[3],e[4],e[5],e[6])),a._d=c}}function y(a){var b=a._i;a._d||(a._a=[b.years||b.year||b.y,b.months||b.month||b.M,b.days||b.day||b.d,b.hours||b.hour||b.h,b.minutes||b.minute||b.m,b.seconds||b.second||b.s,b.milliseconds||b.millisecond||b.ms],x(a))}function z(a){var b=new Date;return a._useUTC?[b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()]:[b.getFullYear(),b.getMonth(),b.getDate()]}function A(a){var b,c,d,e=p(a._l),f=""+a._i;for(d=t(a._f,e).match(T),a._a=[],b=0;bh&&(i=h,d=c);g(a,d)}function C(a){var b,c=a._i,d=cb.exec(c);if(d){for(a._f="YYYY-MM-DD"+(d[2]||" "),b=0;4>b;b++)if(eb[b][1].exec(c)){a._f+=eb[b][0];break}_.exec(c)&&(a._f+=" Z"),A(a)}else a._d=new Date(c)}function D(b){var c=b._i,d=R.exec(c);c===a?b._d=new Date:d?b._d=new Date(+d[1]):"string"==typeof c?C(b):k(c)?(b._a=c.slice(0),x(b)):c instanceof Date?b._d=new Date(+c):"object"==typeof c?y(b):b._d=new Date(c)}function E(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function F(a,b,c){var d=O(Math.abs(a)/1e3),e=O(d/60),f=O(e/60),g=O(f/24),h=O(g/365),i=45>d&&["s",d]||1===e&&["m"]||45>e&&["mm",e]||1===f&&["h"]||22>f&&["hh",f]||1===g&&["d"]||25>=g&&["dd",g]||45>=g&&["M"]||345>g&&["MM",O(g/30)]||1===h&&["y"]||["yy",h];return i[2]=b,i[3]=a>0,i[4]=c,E.apply({},i)}function G(a,b,c){var d,e=c-b,f=c-a.day();return f>e&&(f-=7),e-7>f&&(f+=7),d=L(a).add("d",f),{week:Math.ceil(d.dayOfYear()/7),year:d.year()}}function H(a){var b=a._i,c=a._f;return null===b||""===b?null:("string"==typeof b&&(a._i=b=p().preparse(b)),L.isMoment(b)?(a=g({},b),a._d=new Date(+b._d)):c?k(c)?B(a):A(a):D(a),new e(a))}function I(a,b){L.fn[a]=L.fn[a+"s"]=function(a){var c=this._isUTC?"UTC":"";return null!=a?(this._d["set"+c+b](a),L.updateOffset(this),this):this._d["get"+c+b]()}}function J(a){L.duration.fn[a]=function(){return this._data[a]}}function K(a,b){L.duration.fn["as"+a]=function(){return+this/b}}for(var L,M,N="2.2.1",O=Math.round,P={},Q="undefined"!=typeof module&&module.exports,R=/^\/?Date\((\-?\d+)/i,S=/(\-)?(?:(\d*)\.)?(\d+)\:(\d+)\:(\d+)\.?(\d{3})?/,T=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|SS?S?|X|zz?|ZZ?|.)/g,U=/(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g,V=/\d\d?/,W=/\d{1,3}/,X=/\d{3}/,Y=/\d{1,4}/,Z=/[+\-]?\d{1,6}/,$=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,_=/Z|[\+\-]\d\d:?\d\d/i,ab=/T/i,bb=/[\+\-]?\d+(\.\d{1,3})?/,cb=/^\s*\d{4}-\d\d-\d\d((T| )(\d\d(:\d\d(:\d\d(\.\d\d?\d?)?)?)?)?([\+\-]\d\d:?\d\d)?)?/,db="YYYY-MM-DDTHH:mm:ssZ",eb=[["HH:mm:ss.S",/(T| )\d\d:\d\d:\d\d\.\d{1,3}/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],fb=/([\+\-]|\d\d)/gi,gb="Date|Hours|Minutes|Seconds|Milliseconds".split("|"),hb={Milliseconds:1,Seconds:1e3,Minutes:6e4,Hours:36e5,Days:864e5,Months:2592e6,Years:31536e6},ib={ms:"millisecond",s:"second",m:"minute",h:"hour",d:"day",w:"week",W:"isoweek",M:"month",y:"year"},jb={},kb="DDD w W M D d".split(" "),lb="M D H h m s w W".split(" "),mb={M:function(){return this.month()+1},MMM:function(a){return this.lang().monthsShort(this,a)},MMMM:function(a){return this.lang().months(this,a)},D:function(){return this.date()},DDD:function(){return this.dayOfYear()},d:function(){return this.day()},dd:function(a){return this.lang().weekdaysMin(this,a)},ddd:function(a){return this.lang().weekdaysShort(this,a)},dddd:function(a){return this.lang().weekdays(this,a)},w:function(){return this.week()},W:function(){return this.isoWeek()},YY:function(){return i(this.year()%100,2)},YYYY:function(){return i(this.year(),4)},YYYYY:function(){return i(this.year(),5)},gg:function(){return i(this.weekYear()%100,2)},gggg:function(){return this.weekYear()},ggggg:function(){return i(this.weekYear(),5)},GG:function(){return i(this.isoWeekYear()%100,2)},GGGG:function(){return this.isoWeekYear()},GGGGG:function(){return i(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.lang().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.lang().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return~~(this.milliseconds()/100)},SS:function(){return i(~~(this.milliseconds()/10),2)},SSS:function(){return i(this.milliseconds(),3)},Z:function(){var a=-this.zone(),b="+";return 0>a&&(a=-a,b="-"),b+i(~~(a/60),2)+":"+i(~~a%60,2)},ZZ:function(){var a=-this.zone(),b="+";return 0>a&&(a=-a,b="-"),b+i(~~(10*a/6),4)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()}};kb.length;)M=kb.pop(),mb[M+"o"]=c(mb[M],M);for(;lb.length;)M=lb.pop(),mb[M+M]=b(mb[M],2);for(mb.DDDD=b(mb.DDD,3),g(d.prototype,{set:function(a){var b,c;for(c in a)b=a[c],"function"==typeof b?this[c]=b:this["_"+c]=b},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(a){return this._months[a.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(a){return this._monthsShort[a.month()]},monthsParse:function(a){var b,c,d;for(this._monthsParse||(this._monthsParse=[]),b=0;12>b;b++)if(this._monthsParse[b]||(c=L.utc([2e3,b]),d="^"+this.months(c,"")+"|^"+this.monthsShort(c,""),this._monthsParse[b]=new RegExp(d.replace(".",""),"i")),this._monthsParse[b].test(a))return b},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(a){return this._weekdays[a.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(a){return this._weekdaysShort[a.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(a){return this._weekdaysMin[a.day()]},weekdaysParse:function(a){var b,c,d;for(this._weekdaysParse||(this._weekdaysParse=[]),b=0;7>b;b++)if(this._weekdaysParse[b]||(c=L([2e3,1]).day(b),d="^"+this.weekdays(c,"")+"|^"+this.weekdaysShort(c,"")+"|^"+this.weekdaysMin(c,""),this._weekdaysParse[b]=new RegExp(d.replace(".",""),"i")),this._weekdaysParse[b].test(a))return b},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D YYYY",LLL:"MMMM D YYYY LT",LLLL:"dddd, MMMM D YYYY LT"},longDateFormat:function(a){var b=this._longDateFormat[a];return!b&&this._longDateFormat[a.toUpperCase()]&&(b=this._longDateFormat[a.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a]=b),b},isPM:function(a){return"p"===(a+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(a,b){var c=this._calendar[a];return"function"==typeof c?c.apply(b):c},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(a,b,c,d){var e=this._relativeTime[c];return"function"==typeof e?e(a,b,c,d):e.replace(/%d/i,a)},pastFuture:function(a,b){var c=this._relativeTime[a>0?"future":"past"];return"function"==typeof c?c(b):c.replace(/%s/i,b)},ordinal:function(a){return this._ordinal.replace("%d",a)},_ordinal:"%d",preparse:function(a){return a},postformat:function(a){return a},week:function(a){return G(a,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6}}),L=function(a,b,c){return H({_i:a,_f:b,_l:c,_isUTC:!1})},L.utc=function(a,b,c){return H({_useUTC:!0,_isUTC:!0,_l:c,_i:a,_f:b}).utc()},L.unix=function(a){return L(1e3*a)},L.duration=function(a,b){var c,d,e=L.isDuration(a),g="number"==typeof a,h=e?a._input:g?{}:a,i=S.exec(a);return g?b?h[b]=a:h.milliseconds=a:i&&(c="-"===i[1]?-1:1,h={y:0,d:~~i[2]*c,h:~~i[3]*c,m:~~i[4]*c,s:~~i[5]*c,ms:~~i[6]*c}),d=new f(h),e&&a.hasOwnProperty("_lang")&&(d._lang=a._lang),d},L.version=N,L.defaultFormat=db,L.updateOffset=function(){},L.lang=function(a,b){return a?(a=a.toLowerCase(),a=a.replace("_","-"),b?n(a,b):null===b?(o(a),a="en"):P[a]||p(a),L.duration.fn._lang=L.fn._lang=p(a),void 0):L.fn._lang._abbr},L.langData=function(a){return a&&a._lang&&a._lang._abbr&&(a=a._lang._abbr),p(a)},L.isMoment=function(a){return a instanceof e},L.isDuration=function(a){return a instanceof f},g(L.fn=e.prototype,{clone:function(){return L(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){return s(L(this).utc(),"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")},toArray:function(){var a=this;return[a.year(),a.month(),a.date(),a.hours(),a.minutes(),a.seconds(),a.milliseconds()]},isValid:function(){return null==this._isValid&&(this._isValid=this._a?!l(this._a,(this._isUTC?L.utc(this._a):L(this._a)).toArray()):!isNaN(this._d.getTime())),!!this._isValid},invalidAt:function(){var a,b=this._a,c=(this._isUTC?L.utc(this._a):L(this._a)).toArray();for(a=6;a>=0&&b[a]===c[a];--a);return a},utc:function(){return this.zone(0)},local:function(){return this.zone(0),this._isUTC=!1,this},format:function(a){var b=s(this,a||L.defaultFormat);return this.lang().postformat(b)},add:function(a,b){var c;return c="string"==typeof a?L.duration(+b,a):L.duration(a,b),j(this,c,1),this},subtract:function(a,b){var c;return c="string"==typeof a?L.duration(+b,a):L.duration(a,b),j(this,c,-1),this},diff:function(a,b,c){var d,e,f=this._isUTC?L(a).zone(this._offset||0):L(a).local(),g=6e4*(this.zone()-f.zone());return b=m(b),"year"===b||"month"===b?(d=432e5*(this.daysInMonth()+f.daysInMonth()),e=12*(this.year()-f.year())+(this.month()-f.month()),e+=(this-L(this).startOf("month")-(f-L(f).startOf("month")))/d,e-=6e4*(this.zone()-L(this).startOf("month").zone()-(f.zone()-L(f).startOf("month").zone()))/d,"year"===b&&(e/=12)):(d=this-f,e="second"===b?d/1e3:"minute"===b?d/6e4:"hour"===b?d/36e5:"day"===b?(d-g)/864e5:"week"===b?(d-g)/6048e5:d),c?e:h(e)},from:function(a,b){return L.duration(this.diff(a)).lang(this.lang()._abbr).humanize(!b)},fromNow:function(a){return this.from(L(),a)},calendar:function(){var a=this.diff(L().zone(this.zone()).startOf("day"),"days",!0),b=-6>a?"sameElse":-1>a?"lastWeek":0>a?"lastDay":1>a?"sameDay":2>a?"nextDay":7>a?"nextWeek":"sameElse";return this.format(this.lang().calendar(b,this))},isLeapYear:function(){var a=this.year();return 0===a%4&&0!==a%100||0===a%400},isDST:function(){return this.zone()+L(a).startOf(b)},isBefore:function(a,b){return b="undefined"!=typeof b?b:"millisecond",+this.clone().startOf(b)<+L(a).startOf(b)},isSame:function(a,b){return b="undefined"!=typeof b?b:"millisecond",+this.clone().startOf(b)===+L(a).startOf(b)},min:function(a){return a=L.apply(null,arguments),this>a?this:a},max:function(a){return a=L.apply(null,arguments),a>this?this:a},zone:function(a){var b=this._offset||0;return null==a?this._isUTC?b:this._d.getTimezoneOffset():("string"==typeof a&&(a=v(a)),Math.abs(a)<16&&(a=60*a),this._offset=a,this._isUTC=!0,b!==a&&j(this,L.duration(b-a,"m"),1,!0),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},hasAlignedHourOffset:function(a){return a=a?L(a).zone():0,0===(this.zone()-a)%60},daysInMonth:function(){return L.utc([this.year(),this.month()+1,0]).date()},dayOfYear:function(a){var b=O((L(this).startOf("day")-L(this).startOf("year"))/864e5)+1;return null==a?b:this.add("d",a-b)},weekYear:function(a){var b=G(this,this.lang()._week.dow,this.lang()._week.doy).year;return null==a?b:this.add("y",a-b)},isoWeekYear:function(a){var b=G(this,1,4).year;return null==a?b:this.add("y",a-b)},week:function(a){var b=this.lang().week(this);return null==a?b:this.add("d",7*(a-b))},isoWeek:function(a){var b=G(this,1,4).week;return null==a?b:this.add("d",7*(a-b))},weekday:function(a){var b=(this._d.getDay()+7-this.lang()._week.dow)%7;return null==a?b:this.add("d",a-b)},isoWeekday:function(a){return null==a?this.day()||7:this.day(this.day()%7?a:a-7)},get:function(a){return a=m(a),this[a.toLowerCase()]()},set:function(a,b){a=m(a),this[a.toLowerCase()](b)},lang:function(b){return b===a?this._lang:(this._lang=p(b),this)}}),M=0;M` and submit the pull request to the `develop` branch. Pull requests for enhancements for features should be submitted to the `develop` branch as well. When submitting a bugfix, please check if there is an existing bugfix branch. If the latest stable version is `1.5.0`, the bugfix branch would be `hotfix/1.5.1`. All pull requests for bug fixes should be on a `hotfix` branch, unless the bug fix depends on a new feature. The `master` branch should always have the latest stable version. When bugfix or minor releases are needed, the develop/hotfix branch will be merged into master and released. assets/plugins/moment/tasks/history.js000064400000005651152510437720014227 0ustar00var https = require("https"), zlib = require('zlib'), path = require('path'), fs = require('fs'); var count = 0; var resolved = 0; var outputs = []; var done; function check() { if (resolved === count) { normalize(); display(); } } function makeBar(length) { var i = ''; while (i.length < length) { i += '='; } return i; } function normalize() { var i, max = 0, max2 = 0; for (i = 0; i < count; i ++) { max = Math.max(max, outputs[i].gzip); max2 = Math.max(max2, outputs[i].original); } for (i = 0; i < count; i ++) { outputs[i].bargraph = makeBar((outputs[i].gzip / max) * 80); outputs[i].bargraph2 = makeBar((outputs[i].original / max2) * 80); } } function display() { var i; for (i = 0; i < count; i ++) { console.log(outputs[i].version + ' ' + outputs[i].gzip + ' ' + outputs[i].original); console.log('gzip ' + outputs[i].bargraph); console.log('orig ' + outputs[i].bargraph2); } done(); } function getSizeAtVersion(version, path) { var data = '', op = {}, req = https.request({ host: 'raw.github.com', port: 443, path: '/timrwood/moment/' + version + path }, function (res) { res.setEncoding('utf8'); res.on('data', function (chunk) { data += chunk; }); res.on('end', function (e) { zlib.gzip(data, function (error, result) { op.version = version; op.gzip = result.length; op.original = data.length; resolved ++; check(); }); }); }); req.on('error', function (e) { console.log('problem with request: ' + e.message); }); req.end(); count++; outputs.push(op); } function getRemote() { var old_versions = '1.0.1 1.1.0 1.1.1 1.1.2 1.2.0 1.3.0 1.4.0'.split(' '), new_versions = '1.5.0 1.5.1 1.6.0 1.6.1 1.7.0 1.7.1'.split(' '), i; for (i = 0; i < old_versions.length; i++) { getSizeAtVersion(old_versions[i], '/moment.min.js'); } for (i = 0; i < new_versions.length; i++) { getSizeAtVersion(new_versions[i], '/min/moment.min.js'); } } function getLocal() { count ++; var op = {}; outputs.push(op); fs.readFile(path.normalize(__dirname + '/../min/moment.min.js'), 'utf8', function (err, data) { if (err) { throw err; } zlib.gzip(data, function (error, result) { op.version = '.next'; op.gzip = result.length; op.original = data.length; resolved ++; check(); }); }); } module.exports = function (grunt) { grunt.registerTask('history', 'Check the codebase filesize over different releases.', function () { done = this.async(); getRemote(); getLocal(); }); };assets/plugins/moment/tasks/zones.js000064400000003707152510437730013665 0ustar00var fs = require('fs'); module.exports = function (grunt) { var ZONE_TAB = '/usr/share/zoneinfo/zone.tab'; grunt.registerTask('zones', 'Run the unit tests in different timezones.', function () { var done = this.async(); getAllTimezones(function (err, zones) { if (err != null) { throw err; } (function iterator(i) { if (i >= zones.length) { return done(); } runTestsInZone(zones[i], function (err) { if (err != null) { throw err; } iterator(i+1); }); }(0)); }); }); function getAllTimezones (callback) { fs.readFile(ZONE_TAB, 'ascii', function (err, content) { if (err != null) { callback(err); } callback(null, content.split(/\r\n|\r|\n/) // remove empty and commented lines .filter(function (line) { return line && !/^#/.test(line); }) // country code TAB coordinates TAB timezone .map(function (line) { return line.split('\t')[2]; })); }); }; function runTestsInZone (zone, next) { grunt.log.ok("Running tests in zone " + zone); grunt.util.spawn({ cmd: "grunt", opts: { env: { "PATH": process.env.PATH, "TZ": zone } }, args: ["--no-color", "nodeunit"] }, function (err, result, code) { if (code !== 0) { grunt.log.error(result.stdout.split(/\r\n|\r|\n/) .filter(function (line) { return /^(>>|Warning:|$)/.test(line) }) .map(function (line) { return (line.substr(0, 3) === '>> ' ? line.substr(3) : line); }) .join('\n')); } next(); }); }; }; assets/plugins/moment/tasks/component.js000064400000000524152510437730014523 0ustar00module.exports = function (grunt) { grunt.registerTask('component', function () { var config = JSON.parse(grunt.file.read('component.json')); config.files = grunt.file.expand('lang/*.js'); config.files.unshift('moment.js'); grunt.file.write('component.json', JSON.stringify(config, true, 2)); }); } assets/plugins/moment/tasks/embed_languages.js000064400000003024152510437730015621 0ustar00 module.exports = function (grunt) { grunt.registerTask('embed_languages', function () { var config = grunt.config('embed_languages'); var files = grunt.file.expand(config.targetLangs); var embeddedContents = determineEmbeddedContent(files); var momentContents = grunt.file.read(config.moment); var modifiedContents = momentContents.replace('/* EMBED_LANGUAGES */', function () { // If we don't do this, $ symbols in lang files may get interpreted in // the regex replacement return embeddedContents; }); grunt.file.write(config.dest, modifiedContents); }); var languageReset = 'moment.lang(\'en\');'; function determineEmbeddedContent(files) { var embeddedContent = ''; files.forEach(function (file) { embeddedContent += transformFile(file); }); embeddedContent += '\n ' + languageReset + '\n'; return embeddedContent; } var reTransform = /function \(factory\) \{[^]*\}(?=\(function \(moment\) \{)/gm; var replaceWith = 'function (factory) {\n' + ' factory(moment);\n' + '}'; function transformFile(file) { var fileContents = grunt.file.read(file); if (!fileContents.match(reTransform)) { grunt.warn('Warning: all language files must use the common UMD wrapper pattern. Failed language file: ' + file); return ''; } return fileContents.replace(reTransform, replaceWith); } }; assets/plugins/moment/tasks/size.js000064400000003611152510437730013473 0ustar00var https = require("https"), zlib = require('zlib'), path = require('path'), fs = require('fs'); var stable = '1.7.1', done; function getVersion(path, cb) { var data = '', req = https.request({ host: 'raw.github.com', port: 443, path: '/timrwood/moment/' + path }, function (res) { res.setEncoding('utf8'); res.on('data', function (chunk) { data += chunk; }); res.on('end', function (e) { zlib.gzip(data, function (error, result) { cb(data.length, result.length); }); }); }); req.on('error', function (e) { console.log('problem with request: ' + e.message); }); req.end(); } function printDiffs(stableLen, stableGzip, currentLen, currentGzip) { var diff = currentLen - stableLen, gzipDiff = currentGzip - stableGzip; console.log("Filesize difference from current branch to " + stable); console.log(stable + " " + stableLen + ' / ' + stableGzip); console.log("curr " + currentLen + ' / ' + currentGzip); console.log("diff " + (diff > 0 ? '+' : '') + diff); console.log("gzip " + (gzipDiff > 0 ? '+' : '') + gzipDiff); } module.exports = function (grunt) { grunt.registerTask('size', 'Check the codebase filesize against the latest stable version.', function () { done = this.async(); fs.readFile(path.normalize(__dirname + '/../min/moment.min.js'), 'utf8', function (err, data) { if (err) { throw err; } zlib.gzip(data, function (error, result) { getVersion(stable + '/min/moment.min.js', function (stableLength, stableGzipLength) { printDiffs(stableLength, stableGzipLength, data.length, result.length); done(); }); }); }); }); };assets/plugins/moment/.gitignore000064400000000120152510437730013016 0ustar00node_modules/ .DS_Store min/moment+customlangs.js min/moment+customlangs.min.js assets/plugins/moment/LICENSE000064400000002111152510437730012035 0ustar00Copyright (c) 2011-2013 Tim Wood, Iskren Chernev, Moment.js contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. assets/plugins/moment/readme.md000064400000020163152510437730012616 0ustar00A lightweight javascript date library for parsing, validating, manipulating, and formatting dates. # [Documentation](http://momentjs.com/docs/) Upgrading to 2.0.0 ================== There are a number of small backwards incompatible changes with version 2.0.0. [See them and their descriptions here](https://gist.github.com/timrwood/e72f2eef320ed9e37c51#backwards-incompatible-changes) Changed language ordinal method to return the number + ordinal instead of just the ordinal. Changed two digit year parsing cutoff to match strptime. Removed `moment#sod` and `moment#eod` in favor of `moment#startOf` and `moment#endOf`. Removed `moment.humanizeDuration()` in favor of `moment.duration().humanize()`. Removed the lang data objects from the top level namespace. Duplicate `Date` passed to `moment()` instead of referencing it. Travis Build Status =================== Develop [![Build Status](https://travis-ci.org/moment/moment.png?branch=develop)](https://travis-ci.org/moment/moment) Master [![Build Status](https://travis-ci.org/moment/moment.png?branch=master)](https://travis-ci.org/moment/moment) Changelog ========= ### 2.2.1 Fixed bug in string prototype test. Updated authors and contributors. ### 2.2.0 [See changelog](https://gist.github.com/ichernev/00f837a9baf46a3565e4) Added bower support. Language files now use UMD. Creating moment defaults to current date/month/year. Added a bundle of moment and all language files. ### 2.1.0 [See changelog](https://gist.github.com/timrwood/b8c2d90d528eddb53ab5) Added better week support. Added ability to set offset with `moment#zone`. Added ability to set month or weekday from a string. Added `moment#min` and `moment#max` ### 2.0.0 [See changelog](https://gist.github.com/timrwood/e72f2eef320ed9e37c51) Added short form localized tokens. Added ability to define language a string should be parsed in. Added support for reversed add/subtract arguments. Added support for `endOf('week')` and `startOf('week')`. Fixed the logic for `moment#diff(Moment, 'months')` and `moment#diff(Moment, 'years')` `moment#diff` now floors instead of rounds. Normalized `moment#toString`. Added `isSame`, `isAfter`, and `isBefore` methods. Added better week support. Added `moment#toJSON` Bugfix: Fixed parsing of first century dates Bugfix: Parsing 10Sep2001 should work as expected Bugfix: Fixed wierdness with `moment.utc()` parsing. Changed language ordinal method to return the number + ordinal instead of just the ordinal. Changed two digit year parsing cutoff to match strptime. Removed `moment#sod` and `moment#eod` in favor of `moment#startOf` and `moment#endOf`. Removed `moment.humanizeDuration()` in favor of `moment.duration().humanize()`. Removed the lang data objects from the top level namespace. Duplicate `Date` passed to `moment()` instead of referencing it. ### 1.7.2 [See discussion](https://github.com/timrwood/moment/issues/456) Bugfixes ### 1.7.1 [See discussion](https://github.com/timrwood/moment/issues/384) Bugfixes ### 1.7.0 [See discussion](https://github.com/timrwood/moment/issues/288) Added `moment.fn.endOf()` and `moment.fn.startOf()`. Added validation via `moment.fn.isValid()`. Made formatting method 3x faster. http://jsperf.com/momentjs-cached-format-functions Add support for month/weekday callbacks in `moment.fn.format()` Added instance specific languages. Added two letter weekday abbreviations with the formatting token `dd`. Various language updates. Various bugfixes. ### 1.6.0 [See discussion](https://github.com/timrwood/moment/pull/268) Added Durations. Revamped parser to support parsing non-separated strings (YYYYMMDD vs YYYY-MM-DD). Added support for millisecond parsing and formatting tokens (S SS SSS) Added a getter for `moment.lang()` Various bugfixes. There are a few things deprecated in the 1.6.0 release. 1. The format tokens `z` and `zz` (timezone abbreviations like EST CST MST etc) will no longer be supported. Due to inconsistent browser support, we are unable to consistently produce this value. See [this issue](https://github.com/timrwood/moment/issues/162) for more background. 2. The method `moment.fn.native` is deprecated in favor of `moment.fn.toDate`. There continue to be issues with Google Closure Compiler throwing errors when using `native`, even in valid instances. 3. The way to customize am/pm strings is being changed. This would only affect you if you created a custom language file. For more information, see [this issue](https://github.com/timrwood/moment/pull/222). ### 1.5.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=10&page=1&state=closed) Added UTC mode. Added automatic ISO8601 parsing. Various bugfixes. ### 1.4.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=8&state=closed) Added `moment.fn.toDate` as a replacement for `moment.fn.native`. Added `moment.fn.sod` and `moment.fn.eod` to get the start and end of day. Various bugfixes. ### 1.3.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=7&state=closed) Added support for parsing month names in the current language. Added escape blocks for parsing tokens. Added `moment.fn.calendar` to format strings like 'Today 2:30 PM', 'Tomorrow 1:25 AM', and 'Last Sunday 4:30 AM'. Added `moment.fn.day` as a setter. Various bugfixes ### 1.2.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=4&state=closed) Added timezones to parser and formatter. Added `moment.fn.isDST`. Added `moment.fn.zone` to get the timezone offset in minutes. ### 1.1.2 [See milestone](https://github.com/timrwood/moment/issues?milestone=6&state=closed) Various bugfixes ### 1.1.1 [See milestone](https://github.com/timrwood/moment/issues?milestone=5&state=closed) Added time specific diffs (months, days, hours, etc) ### 1.1.0 Added `moment.fn.format` localized masks. 'L LL LLL LLLL' [issue 29](https://github.com/timrwood/moment/pull/29) Fixed [issue 31](https://github.com/timrwood/moment/pull/31). ### 1.0.1 Added `moment.version` to get the current version. Removed `window !== undefined` when checking if module exists to support browserify. [issue 25](https://github.com/timrwood/moment/pull/25) ### 1.0.0 Added convenience methods for getting and setting date parts. Added better support for `moment.add()`. Added better lang support in NodeJS. Renamed library from underscore.date to Moment.js ### 0.6.1 Added Portuguese, Italian, and French language support ### 0.6.0 Added _date.lang() support. Added support for passing multiple formats to try to parse a date. _date("07-10-1986", ["MM-DD-YYYY", "YYYY-MM-DD"]); Made parse from string and single format 25% faster. ### 0.5.2 Bugfix for [issue 8](https://github.com/timrwood/underscore.date/pull/8) and [issue 9](https://github.com/timrwood/underscore.date/pull/9). ### 0.5.1 Bugfix for [issue 5](https://github.com/timrwood/underscore.date/pull/5). ### 0.5.0 Dropped the redundant `_date.date()` in favor of `_date()`. Removed `_date.now()`, as it is a duplicate of `_date()` with no parameters. Removed `_date.isLeapYear(yearNumber)`. Use `_date([yearNumber]).isLeapYear()` instead. Exposed customization options through the `_date.relativeTime`, `_date.weekdays`, `_date.weekdaysShort`, `_date.months`, `_date.monthsShort`, and `_date.ordinal` variables instead of the `_date.customize()` function. ### 0.4.1 Added date input formats for input strings. ### 0.4.0 Added underscore.date to npm. Removed dependencies on underscore. ### 0.3.2 Added `'z'` and `'zz'` to `_.date().format()`. Cleaned up some redundant code to trim off some bytes. ### 0.3.1 Cleaned up the namespace. Moved all date manipulation and display functions to the _.date() object. ### 0.3.0 Switched to the Underscore methodology of not mucking with the native objects' prototypes. Made chaining possible. ### 0.2.1 Changed date names to be a more pseudo standardized 'dddd, MMMM Do YYYY, h:mm:ss a'. Added `Date.prototype` functions `add`, `subtract`, `isdst`, and `isleapyear`. ### 0.2.0 Changed function names to be more concise. Changed date format from php date format to custom format. ### 0.1.0 Initial release License ======= Moment.js is freely distributable under the terms of the MIT license. assets/plugins/gmaps/package.json000064400000001164152510437730013135 0ustar00{ "name": "gmaps", "version": "0.4.5", "description": "the easiest way to use Google Maps", "main": "gmaps.js", "scripts": { "test": "grunt test --verbose" }, "repository": { "type": "git", "url": "https://github.com/HPNeo/gmaps" }, "author": "Gustavo Leon", "homepage": "http://hpneo.github.com/gmaps/", "license": "MIT", "bugs": { "url": "https://github.com/HPNeo/gmaps/issues" }, "devDependencies": { "grunt": "~0.4.1", "grunt-contrib-concat": "~0.3.0", "grunt-contrib-jasmine": "~0.5.1", "grunt-contrib-watch": "~0.4.4", "grunt-contrib-jshint": "~0.6.0" } } assets/plugins/gmaps/README.md000064400000021006152510437730012123 0ustar00GMaps.js - A Javascript library that simplifies your life ========================================================= GMaps.js allows you to use the potential of Google Maps in a simple way. No more extensive documentation or large amount of code. Visit the examples in [hpneo.github.com/gmaps](http://hpneo.github.com/gmaps/) Build ------ If you would like to build gmaps from source run the following at the terminal: ```sh git clone https://github.com/HPNeo/gmaps.git cd gmaps npm install grunt ``` Changelog --------- 0.4.5 ----------------------- * Fix IE8 bug using array_map * Add Grunt and Bower support 0.4.4 ----------------------- * Fix buildContextMenu reference in addMarker 0.4.3 ----------------------- * Fix removePolylines and removePolygons 0.4.2 ----------------------- * Fix drawSteppedRoute 0.4.1 ----------------------- * Fix fitZoom 0.4.0 ----------------------- * Split gmaps.js in modules 0.3.5 ----------------------- * Enable new Google Maps style 0.3.4 ----------------------- * Add support for context menu in multiple maps 0.3.3 ----------------------- * Fix destination as address in getRoutes 0.3.2 ----------------------- * Support for removing Fusion Tables and GeoRSS/KML layers with removeLayer 0.3.1 ----------------------- * Improve event binding at adding markers, polylines or polygons 0.3 ----------------------- * Add native events to google.maps objects and custom events to GMaps maps * Check for Google Maps library and defined element when initialize * Allow route origins to be a string or array 0.2.31 ----------------------- * Fix context menu position bug 0.2.30 ----------------------- * New feature: StreetView Panoramas 0.2.29 ----------------------- * New methods: removePolyline and removePolygon * Tests for Styled MapTypes 0.2.28 ----------------------- * Test suite * Fix double event firing bug 0.2.27 ----------------------- * Allow create context menus for markers 0.2.26 ----------------------- * Fix bug in getElevations * Rename fitBounds to fitLatLngBounds 0.2.25 ----------------------- * Support for GeoJSON in drawPolygon * Use 'complete' instead of 'always' in GMaps.geolocate 0.2.24 ----------------------- * New feature: **Overlay Map Types** 0.2.23 ----------------------- * Add full support to google.maps.PolylineOptions * New method: removeMarker 0.2.22 ----------------------- * New feature: **Map Types** 0.2.21 ----------------------- * Support to add google.maps.Marker objects in addMarker and addMarkers methods. 0.2.20 ----------------------- * Add support for other HTML block elements instead "div" (like "section"). 0.2.19 ----------------------- * Use MarkerClusterer to group markers 0.2.18 ----------------------- * Check if GMaps is defined before load extensions 0.2.17 ----------------------- * Fix bug with disableDefaultUI option in constructor 0.2.16 ----------------------- * Fix another bug in createMarker 0.2.15 ----------------------- * Fix bug in createMarker 0.2.14 ----------------------- * Adding IDs, classes and innerHTML to createControl. (**Note**: Use 'content' instead 'text' in createControl) 0.2.13 ----------------------- * Add support for Places library in addLayer 0.2.12 ----------------------- * Fix map events without MouseEvent object * Fix bug in drawCircle and drawRectangle * Fix bug in zoomIn and zoomOut * New methods: removePolygon and removePolygons 0.2.11 ----------------------- * Add support to Panoramio in addLayer 0.2.10 ----------------------- * New method: toImage 0.2.9 ----------------------- * Extend the drawSteppedRoute and travelRoute functions 0.2.8 ----------------------- * New feature: **Layers** 0.2.7 ----------------------- * New method: removeRoutes * Access all native methods of google.maps.Map class 0.2.6 ----------------------- * Support for multiple overlays 0.2.5 ----------------------- * Add support to all marker events * Add suport for animations at show and remove overlays 0.2.4.1 ----------------------- * Create GMaps class only when Google Maps API is loaded 0.2.4 ----------------------- * New feature: **Elevation service** 0.2.3 ----------------------- * New method: getZoom 0.2.2 ----------------------- * Minor improvements to support Backbone.js * Fix controls position 0.2.1 ----------------------- * More default values in GMaps constructor. 0.2 ----------------------- * Remove jQuery dependency. 0.1.12.5 ----------------------- * New method "removePolylines" and alias "cleanRoute" 0.1.12.4 ----------------------- * New methods: fitZoom and fitBounds 0.1.12.3 ----------------------- * New method: refresh 0.1.12.2 ----------------------- * New options in GMaps constructor: width and height 0.1.12.1 ----------------------- * New methods: loadFromFusionTables and loadFromKML 0.1.12 ----------------------- * New feature: **KML and GeoRSS** * Fix bug in getFromFusionTables 0.1.11 ----------------------- * New feature: **Fusion Tables** 0.1.10 ----------------------- * New feature: **Custom controls** 0.1.9 ----------------------- * New feature: **Static maps** 0.1.8.10 ----------------------- * Better GMaps.Route methods 0.1.8.9 ----------------------- * Fix typo in Polyline events * Add InfoWindow events 0.1.8.8 ----------------------- * Add Polyline events 0.1.8.7 ----------------------- * Add drag and dragstart events to Marker 0.1.8.6 ----------------------- * Add avoidHighways, avoidTolls, optimizeWaypoints, unitSystem and waypoints options in getRoutes * New method: createMarker 0.1.8.5 ----------------------- * geolocation and geocode methods are static now (using them with GMaps.geolocation and GMaps.geocode) 0.1.8.4 ----------------------- * Fix typo in geocode method * Allow all MapOptions in constructor (see 'MapOptions' section in Google Maps API Reference) 0.1.8.3 ----------------------- * Add pane option ('floatPane', 'floatShadow', 'mapPane', 'overlayImage', 'overlayLayer', 'overlayMouseTarget', 'overlayShadow') in drawOverlay * New methods: removeOverlay and removeOverlays 0.1.8.2 ----------------------- * Change pane ('floatPane' to 'overlayLayer') in drawOverlay 0.1.8.1 ----------------------- * Fix bug in drawCircle 0.1.8 ----------------------- * New feature: **Overlays** * New method: drawCircle 0.1.7.1 ----------------------- * Bug fix: zoomIn/zoomOut can change zoom by argument * New method: setZoom 0.1.7 ----------------------- * New class: **GMaps.Route** 0.1.6 ----------------------- * New feature: **Geofence** (with markers) * New method: **drawPolygon** * Bug fix: Change reserved word in Context menu 0.1.5 ----------------------- * New feature: **Geocoding** * New method: **drawSteppedRoute** (similar to travelRoute) 0.1.4 ----------------------- * New events in **addMarker** * Add step_number property in **travelRoute** method 0.1.3 ----------------------- * New feature: **Context menu** (for map and marker only) * New method: **travelRoute** * Change setCenter to panTo in GMaps **setCenter** method * Save entire route data in routes array (instead saving only route path) * Context menu and Route example (using **travelRoute**) 0.1.2 ----------------------- * **drawPolyline** can accept both an array of LatLng objets or an array of coordinates * New methods: **getRoutes** and **drawRoute** * Route example 0.1.1 ----------------------- * Rename **drawRoute** method to **drawPolyline** (more accurate) * Marker example 0.1 - Initial release ----------------------- * Map events * Geolocation * Add Markers * Marker infoWindows * Draw routes and circles * Initial examples License --------- MIT License. Copyright 2012 Gustavo Leon. http://github.com/hpneo Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.assets/plugins/gmaps/gmaps.js000064400000147416152510437730012327 0ustar00/*! * GMaps.js v0.4.5 * http://hpneo.github.com/gmaps/ * * Copyright 2013, Gustavo Leon * Released under the MIT License. */ if (!(typeof window.google === 'object' && window.google.maps)) { throw 'Google Maps API is required. Please register the following JavaScript library http://maps.google.com/maps/api/js?sensor=true.' } var extend_object = function(obj, new_obj) { var name; if (obj === new_obj) { return obj; } for (name in new_obj) { obj[name] = new_obj[name]; } return obj; }; var replace_object = function(obj, replace) { var name; if (obj === replace) { return obj; } for (name in replace) { if (obj[name] != undefined) { obj[name] = replace[name]; } } return obj; }; var array_map = function(array, callback) { var original_callback_params = Array.prototype.slice.call(arguments, 2), array_return = [], array_length = array.length, i; if (Array.prototype.map && array.map === Array.prototype.map) { array_return = Array.prototype.map.call(array, function(item) { callback_params = original_callback_params; callback_params.splice(0, 0, item); return callback.apply(this, callback_params); }); } else { for (i = 0; i < array_length; i++) { callback_params = original_callback_params; callback_params.splice(0, 0, array[i]); array_return.push(callback.apply(this, callback_params)); } } return array_return; }; var array_flat = function(array) { var new_array = [], i; for (i = 0; i < array.length; i++) { new_array = new_array.concat(array[i]); } return new_array; }; var coordsToLatLngs = function(coords, useGeoJSON) { var first_coord = coords[0], second_coord = coords[1]; if (useGeoJSON) { first_coord = coords[1]; second_coord = coords[0]; } return new google.maps.LatLng(first_coord, second_coord); }; var arrayToLatLng = function(coords, useGeoJSON) { var i; for (i = 0; i < coords.length; i++) { if (coords[i].length > 0 && typeof(coords[i][0]) != "number") { coords[i] = arrayToLatLng(coords[i], useGeoJSON); } else { coords[i] = coordsToLatLngs(coords[i], useGeoJSON); } } return coords; }; var getElementById = function(id, context) { var element, id = id.replace('#', ''); if ('jQuery' in this && context) { element = $("#" + id, context)[0]; } else { element = document.getElementById(id); }; return element; }; var findAbsolutePosition = function(obj) { var curleft = 0, curtop = 0; if (obj.offsetParent) { do { curleft += obj.offsetLeft; curtop += obj.offsetTop; } while (obj = obj.offsetParent); } return [curleft, curtop]; }; var GMaps = (function(global) { "use strict"; var doc = document; var GMaps = function(options) { options.zoom = options.zoom || 15; options.mapType = options.mapType || 'roadmap'; var self = this, i, events_that_hide_context_menu = ['bounds_changed', 'center_changed', 'click', 'dblclick', 'drag', 'dragend', 'dragstart', 'idle', 'maptypeid_changed', 'projection_changed', 'resize', 'tilesloaded', 'zoom_changed'], events_that_doesnt_hide_context_menu = ['mousemove', 'mouseout', 'mouseover'], options_to_be_deleted = ['el', 'lat', 'lng', 'mapType', 'width', 'height', 'markerClusterer', 'enableNewStyle'], container_id = options.el || options.div, markerClustererFunction = options.markerClusterer, mapType = google.maps.MapTypeId[options.mapType.toUpperCase()], map_center = new google.maps.LatLng(options.lat, options.lng), zoomControl = options.zoomControl || true, zoomControlOpt = options.zoomControlOpt || { style: 'DEFAULT', position: 'TOP_LEFT' }, zoomControlStyle = zoomControlOpt.style || 'DEFAULT', zoomControlPosition = zoomControlOpt.position || 'TOP_LEFT', panControl = options.panControl || true, mapTypeControl = options.mapTypeControl || true, scaleControl = options.scaleControl || true, streetViewControl = options.streetViewControl || true, overviewMapControl = overviewMapControl || true, map_options = {}, map_base_options = { zoom: this.zoom, center: map_center, mapTypeId: mapType }, map_controls_options = { panControl: panControl, zoomControl: zoomControl, zoomControlOptions: { style: google.maps.ZoomControlStyle[zoomControlStyle], position: google.maps.ControlPosition[zoomControlPosition] }, mapTypeControl: mapTypeControl, scaleControl: scaleControl, streetViewControl: streetViewControl, overviewMapControl: overviewMapControl }; if (typeof(options.el) === 'string' || typeof(options.div) === 'string') { this.el = getElementById(container_id, options.context); } else { this.el = container_id; } if (typeof(this.el) === 'undefined' || this.el === null) { throw 'No element defined.'; } window.context_menu = window.context_menu || {}; window.context_menu[self.el.id] = {}; this.controls = []; this.overlays = []; this.layers = []; // array with kml/georss and fusiontables layers, can be as many this.singleLayers = {}; // object with the other layers, only one per layer this.markers = []; this.polylines = []; this.routes = []; this.polygons = []; this.infoWindow = null; this.overlay_el = null; this.zoom = options.zoom; this.registered_events = {}; this.el.style.width = options.width || this.el.scrollWidth || this.el.offsetWidth; this.el.style.height = options.height || this.el.scrollHeight || this.el.offsetHeight; google.maps.visualRefresh = options.enableNewStyle; for (i = 0; i < options_to_be_deleted.length; i++) { delete options[options_to_be_deleted[i]]; } if(options.disableDefaultUI != true) { map_base_options = extend_object(map_base_options, map_controls_options); } map_options = extend_object(map_base_options, options); for (i = 0; i < events_that_hide_context_menu.length; i++) { delete map_options[events_that_hide_context_menu[i]]; } for (i = 0; i < events_that_doesnt_hide_context_menu.length; i++) { delete map_options[events_that_doesnt_hide_context_menu[i]]; } this.map = new google.maps.Map(this.el, map_options); if (markerClustererFunction) { this.markerClusterer = markerClustererFunction.apply(this, [this.map]); } var buildContextMenuHTML = function(control, e) { var html = '', options = window.context_menu[self.el.id][control]; for (var i in options){ if (options.hasOwnProperty(i)) { var option = options[i]; html += '
  • ' + option.title + '
  • '; } } if (!getElementById('gmaps_context_menu')) return; var context_menu_element = getElementById('gmaps_context_menu'); context_menu_element.innerHTML = html; var context_menu_items = context_menu_element.getElementsByTagName('a'), context_menu_items_count = context_menu_items.length i; for (i = 0; i < context_menu_items_count; i++) { var context_menu_item = context_menu_items[i]; var assign_menu_item_action = function(ev){ ev.preventDefault(); options[this.id.replace(control + '_', '')].action.apply(self, [e]); self.hideContextMenu(); }; google.maps.event.clearListeners(context_menu_item, 'click'); google.maps.event.addDomListenerOnce(context_menu_item, 'click', assign_menu_item_action, false); } var position = findAbsolutePosition.apply(this, [self.el]), left = position[0] + e.pixel.x - 15, top = position[1] + e.pixel.y- 15; context_menu_element.style.left = left + "px"; context_menu_element.style.top = top + "px"; context_menu_element.style.display = 'block'; }; this.buildContextMenu = function(control, e) { if (control === 'marker') { e.pixel = {}; var overlay = new google.maps.OverlayView(); overlay.setMap(self.map); overlay.draw = function() { var projection = overlay.getProjection(), position = e.marker.getPosition(); e.pixel = projection.fromLatLngToContainerPixel(position); buildContextMenuHTML(control, e); }; } else { buildContextMenuHTML(control, e); } }; this.setContextMenu = function(options) { window.context_menu[self.el.id][options.control] = {}; var i, ul = doc.createElement('ul'); for (i in options.options) { if (options.options.hasOwnProperty(i)) { var option = options.options[i]; window.context_menu[self.el.id][options.control][option.name] = { title: option.title, action: option.action }; } } ul.id = 'gmaps_context_menu'; ul.style.display = 'none'; ul.style.position = 'absolute'; ul.style.minWidth = '100px'; ul.style.background = 'white'; ul.style.listStyle = 'none'; ul.style.padding = '8px'; ul.style.boxShadow = '2px 2px 6px #ccc'; doc.body.appendChild(ul); var context_menu_element = getElementById('gmaps_context_menu') google.maps.event.addDomListener(context_menu_element, 'mouseout', function(ev) { if (!ev.relatedTarget || !this.contains(ev.relatedTarget)) { window.setTimeout(function(){ context_menu_element.style.display = 'none'; }, 400); } }, false); }; this.hideContextMenu = function() { var context_menu_element = getElementById('gmaps_context_menu'); if (context_menu_element) { context_menu_element.style.display = 'none'; } }; var setupListener = function(object, name) { google.maps.event.addListener(object, name, function(e){ if (e == undefined) { e = this; } options[name].apply(this, [e]); self.hideContextMenu(); }); }; for (var ev = 0; ev < events_that_hide_context_menu.length; ev++) { var name = events_that_hide_context_menu[ev]; if (name in options) { setupListener(this.map, name); } } for (var ev = 0; ev < events_that_doesnt_hide_context_menu.length; ev++) { var name = events_that_doesnt_hide_context_menu[ev]; if (name in options) { setupListener(this.map, name); } } google.maps.event.addListener(this.map, 'rightclick', function(e) { if (options.rightclick) { options.rightclick.apply(this, [e]); } if(window.context_menu[self.el.id]['map'] != undefined) { self.buildContextMenu('map', e); } }); this.refresh = function() { google.maps.event.trigger(this.map, 'resize'); }; this.fitZoom = function() { var latLngs = [], markers_length = this.markers.length, i; for (i = 0; i < markers_length; i++) { latLngs.push(this.markers[i].getPosition()); } this.fitLatLngBounds(latLngs); }; this.fitLatLngBounds = function(latLngs) { var total = latLngs.length; var bounds = new google.maps.LatLngBounds(); for(var i=0; i < total; i++) { bounds.extend(latLngs[i]); } this.map.fitBounds(bounds); }; this.setCenter = function(lat, lng, callback) { this.map.panTo(new google.maps.LatLng(lat, lng)); if (callback) { callback(); } }; this.getElement = function() { return this.el; }; this.zoomIn = function(value) { value = value || 1; this.zoom = this.map.getZoom() + value; this.map.setZoom(this.zoom); }; this.zoomOut = function(value) { value = value || 1; this.zoom = this.map.getZoom() - value; this.map.setZoom(this.zoom); }; var native_methods = [], method; for (method in this.map) { if (typeof(this.map[method]) == 'function' && !this[method]) { native_methods.push(method); } } for (i=0; i < native_methods.length; i++) { (function(gmaps, scope, method_name) { gmaps[method_name] = function(){ return scope[method_name].apply(scope, arguments); }; })(this, this.map, native_methods[i]); } }; return GMaps; })(this); GMaps.prototype.createControl = function(options) { var control = document.createElement('div'); control.style.cursor = 'pointer'; control.style.fontFamily = 'Arial, sans-serif'; control.style.fontSize = '13px'; control.style.boxShadow = 'rgba(0, 0, 0, 0.398438) 0px 2px 4px'; for (var option in options.style) { control.style[option] = options.style[option]; } if (options.id) { control.id = options.id; } if (options.classes) { control.className = options.classes; } if (options.content) { control.innerHTML = options.content; } for (var ev in options.events) { (function(object, name) { google.maps.event.addDomListener(object, name, function(){ options.events[name].apply(this, [this]); }); })(control, ev); } control.index = 1; return control; }; GMaps.prototype.addControl = function(options) { var position = google.maps.ControlPosition[options.position.toUpperCase()]; delete options.position; var control = this.createControl(options); this.controls.push(control); this.map.controls[position].push(control); return control; }; GMaps.prototype.createMarker = function(options) { if (options.lat == undefined && options.lng == undefined && options.position == undefined) { throw 'No latitude or longitude defined.'; } var self = this, details = options.details, fences = options.fences, outside = options.outside, base_options = { position: new google.maps.LatLng(options.lat, options.lng), map: null }; delete options.lat; delete options.lng; delete options.fences; delete options.outside; var marker_options = extend_object(base_options, options), marker = new google.maps.Marker(marker_options); marker.fences = fences; if (options.infoWindow) { marker.infoWindow = new google.maps.InfoWindow(options.infoWindow); var info_window_events = ['closeclick', 'content_changed', 'domready', 'position_changed', 'zindex_changed']; for (var ev = 0; ev < info_window_events.length; ev++) { (function(object, name) { if (options.infoWindow[name]) { google.maps.event.addListener(object, name, function(e){ options.infoWindow[name].apply(this, [e]); }); } })(marker.infoWindow, info_window_events[ev]); } } var marker_events = ['animation_changed', 'clickable_changed', 'cursor_changed', 'draggable_changed', 'flat_changed', 'icon_changed', 'position_changed', 'shadow_changed', 'shape_changed', 'title_changed', 'visible_changed', 'zindex_changed']; var marker_events_with_mouse = ['dblclick', 'drag', 'dragend', 'dragstart', 'mousedown', 'mouseout', 'mouseover', 'mouseup']; for (var ev = 0; ev < marker_events.length; ev++) { (function(object, name) { if (options[name]) { google.maps.event.addListener(object, name, function(){ options[name].apply(this, [this]); }); } })(marker, marker_events[ev]); } for (var ev = 0; ev < marker_events_with_mouse.length; ev++) { (function(map, object, name) { if (options[name]) { google.maps.event.addListener(object, name, function(me){ if(!me.pixel){ me.pixel = map.getProjection().fromLatLngToPoint(me.latLng) } options[name].apply(this, [me]); }); } })(this.map, marker, marker_events_with_mouse[ev]); } google.maps.event.addListener(marker, 'click', function() { this.details = details; if (options.click) { options.click.apply(this, [this]); } if (marker.infoWindow) { self.hideInfoWindows(); marker.infoWindow.open(self.map, marker); } }); google.maps.event.addListener(marker, 'rightclick', function(e) { e.marker = this; if (options.rightclick) { options.rightclick.apply(this, [e]); } if (window.context_menu[self.el.id]['marker'] != undefined) { self.buildContextMenu('marker', e); } }); if (marker.fences) { google.maps.event.addListener(marker, 'dragend', function() { self.checkMarkerGeofence(marker, function(m, f) { outside(m, f); }); }); } return marker; }; GMaps.prototype.addMarker = function(options) { var marker; if(options.hasOwnProperty('gm_accessors_')) { // Native google.maps.Marker object marker = options; } else { if ((options.hasOwnProperty('lat') && options.hasOwnProperty('lng')) || options.position) { marker = this.createMarker(options); } else { throw 'No latitude or longitude defined.'; } } marker.setMap(this.map); if(this.markerClusterer) { this.markerClusterer.addMarker(marker); } this.markers.push(marker); GMaps.fire('marker_added', marker, this); return marker; }; GMaps.prototype.addMarkers = function(array) { for (var i = 0, marker; marker=array[i]; i++) { this.addMarker(marker); } return this.markers; }; GMaps.prototype.hideInfoWindows = function() { for (var i = 0, marker; marker = this.markers[i]; i++){ if (marker.infoWindow){ marker.infoWindow.close(); } } }; GMaps.prototype.removeMarker = function(marker) { for (var i = 0; i < this.markers.length; i++) { if (this.markers[i] === marker) { this.markers[i].setMap(null); this.markers.splice(i, 1); GMaps.fire('marker_removed', marker, this); break; } } return marker; }; GMaps.prototype.removeMarkers = function(collection) { var collection = (collection || this.markers); for (var i = 0;i < this.markers.length; i++) { if(this.markers[i] === collection[i]) { this.markers[i].setMap(null); } } var new_markers = []; for (var i = 0;i < this.markers.length; i++) { if(this.markers[i].getMap() != null) { new_markers.push(this.markers[i]); } } this.markers = new_markers; }; GMaps.prototype.drawOverlay = function(options) { var overlay = new google.maps.OverlayView(), auto_show = true; overlay.setMap(this.map); if (options.auto_show != null) { auto_show = options.auto_show; } overlay.onAdd = function() { var el = document.createElement('div'); el.style.borderStyle = "none"; el.style.borderWidth = "0px"; el.style.position = "absolute"; el.style.zIndex = 100; el.innerHTML = options.content; overlay.el = el; if (!options.layer) { options.layer = 'overlayLayer'; } var panes = this.getPanes(), overlayLayer = panes[options.layer], stop_overlay_events = ['contextmenu', 'DOMMouseScroll', 'dblclick', 'mousedown']; overlayLayer.appendChild(el); for (var ev = 0; ev < stop_overlay_events.length; ev++) { (function(object, name) { google.maps.event.addDomListener(object, name, function(e){ if (navigator.userAgent.toLowerCase().indexOf('msie') != -1 && document.all) { e.cancelBubble = true; e.returnValue = false; } else { e.stopPropagation(); } }); })(el, stop_overlay_events[ev]); } google.maps.event.trigger(this, 'ready'); }; overlay.draw = function() { var projection = this.getProjection(), pixel = projection.fromLatLngToDivPixel(new google.maps.LatLng(options.lat, options.lng)); options.horizontalOffset = options.horizontalOffset || 0; options.verticalOffset = options.verticalOffset || 0; var el = overlay.el, content = el.children[0], content_height = content.clientHeight, content_width = content.clientWidth; switch (options.verticalAlign) { case 'top': el.style.top = (pixel.y - content_height + options.verticalOffset) + 'px'; break; default: case 'middle': el.style.top = (pixel.y - (content_height / 2) + options.verticalOffset) + 'px'; break; case 'bottom': el.style.top = (pixel.y + options.verticalOffset) + 'px'; break; } switch (options.horizontalAlign) { case 'left': el.style.left = (pixel.x - content_width + options.horizontalOffset) + 'px'; break; default: case 'center': el.style.left = (pixel.x - (content_width / 2) + options.horizontalOffset) + 'px'; break; case 'right': el.style.left = (pixel.x + options.horizontalOffset) + 'px'; break; } el.style.display = auto_show ? 'block' : 'none'; if (!auto_show) { options.show.apply(this, [el]); } }; overlay.onRemove = function() { var el = overlay.el; if (options.remove) { options.remove.apply(this, [el]); } else { overlay.el.parentNode.removeChild(overlay.el); overlay.el = null; } }; this.overlays.push(overlay); return overlay; }; GMaps.prototype.removeOverlay = function(overlay) { for (var i = 0; i < this.overlays.length; i++) { if (this.overlays[i] === overlay) { this.overlays[i].setMap(null); this.overlays.splice(i, 1); break; } } }; GMaps.prototype.removeOverlays = function() { for (var i = 0, item; item = this.overlays[i]; i++) { item.setMap(null); } this.overlays = []; }; GMaps.prototype.drawPolyline = function(options) { var path = [], points = options.path; if (points.length) { if (points[0][0] === undefined) { path = points; } else { for (var i=0, latlng; latlng=points[i]; i++) { path.push(new google.maps.LatLng(latlng[0], latlng[1])); } } } var polyline_options = { map: this.map, path: path, strokeColor: options.strokeColor, strokeOpacity: options.strokeOpacity, strokeWeight: options.strokeWeight, geodesic: options.geodesic, clickable: true, editable: false, visible: true }; if (options.hasOwnProperty("clickable")) { polyline_options.clickable = options.clickable; } if (options.hasOwnProperty("editable")) { polyline_options.editable = options.editable; } if (options.hasOwnProperty("icons")) { polyline_options.icons = options.icons; } if (options.hasOwnProperty("zIndex")) { polyline_options.zIndex = options.zIndex; } var polyline = new google.maps.Polyline(polyline_options); var polyline_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick']; for (var ev = 0; ev < polyline_events.length; ev++) { (function(object, name) { if (options[name]) { google.maps.event.addListener(object, name, function(e){ options[name].apply(this, [e]); }); } })(polyline, polyline_events[ev]); } this.polylines.push(polyline); GMaps.fire('polyline_added', polyline, this); return polyline; }; GMaps.prototype.removePolyline = function(polyline) { for (var i = 0; i < this.polylines.length; i++) { if (this.polylines[i] === polyline) { this.polylines[i].setMap(null); this.polylines.splice(i, 1); GMaps.fire('polyline_removed', polyline, this); break; } } }; GMaps.prototype.removePolylines = function() { for (var i = 0, item; item = this.polylines[i]; i++) { item.setMap(null); } this.polylines = []; }; GMaps.prototype.drawCircle = function(options) { options = extend_object({ map: this.map, center: new google.maps.LatLng(options.lat, options.lng) }, options); delete options.lat; delete options.lng; var polygon = new google.maps.Circle(options), polygon_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick']; for (var ev = 0; ev < polygon_events.length; ev++) { (function(object, name) { if (options[name]) { google.maps.event.addListener(object, name, function(e){ options[name].apply(this, [e]); }); } })(polygon, polygon_events[ev]); } this.polygons.push(polygon); return polygon; }; GMaps.prototype.drawRectangle = function(options) { options = extend_object({ map: this.map }, options); var latLngBounds = new google.maps.LatLngBounds( new google.maps.LatLng(options.bounds[0][0], options.bounds[0][1]), new google.maps.LatLng(options.bounds[1][0], options.bounds[1][1]) ); options.bounds = latLngBounds; var polygon = new google.maps.Rectangle(options), polygon_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick']; for (var ev = 0; ev < polygon_events.length; ev++) { (function(object, name) { if (options[name]) { google.maps.event.addListener(object, name, function(e){ options[name].apply(this, [e]); }); } })(polygon, polygon_events[ev]); } this.polygons.push(polygon); return polygon; }; GMaps.prototype.drawPolygon = function(options) { var useGeoJSON = false; if(options.hasOwnProperty("useGeoJSON")) { useGeoJSON = options.useGeoJSON; } delete options.useGeoJSON; options = extend_object({ map: this.map }, options); if (useGeoJSON == false) { options.paths = [options.paths.slice(0)]; } if (options.paths.length > 0) { if (options.paths[0].length > 0) { options.paths = array_flat(array_map(options.paths, arrayToLatLng, useGeoJSON)); } } var polygon = new google.maps.Polygon(options), polygon_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick']; for (var ev = 0; ev < polygon_events.length; ev++) { (function(object, name) { if (options[name]) { google.maps.event.addListener(object, name, function(e){ options[name].apply(this, [e]); }); } })(polygon, polygon_events[ev]); } this.polygons.push(polygon); GMaps.fire('polygon_added', polygon, this); return polygon; }; GMaps.prototype.removePolygon = function(polygon) { for (var i = 0; i < this.polygons.length; i++) { if (this.polygons[i] === polygon) { this.polygons[i].setMap(null); this.polygons.splice(i, 1); GMaps.fire('polygon_removed', polygon, this); break; } } }; GMaps.prototype.removePolygons = function() { for (var i = 0, item; item = this.polygons[i]; i++) { item.setMap(null); } this.polygons = []; }; GMaps.prototype.getFromFusionTables = function(options) { var events = options.events; delete options.events; var fusion_tables_options = options, layer = new google.maps.FusionTablesLayer(fusion_tables_options); for (var ev in events) { (function(object, name) { google.maps.event.addListener(object, name, function(e) { events[name].apply(this, [e]); }); })(layer, ev); } this.layers.push(layer); return layer; }; GMaps.prototype.loadFromFusionTables = function(options) { var layer = this.getFromFusionTables(options); layer.setMap(this.map); return layer; }; GMaps.prototype.getFromKML = function(options) { var url = options.url, events = options.events; delete options.url; delete options.events; var kml_options = options, layer = new google.maps.KmlLayer(url, kml_options); for (var ev in events) { (function(object, name) { google.maps.event.addListener(object, name, function(e) { events[name].apply(this, [e]); }); })(layer, ev); } this.layers.push(layer); return layer; }; GMaps.prototype.loadFromKML = function(options) { var layer = this.getFromKML(options); layer.setMap(this.map); return layer; }; GMaps.prototype.addLayer = function(layerName, options) { //var default_layers = ['weather', 'clouds', 'traffic', 'transit', 'bicycling', 'panoramio', 'places']; options = options || {}; var layer; switch(layerName) { case 'weather': this.singleLayers.weather = layer = new google.maps.weather.WeatherLayer(); break; case 'clouds': this.singleLayers.clouds = layer = new google.maps.weather.CloudLayer(); break; case 'traffic': this.singleLayers.traffic = layer = new google.maps.TrafficLayer(); break; case 'transit': this.singleLayers.transit = layer = new google.maps.TransitLayer(); break; case 'bicycling': this.singleLayers.bicycling = layer = new google.maps.BicyclingLayer(); break; case 'panoramio': this.singleLayers.panoramio = layer = new google.maps.panoramio.PanoramioLayer(); layer.setTag(options.filter); delete options.filter; //click event if (options.click) { google.maps.event.addListener(layer, 'click', function(event) { options.click(event); delete options.click; }); } break; case 'places': this.singleLayers.places = layer = new google.maps.places.PlacesService(this.map); //search and nearbySearch callback, Both are the same if (options.search || options.nearbySearch) { var placeSearchRequest = { bounds : options.bounds || null, keyword : options.keyword || null, location : options.location || null, name : options.name || null, radius : options.radius || null, rankBy : options.rankBy || null, types : options.types || null }; if (options.search) { layer.search(placeSearchRequest, options.search); } if (options.nearbySearch) { layer.nearbySearch(placeSearchRequest, options.nearbySearch); } } //textSearch callback if (options.textSearch) { var textSearchRequest = { bounds : options.bounds || null, location : options.location || null, query : options.query || null, radius : options.radius || null }; layer.textSearch(textSearchRequest, options.textSearch); } break; } if (layer !== undefined) { if (typeof layer.setOptions == 'function') { layer.setOptions(options); } if (typeof layer.setMap == 'function') { layer.setMap(this.map); } return layer; } }; GMaps.prototype.removeLayer = function(layer) { if (typeof(layer) == "string" && this.singleLayers[layer] !== undefined) { this.singleLayers[layer].setMap(null); delete this.singleLayers[layer]; } else { for (var i = 0; i < this.layers.length; i++) { if (this.layers[i] === layer) { this.layers[i].setMap(null); this.layers.splice(i, 1); break; } } } }; var travelMode, unitSystem; GMaps.prototype.getRoutes = function(options) { switch (options.travelMode) { case 'bicycling': travelMode = google.maps.TravelMode.BICYCLING; break; case 'transit': travelMode = google.maps.TravelMode.TRANSIT; break; case 'driving': travelMode = google.maps.TravelMode.DRIVING; break; default: travelMode = google.maps.TravelMode.WALKING; break; } if (options.unitSystem === 'imperial') { unitSystem = google.maps.UnitSystem.IMPERIAL; } else { unitSystem = google.maps.UnitSystem.METRIC; } var base_options = { avoidHighways: false, avoidTolls: false, optimizeWaypoints: false, waypoints: [] }, request_options = extend_object(base_options, options); request_options.origin = /string/.test(typeof options.origin) ? options.origin : new google.maps.LatLng(options.origin[0], options.origin[1]); request_options.destination = /string/.test(typeof options.destination) ? options.destination : new google.maps.LatLng(options.destination[0], options.destination[1]); request_options.travelMode = travelMode; request_options.unitSystem = unitSystem; delete request_options.callback; var self = this, service = new google.maps.DirectionsService(); service.route(request_options, function(result, status) { if (status === google.maps.DirectionsStatus.OK) { for (var r in result.routes) { if (result.routes.hasOwnProperty(r)) { self.routes.push(result.routes[r]); } } } if (options.callback) { options.callback(self.routes); } }); }; GMaps.prototype.removeRoutes = function() { this.routes = []; }; GMaps.prototype.getElevations = function(options) { options = extend_object({ locations: [], path : false, samples : 256 }, options); if (options.locations.length > 0) { if (options.locations[0].length > 0) { options.locations = array_flat(array_map([options.locations], arrayToLatLng, false)); } } var callback = options.callback; delete options.callback; var service = new google.maps.ElevationService(); //location request if (!options.path) { delete options.path; delete options.samples; service.getElevationForLocations(options, function(result, status) { if (callback && typeof(callback) === "function") { callback(result, status); } }); //path request } else { var pathRequest = { path : options.locations, samples : options.samples }; service.getElevationAlongPath(pathRequest, function(result, status) { if (callback && typeof(callback) === "function") { callback(result, status); } }); } }; GMaps.prototype.cleanRoute = GMaps.prototype.removePolylines; GMaps.prototype.drawRoute = function(options) { var self = this; this.getRoutes({ origin: options.origin, destination: options.destination, travelMode: options.travelMode, waypoints: options.waypoints, unitSystem: options.unitSystem, callback: function(e) { if (e.length > 0) { self.drawPolyline({ path: e[e.length - 1].overview_path, strokeColor: options.strokeColor, strokeOpacity: options.strokeOpacity, strokeWeight: options.strokeWeight }); if (options.callback) { options.callback(e[e.length - 1]); } } } }); }; GMaps.prototype.travelRoute = function(options) { if (options.origin && options.destination) { this.getRoutes({ origin: options.origin, destination: options.destination, travelMode: options.travelMode, waypoints : options.waypoints, callback: function(e) { //start callback if (e.length > 0 && options.start) { options.start(e[e.length - 1]); } //step callback if (e.length > 0 && options.step) { var route = e[e.length - 1]; if (route.legs.length > 0) { var steps = route.legs[0].steps; for (var i=0, step; step=steps[i]; i++) { step.step_number = i; options.step(step, (route.legs[0].steps.length - 1)); } } } //end callback if (e.length > 0 && options.end) { options.end(e[e.length - 1]); } } }); } else if (options.route) { if (options.route.legs.length > 0) { var steps = options.route.legs[0].steps; for (var i=0, step; step=steps[i]; i++) { step.step_number = i; options.step(step); } } } }; GMaps.prototype.drawSteppedRoute = function(options) { var self = this; if (options.origin && options.destination) { this.getRoutes({ origin: options.origin, destination: options.destination, travelMode: options.travelMode, waypoints : options.waypoints, callback: function(e) { //start callback if (e.length > 0 && options.start) { options.start(e[e.length - 1]); } //step callback if (e.length > 0 && options.step) { var route = e[e.length - 1]; if (route.legs.length > 0) { var steps = route.legs[0].steps; for (var i=0, step; step=steps[i]; i++) { step.step_number = i; self.drawPolyline({ path: step.path, strokeColor: options.strokeColor, strokeOpacity: options.strokeOpacity, strokeWeight: options.strokeWeight }); options.step(step, (route.legs[0].steps.length - 1)); } } } //end callback if (e.length > 0 && options.end) { options.end(e[e.length - 1]); } } }); } else if (options.route) { if (options.route.legs.length > 0) { var steps = options.route.legs[0].steps; for (var i=0, step; step=steps[i]; i++) { step.step_number = i; self.drawPolyline({ path: step.path, strokeColor: options.strokeColor, strokeOpacity: options.strokeOpacity, strokeWeight: options.strokeWeight }); options.step(step); } } } }; GMaps.Route = function(options) { this.origin = options.origin; this.destination = options.destination; this.waypoints = options.waypoints; this.map = options.map; this.route = options.route; this.step_count = 0; this.steps = this.route.legs[0].steps; this.steps_length = this.steps.length; this.polyline = this.map.drawPolyline({ path: new google.maps.MVCArray(), strokeColor: options.strokeColor, strokeOpacity: options.strokeOpacity, strokeWeight: options.strokeWeight }).getPath(); }; GMaps.Route.prototype.getRoute = function(options) { var self = this; this.map.getRoutes({ origin : this.origin, destination : this.destination, travelMode : options.travelMode, waypoints : this.waypoints || [], callback : function() { self.route = e[0]; if (options.callback) { options.callback.call(self); } } }); }; GMaps.Route.prototype.back = function() { if (this.step_count > 0) { this.step_count--; var path = this.route.legs[0].steps[this.step_count].path; for (var p in path){ if (path.hasOwnProperty(p)){ this.polyline.pop(); } } } }; GMaps.Route.prototype.forward = function() { if (this.step_count < this.steps_length) { var path = this.route.legs[0].steps[this.step_count].path; for (var p in path){ if (path.hasOwnProperty(p)){ this.polyline.push(path[p]); } } this.step_count++; } }; GMaps.prototype.checkGeofence = function(lat, lng, fence) { return fence.containsLatLng(new google.maps.LatLng(lat, lng)); }; GMaps.prototype.checkMarkerGeofence = function(marker, outside_callback) { if (marker.fences) { for (var i = 0, fence; fence = marker.fences[i]; i++) { var pos = marker.getPosition(); if (!this.checkGeofence(pos.lat(), pos.lng(), fence)) { outside_callback(marker, fence); } } } }; GMaps.prototype.toImage = function(options) { var options = options || {}, static_map_options = {}; static_map_options['size'] = options['size'] || [this.el.clientWidth, this.el.clientHeight]; static_map_options['lat'] = this.getCenter().lat(); static_map_options['lng'] = this.getCenter().lng(); if (this.markers.length > 0) { static_map_options['markers'] = []; for (var i = 0; i < this.markers.length; i++) { static_map_options['markers'].push({ lat: this.markers[i].getPosition().lat(), lng: this.markers[i].getPosition().lng() }); } } if (this.polylines.length > 0) { var polyline = this.polylines[0]; static_map_options['polyline'] = {}; static_map_options['polyline']['path'] = google.maps.geometry.encoding.encodePath(polyline.getPath()); static_map_options['polyline']['strokeColor'] = polyline.strokeColor static_map_options['polyline']['strokeOpacity'] = polyline.strokeOpacity static_map_options['polyline']['strokeWeight'] = polyline.strokeWeight } return GMaps.staticMapURL(static_map_options); }; GMaps.staticMapURL = function(options){ var parameters = [], data, static_root = 'http://maps.googleapis.com/maps/api/staticmap'; if (options.url) { static_root = options.url; delete options.url; } static_root += '?'; var markers = options.markers; delete options.markers; if (!markers && options.marker) { markers = [options.marker]; delete options.marker; } var polyline = options.polyline; delete options.polyline; /** Map options **/ if (options.center) { parameters.push('center=' + options.center); delete options.center; } else if (options.address) { parameters.push('center=' + options.address); delete options.address; } else if (options.lat) { parameters.push(['center=', options.lat, ',', options.lng].join('')); delete options.lat; delete options.lng; } else if (options.visible) { var visible = encodeURI(options.visible.join('|')); parameters.push('visible=' + visible); } var size = options.size; if (size) { if (size.join) { size = size.join('x'); } delete options.size; } else { size = '630x300'; } parameters.push('size=' + size); if (!options.zoom) { options.zoom = 15; } var sensor = options.hasOwnProperty('sensor') ? !!options.sensor : true; delete options.sensor; parameters.push('sensor=' + sensor); for (var param in options) { if (options.hasOwnProperty(param)) { parameters.push(param + '=' + options[param]); } } /** Markers **/ if (markers) { var marker, loc; for (var i=0; data=markers[i]; i++) { marker = []; if (data.size && data.size !== 'normal') { marker.push('size:' + data.size); } else if (data.icon) { marker.push('icon:' + encodeURI(data.icon)); } if (data.color) { marker.push('color:' + data.color.replace('#', '0x')); } if (data.label) { marker.push('label:' + data.label[0].toUpperCase()); } loc = (data.address ? data.address : data.lat + ',' + data.lng); if (marker.length || i === 0) { marker.push(loc); marker = marker.join('|'); parameters.push('markers=' + encodeURI(marker)); } // New marker without styles else { marker = parameters.pop() + encodeURI('|' + loc); parameters.push(marker); } } } /** Polylines **/ function parseColor(color, opacity) { if (color[0] === '#'){ color = color.replace('#', '0x'); if (opacity) { opacity = parseFloat(opacity); opacity = Math.min(1, Math.max(opacity, 0)); if (opacity === 0) { return '0x00000000'; } opacity = (opacity * 255).toString(16); if (opacity.length === 1) { opacity += opacity; } color = color.slice(0,8) + opacity; } } return color; } if (polyline) { data = polyline; polyline = []; if (data.strokeWeight) { polyline.push('weight:' + parseInt(data.strokeWeight, 10)); } if (data.strokeColor) { var color = parseColor(data.strokeColor, data.strokeOpacity); polyline.push('color:' + color); } if (data.fillColor) { var fillcolor = parseColor(data.fillColor, data.fillOpacity); polyline.push('fillcolor:' + fillcolor); } var path = data.path; if (path.join) { for (var j=0, pos; pos=path[j]; j++) { polyline.push(pos.join(',')); } } else { polyline.push('enc:' + path); } polyline = polyline.join('|'); parameters.push('path=' + encodeURI(polyline)); } parameters = parameters.join('&'); return static_root + parameters; }; GMaps.prototype.addMapType = function(mapTypeId, options) { if (options.hasOwnProperty("getTileUrl") && typeof(options["getTileUrl"]) == "function") { options.tileSize = options.tileSize || new google.maps.Size(256, 256); var mapType = new google.maps.ImageMapType(options); this.map.mapTypes.set(mapTypeId, mapType); } else { throw "'getTileUrl' function required."; } }; GMaps.prototype.addOverlayMapType = function(options) { if (options.hasOwnProperty("getTile") && typeof(options["getTile"]) == "function") { var overlayMapTypeIndex = options.index; delete options.index; this.map.overlayMapTypes.insertAt(overlayMapTypeIndex, options); } else { throw "'getTile' function required."; } }; GMaps.prototype.removeOverlayMapType = function(overlayMapTypeIndex) { this.map.overlayMapTypes.removeAt(overlayMapTypeIndex); }; GMaps.prototype.addStyle = function(options) { var styledMapType = new google.maps.StyledMapType(options.styles, options.styledMapName); this.map.mapTypes.set(options.mapTypeId, styledMapType); }; GMaps.prototype.setStyle = function(mapTypeId) { this.map.setMapTypeId(mapTypeId); }; GMaps.prototype.createPanorama = function(streetview_options) { if (!streetview_options.hasOwnProperty('lat') || !streetview_options.hasOwnProperty('lng')) { streetview_options.lat = this.getCenter().lat(); streetview_options.lng = this.getCenter().lng(); } this.panorama = GMaps.createPanorama(streetview_options); this.map.setStreetView(this.panorama); return this.panorama; }; GMaps.createPanorama = function(options) { var el = getElementById(options.el, options.context); options.position = new google.maps.LatLng(options.lat, options.lng); delete options.el; delete options.context; delete options.lat; delete options.lng; var streetview_events = ['closeclick', 'links_changed', 'pano_changed', 'position_changed', 'pov_changed', 'resize', 'visible_changed'], streetview_options = extend_object({visible : true}, options); for (var i = 0; i < streetview_events.length; i++) { delete streetview_options[streetview_events[i]]; } var panorama = new google.maps.StreetViewPanorama(el, streetview_options); for (var i = 0; i < streetview_events.length; i++) { (function(object, name) { if (options[name]) { google.maps.event.addListener(object, name, function(){ options[name].apply(this); }); } })(panorama, streetview_events[i]); } return panorama; }; GMaps.prototype.on = function(event_name, handler) { return GMaps.on(event_name, this, handler); }; GMaps.prototype.off = function(event_name) { GMaps.off(event_name, this); }; GMaps.custom_events = ['marker_added', 'marker_removed', 'polyline_added', 'polyline_removed', 'polygon_added', 'polygon_removed', 'geolocated', 'geolocation_failed']; GMaps.on = function(event_name, object, handler) { if (GMaps.custom_events.indexOf(event_name) == -1) { return google.maps.event.addListener(object, event_name, handler); } else { var registered_event = { handler : handler, eventName : event_name }; object.registered_events[event_name] = object.registered_events[event_name] || []; object.registered_events[event_name].push(registered_event); return registered_event; } }; GMaps.off = function(event_name, object) { if (GMaps.custom_events.indexOf(event_name) == -1) { google.maps.event.clearListeners(object, event_name); } else { object.registered_events[event_name] = []; } }; GMaps.fire = function(event_name, object, scope) { if (GMaps.custom_events.indexOf(event_name) == -1) { google.maps.event.trigger(object, event_name, Array.prototype.slice.apply(arguments).slice(2)); } else { if(event_name in scope.registered_events) { var firing_events = scope.registered_events[event_name]; for(var i = 0; i < firing_events.length; i++) { (function(handler, scope, object) { handler.apply(scope, [object]); })(firing_events[i]['handler'], scope, object); } } } }; GMaps.geolocate = function(options) { var complete_callback = options.always || options.complete; if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(position) { options.success(position); if (complete_callback) { complete_callback(); } }, function(error) { options.error(error); if (complete_callback) { complete_callback(); } }, options.options); } else { options.not_supported(); if (complete_callback) { complete_callback(); } } }; GMaps.geocode = function(options) { this.geocoder = new google.maps.Geocoder(); var callback = options.callback; if (options.hasOwnProperty('lat') && options.hasOwnProperty('lng')) { options.latLng = new google.maps.LatLng(options.lat, options.lng); } delete options.lat; delete options.lng; delete options.callback; this.geocoder.geocode(options, function(results, status) { callback(results, status); }); }; //========================== // Polygon containsLatLng // https://github.com/tparkin/Google-Maps-Point-in-Polygon // Poygon getBounds extension - google-maps-extensions // http://code.google.com/p/google-maps-extensions/source/browse/google.maps.Polygon.getBounds.js if (!google.maps.Polygon.prototype.getBounds) { google.maps.Polygon.prototype.getBounds = function(latLng) { var bounds = new google.maps.LatLngBounds(); var paths = this.getPaths(); var path; for (var p = 0; p < paths.getLength(); p++) { path = paths.getAt(p); for (var i = 0; i < path.getLength(); i++) { bounds.extend(path.getAt(i)); } } return bounds; }; } if (!google.maps.Polygon.prototype.containsLatLng) { // Polygon containsLatLng - method to determine if a latLng is within a polygon google.maps.Polygon.prototype.containsLatLng = function(latLng) { // Exclude points outside of bounds as there is no way they are in the poly var bounds = this.getBounds(); if (bounds !== null && !bounds.contains(latLng)) { return false; } // Raycast point in polygon method var inPoly = false; var numPaths = this.getPaths().getLength(); for (var p = 0; p < numPaths; p++) { var path = this.getPaths().getAt(p); var numPoints = path.getLength(); var j = numPoints - 1; for (var i = 0; i < numPoints; i++) { var vertex1 = path.getAt(i); var vertex2 = path.getAt(j); if (vertex1.lng() < latLng.lng() && vertex2.lng() >= latLng.lng() || vertex2.lng() < latLng.lng() && vertex1.lng() >= latLng.lng()) { if (vertex1.lat() + (latLng.lng() - vertex1.lng()) / (vertex2.lng() - vertex1.lng()) * (vertex2.lat() - vertex1.lat()) < latLng.lat()) { inPoly = !inPoly; } } j = i; } } return inPoly; }; } google.maps.LatLngBounds.prototype.containsLatLng = function(latLng) { return this.contains(latLng); }; google.maps.Marker.prototype.setFences = function(fences) { this.fences = fences; }; google.maps.Marker.prototype.addFence = function(fence) { this.fences.push(fence); }; google.maps.Marker.prototype.getId = function() { return this['__gm_id']; }; //========================== // Array indexOf // https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf if (!Array.prototype.indexOf) { Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) { "use strict"; if (this == null) { throw new TypeError(); } var t = Object(this); var len = t.length >>> 0; if (len === 0) { return -1; } var n = 0; if (arguments.length > 1) { n = Number(arguments[1]); if (n != n) { // shortcut for verifying if it's NaN n = 0; } else if (n != 0 && n != Infinity && n != -Infinity) { n = (n > 0 || -1) * Math.floor(Math.abs(n)); } } if (n >= len) { return -1; } var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); for (; k < len; k++) { if (k in t && t[k] === searchElement) { return k; } } return -1; } }assets/plugins/gmaps/bower.json000064400000000102152510437730012647 0ustar00{ "name": "gmaps", "version": "0.4.5", "main": "gmaps.js" } assets/plugins/gmaps/lib/gmaps.streetview.js000064400000002526152510437730015265 0ustar00GMaps.prototype.createPanorama = function(streetview_options) { if (!streetview_options.hasOwnProperty('lat') || !streetview_options.hasOwnProperty('lng')) { streetview_options.lat = this.getCenter().lat(); streetview_options.lng = this.getCenter().lng(); } this.panorama = GMaps.createPanorama(streetview_options); this.map.setStreetView(this.panorama); return this.panorama; }; GMaps.createPanorama = function(options) { var el = getElementById(options.el, options.context); options.position = new google.maps.LatLng(options.lat, options.lng); delete options.el; delete options.context; delete options.lat; delete options.lng; var streetview_events = ['closeclick', 'links_changed', 'pano_changed', 'position_changed', 'pov_changed', 'resize', 'visible_changed'], streetview_options = extend_object({visible : true}, options); for (var i = 0; i < streetview_events.length; i++) { delete streetview_options[streetview_events[i]]; } var panorama = new google.maps.StreetViewPanorama(el, streetview_options); for (var i = 0; i < streetview_events.length; i++) { (function(object, name) { if (options[name]) { google.maps.event.addListener(object, name, function(){ options[name].apply(this); }); } })(panorama, streetview_events[i]); } return panorama; }; assets/plugins/gmaps/lib/gmaps.controls.js000064400000002165152510437730014726 0ustar00GMaps.prototype.createControl = function(options) { var control = document.createElement('div'); control.style.cursor = 'pointer'; control.style.fontFamily = 'Arial, sans-serif'; control.style.fontSize = '13px'; control.style.boxShadow = 'rgba(0, 0, 0, 0.398438) 0px 2px 4px'; for (var option in options.style) { control.style[option] = options.style[option]; } if (options.id) { control.id = options.id; } if (options.classes) { control.className = options.classes; } if (options.content) { control.innerHTML = options.content; } for (var ev in options.events) { (function(object, name) { google.maps.event.addDomListener(object, name, function(){ options.events[name].apply(this, [this]); }); })(control, ev); } control.index = 1; return control; }; GMaps.prototype.addControl = function(options) { var position = google.maps.ControlPosition[options.position.toUpperCase()]; delete options.position; var control = this.createControl(options); this.controls.push(control); this.map.controls[position].push(control); return control; }; assets/plugins/gmaps/lib/gmaps.map_types.js000064400000001560152510437730015062 0ustar00GMaps.prototype.addMapType = function(mapTypeId, options) { if (options.hasOwnProperty("getTileUrl") && typeof(options["getTileUrl"]) == "function") { options.tileSize = options.tileSize || new google.maps.Size(256, 256); var mapType = new google.maps.ImageMapType(options); this.map.mapTypes.set(mapTypeId, mapType); } else { throw "'getTileUrl' function required."; } }; GMaps.prototype.addOverlayMapType = function(options) { if (options.hasOwnProperty("getTile") && typeof(options["getTile"]) == "function") { var overlayMapTypeIndex = options.index; delete options.index; this.map.overlayMapTypes.insertAt(overlayMapTypeIndex, options); } else { throw "'getTile' function required."; } }; GMaps.prototype.removeOverlayMapType = function(overlayMapTypeIndex) { this.map.overlayMapTypes.removeAt(overlayMapTypeIndex); }; assets/plugins/gmaps/lib/gmaps.geofences.js000064400000000701152510437730015013 0ustar00GMaps.prototype.checkGeofence = function(lat, lng, fence) { return fence.containsLatLng(new google.maps.LatLng(lat, lng)); }; GMaps.prototype.checkMarkerGeofence = function(marker, outside_callback) { if (marker.fences) { for (var i = 0, fence; fence = marker.fences[i]; i++) { var pos = marker.getPosition(); if (!this.checkGeofence(pos.lat(), pos.lng(), fence)) { outside_callback(marker, fence); } } } }; assets/plugins/gmaps/lib/gmaps.native_extensions.js000064400000006260152510437730016630 0ustar00//========================== // Polygon containsLatLng // https://github.com/tparkin/Google-Maps-Point-in-Polygon // Poygon getBounds extension - google-maps-extensions // http://code.google.com/p/google-maps-extensions/source/browse/google.maps.Polygon.getBounds.js if (!google.maps.Polygon.prototype.getBounds) { google.maps.Polygon.prototype.getBounds = function(latLng) { var bounds = new google.maps.LatLngBounds(); var paths = this.getPaths(); var path; for (var p = 0; p < paths.getLength(); p++) { path = paths.getAt(p); for (var i = 0; i < path.getLength(); i++) { bounds.extend(path.getAt(i)); } } return bounds; }; } if (!google.maps.Polygon.prototype.containsLatLng) { // Polygon containsLatLng - method to determine if a latLng is within a polygon google.maps.Polygon.prototype.containsLatLng = function(latLng) { // Exclude points outside of bounds as there is no way they are in the poly var bounds = this.getBounds(); if (bounds !== null && !bounds.contains(latLng)) { return false; } // Raycast point in polygon method var inPoly = false; var numPaths = this.getPaths().getLength(); for (var p = 0; p < numPaths; p++) { var path = this.getPaths().getAt(p); var numPoints = path.getLength(); var j = numPoints - 1; for (var i = 0; i < numPoints; i++) { var vertex1 = path.getAt(i); var vertex2 = path.getAt(j); if (vertex1.lng() < latLng.lng() && vertex2.lng() >= latLng.lng() || vertex2.lng() < latLng.lng() && vertex1.lng() >= latLng.lng()) { if (vertex1.lat() + (latLng.lng() - vertex1.lng()) / (vertex2.lng() - vertex1.lng()) * (vertex2.lat() - vertex1.lat()) < latLng.lat()) { inPoly = !inPoly; } } j = i; } } return inPoly; }; } google.maps.LatLngBounds.prototype.containsLatLng = function(latLng) { return this.contains(latLng); }; google.maps.Marker.prototype.setFences = function(fences) { this.fences = fences; }; google.maps.Marker.prototype.addFence = function(fence) { this.fences.push(fence); }; google.maps.Marker.prototype.getId = function() { return this['__gm_id']; }; //========================== // Array indexOf // https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf if (!Array.prototype.indexOf) { Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) { "use strict"; if (this == null) { throw new TypeError(); } var t = Object(this); var len = t.length >>> 0; if (len === 0) { return -1; } var n = 0; if (arguments.length > 1) { n = Number(arguments[1]); if (n != n) { // shortcut for verifying if it's NaN n = 0; } else if (n != 0 && n != Infinity && n != -Infinity) { n = (n > 0 || -1) * Math.floor(Math.abs(n)); } } if (n >= len) { return -1; } var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); for (; k < len; k++) { if (k in t && t[k] === searchElement) { return k; } } return -1; } }assets/plugins/gmaps/lib/gmaps.utils.js000064400000001750152510437730014222 0ustar00GMaps.geolocate = function(options) { var complete_callback = options.always || options.complete; if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(position) { options.success(position); if (complete_callback) { complete_callback(); } }, function(error) { options.error(error); if (complete_callback) { complete_callback(); } }, options.options); } else { options.not_supported(); if (complete_callback) { complete_callback(); } } }; GMaps.geocode = function(options) { this.geocoder = new google.maps.Geocoder(); var callback = options.callback; if (options.hasOwnProperty('lat') && options.hasOwnProperty('lng')) { options.latLng = new google.maps.LatLng(options.lat, options.lng); } delete options.lat; delete options.lng; delete options.callback; this.geocoder.geocode(options, function(results, status) { callback(results, status); }); }; assets/plugins/gmaps/lib/gmaps.routes.js000064400000017205152510437730014405 0ustar00var travelMode, unitSystem; GMaps.prototype.getRoutes = function(options) { switch (options.travelMode) { case 'bicycling': travelMode = google.maps.TravelMode.BICYCLING; break; case 'transit': travelMode = google.maps.TravelMode.TRANSIT; break; case 'driving': travelMode = google.maps.TravelMode.DRIVING; break; default: travelMode = google.maps.TravelMode.WALKING; break; } if (options.unitSystem === 'imperial') { unitSystem = google.maps.UnitSystem.IMPERIAL; } else { unitSystem = google.maps.UnitSystem.METRIC; } var base_options = { avoidHighways: false, avoidTolls: false, optimizeWaypoints: false, waypoints: [] }, request_options = extend_object(base_options, options); request_options.origin = /string/.test(typeof options.origin) ? options.origin : new google.maps.LatLng(options.origin[0], options.origin[1]); request_options.destination = /string/.test(typeof options.destination) ? options.destination : new google.maps.LatLng(options.destination[0], options.destination[1]); request_options.travelMode = travelMode; request_options.unitSystem = unitSystem; delete request_options.callback; var self = this, service = new google.maps.DirectionsService(); service.route(request_options, function(result, status) { if (status === google.maps.DirectionsStatus.OK) { for (var r in result.routes) { if (result.routes.hasOwnProperty(r)) { self.routes.push(result.routes[r]); } } } if (options.callback) { options.callback(self.routes); } }); }; GMaps.prototype.removeRoutes = function() { this.routes = []; }; GMaps.prototype.getElevations = function(options) { options = extend_object({ locations: [], path : false, samples : 256 }, options); if (options.locations.length > 0) { if (options.locations[0].length > 0) { options.locations = array_flat(array_map([options.locations], arrayToLatLng, false)); } } var callback = options.callback; delete options.callback; var service = new google.maps.ElevationService(); //location request if (!options.path) { delete options.path; delete options.samples; service.getElevationForLocations(options, function(result, status) { if (callback && typeof(callback) === "function") { callback(result, status); } }); //path request } else { var pathRequest = { path : options.locations, samples : options.samples }; service.getElevationAlongPath(pathRequest, function(result, status) { if (callback && typeof(callback) === "function") { callback(result, status); } }); } }; GMaps.prototype.cleanRoute = GMaps.prototype.removePolylines; GMaps.prototype.drawRoute = function(options) { var self = this; this.getRoutes({ origin: options.origin, destination: options.destination, travelMode: options.travelMode, waypoints: options.waypoints, unitSystem: options.unitSystem, callback: function(e) { if (e.length > 0) { self.drawPolyline({ path: e[e.length - 1].overview_path, strokeColor: options.strokeColor, strokeOpacity: options.strokeOpacity, strokeWeight: options.strokeWeight }); if (options.callback) { options.callback(e[e.length - 1]); } } } }); }; GMaps.prototype.travelRoute = function(options) { if (options.origin && options.destination) { this.getRoutes({ origin: options.origin, destination: options.destination, travelMode: options.travelMode, waypoints : options.waypoints, callback: function(e) { //start callback if (e.length > 0 && options.start) { options.start(e[e.length - 1]); } //step callback if (e.length > 0 && options.step) { var route = e[e.length - 1]; if (route.legs.length > 0) { var steps = route.legs[0].steps; for (var i=0, step; step=steps[i]; i++) { step.step_number = i; options.step(step, (route.legs[0].steps.length - 1)); } } } //end callback if (e.length > 0 && options.end) { options.end(e[e.length - 1]); } } }); } else if (options.route) { if (options.route.legs.length > 0) { var steps = options.route.legs[0].steps; for (var i=0, step; step=steps[i]; i++) { step.step_number = i; options.step(step); } } } }; GMaps.prototype.drawSteppedRoute = function(options) { var self = this; if (options.origin && options.destination) { this.getRoutes({ origin: options.origin, destination: options.destination, travelMode: options.travelMode, waypoints : options.waypoints, callback: function(e) { //start callback if (e.length > 0 && options.start) { options.start(e[e.length - 1]); } //step callback if (e.length > 0 && options.step) { var route = e[e.length - 1]; if (route.legs.length > 0) { var steps = route.legs[0].steps; for (var i=0, step; step=steps[i]; i++) { step.step_number = i; self.drawPolyline({ path: step.path, strokeColor: options.strokeColor, strokeOpacity: options.strokeOpacity, strokeWeight: options.strokeWeight }); options.step(step, (route.legs[0].steps.length - 1)); } } } //end callback if (e.length > 0 && options.end) { options.end(e[e.length - 1]); } } }); } else if (options.route) { if (options.route.legs.length > 0) { var steps = options.route.legs[0].steps; for (var i=0, step; step=steps[i]; i++) { step.step_number = i; self.drawPolyline({ path: step.path, strokeColor: options.strokeColor, strokeOpacity: options.strokeOpacity, strokeWeight: options.strokeWeight }); options.step(step); } } } }; GMaps.Route = function(options) { this.origin = options.origin; this.destination = options.destination; this.waypoints = options.waypoints; this.map = options.map; this.route = options.route; this.step_count = 0; this.steps = this.route.legs[0].steps; this.steps_length = this.steps.length; this.polyline = this.map.drawPolyline({ path: new google.maps.MVCArray(), strokeColor: options.strokeColor, strokeOpacity: options.strokeOpacity, strokeWeight: options.strokeWeight }).getPath(); }; GMaps.Route.prototype.getRoute = function(options) { var self = this; this.map.getRoutes({ origin : this.origin, destination : this.destination, travelMode : options.travelMode, waypoints : this.waypoints || [], callback : function() { self.route = e[0]; if (options.callback) { options.callback.call(self); } } }); }; GMaps.Route.prototype.back = function() { if (this.step_count > 0) { this.step_count--; var path = this.route.legs[0].steps[this.step_count].path; for (var p in path){ if (path.hasOwnProperty(p)){ this.polyline.pop(); } } } }; GMaps.Route.prototype.forward = function() { if (this.step_count < this.steps_length) { var path = this.route.legs[0].steps[this.step_count].path; for (var p in path){ if (path.hasOwnProperty(p)){ this.polyline.push(path[p]); } } this.step_count++; } }; assets/plugins/gmaps/lib/gmaps.core.js000064400000030555152510437730014017 0ustar00if (!(typeof window.google === 'object' && window.google.maps)) { throw 'Google Maps API is required. Please register the following JavaScript library http://maps.google.com/maps/api/js?sensor=true.' } var extend_object = function(obj, new_obj) { var name; if (obj === new_obj) { return obj; } for (name in new_obj) { obj[name] = new_obj[name]; } return obj; }; var replace_object = function(obj, replace) { var name; if (obj === replace) { return obj; } for (name in replace) { if (obj[name] != undefined) { obj[name] = replace[name]; } } return obj; }; var array_map = function(array, callback) { var original_callback_params = Array.prototype.slice.call(arguments, 2), array_return = [], array_length = array.length, i; if (Array.prototype.map && array.map === Array.prototype.map) { array_return = Array.prototype.map.call(array, function(item) { callback_params = original_callback_params; callback_params.splice(0, 0, item); return callback.apply(this, callback_params); }); } else { for (i = 0; i < array_length; i++) { callback_params = original_callback_params; callback_params.splice(0, 0, array[i]); array_return.push(callback.apply(this, callback_params)); } } return array_return; }; var array_flat = function(array) { var new_array = [], i; for (i = 0; i < array.length; i++) { new_array = new_array.concat(array[i]); } return new_array; }; var coordsToLatLngs = function(coords, useGeoJSON) { var first_coord = coords[0], second_coord = coords[1]; if (useGeoJSON) { first_coord = coords[1]; second_coord = coords[0]; } return new google.maps.LatLng(first_coord, second_coord); }; var arrayToLatLng = function(coords, useGeoJSON) { var i; for (i = 0; i < coords.length; i++) { if (coords[i].length > 0 && typeof(coords[i][0]) != "number") { coords[i] = arrayToLatLng(coords[i], useGeoJSON); } else { coords[i] = coordsToLatLngs(coords[i], useGeoJSON); } } return coords; }; var getElementById = function(id, context) { var element, id = id.replace('#', ''); if ('jQuery' in this && context) { element = $("#" + id, context)[0]; } else { element = document.getElementById(id); }; return element; }; var findAbsolutePosition = function(obj) { var curleft = 0, curtop = 0; if (obj.offsetParent) { do { curleft += obj.offsetLeft; curtop += obj.offsetTop; } while (obj = obj.offsetParent); } return [curleft, curtop]; }; var GMaps = (function(global) { "use strict"; var doc = document; var GMaps = function(options) { options.zoom = options.zoom || 15; options.mapType = options.mapType || 'roadmap'; var self = this, i, events_that_hide_context_menu = ['bounds_changed', 'center_changed', 'click', 'dblclick', 'drag', 'dragend', 'dragstart', 'idle', 'maptypeid_changed', 'projection_changed', 'resize', 'tilesloaded', 'zoom_changed'], events_that_doesnt_hide_context_menu = ['mousemove', 'mouseout', 'mouseover'], options_to_be_deleted = ['el', 'lat', 'lng', 'mapType', 'width', 'height', 'markerClusterer', 'enableNewStyle'], container_id = options.el || options.div, markerClustererFunction = options.markerClusterer, mapType = google.maps.MapTypeId[options.mapType.toUpperCase()], map_center = new google.maps.LatLng(options.lat, options.lng), zoomControl = options.zoomControl || true, zoomControlOpt = options.zoomControlOpt || { style: 'DEFAULT', position: 'TOP_LEFT' }, zoomControlStyle = zoomControlOpt.style || 'DEFAULT', zoomControlPosition = zoomControlOpt.position || 'TOP_LEFT', panControl = options.panControl || true, mapTypeControl = options.mapTypeControl || true, scaleControl = options.scaleControl || true, streetViewControl = options.streetViewControl || true, overviewMapControl = overviewMapControl || true, map_options = {}, map_base_options = { zoom: this.zoom, center: map_center, mapTypeId: mapType }, map_controls_options = { panControl: panControl, zoomControl: zoomControl, zoomControlOptions: { style: google.maps.ZoomControlStyle[zoomControlStyle], position: google.maps.ControlPosition[zoomControlPosition] }, mapTypeControl: mapTypeControl, scaleControl: scaleControl, streetViewControl: streetViewControl, overviewMapControl: overviewMapControl }; if (typeof(options.el) === 'string' || typeof(options.div) === 'string') { this.el = getElementById(container_id, options.context); } else { this.el = container_id; } if (typeof(this.el) === 'undefined' || this.el === null) { throw 'No element defined.'; } window.context_menu = window.context_menu || {}; window.context_menu[self.el.id] = {}; this.controls = []; this.overlays = []; this.layers = []; // array with kml/georss and fusiontables layers, can be as many this.singleLayers = {}; // object with the other layers, only one per layer this.markers = []; this.polylines = []; this.routes = []; this.polygons = []; this.infoWindow = null; this.overlay_el = null; this.zoom = options.zoom; this.registered_events = {}; this.el.style.width = options.width || this.el.scrollWidth || this.el.offsetWidth; this.el.style.height = options.height || this.el.scrollHeight || this.el.offsetHeight; google.maps.visualRefresh = options.enableNewStyle; for (i = 0; i < options_to_be_deleted.length; i++) { delete options[options_to_be_deleted[i]]; } if(options.disableDefaultUI != true) { map_base_options = extend_object(map_base_options, map_controls_options); } map_options = extend_object(map_base_options, options); for (i = 0; i < events_that_hide_context_menu.length; i++) { delete map_options[events_that_hide_context_menu[i]]; } for (i = 0; i < events_that_doesnt_hide_context_menu.length; i++) { delete map_options[events_that_doesnt_hide_context_menu[i]]; } this.map = new google.maps.Map(this.el, map_options); if (markerClustererFunction) { this.markerClusterer = markerClustererFunction.apply(this, [this.map]); } var buildContextMenuHTML = function(control, e) { var html = '', options = window.context_menu[self.el.id][control]; for (var i in options){ if (options.hasOwnProperty(i)) { var option = options[i]; html += '
  • ' + option.title + '
  • '; } } if (!getElementById('gmaps_context_menu')) return; var context_menu_element = getElementById('gmaps_context_menu'); context_menu_element.innerHTML = html; var context_menu_items = context_menu_element.getElementsByTagName('a'), context_menu_items_count = context_menu_items.length i; for (i = 0; i < context_menu_items_count; i++) { var context_menu_item = context_menu_items[i]; var assign_menu_item_action = function(ev){ ev.preventDefault(); options[this.id.replace(control + '_', '')].action.apply(self, [e]); self.hideContextMenu(); }; google.maps.event.clearListeners(context_menu_item, 'click'); google.maps.event.addDomListenerOnce(context_menu_item, 'click', assign_menu_item_action, false); } var position = findAbsolutePosition.apply(this, [self.el]), left = position[0] + e.pixel.x - 15, top = position[1] + e.pixel.y- 15; context_menu_element.style.left = left + "px"; context_menu_element.style.top = top + "px"; context_menu_element.style.display = 'block'; }; this.buildContextMenu = function(control, e) { if (control === 'marker') { e.pixel = {}; var overlay = new google.maps.OverlayView(); overlay.setMap(self.map); overlay.draw = function() { var projection = overlay.getProjection(), position = e.marker.getPosition(); e.pixel = projection.fromLatLngToContainerPixel(position); buildContextMenuHTML(control, e); }; } else { buildContextMenuHTML(control, e); } }; this.setContextMenu = function(options) { window.context_menu[self.el.id][options.control] = {}; var i, ul = doc.createElement('ul'); for (i in options.options) { if (options.options.hasOwnProperty(i)) { var option = options.options[i]; window.context_menu[self.el.id][options.control][option.name] = { title: option.title, action: option.action }; } } ul.id = 'gmaps_context_menu'; ul.style.display = 'none'; ul.style.position = 'absolute'; ul.style.minWidth = '100px'; ul.style.background = 'white'; ul.style.listStyle = 'none'; ul.style.padding = '8px'; ul.style.boxShadow = '2px 2px 6px #ccc'; doc.body.appendChild(ul); var context_menu_element = getElementById('gmaps_context_menu') google.maps.event.addDomListener(context_menu_element, 'mouseout', function(ev) { if (!ev.relatedTarget || !this.contains(ev.relatedTarget)) { window.setTimeout(function(){ context_menu_element.style.display = 'none'; }, 400); } }, false); }; this.hideContextMenu = function() { var context_menu_element = getElementById('gmaps_context_menu'); if (context_menu_element) { context_menu_element.style.display = 'none'; } }; var setupListener = function(object, name) { google.maps.event.addListener(object, name, function(e){ if (e == undefined) { e = this; } options[name].apply(this, [e]); self.hideContextMenu(); }); }; for (var ev = 0; ev < events_that_hide_context_menu.length; ev++) { var name = events_that_hide_context_menu[ev]; if (name in options) { setupListener(this.map, name); } } for (var ev = 0; ev < events_that_doesnt_hide_context_menu.length; ev++) { var name = events_that_doesnt_hide_context_menu[ev]; if (name in options) { setupListener(this.map, name); } } google.maps.event.addListener(this.map, 'rightclick', function(e) { if (options.rightclick) { options.rightclick.apply(this, [e]); } if(window.context_menu[self.el.id]['map'] != undefined) { self.buildContextMenu('map', e); } }); this.refresh = function() { google.maps.event.trigger(this.map, 'resize'); }; this.fitZoom = function() { var latLngs = [], markers_length = this.markers.length, i; for (i = 0; i < markers_length; i++) { latLngs.push(this.markers[i].getPosition()); } this.fitLatLngBounds(latLngs); }; this.fitLatLngBounds = function(latLngs) { var total = latLngs.length; var bounds = new google.maps.LatLngBounds(); for(var i=0; i < total; i++) { bounds.extend(latLngs[i]); } this.map.fitBounds(bounds); }; this.setCenter = function(lat, lng, callback) { this.map.panTo(new google.maps.LatLng(lat, lng)); if (callback) { callback(); } }; this.getElement = function() { return this.el; }; this.zoomIn = function(value) { value = value || 1; this.zoom = this.map.getZoom() + value; this.map.setZoom(this.zoom); }; this.zoomOut = function(value) { value = value || 1; this.zoom = this.map.getZoom() - value; this.map.setZoom(this.zoom); }; var native_methods = [], method; for (method in this.map) { if (typeof(this.map[method]) == 'function' && !this[method]) { native_methods.push(method); } } for (i=0; i < native_methods.length; i++) { (function(gmaps, scope, method_name) { gmaps[method_name] = function(){ return scope[method_name].apply(scope, arguments); }; })(this, this.map, native_methods[i]); } }; return GMaps; })(this); assets/plugins/gmaps/lib/gmaps.overlays.js000064400000006421152510437730014726 0ustar00GMaps.prototype.drawOverlay = function(options) { var overlay = new google.maps.OverlayView(), auto_show = true; overlay.setMap(this.map); if (options.auto_show != null) { auto_show = options.auto_show; } overlay.onAdd = function() { var el = document.createElement('div'); el.style.borderStyle = "none"; el.style.borderWidth = "0px"; el.style.position = "absolute"; el.style.zIndex = 100; el.innerHTML = options.content; overlay.el = el; if (!options.layer) { options.layer = 'overlayLayer'; } var panes = this.getPanes(), overlayLayer = panes[options.layer], stop_overlay_events = ['contextmenu', 'DOMMouseScroll', 'dblclick', 'mousedown']; overlayLayer.appendChild(el); for (var ev = 0; ev < stop_overlay_events.length; ev++) { (function(object, name) { google.maps.event.addDomListener(object, name, function(e){ if (navigator.userAgent.toLowerCase().indexOf('msie') != -1 && document.all) { e.cancelBubble = true; e.returnValue = false; } else { e.stopPropagation(); } }); })(el, stop_overlay_events[ev]); } google.maps.event.trigger(this, 'ready'); }; overlay.draw = function() { var projection = this.getProjection(), pixel = projection.fromLatLngToDivPixel(new google.maps.LatLng(options.lat, options.lng)); options.horizontalOffset = options.horizontalOffset || 0; options.verticalOffset = options.verticalOffset || 0; var el = overlay.el, content = el.children[0], content_height = content.clientHeight, content_width = content.clientWidth; switch (options.verticalAlign) { case 'top': el.style.top = (pixel.y - content_height + options.verticalOffset) + 'px'; break; default: case 'middle': el.style.top = (pixel.y - (content_height / 2) + options.verticalOffset) + 'px'; break; case 'bottom': el.style.top = (pixel.y + options.verticalOffset) + 'px'; break; } switch (options.horizontalAlign) { case 'left': el.style.left = (pixel.x - content_width + options.horizontalOffset) + 'px'; break; default: case 'center': el.style.left = (pixel.x - (content_width / 2) + options.horizontalOffset) + 'px'; break; case 'right': el.style.left = (pixel.x + options.horizontalOffset) + 'px'; break; } el.style.display = auto_show ? 'block' : 'none'; if (!auto_show) { options.show.apply(this, [el]); } }; overlay.onRemove = function() { var el = overlay.el; if (options.remove) { options.remove.apply(this, [el]); } else { overlay.el.parentNode.removeChild(overlay.el); overlay.el = null; } }; this.overlays.push(overlay); return overlay; }; GMaps.prototype.removeOverlay = function(overlay) { for (var i = 0; i < this.overlays.length; i++) { if (this.overlays[i] === overlay) { this.overlays[i].setMap(null); this.overlays.splice(i, 1); break; } } }; GMaps.prototype.removeOverlays = function() { for (var i = 0, item; item = this.overlays[i]; i++) { item.setMap(null); } this.overlays = []; }; assets/plugins/gmaps/lib/gmaps.events.js000064400000003073152510437730014366 0ustar00GMaps.prototype.on = function(event_name, handler) { return GMaps.on(event_name, this, handler); }; GMaps.prototype.off = function(event_name) { GMaps.off(event_name, this); }; GMaps.custom_events = ['marker_added', 'marker_removed', 'polyline_added', 'polyline_removed', 'polygon_added', 'polygon_removed', 'geolocated', 'geolocation_failed']; GMaps.on = function(event_name, object, handler) { if (GMaps.custom_events.indexOf(event_name) == -1) { return google.maps.event.addListener(object, event_name, handler); } else { var registered_event = { handler : handler, eventName : event_name }; object.registered_events[event_name] = object.registered_events[event_name] || []; object.registered_events[event_name].push(registered_event); return registered_event; } }; GMaps.off = function(event_name, object) { if (GMaps.custom_events.indexOf(event_name) == -1) { google.maps.event.clearListeners(object, event_name); } else { object.registered_events[event_name] = []; } }; GMaps.fire = function(event_name, object, scope) { if (GMaps.custom_events.indexOf(event_name) == -1) { google.maps.event.trigger(object, event_name, Array.prototype.slice.apply(arguments).slice(2)); } else { if(event_name in scope.registered_events) { var firing_events = scope.registered_events[event_name]; for(var i = 0; i < firing_events.length; i++) { (function(handler, scope, object) { handler.apply(scope, [object]); })(firing_events[i]['handler'], scope, object); } } } }; assets/plugins/gmaps/lib/gmaps.geometry.js000064400000012015152510437730014711 0ustar00GMaps.prototype.drawPolyline = function(options) { var path = [], points = options.path; if (points.length) { if (points[0][0] === undefined) { path = points; } else { for (var i=0, latlng; latlng=points[i]; i++) { path.push(new google.maps.LatLng(latlng[0], latlng[1])); } } } var polyline_options = { map: this.map, path: path, strokeColor: options.strokeColor, strokeOpacity: options.strokeOpacity, strokeWeight: options.strokeWeight, geodesic: options.geodesic, clickable: true, editable: false, visible: true }; if (options.hasOwnProperty("clickable")) { polyline_options.clickable = options.clickable; } if (options.hasOwnProperty("editable")) { polyline_options.editable = options.editable; } if (options.hasOwnProperty("icons")) { polyline_options.icons = options.icons; } if (options.hasOwnProperty("zIndex")) { polyline_options.zIndex = options.zIndex; } var polyline = new google.maps.Polyline(polyline_options); var polyline_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick']; for (var ev = 0; ev < polyline_events.length; ev++) { (function(object, name) { if (options[name]) { google.maps.event.addListener(object, name, function(e){ options[name].apply(this, [e]); }); } })(polyline, polyline_events[ev]); } this.polylines.push(polyline); GMaps.fire('polyline_added', polyline, this); return polyline; }; GMaps.prototype.removePolyline = function(polyline) { for (var i = 0; i < this.polylines.length; i++) { if (this.polylines[i] === polyline) { this.polylines[i].setMap(null); this.polylines.splice(i, 1); GMaps.fire('polyline_removed', polyline, this); break; } } }; GMaps.prototype.removePolylines = function() { for (var i = 0, item; item = this.polylines[i]; i++) { item.setMap(null); } this.polylines = []; }; GMaps.prototype.drawCircle = function(options) { options = extend_object({ map: this.map, center: new google.maps.LatLng(options.lat, options.lng) }, options); delete options.lat; delete options.lng; var polygon = new google.maps.Circle(options), polygon_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick']; for (var ev = 0; ev < polygon_events.length; ev++) { (function(object, name) { if (options[name]) { google.maps.event.addListener(object, name, function(e){ options[name].apply(this, [e]); }); } })(polygon, polygon_events[ev]); } this.polygons.push(polygon); return polygon; }; GMaps.prototype.drawRectangle = function(options) { options = extend_object({ map: this.map }, options); var latLngBounds = new google.maps.LatLngBounds( new google.maps.LatLng(options.bounds[0][0], options.bounds[0][1]), new google.maps.LatLng(options.bounds[1][0], options.bounds[1][1]) ); options.bounds = latLngBounds; var polygon = new google.maps.Rectangle(options), polygon_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick']; for (var ev = 0; ev < polygon_events.length; ev++) { (function(object, name) { if (options[name]) { google.maps.event.addListener(object, name, function(e){ options[name].apply(this, [e]); }); } })(polygon, polygon_events[ev]); } this.polygons.push(polygon); return polygon; }; GMaps.prototype.drawPolygon = function(options) { var useGeoJSON = false; if(options.hasOwnProperty("useGeoJSON")) { useGeoJSON = options.useGeoJSON; } delete options.useGeoJSON; options = extend_object({ map: this.map }, options); if (useGeoJSON == false) { options.paths = [options.paths.slice(0)]; } if (options.paths.length > 0) { if (options.paths[0].length > 0) { options.paths = array_flat(array_map(options.paths, arrayToLatLng, useGeoJSON)); } } var polygon = new google.maps.Polygon(options), polygon_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick']; for (var ev = 0; ev < polygon_events.length; ev++) { (function(object, name) { if (options[name]) { google.maps.event.addListener(object, name, function(e){ options[name].apply(this, [e]); }); } })(polygon, polygon_events[ev]); } this.polygons.push(polygon); GMaps.fire('polygon_added', polygon, this); return polygon; }; GMaps.prototype.removePolygon = function(polygon) { for (var i = 0; i < this.polygons.length; i++) { if (this.polygons[i] === polygon) { this.polygons[i].setMap(null); this.polygons.splice(i, 1); GMaps.fire('polygon_removed', polygon, this); break; } } }; GMaps.prototype.removePolygons = function() { for (var i = 0, item; item = this.polygons[i]; i++) { item.setMap(null); } this.polygons = []; }; assets/plugins/gmaps/lib/gmaps.markers.js000064400000011303152510437730014521 0ustar00GMaps.prototype.createMarker = function(options) { if (options.lat == undefined && options.lng == undefined && options.position == undefined) { throw 'No latitude or longitude defined.'; } var self = this, details = options.details, fences = options.fences, outside = options.outside, base_options = { position: new google.maps.LatLng(options.lat, options.lng), map: null }; delete options.lat; delete options.lng; delete options.fences; delete options.outside; var marker_options = extend_object(base_options, options), marker = new google.maps.Marker(marker_options); marker.fences = fences; if (options.infoWindow) { marker.infoWindow = new google.maps.InfoWindow(options.infoWindow); var info_window_events = ['closeclick', 'content_changed', 'domready', 'position_changed', 'zindex_changed']; for (var ev = 0; ev < info_window_events.length; ev++) { (function(object, name) { if (options.infoWindow[name]) { google.maps.event.addListener(object, name, function(e){ options.infoWindow[name].apply(this, [e]); }); } })(marker.infoWindow, info_window_events[ev]); } } var marker_events = ['animation_changed', 'clickable_changed', 'cursor_changed', 'draggable_changed', 'flat_changed', 'icon_changed', 'position_changed', 'shadow_changed', 'shape_changed', 'title_changed', 'visible_changed', 'zindex_changed']; var marker_events_with_mouse = ['dblclick', 'drag', 'dragend', 'dragstart', 'mousedown', 'mouseout', 'mouseover', 'mouseup']; for (var ev = 0; ev < marker_events.length; ev++) { (function(object, name) { if (options[name]) { google.maps.event.addListener(object, name, function(){ options[name].apply(this, [this]); }); } })(marker, marker_events[ev]); } for (var ev = 0; ev < marker_events_with_mouse.length; ev++) { (function(map, object, name) { if (options[name]) { google.maps.event.addListener(object, name, function(me){ if(!me.pixel){ me.pixel = map.getProjection().fromLatLngToPoint(me.latLng) } options[name].apply(this, [me]); }); } })(this.map, marker, marker_events_with_mouse[ev]); } google.maps.event.addListener(marker, 'click', function() { this.details = details; if (options.click) { options.click.apply(this, [this]); } if (marker.infoWindow) { self.hideInfoWindows(); marker.infoWindow.open(self.map, marker); } }); google.maps.event.addListener(marker, 'rightclick', function(e) { e.marker = this; if (options.rightclick) { options.rightclick.apply(this, [e]); } if (window.context_menu[self.el.id]['marker'] != undefined) { self.buildContextMenu('marker', e); } }); if (marker.fences) { google.maps.event.addListener(marker, 'dragend', function() { self.checkMarkerGeofence(marker, function(m, f) { outside(m, f); }); }); } return marker; }; GMaps.prototype.addMarker = function(options) { var marker; if(options.hasOwnProperty('gm_accessors_')) { // Native google.maps.Marker object marker = options; } else { if ((options.hasOwnProperty('lat') && options.hasOwnProperty('lng')) || options.position) { marker = this.createMarker(options); } else { throw 'No latitude or longitude defined.'; } } marker.setMap(this.map); if(this.markerClusterer) { this.markerClusterer.addMarker(marker); } this.markers.push(marker); GMaps.fire('marker_added', marker, this); return marker; }; GMaps.prototype.addMarkers = function(array) { for (var i = 0, marker; marker=array[i]; i++) { this.addMarker(marker); } return this.markers; }; GMaps.prototype.hideInfoWindows = function() { for (var i = 0, marker; marker = this.markers[i]; i++){ if (marker.infoWindow){ marker.infoWindow.close(); } } }; GMaps.prototype.removeMarker = function(marker) { for (var i = 0; i < this.markers.length; i++) { if (this.markers[i] === marker) { this.markers[i].setMap(null); this.markers.splice(i, 1); GMaps.fire('marker_removed', marker, this); break; } } return marker; }; GMaps.prototype.removeMarkers = function(collection) { var collection = (collection || this.markers); for (var i = 0;i < this.markers.length; i++) { if(this.markers[i] === collection[i]) { this.markers[i].setMap(null); } } var new_markers = []; for (var i = 0;i < this.markers.length; i++) { if(this.markers[i].getMap() != null) { new_markers.push(this.markers[i]); } } this.markers = new_markers; }; assets/plugins/gmaps/lib/gmaps.styles.js000064400000000443152510437730014403 0ustar00GMaps.prototype.addStyle = function(options) { var styledMapType = new google.maps.StyledMapType(options.styles, options.styledMapName); this.map.mapTypes.set(options.mapTypeId, styledMapType); }; GMaps.prototype.setStyle = function(mapTypeId) { this.map.setMapTypeId(mapTypeId); }; assets/plugins/gmaps/lib/gmaps.layers.js000064400000010270152510437730014356 0ustar00GMaps.prototype.getFromFusionTables = function(options) { var events = options.events; delete options.events; var fusion_tables_options = options, layer = new google.maps.FusionTablesLayer(fusion_tables_options); for (var ev in events) { (function(object, name) { google.maps.event.addListener(object, name, function(e) { events[name].apply(this, [e]); }); })(layer, ev); } this.layers.push(layer); return layer; }; GMaps.prototype.loadFromFusionTables = function(options) { var layer = this.getFromFusionTables(options); layer.setMap(this.map); return layer; }; GMaps.prototype.getFromKML = function(options) { var url = options.url, events = options.events; delete options.url; delete options.events; var kml_options = options, layer = new google.maps.KmlLayer(url, kml_options); for (var ev in events) { (function(object, name) { google.maps.event.addListener(object, name, function(e) { events[name].apply(this, [e]); }); })(layer, ev); } this.layers.push(layer); return layer; }; GMaps.prototype.loadFromKML = function(options) { var layer = this.getFromKML(options); layer.setMap(this.map); return layer; }; GMaps.prototype.addLayer = function(layerName, options) { //var default_layers = ['weather', 'clouds', 'traffic', 'transit', 'bicycling', 'panoramio', 'places']; options = options || {}; var layer; switch(layerName) { case 'weather': this.singleLayers.weather = layer = new google.maps.weather.WeatherLayer(); break; case 'clouds': this.singleLayers.clouds = layer = new google.maps.weather.CloudLayer(); break; case 'traffic': this.singleLayers.traffic = layer = new google.maps.TrafficLayer(); break; case 'transit': this.singleLayers.transit = layer = new google.maps.TransitLayer(); break; case 'bicycling': this.singleLayers.bicycling = layer = new google.maps.BicyclingLayer(); break; case 'panoramio': this.singleLayers.panoramio = layer = new google.maps.panoramio.PanoramioLayer(); layer.setTag(options.filter); delete options.filter; //click event if (options.click) { google.maps.event.addListener(layer, 'click', function(event) { options.click(event); delete options.click; }); } break; case 'places': this.singleLayers.places = layer = new google.maps.places.PlacesService(this.map); //search and nearbySearch callback, Both are the same if (options.search || options.nearbySearch) { var placeSearchRequest = { bounds : options.bounds || null, keyword : options.keyword || null, location : options.location || null, name : options.name || null, radius : options.radius || null, rankBy : options.rankBy || null, types : options.types || null }; if (options.search) { layer.search(placeSearchRequest, options.search); } if (options.nearbySearch) { layer.nearbySearch(placeSearchRequest, options.nearbySearch); } } //textSearch callback if (options.textSearch) { var textSearchRequest = { bounds : options.bounds || null, location : options.location || null, query : options.query || null, radius : options.radius || null }; layer.textSearch(textSearchRequest, options.textSearch); } break; } if (layer !== undefined) { if (typeof layer.setOptions == 'function') { layer.setOptions(options); } if (typeof layer.setMap == 'function') { layer.setMap(this.map); } return layer; } }; GMaps.prototype.removeLayer = function(layer) { if (typeof(layer) == "string" && this.singleLayers[layer] !== undefined) { this.singleLayers[layer].setMap(null); delete this.singleLayers[layer]; } else { for (var i = 0; i < this.layers.length; i++) { if (this.layers[i] === layer) { this.layers[i].setMap(null); this.layers.splice(i, 1); break; } } } }; assets/plugins/gmaps/lib/gmaps.static.js000064400000011377152510437730014357 0ustar00GMaps.prototype.toImage = function(options) { var options = options || {}, static_map_options = {}; static_map_options['size'] = options['size'] || [this.el.clientWidth, this.el.clientHeight]; static_map_options['lat'] = this.getCenter().lat(); static_map_options['lng'] = this.getCenter().lng(); if (this.markers.length > 0) { static_map_options['markers'] = []; for (var i = 0; i < this.markers.length; i++) { static_map_options['markers'].push({ lat: this.markers[i].getPosition().lat(), lng: this.markers[i].getPosition().lng() }); } } if (this.polylines.length > 0) { var polyline = this.polylines[0]; static_map_options['polyline'] = {}; static_map_options['polyline']['path'] = google.maps.geometry.encoding.encodePath(polyline.getPath()); static_map_options['polyline']['strokeColor'] = polyline.strokeColor static_map_options['polyline']['strokeOpacity'] = polyline.strokeOpacity static_map_options['polyline']['strokeWeight'] = polyline.strokeWeight } return GMaps.staticMapURL(static_map_options); }; GMaps.staticMapURL = function(options){ var parameters = [], data, static_root = 'http://maps.googleapis.com/maps/api/staticmap'; if (options.url) { static_root = options.url; delete options.url; } static_root += '?'; var markers = options.markers; delete options.markers; if (!markers && options.marker) { markers = [options.marker]; delete options.marker; } var polyline = options.polyline; delete options.polyline; /** Map options **/ if (options.center) { parameters.push('center=' + options.center); delete options.center; } else if (options.address) { parameters.push('center=' + options.address); delete options.address; } else if (options.lat) { parameters.push(['center=', options.lat, ',', options.lng].join('')); delete options.lat; delete options.lng; } else if (options.visible) { var visible = encodeURI(options.visible.join('|')); parameters.push('visible=' + visible); } var size = options.size; if (size) { if (size.join) { size = size.join('x'); } delete options.size; } else { size = '630x300'; } parameters.push('size=' + size); if (!options.zoom) { options.zoom = 15; } var sensor = options.hasOwnProperty('sensor') ? !!options.sensor : true; delete options.sensor; parameters.push('sensor=' + sensor); for (var param in options) { if (options.hasOwnProperty(param)) { parameters.push(param + '=' + options[param]); } } /** Markers **/ if (markers) { var marker, loc; for (var i=0; data=markers[i]; i++) { marker = []; if (data.size && data.size !== 'normal') { marker.push('size:' + data.size); } else if (data.icon) { marker.push('icon:' + encodeURI(data.icon)); } if (data.color) { marker.push('color:' + data.color.replace('#', '0x')); } if (data.label) { marker.push('label:' + data.label[0].toUpperCase()); } loc = (data.address ? data.address : data.lat + ',' + data.lng); if (marker.length || i === 0) { marker.push(loc); marker = marker.join('|'); parameters.push('markers=' + encodeURI(marker)); } // New marker without styles else { marker = parameters.pop() + encodeURI('|' + loc); parameters.push(marker); } } } /** Polylines **/ function parseColor(color, opacity) { if (color[0] === '#'){ color = color.replace('#', '0x'); if (opacity) { opacity = parseFloat(opacity); opacity = Math.min(1, Math.max(opacity, 0)); if (opacity === 0) { return '0x00000000'; } opacity = (opacity * 255).toString(16); if (opacity.length === 1) { opacity += opacity; } color = color.slice(0,8) + opacity; } } return color; } if (polyline) { data = polyline; polyline = []; if (data.strokeWeight) { polyline.push('weight:' + parseInt(data.strokeWeight, 10)); } if (data.strokeColor) { var color = parseColor(data.strokeColor, data.strokeOpacity); polyline.push('color:' + color); } if (data.fillColor) { var fillcolor = parseColor(data.fillColor, data.fillOpacity); polyline.push('fillcolor:' + fillcolor); } var path = data.path; if (path.join) { for (var j=0, pos; pos=path[j]; j++) { polyline.push(pos.join(',')); } } else { polyline.push('enc:' + path); } polyline = polyline.join('|'); parameters.push('path=' + encodeURI(polyline)); } parameters = parameters.join('&'); return static_root + parameters; }; assets/plugins/gmaps/Gruntfile.js000064400000003501152510437730013141 0ustar00/*global module:false*/ module.exports = function(grunt) { 'use strict'; // Project configuration. grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), meta : { banner : '/*!\n' + ' * GMaps.js v<%= pkg.version %>\n' + ' * <%= pkg.homepage %>\n' + ' *\n' + ' * Copyright <%= grunt.template.today("yyyy") %>, <%= pkg.author %>\n' + ' * Released under the <%= pkg.license %> License.\n' + ' */\n\n' }, concat: { options: { banner: '<%= meta.banner %>' }, dist: { src: [ 'lib/gmaps.core.js', 'lib/gmaps.controls.js', 'lib/gmaps.markers.js', 'lib/gmaps.overlays.js', 'lib/gmaps.geometry.js', 'lib/gmaps.layers.js', 'lib/gmaps.routes.js', 'lib/gmaps.geofences.js', 'lib/gmaps.static.js', 'lib/gmaps.map_types.js', 'lib/gmaps.styles.js', 'lib/gmaps.streetview.js', 'lib/gmaps.events.js', 'lib/gmaps.utils.js', 'lib/gmaps.native_extensions.js' ], dest: 'gmaps.js' } }, jasmine: { options: { template: 'test/template/jasmine-gmaps.html', specs: 'test/spec/*.js', vendor: 'http://maps.google.com/maps/api/js?sensor=true', styles: 'test/style.css' }, src : '<%= concat.dist.src %>' }, watch : { files : '<%= concat.dist.src %>', tasks : 'default' }, jshint : { all : ['Gruntfile.js'] } }); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-concat'); grunt.loadNpmTasks('grunt-contrib-jasmine'); grunt.registerTask('test', ['jshint', 'jasmine']); grunt.registerTask('default', ['test', 'concat']); };assets/plugins/gmaps/test/spec/StyleSpec.js000064400000001710152510437730015026 0ustar00describe("Adding Map Styles", function() { var map_with_styles; beforeEach(function() { map_with_styles = map_with_styles || new GMaps({ el : '#map-with-styles', lat : -12.0433, lng : -77.0283, zoom : 12 }); map_with_styles.addStyle({ styledMapName : { name : 'Lighter' }, mapTypeId : 'lighter', styles : [ { elementType : 'geometry', stylers : [ { lightness : 50 } ] }, { elementType : 'labels', stylers : [ { visibility : 'off' } ] }, ] }); }); it("should add a MapType to the current map", function() { expect(map_with_styles.map.mapTypes.get('lighter')).toBeDefined(); }); it("should update the styles in the current map", function() { map_with_styles.setStyle('lighter'); expect(map_with_styles.getMapTypeId()).toEqual('lighter'); }); });assets/plugins/gmaps/test/spec/MarkerSpec.js000064400000002663152510437730015157 0ustar00describe("Creating a marker", function() { var map, marker; beforeEach(function() { map = map || new GMaps({ el : '#map-with-markers', lat : -12.0533, lng: -77.0293, zoom: 14 }); }); describe("With basic options", function() { beforeEach(function() { marker = map.addMarker({ lat : -12.0533, lng: -77.0293, title : 'New marker' }); }); it("should add the marker to the markers collection", function() { expect(map.markers.length).toEqual(1); expect(map.markers[0]).toEqual(marker); }); it("should create a marker with defined position", function() { // Fix for floating-point bug expect(parseFloat(marker.getPosition().lat().toFixed(4))).toEqual(-12.0533); expect(parseFloat(marker.getPosition().lng().toFixed(4))).toEqual(-77.0293); }); }); describe("With events", function() { var callbacks; beforeEach(function() { callbacks = { onclick : function() { console.log(this.title); } }; spyOn(callbacks, 'onclick').andCallThrough(); marker = map.addMarker({ lat : -12.0533, lng: -77.0193, title : 'New marker', click : callbacks.onclick }); }); it("should respond to click event", function() { google.maps.event.trigger(marker, 'click'); expect(callbacks.onclick).toHaveBeenCalled(); }); }); });assets/plugins/gmaps/test/spec/OverlaySpec.js000064400000001607152510437730015354 0ustar00describe("Drawing HTML overlays", function() { var map_with_overlays, overlay; beforeEach(function() { map_with_overlays = map_with_overlays || new GMaps({ el : '#map-with-overlays', lat : -12.0433, lng : -77.0283, zoom : 12 }); overlay = overlay || map_with_overlays.drawOverlay({ lat: map_with_overlays.getCenter().lat(), lng: map_with_overlays.getCenter().lng(), layer: 'overlayLayer', content: '
    Lima
    ', verticalAlign: 'top', horizontalAlign: 'center' }); }); it("should add the overlay to the overlays collection", function() { expect(map_with_overlays.overlays.length).toEqual(1); expect(map_with_overlays.overlays[0]).toEqual(overlay); }); it("should add the overlay in the current map", function() { expect(overlay.getMap()).toEqual(map_with_overlays.map); }); });assets/plugins/gmaps/test/spec/EventSpec.js000064400000022526152510437730015017 0ustar00describe("Creating event listeners", function() { var map_events, marker, line, polygon, callbacks_native, callbacks_gmaps; var added_marker, added_line, added_polygon; var marker_added_event, marker_removed_event, polyline_added_event, polyline_removed_event, polygon_added_event, polygon_removed_event; beforeEach(function() { map_events = map_events || new GMaps({ el : '#events', lat : -12.0433, lng : -77.0283, zoom : 12 }); marker = marker || map_events.addMarker({ lat : -12.0433, lng : -77.0283, title : 'New marker' }); line = line || map_events.drawPolyline({ path : [[-12.0440, -77.0247], [-12.0544, -77.0302], [-12.0551, -77.0303], [-12.0759, -77.0276], [-12.0763, -77.0279], [-12.0768, -77.0289], [-12.0885, -77.0241], [-12.0908, -77.0227]], strokeColor : '#131540', strokeOpacity : 0.6, strokeWeight : 6 }); polygon = polygon || map_events.drawPolygon({ paths : [[-12.0403,-77.0337],[-12.0402,-77.0399],[-12.0500,-77.0244],[-12.0448,-77.0215]], strokeColor : '#25D359', strokeOpacity : 1, strokeWeight : 3, fillColor : '#25D359', fillOpacity : 0.6 }); }); describe("for google.maps events", function() { beforeEach(function() { callbacks_native = callbacks_native || { map : { onclick : function() { console.log('callbacks_native.map.onclick'); } }, marker : { onclick : function() { console.log('callbacks_native.marker.onclick'); } }, line : { onclick : function() { console.log('callbacks_native.line.onclick'); } }, polygon : { onclick : function() { console.log('callbacks_native.polygon.onclick'); } } }; spyOn(callbacks_native.map, 'onclick').andCallThrough(); spyOn(callbacks_native.marker, 'onclick').andCallThrough(); spyOn(callbacks_native.line, 'onclick').andCallThrough(); spyOn(callbacks_native.polygon, 'onclick').andCallThrough(); }); describe("To a map", function() { it("should add the listener to the listeners collection", function() { var click_event = GMaps.on('click', map_events.map, callbacks_native.map.onclick); expect(map_events.map['__e3_']['click'][click_event['id']]).toBeDefined(); expect(map_events.map['__e3_']['click'][click_event['id']]).toEqual(click_event); }); }); describe("To a marker", function() { it("should add the listener to the listeners collection", function() { var click_event = GMaps.on('click', marker, callbacks_native.marker.onclick); expect(marker['__e3_']['click'][click_event['id']]).toBeDefined(); expect(marker['__e3_']['click'][click_event['id']]).toEqual(click_event); }); }); describe("To a line", function() { it("should add the listener to the listeners collection", function() { var click_event = GMaps.on('click', line, callbacks_native.line.onclick); expect(line['__e3_']['click'][click_event['id']]).toBeDefined(); expect(line['__e3_']['click'][click_event['id']]).toEqual(click_event); }); }); describe("To a polygon", function() { it("should add the listener to the listeners collection", function() { var click_event = GMaps.on('click', polygon, callbacks_native.polygon.onclick); expect(polygon['__e3_']['click'][click_event['id']]).toBeDefined(); expect(polygon['__e3_']['click'][click_event['id']]).toEqual(click_event); }); }); }); describe("for GMaps events", function() { beforeEach(function() { callbacks_gmaps = { marker_added : function() { console.log('callbacks_gmaps.marker_added called'); }, marker_removed : function() { console.log('callbacks_gmaps.marker_removed called'); }, polyline_added : function() { console.log('callbacks_gmaps.polyline_added called'); }, polyline_removed : function() { console.log('callbacks_gmaps.polyline_removed called'); }, polygon_added : function() { console.log('callbacks_gmaps.polygon_added called'); }, polygon_removed : function() { console.log('callbacks_gmaps.polygon_removed called'); } }; spyOn(callbacks_gmaps, 'marker_added').andCallThrough(); spyOn(callbacks_gmaps, 'marker_removed').andCallThrough(); spyOn(callbacks_gmaps, 'polyline_added').andCallThrough(); spyOn(callbacks_gmaps, 'polyline_removed').andCallThrough(); spyOn(callbacks_gmaps, 'polygon_added').andCallThrough(); spyOn(callbacks_gmaps, 'polygon_removed').andCallThrough(); }); describe("#marker_added", function() { beforeEach(function() { marker_added_event = GMaps.on('marker_added', map_events, callbacks_gmaps.marker_added); }); it("should add the listener to the listeners collection", function() { expect(map_events.registered_events['marker_added'][0]).toEqual(marker_added_event); }); it("should trigger the listener created", function() { added_marker = added_marker || map_events.addMarker({ lat : -12.0433, lng : -77.0273, title : 'New marker' }); expect(callbacks_gmaps.marker_added).toHaveBeenCalled(); }); afterEach(function() { GMaps.off('marker_added', map_events); }); }); describe("#marker_removed", function() { beforeEach(function() { marker_removed_event = GMaps.on('marker_removed', map_events, callbacks_gmaps.marker_removed); }); it("should add the listener to the listeners collection", function() { expect(map_events.registered_events['marker_removed'][0]).toEqual(marker_removed_event); }); it("should trigger the listener created", function() { map_events.removeMarker(added_marker); expect(callbacks_gmaps.marker_removed).toHaveBeenCalled(); }); afterEach(function() { GMaps.off('marker_removed', map_events); }); }); describe("#polyline_added", function() { beforeEach(function() { polyline_added_event = GMaps.on('polyline_added', map_events, callbacks_gmaps.polyline_added); }); it("should add the listener to the listeners collection", function() { expect(map_events.registered_events['polyline_added'][0]).toEqual(polyline_added_event); }); it("should trigger the listener created", function() { added_line = added_line || map_events.drawPolyline({ path : [[-12.0420, -77.0247], [-12.0544, -77.0102], [-12.0751, -77.0903], [-12.0759, -77.0276], [-12.0763, -77.0279], [-12.0768, -77.0289], [-12.0885, -77.0241], [-12.0908, -77.0227]], strokeColor : '#271804', strokeOpacity : 0.1, strokeWeight : 1 }); expect(callbacks_gmaps.polyline_added).toHaveBeenCalled(); }); afterEach(function() { GMaps.off('polyline_added', map_events); }); }); describe("#polyline_removed", function() { beforeEach(function() { polyline_removed_event = GMaps.on('polyline_removed', map_events, callbacks_gmaps.polyline_removed); }); it("should add the listener to the listeners collection", function() { expect(map_events.registered_events['polyline_removed'][0]).toEqual(polyline_removed_event); }); it("should trigger the listener created", function() { map_events.removePolyline(added_line); expect(callbacks_gmaps.polyline_removed).toHaveBeenCalled(); }); afterEach(function() { GMaps.off('polyline_removed', map_events); }); }); describe("#polygon_added", function() { beforeEach(function() { polygon_added_event = GMaps.on('polygon_added', map_events, callbacks_gmaps.polygon_added); }); it("should add the listener to the listeners collection", function() { expect(map_events.registered_events['polygon_added'][0]).toEqual(polygon_added_event); }); it("should trigger the listener created", function() { added_polygon = added_polygon || map_events.drawPolygon({ paths : [[-12.0203,-77.0137],[-12.0402,-77.0109],[-12.0500,-77.0144],[-12.0848,-77.0115]], strokeColor : '#D32559', strokeOpacity : 0.7, strokeWeight : 8, fillColor : '#D32559', fillOpacity : 0.6 }); expect(callbacks_gmaps.polygon_added).toHaveBeenCalled(); }); afterEach(function() { GMaps.off('polygon_added', map_events); }); }); describe("#polygon_removed", function() { beforeEach(function() { polygon_removed_event = GMaps.on('polygon_removed', map_events, callbacks_gmaps.polygon_removed); }); it("should add the listener to the listeners collection", function() { expect(map_events.registered_events['polygon_removed'][0]).toEqual(polygon_removed_event); }); it("should trigger the listener created", function() { map_events.removePolygon(added_polygon); expect(callbacks_gmaps.polygon_removed).toHaveBeenCalled(); }); afterEach(function() { GMaps.off('polygon_removed', map_events); }); }); }); });assets/plugins/gmaps/test/spec/RouteSpec.js000064400000004254152510437730015032 0ustar00var map_with_routes, route, routes; describe("Drawing a route", function() { beforeEach(function() { map_with_routes = map_with_routes || new GMaps({ el : '#map-with-routes', lat : -12.0433, lng : -77.0283, zoom : 12 }); }); it("should add a line in the current map", function() { var route_flag; runs(function() { route_flag = false; map_with_routes.drawRoute({ origin : [-12.044012922866312, -77.02470665341184], destination : [-12.090814532191756, -77.02271108990476], travelMode : 'driving', strokeColor : '#131540', strokeOpacity : 0.6, strokeWeight : 6, callback : function() { route_flag = true; } }); }); waitsFor(function() { return route_flag; }, "The drawn route should create a line in the current map", 500); runs(function() { expect(map_with_routes.polylines.length).toEqual(1); expect(map_with_routes.polylines[0].get('strokeColor')).toEqual('#131540'); expect(map_with_routes.polylines[0].get('strokeOpacity')).toEqual(0.6); expect(map_with_routes.polylines[0].getMap()).toEqual(map_with_routes.map); }); }); }); describe("Getting routes", function() { beforeEach(function() { map_with_routes = map_with_routes || new GMaps({ el : '#map-with-routes', lat : -12.0433, lng : -77.0283, zoom : 12 }); }); it("should return an array of routes", function() { var routes_flag; runs(function() { routes_flag = false; map_with_routes.getRoutes({ origin : [-12.0440, -77.0247], destination : [-12.0908, -77.0227], callback : function(r) { routes = r; routes_flag = true; } }); }); waitsFor(function() { return routes_flag; }, "#getRoutes should return the found routes as an argument", 500); runs(function() { expect(routes).toBeDefined(); expect(map_with_routes.routes).toEqual(routes); if (routes.length > 0) { expect(routes[0].legs[0].distance).toBeDefined(); expect(routes[0].legs[0].duration).toBeDefined(); } }); }); });assets/plugins/gmaps/test/spec/MapSpec.js000064400000012303152510437730014443 0ustar00describe("Creating a map", function() { var basic_map, advanced_map, map_with_events, map_with_custom_controls; it("should throw an error if element is not defined", function() { expect(function() { new GMaps({}); }).toThrow(new Error('No element defined.')); }); describe("With basic options", function() { beforeEach(function() { basic_map = basic_map || new GMaps({ el : '#basic-map', lat: -12.0433, lng: -77.0283, zoom: 12 }); }); it("should create a GMaps object", function() { expect(basic_map).toBeDefined(); }); it("should have centered the map at the initial coordinates", function() { var lat = basic_map.getCenter().lat(); var lng = basic_map.getCenter().lng(); expect(lat).toEqual(-12.0433); expect(lng).toEqual(-77.0283); }); it("should have the correct zoom", function() { expect(basic_map.getZoom()).toEqual(12); }); }); describe("With advanced controls", function() { beforeEach(function() { advanced_map = advanced_map || new GMaps({ el : '#advanced-map', lat: -12.0433, lng: -77.0283, zoomControl : true, panControl : false, streetViewControl : false, mapTypeControl: false, overviewMapControl: false }); }); it("should show the defined controls", function() { expect(advanced_map.map.zoomControl).toBeTruthy(); expect(advanced_map.map.panControl).toBeFalsy(); expect(advanced_map.map.streetViewControl).toBeFalsy(); expect(advanced_map.map.mapTypeControl).toBeFalsy(); expect(advanced_map.map.overviewMapControl).toBeFalsy(); }); }); describe("With events", function() { var callbacks, current_zoom = 0, current_center = null; beforeEach(function() { callbacks = { onclick : function(e) { var lat = e.latLng.lat(); var lng = e.latLng.lng(); map_with_events.addMarker({ lat : lat, lng : lng, title : 'New Marker' }); }, onzoomchanged : function() { console.log('onzoomchanged'); current_zoom = this.getZoom(); }, oncenterchanged : function() { console.log('oncenterchanged'); current_center = this.getCenter(); } }; spyOn(callbacks, 'onclick').andCallThrough(); spyOn(callbacks, 'onzoomchanged').andCallThrough(); spyOn(callbacks, 'oncenterchanged').andCallThrough(); map_with_events = map_with_events || new GMaps({ el : '#map-with-events', lat : -12.0433, lng : -77.0283, click : callbacks.onclick, zoom_changed : callbacks.onzoomchanged, center_changed : callbacks.oncenterchanged }); }); it("should respond to zoom_changed event", function() { map_with_events.map.setZoom(16); expect(callbacks.onzoomchanged).toHaveBeenCalled(); expect(current_zoom).toEqual(16); }); it("should respond to center_changed event", function() { map_with_events.map.setCenter(new google.maps.LatLng(-12.0907, -77.0227)); // Fix for floating-point bug var lat = parseFloat(current_center.lat().toFixed(4)); var lng = parseFloat(current_center.lng().toFixed(4)); expect(callbacks.oncenterchanged).toHaveBeenCalled(); expect(lat).toEqual(-12.0907); expect(lng).toEqual(-77.0227); }); it("should respond to click event", function() { google.maps.event.trigger(map_with_events.map, 'click', { latLng : new google.maps.LatLng(-12.0433, -77.0283) }); expect(callbacks.onclick).toHaveBeenCalled(); expect(map_with_events.markers.length).toEqual(1); }); afterEach(function() { document.getElementById('map-with-events').innerHTML = ''; map_with_events = null; }); }); describe("With custom controls", function() { var callbacks, markers_in_map = 0; beforeEach(function() { callbacks = { onclick : function() { map_with_custom_controls.addMarker({ lat : map_with_custom_controls.getCenter().lat(), lng : map_with_custom_controls.getCenter().lng() }); } } spyOn(callbacks, 'onclick').andCallThrough(); map_with_custom_controls = new GMaps({ el : '#map-with-custom-controls', lat : -12.0433, lng : -77.0283 }); map_with_custom_controls.addControl({ position : 'top_right', content : 'Add marker at the center', style : { margin: '5px', padding: '1px 6px', border: 'solid 1px #717B87', background: '#fff' }, events : { click: callbacks.onclick } }); }); it("should add the control to the controls collection", function() { expect(map_with_custom_controls.controls.length).toEqual(1); }); it("should respond to click event attached to the custom control", function() { google.maps.event.trigger(map_with_custom_controls.controls[0], 'click'); expect(callbacks.onclick).toHaveBeenCalled(); expect(map_with_custom_controls.markers.length).toEqual(1); }); }); }); assets/plugins/gmaps/test/spec/StreetViewSpec.js000064400000004074152510437730016035 0ustar00describe("Create a Street View Panorama", function() { var map_with_streetview, attached_panorama, standalone_panorama, panorama_with_events; beforeEach(function() { map_with_streetview = map_with_streetview || new GMaps({ el : '#map-with-streetview', lat : 42.3455, lng : -71.0983, zoom : 12 }); }); describe("Standalone", function() { beforeEach(function() { standalone_panorama = standalone_panorama || GMaps.createPanorama({ el : '#streetview-standalone-panorama', lat : 42.3455, lng : -71.0983, pov : { heading : 60, pitch : -10, zoom : 1 } }); }); it("should create a Street View panorama", function() { expect(standalone_panorama).toBeDefined(); }); }); describe("Attached to the current map", function() { beforeEach(function() { attached_panorama = attached_panorama || map_with_streetview.createPanorama({ el : '#streetview-panorama', pov : { heading : 60, pitch : -10, zoom : 1 } }); }); it("should be equal to the current map Street View panorama", function() { expect(map_with_streetview.getStreetView()).toEqual(attached_panorama); }); }); describe("With events", function() { var callbacks; beforeEach(function() { callbacks = { onpovchanged : function() { console.log(this); } }; spyOn(callbacks, 'onpovchanged').andCallThrough(); panorama_with_events = panorama_with_events || GMaps.createPanorama({ el : '#streetview-with-events', lat : 42.3455, lng : -71.0983, pov : { heading : 60, pitch : -10, zoom : 1 }, pov_changed : callbacks.onpovchanged }); }); it("should respond to pov_changed event", function() { panorama_with_events.setPov({ heading : 80, pitch : -10, zoom : 1 }); expect(callbacks.onpovchanged).toHaveBeenCalled(); }); }); });assets/plugins/gmaps/test/spec/GeometrySpec.js000064400000016025152510437730015526 0ustar00describe("Drawing geometry overlays", function() { var map_with_polygons, line, rectangle, circle, polygon; beforeEach(function() { map_with_polygons = map_with_polygons || new GMaps({ el : '#map-with-polygons', lat : -12.0433, lng : -77.0283, zoom : 12 }); }); describe("A line", function() { beforeEach(function() { line = line || map_with_polygons.drawPolyline({ path : [[-12.0440, -77.0247], [-12.0544, -77.0302], [-12.0551, -77.0303], [-12.0759, -77.0276], [-12.0763, -77.0279], [-12.0768, -77.0289], [-12.0885, -77.0241], [-12.0908, -77.0227]], strokeColor : '#131540', strokeOpacity : 0.6, strokeWeight : 6 }); }); it("should add the line to the polylines collection", function() { expect(map_with_polygons.polylines.length).toEqual(1); expect(map_with_polygons.polylines[0]).toEqual(line); }); it("should be added in the current map", function() { expect(line.getMap()).toEqual(map_with_polygons.map); }); it("should return the defined path", function() { var first_point = line.getPath().getAt(0); expect(parseFloat(first_point.lat().toFixed(4))).toEqual(-12.0440); expect(parseFloat(first_point.lng().toFixed(4))).toEqual(-77.0247); }); }); describe("A rectangle", function() { beforeEach(function() { rectangle = rectangle || map_with_polygons.drawRectangle({ bounds : [[-12.0303,-77.0237],[-12.0348,-77.0115]], strokeColor : '#BBD8E9', strokeOpacity : 1, strokeWeight : 3, fillColor : '#BBD8E9', fillOpacity : 0.6 }); }); it("should add the rectangle to the polygons collection", function() { expect(map_with_polygons.polygons.length).toEqual(1); expect(map_with_polygons.polygons[0]).toEqual(rectangle); }); it("should be added in the current map", function() { expect(rectangle.getMap()).toEqual(map_with_polygons.map); }); it("should have the defined bounds", function() { // Fix for floating-point bug var SWLat = parseFloat(rectangle.getBounds().getSouthWest().lat().toFixed(4)); var SWLng = parseFloat(rectangle.getBounds().getSouthWest().lng().toFixed(4)); var NELat = parseFloat(rectangle.getBounds().getNorthEast().lat().toFixed(4)); var NELng = parseFloat(rectangle.getBounds().getNorthEast().lng().toFixed(4)); expect(SWLat).toEqual(-12.0303); expect(SWLng).toEqual(-77.0237); expect(NELat).toEqual(-12.0348); expect(NELng).toEqual(-77.0115); }); }); describe("A polygon", function() { beforeEach(function() { polygon = polygon || map_with_polygons.drawPolygon({ paths : [[-12.0403,-77.0337],[-12.0402,-77.0399],[-12.0500,-77.0244],[-12.0448,-77.0215]], strokeColor : '#25D359', strokeOpacity : 1, strokeWeight : 3, fillColor : '#25D359', fillOpacity : 0.6 }); }); it("should add the polygon to the polygons collection", function() { expect(map_with_polygons.polygons.length).toEqual(2); expect(map_with_polygons.polygons[1]).toEqual(polygon); }); it("should be added in the current map", function() { expect(polygon.getMap()).toEqual(map_with_polygons.map); }); it("should return the defined path", function() { var first_point = polygon.getPath().getAt(0); expect(parseFloat(first_point.lat().toFixed(4))).toEqual(-12.0403); expect(parseFloat(first_point.lng().toFixed(4))).toEqual(-77.0337); }); }); describe("A circle", function() { beforeEach(function() { circle = circle || map_with_polygons.drawCircle({ lat : -12.040504866577001, lng : -77.02024422636042, radius : 350, strokeColor : '#432070', strokeOpacity : 1, strokeWeight : 3, fillColor : '#432070', fillOpacity : 0.6 }); }); it("should add the circle to the polygons collection", function() { expect(map_with_polygons.polygons.length).toEqual(3); expect(map_with_polygons.polygons[2]).toEqual(circle); }); it("should be added in the current map", function() { expect(circle.getMap()).toEqual(map_with_polygons.map); }); it("should have the defined radius", function() { expect(circle.getRadius()).toEqual(350); }); }); }); describe("Removing geometry overlays", function() { var map_with_polygons, line, rectangle, circle, polygon; beforeEach(function() { map_with_polygons = map_with_polygons || new GMaps({ el : '#map-with-polygons', lat : -12.0433, lng : -77.0283, zoom : 12 }); }); describe("A line", function() { beforeEach(function() { line = map_with_polygons.drawPolyline({ path : [[-12.0440, -77.0247], [-12.0544, -77.0302], [-12.0551, -77.0303], [-12.0759, -77.0276], [-12.0763, -77.0279], [-12.0768, -77.0289], [-12.0885, -77.0241], [-12.0908, -77.0227]], strokeColor : '#131540', strokeOpacity : 0.6, strokeWeight : 6 }); map_with_polygons.removePolyline(line); }); it("should remove the line from the polylines collection", function() { expect(map_with_polygons.polylines.length).toEqual(0); expect(line.getMap()).toBeNull(); }); }); describe("A rectangle", function() { beforeEach(function() { rectangle = map_with_polygons.drawRectangle({ bounds : [[-12.0303,-77.0237],[-12.0348,-77.0115]], strokeColor : '#BBD8E9', strokeOpacity : 1, strokeWeight : 3, fillColor : '#BBD8E9', fillOpacity : 0.6 }); map_with_polygons.removePolygon(rectangle); }); it("should remove the rectangle from the polygons collection", function() { expect(map_with_polygons.polygons.length).toEqual(0); expect(rectangle.getMap()).toBeNull(); }); }); describe("A polygon", function() { beforeEach(function() { polygon = map_with_polygons.drawPolygon({ paths : [[-12.0403,-77.0337],[-12.0402,-77.0399],[-12.0500,-77.0244],[-12.0448,-77.0215]], strokeColor : '#25D359', strokeOpacity : 1, strokeWeight : 3, fillColor : '#25D359', fillOpacity : 0.6 }); map_with_polygons.removePolygon(polygon); }); it("should remove the polygon from the polygons collection", function() { expect(map_with_polygons.polygons.length).toEqual(0); expect(polygon.getMap()).toBeNull(); }); }); describe("A circle", function() { beforeEach(function() { circle = map_with_polygons.drawCircle({ lat : -12.040504866577001, lng : -77.02024422636042, radius : 350, strokeColor : '#432070', strokeOpacity : 1, strokeWeight : 3, fillColor : '#432070', fillOpacity : 0.6 }); map_with_polygons.removePolygon(circle); }); it("should remove the circle from the polygons collection", function() { expect(map_with_polygons.polygons.length).toEqual(0); expect(circle.getMap()).toBeNull(); }); }); });assets/plugins/gmaps/test/spec/LayerSpec.js000064400000002740152510437730015006 0ustar00describe("Adding layers", function() { var map_with_layers, single_layer, multiple_layers = []; beforeEach(function() { map_with_layers = map_with_layers || new GMaps({ el : '#map-with-layers', lat: -12.0433, lng: -77.0283, zoom: 12 }); }); describe("Single layer", function() { beforeEach(function() { single_layer = single_layer || map_with_layers.addLayer('traffic'); }) it("should be added in the current map", function() { expect(single_layer.getMap()).toEqual(map_with_layers.map); }); it("should be removed from the current map", function() { map_with_layers.removeLayer('traffic'); expect(single_layer.getMap()).toBeNull(); }); }); describe("Multiple layers", function() { beforeEach(function() { if (multiple_layers.length == 0) { multiple_layers.push(map_with_layers.addLayer('transit')); multiple_layers.push(map_with_layers.addLayer('bicycling')); } }); it("should be added in the current map", function() { expect(multiple_layers[0].getMap()).toEqual(map_with_layers.map); expect(multiple_layers[1].getMap()).toEqual(map_with_layers.map); }); it("should be removed from the current map", function() { map_with_layers.removeLayer('transit'); map_with_layers.removeLayer('bicycling'); expect(multiple_layers[0].getMap()).toBeNull(); expect(multiple_layers[1].getMap()).toBeNull(); }); }); });assets/plugins/gmaps/test/style.css000064400000000611152510437730013474 0ustar00body { font-family: sans-serif; } h1, h2, h3, h4, h5, h6 { margin: 0; font-weight: lighter; text-transform: lowercase; font-variant: small-caps; } .map, .panorama { width: 100%; height: 100px; } .with-columns { display: block; width: 100%; overflow: hidden; } .with-columns .map, .with-columns .panorama { display: block; width: 50%; height: 150px; float: left; }assets/plugins/gmaps/test/lib/jasmine.css000064400000014611152510437730014535 0ustar00body { background-color: #eeeeee; padding: 0; margin: 5px; overflow-y: scroll; } #HTMLReporter { font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333333; } #HTMLReporter a { text-decoration: none; } #HTMLReporter a:hover { text-decoration: underline; } #HTMLReporter p, #HTMLReporter h1, #HTMLReporter h2, #HTMLReporter h3, #HTMLReporter h4, #HTMLReporter h5, #HTMLReporter h6 { margin: 0; line-height: 14px; } #HTMLReporter .banner, #HTMLReporter .symbolSummary, #HTMLReporter .summary, #HTMLReporter .resultMessage, #HTMLReporter .specDetail .description, #HTMLReporter .alert .bar, #HTMLReporter .stackTrace { padding-left: 9px; padding-right: 9px; } #HTMLReporter #jasmine_content { position: fixed; right: 100%; } #HTMLReporter .version { color: #aaaaaa; } #HTMLReporter .banner { margin-top: 14px; } #HTMLReporter .duration { color: #aaaaaa; float: right; } #HTMLReporter .symbolSummary { overflow: hidden; *zoom: 1; margin: 14px 0; } #HTMLReporter .symbolSummary li { display: block; float: left; height: 7px; width: 14px; margin-bottom: 7px; font-size: 16px; } #HTMLReporter .symbolSummary li.passed { font-size: 14px; } #HTMLReporter .symbolSummary li.passed:before { color: #5e7d00; content: "\02022"; } #HTMLReporter .symbolSummary li.failed { line-height: 9px; } #HTMLReporter .symbolSummary li.failed:before { color: #b03911; content: "x"; font-weight: bold; margin-left: -1px; } #HTMLReporter .symbolSummary li.skipped { font-size: 14px; } #HTMLReporter .symbolSummary li.skipped:before { color: #bababa; content: "\02022"; } #HTMLReporter .symbolSummary li.pending { line-height: 11px; } #HTMLReporter .symbolSummary li.pending:before { color: #aaaaaa; content: "-"; } #HTMLReporter .exceptions { color: #fff; float: right; margin-top: 5px; margin-right: 5px; } #HTMLReporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; } #HTMLReporter .runningAlert { background-color: #666666; } #HTMLReporter .skippedAlert { background-color: #aaaaaa; } #HTMLReporter .skippedAlert:first-child { background-color: #333333; } #HTMLReporter .skippedAlert:hover { text-decoration: none; color: white; text-decoration: underline; } #HTMLReporter .passingAlert { background-color: #a6b779; } #HTMLReporter .passingAlert:first-child { background-color: #5e7d00; } #HTMLReporter .failingAlert { background-color: #cf867e; } #HTMLReporter .failingAlert:first-child { background-color: #b03911; } #HTMLReporter .results { margin-top: 14px; } #HTMLReporter #details { display: none; } #HTMLReporter .resultsMenu, #HTMLReporter .resultsMenu a { background-color: #fff; color: #333333; } #HTMLReporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; } #HTMLReporter.showDetails .summaryMenuItem:hover { text-decoration: underline; } #HTMLReporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; } #HTMLReporter.showDetails .summary { display: none; } #HTMLReporter.showDetails #details { display: block; } #HTMLReporter .summaryMenuItem { font-weight: bold; text-decoration: underline; } #HTMLReporter .summary { margin-top: 14px; } #HTMLReporter .summary .suite .suite, #HTMLReporter .summary .specSummary { margin-left: 14px; } #HTMLReporter .summary .specSummary.passed a { color: #5e7d00; } #HTMLReporter .summary .specSummary.failed a { color: #b03911; } #HTMLReporter .description + .suite { margin-top: 0; } #HTMLReporter .suite { margin-top: 14px; } #HTMLReporter .suite a { color: #333333; } #HTMLReporter #details .specDetail { margin-bottom: 28px; } #HTMLReporter #details .specDetail .description { display: block; color: white; background-color: #b03911; } #HTMLReporter .resultMessage { padding-top: 14px; color: #333333; } #HTMLReporter .resultMessage span.result { display: block; } #HTMLReporter .stackTrace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #ddd; background: white; white-space: pre; } #TrivialReporter { padding: 8px 13px; position: absolute; top: 0; bottom: 0; left: 0; right: 0; overflow-y: scroll; background-color: white; font-family: "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif; /*.resultMessage {*/ /*white-space: pre;*/ /*}*/ } #TrivialReporter a:visited, #TrivialReporter a { color: #303; } #TrivialReporter a:hover, #TrivialReporter a:active { color: blue; } #TrivialReporter .run_spec { float: right; padding-right: 5px; font-size: .8em; text-decoration: none; } #TrivialReporter .banner { color: #303; background-color: #fef; padding: 5px; } #TrivialReporter .logo { float: left; font-size: 1.1em; padding-left: 5px; } #TrivialReporter .logo .version { font-size: .6em; padding-left: 1em; } #TrivialReporter .runner.running { background-color: yellow; } #TrivialReporter .options { text-align: right; font-size: .8em; } #TrivialReporter .suite { border: 1px outset gray; margin: 5px 0; padding-left: 1em; } #TrivialReporter .suite .suite { margin: 5px; } #TrivialReporter .suite.passed { background-color: #dfd; } #TrivialReporter .suite.failed { background-color: #fdd; } #TrivialReporter .spec { margin: 5px; padding-left: 1em; clear: both; } #TrivialReporter .spec.failed, #TrivialReporter .spec.passed, #TrivialReporter .spec.skipped { padding-bottom: 5px; border: 1px solid gray; } #TrivialReporter .spec.failed { background-color: #fbb; border-color: red; } #TrivialReporter .spec.passed { background-color: #bfb; border-color: green; } #TrivialReporter .spec.skipped { background-color: #bbb; } #TrivialReporter .messages { border-left: 1px dashed gray; padding-left: 1em; padding-right: 1em; } #TrivialReporter .passed { background-color: #cfc; display: none; } #TrivialReporter .failed { background-color: #fbb; } #TrivialReporter .skipped { color: #777; background-color: #eee; display: none; } #TrivialReporter .resultMessage span.result { display: block; line-height: 2em; color: black; } #TrivialReporter .resultMessage .mismatch { color: black; } #TrivialReporter .stackTrace { white-space: pre; font-size: .8em; margin-left: 10px; max-height: 5em; overflow: auto; border: 1px inset red; padding: 1em; background: #eef; } #TrivialReporter .finished-at { padding-left: 1em; font-size: .6em; } #TrivialReporter.show-passed .passed, #TrivialReporter.show-skipped .skipped { display: block; } #TrivialReporter #jasmine_content { position: fixed; right: 100%; } #TrivialReporter .runner { border: 1px solid gray; display: block; margin: 5px 0; padding: 2px 0 2px 10px; } assets/plugins/gmaps/test/lib/jasmine-html.js000064400000050435152510437730015327 0ustar00jasmine.HtmlReporterHelpers = {}; jasmine.HtmlReporterHelpers.createDom = function(type, attrs, childrenVarArgs) { var el = document.createElement(type); for (var i = 2; i < arguments.length; i++) { var child = arguments[i]; if (typeof child === 'string') { el.appendChild(document.createTextNode(child)); } else { if (child) { el.appendChild(child); } } } for (var attr in attrs) { if (attr == "className") { el[attr] = attrs[attr]; } else { el.setAttribute(attr, attrs[attr]); } } return el; }; jasmine.HtmlReporterHelpers.getSpecStatus = function(child) { var results = child.results(); var status = results.passed() ? 'passed' : 'failed'; if (results.skipped) { status = 'skipped'; } return status; }; jasmine.HtmlReporterHelpers.appendToSummary = function(child, childElement) { var parentDiv = this.dom.summary; var parentSuite = (typeof child.parentSuite == 'undefined') ? 'suite' : 'parentSuite'; var parent = child[parentSuite]; if (parent) { if (typeof this.views.suites[parent.id] == 'undefined') { this.views.suites[parent.id] = new jasmine.HtmlReporter.SuiteView(parent, this.dom, this.views); } parentDiv = this.views.suites[parent.id].element; } parentDiv.appendChild(childElement); }; jasmine.HtmlReporterHelpers.addHelpers = function(ctor) { for(var fn in jasmine.HtmlReporterHelpers) { ctor.prototype[fn] = jasmine.HtmlReporterHelpers[fn]; } }; jasmine.HtmlReporter = function(_doc) { var self = this; var doc = _doc || window.document; var reporterView; var dom = {}; // Jasmine Reporter Public Interface self.logRunningSpecs = false; self.reportRunnerStarting = function(runner) { var specs = runner.specs() || []; if (specs.length == 0) { return; } createReporterDom(runner.env.versionString()); doc.body.appendChild(dom.reporter); setExceptionHandling(); reporterView = new jasmine.HtmlReporter.ReporterView(dom); reporterView.addSpecs(specs, self.specFilter); }; self.reportRunnerResults = function(runner) { reporterView && reporterView.complete(); }; self.reportSuiteResults = function(suite) { reporterView.suiteComplete(suite); }; self.reportSpecStarting = function(spec) { if (self.logRunningSpecs) { self.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...'); } }; self.reportSpecResults = function(spec) { reporterView.specComplete(spec); }; self.log = function() { var console = jasmine.getGlobal().console; if (console && console.log) { if (console.log.apply) { console.log.apply(console, arguments); } else { console.log(arguments); // ie fix: console.log.apply doesn't exist on ie } } }; self.specFilter = function(spec) { if (!focusedSpecName()) { return true; } return spec.getFullName().indexOf(focusedSpecName()) === 0; }; return self; function focusedSpecName() { var specName; (function memoizeFocusedSpec() { if (specName) { return; } var paramMap = []; var params = jasmine.HtmlReporter.parameters(doc); for (var i = 0; i < params.length; i++) { var p = params[i].split('='); paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]); } specName = paramMap.spec; })(); return specName; } function createReporterDom(version) { dom.reporter = self.createDom('div', { id: 'HTMLReporter', className: 'jasmine_reporter' }, dom.banner = self.createDom('div', { className: 'banner' }, self.createDom('span', { className: 'title' }, "Jasmine "), self.createDom('span', { className: 'version' }, version)), dom.symbolSummary = self.createDom('ul', {className: 'symbolSummary'}), dom.alert = self.createDom('div', {className: 'alert'}, self.createDom('span', { className: 'exceptions' }, self.createDom('label', { className: 'label', 'for': 'no_try_catch' }, 'No try/catch'), self.createDom('input', { id: 'no_try_catch', type: 'checkbox' }))), dom.results = self.createDom('div', {className: 'results'}, dom.summary = self.createDom('div', { className: 'summary' }), dom.details = self.createDom('div', { id: 'details' })) ); } function noTryCatch() { return window.location.search.match(/catch=false/); } function searchWithCatch() { var params = jasmine.HtmlReporter.parameters(window.document); var removed = false; var i = 0; while (!removed && i < params.length) { if (params[i].match(/catch=/)) { params.splice(i, 1); removed = true; } i++; } if (jasmine.CATCH_EXCEPTIONS) { params.push("catch=false"); } return params.join("&"); } function setExceptionHandling() { var chxCatch = document.getElementById('no_try_catch'); if (noTryCatch()) { chxCatch.setAttribute('checked', true); jasmine.CATCH_EXCEPTIONS = false; } chxCatch.onclick = function() { window.location.search = searchWithCatch(); }; } }; jasmine.HtmlReporter.parameters = function(doc) { var paramStr = doc.location.search.substring(1); var params = []; if (paramStr.length > 0) { params = paramStr.split('&'); } return params; } jasmine.HtmlReporter.sectionLink = function(sectionName) { var link = '?'; var params = []; if (sectionName) { params.push('spec=' + encodeURIComponent(sectionName)); } if (!jasmine.CATCH_EXCEPTIONS) { params.push("catch=false"); } if (params.length > 0) { link += params.join("&"); } return link; }; jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter); jasmine.HtmlReporter.ReporterView = function(dom) { this.startedAt = new Date(); this.runningSpecCount = 0; this.completeSpecCount = 0; this.passedCount = 0; this.failedCount = 0; this.skippedCount = 0; this.createResultsMenu = function() { this.resultsMenu = this.createDom('span', {className: 'resultsMenu bar'}, this.summaryMenuItem = this.createDom('a', {className: 'summaryMenuItem', href: "#"}, '0 specs'), ' | ', this.detailsMenuItem = this.createDom('a', {className: 'detailsMenuItem', href: "#"}, '0 failing')); this.summaryMenuItem.onclick = function() { dom.reporter.className = dom.reporter.className.replace(/ showDetails/g, ''); }; this.detailsMenuItem.onclick = function() { showDetails(); }; }; this.addSpecs = function(specs, specFilter) { this.totalSpecCount = specs.length; this.views = { specs: {}, suites: {} }; for (var i = 0; i < specs.length; i++) { var spec = specs[i]; this.views.specs[spec.id] = new jasmine.HtmlReporter.SpecView(spec, dom, this.views); if (specFilter(spec)) { this.runningSpecCount++; } } }; this.specComplete = function(spec) { this.completeSpecCount++; if (isUndefined(this.views.specs[spec.id])) { this.views.specs[spec.id] = new jasmine.HtmlReporter.SpecView(spec, dom); } var specView = this.views.specs[spec.id]; switch (specView.status()) { case 'passed': this.passedCount++; break; case 'failed': this.failedCount++; break; case 'skipped': this.skippedCount++; break; } specView.refresh(); this.refresh(); }; this.suiteComplete = function(suite) { var suiteView = this.views.suites[suite.id]; if (isUndefined(suiteView)) { return; } suiteView.refresh(); }; this.refresh = function() { if (isUndefined(this.resultsMenu)) { this.createResultsMenu(); } // currently running UI if (isUndefined(this.runningAlert)) { this.runningAlert = this.createDom('a', { href: jasmine.HtmlReporter.sectionLink(), className: "runningAlert bar" }); dom.alert.appendChild(this.runningAlert); } this.runningAlert.innerHTML = "Running " + this.completeSpecCount + " of " + specPluralizedFor(this.totalSpecCount); // skipped specs UI if (isUndefined(this.skippedAlert)) { this.skippedAlert = this.createDom('a', { href: jasmine.HtmlReporter.sectionLink(), className: "skippedAlert bar" }); } this.skippedAlert.innerHTML = "Skipping " + this.skippedCount + " of " + specPluralizedFor(this.totalSpecCount) + " - run all"; if (this.skippedCount === 1 && isDefined(dom.alert)) { dom.alert.appendChild(this.skippedAlert); } // passing specs UI if (isUndefined(this.passedAlert)) { this.passedAlert = this.createDom('span', { href: jasmine.HtmlReporter.sectionLink(), className: "passingAlert bar" }); } this.passedAlert.innerHTML = "Passing " + specPluralizedFor(this.passedCount); // failing specs UI if (isUndefined(this.failedAlert)) { this.failedAlert = this.createDom('span', {href: "?", className: "failingAlert bar"}); } this.failedAlert.innerHTML = "Failing " + specPluralizedFor(this.failedCount); if (this.failedCount === 1 && isDefined(dom.alert)) { dom.alert.appendChild(this.failedAlert); dom.alert.appendChild(this.resultsMenu); } // summary info this.summaryMenuItem.innerHTML = "" + specPluralizedFor(this.runningSpecCount); this.detailsMenuItem.innerHTML = "" + this.failedCount + " failing"; }; this.complete = function() { dom.alert.removeChild(this.runningAlert); this.skippedAlert.innerHTML = "Ran " + this.runningSpecCount + " of " + specPluralizedFor(this.totalSpecCount) + " - run all"; if (this.failedCount === 0) { dom.alert.appendChild(this.createDom('span', {className: 'passingAlert bar'}, "Passing " + specPluralizedFor(this.passedCount))); } else { showDetails(); } dom.banner.appendChild(this.createDom('span', {className: 'duration'}, "finished in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s")); }; return this; function showDetails() { if (dom.reporter.className.search(/showDetails/) === -1) { dom.reporter.className += " showDetails"; } } function isUndefined(obj) { return typeof obj === 'undefined'; } function isDefined(obj) { return !isUndefined(obj); } function specPluralizedFor(count) { var str = count + " spec"; if (count > 1) { str += "s" } return str; } }; jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.ReporterView); jasmine.HtmlReporter.SpecView = function(spec, dom, views) { this.spec = spec; this.dom = dom; this.views = views; this.symbol = this.createDom('li', { className: 'pending' }); this.dom.symbolSummary.appendChild(this.symbol); this.summary = this.createDom('div', { className: 'specSummary' }, this.createDom('a', { className: 'description', href: jasmine.HtmlReporter.sectionLink(this.spec.getFullName()), title: this.spec.getFullName() }, this.spec.description) ); this.detail = this.createDom('div', { className: 'specDetail' }, this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(this.spec.getFullName()), title: this.spec.getFullName() }, this.spec.getFullName()) ); }; jasmine.HtmlReporter.SpecView.prototype.status = function() { return this.getSpecStatus(this.spec); }; jasmine.HtmlReporter.SpecView.prototype.refresh = function() { this.symbol.className = this.status(); switch (this.status()) { case 'skipped': break; case 'passed': this.appendSummaryToSuiteDiv(); break; case 'failed': this.appendSummaryToSuiteDiv(); this.appendFailureDetail(); break; } }; jasmine.HtmlReporter.SpecView.prototype.appendSummaryToSuiteDiv = function() { this.summary.className += ' ' + this.status(); this.appendToSummary(this.spec, this.summary); }; jasmine.HtmlReporter.SpecView.prototype.appendFailureDetail = function() { this.detail.className += ' ' + this.status(); var resultItems = this.spec.results().getItems(); var messagesDiv = this.createDom('div', { className: 'messages' }); for (var i = 0; i < resultItems.length; i++) { var result = resultItems[i]; if (result.type == 'log') { messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString())); } else if (result.type == 'expect' && result.passed && !result.passed()) { messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message)); if (result.trace.stack) { messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack)); } } } if (messagesDiv.childNodes.length > 0) { this.detail.appendChild(messagesDiv); this.dom.details.appendChild(this.detail); } }; jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SpecView);jasmine.HtmlReporter.SuiteView = function(suite, dom, views) { this.suite = suite; this.dom = dom; this.views = views; this.element = this.createDom('div', { className: 'suite' }, this.createDom('a', { className: 'description', href: jasmine.HtmlReporter.sectionLink(this.suite.getFullName()) }, this.suite.description) ); this.appendToSummary(this.suite, this.element); }; jasmine.HtmlReporter.SuiteView.prototype.status = function() { return this.getSpecStatus(this.suite); }; jasmine.HtmlReporter.SuiteView.prototype.refresh = function() { this.element.className += " " + this.status(); }; jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SuiteView); /* @deprecated Use jasmine.HtmlReporter instead */ jasmine.TrivialReporter = function(doc) { this.document = doc || document; this.suiteDivs = {}; this.logRunningSpecs = false; }; jasmine.TrivialReporter.prototype.createDom = function(type, attrs, childrenVarArgs) { var el = document.createElement(type); for (var i = 2; i < arguments.length; i++) { var child = arguments[i]; if (typeof child === 'string') { el.appendChild(document.createTextNode(child)); } else { if (child) { el.appendChild(child); } } } for (var attr in attrs) { if (attr == "className") { el[attr] = attrs[attr]; } else { el.setAttribute(attr, attrs[attr]); } } return el; }; jasmine.TrivialReporter.prototype.reportRunnerStarting = function(runner) { var showPassed, showSkipped; this.outerDiv = this.createDom('div', { id: 'TrivialReporter', className: 'jasmine_reporter' }, this.createDom('div', { className: 'banner' }, this.createDom('div', { className: 'logo' }, this.createDom('span', { className: 'title' }, "Jasmine"), this.createDom('span', { className: 'version' }, runner.env.versionString())), this.createDom('div', { className: 'options' }, "Show ", showPassed = this.createDom('input', { id: "__jasmine_TrivialReporter_showPassed__", type: 'checkbox' }), this.createDom('label', { "for": "__jasmine_TrivialReporter_showPassed__" }, " passed "), showSkipped = this.createDom('input', { id: "__jasmine_TrivialReporter_showSkipped__", type: 'checkbox' }), this.createDom('label', { "for": "__jasmine_TrivialReporter_showSkipped__" }, " skipped") ) ), this.runnerDiv = this.createDom('div', { className: 'runner running' }, this.createDom('a', { className: 'run_spec', href: '?' }, "run all"), this.runnerMessageSpan = this.createDom('span', {}, "Running..."), this.finishedAtSpan = this.createDom('span', { className: 'finished-at' }, "")) ); this.document.body.appendChild(this.outerDiv); var suites = runner.suites(); for (var i = 0; i < suites.length; i++) { var suite = suites[i]; var suiteDiv = this.createDom('div', { className: 'suite' }, this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, "run"), this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, suite.description)); this.suiteDivs[suite.id] = suiteDiv; var parentDiv = this.outerDiv; if (suite.parentSuite) { parentDiv = this.suiteDivs[suite.parentSuite.id]; } parentDiv.appendChild(suiteDiv); } this.startedAt = new Date(); var self = this; showPassed.onclick = function(evt) { if (showPassed.checked) { self.outerDiv.className += ' show-passed'; } else { self.outerDiv.className = self.outerDiv.className.replace(/ show-passed/, ''); } }; showSkipped.onclick = function(evt) { if (showSkipped.checked) { self.outerDiv.className += ' show-skipped'; } else { self.outerDiv.className = self.outerDiv.className.replace(/ show-skipped/, ''); } }; }; jasmine.TrivialReporter.prototype.reportRunnerResults = function(runner) { var results = runner.results(); var className = (results.failedCount > 0) ? "runner failed" : "runner passed"; this.runnerDiv.setAttribute("class", className); //do it twice for IE this.runnerDiv.setAttribute("className", className); var specs = runner.specs(); var specCount = 0; for (var i = 0; i < specs.length; i++) { if (this.specFilter(specs[i])) { specCount++; } } var message = "" + specCount + " spec" + (specCount == 1 ? "" : "s" ) + ", " + results.failedCount + " failure" + ((results.failedCount == 1) ? "" : "s"); message += " in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s"; this.runnerMessageSpan.replaceChild(this.createDom('a', { className: 'description', href: '?'}, message), this.runnerMessageSpan.firstChild); this.finishedAtSpan.appendChild(document.createTextNode("Finished at " + new Date().toString())); }; jasmine.TrivialReporter.prototype.reportSuiteResults = function(suite) { var results = suite.results(); var status = results.passed() ? 'passed' : 'failed'; if (results.totalCount === 0) { // todo: change this to check results.skipped status = 'skipped'; } this.suiteDivs[suite.id].className += " " + status; }; jasmine.TrivialReporter.prototype.reportSpecStarting = function(spec) { if (this.logRunningSpecs) { this.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...'); } }; jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) { var results = spec.results(); var status = results.passed() ? 'passed' : 'failed'; if (results.skipped) { status = 'skipped'; } var specDiv = this.createDom('div', { className: 'spec ' + status }, this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(spec.getFullName()) }, "run"), this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(spec.getFullName()), title: spec.getFullName() }, spec.description)); var resultItems = results.getItems(); var messagesDiv = this.createDom('div', { className: 'messages' }); for (var i = 0; i < resultItems.length; i++) { var result = resultItems[i]; if (result.type == 'log') { messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString())); } else if (result.type == 'expect' && result.passed && !result.passed()) { messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message)); if (result.trace.stack) { messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack)); } } } if (messagesDiv.childNodes.length > 0) { specDiv.appendChild(messagesDiv); } this.suiteDivs[spec.suite.id].appendChild(specDiv); }; jasmine.TrivialReporter.prototype.log = function() { var console = jasmine.getGlobal().console; if (console && console.log) { if (console.log.apply) { console.log.apply(console, arguments); } else { console.log(arguments); // ie fix: console.log.apply doesn't exist on ie } } }; jasmine.TrivialReporter.prototype.getLocation = function() { return this.document.location; }; jasmine.TrivialReporter.prototype.specFilter = function(spec) { var paramMap = {}; var params = this.getLocation().search.substring(1).split('&'); for (var i = 0; i < params.length; i++) { var p = params[i].split('='); paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]); } if (!paramMap.spec) { return true; } return spec.getFullName().indexOf(paramMap.spec) === 0; }; assets/plugins/gmaps/test/lib/jasmine.js000064400000212354152510437730014365 0ustar00var isCommonJS = typeof window == "undefined" && typeof exports == "object"; /** * Top level namespace for Jasmine, a lightweight JavaScript BDD/spec/testing framework. * * @namespace */ var jasmine = {}; if (isCommonJS) exports.jasmine = jasmine; /** * @private */ jasmine.unimplementedMethod_ = function() { throw new Error("unimplemented method"); }; /** * Use jasmine.undefined instead of undefined, since undefined is just * a plain old variable and may be redefined by somebody else. * * @private */ jasmine.undefined = jasmine.___undefined___; /** * Show diagnostic messages in the console if set to true * */ jasmine.VERBOSE = false; /** * Default interval in milliseconds for event loop yields (e.g. to allow network activity or to refresh the screen with the HTML-based runner). Small values here may result in slow test running. Zero means no updates until all tests have completed. * */ jasmine.DEFAULT_UPDATE_INTERVAL = 250; /** * Maximum levels of nesting that will be included when an object is pretty-printed */ jasmine.MAX_PRETTY_PRINT_DEPTH = 40; /** * Default timeout interval in milliseconds for waitsFor() blocks. */ jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000; /** * By default exceptions thrown in the context of a test are caught by jasmine so that it can run the remaining tests in the suite. * Set to false to let the exception bubble up in the browser. * */ jasmine.CATCH_EXCEPTIONS = true; jasmine.getGlobal = function() { function getGlobal() { return this; } return getGlobal(); }; /** * Allows for bound functions to be compared. Internal use only. * * @ignore * @private * @param base {Object} bound 'this' for the function * @param name {Function} function to find */ jasmine.bindOriginal_ = function(base, name) { var original = base[name]; if (original.apply) { return function() { return original.apply(base, arguments); }; } else { // IE support return jasmine.getGlobal()[name]; } }; jasmine.setTimeout = jasmine.bindOriginal_(jasmine.getGlobal(), 'setTimeout'); jasmine.clearTimeout = jasmine.bindOriginal_(jasmine.getGlobal(), 'clearTimeout'); jasmine.setInterval = jasmine.bindOriginal_(jasmine.getGlobal(), 'setInterval'); jasmine.clearInterval = jasmine.bindOriginal_(jasmine.getGlobal(), 'clearInterval'); jasmine.MessageResult = function(values) { this.type = 'log'; this.values = values; this.trace = new Error(); // todo: test better }; jasmine.MessageResult.prototype.toString = function() { var text = ""; for (var i = 0; i < this.values.length; i++) { if (i > 0) text += " "; if (jasmine.isString_(this.values[i])) { text += this.values[i]; } else { text += jasmine.pp(this.values[i]); } } return text; }; jasmine.ExpectationResult = function(params) { this.type = 'expect'; this.matcherName = params.matcherName; this.passed_ = params.passed; this.expected = params.expected; this.actual = params.actual; this.message = this.passed_ ? 'Passed.' : params.message; var trace = (params.trace || new Error(this.message)); this.trace = this.passed_ ? '' : trace; }; jasmine.ExpectationResult.prototype.toString = function () { return this.message; }; jasmine.ExpectationResult.prototype.passed = function () { return this.passed_; }; /** * Getter for the Jasmine environment. Ensures one gets created */ jasmine.getEnv = function() { var env = jasmine.currentEnv_ = jasmine.currentEnv_ || new jasmine.Env(); return env; }; /** * @ignore * @private * @param value * @returns {Boolean} */ jasmine.isArray_ = function(value) { return jasmine.isA_("Array", value); }; /** * @ignore * @private * @param value * @returns {Boolean} */ jasmine.isString_ = function(value) { return jasmine.isA_("String", value); }; /** * @ignore * @private * @param value * @returns {Boolean} */ jasmine.isNumber_ = function(value) { return jasmine.isA_("Number", value); }; /** * @ignore * @private * @param {String} typeName * @param value * @returns {Boolean} */ jasmine.isA_ = function(typeName, value) { return Object.prototype.toString.apply(value) === '[object ' + typeName + ']'; }; /** * Pretty printer for expecations. Takes any object and turns it into a human-readable string. * * @param value {Object} an object to be outputted * @returns {String} */ jasmine.pp = function(value) { var stringPrettyPrinter = new jasmine.StringPrettyPrinter(); stringPrettyPrinter.format(value); return stringPrettyPrinter.string; }; /** * Returns true if the object is a DOM Node. * * @param {Object} obj object to check * @returns {Boolean} */ jasmine.isDomNode = function(obj) { return obj.nodeType > 0; }; /** * Returns a matchable 'generic' object of the class type. For use in expecations of type when values don't matter. * * @example * // don't care about which function is passed in, as long as it's a function * expect(mySpy).toHaveBeenCalledWith(jasmine.any(Function)); * * @param {Class} clazz * @returns matchable object of the type clazz */ jasmine.any = function(clazz) { return new jasmine.Matchers.Any(clazz); }; /** * Returns a matchable subset of a JSON object. For use in expectations when you don't care about all of the * attributes on the object. * * @example * // don't care about any other attributes than foo. * expect(mySpy).toHaveBeenCalledWith(jasmine.objectContaining({foo: "bar"}); * * @param sample {Object} sample * @returns matchable object for the sample */ jasmine.objectContaining = function (sample) { return new jasmine.Matchers.ObjectContaining(sample); }; /** * Jasmine Spies are test doubles that can act as stubs, spies, fakes or when used in an expecation, mocks. * * Spies should be created in test setup, before expectations. They can then be checked, using the standard Jasmine * expectation syntax. Spies can be checked if they were called or not and what the calling params were. * * A Spy has the following fields: wasCalled, callCount, mostRecentCall, and argsForCall (see docs). * * Spies are torn down at the end of every spec. * * Note: Do not call new jasmine.Spy() directly - a spy must be created using spyOn, jasmine.createSpy or jasmine.createSpyObj. * * @example * // a stub * var myStub = jasmine.createSpy('myStub'); // can be used anywhere * * // spy example * var foo = { * not: function(bool) { return !bool; } * } * * // actual foo.not will not be called, execution stops * spyOn(foo, 'not'); // foo.not spied upon, execution will continue to implementation * spyOn(foo, 'not').andCallThrough(); * * // fake example * var foo = { * not: function(bool) { return !bool; } * } * * // foo.not(val) will return val * spyOn(foo, 'not').andCallFake(function(value) {return value;}); * * // mock example * foo.not(7 == 7); * expect(foo.not).toHaveBeenCalled(); * expect(foo.not).toHaveBeenCalledWith(true); * * @constructor * @see spyOn, jasmine.createSpy, jasmine.createSpyObj * @param {String} name */ jasmine.Spy = function(name) { /** * The name of the spy, if provided. */ this.identity = name || 'unknown'; /** * Is this Object a spy? */ this.isSpy = true; /** * The actual function this spy stubs. */ this.plan = function() { }; /** * Tracking of the most recent call to the spy. * @example * var mySpy = jasmine.createSpy('foo'); * mySpy(1, 2); * mySpy.mostRecentCall.args = [1, 2]; */ this.mostRecentCall = {}; /** * Holds arguments for each call to the spy, indexed by call count * @example * var mySpy = jasmine.createSpy('foo'); * mySpy(1, 2); * mySpy(7, 8); * mySpy.mostRecentCall.args = [7, 8]; * mySpy.argsForCall[0] = [1, 2]; * mySpy.argsForCall[1] = [7, 8]; */ this.argsForCall = []; this.calls = []; }; /** * Tells a spy to call through to the actual implemenatation. * * @example * var foo = { * bar: function() { // do some stuff } * } * * // defining a spy on an existing property: foo.bar * spyOn(foo, 'bar').andCallThrough(); */ jasmine.Spy.prototype.andCallThrough = function() { this.plan = this.originalValue; return this; }; /** * For setting the return value of a spy. * * @example * // defining a spy from scratch: foo() returns 'baz' * var foo = jasmine.createSpy('spy on foo').andReturn('baz'); * * // defining a spy on an existing property: foo.bar() returns 'baz' * spyOn(foo, 'bar').andReturn('baz'); * * @param {Object} value */ jasmine.Spy.prototype.andReturn = function(value) { this.plan = function() { return value; }; return this; }; /** * For throwing an exception when a spy is called. * * @example * // defining a spy from scratch: foo() throws an exception w/ message 'ouch' * var foo = jasmine.createSpy('spy on foo').andThrow('baz'); * * // defining a spy on an existing property: foo.bar() throws an exception w/ message 'ouch' * spyOn(foo, 'bar').andThrow('baz'); * * @param {String} exceptionMsg */ jasmine.Spy.prototype.andThrow = function(exceptionMsg) { this.plan = function() { throw exceptionMsg; }; return this; }; /** * Calls an alternate implementation when a spy is called. * * @example * var baz = function() { * // do some stuff, return something * } * // defining a spy from scratch: foo() calls the function baz * var foo = jasmine.createSpy('spy on foo').andCall(baz); * * // defining a spy on an existing property: foo.bar() calls an anonymnous function * spyOn(foo, 'bar').andCall(function() { return 'baz';} ); * * @param {Function} fakeFunc */ jasmine.Spy.prototype.andCallFake = function(fakeFunc) { this.plan = fakeFunc; return this; }; /** * Resets all of a spy's the tracking variables so that it can be used again. * * @example * spyOn(foo, 'bar'); * * foo.bar(); * * expect(foo.bar.callCount).toEqual(1); * * foo.bar.reset(); * * expect(foo.bar.callCount).toEqual(0); */ jasmine.Spy.prototype.reset = function() { this.wasCalled = false; this.callCount = 0; this.argsForCall = []; this.calls = []; this.mostRecentCall = {}; }; jasmine.createSpy = function(name) { var spyObj = function() { spyObj.wasCalled = true; spyObj.callCount++; var args = jasmine.util.argsToArray(arguments); spyObj.mostRecentCall.object = this; spyObj.mostRecentCall.args = args; spyObj.argsForCall.push(args); spyObj.calls.push({object: this, args: args}); return spyObj.plan.apply(this, arguments); }; var spy = new jasmine.Spy(name); for (var prop in spy) { spyObj[prop] = spy[prop]; } spyObj.reset(); return spyObj; }; /** * Determines whether an object is a spy. * * @param {jasmine.Spy|Object} putativeSpy * @returns {Boolean} */ jasmine.isSpy = function(putativeSpy) { return putativeSpy && putativeSpy.isSpy; }; /** * Creates a more complicated spy: an Object that has every property a function that is a spy. Used for stubbing something * large in one call. * * @param {String} baseName name of spy class * @param {Array} methodNames array of names of methods to make spies */ jasmine.createSpyObj = function(baseName, methodNames) { if (!jasmine.isArray_(methodNames) || methodNames.length === 0) { throw new Error('createSpyObj requires a non-empty array of method names to create spies for'); } var obj = {}; for (var i = 0; i < methodNames.length; i++) { obj[methodNames[i]] = jasmine.createSpy(baseName + '.' + methodNames[i]); } return obj; }; /** * All parameters are pretty-printed and concatenated together, then written to the current spec's output. * * Be careful not to leave calls to jasmine.log in production code. */ jasmine.log = function() { var spec = jasmine.getEnv().currentSpec; spec.log.apply(spec, arguments); }; /** * Function that installs a spy on an existing object's method name. Used within a Spec to create a spy. * * @example * // spy example * var foo = { * not: function(bool) { return !bool; } * } * spyOn(foo, 'not'); // actual foo.not will not be called, execution stops * * @see jasmine.createSpy * @param obj * @param methodName * @return {jasmine.Spy} a Jasmine spy that can be chained with all spy methods */ var spyOn = function(obj, methodName) { return jasmine.getEnv().currentSpec.spyOn(obj, methodName); }; if (isCommonJS) exports.spyOn = spyOn; /** * Creates a Jasmine spec that will be added to the current suite. * * // TODO: pending tests * * @example * it('should be true', function() { * expect(true).toEqual(true); * }); * * @param {String} desc description of this specification * @param {Function} func defines the preconditions and expectations of the spec */ var it = function(desc, func) { return jasmine.getEnv().it(desc, func); }; if (isCommonJS) exports.it = it; /** * Creates a disabled Jasmine spec. * * A convenience method that allows existing specs to be disabled temporarily during development. * * @param {String} desc description of this specification * @param {Function} func defines the preconditions and expectations of the spec */ var xit = function(desc, func) { return jasmine.getEnv().xit(desc, func); }; if (isCommonJS) exports.xit = xit; /** * Starts a chain for a Jasmine expectation. * * It is passed an Object that is the actual value and should chain to one of the many * jasmine.Matchers functions. * * @param {Object} actual Actual value to test against and expected value * @return {jasmine.Matchers} */ var expect = function(actual) { return jasmine.getEnv().currentSpec.expect(actual); }; if (isCommonJS) exports.expect = expect; /** * Defines part of a jasmine spec. Used in cominbination with waits or waitsFor in asynchrnous specs. * * @param {Function} func Function that defines part of a jasmine spec. */ var runs = function(func) { jasmine.getEnv().currentSpec.runs(func); }; if (isCommonJS) exports.runs = runs; /** * Waits a fixed time period before moving to the next block. * * @deprecated Use waitsFor() instead * @param {Number} timeout milliseconds to wait */ var waits = function(timeout) { jasmine.getEnv().currentSpec.waits(timeout); }; if (isCommonJS) exports.waits = waits; /** * Waits for the latchFunction to return true before proceeding to the next block. * * @param {Function} latchFunction * @param {String} optional_timeoutMessage * @param {Number} optional_timeout */ var waitsFor = function(latchFunction, optional_timeoutMessage, optional_timeout) { jasmine.getEnv().currentSpec.waitsFor.apply(jasmine.getEnv().currentSpec, arguments); }; if (isCommonJS) exports.waitsFor = waitsFor; /** * A function that is called before each spec in a suite. * * Used for spec setup, including validating assumptions. * * @param {Function} beforeEachFunction */ var beforeEach = function(beforeEachFunction) { jasmine.getEnv().beforeEach(beforeEachFunction); }; if (isCommonJS) exports.beforeEach = beforeEach; /** * A function that is called after each spec in a suite. * * Used for restoring any state that is hijacked during spec execution. * * @param {Function} afterEachFunction */ var afterEach = function(afterEachFunction) { jasmine.getEnv().afterEach(afterEachFunction); }; if (isCommonJS) exports.afterEach = afterEach; /** * Defines a suite of specifications. * * Stores the description and all defined specs in the Jasmine environment as one suite of specs. Variables declared * are accessible by calls to beforeEach, it, and afterEach. Describe blocks can be nested, allowing for specialization * of setup in some tests. * * @example * // TODO: a simple suite * * // TODO: a simple suite with a nested describe block * * @param {String} description A string, usually the class under test. * @param {Function} specDefinitions function that defines several specs. */ var describe = function(description, specDefinitions) { return jasmine.getEnv().describe(description, specDefinitions); }; if (isCommonJS) exports.describe = describe; /** * Disables a suite of specifications. Used to disable some suites in a file, or files, temporarily during development. * * @param {String} description A string, usually the class under test. * @param {Function} specDefinitions function that defines several specs. */ var xdescribe = function(description, specDefinitions) { return jasmine.getEnv().xdescribe(description, specDefinitions); }; if (isCommonJS) exports.xdescribe = xdescribe; // Provide the XMLHttpRequest class for IE 5.x-6.x: jasmine.XmlHttpRequest = (typeof XMLHttpRequest == "undefined") ? function() { function tryIt(f) { try { return f(); } catch(e) { } return null; } var xhr = tryIt(function() { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); }) || tryIt(function() { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }) || tryIt(function() { return new ActiveXObject("Msxml2.XMLHTTP"); }) || tryIt(function() { return new ActiveXObject("Microsoft.XMLHTTP"); }); if (!xhr) throw new Error("This browser does not support XMLHttpRequest."); return xhr; } : XMLHttpRequest; /** * @namespace */ jasmine.util = {}; /** * Declare that a child class inherit it's prototype from the parent class. * * @private * @param {Function} childClass * @param {Function} parentClass */ jasmine.util.inherit = function(childClass, parentClass) { /** * @private */ var subclass = function() { }; subclass.prototype = parentClass.prototype; childClass.prototype = new subclass(); }; jasmine.util.formatException = function(e) { var lineNumber; if (e.line) { lineNumber = e.line; } else if (e.lineNumber) { lineNumber = e.lineNumber; } var file; if (e.sourceURL) { file = e.sourceURL; } else if (e.fileName) { file = e.fileName; } var message = (e.name && e.message) ? (e.name + ': ' + e.message) : e.toString(); if (file && lineNumber) { message += ' in ' + file + ' (line ' + lineNumber + ')'; } return message; }; jasmine.util.htmlEscape = function(str) { if (!str) return str; return str.replace(/&/g, '&') .replace(//g, '>'); }; jasmine.util.argsToArray = function(args) { var arrayOfArgs = []; for (var i = 0; i < args.length; i++) arrayOfArgs.push(args[i]); return arrayOfArgs; }; jasmine.util.extend = function(destination, source) { for (var property in source) destination[property] = source[property]; return destination; }; /** * Environment for Jasmine * * @constructor */ jasmine.Env = function() { this.currentSpec = null; this.currentSuite = null; this.currentRunner_ = new jasmine.Runner(this); this.reporter = new jasmine.MultiReporter(); this.updateInterval = jasmine.DEFAULT_UPDATE_INTERVAL; this.defaultTimeoutInterval = jasmine.DEFAULT_TIMEOUT_INTERVAL; this.lastUpdate = 0; this.specFilter = function() { return true; }; this.nextSpecId_ = 0; this.nextSuiteId_ = 0; this.equalityTesters_ = []; // wrap matchers this.matchersClass = function() { jasmine.Matchers.apply(this, arguments); }; jasmine.util.inherit(this.matchersClass, jasmine.Matchers); jasmine.Matchers.wrapInto_(jasmine.Matchers.prototype, this.matchersClass); }; jasmine.Env.prototype.setTimeout = jasmine.setTimeout; jasmine.Env.prototype.clearTimeout = jasmine.clearTimeout; jasmine.Env.prototype.setInterval = jasmine.setInterval; jasmine.Env.prototype.clearInterval = jasmine.clearInterval; /** * @returns an object containing jasmine version build info, if set. */ jasmine.Env.prototype.version = function () { if (jasmine.version_) { return jasmine.version_; } else { throw new Error('Version not set'); } }; /** * @returns string containing jasmine version build info, if set. */ jasmine.Env.prototype.versionString = function() { if (!jasmine.version_) { return "version unknown"; } var version = this.version(); var versionString = version.major + "." + version.minor + "." + version.build; if (version.release_candidate) { versionString += ".rc" + version.release_candidate; } versionString += " revision " + version.revision; return versionString; }; /** * @returns a sequential integer starting at 0 */ jasmine.Env.prototype.nextSpecId = function () { return this.nextSpecId_++; }; /** * @returns a sequential integer starting at 0 */ jasmine.Env.prototype.nextSuiteId = function () { return this.nextSuiteId_++; }; /** * Register a reporter to receive status updates from Jasmine. * @param {jasmine.Reporter} reporter An object which will receive status updates. */ jasmine.Env.prototype.addReporter = function(reporter) { this.reporter.addReporter(reporter); }; jasmine.Env.prototype.execute = function() { this.currentRunner_.execute(); }; jasmine.Env.prototype.describe = function(description, specDefinitions) { var suite = new jasmine.Suite(this, description, specDefinitions, this.currentSuite); var parentSuite = this.currentSuite; if (parentSuite) { parentSuite.add(suite); } else { this.currentRunner_.add(suite); } this.currentSuite = suite; var declarationError = null; try { specDefinitions.call(suite); } catch(e) { declarationError = e; } if (declarationError) { this.it("encountered a declaration exception", function() { throw declarationError; }); } this.currentSuite = parentSuite; return suite; }; jasmine.Env.prototype.beforeEach = function(beforeEachFunction) { if (this.currentSuite) { this.currentSuite.beforeEach(beforeEachFunction); } else { this.currentRunner_.beforeEach(beforeEachFunction); } }; jasmine.Env.prototype.currentRunner = function () { return this.currentRunner_; }; jasmine.Env.prototype.afterEach = function(afterEachFunction) { if (this.currentSuite) { this.currentSuite.afterEach(afterEachFunction); } else { this.currentRunner_.afterEach(afterEachFunction); } }; jasmine.Env.prototype.xdescribe = function(desc, specDefinitions) { return { execute: function() { } }; }; jasmine.Env.prototype.it = function(description, func) { var spec = new jasmine.Spec(this, this.currentSuite, description); this.currentSuite.add(spec); this.currentSpec = spec; if (func) { spec.runs(func); } return spec; }; jasmine.Env.prototype.xit = function(desc, func) { return { id: this.nextSpecId(), runs: function() { } }; }; jasmine.Env.prototype.compareRegExps_ = function(a, b, mismatchKeys, mismatchValues) { if (a.source != b.source) mismatchValues.push("expected pattern /" + b.source + "/ is not equal to the pattern /" + a.source + "/"); if (a.ignoreCase != b.ignoreCase) mismatchValues.push("expected modifier i was" + (b.ignoreCase ? " " : " not ") + "set and does not equal the origin modifier"); if (a.global != b.global) mismatchValues.push("expected modifier g was" + (b.global ? " " : " not ") + "set and does not equal the origin modifier"); if (a.multiline != b.multiline) mismatchValues.push("expected modifier m was" + (b.multiline ? " " : " not ") + "set and does not equal the origin modifier"); if (a.sticky != b.sticky) mismatchValues.push("expected modifier y was" + (b.sticky ? " " : " not ") + "set and does not equal the origin modifier"); return (mismatchValues.length === 0); }; jasmine.Env.prototype.compareObjects_ = function(a, b, mismatchKeys, mismatchValues) { if (a.__Jasmine_been_here_before__ === b && b.__Jasmine_been_here_before__ === a) { return true; } a.__Jasmine_been_here_before__ = b; b.__Jasmine_been_here_before__ = a; var hasKey = function(obj, keyName) { return obj !== null && obj[keyName] !== jasmine.undefined; }; for (var property in b) { if (!hasKey(a, property) && hasKey(b, property)) { mismatchKeys.push("expected has key '" + property + "', but missing from actual."); } } for (property in a) { if (!hasKey(b, property) && hasKey(a, property)) { mismatchKeys.push("expected missing key '" + property + "', but present in actual."); } } for (property in b) { if (property == '__Jasmine_been_here_before__') continue; if (!this.equals_(a[property], b[property], mismatchKeys, mismatchValues)) { mismatchValues.push("'" + property + "' was '" + (b[property] ? jasmine.util.htmlEscape(b[property].toString()) : b[property]) + "' in expected, but was '" + (a[property] ? jasmine.util.htmlEscape(a[property].toString()) : a[property]) + "' in actual."); } } if (jasmine.isArray_(a) && jasmine.isArray_(b) && a.length != b.length) { mismatchValues.push("arrays were not the same length"); } delete a.__Jasmine_been_here_before__; delete b.__Jasmine_been_here_before__; return (mismatchKeys.length === 0 && mismatchValues.length === 0); }; jasmine.Env.prototype.equals_ = function(a, b, mismatchKeys, mismatchValues) { mismatchKeys = mismatchKeys || []; mismatchValues = mismatchValues || []; for (var i = 0; i < this.equalityTesters_.length; i++) { var equalityTester = this.equalityTesters_[i]; var result = equalityTester(a, b, this, mismatchKeys, mismatchValues); if (result !== jasmine.undefined) return result; } if (a === b) return true; if (a === jasmine.undefined || a === null || b === jasmine.undefined || b === null) { return (a == jasmine.undefined && b == jasmine.undefined); } if (jasmine.isDomNode(a) && jasmine.isDomNode(b)) { return a === b; } if (a instanceof Date && b instanceof Date) { return a.getTime() == b.getTime(); } if (a.jasmineMatches) { return a.jasmineMatches(b); } if (b.jasmineMatches) { return b.jasmineMatches(a); } if (a instanceof jasmine.Matchers.ObjectContaining) { return a.matches(b); } if (b instanceof jasmine.Matchers.ObjectContaining) { return b.matches(a); } if (jasmine.isString_(a) && jasmine.isString_(b)) { return (a == b); } if (jasmine.isNumber_(a) && jasmine.isNumber_(b)) { return (a == b); } if (a instanceof RegExp && b instanceof RegExp) { return this.compareRegExps_(a, b, mismatchKeys, mismatchValues); } if (typeof a === "object" && typeof b === "object") { return this.compareObjects_(a, b, mismatchKeys, mismatchValues); } //Straight check return (a === b); }; jasmine.Env.prototype.contains_ = function(haystack, needle) { if (jasmine.isArray_(haystack)) { for (var i = 0; i < haystack.length; i++) { if (this.equals_(haystack[i], needle)) return true; } return false; } return haystack.indexOf(needle) >= 0; }; jasmine.Env.prototype.addEqualityTester = function(equalityTester) { this.equalityTesters_.push(equalityTester); }; /** No-op base class for Jasmine reporters. * * @constructor */ jasmine.Reporter = function() { }; //noinspection JSUnusedLocalSymbols jasmine.Reporter.prototype.reportRunnerStarting = function(runner) { }; //noinspection JSUnusedLocalSymbols jasmine.Reporter.prototype.reportRunnerResults = function(runner) { }; //noinspection JSUnusedLocalSymbols jasmine.Reporter.prototype.reportSuiteResults = function(suite) { }; //noinspection JSUnusedLocalSymbols jasmine.Reporter.prototype.reportSpecStarting = function(spec) { }; //noinspection JSUnusedLocalSymbols jasmine.Reporter.prototype.reportSpecResults = function(spec) { }; //noinspection JSUnusedLocalSymbols jasmine.Reporter.prototype.log = function(str) { }; /** * Blocks are functions with executable code that make up a spec. * * @constructor * @param {jasmine.Env} env * @param {Function} func * @param {jasmine.Spec} spec */ jasmine.Block = function(env, func, spec) { this.env = env; this.func = func; this.spec = spec; }; jasmine.Block.prototype.execute = function(onComplete) { if (!jasmine.CATCH_EXCEPTIONS) { this.func.apply(this.spec); } else { try { this.func.apply(this.spec); } catch (e) { this.spec.fail(e); } } onComplete(); }; /** JavaScript API reporter. * * @constructor */ jasmine.JsApiReporter = function() { this.started = false; this.finished = false; this.suites_ = []; this.results_ = {}; }; jasmine.JsApiReporter.prototype.reportRunnerStarting = function(runner) { this.started = true; var suites = runner.topLevelSuites(); for (var i = 0; i < suites.length; i++) { var suite = suites[i]; this.suites_.push(this.summarize_(suite)); } }; jasmine.JsApiReporter.prototype.suites = function() { return this.suites_; }; jasmine.JsApiReporter.prototype.summarize_ = function(suiteOrSpec) { var isSuite = suiteOrSpec instanceof jasmine.Suite; var summary = { id: suiteOrSpec.id, name: suiteOrSpec.description, type: isSuite ? 'suite' : 'spec', children: [] }; if (isSuite) { var children = suiteOrSpec.children(); for (var i = 0; i < children.length; i++) { summary.children.push(this.summarize_(children[i])); } } return summary; }; jasmine.JsApiReporter.prototype.results = function() { return this.results_; }; jasmine.JsApiReporter.prototype.resultsForSpec = function(specId) { return this.results_[specId]; }; //noinspection JSUnusedLocalSymbols jasmine.JsApiReporter.prototype.reportRunnerResults = function(runner) { this.finished = true; }; //noinspection JSUnusedLocalSymbols jasmine.JsApiReporter.prototype.reportSuiteResults = function(suite) { }; //noinspection JSUnusedLocalSymbols jasmine.JsApiReporter.prototype.reportSpecResults = function(spec) { this.results_[spec.id] = { messages: spec.results().getItems(), result: spec.results().failedCount > 0 ? "failed" : "passed" }; }; //noinspection JSUnusedLocalSymbols jasmine.JsApiReporter.prototype.log = function(str) { }; jasmine.JsApiReporter.prototype.resultsForSpecs = function(specIds){ var results = {}; for (var i = 0; i < specIds.length; i++) { var specId = specIds[i]; results[specId] = this.summarizeResult_(this.results_[specId]); } return results; }; jasmine.JsApiReporter.prototype.summarizeResult_ = function(result){ var summaryMessages = []; var messagesLength = result.messages.length; for (var messageIndex = 0; messageIndex < messagesLength; messageIndex++) { var resultMessage = result.messages[messageIndex]; summaryMessages.push({ text: resultMessage.type == 'log' ? resultMessage.toString() : jasmine.undefined, passed: resultMessage.passed ? resultMessage.passed() : true, type: resultMessage.type, message: resultMessage.message, trace: { stack: resultMessage.passed && !resultMessage.passed() ? resultMessage.trace.stack : jasmine.undefined } }); } return { result : result.result, messages : summaryMessages }; }; /** * @constructor * @param {jasmine.Env} env * @param actual * @param {jasmine.Spec} spec */ jasmine.Matchers = function(env, actual, spec, opt_isNot) { this.env = env; this.actual = actual; this.spec = spec; this.isNot = opt_isNot || false; this.reportWasCalled_ = false; }; // todo: @deprecated as of Jasmine 0.11, remove soon [xw] jasmine.Matchers.pp = function(str) { throw new Error("jasmine.Matchers.pp() is no longer supported, please use jasmine.pp() instead!"); }; // todo: @deprecated Deprecated as of Jasmine 0.10. Rewrite your custom matchers to return true or false. [xw] jasmine.Matchers.prototype.report = function(result, failing_message, details) { throw new Error("As of jasmine 0.11, custom matchers must be implemented differently -- please see jasmine docs"); }; jasmine.Matchers.wrapInto_ = function(prototype, matchersClass) { for (var methodName in prototype) { if (methodName == 'report') continue; var orig = prototype[methodName]; matchersClass.prototype[methodName] = jasmine.Matchers.matcherFn_(methodName, orig); } }; jasmine.Matchers.matcherFn_ = function(matcherName, matcherFunction) { return function() { var matcherArgs = jasmine.util.argsToArray(arguments); var result = matcherFunction.apply(this, arguments); if (this.isNot) { result = !result; } if (this.reportWasCalled_) return result; var message; if (!result) { if (this.message) { message = this.message.apply(this, arguments); if (jasmine.isArray_(message)) { message = message[this.isNot ? 1 : 0]; } } else { var englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); }); message = "Expected " + jasmine.pp(this.actual) + (this.isNot ? " not " : " ") + englishyPredicate; if (matcherArgs.length > 0) { for (var i = 0; i < matcherArgs.length; i++) { if (i > 0) message += ","; message += " " + jasmine.pp(matcherArgs[i]); } } message += "."; } } var expectationResult = new jasmine.ExpectationResult({ matcherName: matcherName, passed: result, expected: matcherArgs.length > 1 ? matcherArgs : matcherArgs[0], actual: this.actual, message: message }); this.spec.addMatcherResult(expectationResult); return jasmine.undefined; }; }; /** * toBe: compares the actual to the expected using === * @param expected */ jasmine.Matchers.prototype.toBe = function(expected) { return this.actual === expected; }; /** * toNotBe: compares the actual to the expected using !== * @param expected * @deprecated as of 1.0. Use not.toBe() instead. */ jasmine.Matchers.prototype.toNotBe = function(expected) { return this.actual !== expected; }; /** * toEqual: compares the actual to the expected using common sense equality. Handles Objects, Arrays, etc. * * @param expected */ jasmine.Matchers.prototype.toEqual = function(expected) { return this.env.equals_(this.actual, expected); }; /** * toNotEqual: compares the actual to the expected using the ! of jasmine.Matchers.toEqual * @param expected * @deprecated as of 1.0. Use not.toEqual() instead. */ jasmine.Matchers.prototype.toNotEqual = function(expected) { return !this.env.equals_(this.actual, expected); }; /** * Matcher that compares the actual to the expected using a regular expression. Constructs a RegExp, so takes * a pattern or a String. * * @param expected */ jasmine.Matchers.prototype.toMatch = function(expected) { return new RegExp(expected).test(this.actual); }; /** * Matcher that compares the actual to the expected using the boolean inverse of jasmine.Matchers.toMatch * @param expected * @deprecated as of 1.0. Use not.toMatch() instead. */ jasmine.Matchers.prototype.toNotMatch = function(expected) { return !(new RegExp(expected).test(this.actual)); }; /** * Matcher that compares the actual to jasmine.undefined. */ jasmine.Matchers.prototype.toBeDefined = function() { return (this.actual !== jasmine.undefined); }; /** * Matcher that compares the actual to jasmine.undefined. */ jasmine.Matchers.prototype.toBeUndefined = function() { return (this.actual === jasmine.undefined); }; /** * Matcher that compares the actual to null. */ jasmine.Matchers.prototype.toBeNull = function() { return (this.actual === null); }; /** * Matcher that compares the actual to NaN. */ jasmine.Matchers.prototype.toBeNaN = function() { this.message = function() { return [ "Expected " + jasmine.pp(this.actual) + " to be NaN." ]; }; return (this.actual !== this.actual); }; /** * Matcher that boolean not-nots the actual. */ jasmine.Matchers.prototype.toBeTruthy = function() { return !!this.actual; }; /** * Matcher that boolean nots the actual. */ jasmine.Matchers.prototype.toBeFalsy = function() { return !this.actual; }; /** * Matcher that checks to see if the actual, a Jasmine spy, was called. */ jasmine.Matchers.prototype.toHaveBeenCalled = function() { if (arguments.length > 0) { throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith'); } if (!jasmine.isSpy(this.actual)) { throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.'); } this.message = function() { return [ "Expected spy " + this.actual.identity + " to have been called.", "Expected spy " + this.actual.identity + " not to have been called." ]; }; return this.actual.wasCalled; }; /** @deprecated Use expect(xxx).toHaveBeenCalled() instead */ jasmine.Matchers.prototype.wasCalled = jasmine.Matchers.prototype.toHaveBeenCalled; /** * Matcher that checks to see if the actual, a Jasmine spy, was not called. * * @deprecated Use expect(xxx).not.toHaveBeenCalled() instead */ jasmine.Matchers.prototype.wasNotCalled = function() { if (arguments.length > 0) { throw new Error('wasNotCalled does not take arguments'); } if (!jasmine.isSpy(this.actual)) { throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.'); } this.message = function() { return [ "Expected spy " + this.actual.identity + " to not have been called.", "Expected spy " + this.actual.identity + " to have been called." ]; }; return !this.actual.wasCalled; }; /** * Matcher that checks to see if the actual, a Jasmine spy, was called with a set of parameters. * * @example * */ jasmine.Matchers.prototype.toHaveBeenCalledWith = function() { var expectedArgs = jasmine.util.argsToArray(arguments); if (!jasmine.isSpy(this.actual)) { throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.'); } this.message = function() { var invertedMessage = "Expected spy " + this.actual.identity + " not to have been called with " + jasmine.pp(expectedArgs) + " but it was."; var positiveMessage = ""; if (this.actual.callCount === 0) { positiveMessage = "Expected spy " + this.actual.identity + " to have been called with " + jasmine.pp(expectedArgs) + " but it was never called."; } else { positiveMessage = "Expected spy " + this.actual.identity + " to have been called with " + jasmine.pp(expectedArgs) + " but actual calls were " + jasmine.pp(this.actual.argsForCall).replace(/^\[ | \]$/g, '') } return [positiveMessage, invertedMessage]; }; return this.env.contains_(this.actual.argsForCall, expectedArgs); }; /** @deprecated Use expect(xxx).toHaveBeenCalledWith() instead */ jasmine.Matchers.prototype.wasCalledWith = jasmine.Matchers.prototype.toHaveBeenCalledWith; /** @deprecated Use expect(xxx).not.toHaveBeenCalledWith() instead */ jasmine.Matchers.prototype.wasNotCalledWith = function() { var expectedArgs = jasmine.util.argsToArray(arguments); if (!jasmine.isSpy(this.actual)) { throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.'); } this.message = function() { return [ "Expected spy not to have been called with " + jasmine.pp(expectedArgs) + " but it was", "Expected spy to have been called with " + jasmine.pp(expectedArgs) + " but it was" ]; }; return !this.env.contains_(this.actual.argsForCall, expectedArgs); }; /** * Matcher that checks that the expected item is an element in the actual Array. * * @param {Object} expected */ jasmine.Matchers.prototype.toContain = function(expected) { return this.env.contains_(this.actual, expected); }; /** * Matcher that checks that the expected item is NOT an element in the actual Array. * * @param {Object} expected * @deprecated as of 1.0. Use not.toContain() instead. */ jasmine.Matchers.prototype.toNotContain = function(expected) { return !this.env.contains_(this.actual, expected); }; jasmine.Matchers.prototype.toBeLessThan = function(expected) { return this.actual < expected; }; jasmine.Matchers.prototype.toBeGreaterThan = function(expected) { return this.actual > expected; }; /** * Matcher that checks that the expected item is equal to the actual item * up to a given level of decimal precision (default 2). * * @param {Number} expected * @param {Number} precision, as number of decimal places */ jasmine.Matchers.prototype.toBeCloseTo = function(expected, precision) { if (!(precision === 0)) { precision = precision || 2; } return Math.abs(expected - this.actual) < (Math.pow(10, -precision) / 2); }; /** * Matcher that checks that the expected exception was thrown by the actual. * * @param {String} [expected] */ jasmine.Matchers.prototype.toThrow = function(expected) { var result = false; var exception; if (typeof this.actual != 'function') { throw new Error('Actual is not a function'); } try { this.actual(); } catch (e) { exception = e; } if (exception) { result = (expected === jasmine.undefined || this.env.equals_(exception.message || exception, expected.message || expected)); } var not = this.isNot ? "not " : ""; this.message = function() { if (exception && (expected === jasmine.undefined || !this.env.equals_(exception.message || exception, expected.message || expected))) { return ["Expected function " + not + "to throw", expected ? expected.message || expected : "an exception", ", but it threw", exception.message || exception].join(' '); } else { return "Expected function to throw an exception."; } }; return result; }; jasmine.Matchers.Any = function(expectedClass) { this.expectedClass = expectedClass; }; jasmine.Matchers.Any.prototype.jasmineMatches = function(other) { if (this.expectedClass == String) { return typeof other == 'string' || other instanceof String; } if (this.expectedClass == Number) { return typeof other == 'number' || other instanceof Number; } if (this.expectedClass == Function) { return typeof other == 'function' || other instanceof Function; } if (this.expectedClass == Object) { return typeof other == 'object'; } return other instanceof this.expectedClass; }; jasmine.Matchers.Any.prototype.jasmineToString = function() { return ''; }; jasmine.Matchers.ObjectContaining = function (sample) { this.sample = sample; }; jasmine.Matchers.ObjectContaining.prototype.jasmineMatches = function(other, mismatchKeys, mismatchValues) { mismatchKeys = mismatchKeys || []; mismatchValues = mismatchValues || []; var env = jasmine.getEnv(); var hasKey = function(obj, keyName) { return obj != null && obj[keyName] !== jasmine.undefined; }; for (var property in this.sample) { if (!hasKey(other, property) && hasKey(this.sample, property)) { mismatchKeys.push("expected has key '" + property + "', but missing from actual."); } else if (!env.equals_(this.sample[property], other[property], mismatchKeys, mismatchValues)) { mismatchValues.push("'" + property + "' was '" + (other[property] ? jasmine.util.htmlEscape(other[property].toString()) : other[property]) + "' in expected, but was '" + (this.sample[property] ? jasmine.util.htmlEscape(this.sample[property].toString()) : this.sample[property]) + "' in actual."); } } return (mismatchKeys.length === 0 && mismatchValues.length === 0); }; jasmine.Matchers.ObjectContaining.prototype.jasmineToString = function () { return ""; }; // Mock setTimeout, clearTimeout // Contributed by Pivotal Computer Systems, www.pivotalsf.com jasmine.FakeTimer = function() { this.reset(); var self = this; self.setTimeout = function(funcToCall, millis) { self.timeoutsMade++; self.scheduleFunction(self.timeoutsMade, funcToCall, millis, false); return self.timeoutsMade; }; self.setInterval = function(funcToCall, millis) { self.timeoutsMade++; self.scheduleFunction(self.timeoutsMade, funcToCall, millis, true); return self.timeoutsMade; }; self.clearTimeout = function(timeoutKey) { self.scheduledFunctions[timeoutKey] = jasmine.undefined; }; self.clearInterval = function(timeoutKey) { self.scheduledFunctions[timeoutKey] = jasmine.undefined; }; }; jasmine.FakeTimer.prototype.reset = function() { this.timeoutsMade = 0; this.scheduledFunctions = {}; this.nowMillis = 0; }; jasmine.FakeTimer.prototype.tick = function(millis) { var oldMillis = this.nowMillis; var newMillis = oldMillis + millis; this.runFunctionsWithinRange(oldMillis, newMillis); this.nowMillis = newMillis; }; jasmine.FakeTimer.prototype.runFunctionsWithinRange = function(oldMillis, nowMillis) { var scheduledFunc; var funcsToRun = []; for (var timeoutKey in this.scheduledFunctions) { scheduledFunc = this.scheduledFunctions[timeoutKey]; if (scheduledFunc != jasmine.undefined && scheduledFunc.runAtMillis >= oldMillis && scheduledFunc.runAtMillis <= nowMillis) { funcsToRun.push(scheduledFunc); this.scheduledFunctions[timeoutKey] = jasmine.undefined; } } if (funcsToRun.length > 0) { funcsToRun.sort(function(a, b) { return a.runAtMillis - b.runAtMillis; }); for (var i = 0; i < funcsToRun.length; ++i) { try { var funcToRun = funcsToRun[i]; this.nowMillis = funcToRun.runAtMillis; funcToRun.funcToCall(); if (funcToRun.recurring) { this.scheduleFunction(funcToRun.timeoutKey, funcToRun.funcToCall, funcToRun.millis, true); } } catch(e) { } } this.runFunctionsWithinRange(oldMillis, nowMillis); } }; jasmine.FakeTimer.prototype.scheduleFunction = function(timeoutKey, funcToCall, millis, recurring) { this.scheduledFunctions[timeoutKey] = { runAtMillis: this.nowMillis + millis, funcToCall: funcToCall, recurring: recurring, timeoutKey: timeoutKey, millis: millis }; }; /** * @namespace */ jasmine.Clock = { defaultFakeTimer: new jasmine.FakeTimer(), reset: function() { jasmine.Clock.assertInstalled(); jasmine.Clock.defaultFakeTimer.reset(); }, tick: function(millis) { jasmine.Clock.assertInstalled(); jasmine.Clock.defaultFakeTimer.tick(millis); }, runFunctionsWithinRange: function(oldMillis, nowMillis) { jasmine.Clock.defaultFakeTimer.runFunctionsWithinRange(oldMillis, nowMillis); }, scheduleFunction: function(timeoutKey, funcToCall, millis, recurring) { jasmine.Clock.defaultFakeTimer.scheduleFunction(timeoutKey, funcToCall, millis, recurring); }, useMock: function() { if (!jasmine.Clock.isInstalled()) { var spec = jasmine.getEnv().currentSpec; spec.after(jasmine.Clock.uninstallMock); jasmine.Clock.installMock(); } }, installMock: function() { jasmine.Clock.installed = jasmine.Clock.defaultFakeTimer; }, uninstallMock: function() { jasmine.Clock.assertInstalled(); jasmine.Clock.installed = jasmine.Clock.real; }, real: { setTimeout: jasmine.getGlobal().setTimeout, clearTimeout: jasmine.getGlobal().clearTimeout, setInterval: jasmine.getGlobal().setInterval, clearInterval: jasmine.getGlobal().clearInterval }, assertInstalled: function() { if (!jasmine.Clock.isInstalled()) { throw new Error("Mock clock is not installed, use jasmine.Clock.useMock()"); } }, isInstalled: function() { return jasmine.Clock.installed == jasmine.Clock.defaultFakeTimer; }, installed: null }; jasmine.Clock.installed = jasmine.Clock.real; //else for IE support jasmine.getGlobal().setTimeout = function(funcToCall, millis) { if (jasmine.Clock.installed.setTimeout.apply) { return jasmine.Clock.installed.setTimeout.apply(this, arguments); } else { return jasmine.Clock.installed.setTimeout(funcToCall, millis); } }; jasmine.getGlobal().setInterval = function(funcToCall, millis) { if (jasmine.Clock.installed.setInterval.apply) { return jasmine.Clock.installed.setInterval.apply(this, arguments); } else { return jasmine.Clock.installed.setInterval(funcToCall, millis); } }; jasmine.getGlobal().clearTimeout = function(timeoutKey) { if (jasmine.Clock.installed.clearTimeout.apply) { return jasmine.Clock.installed.clearTimeout.apply(this, arguments); } else { return jasmine.Clock.installed.clearTimeout(timeoutKey); } }; jasmine.getGlobal().clearInterval = function(timeoutKey) { if (jasmine.Clock.installed.clearTimeout.apply) { return jasmine.Clock.installed.clearInterval.apply(this, arguments); } else { return jasmine.Clock.installed.clearInterval(timeoutKey); } }; /** * @constructor */ jasmine.MultiReporter = function() { this.subReporters_ = []; }; jasmine.util.inherit(jasmine.MultiReporter, jasmine.Reporter); jasmine.MultiReporter.prototype.addReporter = function(reporter) { this.subReporters_.push(reporter); }; (function() { var functionNames = [ "reportRunnerStarting", "reportRunnerResults", "reportSuiteResults", "reportSpecStarting", "reportSpecResults", "log" ]; for (var i = 0; i < functionNames.length; i++) { var functionName = functionNames[i]; jasmine.MultiReporter.prototype[functionName] = (function(functionName) { return function() { for (var j = 0; j < this.subReporters_.length; j++) { var subReporter = this.subReporters_[j]; if (subReporter[functionName]) { subReporter[functionName].apply(subReporter, arguments); } } }; })(functionName); } })(); /** * Holds results for a set of Jasmine spec. Allows for the results array to hold another jasmine.NestedResults * * @constructor */ jasmine.NestedResults = function() { /** * The total count of results */ this.totalCount = 0; /** * Number of passed results */ this.passedCount = 0; /** * Number of failed results */ this.failedCount = 0; /** * Was this suite/spec skipped? */ this.skipped = false; /** * @ignore */ this.items_ = []; }; /** * Roll up the result counts. * * @param result */ jasmine.NestedResults.prototype.rollupCounts = function(result) { this.totalCount += result.totalCount; this.passedCount += result.passedCount; this.failedCount += result.failedCount; }; /** * Adds a log message. * @param values Array of message parts which will be concatenated later. */ jasmine.NestedResults.prototype.log = function(values) { this.items_.push(new jasmine.MessageResult(values)); }; /** * Getter for the results: message & results. */ jasmine.NestedResults.prototype.getItems = function() { return this.items_; }; /** * Adds a result, tracking counts (total, passed, & failed) * @param {jasmine.ExpectationResult|jasmine.NestedResults} result */ jasmine.NestedResults.prototype.addResult = function(result) { if (result.type != 'log') { if (result.items_) { this.rollupCounts(result); } else { this.totalCount++; if (result.passed()) { this.passedCount++; } else { this.failedCount++; } } } this.items_.push(result); }; /** * @returns {Boolean} True if everything below passed */ jasmine.NestedResults.prototype.passed = function() { return this.passedCount === this.totalCount; }; /** * Base class for pretty printing for expectation results. */ jasmine.PrettyPrinter = function() { this.ppNestLevel_ = 0; }; /** * Formats a value in a nice, human-readable string. * * @param value */ jasmine.PrettyPrinter.prototype.format = function(value) { this.ppNestLevel_++; try { if (value === jasmine.undefined) { this.emitScalar('undefined'); } else if (value === null) { this.emitScalar('null'); } else if (value === jasmine.getGlobal()) { this.emitScalar(''); } else if (value.jasmineToString) { this.emitScalar(value.jasmineToString()); } else if (typeof value === 'string') { this.emitString(value); } else if (jasmine.isSpy(value)) { this.emitScalar("spy on " + value.identity); } else if (value instanceof RegExp) { this.emitScalar(value.toString()); } else if (typeof value === 'function') { this.emitScalar('Function'); } else if (typeof value.nodeType === 'number') { this.emitScalar('HTMLNode'); } else if (value instanceof Date) { this.emitScalar('Date(' + value + ')'); } else if (value.__Jasmine_been_here_before__) { this.emitScalar(''); } else if (jasmine.isArray_(value) || typeof value == 'object') { value.__Jasmine_been_here_before__ = true; if (jasmine.isArray_(value)) { this.emitArray(value); } else { this.emitObject(value); } delete value.__Jasmine_been_here_before__; } else { this.emitScalar(value.toString()); } } finally { this.ppNestLevel_--; } }; jasmine.PrettyPrinter.prototype.iterateObject = function(obj, fn) { for (var property in obj) { if (!obj.hasOwnProperty(property)) continue; if (property == '__Jasmine_been_here_before__') continue; fn(property, obj.__lookupGetter__ ? (obj.__lookupGetter__(property) !== jasmine.undefined && obj.__lookupGetter__(property) !== null) : false); } }; jasmine.PrettyPrinter.prototype.emitArray = jasmine.unimplementedMethod_; jasmine.PrettyPrinter.prototype.emitObject = jasmine.unimplementedMethod_; jasmine.PrettyPrinter.prototype.emitScalar = jasmine.unimplementedMethod_; jasmine.PrettyPrinter.prototype.emitString = jasmine.unimplementedMethod_; jasmine.StringPrettyPrinter = function() { jasmine.PrettyPrinter.call(this); this.string = ''; }; jasmine.util.inherit(jasmine.StringPrettyPrinter, jasmine.PrettyPrinter); jasmine.StringPrettyPrinter.prototype.emitScalar = function(value) { this.append(value); }; jasmine.StringPrettyPrinter.prototype.emitString = function(value) { this.append("'" + value + "'"); }; jasmine.StringPrettyPrinter.prototype.emitArray = function(array) { if (this.ppNestLevel_ > jasmine.MAX_PRETTY_PRINT_DEPTH) { this.append("Array"); return; } this.append('[ '); for (var i = 0; i < array.length; i++) { if (i > 0) { this.append(', '); } this.format(array[i]); } this.append(' ]'); }; jasmine.StringPrettyPrinter.prototype.emitObject = function(obj) { if (this.ppNestLevel_ > jasmine.MAX_PRETTY_PRINT_DEPTH) { this.append("Object"); return; } var self = this; this.append('{ '); var first = true; this.iterateObject(obj, function(property, isGetter) { if (first) { first = false; } else { self.append(', '); } self.append(property); self.append(' : '); if (isGetter) { self.append(''); } else { self.format(obj[property]); } }); this.append(' }'); }; jasmine.StringPrettyPrinter.prototype.append = function(value) { this.string += value; }; jasmine.Queue = function(env) { this.env = env; // parallel to blocks. each true value in this array means the block will // get executed even if we abort this.ensured = []; this.blocks = []; this.running = false; this.index = 0; this.offset = 0; this.abort = false; }; jasmine.Queue.prototype.addBefore = function(block, ensure) { if (ensure === jasmine.undefined) { ensure = false; } this.blocks.unshift(block); this.ensured.unshift(ensure); }; jasmine.Queue.prototype.add = function(block, ensure) { if (ensure === jasmine.undefined) { ensure = false; } this.blocks.push(block); this.ensured.push(ensure); }; jasmine.Queue.prototype.insertNext = function(block, ensure) { if (ensure === jasmine.undefined) { ensure = false; } this.ensured.splice((this.index + this.offset + 1), 0, ensure); this.blocks.splice((this.index + this.offset + 1), 0, block); this.offset++; }; jasmine.Queue.prototype.start = function(onComplete) { this.running = true; this.onComplete = onComplete; this.next_(); }; jasmine.Queue.prototype.isRunning = function() { return this.running; }; jasmine.Queue.LOOP_DONT_RECURSE = true; jasmine.Queue.prototype.next_ = function() { var self = this; var goAgain = true; while (goAgain) { goAgain = false; if (self.index < self.blocks.length && !(this.abort && !this.ensured[self.index])) { var calledSynchronously = true; var completedSynchronously = false; var onComplete = function () { if (jasmine.Queue.LOOP_DONT_RECURSE && calledSynchronously) { completedSynchronously = true; return; } if (self.blocks[self.index].abort) { self.abort = true; } self.offset = 0; self.index++; var now = new Date().getTime(); if (self.env.updateInterval && now - self.env.lastUpdate > self.env.updateInterval) { self.env.lastUpdate = now; self.env.setTimeout(function() { self.next_(); }, 0); } else { if (jasmine.Queue.LOOP_DONT_RECURSE && completedSynchronously) { goAgain = true; } else { self.next_(); } } }; self.blocks[self.index].execute(onComplete); calledSynchronously = false; if (completedSynchronously) { onComplete(); } } else { self.running = false; if (self.onComplete) { self.onComplete(); } } } }; jasmine.Queue.prototype.results = function() { var results = new jasmine.NestedResults(); for (var i = 0; i < this.blocks.length; i++) { if (this.blocks[i].results) { results.addResult(this.blocks[i].results()); } } return results; }; /** * Runner * * @constructor * @param {jasmine.Env} env */ jasmine.Runner = function(env) { var self = this; self.env = env; self.queue = new jasmine.Queue(env); self.before_ = []; self.after_ = []; self.suites_ = []; }; jasmine.Runner.prototype.execute = function() { var self = this; if (self.env.reporter.reportRunnerStarting) { self.env.reporter.reportRunnerStarting(this); } self.queue.start(function () { self.finishCallback(); }); }; jasmine.Runner.prototype.beforeEach = function(beforeEachFunction) { beforeEachFunction.typeName = 'beforeEach'; this.before_.splice(0,0,beforeEachFunction); }; jasmine.Runner.prototype.afterEach = function(afterEachFunction) { afterEachFunction.typeName = 'afterEach'; this.after_.splice(0,0,afterEachFunction); }; jasmine.Runner.prototype.finishCallback = function() { this.env.reporter.reportRunnerResults(this); }; jasmine.Runner.prototype.addSuite = function(suite) { this.suites_.push(suite); }; jasmine.Runner.prototype.add = function(block) { if (block instanceof jasmine.Suite) { this.addSuite(block); } this.queue.add(block); }; jasmine.Runner.prototype.specs = function () { var suites = this.suites(); var specs = []; for (var i = 0; i < suites.length; i++) { specs = specs.concat(suites[i].specs()); } return specs; }; jasmine.Runner.prototype.suites = function() { return this.suites_; }; jasmine.Runner.prototype.topLevelSuites = function() { var topLevelSuites = []; for (var i = 0; i < this.suites_.length; i++) { if (!this.suites_[i].parentSuite) { topLevelSuites.push(this.suites_[i]); } } return topLevelSuites; }; jasmine.Runner.prototype.results = function() { return this.queue.results(); }; /** * Internal representation of a Jasmine specification, or test. * * @constructor * @param {jasmine.Env} env * @param {jasmine.Suite} suite * @param {String} description */ jasmine.Spec = function(env, suite, description) { if (!env) { throw new Error('jasmine.Env() required'); } if (!suite) { throw new Error('jasmine.Suite() required'); } var spec = this; spec.id = env.nextSpecId ? env.nextSpecId() : null; spec.env = env; spec.suite = suite; spec.description = description; spec.queue = new jasmine.Queue(env); spec.afterCallbacks = []; spec.spies_ = []; spec.results_ = new jasmine.NestedResults(); spec.results_.description = description; spec.matchersClass = null; }; jasmine.Spec.prototype.getFullName = function() { return this.suite.getFullName() + ' ' + this.description + '.'; }; jasmine.Spec.prototype.results = function() { return this.results_; }; /** * All parameters are pretty-printed and concatenated together, then written to the spec's output. * * Be careful not to leave calls to jasmine.log in production code. */ jasmine.Spec.prototype.log = function() { return this.results_.log(arguments); }; jasmine.Spec.prototype.runs = function (func) { var block = new jasmine.Block(this.env, func, this); this.addToQueue(block); return this; }; jasmine.Spec.prototype.addToQueue = function (block) { if (this.queue.isRunning()) { this.queue.insertNext(block); } else { this.queue.add(block); } }; /** * @param {jasmine.ExpectationResult} result */ jasmine.Spec.prototype.addMatcherResult = function(result) { this.results_.addResult(result); }; jasmine.Spec.prototype.expect = function(actual) { var positive = new (this.getMatchersClass_())(this.env, actual, this); positive.not = new (this.getMatchersClass_())(this.env, actual, this, true); return positive; }; /** * Waits a fixed time period before moving to the next block. * * @deprecated Use waitsFor() instead * @param {Number} timeout milliseconds to wait */ jasmine.Spec.prototype.waits = function(timeout) { var waitsFunc = new jasmine.WaitsBlock(this.env, timeout, this); this.addToQueue(waitsFunc); return this; }; /** * Waits for the latchFunction to return true before proceeding to the next block. * * @param {Function} latchFunction * @param {String} optional_timeoutMessage * @param {Number} optional_timeout */ jasmine.Spec.prototype.waitsFor = function(latchFunction, optional_timeoutMessage, optional_timeout) { var latchFunction_ = null; var optional_timeoutMessage_ = null; var optional_timeout_ = null; for (var i = 0; i < arguments.length; i++) { var arg = arguments[i]; switch (typeof arg) { case 'function': latchFunction_ = arg; break; case 'string': optional_timeoutMessage_ = arg; break; case 'number': optional_timeout_ = arg; break; } } var waitsForFunc = new jasmine.WaitsForBlock(this.env, optional_timeout_, latchFunction_, optional_timeoutMessage_, this); this.addToQueue(waitsForFunc); return this; }; jasmine.Spec.prototype.fail = function (e) { var expectationResult = new jasmine.ExpectationResult({ passed: false, message: e ? jasmine.util.formatException(e) : 'Exception', trace: { stack: e.stack } }); this.results_.addResult(expectationResult); }; jasmine.Spec.prototype.getMatchersClass_ = function() { return this.matchersClass || this.env.matchersClass; }; jasmine.Spec.prototype.addMatchers = function(matchersPrototype) { var parent = this.getMatchersClass_(); var newMatchersClass = function() { parent.apply(this, arguments); }; jasmine.util.inherit(newMatchersClass, parent); jasmine.Matchers.wrapInto_(matchersPrototype, newMatchersClass); this.matchersClass = newMatchersClass; }; jasmine.Spec.prototype.finishCallback = function() { this.env.reporter.reportSpecResults(this); }; jasmine.Spec.prototype.finish = function(onComplete) { this.removeAllSpies(); this.finishCallback(); if (onComplete) { onComplete(); } }; jasmine.Spec.prototype.after = function(doAfter) { if (this.queue.isRunning()) { this.queue.add(new jasmine.Block(this.env, doAfter, this), true); } else { this.afterCallbacks.unshift(doAfter); } }; jasmine.Spec.prototype.execute = function(onComplete) { var spec = this; if (!spec.env.specFilter(spec)) { spec.results_.skipped = true; spec.finish(onComplete); return; } this.env.reporter.reportSpecStarting(this); spec.env.currentSpec = spec; spec.addBeforesAndAftersToQueue(); spec.queue.start(function () { spec.finish(onComplete); }); }; jasmine.Spec.prototype.addBeforesAndAftersToQueue = function() { var runner = this.env.currentRunner(); var i; for (var suite = this.suite; suite; suite = suite.parentSuite) { for (i = 0; i < suite.before_.length; i++) { this.queue.addBefore(new jasmine.Block(this.env, suite.before_[i], this)); } } for (i = 0; i < runner.before_.length; i++) { this.queue.addBefore(new jasmine.Block(this.env, runner.before_[i], this)); } for (i = 0; i < this.afterCallbacks.length; i++) { this.queue.add(new jasmine.Block(this.env, this.afterCallbacks[i], this), true); } for (suite = this.suite; suite; suite = suite.parentSuite) { for (i = 0; i < suite.after_.length; i++) { this.queue.add(new jasmine.Block(this.env, suite.after_[i], this), true); } } for (i = 0; i < runner.after_.length; i++) { this.queue.add(new jasmine.Block(this.env, runner.after_[i], this), true); } }; jasmine.Spec.prototype.explodes = function() { throw 'explodes function should not have been called'; }; jasmine.Spec.prototype.spyOn = function(obj, methodName, ignoreMethodDoesntExist) { if (obj == jasmine.undefined) { throw "spyOn could not find an object to spy upon for " + methodName + "()"; } if (!ignoreMethodDoesntExist && obj[methodName] === jasmine.undefined) { throw methodName + '() method does not exist'; } if (!ignoreMethodDoesntExist && obj[methodName] && obj[methodName].isSpy) { throw new Error(methodName + ' has already been spied upon'); } var spyObj = jasmine.createSpy(methodName); this.spies_.push(spyObj); spyObj.baseObj = obj; spyObj.methodName = methodName; spyObj.originalValue = obj[methodName]; obj[methodName] = spyObj; return spyObj; }; jasmine.Spec.prototype.removeAllSpies = function() { for (var i = 0; i < this.spies_.length; i++) { var spy = this.spies_[i]; spy.baseObj[spy.methodName] = spy.originalValue; } this.spies_ = []; }; /** * Internal representation of a Jasmine suite. * * @constructor * @param {jasmine.Env} env * @param {String} description * @param {Function} specDefinitions * @param {jasmine.Suite} parentSuite */ jasmine.Suite = function(env, description, specDefinitions, parentSuite) { var self = this; self.id = env.nextSuiteId ? env.nextSuiteId() : null; self.description = description; self.queue = new jasmine.Queue(env); self.parentSuite = parentSuite; self.env = env; self.before_ = []; self.after_ = []; self.children_ = []; self.suites_ = []; self.specs_ = []; }; jasmine.Suite.prototype.getFullName = function() { var fullName = this.description; for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) { fullName = parentSuite.description + ' ' + fullName; } return fullName; }; jasmine.Suite.prototype.finish = function(onComplete) { this.env.reporter.reportSuiteResults(this); this.finished = true; if (typeof(onComplete) == 'function') { onComplete(); } }; jasmine.Suite.prototype.beforeEach = function(beforeEachFunction) { beforeEachFunction.typeName = 'beforeEach'; this.before_.unshift(beforeEachFunction); }; jasmine.Suite.prototype.afterEach = function(afterEachFunction) { afterEachFunction.typeName = 'afterEach'; this.after_.unshift(afterEachFunction); }; jasmine.Suite.prototype.results = function() { return this.queue.results(); }; jasmine.Suite.prototype.add = function(suiteOrSpec) { this.children_.push(suiteOrSpec); if (suiteOrSpec instanceof jasmine.Suite) { this.suites_.push(suiteOrSpec); this.env.currentRunner().addSuite(suiteOrSpec); } else { this.specs_.push(suiteOrSpec); } this.queue.add(suiteOrSpec); }; jasmine.Suite.prototype.specs = function() { return this.specs_; }; jasmine.Suite.prototype.suites = function() { return this.suites_; }; jasmine.Suite.prototype.children = function() { return this.children_; }; jasmine.Suite.prototype.execute = function(onComplete) { var self = this; this.queue.start(function () { self.finish(onComplete); }); }; jasmine.WaitsBlock = function(env, timeout, spec) { this.timeout = timeout; jasmine.Block.call(this, env, null, spec); }; jasmine.util.inherit(jasmine.WaitsBlock, jasmine.Block); jasmine.WaitsBlock.prototype.execute = function (onComplete) { if (jasmine.VERBOSE) { this.env.reporter.log('>> Jasmine waiting for ' + this.timeout + ' ms...'); } this.env.setTimeout(function () { onComplete(); }, this.timeout); }; /** * A block which waits for some condition to become true, with timeout. * * @constructor * @extends jasmine.Block * @param {jasmine.Env} env The Jasmine environment. * @param {Number} timeout The maximum time in milliseconds to wait for the condition to become true. * @param {Function} latchFunction A function which returns true when the desired condition has been met. * @param {String} message The message to display if the desired condition hasn't been met within the given time period. * @param {jasmine.Spec} spec The Jasmine spec. */ jasmine.WaitsForBlock = function(env, timeout, latchFunction, message, spec) { this.timeout = timeout || env.defaultTimeoutInterval; this.latchFunction = latchFunction; this.message = message; this.totalTimeSpentWaitingForLatch = 0; jasmine.Block.call(this, env, null, spec); }; jasmine.util.inherit(jasmine.WaitsForBlock, jasmine.Block); jasmine.WaitsForBlock.TIMEOUT_INCREMENT = 10; jasmine.WaitsForBlock.prototype.execute = function(onComplete) { if (jasmine.VERBOSE) { this.env.reporter.log('>> Jasmine waiting for ' + (this.message || 'something to happen')); } var latchFunctionResult; try { latchFunctionResult = this.latchFunction.apply(this.spec); } catch (e) { this.spec.fail(e); onComplete(); return; } if (latchFunctionResult) { onComplete(); } else if (this.totalTimeSpentWaitingForLatch >= this.timeout) { var message = 'timed out after ' + this.timeout + ' msec waiting for ' + (this.message || 'something to happen'); this.spec.fail({ name: 'timeout', message: message }); this.abort = true; onComplete(); } else { this.totalTimeSpentWaitingForLatch += jasmine.WaitsForBlock.TIMEOUT_INCREMENT; var self = this; this.env.setTimeout(function() { self.execute(onComplete); }, jasmine.WaitsForBlock.TIMEOUT_INCREMENT); } }; jasmine.version_= { "major": 1, "minor": 3, "build": 1, "revision": 1354556913 }; assets/plugins/gmaps/test/template/jasmine-gmaps.html000064400000003114152510437730017057 0ustar00 Jasmine Spec Runner <% css.forEach(function(style){ %> <% }) %> <% with (scripts) { %> <% [].concat(polyfills, jasmine, vendor, helpers, src, specs, reporters, start).forEach(function(script){ %> <% }) %> <% }; %>

    Basic map

    Advanced map

    Map with events

    Map with markers

    Map with custom controls

    Map with polygons

    Map with layers

    Map with overlays

    Map with routes

    Map with styles

    Street View Panorama

    Map with Street View

    Street View Panorama with events

    Events

    assets/plugins/gmaps/test/index.html000064400000005550152510437730013626 0ustar00 gmaps.js test

    Basic map

    Advanced map

    Map with events

    Map with markers

    Map with custom controls

    Map with polygons

    Map with layers

    Map with overlays

    Map with routes

    Map with styles

    Street View Panorama

    Map with Street View

    Street View Panorama with events

    Events

    assets/plugins/gmaps/CONTRIBUTING.md000064400000003253152510437730013101 0ustar00Since gmaps.js has been created to accomplish some goals about simplicity and cleanliness, the contributions must be guided by some rules, in order to keep gmaps.js simple to use and brief in code. ## About requirements gmaps.js only requires JavaScript, so new features must be written in plain JavaScript and shouldn’t depend of external libraries like jQuery, Prototype, etc. ## About examples and documentation Big changes, like support for new libraries or services, or custom features, need an example file (or files, depending of the magnitude of the contribution) and an entry in the documentation page. The example file must be included in the branch `gh-pages`, and be linked in the examples page. Example file in the `master` branch is optional. The documentation must explain in an simple way any argument passed in the method, and tell if it’s argument is optional or not. No examples are required here. ## About new features The main goal of gmaps.js is to have full support to all features of native Google Maps API, so the primary goal of the contributions to cover the missing features. But other contributions are welcome. If the new feature has a functionality different from strictly work with maps (like animations, custom infoWindows or support for external services), it would be ideal to create an extension with this feature. ## About coding standards * Default values must be defined. * Functions must end with semi-colon. * Function names in camel case. * Two space for indentation. * Use strict mode syntax. * Don’t use prototype object to extend gmaps.js (except with extensions). * Use apply for calling functions. _**Thanks for contributing with gmaps.js**_ assets/plugins/gmaps/.gitignore000064400000000015152510437730012631 0ustar00/node_modulesassets/plugins/gmaps/examples/static_polylines.html000064400000003220152510437730016733 0ustar00 GMaps.js — Static map with polyline

    GMaps.js — Static map with polyline

    A single polyline can be also drawed in a static map:

    url = GMaps.staticMapURL({
      size: [610, 350],
      lat: -12.043333,
      lng: -77.028333,
    
      polyline: {
        path: path,
        strokeColor: '#131540',
        strokeOpacity: 0.6,
        strokeWeight: 6
      }
    });
    
    $('<img/>').attr('src', url)
      .appendTo('#map');
    assets/plugins/gmaps/examples/geolocation.html000064400000004323152510437730015656 0ustar00 GMaps.js — Geolocation

    GMaps.js — Geolocation

    GMaps.js supports HTML5 Geolocation:

    GMaps.geolocate({
      success: function(position){
        map.setCenter(position.coords.latitude, position.coords.longitude);
      },
      error: function(error){
        alert('Geolocation failed: '+error.message);
      },
      not_supported: function(){
        alert("Your browser does not support geolocation");
      },
      always: function(){
        alert("Done!");
      }
    });

    GMaps.geolocate supports 4 functions:

    • success (required): fires when geolocation has been successful
    • error (required): fires when geolocation has not been done
    • not_supported (required): fires when geolocation is not supported by the browser
    • always (optional): fires always after every scenario described above.

    assets/plugins/gmaps/examples/fusion_tables.html000064400000004116152510437740016211 0ustar00 GMaps.js — Fusion Tables layers

    GMaps.js — Fusion Tables layers

    GMaps.js allows to add Fusion Table layers:

    infoWindow = new google.maps.InfoWindow({});
    map.loadFromFusionTables({
      query: {
        select: '\'Geocodable address\'',
        from: '1mZ53Z70NsChnBMm-qEYmSDOvLXgrreLTkQUvvg'
      },
      suppressInfoWindows: true,
      events: {
        click: function(point){
          infoWindow.setContent('You clicked here!');
          infoWindow.setPosition(point.latLng);
          infoWindow.open(map.map);
        }
      }
    });

    Note: You can learn more about Fusion Table layers here.

    assets/plugins/gmaps/examples/layers_places.html000064400000004643152510437740016207 0ustar00 Layers Maps: Places

    GMaps.js Places layer

    You can easily add or remove a layer using GMaps.js:

    map.addLayer('places', {
              location : new google.maps.LatLng(-33.8665433,151.1956316),
              radius : 500,
              types : ['store'],
              search: function (results, status) {
                //do something with the result 
              }
            });
    

    Note: There are 3 types of function to use: search(), textSearch() and nearbySearch(). On the Google Places page you can see the options to use per search function.

    assets/plugins/gmaps/examples/overlays.html000064400000003637152510437740015227 0ustar00 GMaps.js — Overlays

    GMaps.js — Overlays

    You can add overlays using:

    map.drawOverlay({
      lat: -12.043333,
      lng: -77.028333,
      content: '<div class="overlay">Lima</div>'
    });

    You must define latitude, longitude and the content of the map overlay.

    Note: Also, you must define a height to the content.

    Note: Also, you can define a verticalAlign, which can be top, middle or bottom, and horizontalAlign, which can be left, center or right.

    assets/plugins/gmaps/examples/kml.html000064400000003755152510437740014147 0ustar00 GMaps.js — KML layers

    GMaps.js — KML layers

    GMaps.js allows to add KML and GeoRSS layers:

    infoWindow = new google.maps.InfoWindow({});
    map.loadFromKML({
      url: 'http://www.searcharoo.net/SearchKml/newyork.kml',
      suppressInfoWindows: true,
      events: {
        click: function(point){
          infoWindow.setContent(point.featureData.infoWindowHtml);
          infoWindow.setPosition(point.latLng);
          infoWindow.open(map.map);
        }
      }
    });

    Note: You can learn more about KML and GeoRSS layers here.

    assets/plugins/gmaps/examples/map_types.html000064400000004243152510437740015356 0ustar00 GMaps.js — Map Types

    GMaps.js — Map Types

    You can define many map types from external map services, like OpenStreetMap:

    map.addMapType("osm", {
      getTileUrl: function(coord, zoom) {
        return "http://tile.openstreetmap.org/" + zoom + "/" + coord.x + "/" + coord.y + ".png";
      },
      tileSize: new google.maps.Size(256, 256),
      name: "OpenStreetMap",
      maxZoom: 18
    });

    You must define a function called getTileUrl, which returns a tile URL according the coordenates in the map.

    assets/plugins/gmaps/examples/examples.css000064400000001705152510437740015017 0ustar00body{ font-family: 'Droid Sans', 'Helvetica', Arial, sans-serif; margin:5px; } #map{ display: block; width: 95%; height: 350px; margin: 0 auto; -moz-box-shadow: 0px 5px 20px #ccc; -webkit-box-shadow: 0px 5px 20px #ccc; box-shadow: 0px 5px 20px #ccc; } #map.large{ height:500px; } .overlay{ display:block; text-align:center; color:#fff; font-size:60px; line-height:80px; opacity:0.8; background:#4477aa; border:solid 3px #336699; border-radius:4px; box-shadow:2px 2px 10px #333; text-shadow:1px 1px 1px #666; padding:0 4px; } .overlay_arrow{ left:50%; margin-left:-16px; width:0; height:0; position:absolute; } .overlay_arrow.above{ bottom:-15px; border-left:16px solid transparent; border-right:16px solid transparent; border-top:16px solid #336699; } .overlay_arrow.below{ top:-15px; border-left:16px solid transparent; border-right:16px solid transparent; border-bottom:16px solid #336699; }assets/plugins/gmaps/examples/static.html000064400000002540152510437740014642 0ustar00 GMaps.js — Static map

    GMaps.js — Static map

    You can easily make a static map using GMaps.js:

    url = GMaps.staticMapURL({
      size: [610, 350],
      lat: -12.043333,
      lng: -77.028333
    });
    
    $('<img/>').attr('src', url)
      .appendTo('#map');

    You must define a size and the latitude and longitude of the map's center.

    Note: You also can define zoom (by default is 15).

    assets/plugins/gmaps/examples/layers.html000064400000003754152510437740014662 0ustar00 Layers Maps

    GMaps.js add and remove layers - Layers

    You can easily add or remove a layer using GMaps.js:

    var map = new GMaps({
      el: '#map',
      lat: -12.043333,
      lng: -77.028333
    });
    map.addLayer('weather', {
      clickable: false
    });
    map.addLayer('clouds');
    

    Note: You can choose different layers. Possible values are weather, clouds, traffic, transit and/or bicycling

    Note: Be aware that you have to add the library 'weather' in the url for the weather/clouds layer:

    http://maps.google.com/maps/api/js?sensor=true&libraries=weather

    Note: In the second param you can add your options for the layer as object.

    Note: To remove a layer you can use

    map.removeLayer('clouds');

    assets/plugins/gmaps/examples/elevation_locations.html000064400000003765152510437740017426 0ustar00 GMaps.js — Elevation locations

    GMaps.js — Elevation locations

    With GMaps.js you can add elevation this way:

    map.getElevations({
      locations : [[-12.040397656836609,-77.03373871559225], [-12.050047116528843,-77.02448169303511],  [-12.044804866577001,-77.02154422636042]],
        callback : function (result, status){
        if (status == google.maps.ElevationStatus.OK) {
          console.log(result, status);
        }
      }
    });
    assets/plugins/gmaps/examples/travel_route.html000064400000005065152510437740016073 0ustar00 GMaps.js — Travel Route

    GMaps.js — Travel route

    assets/plugins/gmaps/examples/routes.html000064400000003440152510437740014674 0ustar00 GMaps.js — Routes

    GMaps.js — Routes

    With GMaps.js you can draw a route between two points this way:

    map.drawRoute({
      origin: [-12.044012922866312, -77.02470665341184],
      destination: [-12.090814532191756, -77.02271108990476],
      travelMode: 'driving',
      strokeColor: '#131540',
      strokeOpacity: 0.6,
      strokeWeight: 6
    });

    You must define two points (origin and destination) and color, opacity and weight of the route in the map.

    Also, you can define a travelMode: driving, bicycling or walking. Default is walking

    assets/plugins/gmaps/examples/static_markers.html000064400000003232152510437740016365 0ustar00 GMaps.js — Static map with markers

    GMaps.js — Static map with markers

    With GMaps.js, a static map with markers is made this way:

    url = GMaps.staticMapURL({
      size: [610, 350],
      lat: -12.043333,
      lng: -77.028333,
      markers: [
        {lat: -12.043333, lng: -77.028333},
        {lat: -12.045333, lng: -77.034, size: 'small'},
        {lat: -12.045633, lng: -77.022, color: 'blue'}
      ]
    });
    
    $('<img/>').attr('src', url)
      .appendTo('#map');

    If no style attribute (like color, size or icon) is defined for a marker, the last one (or the default) will be used.

    assets/plugins/gmaps/examples/markers.html000064400000004567152510437740015032 0ustar00 GMaps.js — Markers

    GMaps.js — Markers

    With GMaps.js you can add markers this way:

    map.addMarker({
      lat: -12.043333,
      lng: -77.028333,
      title: 'Lima',
      click: function(e){
        alert('You clicked in this marker');
      }
    });

    latitude and longitude are required. You can also attach additional information with details, which will be passed to Event object (e) in the events previously defined.

    Note If you want to show an Info Window, you must add:

    infoWindow: {
            content: '<p>HTML Content</p>'
          }

    NoteThe Info Windows also can bind these events: closeclick, content_changed, domready, position_changed and zindex_changed

    assets/plugins/gmaps/examples/context_menu.html000064400000005264152510437740016071 0ustar00 GMaps.js — Context menu

    GMaps.js — Context menu

    You can define a context menu (which will show on right click) with:

    map.setContextMenu({
      control: 'map',
      options: [{
        title: 'Add marker',
        name: 'add_marker',
        action: function(e){
          this.addMarker({
            lat: e.latLng.lat(),
            lng: e.latLng.lng(),
            title: 'New marker'
          });
        }
      }, {
        title: 'Center here',
        name: 'center_here',
        action: function(e){
          this.setCenter(e.latLng.lat(), e.latLng.lng());
        }
      }]
    });

    You must define the control that the context menu is attached (map or marker) and an array of options with title, name and action Inside action you can use this for the GMaps.js object (map in this case) and MouseEvent object e.

    assets/plugins/gmaps/examples/geofences.html000064400000004477152510437740015324 0ustar00 GMaps.js — Geofences

    GMaps.js — Geofences

    You can attach a geofence (which can be a polygon or a bounds) to a marker with:

    polygon = map.drawPolygon({
      paths: path,
      strokeColor: '#BBD8E9',
      strokeOpacity: 1,
      strokeWeight: 3,
      fillColor: '#BBD8E9',
      fillOpacity: 0.6
    });
    map.addMarker({
      lat: -12.043333,
      lng: -77.028333,
      draggable: true,
      fences: [polygon],
      outside: function(marker, fence){
        alert('This marker has been moved outside of its fence');
      }
    });

    You must define an outside callback, which will use this marker and its fence.

    Note: You also can use checkMarkerGeofence or checkGeofence methods.

    assets/plugins/gmaps/examples/overlay_map_types.html000064400000005416152510437740017122 0ustar00 GMaps.js — Overlay Map Types

    GMaps.js — Overlay Map Types

    You can define many overlay map types this way:

    var getTile = function(coord, zoom, ownerDocument) {
      var div = ownerDocument.createElement('div');
      div.innerHTML = coord;
      div.style.width = this.tileSize.width + 'px';
      div.style.height = this.tileSize.height + 'px';
      div.style.background = 'rgba(250, 250, 250, 0.55)';
      div.style.fontFamily = 'Monaco, Andale Mono, Courier New, monospace';
      div.style.fontSize = '10';
      div.style.fontWeight = 'bolder';
      div.style.border = 'dotted 1px #aaa';
      div.style.textAlign = 'center';
      div.style.lineHeight = this.tileSize.height + 'px';
      return div;
    };
    
    map.addOverlayMapType({
      index: 0,
      tileSize: new google.maps.Size(256, 256),
      getTile: getTile
    });

    You must define a function called getTile, which returns a HTML element used to fill the map overlay. Also, you have to set an overlay index, which place the overlay on top of the base map, according this index.

    NOTE: You can remove an overlay map type using removeOverlayMapType(overlay_index).

    assets/plugins/gmaps/examples/elevation_routes.html000064400000007176152510437740016754 0ustar00 GMaps.js — Elevation Routes

    GMaps.js — Elevation Routes

    With GMaps.js you can calculate the elevation for a route like this:

    map.getElevations({
      locations : [[-12.040397656836609,-77.03373871559225], [-12.040248585302038,-77.03993927003302], [-12.050047116528843,-77.02448169303511],  [-12.044804866577001,-77.02154422636042]],
      path: true, 
        callback : function (result, status){
        if (status == google.maps.ElevationStatus.OK) {
          console.log(result, status);
        }
      }
    });
    assets/plugins/gmaps/examples/marker_clusterer.html000064400000004323152510437740016725 0ustar00 GMaps.js — Marker Clusterer

    GMaps.js — Marker Clusterer

    With GMaps.js you can use a marker clusterer to group large amount of markers:

    map = new GMaps({
      div: '#map',
      lat: -12.043333,
      lng: -77.028333,
      markerClusterer: function(map) {
        return new MarkerClusterer(map);
      }
    });

    You can use MarkerClusterer or MarkerClustererPlus. If you want to use a custom marker clustering library, you have to define a addMarker method.

    Note: Read more about MarkerClusterer and MarkerClustererPlus here.

    assets/plugins/gmaps/examples/polygons.html000064400000010201152510437740015216 0ustar00 GMaps.js — Polygons

    GMaps.js — Polygons

    You can add polygons in GMaps.js this way:

    path = [[-12.040397656836609,-77.03373871559225], [-12.040248585302038,-77.03993927003302], [-12.050047116528843,-77.02448169303511], [-12.044804866577001,-77.02154422636042]];
    
    map.drawPolygon({
      paths: path,
      strokeColor: '#131540',
      strokeOpacity: 0.6,
      strokeWeight: 6
    });

    The path of the polygon is defined by an array of array of two (latitude and longitude).

    NOTE: Also, you can add a GeoJSON Polygon or MultiPolygon path using useGeoJSON: true.

    assets/plugins/gmaps/examples/basic.html000064400000003210152510437740014427 0ustar00 GMaps.js — Basic

    GMaps.js — Basic

    Using GMaps.js is as easy as:

    new GMaps({
      el: '#map',
      lat: -12.043333,
      lng: -77.028333
    });

    You must define container ID, latitude and longitude of the map's center.

    Note: You also can define zoom, width and height. By default, zoom is 15. Width and height in a CSS class will replace these values.

    assets/plugins/gmaps/examples/geometry.html000064400000005701152510437740015210 0ustar00 GMaps.js — Geometry overlays

    GMaps.js — Geometry overlays

    You can draw geometry overlays (which can be a polygon or a rectangle or a circle):

    polygon = map.drawRectangle({
      bounds: bounds,
      strokeColor: '#BBD8E9',
      strokeOpacity: 1,
      strokeWeight: 3,
      fillColor: '#BBD8E9',
      fillOpacity: 0.6
    });
    polygon = map.drawPolygon({
      paths: paths,
      strokeColor: '#25D359',
      strokeOpacity: 1,
      strokeWeight: 3,
      fillColor: '#25D359',
      fillOpacity: 0.6
    });
    circle = map.drawCircle({
      lat: lat,
      lng: lng,
      radius: 350,  //350 meters
      strokeColor: '#432070',
      strokeOpacity: 1,
      strokeWeight: 3,
      fillColor: '#432070',
      fillOpacity: 0.6
    });

    Be careful with the settings as they are not the same for each overlay.

    assets/plugins/gmaps/examples/map_events.html000064400000003004152510437740015510 0ustar00 GMaps.js — Map events

    GMaps.js — Map events

    GMaps.js allows to define map events very easily:

    map = new GMaps({
      el: '#map',
      zoom: 16,
      lat: -12.043333,
      lng: -77.028333,
      click: function(e){
        alert('click');
      },
      dragend: function(e){
        alert('dragend');
      }
    });

    Note: You can check the list of map events here.

    assets/plugins/gmaps/examples/geocoding.html000064400000004351152510437740015313 0ustar00 GMaps.js — Geocoding

    GMaps.js — Geocoding

    You can geocoding this way:

    GMaps.geocode({
      address: $('#address').val(),
      callback: function(results, status){
        if(status=='OK'){
          var latlng = results[0].geometry.location;
          map.setCenter(latlng.lat(), latlng.lng());
          map.addMarker({
            lat: latlng.lat(),
            lng: latlng.lng()
          });
        }
      }
    });

    You can define either address or lat and lng. Also, you must define callback, which will use results of geocoding and status.

    assets/plugins/gmaps/examples/styled_maps.html000064400000004732152510437740015704 0ustar00 Styled Maps

    GMaps.js style extension - Styled Maps

    You can easily manage a map style using GMaps.js:

     var styles = [
      {
        featureType: "road",
        elementType: "geometry",
        stylers: [
          { lightness: 100 },
          { visibility: "simplified" }
        ]
      }, {
        ...
      }
    ];
    
    map.addStyle({
        styledMapName:"Styled Map",
        styles: styles,
        mapTypeId: "map_style"  
    });
    
    map.setStyle("map_style");

    Note: You can choose different styles and associate the styled map with the MapTypeId and set it to display.

    assets/plugins/gmaps/examples/routes_advanced.html000064400000004472152510437740016527 0ustar00 GMaps.js — Routes

    GMaps.js — Routes

    You can travel a route, step by step, this way:

    map.travelRoute({
      origin: [-12.044012922866312, -77.02470665341184],
      destination: [-12.090814532191756, -77.02271108990476],
      travelMode: 'driving',
      step: function(e){
        $('#instructions').append('<li>'+e.instructions+'</li>');
        $('#instructions li:eq('+e.step_number+')').delay(450*e.step_number).fadeIn(200, function(){
          map.drawPolyline({
            path: e.path,
            strokeColor: '#131540',
            strokeOpacity: 0.6,
            strokeWeight: 6
          });  
        });
      }
    });

    Same as drawRoute, you must define an origin, destination and travelMode. Also, you must define the function that GMaps will call every step in the route.

    assets/plugins/gmaps/examples/polylines.html000064400000004110152510437740015364 0ustar00 GMaps.js — Polylines

    GMaps.js — Polylines

    You can add polylines in GMaps.js this way:

    path = [[-12.044012922866312, -77.02470665341184], [-12.05449279282314, -77.03024273281858], [-12.055122327623378, -77.03039293652341], [-12.075917129727586, -77.02764635449216], [-12.07635776902266, -77.02792530422971], [-12.076819390363665, -77.02893381481931], [-12.088527520066453, -77.0241058385925], [-12.090814532191756, -77.02271108990476]];
    
    map.drawPolyline({
      path: path,
      strokeColor: '#131540',
      strokeOpacity: 0.6,
      strokeWeight: 6
    });

    The path of the polyline is defined by an array of array of two (latitude and longitude).

    assets/plugins/gmaps/examples/custom_controls.html000064400000005137152510437740016615 0ustar00 GMaps.js — Custom controls

    GMaps.js — Custom controls

    GMaps.js allows to add custom controls:

    map.addControl({
      position: 'top_right',
      text: 'Geolocate',
      style: {
        margin: '5px',
        padding: '1px 6px',
        border: 'solid 1px #717B87',
        background: '#fff'
      },
      events: {
        click: function(){
          console.log(this);
        }
      }
    });

    Note: You can use the following positions:

    • top_center
    • top_left
    • top_right
    • left_top
    • right_top
    • left_center
    • right_center
    • left_bottom
    • right_bottom
    • bottom_center
    • bottom_left
    • bottom_right
    You can learn more of custom controls here.

    assets/plugins/jQuery-Smart-Wizard/smartwizard-autostep.htm000064400000021702152510437740020265 0ustar00 Smart Wizard 3 - Basic Example - a javascript jQuery wizard control plugin

    Smart Wizard 3

    a javascript jQuery wizard control plugin

    Example: Basic Wizard

    Step 1 Content

    • List 1
    • List 2

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Step 2 Content

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Step 3 Content

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Step 4 Content

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    assets/plugins/jQuery-Smart-Wizard/styles/smart_wizard_vertical.css000064400000014624152510437740022003 0ustar00/* SmartWizard 2.0 plugin jQuery Wizard control Plugin by Dipu http://www.techlaboratory.net http://tech-laboratory.blogspot.com */ .swMain { position:relative; display:block; margin:0; padding:0; border: 0px solid #CCC; overflow:visible; float:left; width:980px;/* */ } .swMain .stepContainer { display:block; position: relative; margin: 0; padding:0; border: 0px solid #CCC; overflow:hidden; clear:right; height:300px; } .swMain .stepContainer div.content { display:block; position: absolute; float:left; margin: 0; padding:5px; border: 1px solid #CCC; font: normal 12px Verdana, Arial, Helvetica, sans-serif; color:#5A5655; background-color:#F8F8F8; height:300px; text-align:left; overflow:auto; z-index:88; -webkit-border-radius: 5px; -moz-border-radius : 5px; width:720px; clear:both; } .swMain div.actionBar { display:block; position: relative; clear:right; margin: 3px 0 0 0; border: 1px solid #CCC; padding: 0; color: #5A5655; background-color: #F8F8F8; height:40px; /* width:730px; float:right; */ text-align:left; overflow:auto; z-index:88; -webkit-border-radius: 5px; -moz-border-radius : 5px; } .swMain .stepContainer .StepTitle { display:block; position: relative; margin:0; border:1px solid #E0E0E0; padding:5px; font: bold 16px Verdana, Arial, Helvetica, sans-serif; color:#5A5655; background-color:#E0E0E0; clear:both; text-align:left; z-index:88; -webkit-border-radius: 5px; -moz-border-radius : 5px; } .swMain ul.anchor { position: relative; display:block; float:left; list-style: none; padding: 0px; margin: 5px 10px 0 0; border: 0px solid #CCCCCC; background: transparent; /*#EEEEEE */ } .swMain ul.anchor li{ position: relative; display:block; margin: 0; padding: 0; padding-top:3px; padding-bottom: 3px; border: 0px solid #E0E0E0; float: left; clear:both; } /* Anchor Element Style */ .swMain ul.anchor li a { display:block; position:relative; float:left; margin:0; padding:3px; height:70px; width:230px; text-decoration: none; outline-style:none; -moz-border-radius : 5px; -webkit-border-radius: 5px; z-index:99; } .swMain ul.anchor li a .stepNumber{ position:relative; float:left; width:30px; text-align: center; padding:5px; padding-top:0; font: bold 45px Verdana, Arial, Helvetica, sans-serif; } .swMain ul.anchor li a .stepDesc{ position:relative; display:block; float:left; text-align: left; padding:5px; width:70%; font: bold 20px Verdana, Arial, Helvetica, sans-serif; } .swMain ul.anchor li a .stepDesc small{ font: normal 12px Verdana, Arial, Helvetica, sans-serif; } .swMain ul.anchor li a.selected{ color:#F8F8F8; background: #EA8511; /* EA8511 */ border: 1px solid #EA8511; cursor:text; -moz-box-shadow: 1px 5px 10px #888; -webkit-box-shadow: 1px 5px 10px #888; box-shadow: 1px 5px 10px #888; } .swMain ul.anchor li a.selected:hover { color:#F8F8F8; background: #EA8511; } .swMain ul.anchor li a.done { position:relative; color:#FFF; background: #8CC63F; border: 1px solid #8CC63F; z-index:99; } .swMain ul.anchor li a.done:hover { color:#5A5655; background: #8CC63F; border: 1px solid #5A5655; } .swMain ul.anchor li a.disabled { color:#CCCCCC; background: #F8F8F8; border: 1px solid #CCC; cursor:text; } .swMain ul.anchor li a.disabled:hover { color:#CCCCCC; background: #F8F8F8; } .swMain ul.anchor li a.error { color:#6c6c6c !important; background: #f08f75 !important; border: 1px solid #fb3500 !important; } .swMain ul.anchor li a.error:hover { color:#000 !important; } .swMain .buttonNext { display:block; float:right; margin:5px 3px 0 3px; padding:5px; text-decoration: none; text-align: center; font: bold 13px Verdana, Arial, Helvetica, sans-serif; width:100px; color:#FFF; outline-style:none; background-color: #5A5655; border: 1px solid #5A5655; -moz-border-radius : 5px; -webkit-border-radius: 5px; } .swMain .buttonDisabled { color:#F8F8F8 !important; background-color: #CCCCCC !important; border: 1px solid #CCCCCC !important; cursor:text; } .swMain .buttonPrevious { display:block; float:right; margin:5px 3px 0 3px; padding:5px; text-decoration: none; text-align: center; font: bold 13px Verdana, Arial, Helvetica, sans-serif; width:100px; color:#FFF; outline-style:none; background-color: #5A5655; border: 1px solid #5A5655; -moz-border-radius : 5px; -webkit-border-radius: 5px; } .swMain .buttonFinish { display:block; float:right; margin:5px 10px 0 3px; padding:5px; text-decoration: none; text-align: center; font: bold 13px Verdana, Arial, Helvetica, sans-serif; width:100px; color:#FFF; outline-style:none; background-color: #5A5655; border: 1px solid #5A5655; -moz-border-radius : 5px; -webkit-border-radius: 5px; } /* Form Styles */ .txtBox { border:1px solid #CCCCCC; color:#5A5655; font:13px Verdana,Arial,Helvetica,sans-serif; padding:2px; width:430px; } .txtBox:focus { border:1px solid #EA8511; } .swMain .loader { position:relative; display:none; float:left; margin: 2px 0 0 2px; padding:8px 10px 8px 40px; border: 1px solid #FFD700; font: bold 13px Verdana, Arial, Helvetica, sans-serif; color:#5A5655; background: #FFF url(../images/loader.gif) no-repeat 5px; -moz-border-radius : 5px; -webkit-border-radius: 5px; z-index:998; } .swMain .msgBox { position:relative; display:none; float:left; margin: 4px 0 0 5px; padding:5px; border: 1px solid #FFD700; background-color: #FFFFDD; font: normal 12px Verdana, Arial, Helvetica, sans-serif; color:#5A5655; -moz-border-radius : 5px; -webkit-border-radius: 5px; z-index:999; min-width:200px; } .swMain .msgBox .content { font: normal 12px Verdana,Arial,Helvetica,sans-serif; padding: 0px; float:left; } .swMain .msgBox .close { border: 1px solid #CCC; border-radius: 3px; color: #CCC; display: block; float: right; margin: 0 0 0 5px; outline-style: none; padding: 0 2px 0 2px; position: relative; text-align: center; text-decoration: none; } .swMain .msgBox .close:hover{ color: #EA8511; border: 1px solid #EA8511; }assets/plugins/jQuery-Smart-Wizard/styles/smart_wizard.css000064400000014473152510437740020114 0ustar00/* SmartWizard 2.0 plugin jQuery Wizard control Plugin by Dipu http://www.techlaboratory.net http://tech-laboratory.blogspot.com */ .swMain { position:relative; display:block; margin:0; padding:0; border: 0 solid #CCC; overflow:visible; float:left; width:980px; } .swMain .stepContainer { display:block; position: relative; margin: 0; padding:0; border: 0 solid #CCC; overflow-x: hidden; overflow-y: scroll; clear:both; height:300px; } .swMain .stepContainer div.content { display:block; position: absolute; float:left; margin: 0; padding:5px; border: 1px solid #CCC; font: normal 12px Verdana, Arial, Helvetica, sans-serif; color:#5A5655; background-color:#F8F8F8; height:300px; text-align:left; overflow:visible; z-index:88; -webkit-border-radius: 5px; -moz-border-radius : 5px; width:968px; clear:both; } .swMain div.actionBar { display:block; position: relative; clear:both; margin: 3px 0 0 0; border: 1px solid #CCC; padding: 0; color: #5A5655; background-color: #F8F8F8; height:40px; text-align:left; overflow:auto; z-index:88; -webkit-border-radius: 5px; -moz-border-radius : 5px; left:0; } .swMain .stepContainer .StepTitle { display:block; position: relative; margin:0; border:1px solid #E0E0E0; padding:5px; font: bold 16px Verdana, Arial, Helvetica, sans-serif; color:#5A5655; background-color:#E0E0E0; clear:both; text-align:left; z-index:88; -webkit-border-radius: 5px; -moz-border-radius : 5px; } .swMain ul.anchor { position: relative; display:block; float:left; list-style: none; padding: 0; margin: 10px 0; clear: both; border: 0 solid #CCCCCC; background: transparent; /*#EEEEEE */ } .swMain ul.anchor li{ position: relative; display:block; margin: 0; padding: 0 3px; border: 0 solid #E0E0E0; float: left; } /* Anchor Element Style */ .swMain ul.anchor li a { display:block; position:relative; float:left; margin: 5px 0 0 0; padding:3px; height:60px; width:230px; text-decoration: none; outline-style:none; -moz-border-radius : 5px; -webkit-border-radius: 5px; z-index:99; } .swMain ul.anchor li a .stepNumber{ position:relative; float:left; width:30px; text-align: center; padding: 0 5px 5px; font: bold 45px Verdana, Arial, Helvetica, sans-serif; } .swMain ul.anchor li a .stepDesc{ position:relative; display:block; float:left; text-align: left; padding:5px; font: bold 20px Verdana, Arial, Helvetica, sans-serif; } .swMain ul.anchor li a .stepDesc small{ font: normal 12px Verdana, Arial, Helvetica, sans-serif; } .swMain ul.anchor li a.selected{ color:#F8F8F8; background: #EA8511; /* EA8511 */ border: 1px solid #EA8511; cursor:text; -moz-box-shadow: 5px 5px 8px #888; -webkit-box-shadow: 5px 5px 8px #888; box-shadow: 5px 5px 8px #888; } .swMain ul.anchor li a.selected:hover { color:#F8F8F8; background: #EA8511; } .swMain ul.anchor li a.done { position:relative; color:#FFF; background: #8CC63F; border: 1px solid #8CC63F; z-index:99; } .swMain ul.anchor li a.done:hover { color:#5A5655; background: #8CC63F; border: 1px solid #5A5655; } .swMain ul.anchor li a.disabled { color:#CCCCCC; background: #F8F8F8; border: 1px solid #CCC; cursor:text; } .swMain ul.anchor li a.disabled:hover { color:#CCCCCC; background: #F8F8F8; } .swMain ul.anchor li a.error { color:#6c6c6c !important; background: #f08f75 !important; border: 1px solid #fb3500 !important; } .swMain ul.anchor li a.error:hover { color:#000 !important; } .swMain .buttonNext { display:block; float:right; margin:5px 3px 0 3px; padding:5px; text-decoration: none; text-align: center; font: bold 13px Verdana, Arial, Helvetica, sans-serif; width:100px; color:#FFF; outline-style:none; background-color: #5A5655; border: 1px solid #5A5655; -moz-border-radius : 5px; -webkit-border-radius: 5px; } .swMain .buttonDisabled { color:#F8F8F8 !important; background-color: #CCCCCC !important; border: 1px solid #CCCCCC !important; cursor:text; } .swMain .buttonPrevious { display:block; float:right; margin:5px 3px 0 3px; padding:5px; text-decoration: none; text-align: center; font: bold 13px Verdana, Arial, Helvetica, sans-serif; width:100px; color:#FFF; outline-style:none; background-color: #5A5655; border: 1px solid #5A5655; -moz-border-radius : 5px; -webkit-border-radius: 5px; } .swMain .buttonFinish { display:block; float:right; margin:5px 10px 0 3px; padding:5px; text-decoration: none; text-align: center; font: bold 13px Verdana, Arial, Helvetica, sans-serif; width:100px; color:#FFF; outline-style:none; background-color: #5A5655; border: 1px solid #5A5655; -moz-border-radius : 5px; -webkit-border-radius: 5px; } /* Form Styles */ .txtBox { border:1px solid #CCCCCC; color:#5A5655; font:13px Verdana,Arial,Helvetica,sans-serif; padding:2px; width:430px; } .txtBox:focus { border:1px solid #EA8511; } .swMain .loader { position:relative; display:none; float:left; margin: 2px 0 0 2px; padding:8px 10px 8px 40px; border: 1px solid #FFD700; font: bold 13px Verdana, Arial, Helvetica, sans-serif; color:#5A5655; background: #FFF url(../images/loader.gif) no-repeat 5px; -moz-border-radius : 5px; -webkit-border-radius: 5px; z-index:998; } .swMain .msgBox { position:relative; display:none; float:left; margin: 4px 0 0 5px; padding:5px; border: 1px solid #FFD700; background-color: #FFFFDD; font: normal 12px Verdana, Arial, Helvetica, sans-serif; color:#5A5655; -moz-border-radius : 5px; -webkit-border-radius: 5px; z-index:999; min-width:200px; } .swMain .msgBox .content { font: normal 12px Verdana,Arial,Helvetica,sans-serif; padding: 0; float:left; } .swMain .msgBox .close { border: 1px solid #CCC; border-radius: 3px; color: #CCC; display: block; float: right; margin: 0 0 0 5px; outline-style: none; padding: 0 2px 0 2px; position: relative; text-align: center; text-decoration: none; } .swMain .msgBox .close:hover{ color: #EA8511; border: 1px solid #EA8511; }assets/plugins/jQuery-Smart-Wizard/styles/demo_style.css000064400000003407152510437740017545 0ustar00body { margin:0; padding:0; } .demoHead { display:block; margin-bottom:10px; border: 0; padding: 0; padding-top: 8px; padding-bottom:10px; border-bottom: 1px solid #CCC; font: normal 12px Verdana, Arial, Helvetica, sans-serif; color: #5A5655; background-color: #FAFAFA; } .demoHead .demoExampleLinks { text-align:center; } .demoHead h1,.demoHead h2,.demoHead h3{ margin-top:0; margin-bottom:0; margin-left:25px; padding-top:0; padding-bottom:0; } .demoHead h1{ font: bold 22px Verdana, Arial, Helvetica, sans-serif; } .demoHead h2{ font: bold 18px Verdana, Arial, Helvetica, sans-serif; } .demoHead h3{ font: normal 12px Verdana, Arial, Helvetica, sans-serif; } .demoHead a.btn{ -moz-border-radius : 5px; -webkit-border-radius : 5px; background : #7D7D7D; color : #FFF; margin : 2px 2px 0px 2px; padding : 5px 12px 5px 12px; text-align : center; border : 1px solid #7D7D7D; text-decoration : none; } .demoHead .demoNavLinks a.btn { color:#FFF; background: #8CC63F; border: 1px solid #8CC63F; } .demoHead a.btn:hover{ background : #EA8511; color : #FFFFFF; border : 1px solid #EA8511; text-decoration : none; } .demoHead .demoNavLinks a.btn:hover { color:#5A5655; background: #8CC63F; border: 1px solid #5A5655; } .demoHead a.selected{ -moz-border-radius : 5px; -webkit-border-radius : 5px; background : #EA8511; color : #FFFFFF; margin : 2px 2px 0px 2px; padding : 5px 12px 5px 12px; text-align : center; border : 1px solid #EA8511; text-decoration : none; } assets/plugins/jQuery-Smart-Wizard/README.md000064400000043617152510437740014632 0ustar00# jQuery Smart Wizard Version 3 and later at http://mstratman.github.com/jQuery-Smart-Wizard/ Original version 2 and earlier are from http://www.techlaboratory.net/products.php?product=smartwizard Licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. http://creativecommons.org/licenses/by-sa/3.0/ ## Getting Started To see some examples, please visit http://mstratman.github.com/jQuery-Smart-Wizard/ Basic Usage: ```javascript $('#wizard').smartWizard(); ``` Using with option parameters: ```javascript $('#wizard').smartWizard({ // Properties selected: 0, // Selected Step, 0 = first step keyNavigation: true, // Enable/Disable key navigation(left and right keys are used if enabled) enableAllSteps: false, // Enable/Disable all steps on first load transitionEffect: 'fade', // Effect on navigation, none/fade/slide/slideleft contentURL:null, // specifying content url enables ajax content loading contentURLData:null, // override ajax query parameters contentCache:true, // cache step contents, if false content is fetched always from ajax url cycleSteps: false, // cycle step navigation enableFinishButton: false, // makes finish button enabled always hideButtonsOnDisabled: false, // when the previous/next/finish buttons are disabled, hide them instead errorSteps:[], // array of step numbers to highlighting as error steps labelNext:'Next', // label for Next button labelPrevious:'Previous', // label for Previous button labelFinish:'Finish', // label for Finish button noForwardJumping:false, ajaxType: 'POST', // Events onLeaveStep: null, // triggers when leaving a step onShowStep: null, // triggers when showing a step onFinish: null, // triggers when Finish button is clicked includeFinishButton : true // Add the finish button }); ``` Parameters and Events are describing on the table below. ## Installing Smart Wizard 3 ### Step 1: Include Files Include the following JavaScript and css files on your page. 1. jQuery Library file (Don't include if you already have it on your page) 2. CSS(Style Sheet) file for Smart Wizard 3. JavaScript plug-in file for Smart Wizard To include the files copy and paste the below lines inside the head tag (` `) of your page. Make sure the paths to the files are correct with your working environment. ```html ``` ### Step 2: The JavaScript Inititialize the Smart Wizard, copy and paste the below lines inside the head tag (` `) of your page ```html ``` ### Step 3: The HTML Finally the html, below shows the HTML markup for the Smart Wizard, You can customize it by including your on contents for each steps. Copy and paste the below html inside the body tag (``) of your page. ```html ``` ## More details & descriptions: ### Load ajax content To load the content via ajax call you need to specify the property "*contentURL*". example: ```html ``` When a step got focus the SmartWizard will post the step number to this contentURL and so you can write server side logic to format the content with the step number to be shown next. The response to this call should be the content of that step in HTML format. To get the step number in php: ```php $step_number = $_REQUEST["step_number"]; ``` By default the SmartWizard will fetch the step content only on the first focus of the step, and cache the content and use it on the further focus of that step. But you can turn off the content cache by specifying the property "*contentCache*" to false. example: ```html ``` Please see the ajax contents demo and following files on the source code to know how ajax content loading is implemented. 1. *smartwizard2-ajax.htm* 2. *services/service.php* ### Input validation Smart Wizard 3 does not have in-built form validation, but you can call you own validation function for each steps or for all steps with the events. Smart Wizard 3 has three events (*onLeaveStep*, *onShowStep*, *onFinish*). So you can write your step validation login in "*onLeaveStep*" event and on validation fail you can stay on that step by cancelling that event. Validation logic for all steps can be write on "*onFinish*" event and so you can avoid submitting the form with errors. example: ```html ``` Please see the step validation demo and *smartwizard2-validation.php* in the source code to know how step input validation is implemented. ### Highlight error steps Highlighting error steps in Smart Wizard is easy ```javascript $('#wizard').smartWizard('setError',{stepnum:3,iserror:true}); ``` It takes two arguments 1. stepnum :- Step number to which is highlighted as error 2. iserror :- true = set the step as error step and false = remove the error highlighting example: ```html ``` ### Show message inside the wizard An in-built message box is available with Smart Wizard 3 and you can call it as like below ```javascript $('#wizard').smartWizard('showMessage','Hello! World'); ``` example: ```html ``` ## Parameter Description:
    Parameter Name Description Values Default Value
    selected specify the initially-selected step integer 0
    keyNavigation enable/disable key navigation.
    left/right keys are used if enabled
    true = enabled
    false= disabled
    true
    enableAllSteps Enable/Disable all steps on first load true = enabled
    false= disabled
    false
    transitionEffect Animation effect on step navigation none/fade/slide/slideleft fade
    contentURL Setting this property will enable ajax content loading, setting null will disable ajax contents null or a valid url null
    contentURLData with ContentURL set, use this property to override the ajax query parameters used when loading contents null or a function that takes the new step number and returns an object to override ajax parameters null
    contentCache This property will enable caching of the content on ajax content mode. So the contents are fetched from the url only on first load of the step true = enabled
    false= disabled
    true
    cycleSteps This property allows to cycle the navigation of steps true = enabled
    false= disabled
    false
    enableFinishButton This property will make the finish button enabled always true = enabled
    false= disabled
    false
    hideButtonsOnDisabled This property will hide the disabled buttons instead of just disabling them true = enabled
    false= disabled
    false
    errorSteps an array of step numbers to highlighting as error steps array of integers
    ex: [2,4]
    []
    labelNext Label for Next button String Next
    labelPrevious Label for Previous button String Previous
    labelFinish Label for Finish button String Finish
    noForwardJumping If true, automatically disable all steps following the current step.

    e.g. If I am on step 4, and click step 1, steps 2-4 will be disabled and I cannot jump back to 3 or 4, and can only proceed "next" to step 2.
    Boolean false
    ajaxType The "type" parameter for ajax requests. String POST
    includeFinishButton If true, adds a finish button true = show
    false= don't show
    true
    ## Event Description:
    Event Name Description Parameters
    onLeaveStep Triggers when leaving a step.

    This is a decision making event, based on its function return value (true/false) the current step navigation can be cancelled.
    Object: object of the step anchor element. You can access the step number and step body element using this object.
    Object: Context information with keys: fromStep and toStep
    onShowStep Triggers when showing a step. Object: object of the step anchor element. You can access the step number and step body element using this object.
    Object: Context information with keys: fromStep and toStep
    onFinish Triggers when the Finish button is clicked.

    This is a decision making event, based on its function return value (true/false) the further actions can be cancelled.

    e.g.: If the validation fails we can cancel form submitting and can show an error message. Please see the form validation example for the implementation

    If this callback is not set, clicking the finish button will submit the form in which the wizard is placed, and do nothing if a parent form is not found.
    Object Array: an array of the object of all the step anchor elements Object: Context information with key: fromStep indicating which step the user was on when they clicked the finish button.
    ## Public methods: Methods can be called by calling `smartWizard("method_name", arguments)` For example, calling the *showMessage* method to display "Hello, World!" would look like this: ```javascript $("#your_wizard").smartWizard('showMessage', 'Hello, World!'); ``` Here are the available methods:
    Method Name Arguments Description
    showMessage String: the message to show. Show a message in the action bar
    hideMessage None Hide the message in the action bar
    showError Integer: the step number to highlight with an error. This is a convenience wrapper around setError.
    hideError Integer: the step number to un-highlight with an error. This is a convenience wrapper around setError.
    setError Object: with keys stepnum and iserror. Set or unset error status on a particular step. Passing iserror as true sets the error. Passing in a false value turns off the error.
    goForward None Load the next step.
    goBackward None Load the previous step.
    goToStep Integer - the step number to load Load the specified step.
    enableStep Integer - the step number to enable Enable the specified step.
    disableStep Integer - the step number to disable Disable the specified step.
    currentStep None Returns the number of the current step.
    fixHeight None Adjusts the height of the step contents for the current step. In general you won't need this, but it's useful if you are dynamically setting the contents.
    assets/plugins/jQuery-Smart-Wizard/index.htm000064400000024431152510437740015165 0ustar00 Smart Wizard 3 - Basic Example - a javascript jQuery wizard control plugin

    Smart Wizard 3

    a javascript jQuery wizard control plugin

    Example: Basic Wizard

    Step 1 Content

    • List 1
    • List 2

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Step 2 Content

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Step 3 Content

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Step 4 Content

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    assets/plugins/jQuery-Smart-Wizard/js/jquery.smartWizard.js000064400000043373152510437740020151 0ustar00/* * SmartWizard 3.3.1 plugin * jQuery Wizard control Plugin * by Dipu * * Refactored and extended: * https://github.com/mstratman/jQuery-Smart-Wizard * * Original URLs: * http://www.techlaboratory.net * http://tech-laboratory.blogspot.com */ function SmartWizard(target, options) { this.target = target; this.options = options; this.curStepIdx = options.selected; this.steps = $(target).children("ul").children("li").children("a"); // Get all anchors this.contentWidth = 0; this.msgBox = $(''); this.elmStepContainer = $('
    ').addClass("stepContainer"); this.loader = $('
    Loading
    ').addClass("loader"); this.buttons = { next : $(''+options.labelNext+'').attr("href","#").addClass("buttonNext"), previous : $(''+options.labelPrevious+'').attr("href","#").addClass("buttonPrevious"), finish : $(''+options.labelFinish+'').attr("href","#").addClass("buttonFinish") }; /* * Private functions */ var _init = function($this) { var elmActionBar = $('
    ').addClass("actionBar"); elmActionBar.append($this.msgBox); $('.close',$this.msgBox).click(function() { $this.msgBox.fadeOut("normal"); return false; }); var allDivs = $this.target.children('div'); // CHeck if ul with steps has been added by user, if not add them if($this.target.children('ul').length == 0 ){ var ul = $("
      "); target.prepend(ul) // for each div create a li allDivs.each(function(i,e){ var title = $(e).first().children(".StepTitle").text(); var s = $(e).attr("id") // if referenced div has no id, add one. if (s==undefined){ s = "step-"+(i+1) $(e).attr("id",s); } var span = $("").addClass("stepDesc").text(title); var li = $("
    • ").append($("").attr("href", "#" + s).append($("").addClass("stepNumber").text(i + 1)).append(span)); ul.append(li); }); // (re)initialise the steps property $this.steps = $(target).children("ul").children("li").children("a"); // Get all anchors } $this.target.children('ul').addClass("anchor"); allDivs.addClass("content"); // highlight steps with errors if($this.options.errorSteps && $this.options.errorSteps.length>0){ $.each($this.options.errorSteps, function(i, n){ $this.setError({ stepnum: n, iserror:true }); }); } $this.elmStepContainer.append(allDivs); elmActionBar.append($this.loader); $this.target.append($this.elmStepContainer); if ($this.options.includeFinishButton){ elmActionBar.append($this.buttons.finish) } elmActionBar.append($this.buttons.next) .append($this.buttons.previous); $this.target.append(elmActionBar); this.contentWidth = $this.elmStepContainer.width(); $($this.buttons.next).click(function() { $this.goForward(); return false; }); $($this.buttons.previous).click(function() { $this.goBackward(); return false; }); $($this.buttons.finish).click(function() { if(!$(this).hasClass('buttonDisabled')){ if($.isFunction($this.options.onFinish)) { var context = { fromStep: $this.curStepIdx + 1 }; if(!$this.options.onFinish.call(this,$($this.steps), context)){ return false; } }else{ var frm = $this.target.parents('form'); if(frm && frm.length){ frm.submit(); } } } return false; }); $($this.steps).bind("click", function(e){ if($this.steps.index(this) == $this.curStepIdx){ return false; } var nextStepIdx = $this.steps.index(this); var isDone = $this.steps.eq(nextStepIdx).attr("isDone") - 0; if(isDone == 1){ _loadContent($this, nextStepIdx); } return false; }); // Enable keyboard navigation if($this.options.keyNavigation){ $(document).keyup(function(e){ if(e.which==39){ // Right Arrow $this.goForward(); }else if(e.which==37){ // Left Arrow $this.goBackward(); } }); } // Prepare the steps _prepareSteps($this); // Show the first slected step _loadContent($this, $this.curStepIdx); }; var _prepareSteps = function($this) { if(! $this.options.enableAllSteps){ $($this.steps, $this.target).removeClass("selected").removeClass("done").addClass("disabled"); $($this.steps, $this.target).attr("isDone",0); }else{ $($this.steps, $this.target).removeClass("selected").removeClass("disabled").addClass("done"); $($this.steps, $this.target).attr("isDone",1); } $($this.steps, $this.target).each(function(i){ $($(this).attr("href").replace(/^.+#/, '#'), $this.target).hide(); $(this).attr("rel",i+1); }); }; var _step = function ($this, selStep) { return $( $(selStep, $this.target).attr("href").replace(/^.+#/, '#'), $this.target ); }; var _loadContent = function($this, stepIdx) { var selStep = $this.steps.eq(stepIdx); var ajaxurl = $this.options.contentURL; var ajaxurl_data = $this.options.contentURLData; var hasContent = selStep.data('hasContent'); var stepNum = stepIdx+1; if (ajaxurl && ajaxurl.length>0) { if ($this.options.contentCache && hasContent) { _showStep($this, stepIdx); } else { var ajax_args = { url: ajaxurl, type: $this.options.ajaxType, data: ({step_number : stepNum}), dataType: "text", beforeSend: function(){ $this.loader.show(); }, error: function(){ $this.loader.hide(); }, success: function(res){ $this.loader.hide(); if(res && res.length>0){ selStep.data('hasContent',true); _step($this, selStep).html(res); _showStep($this, stepIdx); } } }; if (ajaxurl_data) { ajax_args = $.extend(ajax_args, ajaxurl_data(stepNum)); } $.ajax(ajax_args); } }else{ _showStep($this,stepIdx); } }; var _showStep = function($this, stepIdx) { var selStep = $this.steps.eq(stepIdx); var curStep = $this.steps.eq($this.curStepIdx); if(stepIdx != $this.curStepIdx){ if($.isFunction($this.options.onLeaveStep)) { var context = { fromStep: $this.curStepIdx+1, toStep: stepIdx+1 }; if (! $this.options.onLeaveStep.call($this,$(curStep), context)){ return false; } } } $this.elmStepContainer.height(_step($this, selStep).outerHeight()); var prevCurStepIdx = $this.curStepIdx; $this.curStepIdx = stepIdx; if ($this.options.transitionEffect == 'slide'){ _step($this, curStep).slideUp("fast",function(e){ _step($this, selStep).slideDown("fast"); _setupStep($this,curStep,selStep); }); } else if ($this.options.transitionEffect == 'fade'){ _step($this, curStep).fadeOut("fast",function(e){ _step($this, selStep).fadeIn("fast"); _setupStep($this,curStep,selStep); }); } else if ($this.options.transitionEffect == 'slideleft'){ var nextElmLeft = 0; var nextElmLeft1 = null; var nextElmLeft = null; var curElementLeft = 0; if(stepIdx > prevCurStepIdx){ nextElmLeft1 = $this.elmStepContainer.width() + 10; nextElmLeft2 = 0; curElementLeft = 0 - _step($this, curStep).outerWidth(); } else { nextElmLeft1 = 0 - _step($this, selStep).outerWidth() + 20; nextElmLeft2 = 0; curElementLeft = 10 + _step($this, curStep).outerWidth(); } if (stepIdx == prevCurStepIdx) { nextElmLeft1 = $($(selStep, $this.target).attr("href"), $this.target).outerWidth() + 20; nextElmLeft2 = 0; curElementLeft = 0 - $($(curStep, $this.target).attr("href"), $this.target).outerWidth(); } else { $($(curStep, $this.target).attr("href"), $this.target).animate({left:curElementLeft},"fast",function(e){ $($(curStep, $this.target).attr("href"), $this.target).hide(); }); } _step($this, selStep).css("left",nextElmLeft1).show().animate({left:nextElmLeft2},"fast",function(e){ _setupStep($this,curStep,selStep); }); } else { _step($this, curStep).hide(); _step($this, selStep).show(); _setupStep($this,curStep,selStep); } return true; }; var _setupStep = function($this, curStep, selStep) { $(curStep, $this.target).removeClass("selected"); $(curStep, $this.target).addClass("done"); $(selStep, $this.target).removeClass("disabled"); $(selStep, $this.target).removeClass("done"); $(selStep, $this.target).addClass("selected"); $(selStep, $this.target).attr("isDone",1); _adjustButton($this); if($.isFunction($this.options.onShowStep)) { var context = { fromStep: parseInt($(curStep).attr('rel')), toStep: parseInt($(selStep).attr('rel')) }; if(! $this.options.onShowStep.call(this,$(selStep),context)){ return false; } } if ($this.options.noForwardJumping) { // +2 == +1 (for index to step num) +1 (for next step) for (var i = $this.curStepIdx + 2; i <= $this.steps.length; i++) { $this.disableStep(i); } } }; var _adjustButton = function($this) { if (! $this.options.cycleSteps){ if (0 >= $this.curStepIdx) { $($this.buttons.previous).addClass("buttonDisabled"); if ($this.options.hideButtonsOnDisabled) { $($this.buttons.previous).hide(); } }else{ $($this.buttons.previous).removeClass("buttonDisabled"); if ($this.options.hideButtonsOnDisabled) { $($this.buttons.previous).show(); } } if (($this.steps.length-1) <= $this.curStepIdx){ $($this.buttons.next).addClass("buttonDisabled"); if ($this.options.hideButtonsOnDisabled) { $($this.buttons.next).hide(); } }else{ $($this.buttons.next).removeClass("buttonDisabled"); if ($this.options.hideButtonsOnDisabled) { $($this.buttons.next).show(); } } } // Finish Button if ($this.options.includeFinishButton){ if (! $this.steps.hasClass('disabled') || $this.options.enableFinishButton){ $($this.buttons.finish).removeClass("buttonDisabled"); if ($this.options.hideButtonsOnDisabled) { $($this.buttons.finish).show(); } }else{ $($this.buttons.finish).addClass("buttonDisabled"); if ($this.options.hideButtonsOnDisabled) { $($this.buttons.finish).hide(); } } } }; /* * Public methods */ SmartWizard.prototype.goForward = function(){ var nextStepIdx = this.curStepIdx + 1; if (this.steps.length <= nextStepIdx){ if (! this.options.cycleSteps){ return false; } nextStepIdx = 0; } _loadContent(this, nextStepIdx); }; SmartWizard.prototype.goBackward = function(){ var nextStepIdx = this.curStepIdx-1; if (0 > nextStepIdx){ if (! this.options.cycleSteps){ return false; } nextStepIdx = this.steps.length - 1; } _loadContent(this, nextStepIdx); }; SmartWizard.prototype.goToStep = function(stepNum){ var stepIdx = stepNum - 1; if (stepIdx >= 0 && stepIdx < this.steps.length) { _loadContent(this, stepIdx); } }; SmartWizard.prototype.enableStep = function(stepNum) { var stepIdx = stepNum - 1; if (stepIdx == this.curStepIdx || stepIdx < 0 || stepIdx >= this.steps.length) { return false; } var step = this.steps.eq(stepIdx); $(step, this.target).attr("isDone",1); $(step, this.target).removeClass("disabled").removeClass("selected").addClass("done"); }; SmartWizard.prototype.disableStep = function(stepNum) { var stepIdx = stepNum - 1; if (stepIdx == this.curStepIdx || stepIdx < 0 || stepIdx >= this.steps.length) { return false; } var step = this.steps.eq(stepIdx); $(step, this.target).attr("isDone",0); $(step, this.target).removeClass("done").removeClass("selected").addClass("disabled"); }; SmartWizard.prototype.currentStep = function() { return this.curStepIdx + 1; }; SmartWizard.prototype.showMessage = function (msg) { $('.content', this.msgBox).html(msg); this.msgBox.show(); } SmartWizard.prototype.hideMessage = function () { this.msgBox.fadeOut("normal"); } SmartWizard.prototype.showError = function(stepnum) { this.setError(stepnum, true); } SmartWizard.prototype.hideError = function(stepnum) { this.setError(stepnum, false); } SmartWizard.prototype.setError = function(stepnum,iserror) { if (typeof stepnum == "object") { iserror = stepnum.iserror; stepnum = stepnum.stepnum; } if (iserror){ $(this.steps.eq(stepnum-1), this.target).addClass('error') }else{ $(this.steps.eq(stepnum-1), this.target).removeClass("error"); } } SmartWizard.prototype.fixHeight = function(){ var height = 0; var selStep = this.steps.eq(this.curStepIdx); var stepContainer = _step(this, selStep); stepContainer.children().each(function() { if($(this).is(':visible')) { height += $(this).outerHeight(); } }); // These values (5 and 20) are experimentally chosen. stepContainer.height(height + 5); this.elmStepContainer.height(height + 20); } _init(this); }; (function($){ $.fn.smartWizard = function(method) { var args = arguments; var rv = undefined; var allObjs = this.each(function() { var wiz = $(this).data('smartWizard'); if (typeof method == 'object' || ! method || ! wiz) { var options = $.extend({}, $.fn.smartWizard.defaults, method || {}); if (! wiz) { wiz = new SmartWizard($(this), options); $(this).data('smartWizard', wiz); } } else { if (typeof SmartWizard.prototype[method] == "function") { rv = SmartWizard.prototype[method].apply(wiz, Array.prototype.slice.call(args, 1)); return rv; } else { $.error('Method ' + method + ' does not exist on jQuery.smartWizard'); } } }); if (rv === undefined) { return allObjs; } else { return rv; } }; // Default Properties and Events $.fn.smartWizard.defaults = { selected: 0, // Selected Step, 0 = first step keyNavigation: true, // Enable/Disable key navigation(left and right keys are used if enabled) enableAllSteps: false, transitionEffect: 'fade', // Effect on navigation, none/fade/slide/slideleft contentURL:null, // content url, Enables Ajax content loading contentCache:true, // cache step contents, if false content is fetched always from ajax url cycleSteps: false, // cycle step navigation enableFinishButton: false, // make finish button enabled always hideButtonsOnDisabled: false, // when the previous/next/finish buttons are disabled, hide them instead? errorSteps:[], // Array Steps with errors labelNext:'Next', labelPrevious:'Previous', labelFinish:'Finish', noForwardJumping: false, ajaxType: "POST", onLeaveStep: null, // triggers when leaving a step onShowStep: null, // triggers when showing a step onFinish: null, // triggers when Finish button is clicked includeFinishButton : true // Add the finish button }; })(jQuery); assets/plugins/jQuery-Smart-Wizard/js/jquery-2.0.0.min.js000064400000242227152510437740017057 0ustar00/*! jQuery v2.0.0 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license //@ sourceMappingURL=jquery.min.map */ (function(e,undefined){var t,n,r=typeof undefined,i=e.location,o=e.document,s=o.documentElement,a=e.jQuery,u=e.$,l={},c=[],f="2.0.0",p=c.concat,h=c.push,d=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=f.trim,x=function(e,n){return new x.fn.init(e,n,t)},b=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^-ms-/,N=/-([\da-z])/gi,E=function(e,t){return t.toUpperCase()},S=function(){o.removeEventListener("DOMContentLoaded",S,!1),e.removeEventListener("load",S,!1),x.ready()};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,t,n){var r,i;if(!e)return this;if("string"==typeof e){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:T.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof x?t[0]:t,x.merge(this,x.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:o,!0)),C.test(r[1])&&x.isPlainObject(t))for(r in t)x.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=o.getElementById(r[2]),i&&i.parentNode&&(this.length=1,this[0]=i),this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?n.ready(e):(e.selector!==undefined&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return d.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,t,n,r,i,o,s=arguments[0]||{},a=1,u=arguments.length,l=!1;for("boolean"==typeof s&&(l=s,s=arguments[1]||{},a=2),"object"==typeof s||x.isFunction(s)||(s={}),u===a&&(s=this,--a);u>a;a++)if(null!=(e=arguments[a]))for(t in e)n=s[t],r=e[t],s!==r&&(l&&r&&(x.isPlainObject(r)||(i=x.isArray(r)))?(i?(i=!1,o=n&&x.isArray(n)?n:[]):o=n&&x.isPlainObject(n)?n:{},s[t]=x.extend(l,o,r)):r!==undefined&&(s[t]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=a),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){(e===!0?--x.readyWait:x.isReady)||(x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(o,[x]),x.fn.trigger&&x(o).trigger("ready").off("ready")))},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if("object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(t){return!1}return!0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:JSON.parse,parseXML:function(e){var t,n;if(!e||"string"!=typeof e)return null;try{n=new DOMParser,t=n.parseFromString(e,"text/xml")}catch(r){t=undefined}return(!t||t.getElementsByTagName("parsererror").length)&&x.error("Invalid XML: "+e),t},noop:function(){},globalEval:function(e){var t,n=eval;e=x.trim(e),e&&(1===e.indexOf("use strict")?(t=o.createElement("script"),t.text=e,o.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(k,"ms-").replace(N,E)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,s=j(e);if(n){if(s){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(s){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:function(e){return null==e?"":v.call(e)},makeArray:function(e,t){var n=t||[];return null!=e&&(j(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:g.call(t,e,n)},merge:function(e,t){var n=t.length,r=e.length,i=0;if("number"==typeof n)for(;n>i;i++)e[r++]=t[i];else while(t[i]!==undefined)e[r++]=t[i++];return e.length=r,e},grep:function(e,t,n){var r,i=[],o=0,s=e.length;for(n=!!n;s>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,s=j(e),a=[];if(s)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(a[a.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(a[a.length]=r);return p.apply([],a)},guid:1,proxy:function(e,t){var n,r,i;return"string"==typeof t&&(n=e[t],t=e,e=n),x.isFunction(e)?(r=d.call(arguments,2),i=function(){return e.apply(t||this,r.concat(d.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):undefined},access:function(e,t,n,r,i,o,s){var a=0,u=e.length,l=null==n;if("object"===x.type(n)){i=!0;for(a in n)x.access(e,t,a,n[a],!0,o,s)}else if(r!==undefined&&(i=!0,x.isFunction(r)||(s=!0),l&&(s?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(x(e),n)})),t))for(;u>a;a++)t(e[a],n,s?r:r.call(e[a],a,t(e[a],n)));return i?e:l?t.call(e):u?t(e[0],n):o},now:Date.now,swap:function(e,t,n,r){var i,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=s[o];return i}}),x.ready.promise=function(t){return n||(n=x.Deferred(),"complete"===o.readyState?setTimeout(x.ready):(o.addEventListener("DOMContentLoaded",S,!1),e.addEventListener("load",S,!1))),n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function j(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}t=x(o),function(e,undefined){var t,n,r,i,o,s,a,u,l,c,f,p,h,d,g,m,y="sizzle"+-new Date,v=e.document,b={},w=0,T=0,C=ot(),k=ot(),N=ot(),E=!1,S=function(){return 0},j=typeof undefined,D=1<<31,A=[],L=A.pop,q=A.push,H=A.push,O=A.slice,F=A.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},P="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",R="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=M.replace("w","w#"),$="\\["+R+"*("+M+")"+R+"*(?:([*^$|!~]?=)"+R+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+R+"*\\]",B=":("+M+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",I=RegExp("^"+R+"+|((?:^|[^\\\\])(?:\\\\.)*)"+R+"+$","g"),z=RegExp("^"+R+"*,"+R+"*"),_=RegExp("^"+R+"*([>+~]|"+R+")"+R+"*"),X=RegExp(R+"*[+~]"),U=RegExp("="+R+"*([^\\]'\"]*)"+R+"*\\]","g"),Y=RegExp(B),V=RegExp("^"+W+"$"),G={ID:RegExp("^#("+M+")"),CLASS:RegExp("^\\.("+M+")"),TAG:RegExp("^("+M.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+B),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+R+"*(even|odd|(([+-]|)(\\d*)n|)"+R+"*(?:([+-]|)"+R+"*(\\d+)|))"+R+"*\\)|)","i"),"boolean":RegExp("^(?:"+P+")$","i"),needsContext:RegExp("^"+R+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+R+"*((?:-\\d)?\\d*)"+R+"*\\)|)(?=[^-]|$)","i")},J=/^[^{]+\{\s*\[native \w/,Q=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,et=/'|\\/g,tt=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,nt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{H.apply(A=O.call(v.childNodes),v.childNodes),A[v.childNodes.length].nodeType}catch(rt){H={apply:A.length?function(e,t){q.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function it(e){return J.test(e+"")}function ot(){var e,t=[];return e=function(n,i){return t.push(n+=" ")>r.cacheLength&&delete e[t.shift()],e[n]=i}}function st(e){return e[y]=!0,e}function at(e){var t=c.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ut(e,t,n,r){var i,o,s,a,u,f,d,g,x,w;if((t?t.ownerDocument||t:v)!==c&&l(t),t=t||c,n=n||[],!e||"string"!=typeof e)return n;if(1!==(a=t.nodeType)&&9!==a)return[];if(p&&!r){if(i=Q.exec(e))if(s=i[1]){if(9===a){if(o=t.getElementById(s),!o||!o.parentNode)return n;if(o.id===s)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(s))&&m(t,o)&&o.id===s)return n.push(o),n}else{if(i[2])return H.apply(n,t.getElementsByTagName(e)),n;if((s=i[3])&&b.getElementsByClassName&&t.getElementsByClassName)return H.apply(n,t.getElementsByClassName(s)),n}if(b.qsa&&(!h||!h.test(e))){if(g=d=y,x=t,w=9===a&&e,1===a&&"object"!==t.nodeName.toLowerCase()){f=gt(e),(d=t.getAttribute("id"))?g=d.replace(et,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=f.length;while(u--)f[u]=g+mt(f[u]);x=X.test(e)&&t.parentNode||t,w=f.join(",")}if(w)try{return H.apply(n,x.querySelectorAll(w)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(I,"$1"),t,n,r)}o=ut.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},l=ut.setDocument=function(e){var t=e?e.ownerDocument||e:v;return t!==c&&9===t.nodeType&&t.documentElement?(c=t,f=t.documentElement,p=!o(t),b.getElementsByTagName=at(function(e){return e.appendChild(t.createComment("")),!e.getElementsByTagName("*").length}),b.attributes=at(function(e){return e.className="i",!e.getAttribute("className")}),b.getElementsByClassName=at(function(e){return e.innerHTML="
      ",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),b.sortDetached=at(function(e){return 1&e.compareDocumentPosition(c.createElement("div"))}),b.getById=at(function(e){return f.appendChild(e).id=y,!t.getElementsByName||!t.getElementsByName(y).length}),b.getById?(r.find.ID=function(e,t){if(typeof t.getElementById!==j&&p){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},r.filter.ID=function(e){var t=e.replace(tt,nt);return function(e){return e.getAttribute("id")===t}}):(r.find.ID=function(e,t){if(typeof t.getElementById!==j&&p){var n=t.getElementById(e);return n?n.id===e||typeof n.getAttributeNode!==j&&n.getAttributeNode("id").value===e?[n]:undefined:[]}},r.filter.ID=function(e){var t=e.replace(tt,nt);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),r.find.TAG=b.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==j?t.getElementsByTagName(e):undefined}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=b.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==j&&p?t.getElementsByClassName(e):undefined},d=[],h=[],(b.qsa=it(t.querySelectorAll))&&(at(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||h.push("\\["+R+"*(?:value|"+P+")"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){var t=c.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&h.push("[*^$]="+R+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(b.matchesSelector=it(g=f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){b.disconnectedMatch=g.call(e,"div"),g.call(e,"[s!='']:x"),d.push("!=",B)}),h=h.length&&RegExp(h.join("|")),d=d.length&&RegExp(d.join("|")),m=it(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},S=f.compareDocumentPosition?function(e,n){if(e===n)return E=!0,0;var r=n.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(n);return r?1&r||!b.sortDetached&&n.compareDocumentPosition(e)===r?e===t||m(v,e)?-1:n===t||m(v,n)?1:u?F.call(u,e)-F.call(u,n):0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,n){var r,i=0,o=e.parentNode,s=n.parentNode,a=[e],l=[n];if(e===n)return E=!0,0;if(!o||!s)return e===t?-1:n===t?1:o?-1:s?1:u?F.call(u,e)-F.call(u,n):0;if(o===s)return lt(e,n);r=e;while(r=r.parentNode)a.unshift(r);r=n;while(r=r.parentNode)l.unshift(r);while(a[i]===l[i])i++;return i?lt(a[i],l[i]):a[i]===v?-1:l[i]===v?1:0},c):c},ut.matches=function(e,t){return ut(e,null,null,t)},ut.matchesSelector=function(e,t){if((e.ownerDocument||e)!==c&&l(e),t=t.replace(U,"='$1']"),!(!b.matchesSelector||!p||d&&d.test(t)||h&&h.test(t)))try{var n=g.call(e,t);if(n||b.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return ut(t,c,null,[e]).length>0},ut.contains=function(e,t){return(e.ownerDocument||e)!==c&&l(e),m(e,t)},ut.attr=function(e,t){(e.ownerDocument||e)!==c&&l(e);var n=r.attrHandle[t.toLowerCase()],i=n&&n(e,t,!p);return i===undefined?b.attributes||!p?e.getAttribute(t):(i=e.getAttributeNode(t))&&i.specified?i.value:null:i},ut.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},ut.uniqueSort=function(e){var t,n=[],r=0,i=0;if(E=!b.detectDuplicates,u=!b.sortStable&&e.slice(0),e.sort(S),E){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return e};function lt(e,t){var n=t&&e,r=n&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ct(e,t,n){var r;return n?undefined:(r=e.getAttributeNode(t))&&r.specified?r.value:e[t]===!0?t.toLowerCase():null}function ft(e,t,n){var r;return n?undefined:r=e.getAttribute(t,"type"===t.toLowerCase()?1:2)}function pt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ht(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function dt(e){return st(function(t){return t=+t,st(function(n,r){var i,o=e([],n.length,t),s=o.length;while(s--)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}i=ut.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[r];r++)n+=i(t);return n},r=ut.selectors={cacheLength:50,createPseudo:st,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(tt,nt),e[3]=(e[4]||e[5]||"").replace(tt,nt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||ut.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&ut.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return G.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&Y.test(n)&&(t=gt(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(tt,nt).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=C[e+" "];return t||(t=RegExp("(^|"+R+")"+e+"("+R+"|$)"))&&C(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=ut.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,h,d,g=o!==s?"nextSibling":"previousSibling",m=t.parentNode,v=a&&t.nodeName.toLowerCase(),x=!u&&!a;if(m){if(o){while(g){f=t;while(f=f[g])if(a?f.nodeName.toLowerCase()===v:1===f.nodeType)return!1;d=g="only"===e&&!d&&"nextSibling"}return!0}if(d=[s?m.firstChild:m.lastChild],s&&x){c=m[y]||(m[y]={}),l=c[e]||[],h=l[0]===w&&l[1],p=l[0]===w&&l[2],f=h&&m.childNodes[h];while(f=++h&&f&&f[g]||(p=h=0)||d.pop())if(1===f.nodeType&&++p&&f===t){c[e]=[w,h,p];break}}else if(x&&(l=(t[y]||(t[y]={}))[e])&&l[0]===w)p=l[1];else while(f=++h&&f&&f[g]||(p=h=0)||d.pop())if((a?f.nodeName.toLowerCase()===v:1===f.nodeType)&&++p&&(x&&((f[y]||(f[y]={}))[e]=[w,p]),f===t))break;return p-=i,p===r||0===p%r&&p/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||ut.error("unsupported pseudo: "+e);return i[y]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?st(function(e,n){var r,o=i(e,t),s=o.length;while(s--)r=F.call(e,o[s]),e[r]=!(n[r]=o[s])}):function(e){return i(e,0,n)}):i}},pseudos:{not:st(function(e){var t=[],n=[],r=s(e.replace(I,"$1"));return r[y]?st(function(e,t,n,i){var o,s=r(e,null,i,[]),a=e.length;while(a--)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:st(function(e){return function(t){return ut(e,t).length>0}}),contains:st(function(e){return function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:st(function(e){return V.test(e||"")||ut.error("unsupported lang: "+e),e=e.replace(tt,nt).toLowerCase(),function(t){var n;do if(n=p?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===c.activeElement&&(!c.hasFocus||c.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Z.test(e.nodeName)},input:function(e){return K.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:dt(function(){return[0]}),last:dt(function(e,t){return[t-1]}),eq:dt(function(e,t,n){return[0>n?n+t:n]}),even:dt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:dt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:dt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:dt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=pt(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=ht(t);function gt(e,t){var n,i,o,s,a,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);a=e,u=[],l=r.preFilter;while(a){(!n||(i=z.exec(a)))&&(i&&(a=a.slice(i[0].length)||a),u.push(o=[])),n=!1,(i=_.exec(a))&&(n=i.shift(),o.push({value:n,type:i[0].replace(I," ")}),a=a.slice(n.length));for(s in r.filter)!(i=G[s].exec(a))||l[s]&&!(i=l[s](i))||(n=i.shift(),o.push({value:n,type:s,matches:i}),a=a.slice(n.length));if(!n)break}return t?a.length:a?ut.error(e):k(e,u).slice(0)}function mt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function yt(e,t,r){var i=t.dir,o=r&&"parentNode"===i,s=T++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,r,a){var u,l,c,f=w+" "+s;if(a){while(t=t[i])if((1===t.nodeType||o)&&e(t,r,a))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[y]||(t[y]={}),(l=c[i])&&l[0]===f){if((u=l[1])===!0||u===n)return u===!0}else if(l=c[i]=[f],l[1]=e(t,r,a)||n,l[1]===!0)return!0}}function vt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,s=[],a=0,u=e.length,l=null!=t;for(;u>a;a++)(o=e[a])&&(!n||n(o,r,i))&&(s.push(o),l&&t.push(a));return s}function bt(e,t,n,r,i,o){return r&&!r[y]&&(r=bt(r)),i&&!i[y]&&(i=bt(i,o)),st(function(o,s,a,u){var l,c,f,p=[],h=[],d=s.length,g=o||Ct(t||"*",a.nodeType?[a]:a,[]),m=!e||!o&&t?g:xt(g,p,e,a,u),y=n?i||(o?e:d||r)?[]:s:m;if(n&&n(m,y,a,u),r){l=xt(y,h),r(l,[],a,u),c=l.length;while(c--)(f=l[c])&&(y[h[c]]=!(m[h[c]]=f))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(f=y[c])&&l.push(m[c]=f);i(null,y=[],l,u)}c=y.length;while(c--)(f=y[c])&&(l=i?F.call(o,f):p[c])>-1&&(o[l]=!(s[l]=f))}}else y=xt(y===s?y.splice(d,y.length):y),i?i(null,s,y,u):H.apply(s,y)})}function wt(e){var t,n,i,o=e.length,s=r.relative[e[0].type],u=s||r.relative[" "],l=s?1:0,c=yt(function(e){return e===t},u,!0),f=yt(function(e){return F.call(t,e)>-1},u,!0),p=[function(e,n,r){return!s&&(r||n!==a)||((t=n).nodeType?c(e,n,r):f(e,n,r))}];for(;o>l;l++)if(n=r.relative[e[l].type])p=[yt(vt(p),n)];else{if(n=r.filter[e[l].type].apply(null,e[l].matches),n[y]){for(i=++l;o>i;i++)if(r.relative[e[i].type])break;return bt(l>1&&vt(p),l>1&&mt(e.slice(0,l-1)).replace(I,"$1"),n,i>l&&wt(e.slice(l,i)),o>i&&wt(e=e.slice(i)),o>i&&mt(e))}p.push(n)}return vt(p)}function Tt(e,t){var i=0,o=t.length>0,s=e.length>0,u=function(u,l,f,p,h){var d,g,m,y=[],v=0,x="0",b=u&&[],T=null!=h,C=a,k=u||s&&r.find.TAG("*",h&&l.parentNode||l),N=w+=null==C?1:Math.random()||.1;for(T&&(a=l!==c&&l,n=i);null!=(d=k[x]);x++){if(s&&d){g=0;while(m=e[g++])if(m(d,l,f)){p.push(d);break}T&&(w=N,n=++i)}o&&((d=!m&&d)&&v--,u&&b.push(d))}if(v+=x,o&&x!==v){g=0;while(m=t[g++])m(b,y,l,f);if(u){if(v>0)while(x--)b[x]||y[x]||(y[x]=L.call(p));y=xt(y)}H.apply(p,y),T&&!u&&y.length>0&&v+t.length>1&&ut.uniqueSort(p)}return T&&(w=N,a=C),b};return o?st(u):u}s=ut.compile=function(e,t){var n,r=[],i=[],o=N[e+" "];if(!o){t||(t=gt(e)),n=t.length;while(n--)o=wt(t[n]),o[y]?r.push(o):i.push(o);o=N(e,Tt(i,r))}return o};function Ct(e,t,n){var r=0,i=t.length;for(;i>r;r++)ut(e,t[r],n);return n}function kt(e,t,n,i){var o,a,u,l,c,f=gt(e);if(!i&&1===f.length){if(a=f[0]=f[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&p&&r.relative[a[1].type]){if(t=(r.find.ID(u.matches[0].replace(tt,nt),t)||[])[0],!t)return n;e=e.slice(a.shift().value.length)}o=G.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],r.relative[l=u.type])break;if((c=r.find[l])&&(i=c(u.matches[0].replace(tt,nt),X.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=i.length&&mt(a),!e)return H.apply(n,i),n;break}}}return s(e,f)(i,t,!p,n,X.test(e)),n}r.pseudos.nth=r.pseudos.eq;function Nt(){}Nt.prototype=r.filters=r.pseudos,r.setFilters=new Nt,b.sortStable=y.split("").sort(S).join("")===y,l(),[0,0].sort(S),b.detectDuplicates=E,at(function(e){if(e.innerHTML="","#"!==e.firstChild.getAttribute("href")){var t="type|href|height|width".split("|"),n=t.length;while(n--)r.attrHandle[t[n]]=ft}}),at(function(e){if(null!=e.getAttribute("disabled")){var t=P.split("|"),n=t.length;while(n--)r.attrHandle[t[n]]=ct}}),x.find=ut,x.expr=ut.selectors,x.expr[":"]=x.expr.pseudos,x.unique=ut.uniqueSort,x.text=ut.getText,x.isXMLDoc=ut.isXML,x.contains=ut.contains}(e);var D={};function A(e){var t=D[e]={};return x.each(e.match(w)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?D[e]||A(e):x.extend({},e);var t,n,r,i,o,s,a=[],u=!e.once&&[],l=function(f){for(t=e.memory&&f,n=!0,s=i||0,i=0,o=a.length,r=!0;a&&o>s;s++)if(a[s].apply(f[0],f[1])===!1&&e.stopOnFalse){t=!1;break}r=!1,a&&(u?u.length&&l(u.shift()):t?a=[]:c.disable())},c={add:function(){if(a){var n=a.length;(function s(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&c.has(n)||a.push(n):n&&n.length&&"string"!==r&&s(n)})})(arguments),r?o=a.length:t&&(i=n,l(t))}return this},remove:function(){return a&&x.each(arguments,function(e,t){var n;while((n=x.inArray(t,a,n))>-1)a.splice(n,1),r&&(o>=n&&o--,s>=n&&s--)}),this},has:function(e){return e?x.inArray(e,a)>-1:!(!a||!a.length)},empty:function(){return a=[],o=0,this},disable:function(){return a=u=t=undefined,this},disabled:function(){return!a},lock:function(){return u=undefined,t||c.disable(),this},locked:function(){return!u},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!a||n&&!u||(r?u.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!n}};return c},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var s=o[0],a=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=a&&a.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===r?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var s=o[2],a=o[3];r[o[1]]=s.add,a&&s.add(function(){n=a},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=s.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=d.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),s=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?d.call(arguments):r,n===a?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},a,u,l;if(r>1)for(a=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(s(t,l,n)).fail(o.reject).progress(s(t,u,a)):--i;return i||o.resolveWith(l,n),o.promise()}}),x.support=function(t){var n=o.createElement("input"),r=o.createDocumentFragment(),i=o.createElement("div"),s=o.createElement("select"),a=s.appendChild(o.createElement("option"));return n.type?(n.type="checkbox",t.checkOn=""!==n.value,t.optSelected=a.selected,t.reliableMarginRight=!0,t.boxSizingReliable=!0,t.pixelPosition=!1,n.checked=!0,t.noCloneChecked=n.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!a.disabled,n=o.createElement("input"),n.value="t",n.type="radio",t.radioValue="t"===n.value,n.setAttribute("checked","t"),n.setAttribute("name","t"),r.appendChild(n),t.checkClone=r.cloneNode(!0).cloneNode(!0).lastChild.checked,t.focusinBubbles="onfocusin"in e,i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===i.style.backgroundClip,x(function(){var n,r,s="padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box",a=o.getElementsByTagName("body")[0];a&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",a.appendChild(n).appendChild(i),i.innerHTML="",i.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%",x.swap(a,null!=a.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===i.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(i,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(i,null)||{width:"4px"}).width,r=i.appendChild(o.createElement("div")),r.style.cssText=i.style.cssText=s,r.style.marginRight=r.style.width="0",i.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),a.removeChild(n))}),t):t}({});var L,q,H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,O=/([A-Z])/g;function F(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=x.expando+Math.random()}F.uid=1,F.accepts=function(e){return e.nodeType?1===e.nodeType||9===e.nodeType:!0},F.prototype={key:function(e){if(!F.accepts(e))return 0;var t={},n=e[this.expando];if(!n){n=F.uid++;try{t[this.expando]={value:n},Object.defineProperties(e,t)}catch(r){t[this.expando]=n,x.extend(e,t)}}return this.cache[n]||(this.cache[n]={}),n},set:function(e,t,n){var r,i=this.key(e),o=this.cache[i];if("string"==typeof t)o[t]=n;else if(x.isEmptyObject(o))this.cache[i]=t;else for(r in t)o[r]=t[r]},get:function(e,t){var n=this.cache[this.key(e)];return t===undefined?n:n[t]},access:function(e,t,n){return t===undefined||t&&"string"==typeof t&&n===undefined?this.get(e,t):(this.set(e,t,n),n!==undefined?n:t)},remove:function(e,t){var n,r,i=this.key(e),o=this.cache[i];if(t===undefined)this.cache[i]={};else{x.isArray(t)?r=t.concat(t.map(x.camelCase)):t in o?r=[t]:(r=x.camelCase(t),r=r in o?[r]:r.match(w)||[]),n=r.length;while(n--)delete o[r[n]]}},hasData:function(e){return!x.isEmptyObject(this.cache[e[this.expando]]||{})},discard:function(e){delete this.cache[this.key(e)]}},L=new F,q=new F,x.extend({acceptData:F.accepts,hasData:function(e){return L.hasData(e)||q.hasData(e)},data:function(e,t,n){return L.access(e,t,n)},removeData:function(e,t){L.remove(e,t)},_data:function(e,t,n){return q.access(e,t,n)},_removeData:function(e,t){q.remove(e,t)}}),x.fn.extend({data:function(e,t){var n,r,i=this[0],o=0,s=null;if(e===undefined){if(this.length&&(s=L.get(i),1===i.nodeType&&!q.get(i,"hasDataAttrs"))){for(n=i.attributes;n.length>o;o++)r=n[o].name,0===r.indexOf("data-")&&(r=x.camelCase(r.substring(5)),P(i,r,s[r]));q.set(i,"hasDataAttrs",!0)}return s}return"object"==typeof e?this.each(function(){L.set(this,e)}):x.access(this,function(t){var n,r=x.camelCase(e);if(i&&t===undefined){if(n=L.get(i,e),n!==undefined)return n;if(n=L.get(i,r),n!==undefined)return n;if(n=P(i,r,undefined),n!==undefined)return n}else this.each(function(){var n=L.get(this,r);L.set(this,r,t),-1!==e.indexOf("-")&&n!==undefined&&L.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){L.remove(this,e)})}});function P(e,t,n){var r;if(n===undefined&&1===e.nodeType)if(r="data-"+t.replace(O,"-$1").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:H.test(n)?JSON.parse(n):n}catch(i){}L.set(e,t,n)}else n=undefined;return n}x.extend({queue:function(e,t,n){var r;return e?(t=(t||"fx")+"queue",r=q.get(e,t),n&&(!r||x.isArray(n)?r=q.access(e,t,x.makeArray(n)):r.push(n)),r||[]):undefined},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),s=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return q.get(e,n)||q.access(e,n,{empty:x.Callbacks("once memory").add(function(){q.remove(e,[t+"queue",n])})})}}),x.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),n>arguments.length?x.queue(this[0],e):t===undefined?this:this.each(function(){var n=x.queue(this,e,t); x._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=x.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=undefined),e=e||"fx";while(s--)n=q.get(o[s],e+"queueHooks"),n&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(t)}});var R,M,W=/[\t\r\n]/g,$=/\r/g,B=/^(?:input|select|textarea|button)$/i;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[x.propFix[e]||e]})},addClass:function(e){var t,n,r,i,o,s=0,a=this.length,u="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,s=0,a=this.length,u=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,i="boolean"==typeof t;return x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,s=0,a=x(this),u=t,l=e.match(w)||[];while(o=l[s++])u=i?u:!a.hasClass(o),a[u?"addClass":"removeClass"](o)}else(n===r||"boolean"===n)&&(this.className&&q.set(this,"__className__",this.className),this.className=this.className||e===!1?"":q.get(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(W," ").indexOf(t)>=0)return!0;return!1},val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=x.isFunction(e),this.each(function(n){var i,o=x(this);1===this.nodeType&&(i=r?e.call(this,n,o.val()):e,null==i?i="":"number"==typeof i?i+="":x.isArray(i)&&(i=x.map(i,function(e){return null==e?"":e+""})),t=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&t.set(this,i,"value")!==undefined||(this.value=i))});if(i)return t=x.valHooks[i.type]||x.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&(n=t.get(i,"value"))!==undefined?n:(n=i.value,"string"==typeof n?n.replace($,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,s=o?null:[],a=o?i+1:r.length,u=0>i?a:o?i:0;for(;a>u;u++)if(n=r[u],!(!n.selected&&u!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),s=i.length;while(s--)r=i[s],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,t,n){var i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===r?x.prop(e,t,n):(1===s&&x.isXMLDoc(e)||(t=t.toLowerCase(),i=x.attrHooks[t]||(x.expr.match.boolean.test(t)?M:R)),n===undefined?i&&"get"in i&&null!==(o=i.get(e,t))?o:(o=x.find.attr(e,t),null==o?undefined:o):null!==n?i&&"set"in i&&(o=i.set(e,n,t))!==undefined?o:(e.setAttribute(t,n+""),n):(x.removeAttr(e,t),undefined))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.boolean.test(n)&&(e[r]=!1),e.removeAttribute(n)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,t,n){var r,i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return o=1!==s||!x.isXMLDoc(e),o&&(t=x.propFix[t]||t,i=x.propHooks[t]),n!==undefined?i&&"set"in i&&(r=i.set(e,n,t))!==undefined?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){return e.hasAttribute("tabindex")||B.test(e.nodeName)||e.href?e.tabIndex:-1}}}}),M={set:function(e,t,n){return t===!1?x.removeAttr(e,n):e.setAttribute(n,n),n}},x.each(x.expr.match.boolean.source.match(/\w+/g),function(e,t){var n=x.expr.attrHandle[t]||x.find.attr;x.expr.attrHandle[t]=function(e,t,r){var i=x.expr.attrHandle[t],o=r?undefined:(x.expr.attrHandle[t]=undefined)!=n(e,t,r)?t.toLowerCase():null;return x.expr.attrHandle[t]=i,o}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,t){return x.isArray(t)?e.checked=x.inArray(x(e).val(),t)>=0:undefined}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var I=/^key/,z=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,X=/^([^.]*)(?:\.(.+)|)$/;function U(){return!0}function Y(){return!1}function V(){try{return o.activeElement}catch(e){}}x.event={global:{},add:function(e,t,n,i,o){var s,a,u,l,c,f,p,h,d,g,m,y=q.get(e);if(y){n.handler&&(s=n,n=s.handler,o=s.selector),n.guid||(n.guid=x.guid++),(l=y.events)||(l=y.events={}),(a=y.handle)||(a=y.handle=function(e){return typeof x===r||e&&x.event.triggered===e.type?undefined:x.event.dispatch.apply(a.elem,arguments)},a.elem=e),t=(t||"").match(w)||[""],c=t.length;while(c--)u=X.exec(t[c])||[],d=m=u[1],g=(u[2]||"").split(".").sort(),d&&(p=x.event.special[d]||{},d=(o?p.delegateType:p.bindType)||d,p=x.event.special[d]||{},f=x.extend({type:d,origType:m,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&x.expr.match.needsContext.test(o),namespace:g.join(".")},s),(h=l[d])||(h=l[d]=[],h.delegateCount=0,p.setup&&p.setup.call(e,i,g,a)!==!1||e.addEventListener&&e.addEventListener(d,a,!1)),p.add&&(p.add.call(e,f),f.handler.guid||(f.handler.guid=n.guid)),o?h.splice(h.delegateCount++,0,f):h.push(f),x.event.global[d]=!0);e=null}},remove:function(e,t,n,r,i){var o,s,a,u,l,c,f,p,h,d,g,m=q.hasData(e)&&q.get(e);if(m&&(u=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(a=X.exec(t[l])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h){f=x.event.special[h]||{},h=(r?f.delegateType:f.bindType)||h,p=u[h]||[],a=a[2]&&RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));s&&!p.length&&(f.teardown&&f.teardown.call(e,d,m.handle)!==!1||x.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)x.event.remove(e,h+t[l],n,r,!0);x.isEmptyObject(u)&&(delete m.handle,q.remove(e,"events"))}},trigger:function(t,n,r,i){var s,a,u,l,c,f,p,h=[r||o],d=y.call(t,"type")?t.type:t,g=y.call(t,"namespace")?t.namespace.split("."):[];if(a=u=r=r||o,3!==r.nodeType&&8!==r.nodeType&&!_.test(d+x.event.triggered)&&(d.indexOf(".")>=0&&(g=d.split("."),d=g.shift(),g.sort()),c=0>d.indexOf(":")&&"on"+d,t=t[x.expando]?t:new x.Event(d,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=g.join("."),t.namespace_re=t.namespace?RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=undefined,t.target||(t.target=r),n=null==n?[t]:x.makeArray(n,[t]),p=x.event.special[d]||{},i||!p.trigger||p.trigger.apply(r,n)!==!1)){if(!i&&!p.noBubble&&!x.isWindow(r)){for(l=p.delegateType||d,_.test(l+d)||(a=a.parentNode);a;a=a.parentNode)h.push(a),u=a;u===(r.ownerDocument||o)&&h.push(u.defaultView||u.parentWindow||e)}s=0;while((a=h[s++])&&!t.isPropagationStopped())t.type=s>1?l:p.bindType||d,f=(q.get(a,"events")||{})[t.type]&&q.get(a,"handle"),f&&f.apply(a,n),f=c&&a[c],f&&x.acceptData(a)&&f.apply&&f.apply(a,n)===!1&&t.preventDefault();return t.type=d,i||t.isDefaultPrevented()||p._default&&p._default.apply(h.pop(),n)!==!1||!x.acceptData(r)||c&&x.isFunction(r[d])&&!x.isWindow(r)&&(u=r[c],u&&(r[c]=null),x.event.triggered=d,r[d](),x.event.triggered=undefined,u&&(r[c]=u)),t.result}},dispatch:function(e){e=x.event.fix(e);var t,n,r,i,o,s=[],a=d.call(arguments),u=(q.get(this,"events")||{})[e.type]||[],l=x.event.special[e.type]||{};if(a[0]=e,e.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),t=0;while((i=s[t++])&&!e.isPropagationStopped()){e.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(o.namespace))&&(e.handleObj=o,e.data=o.data,r=((x.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,a),r!==undefined&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return l.postDispatch&&l.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,s=[],a=t.delegateCount,u=e.target;if(a&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!==this;u=u.parentNode||this)if(u.disabled!==!0||"click"!==e.type){for(r=[],n=0;a>n;n++)o=t[n],i=o.selector+" ",r[i]===undefined&&(r[i]=o.needsContext?x(i,this).index(u)>=0:x.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&s.push({elem:u,handlers:r})}return t.length>a&&s.push({elem:this,handlers:t.slice(a)}),s},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,r,i,s=t.button;return null==e.pageX&&null!=t.clientX&&(n=e.target.ownerDocument||o,r=n.documentElement,i=n.body,e.pageX=t.clientX+(r&&r.scrollLeft||i&&i.scrollLeft||0)-(r&&r.clientLeft||i&&i.clientLeft||0),e.pageY=t.clientY+(r&&r.scrollTop||i&&i.scrollTop||0)-(r&&r.clientTop||i&&i.clientTop||0)),e.which||s===undefined||(e.which=1&s?1:2&s?3:4&s?2:0),e}},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=z.test(i)?this.mouseHooks:I.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return 3===e.target.nodeType&&(e.target=e.target.parentNode),s.filter?s.filter(e,o):e},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==V()&&this.focus?(this.focus(),!1):undefined},delegateType:"focusin"},blur:{trigger:function(){return this===V()&&this.blur?(this.blur(),!1):undefined},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&x.nodeName(this,"input")?(this.click(),!1):undefined},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==undefined&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)},x.Event=function(e,t){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.getPreventDefault&&e.getPreventDefault()?U:Y):this.type=e,t&&x.extend(this,t),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,undefined):new x.Event(e,t)},x.Event.prototype={isDefaultPrevented:Y,isPropagationStopped:Y,isImmediatePropagationStopped:Y,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=U,e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=U,e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=U,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,t,n,r,i){var o,s;if("object"==typeof e){"string"!=typeof t&&(n=n||t,t=undefined);for(s in e)this.on(s,t,n,e[s],i);return this}if(null==n&&null==r?(r=t,n=t=undefined):null==r&&("string"==typeof t?(r=n,n=undefined):(r=n,n=t,t=undefined)),r===!1)r=Y;else if(!r)return this;return 1===i&&(o=r,r=function(e){return x().off(e),o.apply(this,arguments)},r.guid=o.guid||(o.guid=x.guid++)),this.each(function(){x.event.add(this,e,r,n,t)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,x(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return(t===!1||"function"==typeof t)&&(n=t,t=undefined),n===!1&&(n=Y),this.each(function(){x.event.remove(this,e,n,t)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];return n?x.event.trigger(e,t,n,!0):undefined}});var G=/^.[^:#\[\.,]*$/,J=x.expr.match.needsContext,Q={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return t=this,this.pushStack(x(e).filter(function(){for(r=0;i>r;r++)if(x.contains(t[r],this))return!0}));for(n=[],r=0;i>r;r++)x.find(e,this[r],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t=x(e,this),n=t.length;return this.filter(function(){var e=0;for(;n>e;e++)if(x.contains(this,t[e]))return!0})},not:function(e){return this.pushStack(Z(this,e||[],!0))},filter:function(e){return this.pushStack(Z(this,e||[],!1))},is:function(e){return!!e&&("string"==typeof e?J.test(e)?x(e,this.context).index(this[0])>=0:x.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],s=J.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(s?s.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?g.call(x(e),this[0]):g.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function K(e,t){while((e=e[t])&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return K(e,"nextSibling")},prev:function(e){return K(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(Q[e]||x.unique(i),"p"===e[0]&&i.reverse()),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,t,n){var r=[],i=n!==undefined;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&x(e).is(n))break;r.push(e)}return r},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function Z(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(G.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return g.call(t,e)>=0!==n})}var et=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,tt=/<([\w:]+)/,nt=/<|&#?\w+;/,rt=/<(?:script|style|link)/i,it=/^(?:checkbox|radio)$/i,ot=/checked\s*(?:[^=]|=\s*.checked.)/i,st=/^$|\/(?:java|ecma)script/i,at=/^true\/(.*)/,ut=/^\s*\s*$/g,lt={option:[1,""],thead:[1,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],_default:[0,"",""]};lt.optgroup=lt.option,lt.tbody=lt.tfoot=lt.colgroup=lt.caption=lt.col=lt.thead,lt.th=lt.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===undefined?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=ct(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=ct(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(gt(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&ht(gt(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++)1===e.nodeType&&(x.cleanData(gt(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var t=this[0]||{},n=0,r=this.length;if(e===undefined&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!rt.test(e)&&!lt[(tt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(et,"<$1>");try{for(;r>n;n++)t=this[n]||{},1===t.nodeType&&(x.cleanData(gt(t,!1)),t.innerHTML=e);t=0}catch(i){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=p.apply([],e);var r,i,o,s,a,u,l=0,c=this.length,f=this,h=c-1,d=e[0],g=x.isFunction(d);if(g||!(1>=c||"string"!=typeof d||x.support.checkClone)&&ot.test(d))return this.each(function(r){var i=f.eq(r);g&&(e[0]=d.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(r=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),i=r.firstChild,1===r.childNodes.length&&(r=i),i)){for(o=x.map(gt(r,"script"),ft),s=o.length;c>l;l++)a=r,l!==h&&(a=x.clone(a,!0,!0),s&&x.merge(o,gt(a,"script"))),t.call(this[l],a,l);if(s)for(u=o[o.length-1].ownerDocument,x.map(o,pt),l=0;s>l;l++)a=o[l],st.test(a.type||"")&&!q.access(a,"globalEval")&&x.contains(u,a)&&(a.src?x._evalUrl(a.src):x.globalEval(a.textContent.replace(ut,"")))}return this}}),x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=[],i=x(e),o=i.length-1,s=0;for(;o>=s;s++)n=s===o?this:this.clone(!0),x(i[s])[t](n),h.apply(r,n.get());return this.pushStack(r)}}),x.extend({clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=x.contains(e.ownerDocument,e);if(!(x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(s=gt(a),o=gt(e),r=0,i=o.length;i>r;r++)mt(o[r],s[r]);if(t)if(n)for(o=o||gt(e),s=s||gt(a),r=0,i=o.length;i>r;r++)dt(o[r],s[r]);else dt(e,a);return s=gt(a,"script"),s.length>0&&ht(s,!u&>(e,"script")),a},buildFragment:function(e,t,n,r){var i,o,s,a,u,l,c=0,f=e.length,p=t.createDocumentFragment(),h=[];for(;f>c;c++)if(i=e[c],i||0===i)if("object"===x.type(i))x.merge(h,i.nodeType?[i]:i);else if(nt.test(i)){o=o||p.appendChild(t.createElement("div")),s=(tt.exec(i)||["",""])[1].toLowerCase(),a=lt[s]||lt._default,o.innerHTML=a[1]+i.replace(et,"<$1>")+a[2],l=a[0];while(l--)o=o.firstChild;x.merge(h,o.childNodes),o=p.firstChild,o.textContent=""}else h.push(t.createTextNode(i));p.textContent="",c=0;while(i=h[c++])if((!r||-1===x.inArray(i,r))&&(u=x.contains(i.ownerDocument,i),o=gt(p.appendChild(i),"script"),u&&ht(o),n)){l=0;while(i=o[l++])st.test(i.type||"")&&n.push(i)}return p},cleanData:function(e){var t,n,r,i=e.length,o=0,s=x.event.special;for(;i>o;o++){if(n=e[o],x.acceptData(n)&&(t=q.access(n)))for(r in t.events)s[r]?x.event.remove(n,r):x.removeEvent(n,r,t.handle);L.discard(n),q.discard(n)}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"text",async:!1,global:!1,success:x.globalEval})}});function ct(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function ft(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function pt(e){var t=at.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function ht(e,t){var n=e.length,r=0;for(;n>r;r++)q.set(e[r],"globalEval",!t||q.get(t[r],"globalEval"))}function dt(e,t){var n,r,i,o,s,a,u,l;if(1===t.nodeType){if(q.hasData(e)&&(o=q.access(e),s=x.extend({},o),l=o.events,q.set(t,s),l)){delete s.handle,s.events={};for(i in l)for(n=0,r=l[i].length;r>n;n++)x.event.add(t,i,l[i][n])}L.hasData(e)&&(a=L.access(e),u=x.extend({},a),L.set(t,u))}}function gt(e,t){var n=e.getElementsByTagName?e.getElementsByTagName(t||"*"):e.querySelectorAll?e.querySelectorAll(t||"*"):[];return t===undefined||t&&x.nodeName(e,t)?x.merge([e],n):n}function mt(e,t){var n=t.nodeName.toLowerCase();"input"===n&&it.test(e.type)?t.checked=e.checked:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}x.fn.extend({wrapAll:function(e){var t;return x.isFunction(e)?this.each(function(t){x(this).wrapAll(e.call(this,t))}):(this[0]&&(t=x(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this)},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var yt,vt,xt=/^(none|table(?!-c[ea]).+)/,bt=/^margin/,wt=RegExp("^("+b+")(.*)$","i"),Tt=RegExp("^("+b+")(?!px)[a-z%]+$","i"),Ct=RegExp("^([+-])=("+b+")","i"),kt={BODY:"block"},Nt={position:"absolute",visibility:"hidden",display:"block"},Et={letterSpacing:0,fontWeight:400},St=["Top","Right","Bottom","Left"],jt=["Webkit","O","Moz","ms"];function Dt(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=jt.length;while(i--)if(t=jt[i]+n,t in e)return t;return r}function At(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function Lt(t){return e.getComputedStyle(t,null)}function qt(e,t){var n,r,i,o=[],s=0,a=e.length;for(;a>s;s++)r=e[s],r.style&&(o[s]=q.get(r,"olddisplay"),n=r.style.display,t?(o[s]||"none"!==n||(r.style.display=""),""===r.style.display&&At(r)&&(o[s]=q.access(r,"olddisplay",Pt(r.nodeName)))):o[s]||(i=At(r),(n&&"none"!==n||!i)&&q.set(r,"olddisplay",i?n:x.css(r,"display"))));for(s=0;a>s;s++)r=e[s],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[s]||"":"none"));return e}x.fn.extend({css:function(e,t){return x.access(this,function(e,t,n){var r,i,o={},s=0;if(x.isArray(t)){for(r=Lt(e),i=t.length;i>s;s++)o[t[s]]=x.css(e,t[s],!1,r);return o}return n!==undefined?x.style(e,t,n):x.css(e,t)},e,t,arguments.length>1)},show:function(){return qt(this,!0)},hide:function(){return qt(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:At(this))?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=yt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,s,a=x.camelCase(t),u=e.style;return t=x.cssProps[a]||(x.cssProps[a]=Dt(u,a)),s=x.cssHooks[t]||x.cssHooks[a],n===undefined?s&&"get"in s&&(i=s.get(e,!1,r))!==undefined?i:u[t]:(o=typeof n,"string"===o&&(i=Ct.exec(n))&&(n=(i[1]+1)*i[2]+parseFloat(x.css(e,t)),o="number"),null==n||"number"===o&&isNaN(n)||("number"!==o||x.cssNumber[a]||(n+="px"),x.support.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),s&&"set"in s&&(n=s.set(e,n,r))===undefined||(u[t]=n)),undefined)}},css:function(e,t,n,r){var i,o,s,a=x.camelCase(t);return t=x.cssProps[a]||(x.cssProps[a]=Dt(e.style,a)),s=x.cssHooks[t]||x.cssHooks[a],s&&"get"in s&&(i=s.get(e,!0,n)),i===undefined&&(i=yt(e,t,r)),"normal"===i&&t in Et&&(i=Et[t]),""===n||n?(o=parseFloat(i),n===!0||x.isNumeric(o)?o||0:i):i}}),yt=function(e,t,n){var r,i,o,s=n||Lt(e),a=s?s.getPropertyValue(t)||s[t]:undefined,u=e.style;return s&&(""!==a||x.contains(e.ownerDocument,e)||(a=x.style(e,t)),Tt.test(a)&&bt.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=s.width,u.width=r,u.minWidth=i,u.maxWidth=o)),a};function Ht(e,t,n){var r=wt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function Ot(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,s=0;for(;4>o;o+=2)"margin"===n&&(s+=x.css(e,n+St[o],!0,i)),r?("content"===n&&(s-=x.css(e,"padding"+St[o],!0,i)),"margin"!==n&&(s-=x.css(e,"border"+St[o]+"Width",!0,i))):(s+=x.css(e,"padding"+St[o],!0,i),"padding"!==n&&(s+=x.css(e,"border"+St[o]+"Width",!0,i)));return s}function Ft(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Lt(e),s=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=yt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Tt.test(i))return i;r=s&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+Ot(e,t,n||(s?"border":"content"),r,o)+"px"}function Pt(e){var t=o,n=kt[e];return n||(n=Rt(e,t),"none"!==n&&n||(vt=(vt||x(" assets/plugins/summernote/.gitignore000064400000000073152510440070013713 0ustar00# vim editing *.swp .tern-port # node modules node_modules assets/plugins/summernote/bs2.html000064400000003444152510440070013304 0ustar00 summernote
      assets/plugins/summernote/elements.less000064400000013505152510440070014433 0ustar00/*--------------------------------------------------- LESS Elements 0.9 --------------------------------------------------- A set of useful LESS mixins More info at: http://lesselements.com ---------------------------------------------------*/ .gradient(@color: #F5F5F5, @start: #EEE, @stop: #FFF) { background: @color; background: -webkit-gradient(linear, left bottom, left top, color-stop(0, @start), color-stop(1, @stop)); background: -ms-linear-gradient(bottom, @start, @stop); background: -moz-linear-gradient(center bottom, @start 0%, @stop 100%); background: -o-linear-gradient(@stop, @start); filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@stop,@start)); } .bw-gradient(@color: #F5F5F5, @start: 0, @stop: 255) { background: @color; background: -webkit-gradient(linear, left bottom, left top, color-stop(0, rgb(@start,@start,@start)), color-stop(1, rgb(@stop,@stop,@stop))); background: -ms-linear-gradient(bottom, rgb(@start,@start,@start) 0%, rgb(@stop,@stop,@stop) 100%); background: -moz-linear-gradient(center bottom, rgb(@start,@start,@start) 0%, rgb(@stop,@stop,@stop) 100%); background: -o-linear-gradient(rgb(@stop,@stop,@stop), rgb(@start,@start,@start)); filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",rgb(@stop,@stop,@stop),rgb(@start,@start,@start))); } .bordered(@top-color: #EEE, @right-color: #EEE, @bottom-color: #EEE, @left-color: #EEE) { border-top: solid 1px @top-color; border-left: solid 1px @left-color; border-right: solid 1px @right-color; border-bottom: solid 1px @bottom-color; } .drop-shadow(@x-axis: 0, @y-axis: 1px, @blur: 2px, @alpha: 0.1) { -webkit-box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha); -moz-box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha); box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha); } .rounded(@radius: 2px) { -webkit-border-radius: @radius; -moz-border-radius: @radius; border-radius: @radius; } .border-radius(@topright: 0, @bottomright: 0, @bottomleft: 0, @topleft: 0) { -webkit-border-top-right-radius: @topright; -webkit-border-bottom-right-radius: @bottomright; -webkit-border-bottom-left-radius: @bottomleft; -webkit-border-top-left-radius: @topleft; -moz-border-radius-topright: @topright; -moz-border-radius-bottomright: @bottomright; -moz-border-radius-bottomleft: @bottomleft; -moz-border-radius-topleft: @topleft; border-top-right-radius: @topright; border-bottom-right-radius: @bottomright; border-bottom-left-radius: @bottomleft; border-top-left-radius: @topleft; .background-clip(padding-box); } .opacity(@opacity: 0.5) { -webkit-opacity: @opacity; -khtml-opacity: @opacity; -moz-opacity: @opacity; opacity: @opacity; @opperc: @opacity * 100; -ms-filter: ~"progid:DXImageTransform.Microsoft.Alpha(opacity=@{opperc})"; filter: ~"alpha(opacity=@{opperc})"; } .transition-duration(@duration: 0.2s) { -moz-transition-duration: @duration; -webkit-transition-duration: @duration; -o-transition-duration: @duration; transition-duration: @duration; } .transform(...) { -webkit-transform: @arguments; -moz-transform: @arguments; -o-transform: @arguments; -ms-transform: @arguments; transform: @arguments; } .rotation(@deg:5deg){ .transform(rotate(@deg)); } .scale(@ratio:1.5){ .transform(scale(@ratio)); } .transition(@duration:0.2s, @ease:ease-out) { -webkit-transition: all @duration @ease; -moz-transition: all @duration @ease; -o-transition: all @duration @ease; transition: all @duration @ease; } .inner-shadow(@horizontal:0, @vertical:1px, @blur:2px, @alpha: 0.4) { -webkit-box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha); -moz-box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha); box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha); } .box-shadow(@arguments) { -webkit-box-shadow: @arguments; -moz-box-shadow: @arguments; box-shadow: @arguments; } .box-sizing(@sizing: border-box) { -ms-box-sizing: @sizing; -moz-box-sizing: @sizing; -webkit-box-sizing: @sizing; box-sizing: @sizing; } .user-select(@argument: none) { -webkit-user-select: @argument; -moz-user-select: @argument; -ms-user-select: @argument; user-select: @argument; } .columns(@colwidth: 250px, @colcount: 0, @colgap: 50px, @columnRuleColor: #EEE, @columnRuleStyle: solid, @columnRuleWidth: 1px) { -moz-column-width: @colwidth; -moz-column-count: @colcount; -moz-column-gap: @colgap; -moz-column-rule-color: @columnRuleColor; -moz-column-rule-style: @columnRuleStyle; -moz-column-rule-width: @columnRuleWidth; -webkit-column-width: @colwidth; -webkit-column-count: @colcount; -webkit-column-gap: @colgap; -webkit-column-rule-color: @columnRuleColor; -webkit-column-rule-style: @columnRuleStyle; -webkit-column-rule-width: @columnRuleWidth; column-width: @colwidth; column-count: @colcount; column-gap: @colgap; column-rule-color: @columnRuleColor; column-rule-style: @columnRuleStyle; column-rule-width: @columnRuleWidth; } .translate(@x:0, @y:0) { .transform(translate(@x, @y)); } .background-clip(@argument: padding-box) { -moz-background-clip: @argument; -webkit-background-clip: @argument; background-clip: @argument; } assets/plugins/bootstrap-switch/README.md000064400000012512152510440070014321 0ustar00Bootstrap-switch v.1.8 ======================== You can now also use radio buttons and checkboxes as switches. Demo ---- Hurray! http://www.larentis.eu/switch/ moves to github pages and we are happy to tell you that we have bought a new domain: http://www.bootstrap-switch.org . Some troubles can occur so please, don't hate us :') Usage ----- Just include Twitter Bootstrap, jQuery, Bootstrap Switch CSS and Javascript ``` html // master Fork me on GitHub

      Bootstrap switch

      by Mattia Larentis (@SpiritualGuru) and Peter Stein




      Dimensions can be changed too:


      <div class="make-switch switch-large">
          <input type="checkbox" checked>
      </div>
      
      <div class="make-switch">
          <input type="checkbox" checked>
      </div>
      
      <div class="make-switch switch-small">
          <input type="checkbox" checked>
      </div>
      
      <div class="make-switch switch-mini">
          <input type="checkbox" checked>
      </div>
      
      <div id="dimension-switch" class="make-switch">
          <input type="checkbox" checked>
      </div>
      // Resets to the regular style
      $('#dimension-switch').bootstrapSwitch('setSizeClass', '');
      // Sets a mini switch
      $('#dimension-switch').bootstrapSwitch('setSizeClass', 'switch-mini');
      // Sets a small switch
      $('#dimension-switch').bootstrapSwitch('setSizeClass', 'switch-small');
      // Sets a large switch
      $('#dimension-switch').bootstrapSwitch('setSizeClass', 'switch-large');


      Colors can be changed too:


      <div class="make-switch" data-on="primary" data-off="info">
          <input type="checkbox" checked>
      </div>
      
      <div class="make-switch" data-on="info" data-off="success">
          <input type="checkbox" checked>
      </div>
      
      <div class="make-switch" data-on="success" data-off="warning">
          <input type="checkbox" checked>
      </div>
      
      <div class="make-switch" data-on="warning" data-off="danger">
          <input type="checkbox" checked>
      </div>
      
      <div class="make-switch" data-on="danger" data-off="default">
          <input type="checkbox" checked>
      </div>
      
      <div class="make-switch" data-on="default" data-off="primary">
          <input type="checkbox" checked>
      </div>
      
      <div id="change-color-switch" class="make-switch" data-on="default" data-off="primary">
          <input type="checkbox" checked>
      </div>
      $('#change-color-switch').bootstrapSwitch('setOnClass', 'success');
      $('#change-color-switch').bootstrapSwitch('setOffClass', 'danger');


      <div id="animated-switch" class="make-switch" data-animated="false">
          <input type="checkbox" checked>
      </div>
      // Enables animation for the selected item
      $('#animated-switch').bootstrapSwitch('setAnimated', true);
      // Disables animation for the selected item
      $('#animated-switch').bootstrapSwitch('setAnimated', false);
      <div class="make-switch">
         <input type="checkbox" checked disabled>
      </div>


      <div id="label-switch" class="make-switch" data-on-label="SI" data-off-label="NO">
          <input type="checkbox" checked>
      </div>
      $('#label-switch').bootstrapSwitch('setOnLabel', 'I');
      $('#label-switch').bootstrapSwitch('setOffLabel', 'O');
      <div class="make-switch" data-text-label="TV">
          <input type="checkbox" checked>
      </div>
      <div class="make-switch" data-on-label="<i class='icon-ok icon-white'></i>" data-off-label="<i class='icon-remove'></i>">
          <input type="checkbox" checked />
      </div>
      Standard
      Font Awesome
      Flat UI
      <div class="make-switch switch-large" data-label-icon="icon-fullscreen" data-on-label="<i class='icon-ok icon-white'></i>" data-off-label="<i class='icon-remove'></i>">
          <input type="checkbox" checked>
      </div>
      
      <div class="make-switch switch-large" data-label-icon="icon-youtube icon-large" data-on-label="<i class='icon-thumbs-up icon-white'></i>" data-off-label="<i class='icon-thumbs-down'></i>">
          <input type="checkbox" checked>
      </div>
      
      <div class="make-switch" data-label-icon="fui-video" data-on-label="<i class='fui-check icon-white'></i>" data-off-label="<i class='fui-cross'></i>">
          <input type="checkbox" checked>
      </div>
      $('#mySwitch').on('switch-change', function (e, data) {
          var $el = $(data.el)
            , value = data.value;
          console.log(e, $el, value);
      });
      Label 1
      Label 2
      <label id="label-toggle-switch">Click on this Text to change the switch state</label>
          <div class="label-toggle-switch make-switch">
              <input type="checkbox" checked />
          </div>
      <script>
          $('#label-toggle-switch').on('click', function(e, data) {
              $('.label-toggle-switch').bootstrapSwitch('toggleState');
          });
          $('.label-toggle-switch').on('switch-change', function (e, data) {
              alert(data.value);
          });
      </script>
      
      <div id="label2-toggle-switch">
          <label class="label-change-switch">Click on this Text to change the switch state
          <div class="label2-toggle-switch make-switch">
              <input type="checkbox" checked />
          </div>
          </label>
      </div>
      <script>
          $('#label2-toggle-switch').on('switch-change', function(e, data) {
              alert(data.value);
          });
      </script>


      Status!
      ON!
      Toggle me!
      OFF!
      $('#toggle-state-switch').bootstrapSwitch('status'); // true || false
      $('#toggle-state-switch').bootstrapSwitch('toggleState');
      $('#toggle-state-switch').bootstrapSwitch('setState', false); // true || false


      $('#destroy-switch').bootstrapSwitch('destroy');


      Create
      $('#create-switch').wrap('<div class="make-switch" />').parent().bootstrapSwitch();


      $('#disable-switch').bootstrapSwitch('isActive');
      $('#disable-switch').bootstrapSwitch('toggleActivation');
      $('#disable-switch').bootstrapSwitch('setActive', false);  // true || false
      <div class="control-group">
          <div class="controls">
              <label for="option1">Option 1</label>
              <div class="make-switch radio1 radio-no-uncheck">
                  <input id="option1" type="radio" name="radio1" value="option1">
              </div>
              <label for="option2">Option 2</label>
              <div class="make-switch radio1 radio-no-uncheck">
                  <input id="option2" type="radio" name="radio1" value="option2">
              </div>
              <label for="option3">Option 3</label>
              <div class="make-switch radio1 radio-no-uncheck">
                  <input id="option3" type="radio" name="radio1" value="option3">
              </div>
          </div>
      </div>            
      <script>
          $('.radio1').on('switch-change', function () {
              $('.radio1').bootstrapSwitch('toggleRadioState');
          });
          // or
          $('.radio1').on('switch-change', function () {
              $('.radio1').bootstrapSwitch('toggleRadioStateAllowUncheck');
          });
          // or
          $('.radio1').on('switch-change', function () {
              $('.radio1').bootstrapSwitch('toggleRadioStateAllowUncheck', false);
          });
      </script>
      <div class="control-group">
          <div class="controls">
              <label for="option11">Option 1</label>
              <div class="make-switch radio2">
                  <input id="option11" type="radio" name="radio2" value="option1">
              </div>
              <label for="option12">Option 2</label>
              <div class="make-switch radio2">
                  <input id="option12" type="radio" name="radio2" value="option2" checked="checked">
              </div>
              <label for="option13">Option 3</label>
              <div class="make-switch radio2">
                  <input id="option13" type="radio" name="radio2" value="option3">
              </div>
          </div>
      </div>            
      <script>
          $('.radio2').on('switch-change', function () {
              $('.radio2').bootstrapSwitch('toggleRadioStateAllowUncheck', true);
          });
      </script>
      <form class="form-horizontal">
          <div class="control-group">
              <label class="control-label" for="inputEmail">Email</label>
              <div class="controls">
                  <input type="text" id="inputEmail" placeholder="Email">
              </div>
          </div>
          <div class="control-group">
              <label class="control-label" for="notification1">Notification 1</label>
              <div class="controls">
                  <div class="make-switch" tabindex="0">
                      <input id="notification1" type="checkbox">
                  </div>
              </div>
          </div>
          <div class="control-group">
              <label class="control-label" for="notification2">Notification 2</label>
              <div class="controls">
                  <div class="make-switch" tabindex="0">
                      <input id="notification2" type="checkbox">
                  </div>
              </div>
          </div>
          <div class="form-actions">
              <button type="reset" class="btn btn-inverse">Reset</button>
          </div>
      </form>
          <a href="#myModal" role="button" class="btn" data-toggle="modal">Modal</a>
      
          <div class="modal-body">
              <div class="make-switch">
                  <input type="checkbox" checked>
              </div>
          </div>
      assets/plugins/jquery-easy-pie-chart/jquery.easy-pie-chart.coffee000064400000011140152510440100021146 0ustar00### Easy pie chart is a jquery plugin to display simple animated pie charts for only one value Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. Built on top of the jQuery library (http://jquery.com) @source: http://github.com/rendro/easy-pie-chart/ @autor: Robert Fleischmann @version: 1.0.1 Inspired by: http://dribbble.com/shots/631074-Simple-Pie-Charts-II?list=popular&offset=210 Thanks to Philip Thrasher for the jquery plugin boilerplate for coffee script ### (($) -> $.easyPieChart = (el, options) -> @el = el @$el = $ el @$el.data "easyPieChart", @ @init = => @options = $.extend {}, $.easyPieChart.defaultOptions, options #get relevant data percent = parseInt @$el.data('percent'), 10 @percentage = 0 #create canvas element and set the origin to the center @canvas = $("").get(0) @$el.append @canvas G_vmlCanvasManager.initElement @canvas if G_vmlCanvasManager? @ctx = @canvas.getContext '2d' if window.devicePixelRatio > 1 scaleBy = window.devicePixelRatio $(@canvas).css({ width: @options.size height: @options.size }) @canvas.width *= scaleBy @canvas.height *= scaleBy @ctx.scale scaleBy, scaleBy @ctx.translate @options.size/2, @options.size/2 @$el.addClass 'easyPieChart' @$el.css { width: @options.size height: @options.size lineHeight: "#{@options.size}px" } @update percent @ @update = (percent) => if @options.animate == false drawLine percent else animateLine @percentage, percent renderScale = => @ctx.fillStyle = @options.scaleColor @ctx.lineWidth = 1 addScaleLine i for i in [0..24] addScaleLine = (i) => offset = if i%6==0 then 0 else @options.size*0.017 @ctx.save() @ctx.rotate i * Math.PI / 12 @ctx.fillRect @options.size/2-offset, 0, -@options.size*0.05+offset, 1 @ctx.restore() renderTrack = => offset = @options.size/2-@options.lineWidth/2 offset -= @options.size*0.08 if @options.scaleColor != false @ctx.beginPath() @ctx.arc 0, 0, offset, 0, Math.PI * 2, true @ctx.closePath() @ctx.strokeStyle = @options.trackColor @ctx.lineWidth = @options.lineWidth @ctx.stroke() renderBackground = => do renderScale if @options.scaleColor != false do renderTrack if @options.trackColor != false drawLine = (percent) => do renderBackground @ctx.strokeStyle = if $.isFunction @options.barColor then @options.barColor percent else @options.barColor @ctx.lineCap = @options.lineCap @ctx.lineWidth = @options.lineWidth offset = @options.size/2-@options.lineWidth/2 offset -= @options.size*0.08 if @options.scaleColor != false @ctx.save() @ctx.rotate -Math.PI/2 @ctx.beginPath() @ctx.arc 0, 0, offset, 0, Math.PI * 2 * percent/100, false @ctx.stroke() @ctx.restore() animateLine = (from, to) => fps = 30 steps = fps * @options.animate/1000 currentStep = 0 @options.onStart.call @ @percentage = to if @animation clearInterval @animation @animation = false @animation = setInterval => @ctx.clearRect -@options.size/2, -@options.size/2, @options.size, @options.size renderBackground.call @ drawLine.call @, [easeInOutQuad currentStep, from, to-from, steps] currentStep++ if (currentStep/steps) > 1 clearInterval @animation @animation = false @options.onStop.call @ , 1000/fps #t=time;b=beginning value;c=change in value;d=duration easeInOutQuad = (t, b, c, d) -> easeIn = (t) -> return Math.pow(t, 2) # Quad easing = (t) -> if (t < 1) return easeIn(t) else return 2 - easeIn( (t/2) * -2 + 2 ) t /= d / 2 return c / 2 * easing(t) + b @init() $.easyPieChart.defaultOptions = barColor: '#ef1e25' trackColor: '#f2f2f2' scaleColor: '#dfe0e0' lineCap: 'round' size: 110 lineWidth: 3 animate: false onStart: $.noop onStop: $.noop $.fn.easyPieChart = (options) -> $.each @, (i, el) -> $el = ($ el) unless $el.data 'easyPieChart' $el.data 'easyPieChart', new $.easyPieChart el, options undefined )(jQuery) assets/plugins/jquery-easy-pie-chart/Readme.md000064400000010171152510440100015366 0ustar00easy pie chart ============== Easy pie chart is a jQuery plugin that uses the canvas element to render simple pie charts for single values. These charts are highly customizable, very easy to implement and **scale to the resolution of the display of the client to provide sharp charts even on retina displays**. ![](https://github.com/rendro/easy-pie-chart/raw/master/img/easy-pie-chart.png) Get started ----------- To use the easy pie chart plugin you need to load the current version of jQuery (testet with 1.7.2) and the source (css+js) of the plugin. Just add the following lines to the `head` of your website: The second step is to add a element to your site to represent chart and add the `data-percent` attribute with the percent number the pie chart should have:
      73%
      Finally you have to initialize the plugin with your desired configuration: Configuration parameter ----------------------- You can pass a set of these options to the initialize function to set a custom behaviour and look for the plugin.
      Property (Type) Default Description
      barColor #ef1e25 The color of the curcular bar. You can pass either a css valid color string like rgb, rgba hex or string colors. But you can also pass a function that accepts the current percentage as a value to return a dynamically generated color.
      trackColor #f2f2f2 The color of the track for the bar, false to disable rendering.
      scaleColor #dfe0e0 The color of the scale lines, false to disable rendering.
      lineCap round Defines how the ending of the bar line looks like. Possible values are: butt, round and square.
      lineWidth 3 Width of the bar line in px.
      size 110 Size of the pie chart in px. It will always be a square.
      animate false Time in milliseconds for a eased animation of the bar growing, or false to deactivate.
      onStart $.noop Callback function that is called at the start of any animation (only if animate is not false).
      onStop $.noop Callback function that is called at the end of any animation (only if animate is not false).
      Public plugin methods --------------------- If you want to update the current percentage of the a pie chart, you can call the `update` method. The instance of the plugin is saved in the jQuery-data. Credits ------- Thanks to [Rafal Bromirski](http://www.paranoida.com/) for making [this dribble shot](http://drbl.in/ezuc) which inspired me and [Philip Thrasher](http://philipthrasher.com/) for his [CoffeeScript jQuery boilerplate](https://github.com/pthrasher/coffee-plate) assets/plugins/jquery-easy-pie-chart/Makefile000064400000000243152510440100015306 0ustar00dist: all @echo Done all: @echo Compiling coffee script coffee -c *.coffee watch: @echo Watch coffee script files coffee -w *.coffee .PHONY: dist all watchassets/plugins/jquery-easy-pie-chart/img/easy-pie-chart.png000064400000046633152510440100017760 0ustar00PNG  IHDR@V}MbIDATxMkQFBܨ ōPMW]`]*֏ ą+7&mi\tt9dUJ'o{ߙ  ` `CbX@1`b` 9N3D na XR sZ}aa ,` XHi08S*u3zf,w`ۚm X !j[4"vn~,4X*nZ֊叟fyN.^^}6T)W*&Z,`!B=}5+Ԧf/ܘ,0HG,` X`P;v(V<:2NZyx^-O(bY |,`ĕIq`>{Mݦӳ>gq,$ǂ Cq7HI)\o,` XHH0hǐ{*  s+XV |jAr ^HhyKqXȳ58n^R8y BX.Q KFuI,8,WcXb`,{e-XѬMs7oP_a; 9жjo-߷-X&t~-Vb6]:7B,hGaWs~ Vx&ti^$r<[UreމBmz B,X&|yҔM2VHGXx' ZP+ ^"oy-]D싅BV-P XRa:|WzdhB&- u;j!-yQC$&+@ͅ-Cc!k6$3 B  %}E_V=6q<ZҞzjciM5R{2a-RA%P֪|A5jk )(^O pc_88X ΍!=R1_|qrG˗cs)(X2  sVW&aȖc/FM4|oOHa(DI$(*R(JB1ƐL_W~߄֗"}EHE E}R(5B(@a )E7R(˄|!SH?C &# +B1f; kH(R(pv)vTsZ4pP?BNaG5EC* Ha&(FQE }WP1$W͏LQ='P~ P$Piɤ R(`x́R PYIHH$HaͷAfc8mB)kH)2߿/nSuwwwCc)@"BjIQxG]M>Ɛ|S݇{Rna,Wjg)`Hڀ8Ii[@xJ$o\MCxm.)RXSX+Q61tk02٨"5 6(!?|T+g.N! ,hZy&tSfe'`X@<7l,'dYQps9(~hfm^!Rذdp m CW2pI18aZJ.JJ$E^j ͩ癗j>wbΌ$fxEcX^<| ҞV֢Q~ IPnkLcMox#^@†R^R=w]_i;vcXJpҐ30R`qժ<͟f^zg!ޗ|IZqj&`c 1q~u Pr= 9%*S QbºJRzE8(|H;MVI1MV%^j3m1x3.OhyY%HQg7}ycXR5 В:. Y&Xn-@H!sgl 夐AƐA=HA HaY`0)P=R#}N}9>GD!c ŋ~P(  f=k(&+pU; =`lL!>]uz=`|ySD!{ 4(Y}+N.c(dNH(Bo)x Jxg0DaJ|" C &R$+Hwo]Evc0 anYQQ01pwY*qǃ [7E&7o8" Jt.(􊂉 ̬UNOO,&gk a׸s( B88Q hIi%OfyN}_pJ֡ v򦀚G5Df6`) {fmN(,P(ltw\R5 :t0m f"6Ʉ~냏(~T>5^fGk{:b2#QىsxתΤPD!\3UFPh.BҊ|70!*ͳlCS\,rGZ[Y6 Oe,-~z*hQXMEE]CuR z #lN_6\mG`%:_[L&6!OJ^j#Ǔ]8Bh QP]D5D!CÀz_8wg{W+*<W'ؔU>}Lq )P𡡦COTŮB\!e!@0_'JBVTq?Dawe5D!/D iFm{4^((knm {{{MCuQQH0ܜNo#ZM+QQH0wCY/QQLEA/;g* g9)H9iiiCb.b94gEdѠL{ٴ&Y51-3k$?l iFϞ_Q[U_(U@3 *1`g@TU@c@AA4AAAc@AA4AAAc@!xyc?< ?Oc]a:a"rTFl顋ۗbh@I7^^L5!$lUdMTE&5VP觭ZMZNh{ *s#(QOYNX^Fx7QpbE!H eQ5Fu7љJn[87B[S˖Pzs3Y,&Q2fGȔL4S2tINzhpQKj9g (82 3c2?op1n^O`Q\0qƐn(=X ,YF'd !Mr\A ~Zc~@skF=W| _0Ŏ\]4Fcx1ڝvCnw4M5>C]chun@<%u'H7wOG^YPkl]Fz왚|CO(޳4XVT-nf?Z [I{=/1 TvuM/ q H kh`YxK5Au5ix3LUphKܣѲLېkZ|r+/j⾦#͑2xbאpAis5%+)VѽX kcOyzyof ͋ )њ5CD>PuBqJϙoVÅLW-/pw"nK:2kc\|蹆څsmBzcu@` ` 2&tAc}xh|0p!]©9 AtaǏVb!&jjPDAw,Dcš~Qw$j2B䥞c )]MF6G4= |zUBՔ} m14G<ȗ+jVmu6߹=zbWJ_$@t1UN34Y>Cx/ A|yq?%:=K̀$ Ks/e5cߕ8#bKF~GFNv|۾z@JeSQܢ VKyih(1L;:Cch"˯g2Khx7rq$$syy` 5^}Pd|ep8e\?[meS$^P% Oa:YWOU%QT4li( }p9[2MQ@Cpە[ma.t6/USU;`kŒ|C8w{ñ2xvBA_iӦ6=_ ͝=}ljPeΡUXӌ anI^ml{6V.FR7D(prW׶-°py nOl'rJm^Og t. xm .˰D$9Dӗlu$ZO8/M 61 ]CxQ7$ cJw0nt8o1CLU/ɮ|:̕/<M"NDQ$UYV1e~D&I`Ϧ6an )OP~Ϣ [B3;]I.N5t1[K^,qe[֯ f!B~+n❇^c9N2tn <vJNx0}?EMgX=Nˍˆ`OxL(H*K,/Zv5׳Ŵ 9?Q7 ܀ԡ?lvE*HTUk3/XdEyVPn8!J{_VISQxb TZ&Rf*dv:>) 9Vh45U"pmþؐk91cshS`#TŶʤ@zމUu4d6xFeMIKηg:aYAR5u.Ln(z5&"/Um!e3ciE?Ug+~AaOG_lXGCle 6Y Pa5,4 LepcoGx҆ !:~Rs (1BF;m0,S00 2XRQڝƍuוF]w~,4]֭k8!qnɳryϹ(B EQb($<1b @ 1b @ 1bxɜ?qr0 }OŁd䟃) 9 0:??U(Rڸz-/m$3Rckjlgz9!r0KÿRNo}wj03RϱoNrə[ !3CS ɣR(A[َ$ΎD)ީuY$FΦKA}+_>%H#mk 7~.ގ$E GfdttjjJ$\VJ4 MͦAGž Rh6] :LL̒B)bБfbFRP&''7 [OF%)bۈRZ.>)&] z^?bccc,PIdgVRh3r/B[PIkV1gTmʮX咞ծ_.e6OS0CՃYB=c18d^R7w2)2 #={18d@A=y/JۈAGԃY΂4d@-zrrYV :]jwtN7U#O{/L :+?,A/=uGB Ġo.uUO^ R[z#}2l,}s)u`!}s~NAJ8={1C7\X7>.r,Ġ͚k,,)/Z) K=ʻx#t`!ZI&B* bppFIئ18k0P"vMtor,Ġ#_ÅG ssseAxu;nU V C }spN_bз8 6bз w\1A)W no7g>r,؈A9!f+ŵXz})Vc ^Ag sbn}ooOnt[<|>Cern ྲྀ_y/)6Qr0m67xrA+fRmt-UՉ?|9 M2[^_{2ohĿUvO_UR(SphQ?=%Yi+la '5΂'dO)Hbk>l6۪_om 'dO-&MMrVZF VIJH%&Yܚ.R,Z(zm{hBIiiDF&Ѽϼ޻zÚd}(*!~+E X S2wP+O\.9H A`d<= M..TEyh2@hGl.$LD.bS_\g>S @ '?~PƋ,O2\ ?\/Ci'6MECBeߎ wS7(DT_?n:K5 Y/T5\*ۻ%\.ّHbBk`CA \#SP_Z@(vya'!b<|N;:)ڦD_;:)Jŀ$C 3a&!n@>|nR@>|n!b 6:BGq6xY~));љVC-)s#BtR]ڍ%O[Z!O̍j:4Bu`aVecjȃPmsPUZ;匏G!th9r,; ô,cP݌€'c"Smi0Ѝ~KޱZreLY~*I6;kxCYʎV=" ǐZPk38sGĐ}{,_>ߎt}t|f+K}Aٙ*Z}q @Đ}{MMlXmxTmc>:|.;xٹ TBy.|r$ HĀFURkৄpl}Jسg P.dXcYU[omcof6UUc('ϿMPv,!%{o\1+vvK ,ψIny u*w7aꪬ 7'Đkƍw1 bUR;UCZFV} T=aImf!1ȢYoVNBm3.kRq(X%BTh+$,*>5#HAc$A;fLNu4 Ѡ\0z}(7?rmm$xL!T UVOM4L2;N9>̴ }P81".52~˅n=tYYGC$ijU}(|U-/M-Wl1Ld P炨Y`@.N.dcdA5ևaZ>bzG[q9DSlD 5vN-%zTAty%ױm: 1őؖ,OIx9t"qC`wphE؆Qʹ,ͦ dC)18߽HLg-:K %@ǖ@MYne143%/$B?17e'=ɗAen6", hAWAh{PxFO!l 3q\)ej)야ALk QYĀ[ۚ>(Vp%'j=,%WI' T@hK{U]-MGs%ijC\b0,9{>8sܻQ`11A훎-o5FGPs|?ƒVL_?+ rpAqVG3!abJcP]A-YP.3:>eg qE|x zy#`XZcH~9!Rnύ3h(tÝzF 7t&VG,1UaO L842a+k f|t]R@pNg@i:J_`y] Li]K|.!h^wBĐ 3>h](F~vӠ1=i'8 xC6=qmpg+~K$ᡈwce[_l·m^( oy+Z> Oۼ咎 6A# UcnUD.T_G_G=bHf޾N. ! Blq; %͚#N)9}fMjwC`0V⩰*p{3pT`@hRMn$.߃O l;#*-sT0½&LV=gOi1-dYeϙ}>n7N&1@QV$`v1VPV$`jgpjD4!&z >@~P p!$@ @[`.M+ϡ|P5 'fʩ;{|+Ur%'+-W @+&jhVb ~<~=>~c=v?5+@k@|LD2~Q0oʶnyQB1hzI^ʬAb[;2O7<+d|`$~LU9ȕvGBRW[8W 㣼X0I^oETz,"t#6Gc`9>k-:6u ?3+`zJ&>-zXZ kvpV J&+L|ݪaX SĜyD>q!_QV( & o}Xf7-Q&vÊ|a0*8q:R aJ&Ԧ P6E/A:GBY8Vgl/E p&nO "IJ٪-8K$qу#C !ˡ's\(/xU 50$wp!\.g"=:wY+p!\N]CtXs #!UAb^oI' [t"'Ӎ8՝?Oqaf'r>TOnA+XR|b#&C2$1?LI_P!802\S7lCo!HeV)oߚk$G|/oC:5C ab9fׁ3g 1b0000mwtKI%a-*R3fTTEeUX/HvuKQj%sdmۏ}Aa@APAAA€ 0  (    € 0  (    € 0 )^0wM0h}_(t~h8|uS[6Xi!2,czSr>osa a9jվ(l_ēߛRM_Jߌ1XX}h&ctu;onB.a53px1K_4fq6q2=:ݖ^&|}{~R7%·/1œ75Tsk2pM 9W/˃ 1 pIVo\%s% U%]̊^u0zB~VqP}5no'joA>,:57r,#j096c<*J0h(!p>٦Z3/MF R`w]bG܄,gEyE7u&4眓 jS7'i-7LnO+ln}<_Fia^YZ9ݮoBޓ:P]|;TM5{F?D?=yhc?^ 7ljlRmU{zݛp]%,40yўuwNc,^bٽU"}u30/ >7PU؂b}r*eBKu ^&}jXN=n<"@G ǗepGݶH?jDG V?5xl9볔X?9az't9a>J bf%_AG߯ytiY`tXsH~4BQd%g0؋ӷƉ)J;"uGyvfDXn-ւ7>U{o~,\oU6|=Cr7t1݊ts@'Jh;M0;4LXI8Q6*{ᑖ6ySNRȪZ.IY1]sB7{{Qہ~Մz/@~(3K3\1^?vZu?\?2,rʒ0OX[?9~X$y$ ]ӲJNZYDMm[Pךz/̢=?ҩ$iR!^r,53`v[ .j+şW.$ssɀĐKM9YaELu BF5>r 5' ;(,m79-TJWFխ鼺b=d6˯aX9r˲h6CLVlf {ÈqG3Ip&LضؼnVGbU' c\vrn?^gδZYR9m<\_>F.MWl;W=Z7̞KXhI bUP0Ɯn:bPV://W,7!`4 nq2ZVW5vj܋{f*# g`&^g'hX8cirj eebRd/dDՄvc HWcK&!(3Ij3s%c|TR1!#Yخ[O^J'- ˋuT9{RjFOW<4ںu%f1U&~ l]oǭX[1h0Z}l`9OkԒ3R%kGۀfJD9N TGn").get(0); _this.$el.append(_this.canvas); if (typeof G_vmlCanvasManager !== "undefined" && G_vmlCanvasManager !== null) { G_vmlCanvasManager.initElement(_this.canvas); } _this.ctx = _this.canvas.getContext('2d'); if (window.devicePixelRatio > 1.5) { $(_this.canvas).css({ width: _this.options.size, height: _this.options.size }); _this.canvas.width *= 2; _this.canvas.height *= 2; _this.ctx.scale(2, 2); } _this.ctx.translate(_this.options.size / 2, _this.options.size / 2); _this.$el.addClass('easyPieChart'); _this.$el.css({ width: _this.options.size, height: _this.options.size, lineHeight: "" + _this.options.size + "px" }); _this.update(percent); return _this; }; this.update = function(percent) { if (_this.options.animate === false) { return drawLine(percent); } else { return animateLine(_this.percentage, percent); } }; renderScale = function() { var i, _i, _results; _this.ctx.fillStyle = _this.options.scaleColor; _this.ctx.lineWidth = 1; _results = []; for (i = _i = 0; _i <= 24; i = ++_i) { _results.push(addScaleLine(i)); } return _results; }; addScaleLine = function(i) { var offset; offset = i % 6 === 0 ? 0 : _this.options.size * 0.017; _this.ctx.save(); _this.ctx.rotate(i * Math.PI / 12); _this.ctx.fillRect(_this.options.size / 2 - offset, 0, -_this.options.size * 0.05 + offset, 1); return _this.ctx.restore(); }; renderTrack = function() { var offset; offset = _this.options.size / 2 - _this.options.lineWidth / 2; if (_this.options.scaleColor !== false) { offset -= _this.options.size * 0.08; } _this.ctx.beginPath(); _this.ctx.arc(0, 0, offset, 0, Math.PI * 2, true); _this.ctx.closePath(); _this.ctx.strokeStyle = _this.options.trackColor; _this.ctx.lineWidth = _this.options.lineWidth; return _this.ctx.stroke(); }; renderBackground = function() { if (_this.options.scaleColor !== false) { renderScale(); } if (_this.options.trackColor !== false) { return renderTrack(); } }; drawLine = function(percent) { var offset; renderBackground(); _this.ctx.strokeStyle = $.isFunction(_this.options.barColor) ? _this.options.barColor(percent) : _this.options.barColor; _this.ctx.lineCap = _this.options.lineCap; _this.ctx.lineWidth = _this.options.lineWidth; offset = _this.options.size / 2 - _this.options.lineWidth / 2; if (_this.options.scaleColor !== false) { offset -= _this.options.size * 0.08; } _this.ctx.save(); _this.ctx.rotate(-Math.PI / 2); _this.ctx.beginPath(); _this.ctx.arc(0, 0, offset, 0, Math.PI * 2 * percent / 100, false); _this.ctx.stroke(); return _this.ctx.restore(); }; animateLine = function(from, to) { var currentStep, fps, steps; fps = 30; steps = fps * _this.options.animate / 1000; currentStep = 0; _this.options.onStart.call(_this); _this.percentage = to; if (_this.animation) { clearInterval(_this.animation); _this.animation = false; } return _this.animation = setInterval(function() { _this.ctx.clearRect(-_this.options.size / 2, -_this.options.size / 2, _this.options.size, _this.options.size); renderBackground.call(_this); drawLine.call(_this, [easeInOutQuad(currentStep, from, to - from, steps)]); currentStep++; if ((currentStep / steps) > 1) { clearInterval(_this.animation); _this.animation = false; return _this.options.onStop.call(_this); } }, 1000 / fps); }; easeInOutQuad = function(t, b, c, d) { var easeIn, easing; easeIn = function(t) { return Math.pow(t, 2); }; easing = function(t) { if (t < 1) { return easeIn(t); } else { return 2 - easeIn((t / 2) * -2 + 2); } }; t /= d / 2; return c / 2 * easing(t) + b; }; return this.init(); }; $.easyPieChart.defaultOptions = { barColor: '#ef1e25', trackColor: '#f2f2f2', scaleColor: '#dfe0e0', lineCap: 'round', size: 110, lineWidth: 3, animate: false, onStart: $.noop, onStop: $.noop }; $.fn.easyPieChart = function(options) { return $.each(this, function(i, el) { var $el; $el = $(el); if (!$el.data('easyPieChart')) { return $el.data('easyPieChart', new $.easyPieChart(el, options)); } }); }; return void 0; })(jQuery); }).call(this); assets/plugins/jquery-easy-pie-chart/examples/excanvas.js000064400000064645152510440100017652 0ustar00// Copyright 2006 Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Known Issues: // // * Patterns are not implemented. // * Radial gradient are not implemented. The VML version of these look very // different from the canvas one. // * Clipping paths are not implemented. // * Coordsize. The width and height attribute have higher priority than the // width and height style values which isn't correct. // * Painting mode isn't implemented. // * Canvas width/height should is using content-box by default. IE in // Quirks mode will draw the canvas using border-box. Either change your // doctype to HTML5 // (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype) // or use Box Sizing Behavior from WebFX // (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html) // * Non uniform scaling does not correctly scale strokes. // * Optimize. There is always room for speed improvements. // Only add this code if we do not already have a canvas implementation if (!document.createElement('canvas').getContext) { (function() { // alias some functions to make (compiled) code shorter var m = Math; var mr = m.round; var ms = m.sin; var mc = m.cos; var abs = m.abs; var sqrt = m.sqrt; // this is used for sub pixel precision var Z = 10; var Z2 = Z / 2; /** * This funtion is assigned to the elements as element.getContext(). * @this {HTMLElement} * @return {CanvasRenderingContext2D_} */ function getContext() { return this.context_ || (this.context_ = new CanvasRenderingContext2D_(this)); } var slice = Array.prototype.slice; /** * Binds a function to an object. The returned function will always use the * passed in {@code obj} as {@code this}. * * Example: * * g = bind(f, obj, a, b) * g(c, d) // will do f.call(obj, a, b, c, d) * * @param {Function} f The function to bind the object to * @param {Object} obj The object that should act as this when the function * is called * @param {*} var_args Rest arguments that will be used as the initial * arguments when the function is called * @return {Function} A new function that has bound this */ function bind(f, obj, var_args) { var a = slice.call(arguments, 2); return function() { return f.apply(obj, a.concat(slice.call(arguments))); }; } var G_vmlCanvasManager_ = { init: function(opt_doc) { if (/MSIE/.test(navigator.userAgent) && !window.opera) { var doc = opt_doc || document; // Create a dummy element so that IE will allow canvas elements to be // recognized. doc.createElement('canvas'); doc.attachEvent('onreadystatechange', bind(this.init_, this, doc)); } }, init_: function(doc) { // create xmlns if (!doc.namespaces['g_vml_']) { doc.namespaces.add('g_vml_', 'urn:schemas-microsoft-com:vml', '#default#VML'); } if (!doc.namespaces['g_o_']) { doc.namespaces.add('g_o_', 'urn:schemas-microsoft-com:office:office', '#default#VML'); } // Setup default CSS. Only add one style sheet per document if (!doc.styleSheets['ex_canvas_']) { var ss = doc.createStyleSheet(); ss.owningElement.id = 'ex_canvas_'; ss.cssText = 'canvas{display:inline-block;overflow:hidden;' + // default size is 300x150 in Gecko and Opera 'text-align:left;width:300px;height:150px}' + 'g_vml_\\:*{behavior:url(#default#VML)}' + 'g_o_\\:*{behavior:url(#default#VML)}'; } // find all canvas elements var els = doc.getElementsByTagName('canvas'); for (var i = 0; i < els.length; i++) { this.initElement(els[i]); } }, /** * Public initializes a canvas element so that it can be used as canvas * element from now on. This is called automatically before the page is * loaded but if you are creating elements using createElement you need to * make sure this is called on the element. * @param {HTMLElement} el The canvas element to initialize. * @return {HTMLElement} the element that was created. */ initElement: function(el) { if (!el.getContext) { el.getContext = getContext; // Remove fallback content. There is no way to hide text nodes so we // just remove all childNodes. We could hide all elements and remove // text nodes but who really cares about the fallback content. el.innerHTML = ''; // do not use inline function because that will leak memory el.attachEvent('onpropertychange', onPropertyChange); el.attachEvent('onresize', onResize); var attrs = el.attributes; if (attrs.width && attrs.width.specified) { // TODO: use runtimeStyle and coordsize // el.getContext().setWidth_(attrs.width.nodeValue); el.style.width = attrs.width.nodeValue + 'px'; } else { el.width = el.clientWidth; } if (attrs.height && attrs.height.specified) { // TODO: use runtimeStyle and coordsize // el.getContext().setHeight_(attrs.height.nodeValue); el.style.height = attrs.height.nodeValue + 'px'; } else { el.height = el.clientHeight; } //el.getContext().setCoordsize_() } return el; } }; function onPropertyChange(e) { var el = e.srcElement; switch (e.propertyName) { case 'width': el.style.width = el.attributes.width.nodeValue + 'px'; el.getContext().clearRect(); break; case 'height': el.style.height = el.attributes.height.nodeValue + 'px'; el.getContext().clearRect(); break; } } function onResize(e) { var el = e.srcElement; if (el.firstChild) { el.firstChild.style.width = el.clientWidth + 'px'; el.firstChild.style.height = el.clientHeight + 'px'; } } G_vmlCanvasManager_.init(); // precompute "00" to "FF" var dec2hex = []; for (var i = 0; i < 16; i++) { for (var j = 0; j < 16; j++) { dec2hex[i * 16 + j] = i.toString(16) + j.toString(16); } } function createMatrixIdentity() { return [ [1, 0, 0], [0, 1, 0], [0, 0, 1] ]; } function matrixMultiply(m1, m2) { var result = createMatrixIdentity(); for (var x = 0; x < 3; x++) { for (var y = 0; y < 3; y++) { var sum = 0; for (var z = 0; z < 3; z++) { sum += m1[x][z] * m2[z][y]; } result[x][y] = sum; } } return result; } function copyState(o1, o2) { o2.fillStyle = o1.fillStyle; o2.lineCap = o1.lineCap; o2.lineJoin = o1.lineJoin; o2.lineWidth = o1.lineWidth; o2.miterLimit = o1.miterLimit; o2.shadowBlur = o1.shadowBlur; o2.shadowColor = o1.shadowColor; o2.shadowOffsetX = o1.shadowOffsetX; o2.shadowOffsetY = o1.shadowOffsetY; o2.strokeStyle = o1.strokeStyle; o2.globalAlpha = o1.globalAlpha; o2.arcScaleX_ = o1.arcScaleX_; o2.arcScaleY_ = o1.arcScaleY_; o2.lineScale_ = o1.lineScale_; } function processStyle(styleString) { var str, alpha = 1; styleString = String(styleString); if (styleString.substring(0, 3) == 'rgb') { var start = styleString.indexOf('(', 3); var end = styleString.indexOf(')', start + 1); var guts = styleString.substring(start + 1, end).split(','); str = '#'; for (var i = 0; i < 3; i++) { str += dec2hex[Number(guts[i])]; } if (guts.length == 4 && styleString.substr(3, 1) == 'a') { alpha = guts[3]; } } else { str = styleString; } return {color: str, alpha: alpha}; } function processLineCap(lineCap) { switch (lineCap) { case 'butt': return 'flat'; case 'round': return 'round'; case 'square': default: return 'square'; } } /** * This class implements CanvasRenderingContext2D interface as described by * the WHATWG. * @param {HTMLElement} surfaceElement The element that the 2D context should * be associated with */ function CanvasRenderingContext2D_(surfaceElement) { this.m_ = createMatrixIdentity(); this.mStack_ = []; this.aStack_ = []; this.currentPath_ = []; // Canvas context properties this.strokeStyle = '#000'; this.fillStyle = '#000'; this.lineWidth = 1; this.lineJoin = 'miter'; this.lineCap = 'butt'; this.miterLimit = Z * 1; this.globalAlpha = 1; this.canvas = surfaceElement; var el = surfaceElement.ownerDocument.createElement('div'); el.style.width = surfaceElement.clientWidth + 'px'; el.style.height = surfaceElement.clientHeight + 'px'; el.style.overflow = 'hidden'; el.style.position = 'absolute'; surfaceElement.appendChild(el); this.element_ = el; this.arcScaleX_ = 1; this.arcScaleY_ = 1; this.lineScale_ = 1; } var contextPrototype = CanvasRenderingContext2D_.prototype; contextPrototype.clearRect = function() { this.element_.innerHTML = ''; }; contextPrototype.beginPath = function() { // TODO: Branch current matrix so that save/restore has no effect // as per safari docs. this.currentPath_ = []; }; contextPrototype.moveTo = function(aX, aY) { var p = this.getCoords_(aX, aY); this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y}); this.currentX_ = p.x; this.currentY_ = p.y; }; contextPrototype.lineTo = function(aX, aY) { var p = this.getCoords_(aX, aY); this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y}); this.currentX_ = p.x; this.currentY_ = p.y; }; contextPrototype.bezierCurveTo = function(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY) { var p = this.getCoords_(aX, aY); var cp1 = this.getCoords_(aCP1x, aCP1y); var cp2 = this.getCoords_(aCP2x, aCP2y); bezierCurveTo(this, cp1, cp2, p); }; // Helper function that takes the already fixed cordinates. function bezierCurveTo(self, cp1, cp2, p) { self.currentPath_.push({ type: 'bezierCurveTo', cp1x: cp1.x, cp1y: cp1.y, cp2x: cp2.x, cp2y: cp2.y, x: p.x, y: p.y }); self.currentX_ = p.x; self.currentY_ = p.y; } contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) { // the following is lifted almost directly from // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes var cp = this.getCoords_(aCPx, aCPy); var p = this.getCoords_(aX, aY); var cp1 = { x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_), y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_) }; var cp2 = { x: cp1.x + (p.x - this.currentX_) / 3.0, y: cp1.y + (p.y - this.currentY_) / 3.0 }; bezierCurveTo(this, cp1, cp2, p); }; contextPrototype.arc = function(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) { aRadius *= Z; var arcType = aClockwise ? 'at' : 'wa'; var xStart = aX + mc(aStartAngle) * aRadius - Z2; var yStart = aY + ms(aStartAngle) * aRadius - Z2; var xEnd = aX + mc(aEndAngle) * aRadius - Z2; var yEnd = aY + ms(aEndAngle) * aRadius - Z2; // IE won't render arches drawn counter clockwise if xStart == xEnd. if (xStart == xEnd && !aClockwise) { xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something // that can be represented in binary } var p = this.getCoords_(aX, aY); var pStart = this.getCoords_(xStart, yStart); var pEnd = this.getCoords_(xEnd, yEnd); this.currentPath_.push({type: arcType, x: p.x, y: p.y, radius: aRadius, xStart: pStart.x, yStart: pStart.y, xEnd: pEnd.x, yEnd: pEnd.y}); }; contextPrototype.rect = function(aX, aY, aWidth, aHeight) { this.moveTo(aX, aY); this.lineTo(aX + aWidth, aY); this.lineTo(aX + aWidth, aY + aHeight); this.lineTo(aX, aY + aHeight); this.closePath(); }; contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) { var oldPath = this.currentPath_; this.beginPath(); this.moveTo(aX, aY); this.lineTo(aX + aWidth, aY); this.lineTo(aX + aWidth, aY + aHeight); this.lineTo(aX, aY + aHeight); this.closePath(); this.stroke(); this.currentPath_ = oldPath; }; contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) { var oldPath = this.currentPath_; this.beginPath(); this.moveTo(aX, aY); this.lineTo(aX + aWidth, aY); this.lineTo(aX + aWidth, aY + aHeight); this.lineTo(aX, aY + aHeight); this.closePath(); this.fill(); this.currentPath_ = oldPath; }; contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) { var gradient = new CanvasGradient_('gradient'); gradient.x0_ = aX0; gradient.y0_ = aY0; gradient.x1_ = aX1; gradient.y1_ = aY1; return gradient; }; contextPrototype.createRadialGradient = function(aX0, aY0, aR0, aX1, aY1, aR1) { var gradient = new CanvasGradient_('gradientradial'); gradient.x0_ = aX0; gradient.y0_ = aY0; gradient.r0_ = aR0; gradient.x1_ = aX1; gradient.y1_ = aY1; gradient.r1_ = aR1; return gradient; }; contextPrototype.drawImage = function(image, var_args) { var dx, dy, dw, dh, sx, sy, sw, sh; // to find the original width we overide the width and height var oldRuntimeWidth = image.runtimeStyle.width; var oldRuntimeHeight = image.runtimeStyle.height; image.runtimeStyle.width = 'auto'; image.runtimeStyle.height = 'auto'; // get the original size var w = image.width; var h = image.height; // and remove overides image.runtimeStyle.width = oldRuntimeWidth; image.runtimeStyle.height = oldRuntimeHeight; if (arguments.length == 3) { dx = arguments[1]; dy = arguments[2]; sx = sy = 0; sw = dw = w; sh = dh = h; } else if (arguments.length == 5) { dx = arguments[1]; dy = arguments[2]; dw = arguments[3]; dh = arguments[4]; sx = sy = 0; sw = w; sh = h; } else if (arguments.length == 9) { sx = arguments[1]; sy = arguments[2]; sw = arguments[3]; sh = arguments[4]; dx = arguments[5]; dy = arguments[6]; dw = arguments[7]; dh = arguments[8]; } else { throw Error('Invalid number of arguments'); } var d = this.getCoords_(dx, dy); var w2 = sw / 2; var h2 = sh / 2; var vmlStr = []; var W = 10; var H = 10; // For some reason that I've now forgotten, using divs didn't work vmlStr.push(' ' , '', ''); this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join('')); }; contextPrototype.stroke = function(aFill) { var lineStr = []; var lineOpen = false; var a = processStyle(aFill ? this.fillStyle : this.strokeStyle); var color = a.color; var opacity = a.alpha * this.globalAlpha; var W = 10; var H = 10; lineStr.push(''); if (!aFill) { var lineWidth = this.lineScale_ * this.lineWidth; // VML cannot correctly render a line if the width is less than 1px. // In that case, we dilute the color to make the line look thinner. if (lineWidth < 1) { opacity *= lineWidth; } lineStr.push( '' ); } else if (typeof this.fillStyle == 'object') { var fillStyle = this.fillStyle; var angle = 0; var focus = {x: 0, y: 0}; // additional offset var shift = 0; // scale factor for offset var expansion = 1; if (fillStyle.type_ == 'gradient') { var x0 = fillStyle.x0_ / this.arcScaleX_; var y0 = fillStyle.y0_ / this.arcScaleY_; var x1 = fillStyle.x1_ / this.arcScaleX_; var y1 = fillStyle.y1_ / this.arcScaleY_; var p0 = this.getCoords_(x0, y0); var p1 = this.getCoords_(x1, y1); var dx = p1.x - p0.x; var dy = p1.y - p0.y; angle = Math.atan2(dx, dy) * 180 / Math.PI; // The angle should be a non-negative number. if (angle < 0) { angle += 360; } // Very small angles produce an unexpected result because they are // converted to a scientific notation string. if (angle < 1e-6) { angle = 0; } } else { var p0 = this.getCoords_(fillStyle.x0_, fillStyle.y0_); var width = max.x - min.x; var height = max.y - min.y; focus = { x: (p0.x - min.x) / width, y: (p0.y - min.y) / height }; width /= this.arcScaleX_ * Z; height /= this.arcScaleY_ * Z; var dimension = m.max(width, height); shift = 2 * fillStyle.r0_ / dimension; expansion = 2 * fillStyle.r1_ / dimension - shift; } // We need to sort the color stops in ascending order by offset, // otherwise IE won't interpret it correctly. var stops = fillStyle.colors_; stops.sort(function(cs1, cs2) { return cs1.offset - cs2.offset; }); var length = stops.length; var color1 = stops[0].color; var color2 = stops[length - 1].color; var opacity1 = stops[0].alpha * this.globalAlpha; var opacity2 = stops[length - 1].alpha * this.globalAlpha; var colors = []; for (var i = 0; i < length; i++) { var stop = stops[i]; colors.push(stop.offset * expansion + shift + ' ' + stop.color); } // When colors attribute is used, the meanings of opacity and o:opacity2 // are reversed. lineStr.push(''); } else { lineStr.push(''); } lineStr.push(''); this.element_.insertAdjacentHTML('beforeEnd', lineStr.join('')); }; contextPrototype.fill = function() { this.stroke(true); } contextPrototype.closePath = function() { this.currentPath_.push({type: 'close'}); }; /** * @private */ contextPrototype.getCoords_ = function(aX, aY) { var m = this.m_; return { x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2, y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2 } }; contextPrototype.save = function() { var o = {}; copyState(this, o); this.aStack_.push(o); this.mStack_.push(this.m_); this.m_ = matrixMultiply(createMatrixIdentity(), this.m_); }; contextPrototype.restore = function() { copyState(this.aStack_.pop(), this); this.m_ = this.mStack_.pop(); }; function matrixIsFinite(m) { for (var j = 0; j < 3; j++) { for (var k = 0; k < 2; k++) { if (!isFinite(m[j][k]) || isNaN(m[j][k])) { return false; } } } return true; } function setM(ctx, m, updateLineScale) { if (!matrixIsFinite(m)) { return; } ctx.m_ = m; if (updateLineScale) { // Get the line scale. // Determinant of this.m_ means how much the area is enlarged by the // transformation. So its square root can be used as a scale factor // for width. var det = m[0][0] * m[1][1] - m[0][1] * m[1][0]; ctx.lineScale_ = sqrt(abs(det)); } } contextPrototype.translate = function(aX, aY) { var m1 = [ [1, 0, 0], [0, 1, 0], [aX, aY, 1] ]; setM(this, matrixMultiply(m1, this.m_), false); }; contextPrototype.rotate = function(aRot) { var c = mc(aRot); var s = ms(aRot); var m1 = [ [c, s, 0], [-s, c, 0], [0, 0, 1] ]; setM(this, matrixMultiply(m1, this.m_), false); }; contextPrototype.scale = function(aX, aY) { this.arcScaleX_ *= aX; this.arcScaleY_ *= aY; var m1 = [ [aX, 0, 0], [0, aY, 0], [0, 0, 1] ]; setM(this, matrixMultiply(m1, this.m_), true); }; contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) { var m1 = [ [m11, m12, 0], [m21, m22, 0], [dx, dy, 1] ]; setM(this, matrixMultiply(m1, this.m_), true); }; contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) { var m = [ [m11, m12, 0], [m21, m22, 0], [dx, dy, 1] ]; setM(this, m, true); }; /******** STUBS ********/ contextPrototype.clip = function() { // TODO: Implement }; contextPrototype.arcTo = function() { // TODO: Implement }; contextPrototype.createPattern = function() { return new CanvasPattern_; }; // Gradient / Pattern Stubs function CanvasGradient_(aType) { this.type_ = aType; this.x0_ = 0; this.y0_ = 0; this.r0_ = 0; this.x1_ = 0; this.y1_ = 0; this.r1_ = 0; this.colors_ = []; } CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) { aColor = processStyle(aColor); this.colors_.push({offset: aOffset, color: aColor.color, alpha: aColor.alpha}); }; function CanvasPattern_() {} // set up externs G_vmlCanvasManager = G_vmlCanvasManager_; CanvasRenderingContext2D = CanvasRenderingContext2D_; CanvasGradient = CanvasGradient_; CanvasPattern = CanvasPattern_; })(); } // if assets/plugins/jquery-easy-pie-chart/examples/style.css000064400000010015152510440100017334 0ustar00body { font: 13px/1.4 'Helvetica Neue', 'Helvetica','Arial', sans-serif; color: #333; } .container { width: 520px; margin: auto; } h1 { border-bottom: 1px solid #d9d9d9; } a { color: #be2221; text-decoration: none; } .chart { float: left; margin: 10px; } .percentage, .label { text-align: center; color: #333; font-weight: 100; font-size: 1.2em; margin-bottom: 0.3em; } .credits { padding-top: 0.5em; clear: both; color: #999; } .credits a { color: #333; } .dark { background: #333; } .dark .percentage-light, .dark .label { text-align: center; color: #999; font-weight: 100; font-size: 1.2em; margin-bottom: 0.3em; } .button { -webkit-box-shadow: inset 0 0 1px #000, inset 0 1px 0 1px rgba(255,255,255,0.2), 0 1px 1px -1px rgba(0, 0, 0, .5); -moz-box-shadow: inset 0 0 1px #000, inset 0 1px 0 1px rgba(255,255,255,0.2), 0 1px 1px -1px rgba(0, 0, 0, .5); box-shadow: inset 0 0 1px #000, inset 0 1px 0 1px rgba(255,255,255,0.2), 0 1px 1px -1px rgba(0, 0, 0, .5); -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; padding: 6px 20px; font-weight: bold; text-transform: uppercase; display: block; margin: auto; max-width: 200px; text-align: center; background-color: #5c5c5c; background-image: -moz-linear-gradient(top, #666666, #4d4d4d); background-image: -ms-linear-gradient(top, #666666, #4d4d4d); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#666666), to(#4d4d4d)); background-image: -webkit-linear-gradient(top, #666666, #4d4d4d); background-image: -o-linear-gradient(top, #666666, #4d4d4d); background-image: linear-gradient(top, #666666, #4d4d4d); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#666666', endColorstr='#4d4d4d', GradientType=0); color: #ffffff; text-shadow: 0 1px 1px #333333; } .button:hover { color: #ffffff; text-decoration: none; background-color: #616161; background-image: -moz-linear-gradient(top, #6b6b6b, #525252); background-image: -ms-linear-gradient(top, #6b6b6b, #525252); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#6b6b6b), to(#525252)); background-image: -webkit-linear-gradient(top, #6b6b6b, #525252); background-image: -o-linear-gradient(top, #6b6b6b, #525252); background-image: linear-gradient(top, #6b6b6b, #525252); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#6b6b6b', endColorstr='#525252', GradientType=0); } .button:active { background-color: #575757; background-image: -moz-linear-gradient(top, #616161, #474747); background-image: -ms-linear-gradient(top, #616161, #474747); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#616161), to(#474747)); background-image: -webkit-linear-gradient(top, #616161, #474747); background-image: -o-linear-gradient(top, #616161, #474747); background-image: linear-gradient(top, #616161, #474747); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#616161', endColorstr='#474747', GradientType=0); -webkit-transform: translate(0, 1px); -moz-transform: translate(0, 1px); -ms-transform: translate(0, 1px); -o-transform: translate(0, 1px); transform: translate(0, 1px); } .button:disabled { background-color: #dddddd; background-image: -moz-linear-gradient(top, #e7e7e7, #cdcdcd); background-image: -ms-linear-gradient(top, #e7e7e7, #cdcdcd); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#e7e7e7), to(#cdcdcd)); background-image: -webkit-linear-gradient(top, #e7e7e7, #cdcdcd); background-image: -o-linear-gradient(top, #e7e7e7, #cdcdcd); background-image: linear-gradient(top, #e7e7e7, #cdcdcd); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e7e7e7', endColorstr='#cdcdcd', GradientType=0); color: #939393; text-shadow: 0 1px 1px #fff; } @media screen and (max-device-width: 480px) { .container{ width: 100%; } } assets/plugins/jquery-easy-pie-chart/examples/index.html000064400000007630152510440100017470 0ustar00 Easy Pie Chart

      EASY PIE CHART

      55%
      New visits
      46%
      Bounce rate
      92%
      Server load
      752MB
      Used RAM
      55%
      New visits
      46%
      Bounce rate
      92%
      Server load
      752MB
      Used RAM

      Update pie charts

      Inspired by: Simple Pie Charts II by Rafal Bromirski on dribble

      assets/plugins/jquery-cookie/cookie.jquery.json000064400000001502152510440100015765 0ustar00{ "name": "cookie", "version": "1.4.0", "title": "jQuery Cookie", "description": "A simple, lightweight jQuery plugin for reading, writing and deleting cookies.", "author": { "name": "Klaus Hartl", "url": "https://github.com/carhartl" }, "maintainers": [ { "name": "Klaus Hartl", "url": "https://github.com/carhartl" }, { "name": "Fagner Martins", "url": "https://github.com/FagnerMartinsBrack" } ], "licenses": [ { "type": "MIT", "url": "https://raw.github.com/carhartl/jquery-cookie/master/MIT-LICENSE.txt" } ], "dependencies": { "jquery": ">=1.2" }, "bugs": "https://github.com/carhartl/jquery-cookie/issues", "homepage": "https://github.com/carhartl/jquery-cookie", "docs": "https://github.com/carhartl/jquery-cookie#readme" } assets/plugins/jquery-cookie/package.json000064400000001475152510440100014602 0ustar00{ "name": "jquery.cookie", "version": "1.4.0", "description": "A simple, lightweight jQuery plugin for reading, writing and deleting cookies.", "main": "Gruntfile.js", "directories": { "test": "test" }, "scripts": { "test": "grunt" }, "repository": { "type": "git", "url": "git://github.com/carhartl/jquery-cookie.git" }, "author": "Klaus Hartl", "license": "MIT", "gitHead": "bd3c9713222bace68d25fe2128c0f8633cad1269", "readmeFilename": "README.md", "devDependencies": { "grunt": "~0.4.1", "grunt-contrib-jshint": "~0.4.0", "grunt-contrib-uglify": "~0.2.0", "grunt-contrib-qunit": "~0.2.0", "grunt-contrib-watch": "~0.3.0", "grunt-compare-size": "~0.4.0", "grunt-saucelabs": "~4.1.1", "grunt-contrib-connect": "~0.5.0", "gzip-js": "~0.3.0" } } assets/plugins/jquery-cookie/jquery.cookie.js000064400000005771152510440100015444 0ustar00/*! * jQuery Cookie Plugin v1.4.0 * https://github.com/carhartl/jquery-cookie * * Copyright 2013 Klaus Hartl * Released under the MIT license */ (function (factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as anonymous module. define(['jquery'], factory); } else { // Browser globals. factory(jQuery); } }(function ($) { var pluses = /\+/g; function encode(s) { return config.raw ? s : encodeURIComponent(s); } function decode(s) { return config.raw ? s : decodeURIComponent(s); } function stringifyCookieValue(value) { return encode(config.json ? JSON.stringify(value) : String(value)); } function parseCookieValue(s) { if (s.indexOf('"') === 0) { // This is a quoted cookie as according to RFC2068, unescape... s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); } try { // Replace server-side written pluses with spaces. // If we can't decode the cookie, ignore it, it's unusable. // If we can't parse the cookie, ignore it, it's unusable. s = decodeURIComponent(s.replace(pluses, ' ')); return config.json ? JSON.parse(s) : s; } catch(e) {} } function read(s, converter) { var value = config.raw ? s : parseCookieValue(s); return $.isFunction(converter) ? converter(value) : value; } var config = $.cookie = function (key, value, options) { // Write if (value !== undefined && !$.isFunction(value)) { options = $.extend({}, config.defaults, options); if (typeof options.expires === 'number') { var days = options.expires, t = options.expires = new Date(); t.setDate(t.getDate() + days); } return (document.cookie = [ encode(key), '=', stringifyCookieValue(value), options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : '' ].join('')); } // Read var result = key ? undefined : {}; // To prevent the for loop in the first place assign an empty array // in case there are no cookies at all. Also prevents odd result when // calling $.cookie(). var cookies = document.cookie ? document.cookie.split('; ') : []; for (var i = 0, l = cookies.length; i < l; i++) { var parts = cookies[i].split('='); var name = decode(parts.shift()); var cookie = parts.join('='); if (key && key === name) { // If second argument (value) is a function it's a converter... result = read(cookie, value); break; } // Prevent storing a cookie that we couldn't decode. if (!key && (cookie = read(cookie)) !== undefined) { result[name] = cookie; } } return result; }; config.defaults = {}; $.removeCookie = function (key, options) { if ($.cookie(key) === undefined) { return false; } // Must not alter options, thus extending a fresh object... $.cookie(key, '', $.extend({}, options, { expires: -1 })); return !$.cookie(key); }; })); assets/plugins/jquery-cookie/README.md000064400000010512152510440100013563 0ustar00# jquery.cookie [![Build Status](https://travis-ci.org/carhartl/jquery-cookie.png?branch=master)](https://travis-ci.org/carhartl/jquery-cookie) [![Selenium Test Status](https://saucelabs.com/browser-matrix/carhartl.svg)](https://saucelabs.com/u/carhartl) A simple, lightweight jQuery plugin for reading, writing and deleting cookies. ## Installation Include script *after* the jQuery library (unless you are packaging scripts somehow else): ```html ``` **Do not include the script directly from GitHub (http://raw.github.com/...).** The file is being served as text/plain and as such being blocked in Internet Explorer on Windows 7 for instance (because of the wrong MIME type). Bottom line: GitHub is not a CDN. The plugin can also be loaded as AMD module. ## Usage Create session cookie: ```javascript $.cookie('the_cookie', 'the_value'); ``` Create expiring cookie, 7 days from then: ```javascript $.cookie('the_cookie', 'the_value', { expires: 7 }); ``` Create expiring cookie, valid across entire site: ```javascript $.cookie('the_cookie', 'the_value', { expires: 7, path: '/' }); ``` Read cookie: ```javascript $.cookie('the_cookie'); // => "the_value" $.cookie('not_existing'); // => undefined ``` Read all available cookies: ```javascript $.cookie(); // => { "the_cookie": "the_value", "...remaining": "cookies" } ``` Delete cookie: ```javascript // Returns true when cookie was found, false when no cookie was found... $.removeCookie('the_cookie'); // Same path as when the cookie was written... $.removeCookie('the_cookie', { path: '/' }); ``` *Note: when deleting a cookie, you must pass the exact same path, domain and secure options that were used to set the cookie, unless you're relying on the default options that is.* ## Configuration ### raw By default the cookie value is encoded/decoded when writing/reading, using `encodeURIComponent`/`decodeURIComponent`. Bypass this by setting raw to true: ```javascript $.cookie.raw = true; ``` ### json Turn on automatic storage of JSON objects passed as the cookie value. Assumes `JSON.stringify` and `JSON.parse`: ```javascript $.cookie.json = true; ``` ## Cookie Options Cookie attributes can be set globally by setting properties of the `$.cookie.defaults` object or individually for each call to `$.cookie()` by passing a plain object to the options argument. Per-call options override the default options. ### expires expires: 365 Define lifetime of the cookie. Value can be a `Number` which will be interpreted as days from time of creation or a `Date` object. If omitted, the cookie becomes a session cookie. ### path path: '/' Define the path where the cookie is valid. *By default the path of the cookie is the path of the page where the cookie was created (standard browser behavior).* If you want to make it available for instance across the entire domain use `path: '/'`. Default: path of page where the cookie was created. **Note regarding Internet Explorer:** > Due to an obscure bug in the underlying WinINET InternetGetCookie implementation, IE’s document.cookie will not return a cookie if it was set with a path attribute containing a filename. (From [Internet Explorer Cookie Internals (FAQ)](http://blogs.msdn.com/b/ieinternals/archive/2009/08/20/wininet-ie-cookie-internals-faq.aspx)) This means one cannot set a path using `path: window.location.pathname` in case such pathname contains a filename like so: `/check.html` (or at least, such cookie cannot be read correctly). ### domain domain: 'example.com' Define the domain where the cookie is valid. Default: domain of page where the cookie was created. ### secure secure: true If true, the cookie transmission requires a secure protocol (https). Default: `false`. ## Converters Provide a conversion function as optional last argument for reading, in order to change the cookie's value to a different representation on the fly. Example for parsing a value into a number: ```javascript $.cookie('foo', '42'); $.cookie('foo', Number); // => 42 ``` Dealing with cookies that have been encoded using `escape` (3rd party cookies): ```javascript $.cookie.raw = true; $.cookie('foo', unescape); ``` You can pass an arbitrary conversion function. ## Contributing Check out the [Contributing Guidelines](CONTRIBUTING.md) ## Authors [Klaus Hartl](https://github.com/carhartl) assets/plugins/jquery-cookie/.jshintrc000064400000000332152510440100014130 0ustar00{ "boss": true, "browser": true, "curly": true, "eqeqeq": true, "eqnull": true, "expr": true, "evil": true, "newcap": true, "noarg": true, "undef": true, "globals": { "define": true, "jQuery": true } } assets/plugins/jquery-cookie/bower.json000064400000000360152510440100014315 0ustar00{ "name": "jquery.cookie", "version": "1.4.0", "main": [ "./jquery.cookie.js" ], "dependencies": { "jquery": ">=1.2" }, "ignore": [ "test", ".*", "*.json", "*.md", "*.txt", "Gruntfile.js" ] } assets/plugins/jquery-cookie/.tm_properties000064400000000245152510440100015203 0ustar00softTabs = false tabSize = 2 [ text.plain ] softWrap = true wrapColumn = "Use Window Frame" softTabs = true tabSize = 4 [ "*.md" ] fileType = "text.plain" assets/plugins/jquery-cookie/.travis.yml000064400000000747152510440100014426 0ustar00language: node_js node_js: - 0.8 before_script: - npm install -g grunt-cli script: grunt ci --verbose env: global: - secure: FjCPTpIs6l6zTvXqH9rPTXqeRCpNa0cmz2Glio8fmOhbdeNbAdQTZGPChe8wTqIQ4wRQUtg4BPZjYx4+ibhj530/QW+736d9UUX5MhixCbm9r6EzRuljlo0wGRsLRa3pHIKyxq18bdilBSYaPrbekpLSyCKM/3wJa34k8LNKdrg= - secure: dJU6/DdQkuhVNSuaR1OswON7cHjRR7mDv0szIZ1rY/TRNoL6GrDr7XGpeQAtV+6Pqu1RJWb1V0VHoPble6imYqWtiq9LZu8UtU/ImKkZWZxFgMyDDJEli4Lw/+p1UMBNf7jXM3v8t9aOA0eHTwX7IA++paNIdehBOyNI8x3t6Ng= assets/plugins/jquery-cookie/MIT-LICENSE.txt000064400000002032152510440100014554 0ustar00Copyright 2013 Klaus Hartl Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.assets/plugins/jquery-cookie/Gruntfile.js000064400000004341152510440100014604 0ustar00/*jshint node: true */ 'use strict'; module.exports = function (grunt) { grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), qunit: { all: ['test/index.html'] }, jshint: { files: [ 'Gruntfile.js', 'jquery.cookie.js' ], options: { jshintrc: '.jshintrc' } }, uglify: { options: { banner: '/*! <%= pkg.name %> v<%= pkg.version %> | <%= pkg.license %> */\n' }, build: { files: { 'build/jquery.cookie-<%= pkg.version %>.min.js': 'jquery.cookie.js' } } }, watch: { files: [ 'jquery.cookie.js', 'test/tests.js' ], tasks: 'default' }, compare_size: { files: [ 'build/jquery.cookie-<%= pkg.version %>.min.js', 'jquery.cookie.js' ], options: { compress: { gz: function (fileContents) { return require('gzip-js').zip(fileContents, {}).length; } } } }, connect: { server: { options: { base: '.', directory: 'test', port: 9999 } } }, 'saucelabs-qunit': { all: { options: { urls: ['http://127.0.0.1:9999/test/index.html'], tunnelTimeout: 5, build: process.env.TRAVIS_JOB_ID, concurrency: 3, browsers: [ { browserName: 'safari', platform: 'OS X 10.8' }, { browserName: 'firefox', platform: 'Windows 7' }, { browserName: 'firefox', platform: 'Windows XP' }, { browserName: 'firefox', platform: 'Linux' }, { browserName: 'chrome', platform: 'Windows 7' }, { browserName: 'internet explorer', platform: 'Windows 8', version: '10' }, { browserName: 'internet explorer', platform: 'Windows 7', version: '9' } ], testname: 'jquery.cookie qunit tests' } } } }); // Loading dependencies for (var key in grunt.file.readJSON('package.json').devDependencies) { if (key !== 'grunt' && key.indexOf('grunt') === 0) { grunt.loadNpmTasks(key); } } grunt.registerTask('default', ['jshint', 'qunit', 'uglify', 'compare_size']); grunt.registerTask('saucelabs', ['connect', 'saucelabs-qunit']); grunt.registerTask('ci', ['jshint', 'qunit', 'saucelabs']); }; assets/plugins/jquery-cookie/test/tests.js000064400000020137152510440100014767 0ustar00var lifecycle = { teardown: function () { $.cookie.defaults = {}; delete $.cookie.raw; delete $.cookie.json; $.each($.cookie(), $.removeCookie); } }; module('read', lifecycle); test('simple value', function () { expect(1); document.cookie = 'c=v'; strictEqual($.cookie('c'), 'v', 'should return value'); }); test('empty value', function () { expect(1); // IE saves cookies with empty string as "c; ", e.g. without "=" as opposed to EOMB, which // resulted in a bug while reading such a cookie. $.cookie('c', ''); strictEqual($.cookie('c'), '', 'should return value'); }); test('not existing', function () { expect(1); strictEqual($.cookie('whatever'), undefined, 'return undefined'); }); test('RFC 2068 quoted string', function () { expect(1); document.cookie = 'c="v@address.com\\"\\\\\\""'; strictEqual($.cookie('c'), 'v@address.com"\\"', 'should decode RFC 2068 quoted string'); }); test('decode', function () { expect(1); document.cookie = encodeURIComponent(' c') + '=' + encodeURIComponent(' v'); strictEqual($.cookie(' c'), ' v', 'should decode key and value'); }); test('decode pluses to space for server side written cookie', function () { expect(1); document.cookie = 'c=foo+bar'; strictEqual($.cookie('c'), 'foo bar', 'should convert pluses back to space'); }); test('raw = true', function () { expect(2); $.cookie.raw = true; document.cookie = 'c=%20v'; strictEqual($.cookie('c'), '%20v', 'should not decode value'); // see https://github.com/carhartl/jquery-cookie/issues/50 $.cookie('c', 'foo=bar'); strictEqual($.cookie('c'), 'foo=bar', 'should include the entire value'); }); test('json = true', function () { expect(1); if ('JSON' in window) { $.cookie.json = true; $.cookie('c', { foo: 'bar' }); deepEqual($.cookie('c'), { foo: 'bar' }, 'should parse JSON'); } else { ok(true); } }); test('not existing with json = true', function () { expect(1); if ('JSON' in window) { $.cookie.json = true; strictEqual($.cookie('whatever'), undefined, "won't throw exception"); } else { ok(true); } }); test('string with json = true', function () { expect(1); if ('JSON' in window) { $.cookie.json = true; $.cookie('c', 'v'); strictEqual($.cookie('c'), 'v', 'should return value'); } else { ok(true); } }); test('invalid JSON string with json = true', function () { expect(1); if ('JSON' in window) { $.cookie('c', 'v'); $.cookie.json = true; strictEqual($.cookie('c'), undefined, "won't throw exception, returns undefined"); } else { ok(true); } }); test('invalid URL encoding', function () { expect(1); document.cookie = 'bad=foo%'; strictEqual($.cookie('bad'), undefined, "won't throw exception, returns undefined"); // Delete manually here because it requires raw === true... $.cookie.raw = true; $.removeCookie('bad'); }); asyncTest('malformed cookie value in IE (#88, #117)', function () { expect(1); // Sandbox in an iframe so that we can poke around with document.cookie. var iframe = $('')[0]; $(iframe).on('load', function () { start(); if (iframe.contentWindow.ok) { strictEqual(iframe.contentWindow.testValue, 'two', 'reads all cookie values, skipping duplicate occurences of "; "'); } else { // Skip the test where we can't stub document.cookie using // Object.defineProperty. Seems to work fine in // Chrome, Firefox and IE 8+. ok(true, 'N/A'); } }); document.body.appendChild(iframe); }); test('Call to read all when there are cookies', function () { $.cookie('c', 'v'); $.cookie('foo', 'bar'); deepEqual($.cookie(), { c: 'v', foo: 'bar' }, 'returns object containing all cookies'); }); test('Call to read all when there are no cookies at all', function () { deepEqual($.cookie(), {}, 'returns empty object'); }); test('Call to read all with json: true', function () { $.cookie.json = true; $.cookie('c', { foo: 'bar' }); deepEqual($.cookie(), { c: { foo: 'bar' } }, 'returns JSON parsed cookies'); }); test('Call to read all with a badly encoded cookie', function () { expect(1); document.cookie = 'bad=foo%'; document.cookie = 'good=foo'; deepEqual($.cookie(), { good: 'foo' }, 'returns object containing all decodable cookies'); // Delete manually here because it requires raw === true... $.cookie.raw = true; $.removeCookie('bad'); }); module('write', lifecycle); test('String primitive', function () { expect(1); $.cookie('c', 'v'); strictEqual($.cookie('c'), 'v', 'should write value'); }); test('String object', function () { expect(1); $.cookie('c', new String('v')); strictEqual($.cookie('c'), 'v', 'should write value'); }); test('value "[object Object]"', function () { expect(1); $.cookie('c', '[object Object]'); strictEqual($.cookie('c'), '[object Object]', 'should write value'); }); test('number', function () { expect(1); $.cookie('c', 1234); strictEqual($.cookie('c'), '1234', 'should write value'); }); test('expires option as days from now', function () { expect(1); var sevenDaysFromNow = new Date(); sevenDaysFromNow.setDate(sevenDaysFromNow.getDate() + 7); strictEqual($.cookie('c', 'v', { expires: 7 }), 'c=v; expires=' + sevenDaysFromNow.toUTCString(), 'should write the cookie string with expires'); }); test('expires option as Date instance', function () { expect(1); var sevenDaysFromNow = new Date(); sevenDaysFromNow.setDate(sevenDaysFromNow.getDate() + 7); strictEqual($.cookie('c', 'v', { expires: sevenDaysFromNow }), 'c=v; expires=' + sevenDaysFromNow.toUTCString(), 'should write the cookie string with expires'); }); test('return value', function () { expect(1); strictEqual($.cookie('c', 'v'), 'c=v', 'should return written cookie string'); }); test('defaults', function () { expect(2); $.cookie.defaults.path = '/foo'; ok($.cookie('c', 'v').match(/path=\/foo/), 'should use options from defaults'); ok($.cookie('c', 'v', { path: '/bar' }).match(/path=\/bar/), 'options argument has precedence'); }); test('raw = true', function () { expect(1); $.cookie.raw = true; strictEqual($.cookie('c[1]', 'v[1]'), 'c[1]=v[1]', 'should not encode'); // Delete manually here because it requires raw === true... $.removeCookie('c[1]'); }); test('json = true', function () { expect(1); $.cookie.json = true; if ('JSON' in window) { $.cookie('c', { foo: 'bar' }); strictEqual(document.cookie, 'c=' + encodeURIComponent(JSON.stringify({ foo: 'bar' })), 'should stringify JSON'); } else { ok(true); } }); module('removeCookie', lifecycle); test('deletion', function () { expect(1); $.cookie('c', 'v'); $.removeCookie('c'); strictEqual(document.cookie, '', 'should delete the cookie'); }); test('when sucessfully deleted', function () { expect(1); $.cookie('c', 'v'); strictEqual($.removeCookie('c'), true, 'returns true'); }); test('when deletion failed', function () { expect(1); $.cookie('c', 'v'); var originalCookie = $.cookie; $.cookie = function () { // Stub deletion... if (arguments.length === 1) { return originalCookie.apply(null, arguments); } }; strictEqual($.removeCookie('c'), false, 'returns false'); $.cookie = originalCookie; }); test('when cookie does not exist', function () { expect(1); strictEqual($.removeCookie('c'), false, 'returns false'); }); test('with options', function () { expect(1); var options = { path: '/' }; $.cookie('c', 'v', options); $.removeCookie('c', options); strictEqual(document.cookie, '', 'should delete the cookie'); }); test('passing options reference', function () { expect(1); var options = { path: '/' }; $.cookie('c', 'v', options); $.removeCookie('c', options); deepEqual(options, { path: '/' }, "won't alter options object"); }); test('[] used in name', function () { expect(1); $.cookie.raw = true; document.cookie = 'c[1]=foo'; $.removeCookie('c[1]'); strictEqual(document.cookie, '', 'delete the cookie'); }); module('conversion', lifecycle); test('read converter', function() { expect(1); $.cookie('c', '1'); strictEqual($.cookie('c', Number), 1, 'converts read value'); }); test('read converter with raw = true', function() { expect(1); $.cookie.raw = true; $.cookie('c', '1'); strictEqual($.cookie('c', Number), 1, 'does not decode, but converts read value'); }); assets/plugins/jquery-cookie/test/malformed_cookie.html000064400000000650152510440100017452 0ustar00 assets/plugins/jquery-cookie/test/server.js000064400000001266152510440100015135 0ustar00var http = require('http'); var url = require('url'); var path = require('path'); var fs = require('fs'); http.createServer(function(request, response) { var uri = url.parse(request.url).pathname; var filename = path.join(process.cwd(), uri); fs.readFile(filename, 'binary', function(err, file) { if (err) { response.writeHead(500, { 'Content-Type': 'text/plain' }); response.write(err + '\n'); response.end(); return; } response.writeHead(200, filename.match(/\.js$/) ? { 'Content-Type': 'text/javascript' } : {}); response.write(file, 'utf-8'); response.end(); }); }).listen(8124, '0.0.0.0'); console.log('Test suite at http://0.0.0.0:8124/test/index.html'); assets/plugins/jquery-cookie/test/index.html000064400000001156152510440100015264 0ustar00 jquery.cookie Test Suite

      jquery.cookie Test Suite

        assets/plugins/jquery-cookie/CONTRIBUTING.md000064400000002772152510440100014546 0ustar00##Issues - Report issues or feature requests on [GitHub Issues](https://github.com/carhartl/jquery-cookie/issues). - If reporting a bug, please add a [simplified example](http://sscce.org/). ##Pull requests - Create a new topic branch for every separate change you make. - Create a test case if you are fixing a bug or implementing an important feature. - Make sure the build runs successfully. ## Development ###Tools We use the following tools for development: - [Qunit](http://qunitjs.com/) for tests. - [NodeJS](http://nodejs.org/download/) required to run grunt and the test server only. - [Grunt](http://gruntjs.com/getting-started) for task management. ###Getting started Install [NodeJS](http://nodejs.org/). Install globally grunt-cli using the following command: $ npm install -g grunt-cli Browse to the project root directory and install the dev dependencies: $ npm install -d To execute the build and tests run the following command in the root of the project: $ grunt You should see a green message in the console: Done, without errors. ###Tests You can also run the tests in the browser. Start a test server from the project root: $ node test/server.js Open the following URL in a browser: $ open http://0.0.0.0:8124/test/index.html _Note: we recommend cleaning all the browser cookies before running the tests, that can avoid false positive failures._ ###Automatic build You can build automatically after a file change using the following command: $ grunt watch assets/plugins/jquery-cookie/.gitignore000064400000000050152510440100014270 0ustar00node_modules build .sizecache.json *.logassets/plugins/jquery-cookie/CHANGELOG.md000064400000003663152510440100014126 0ustar00HEAD ----- 1.4.0 ----- - Support for AMD. - Removed deprecated method `$.cookie('name', null)` for deleting a cookie, use `$.removeCookie('name')`. - `$.cookie('name')` now returns `undefined` in case such cookie does not exist (was `null`). Because the return value is still falsy, testing for existence of a cookie like `if ( $.cookie('foo') )` keeps working without change. - Renamed bower package definition (component.json -> bower.json) for usage with up-to-date bower. - Badly encoded cookies no longer throw exception upon reading but do return undefined (similar to how we handle JSON parse errors with json = true). - Added conversion function as optional last argument for reading, so that values can be changed to a different representation easily on the fly. Useful for parsing numbers for instance: ```javascript $.cookie('foo', '42'); $.cookie('foo', Number); // => 42 ``` 1.3.1 ----- - Fixed issue where it was no longer possible to check for an arbitrary cookie, while json is set to true, there was a SyntaxError thrown from JSON.parse. - Fixed issue where RFC 2068 decoded cookies were not properly read. 1.3.0 ----- - Configuration options: `raw`, `json`. Replaces raw option, becomes config: ```javascript $.cookie.raw = true; // bypass encoding/decoding the cookie value $.cookie.json = true; // automatically JSON stringify/parse value ``` Thus the default options now cleanly contain cookie attributes only. - Removing licensing under GPL Version 2, the plugin is now released under MIT License only (keeping it simple and following the jQuery library itself here). - Bugfix: Properly handle RFC 2068 quoted cookie values. - Added component.json for bower. - Added jQuery plugin package manifest. - `$.cookie()` returns all available cookies. 1.2.0 ----- - Adding `$.removeCookie('foo')` for deleting a cookie, using `$.cookie('foo', null)` is now deprecated. 1.1 --- - Adding default options. assets/plugins/jQuery-Tags-Input/jquery.tagsinput.css000064400000001610152510440100017033 0ustar00div.tagsinput { border:1px solid #CCC; background: #FFF; padding:5px; width:300px; height:100px; overflow-y: auto;} div.tagsinput span.tag { border: 1px solid #a5d24a; -moz-border-radius:2px; -webkit-border-radius:2px; display: block; float: left; padding: 5px; text-decoration:none; background: #cde69c; color: #638421; margin-right: 5px; margin-bottom:5px;font-family: helvetica; font-size:13px;} div.tagsinput span.tag a { font-weight: bold; color: #82ad2b; text-decoration:none; font-size: 11px; } div.tagsinput input { width:80px; margin:0px; font-family: helvetica; font-size: 13px; border:1px solid transparent; padding:5px; background: transparent; color: #000; outline:0px; margin-right:5px; margin-bottom:5px; } div.tagsinput div { display:block; float: left; } .tags_clear { clear: both; width: 100%; height: 0px; } .not_valid {background: #FBD8DB !important; color: #90111A !important;} assets/plugins/jQuery-Tags-Input/jquery.tagsinput.js000064400000026421152510440100016666 0ustar00/* jQuery Tags Input Plugin 1.3.3 Copyright (c) 2011 XOXCO, Inc Documentation for this plugin lives here: http://xoxco.com/clickable/jquery-tags-input Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php ben@xoxco.com */ (function($) { var delimiter = new Array(); var tags_callbacks = new Array(); $.fn.doAutosize = function(o){ var minWidth = $(this).data('minwidth'), maxWidth = $(this).data('maxwidth'), val = '', input = $(this), testSubject = $('#'+$(this).data('tester_id')); if (val === (val = input.val())) {return;} // Enter new content into testSubject var escaped = val.replace(/&/g, '&').replace(/\s/g,' ').replace(//g, '>'); testSubject.html(escaped); // Calculate new width + whether to change var testerWidth = testSubject.width(), newWidth = (testerWidth + o.comfortZone) >= minWidth ? testerWidth + o.comfortZone : minWidth, currentWidth = input.width(), isValidWidthChange = (newWidth < currentWidth && newWidth >= minWidth) || (newWidth > minWidth && newWidth < maxWidth); // Animate width if (isValidWidthChange) { input.width(newWidth); } }; $.fn.resetAutosize = function(options){ // alert(JSON.stringify(options)); var minWidth = $(this).data('minwidth') || options.minInputWidth || $(this).width(), maxWidth = $(this).data('maxwidth') || options.maxInputWidth || ($(this).closest('.tagsinput').width() - options.inputPadding), val = '', input = $(this), testSubject = $('').css({ position: 'absolute', top: -9999, left: -9999, width: 'auto', fontSize: input.css('fontSize'), fontFamily: input.css('fontFamily'), fontWeight: input.css('fontWeight'), letterSpacing: input.css('letterSpacing'), whiteSpace: 'nowrap' }), testerId = $(this).attr('id')+'_autosize_tester'; if(! $('#'+testerId).length > 0){ testSubject.attr('id', testerId); testSubject.appendTo('body'); } input.data('minwidth', minWidth); input.data('maxwidth', maxWidth); input.data('tester_id', testerId); input.css('width', minWidth); }; $.fn.addTag = function(value,options) { options = jQuery.extend({focus:false,callback:true},options); this.each(function() { var id = $(this).attr('id'); var tagslist = $(this).val().split(delimiter[id]); if (tagslist[0] == '') { tagslist = new Array(); } value = jQuery.trim(value); if (options.unique) { var skipTag = $(this).tagExist(value); if(skipTag == true) { //Marks fake input as not_valid to let styling it $('#'+id+'_tag').addClass('not_valid'); } } else { var skipTag = false; } if (value !='' && skipTag != true) { $('').addClass('tag').append( $('').text(value).append('  '), $('', { href : '#', title : 'Removing tag', text : 'x' }).click(function () { return $('#' + id).removeTag(escape(value)); }) ).insertBefore('#' + id + '_addTag'); tagslist.push(value); $('#'+id+'_tag').val(''); if (options.focus) { $('#'+id+'_tag').focus(); } else { $('#'+id+'_tag').blur(); } $.fn.tagsInput.updateTagsField(this,tagslist); if (options.callback && tags_callbacks[id] && tags_callbacks[id]['onAddTag']) { var f = tags_callbacks[id]['onAddTag']; f.call(this, value); } if(tags_callbacks[id] && tags_callbacks[id]['onChange']) { var i = tagslist.length; var f = tags_callbacks[id]['onChange']; f.call(this, $(this), tagslist[i-1]); } } }); return false; }; $.fn.removeTag = function(value) { value = unescape(value); this.each(function() { var id = $(this).attr('id'); var old = $(this).val().split(delimiter[id]); $('#'+id+'_tagsinput .tag').remove(); str = ''; for (i=0; i< old.length; i++) { if (old[i]!=value) { str = str + delimiter[id] +old[i]; } } $.fn.tagsInput.importTags(this,str); if (tags_callbacks[id] && tags_callbacks[id]['onRemoveTag']) { var f = tags_callbacks[id]['onRemoveTag']; f.call(this, value); } }); return false; }; $.fn.tagExist = function(val) { var id = $(this).attr('id'); var tagslist = $(this).val().split(delimiter[id]); return (jQuery.inArray(val, tagslist) >= 0); //true when tag exists, false when not }; // clear all existing tags and import new ones from a string $.fn.importTags = function(str) { id = $(this).attr('id'); $('#'+id+'_tagsinput .tag').remove(); $.fn.tagsInput.importTags(this,str); } $.fn.tagsInput = function(options) { var settings = jQuery.extend({ interactive:true, defaultText:'add a tag', minChars:0, width:'300px', height:'100px', autocomplete: {selectFirst: false }, 'hide':true, 'delimiter':',', 'unique':true, removeWithBackspace:true, placeholderColor:'#666666', autosize: true, comfortZone: 20, inputPadding: 6*2 },options); this.each(function() { if (settings.hide) { $(this).hide(); } var id = $(this).attr('id'); if (!id || delimiter[$(this).attr('id')]) { id = $(this).attr('id', 'tags' + new Date().getTime()).attr('id'); } var data = jQuery.extend({ pid:id, real_input: '#'+id, holder: '#'+id+'_tagsinput', input_wrapper: '#'+id+'_addTag', fake_input: '#'+id+'_tag' },settings); delimiter[id] = data.delimiter; if (settings.onAddTag || settings.onRemoveTag || settings.onChange) { tags_callbacks[id] = new Array(); tags_callbacks[id]['onAddTag'] = settings.onAddTag; tags_callbacks[id]['onRemoveTag'] = settings.onRemoveTag; tags_callbacks[id]['onChange'] = settings.onChange; } var markup = '
        '; if (settings.interactive) { markup = markup + ''; } markup = markup + '
        '; $(markup).insertAfter(this); $(data.holder).css('width',settings.width); $(data.holder).css('min-height',settings.height); $(data.holder).css('height','100%'); if ($(data.real_input).val()!='') { $.fn.tagsInput.importTags($(data.real_input),$(data.real_input).val()); } if (settings.interactive) { $(data.fake_input).val($(data.fake_input).attr('data-default')); $(data.fake_input).css('color',settings.placeholderColor); $(data.fake_input).resetAutosize(settings); $(data.holder).bind('click',data,function(event) { $(event.data.fake_input).focus(); }); $(data.fake_input).bind('focus',data,function(event) { if ($(event.data.fake_input).val()==$(event.data.fake_input).attr('data-default')) { $(event.data.fake_input).val(''); } $(event.data.fake_input).css('color','#000000'); }); if (settings.autocomplete_url != undefined) { autocomplete_options = {source: settings.autocomplete_url}; for (attrname in settings.autocomplete) { autocomplete_options[attrname] = settings.autocomplete[attrname]; } if (jQuery.Autocompleter !== undefined) { $(data.fake_input).autocomplete(settings.autocomplete_url, settings.autocomplete); $(data.fake_input).bind('result',data,function(event,data,formatted) { if (data) { $('#'+id).addTag(data[0] + "",{focus:true,unique:(settings.unique)}); } }); } else if (jQuery.ui.autocomplete !== undefined) { $(data.fake_input).autocomplete(autocomplete_options); $(data.fake_input).bind('autocompleteselect',data,function(event,ui) { $(event.data.real_input).addTag(ui.item.value,{focus:true,unique:(settings.unique)}); return false; }); } } else { // if a user tabs out of the field, create a new tag // this is only available if autocomplete is not used. $(data.fake_input).bind('blur',data,function(event) { var d = $(this).attr('data-default'); if ($(event.data.fake_input).val()!='' && $(event.data.fake_input).val()!=d) { if( (event.data.minChars <= $(event.data.fake_input).val().length) && (!event.data.maxChars || (event.data.maxChars >= $(event.data.fake_input).val().length)) ) $(event.data.real_input).addTag($(event.data.fake_input).val(),{focus:true,unique:(settings.unique)}); } else { $(event.data.fake_input).val($(event.data.fake_input).attr('data-default')); $(event.data.fake_input).css('color',settings.placeholderColor); } return false; }); } // if user types a comma, create a new tag $(data.fake_input).bind('keypress',data,function(event) { if (event.which==event.data.delimiter.charCodeAt(0) || event.which==13 ) { event.preventDefault(); if( (event.data.minChars <= $(event.data.fake_input).val().length) && (!event.data.maxChars || (event.data.maxChars >= $(event.data.fake_input).val().length)) ) $(event.data.real_input).addTag($(event.data.fake_input).val(),{focus:true,unique:(settings.unique)}); $(event.data.fake_input).resetAutosize(settings); return false; } else if (event.data.autosize) { $(event.data.fake_input).doAutosize(settings); } }); //Delete last tag on backspace data.removeWithBackspace && $(data.fake_input).bind('keydown', function(event) { if(event.keyCode == 8 && $(this).val() == '') { event.preventDefault(); var last_tag = $(this).closest('.tagsinput').find('.tag:last').text(); var id = $(this).attr('id').replace(/_tag$/, ''); last_tag = last_tag.replace(/[\s]+x$/, ''); $('#' + id).removeTag(escape(last_tag)); $(this).trigger('focus'); } }); $(data.fake_input).blur(); //Removes the not_valid class when user changes the value of the fake input if(data.unique) { $(data.fake_input).keydown(function(event){ if(event.keyCode == 8 || String.fromCharCode(event.which).match(/\w+|[áéíóúÁÉÍÓÚñÑ,/]+/)) { $(this).removeClass('not_valid'); } }); } } // if settings.interactive }); return this; }; $.fn.tagsInput.updateTagsField = function(obj,tagslist) { var id = $(obj).attr('id'); $(obj).val(tagslist.join(delimiter[id])); }; $.fn.tagsInput.importTags = function(obj,val) { $(obj).val(''); var id = $(obj).attr('id'); var tags = val.split(delimiter[id]); for (i=0; i tag: Create a real input in your form that will contain a comma-separated list of tags. You can put any default or existing tags in the value attribute, and they'll be handled properly. Then, simply call the tagsInput function on any field that should be treated as a list of tags. $('#tags').tagsInput(); If you want to use jQuery.autocomplete, you can pass in a parameter with the autocomplete url. $('#tags').tagsInput({ autocomplete_url:'http://myserver.com/api/autocomplete' }); If you're using the bassistance jQuery.autocomplete, which takes extra parameters, you can also send in options to the autocomplete plugin, as described here. $('#tags').tagsInput({ autocomplete_url:'http://myserver.com/api/autocomplete', autocomplete:{selectFirst:true,width:'100px',autoFill:true} }); You can add and remove tags by calling the addTag() and removeTag() functions. $('#tags').addTag('foo'); $('#tags').removeTag('bar'); You can import a list of tags using the importTags() function... $('#tags').importTags('foo,bar,baz'); You can also use importTags() to reset the tag list... $('#tags').importTags(''); And you can check if a tag exists using tagExist()... if ($('#tags').tagExist('foo')) { ... } If additional functionality is required when a tag is added or removed, you may specify callback functions via the onAddTag and onRemoveTag parameters. Both functions should accept a single tag as the parameter. If you do not want to provide a way to add tags, or you would prefer to provide an alternate interface for adding tags to the box, you may pass an false into the optional 'interactive' parameter. The tags will still be rendered as per usual, and the addTag and removeTag functions will operate as expected. If you want a function to be called every time a tag is updated/deleted, set it as the 'onChange' option. By default, if the cursor is immediately after a tag, hitting backspace will delete that tag. If you want to override this, set the 'removeWithBackspace' option to false. ## Options $(selector).tagsInput({ 'autocomplete_url': url_to_autocomplete_api, 'autocomplete': { option: value, option: value}, 'height':'100px', 'width':'300px', 'interactive':true, 'defaultText':'add a tag', 'onAddTag':callback_function, 'onRemoveTag':callback_function, 'onChange' : callback_function, 'removeWithBackspace' : true, 'minChars' : 0, 'maxChars' : 0 //if not provided there is no limit, 'placeholderColor' : '#666666' }); assets/plugins/jQuery-Tags-Input/bower.json000064400000000402152510440100014774 0ustar00{ "name": "jquery.tagsinput", "version": "1.3.3", "main": ["jquery.tagsinput.js", "jquery.tagsinput.css"], "ignore": [ "**/.*", "*.html", "*.md", "*.json", "*.min.js", "test" ], "dependencies": { "jquery": "1.x" } } assets/plugins/jQuery-Tags-Input/jquery.tagsinput.min.js000064400000014400152510440100017442 0ustar00(function(a){var b=new Array;var c=new Array;a.fn.doAutosize=function(b){var c=a(this).data("minwidth"),d=a(this).data("maxwidth"),e="",f=a(this),g=a("#"+a(this).data("tester_id"));if(e===(e=f.val())){return}var h=e.replace(/&/g,"&").replace(/\s/g," ").replace(//g,">");g.html(h);var i=g.width(),j=i+b.comfortZone>=c?i+b.comfortZone:c,k=f.width(),l=j=c||j>c&&j").css({position:"absolute",top:-9999,left:-9999,width:"auto",fontSize:f.css("fontSize"),fontFamily:f.css("fontFamily"),fontWeight:f.css("fontWeight"),letterSpacing:f.css("letterSpacing"),whiteSpace:"nowrap"}),h=a(this).attr("id")+"_autosize_tester";if(!a("#"+h).length>0){g.attr("id",h);g.appendTo("body")}f.data("minwidth",c);f.data("maxwidth",d);f.data("tester_id",h);f.css("width",c)};a.fn.addTag=function(d,e){e=jQuery.extend({focus:false,callback:true},e);this.each(function(){var f=a(this).attr("id");var g=a(this).val().split(b[f]);if(g[0]==""){g=new Array}d=jQuery.trim(d);if(e.unique){var h=a(g).tagExist(d);if(h==true){a("#"+f+"_tag").addClass("not_valid")}}else{var h=false}if(d!=""&&h!=true){a("").addClass("tag").append(a("").text(d).append("  "),a("
        ",{href:"#",title:"Removing tag",text:"x"}).click(function(){return a("#"+f).removeTag(escape(d))})).insertBefore("#"+f+"_addTag");g.push(d);a("#"+f+"_tag").val("");if(e.focus){a("#"+f+"_tag").focus()}else{a("#"+f+"_tag").blur()}a.fn.tagsInput.updateTagsField(this,g);if(e.callback&&c[f]&&c[f]["onAddTag"]){var i=c[f]["onAddTag"];i.call(this,d)}if(c[f]&&c[f]["onChange"]){var j=g.length;var i=c[f]["onChange"];i.call(this,a(this),g[j-1])}}});return false};a.fn.removeTag=function(d){d=unescape(d);this.each(function(){var e=a(this).attr("id");var f=a(this).val().split(b[e]);a("#"+e+"_tagsinput .tag").remove();str="";for(i=0;i=0};a.fn.importTags=function(b){id=a(this).attr("id");a("#"+id+"_tagsinput .tag").remove();a.fn.tagsInput.importTags(this,b)};a.fn.tagsInput=function(d){var e=jQuery.extend({interactive:true,defaultText:"add a tag",minChars:0,width:"300px",height:"100px",autocomplete:{selectFirst:false},hide:true,delimiter:",",unique:true,removeWithBackspace:true,placeholderColor:"#666666",autosize:true,comfortZone:20,inputPadding:6*2},d);this.each(function(){if(e.hide){a(this).hide()}var d=a(this).attr("id");if(!d||b[a(this).attr("id")]){d=a(this).attr("id","tags"+(new Date).getTime()).attr("id")}var f=jQuery.extend({pid:d,real_input:"#"+d,holder:"#"+d+"_tagsinput",input_wrapper:"#"+d+"_addTag",fake_input:"#"+d+"_tag"},e);b[d]=f.delimiter;if(e.onAddTag||e.onRemoveTag||e.onChange){c[d]=new Array;c[d]["onAddTag"]=e.onAddTag;c[d]["onRemoveTag"]=e.onRemoveTag;c[d]["onChange"]=e.onChange}var g='
        ';if(e.interactive){g=g+''}g=g+'
        ';a(g).insertAfter(this);a(f.holder).css("width",e.width);a(f.holder).css("height",e.height);if(a(f.real_input).val()!=""){a.fn.tagsInput.importTags(a(f.real_input),a(f.real_input).val())}if(e.interactive){a(f.fake_input).val(a(f.fake_input).attr("data-default"));a(f.fake_input).css("color",e.placeholderColor);a(f.fake_input).resetAutosize(e);a(f.holder).bind("click",f,function(b){a(b.data.fake_input).focus()});a(f.fake_input).bind("focus",f,function(b){if(a(b.data.fake_input).val()==a(b.data.fake_input).attr("data-default")){a(b.data.fake_input).val("")}a(b.data.fake_input).css("color","#000000")});if(e.autocomplete_url!=undefined){autocomplete_options={source:e.autocomplete_url};for(attrname in e.autocomplete){autocomplete_options[attrname]=e.autocomplete[attrname]}if(jQuery.Autocompleter!==undefined){a(f.fake_input).autocomplete(e.autocomplete_url,e.autocomplete);a(f.fake_input).bind("result",f,function(b,c,f){if(c){a("#"+d).addTag(c[0]+"",{focus:true,unique:e.unique})}})}else if(jQuery.ui.autocomplete!==undefined){a(f.fake_input).autocomplete(autocomplete_options);a(f.fake_input).bind("autocompleteselect",f,function(b,c){a(b.data.real_input).addTag(c.item.value,{focus:true,unique:e.unique});return false})}}else{a(f.fake_input).bind("blur",f,function(b){var c=a(this).attr("data-default");if(a(b.data.fake_input).val()!=""&&a(b.data.fake_input).val()!=c){if(b.data.minChars<=a(b.data.fake_input).val().length&&(!b.data.maxChars||b.data.maxChars>=a(b.data.fake_input).val().length))a(b.data.real_input).addTag(a(b.data.fake_input).val(),{focus:true,unique:e.unique})}else{a(b.data.fake_input).val(a(b.data.fake_input).attr("data-default"));a(b.data.fake_input).css("color",e.placeholderColor)}return false})}a(f.fake_input).bind("keypress",f,function(b){if(b.which==b.data.delimiter.charCodeAt(0)||b.which==13){b.preventDefault();if(b.data.minChars<=a(b.data.fake_input).val().length&&(!b.data.maxChars||b.data.maxChars>=a(b.data.fake_input).val().length))a(b.data.real_input).addTag(a(b.data.fake_input).val(),{focus:true,unique:e.unique});a(b.data.fake_input).resetAutosize(e);return false}else if(b.data.autosize){a(b.data.fake_input).doAutosize(e)}});f.removeWithBackspace&&a(f.fake_input).bind("keydown",function(b){if(b.keyCode==8&&a(this).val()==""){b.preventDefault();var c=a(this).closest(".tagsinput").find(".tag:last").text();var d=a(this).attr("id").replace(/_tag$/,"");c=c.replace(/[\s]+x$/,"");a("#"+d).removeTag(escape(c));a(this).trigger("focus")}});a(f.fake_input).blur();if(f.unique){a(f.fake_input).keydown(function(b){if(b.keyCode==8||String.fromCharCode(b.which).match(/\w+|[áéíóúÁÉÍÓÚñÑ,/]+/)){a(this).removeClass("not_valid")}})}}});return this};a.fn.tagsInput.updateTagsField=function(c,d){var e=a(c).attr("id");a(c).val(d.join(b[e]))};a.fn.tagsInput.importTags=function(d,e){a(d).val("");var f=a(d).attr("id");var g=e.split(b[f]);for(i=0;i

        assets/plugins/bootstrap-timepicker/package.json000064400000001506152510440100016156 0ustar00{ "name": "bootstrap-timepicker", "description": "Timepicker widget for Twitter Bootstrap 2.*", "version": "0.2.3", "homepage": "http://jdewit.github.com/bootstrap-timepicker", "author": { "name": "Joris de Wit", "email": "joris.w.dewit@gmail.com", "url": "http://jorisdewit.ca" }, "repository": { "type": "git", "url": "git://github.com/jdewit/bootstrap-timepicker" }, "scripts": { "test": "bower install; grunt test;" }, "bugs": { "url": "https://github.com/jdewit/bootstrap-timepicker/issues" }, "devDependencies": { "grunt-cli": "~0.1", "grunt": "~0.4.1", "bower": "latest", "grunt-contrib-less": "~0.5.0", "grunt-contrib-jshint": "~0.4.3", "grunt-contrib-uglify": "~0.2.0", "grunt-contrib-jasmine": "~0.4.2", "grunt-contrib-watch": "~0.4.3" } } assets/plugins/bootstrap-timepicker/css/bootstrap-timepicker.css000064400000005334152510440100021344 0ustar00/*! * Timepicker Component for Twitter Bootstrap * * Copyright 2013 Joris de Wit * * Contributors https://github.com/jdewit/bootstrap-timepicker/graphs/contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ .bootstrap-timepicker { position: relative; } .bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu { left: auto; right: 0; } .bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:before { left: auto; right: 12px; } .bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:after { left: auto; right: 13px; } .bootstrap-timepicker .add-on { cursor: pointer; } .bootstrap-timepicker .add-on i { display: inline-block; width: 16px; height: 16px; } .bootstrap-timepicker-widget.dropdown-menu { padding: 2px 3px 2px 2px; } .bootstrap-timepicker-widget.dropdown-menu.open { display: inline-block; } .bootstrap-timepicker-widget.dropdown-menu:before { border-bottom: 7px solid rgba(0, 0, 0, 0.2); border-left: 7px solid transparent; border-right: 7px solid transparent; content: ""; display: inline-block; left: 9px; position: absolute; top: -7px; } .bootstrap-timepicker-widget.dropdown-menu:after { border-bottom: 6px solid #FFFFFF; border-left: 6px solid transparent; border-right: 6px solid transparent; content: ""; display: inline-block; left: 10px; position: absolute; top: -6px; } .bootstrap-timepicker-widget a.btn, .bootstrap-timepicker-widget input { border-radius: 4px; } .bootstrap-timepicker-widget table { width: 100%; margin: 0; } .bootstrap-timepicker-widget table td { text-align: center; height: 30px; margin: 0; padding: 2px; } .bootstrap-timepicker-widget table td:not(.separator) { min-width: 30px; } .bootstrap-timepicker-widget table td span { width: 100%; } .bootstrap-timepicker-widget table td a { border: 1px transparent solid; width: 100%; display: inline-block; margin: 0; padding: 8px 0; outline: 0; color: #333; } .bootstrap-timepicker-widget table td a:hover { text-decoration: none; background-color: #eee; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; border-color: #ddd; } .bootstrap-timepicker-widget table td a i { margin-top: 2px; } .bootstrap-timepicker-widget table td input { width: 25px; margin: 0; text-align: center; } .bootstrap-timepicker-widget .modal-content { padding: 4px; } @media (min-width: 767px) { .bootstrap-timepicker-widget.modal { width: 200px; margin-left: -100px; } } @media (max-width: 767px) { .bootstrap-timepicker { width: 100%; } .bootstrap-timepicker .dropdown-menu { width: 100%; } } assets/plugins/bootstrap-timepicker/css/bootstrap-timepicker.min.css000064400000004552152510440100022127 0ustar00/*! * Timepicker Component for Twitter Bootstrap * * Copyright 2013 Joris de Wit * * Contributors https://github.com/jdewit/bootstrap-timepicker/graphs/contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */.bootstrap-timepicker{position:relative}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu{left:auto;right:0}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:before{left:auto;right:12px}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:after{left:auto;right:13px}.bootstrap-timepicker .add-on{cursor:pointer}.bootstrap-timepicker .add-on i{display:inline-block;width:16px;height:16px}.bootstrap-timepicker-widget.dropdown-menu{padding:2px 3px 2px 2px}.bootstrap-timepicker-widget.dropdown-menu.open{display:inline-block}.bootstrap-timepicker-widget.dropdown-menu:before{border-bottom:7px solid rgba(0,0,0,0.2);border-left:7px solid transparent;border-right:7px solid transparent;content:"";display:inline-block;left:9px;position:absolute;top:-7px}.bootstrap-timepicker-widget.dropdown-menu:after{border-bottom:6px solid #fff;border-left:6px solid transparent;border-right:6px solid transparent;content:"";display:inline-block;left:10px;position:absolute;top:-6px}.bootstrap-timepicker-widget a.btn,.bootstrap-timepicker-widget input{border-radius:4px}.bootstrap-timepicker-widget table{width:100%;margin:0}.bootstrap-timepicker-widget table td{text-align:center;height:30px;margin:0;padding:2px}.bootstrap-timepicker-widget table td:not(.separator){min-width:30px}.bootstrap-timepicker-widget table td span{width:100%}.bootstrap-timepicker-widget table td a{border:1px transparent solid;width:100%;display:inline-block;margin:0;padding:8px 0;outline:0;color:#333}.bootstrap-timepicker-widget table td a:hover{text-decoration:none;background-color:#eee;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border-color:#ddd}.bootstrap-timepicker-widget table td a i{margin-top:2px}.bootstrap-timepicker-widget table td input{width:25px;margin:0;text-align:center}.bootstrap-timepicker-widget .modal-content{padding:4px}@media(min-width:767px){.bootstrap-timepicker-widget.modal{width:200px;margin-left:-100px}}@media(max-width:767px){.bootstrap-timepicker{width:100%}.bootstrap-timepicker .dropdown-menu{width:100%}}assets/plugins/bootstrap-timepicker/README.md000064400000004247152510440100015154 0ustar00Timepicker for Twitter Bootstrap 2.x [![Build Status](https://secure.travis-ci.org/jdewit/bootstrap-timepicker.png)](http://travis-ci.org/jdewit/bootstrap-timepicker) ------------------------------------ A simple timepicker component for Twitter Bootstrap. Demos & Documentation ===================== View
        demos & documentation. Support ======= If you make money using this timepicker, please consider supporting its development. Click here to support bootstrap-timepicker! Contributing ============ 1. Install NodeJS and Node Package Manager. 2. Install packages ``` bash npm install ``` 3. Use Bower to get the dev dependencies. ``` bash $ bower install ``` 4. Use Grunt to run tests, compress assets, etc. ``` bash $ grunt test // run jshint and jasmine tests $ grunt watch // run jsHint and Jasmine tests whenever a file is changed $ grunt compile // minify the js and css files ``` - Please make it easy on me by covering any new features or issues with Jasmine tests. - If your changes need documentation, please take the time to update the docs. Acknowledgements ================ Thanks to everyone who have given feedback and submitted pull requests. A list of all the contributors can be found here. Special thanks to @eternicode and his Twitter Datepicker for inspiration. assets/plugins/bootstrap-timepicker/.travis.yml000064400000000045152510440100015776 0ustar00language: node_js node_js: - "0.8" assets/plugins/bootstrap-timepicker/js/bootstrap-timepicker.js000064400000057453152510440100021025 0ustar00/*! * Timepicker Component for Twitter Bootstrap * * Copyright 2013 Joris de Wit * * Contributors https://github.com/jdewit/bootstrap-timepicker/graphs/contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ (function($, window, document, undefined) { 'use strict'; // TIMEPICKER PUBLIC CLASS DEFINITION var Timepicker = function(element, options) { this.widget = ''; this.$element = $(element); this.defaultTime = options.defaultTime; this.disableFocus = options.disableFocus; this.isOpen = options.isOpen; this.minuteStep = options.minuteStep; this.modalBackdrop = options.modalBackdrop; this.secondStep = options.secondStep; this.showInputs = options.showInputs; this.showMeridian = options.showMeridian; this.showSeconds = options.showSeconds; this.template = options.template; this.appendWidgetTo = options.appendWidgetTo; this._init(); }; Timepicker.prototype = { constructor: Timepicker, _init: function() { var self = this; if (this.$element.parent().hasClass('input-append') || this.$element.parent().hasClass('input-prepend')) { this.$element.parent('.input-append, .input-prepend').find('.add-on').on({ 'click.timepicker': $.proxy(this.showWidget, this) }); this.$element.on({ 'focus.timepicker': $.proxy(this.highlightUnit, this), 'click.timepicker': $.proxy(this.highlightUnit, this), 'keydown.timepicker': $.proxy(this.elementKeydown, this), 'blur.timepicker': $.proxy(this.blurElement, this) }); } else { if (this.template) { this.$element.on({ 'focus.timepicker': $.proxy(this.showWidget, this), 'click.timepicker': $.proxy(this.showWidget, this), 'blur.timepicker': $.proxy(this.blurElement, this) }); } else { this.$element.on({ 'focus.timepicker': $.proxy(this.highlightUnit, this), 'click.timepicker': $.proxy(this.highlightUnit, this), 'keydown.timepicker': $.proxy(this.elementKeydown, this), 'blur.timepicker': $.proxy(this.blurElement, this) }); } } if (this.template !== false) { this.$widget = $(this.getTemplate()).prependTo(this.$element.parents(this.appendWidgetTo)).on('click', $.proxy(this.widgetClick, this)); } else { this.$widget = false; } if (this.showInputs && this.$widget !== false) { this.$widget.find('input').each(function() { $(this).on({ 'click.timepicker': function() { $(this).select(); }, 'keydown.timepicker': $.proxy(self.widgetKeydown, self) }); }); } this.setDefaultTime(this.defaultTime); }, blurElement: function() { this.highlightedUnit = undefined; this.updateFromElementVal(); }, decrementHour: function() { if (this.showMeridian) { if (this.hour === 1) { this.hour = 12; } else if (this.hour === 12) { this.hour--; return this.toggleMeridian(); } else if (this.hour === 0) { this.hour = 11; return this.toggleMeridian(); } else { this.hour--; } } else { if (this.hour === 0) { this.hour = 23; } else { this.hour--; } } this.update(); }, decrementMinute: function(step) { var newVal; if (step) { newVal = this.minute - step; } else { newVal = this.minute - this.minuteStep; } if (newVal < 0) { this.decrementHour(); this.minute = newVal + 60; } else { this.minute = newVal; } this.update(); }, decrementSecond: function() { var newVal = this.second - this.secondStep; if (newVal < 0) { this.decrementMinute(true); this.second = newVal + 60; } else { this.second = newVal; } this.update(); }, elementKeydown: function(e) { switch (e.keyCode) { case 9: //tab this.updateFromElementVal(); switch (this.highlightedUnit) { case 'hour': e.preventDefault(); this.highlightNextUnit(); break; case 'minute': if (this.showMeridian || this.showSeconds) { e.preventDefault(); this.highlightNextUnit(); } break; case 'second': if (this.showMeridian) { e.preventDefault(); this.highlightNextUnit(); } break; } break; case 27: // escape this.updateFromElementVal(); break; case 37: // left arrow e.preventDefault(); this.highlightPrevUnit(); this.updateFromElementVal(); break; case 38: // up arrow e.preventDefault(); switch (this.highlightedUnit) { case 'hour': this.incrementHour(); this.highlightHour(); break; case 'minute': this.incrementMinute(); this.highlightMinute(); break; case 'second': this.incrementSecond(); this.highlightSecond(); break; case 'meridian': this.toggleMeridian(); this.highlightMeridian(); break; } break; case 39: // right arrow e.preventDefault(); this.updateFromElementVal(); this.highlightNextUnit(); break; case 40: // down arrow e.preventDefault(); switch (this.highlightedUnit) { case 'hour': this.decrementHour(); this.highlightHour(); break; case 'minute': this.decrementMinute(); this.highlightMinute(); break; case 'second': this.decrementSecond(); this.highlightSecond(); break; case 'meridian': this.toggleMeridian(); this.highlightMeridian(); break; } break; } }, formatTime: function(hour, minute, second, meridian) { hour = hour < 10 ? '0' + hour : hour; minute = minute < 10 ? '0' + minute : minute; second = second < 10 ? '0' + second : second; return hour + ':' + minute + (this.showSeconds ? ':' + second : '') + (this.showMeridian ? ' ' + meridian : ''); }, getCursorPosition: function() { var input = this.$element.get(0); if ('selectionStart' in input) {// Standard-compliant browsers return input.selectionStart; } else if (document.selection) {// IE fix input.focus(); var sel = document.selection.createRange(), selLen = document.selection.createRange().text.length; sel.moveStart('character', - input.value.length); return sel.text.length - selLen; } }, getTemplate: function() { var template, hourTemplate, minuteTemplate, secondTemplate, meridianTemplate, templateContent; if (this.showInputs) { hourTemplate = ''; minuteTemplate = ''; secondTemplate = ''; meridianTemplate = ''; } else { hourTemplate = ''; minuteTemplate = ''; secondTemplate = ''; meridianTemplate = ''; } templateContent = ''+ ''+ ''+ ''+ ''+ (this.showSeconds ? ''+ '' : '') + (this.showMeridian ? ''+ '' : '') + ''+ ''+ ' '+ ''+ ' '+ (this.showSeconds ? ''+ '' : '') + (this.showMeridian ? ''+ '' : '') + ''+ ''+ ''+ ''+ ''+ (this.showSeconds ? ''+ '' : '') + (this.showMeridian ? ''+ '' : '') + ''+ '
           
        '+ hourTemplate +':'+ minuteTemplate +':'+ secondTemplate +' '+ meridianTemplate +'
          
        '; switch(this.template) { case 'modal': template = ''; break; case 'dropdown': template = ''; break; } return template; }, getTime: function() { return this.formatTime(this.hour, this.minute, this.second, this.meridian); }, hideWidget: function() { if (this.isOpen === false) { return; } if (this.showInputs) { this.updateFromWidgetInputs(); } this.$element.trigger({ 'type': 'hide.timepicker', 'time': { 'value': this.getTime(), 'hours': this.hour, 'minutes': this.minute, 'seconds': this.second, 'meridian': this.meridian } }); if (this.template === 'modal' && this.$widget.modal) { this.$widget.modal('hide'); } else { this.$widget.removeClass('open'); } $(document).off('mousedown.timepicker'); this.isOpen = false; }, highlightUnit: function() { this.position = this.getCursorPosition(); if (this.position >= 0 && this.position <= 2) { this.highlightHour(); } else if (this.position >= 3 && this.position <= 5) { this.highlightMinute(); } else if (this.position >= 6 && this.position <= 8) { if (this.showSeconds) { this.highlightSecond(); } else { this.highlightMeridian(); } } else if (this.position >= 9 && this.position <= 11) { this.highlightMeridian(); } }, highlightNextUnit: function() { switch (this.highlightedUnit) { case 'hour': this.highlightMinute(); break; case 'minute': if (this.showSeconds) { this.highlightSecond(); } else if (this.showMeridian){ this.highlightMeridian(); } else { this.highlightHour(); } break; case 'second': if (this.showMeridian) { this.highlightMeridian(); } else { this.highlightHour(); } break; case 'meridian': this.highlightHour(); break; } }, highlightPrevUnit: function() { switch (this.highlightedUnit) { case 'hour': this.highlightMeridian(); break; case 'minute': this.highlightHour(); break; case 'second': this.highlightMinute(); break; case 'meridian': if (this.showSeconds) { this.highlightSecond(); } else { this.highlightMinute(); } break; } }, highlightHour: function() { var $element = this.$element.get(0); this.highlightedUnit = 'hour'; if ($element.setSelectionRange) { setTimeout(function() { $element.setSelectionRange(0,2); }, 0); } }, highlightMinute: function() { var $element = this.$element.get(0); this.highlightedUnit = 'minute'; if ($element.setSelectionRange) { setTimeout(function() { $element.setSelectionRange(3,5); }, 0); } }, highlightSecond: function() { var $element = this.$element.get(0); this.highlightedUnit = 'second'; if ($element.setSelectionRange) { setTimeout(function() { $element.setSelectionRange(6,8); }, 0); } }, highlightMeridian: function() { var $element = this.$element.get(0); this.highlightedUnit = 'meridian'; if ($element.setSelectionRange) { if (this.showSeconds) { setTimeout(function() { $element.setSelectionRange(9,11); }, 0); } else { setTimeout(function() { $element.setSelectionRange(6,8); }, 0); } } }, incrementHour: function() { if (this.showMeridian) { if (this.hour === 11) { this.hour++; return this.toggleMeridian(); } else if (this.hour === 12) { this.hour = 0; } } if (this.hour === 23) { this.hour = 0; return; } this.hour++; this.update(); }, incrementMinute: function(step) { var newVal; if (step) { newVal = this.minute + step; } else { newVal = this.minute + this.minuteStep - (this.minute % this.minuteStep); } if (newVal > 59) { this.incrementHour(); this.minute = newVal - 60; } else { this.minute = newVal; } this.update(); }, incrementSecond: function() { var newVal = this.second + this.secondStep - (this.second % this.secondStep); if (newVal > 59) { this.incrementMinute(true); this.second = newVal - 60; } else { this.second = newVal; } this.update(); }, remove: function() { $('document').off('.timepicker'); if (this.$widget) { this.$widget.remove(); } delete this.$element.data().timepicker; }, setDefaultTime: function(defaultTime){ if (!this.$element.val()) { if (defaultTime === 'current') { var dTime = new Date(), hours = dTime.getHours(), minutes = Math.floor(dTime.getMinutes() / this.minuteStep) * this.minuteStep, seconds = Math.floor(dTime.getSeconds() / this.secondStep) * this.secondStep, meridian = 'AM'; if (this.showMeridian) { if (hours === 0) { hours = 12; } else if (hours >= 12) { if (hours > 12) { hours = hours - 12; } meridian = 'PM'; } else { meridian = 'AM'; } } this.hour = hours; this.minute = minutes; this.second = seconds; this.meridian = meridian; this.update(); } else if (defaultTime === false) { this.hour = 0; this.minute = 0; this.second = 0; this.meridian = 'AM'; } else { this.setTime(defaultTime); } } else { this.updateFromElementVal(); } }, setTime: function(time) { var arr, timeArray; if (this.showMeridian) { arr = time.split(' '); timeArray = arr[0].split(':'); this.meridian = arr[1]; } else { timeArray = time.split(':'); } this.hour = parseInt(timeArray[0], 10); this.minute = parseInt(timeArray[1], 10); this.second = parseInt(timeArray[2], 10); if (isNaN(this.hour)) { this.hour = 0; } if (isNaN(this.minute)) { this.minute = 0; } if (this.showMeridian) { if (this.hour > 12) { this.hour = 12; } else if (this.hour < 1) { this.hour = 12; } if (this.meridian === 'am' || this.meridian === 'a') { this.meridian = 'AM'; } else if (this.meridian === 'pm' || this.meridian === 'p') { this.meridian = 'PM'; } if (this.meridian !== 'AM' && this.meridian !== 'PM') { this.meridian = 'AM'; } } else { if (this.hour >= 24) { this.hour = 23; } else if (this.hour < 0) { this.hour = 0; } } if (this.minute < 0) { this.minute = 0; } else if (this.minute >= 60) { this.minute = 59; } if (this.showSeconds) { if (isNaN(this.second)) { this.second = 0; } else if (this.second < 0) { this.second = 0; } else if (this.second >= 60) { this.second = 59; } } this.update(); }, showWidget: function() { if (this.isOpen) { return; } if (this.$element.is(':disabled')) { return; } var self = this; $(document).on('mousedown.timepicker', function (e) { // Clicked outside the timepicker, hide it if ($(e.target).closest('.bootstrap-timepicker-widget').length === 0) { self.hideWidget(); } }); this.$element.trigger({ 'type': 'show.timepicker', 'time': { 'value': this.getTime(), 'hours': this.hour, 'minutes': this.minute, 'seconds': this.second, 'meridian': this.meridian } }); if (this.disableFocus) { this.$element.blur(); } this.updateFromElementVal(); if (this.template === 'modal' && this.$widget.modal) { this.$widget.modal('show').on('hidden', $.proxy(this.hideWidget, this)); } else { if (this.isOpen === false) { this.$widget.addClass('open'); } } this.isOpen = true; }, toggleMeridian: function() { this.meridian = this.meridian === 'AM' ? 'PM' : 'AM'; this.update(); }, update: function() { this.$element.trigger({ 'type': 'changeTime.timepicker', 'time': { 'value': this.getTime(), 'hours': this.hour, 'minutes': this.minute, 'seconds': this.second, 'meridian': this.meridian } }); this.updateElement(); this.updateWidget(); }, updateElement: function() { this.$element.val(this.getTime()).change(); }, updateFromElementVal: function() { var val = this.$element.val(); if (val) { this.setTime(val); } }, updateWidget: function() { if (this.$widget === false) { return; } var hour = this.hour < 10 ? '0' + this.hour : this.hour, minute = this.minute < 10 ? '0' + this.minute : this.minute, second = this.second < 10 ? '0' + this.second : this.second; if (this.showInputs) { this.$widget.find('input.bootstrap-timepicker-hour').val(hour); this.$widget.find('input.bootstrap-timepicker-minute').val(minute); if (this.showSeconds) { this.$widget.find('input.bootstrap-timepicker-second').val(second); } if (this.showMeridian) { this.$widget.find('input.bootstrap-timepicker-meridian').val(this.meridian); } } else { this.$widget.find('span.bootstrap-timepicker-hour').text(hour); this.$widget.find('span.bootstrap-timepicker-minute').text(minute); if (this.showSeconds) { this.$widget.find('span.bootstrap-timepicker-second').text(second); } if (this.showMeridian) { this.$widget.find('span.bootstrap-timepicker-meridian').text(this.meridian); } } }, updateFromWidgetInputs: function() { if (this.$widget === false) { return; } var time = $('input.bootstrap-timepicker-hour', this.$widget).val() + ':' + $('input.bootstrap-timepicker-minute', this.$widget).val() + (this.showSeconds ? ':' + $('input.bootstrap-timepicker-second', this.$widget).val() : '') + (this.showMeridian ? ' ' + $('input.bootstrap-timepicker-meridian', this.$widget).val() : ''); this.setTime(time); }, widgetClick: function(e) { e.stopPropagation(); e.preventDefault(); var action = $(e.target).closest('a').data('action'); if (action) { this[action](); } }, widgetKeydown: function(e) { var $input = $(e.target).closest('input'), name = $input.attr('name'); switch (e.keyCode) { case 9: //tab if (this.showMeridian) { if (name === 'meridian') { return this.hideWidget(); } } else { if (this.showSeconds) { if (name === 'second') { return this.hideWidget(); } } else { if (name === 'minute') { return this.hideWidget(); } } } this.updateFromWidgetInputs(); break; case 27: // escape this.hideWidget(); break; case 38: // up arrow e.preventDefault(); switch (name) { case 'hour': this.incrementHour(); break; case 'minute': this.incrementMinute(); break; case 'second': this.incrementSecond(); break; case 'meridian': this.toggleMeridian(); break; } break; case 40: // down arrow e.preventDefault(); switch (name) { case 'hour': this.decrementHour(); break; case 'minute': this.decrementMinute(); break; case 'second': this.decrementSecond(); break; case 'meridian': this.toggleMeridian(); break; } break; } } }; //TIMEPICKER PLUGIN DEFINITION $.fn.timepicker = function(option) { var args = Array.apply(null, arguments); args.shift(); return this.each(function() { var $this = $(this), data = $this.data('timepicker'), options = typeof option === 'object' && option; if (!data) { $this.data('timepicker', (data = new Timepicker(this, $.extend({}, $.fn.timepicker.defaults, options, $(this).data())))); } if (typeof option === 'string') { data[option].apply(data, args); } }); }; $.fn.timepicker.defaults = { defaultTime: 'current', disableFocus: false, isOpen: false, minuteStep: 15, modalBackdrop: false, secondStep: 15, showSeconds: false, showInputs: true, showMeridian: true, template: 'dropdown', appendWidgetTo: '.bootstrap-timepicker' }; $.fn.timepicker.Constructor = Timepicker; })(jQuery, window, document); assets/plugins/bootstrap-timepicker/js/bootstrap-timepicker.min.js000064400000033760152510440100021602 0ustar00/*! bootstrap-timepicker v0.2.3 * http://jdewit.github.com/bootstrap-timepicker * Copyright (c) 2013 Joris de Wit * MIT License */(function(t,i,e,s){"use strict";var h=function(i,e){this.widget="",this.$element=t(i),this.defaultTime=e.defaultTime,this.disableFocus=e.disableFocus,this.isOpen=e.isOpen,this.minuteStep=e.minuteStep,this.modalBackdrop=e.modalBackdrop,this.secondStep=e.secondStep,this.showInputs=e.showInputs,this.showMeridian=e.showMeridian,this.showSeconds=e.showSeconds,this.template=e.template,this.appendWidgetTo=e.appendWidgetTo,this._init()};h.prototype={constructor:h,_init:function(){var i=this;this.$element.parent().hasClass("input-append")||this.$element.parent().hasClass("input-prepend")?(this.$element.parent(".input-append, .input-prepend").find(".add-on").on({"click.timepicker":t.proxy(this.showWidget,this)}),this.$element.on({"focus.timepicker":t.proxy(this.highlightUnit,this),"click.timepicker":t.proxy(this.highlightUnit,this),"keydown.timepicker":t.proxy(this.elementKeydown,this),"blur.timepicker":t.proxy(this.blurElement,this)})):this.template?this.$element.on({"focus.timepicker":t.proxy(this.showWidget,this),"click.timepicker":t.proxy(this.showWidget,this),"blur.timepicker":t.proxy(this.blurElement,this)}):this.$element.on({"focus.timepicker":t.proxy(this.highlightUnit,this),"click.timepicker":t.proxy(this.highlightUnit,this),"keydown.timepicker":t.proxy(this.elementKeydown,this),"blur.timepicker":t.proxy(this.blurElement,this)}),this.$widget=this.template!==!1?t(this.getTemplate()).prependTo(this.$element.parents(this.appendWidgetTo)).on("click",t.proxy(this.widgetClick,this)):!1,this.showInputs&&this.$widget!==!1&&this.$widget.find("input").each(function(){t(this).on({"click.timepicker":function(){t(this).select()},"keydown.timepicker":t.proxy(i.widgetKeydown,i)})}),this.setDefaultTime(this.defaultTime)},blurElement:function(){this.highlightedUnit=s,this.updateFromElementVal()},decrementHour:function(){if(this.showMeridian)if(1===this.hour)this.hour=12;else{if(12===this.hour)return this.hour--,this.toggleMeridian();if(0===this.hour)return this.hour=11,this.toggleMeridian();this.hour--}else 0===this.hour?this.hour=23:this.hour--;this.update()},decrementMinute:function(t){var i;i=t?this.minute-t:this.minute-this.minuteStep,0>i?(this.decrementHour(),this.minute=i+60):this.minute=i,this.update()},decrementSecond:function(){var t=this.second-this.secondStep;0>t?(this.decrementMinute(!0),this.second=t+60):this.second=t,this.update()},elementKeydown:function(t){switch(t.keyCode){case 9:switch(this.updateFromElementVal(),this.highlightedUnit){case"hour":t.preventDefault(),this.highlightNextUnit();break;case"minute":(this.showMeridian||this.showSeconds)&&(t.preventDefault(),this.highlightNextUnit());break;case"second":this.showMeridian&&(t.preventDefault(),this.highlightNextUnit())}break;case 27:this.updateFromElementVal();break;case 37:t.preventDefault(),this.highlightPrevUnit(),this.updateFromElementVal();break;case 38:switch(t.preventDefault(),this.highlightedUnit){case"hour":this.incrementHour(),this.highlightHour();break;case"minute":this.incrementMinute(),this.highlightMinute();break;case"second":this.incrementSecond(),this.highlightSecond();break;case"meridian":this.toggleMeridian(),this.highlightMeridian()}break;case 39:t.preventDefault(),this.updateFromElementVal(),this.highlightNextUnit();break;case 40:switch(t.preventDefault(),this.highlightedUnit){case"hour":this.decrementHour(),this.highlightHour();break;case"minute":this.decrementMinute(),this.highlightMinute();break;case"second":this.decrementSecond(),this.highlightSecond();break;case"meridian":this.toggleMeridian(),this.highlightMeridian()}}},formatTime:function(t,i,e,s){return t=10>t?"0"+t:t,i=10>i?"0"+i:i,e=10>e?"0"+e:e,t+":"+i+(this.showSeconds?":"+e:"")+(this.showMeridian?" "+s:"")},getCursorPosition:function(){var t=this.$element.get(0);if("selectionStart"in t)return t.selectionStart;if(e.selection){t.focus();var i=e.selection.createRange(),s=e.selection.createRange().text.length;return i.moveStart("character",-t.value.length),i.text.length-s}},getTemplate:function(){var t,i,e,s,h,n;switch(this.showInputs?(i='',e='',s='',h=''):(i='',e='',s='',h=''),n=''+(this.showSeconds?'':"")+(this.showMeridian?'':"")+""+""+" "+''+" "+(this.showSeconds?'":"")+(this.showMeridian?'":"")+""+""+''+''+''+(this.showSeconds?'':"")+(this.showMeridian?'':"")+""+"
           
        "+i+":"+e+":'+s+" '+h+"
          
        ",this.template){case"modal":t='";break;case"dropdown":t='"}return t},getTime:function(){return this.formatTime(this.hour,this.minute,this.second,this.meridian)},hideWidget:function(){this.isOpen!==!1&&(this.showInputs&&this.updateFromWidgetInputs(),this.$element.trigger({type:"hide.timepicker",time:{value:this.getTime(),hours:this.hour,minutes:this.minute,seconds:this.second,meridian:this.meridian}}),"modal"===this.template&&this.$widget.modal?this.$widget.modal("hide"):this.$widget.removeClass("open"),t(e).off("mousedown.timepicker"),this.isOpen=!1)},highlightUnit:function(){this.position=this.getCursorPosition(),this.position>=0&&2>=this.position?this.highlightHour():this.position>=3&&5>=this.position?this.highlightMinute():this.position>=6&&8>=this.position?this.showSeconds?this.highlightSecond():this.highlightMeridian():this.position>=9&&11>=this.position&&this.highlightMeridian()},highlightNextUnit:function(){switch(this.highlightedUnit){case"hour":this.highlightMinute();break;case"minute":this.showSeconds?this.highlightSecond():this.showMeridian?this.highlightMeridian():this.highlightHour();break;case"second":this.showMeridian?this.highlightMeridian():this.highlightHour();break;case"meridian":this.highlightHour()}},highlightPrevUnit:function(){switch(this.highlightedUnit){case"hour":this.highlightMeridian();break;case"minute":this.highlightHour();break;case"second":this.highlightMinute();break;case"meridian":this.showSeconds?this.highlightSecond():this.highlightMinute()}},highlightHour:function(){var t=this.$element.get(0);this.highlightedUnit="hour",t.setSelectionRange&&setTimeout(function(){t.setSelectionRange(0,2)},0)},highlightMinute:function(){var t=this.$element.get(0);this.highlightedUnit="minute",t.setSelectionRange&&setTimeout(function(){t.setSelectionRange(3,5)},0)},highlightSecond:function(){var t=this.$element.get(0);this.highlightedUnit="second",t.setSelectionRange&&setTimeout(function(){t.setSelectionRange(6,8)},0)},highlightMeridian:function(){var t=this.$element.get(0);this.highlightedUnit="meridian",t.setSelectionRange&&(this.showSeconds?setTimeout(function(){t.setSelectionRange(9,11)},0):setTimeout(function(){t.setSelectionRange(6,8)},0))},incrementHour:function(){if(this.showMeridian){if(11===this.hour)return this.hour++,this.toggleMeridian();12===this.hour&&(this.hour=0)}return 23===this.hour?(this.hour=0,s):(this.hour++,this.update(),s)},incrementMinute:function(t){var i;i=t?this.minute+t:this.minute+this.minuteStep-this.minute%this.minuteStep,i>59?(this.incrementHour(),this.minute=i-60):this.minute=i,this.update()},incrementSecond:function(){var t=this.second+this.secondStep-this.second%this.secondStep;t>59?(this.incrementMinute(!0),this.second=t-60):this.second=t,this.update()},remove:function(){t("document").off(".timepicker"),this.$widget&&this.$widget.remove(),delete this.$element.data().timepicker},setDefaultTime:function(t){if(this.$element.val())this.updateFromElementVal();else if("current"===t){var i=new Date,e=i.getHours(),s=Math.floor(i.getMinutes()/this.minuteStep)*this.minuteStep,h=Math.floor(i.getSeconds()/this.secondStep)*this.secondStep,n="AM";this.showMeridian&&(0===e?e=12:e>=12?(e>12&&(e-=12),n="PM"):n="AM"),this.hour=e,this.minute=s,this.second=h,this.meridian=n,this.update()}else t===!1?(this.hour=0,this.minute=0,this.second=0,this.meridian="AM"):this.setTime(t)},setTime:function(t){var i,e;this.showMeridian?(i=t.split(" "),e=i[0].split(":"),this.meridian=i[1]):e=t.split(":"),this.hour=parseInt(e[0],10),this.minute=parseInt(e[1],10),this.second=parseInt(e[2],10),isNaN(this.hour)&&(this.hour=0),isNaN(this.minute)&&(this.minute=0),this.showMeridian?(this.hour>12?this.hour=12:1>this.hour&&(this.hour=12),"am"===this.meridian||"a"===this.meridian?this.meridian="AM":("pm"===this.meridian||"p"===this.meridian)&&(this.meridian="PM"),"AM"!==this.meridian&&"PM"!==this.meridian&&(this.meridian="AM")):this.hour>=24?this.hour=23:0>this.hour&&(this.hour=0),0>this.minute?this.minute=0:this.minute>=60&&(this.minute=59),this.showSeconds&&(isNaN(this.second)?this.second=0:0>this.second?this.second=0:this.second>=60&&(this.second=59)),this.update()},showWidget:function(){if(!this.isOpen&&!this.$element.is(":disabled")){var i=this;t(e).on("mousedown.timepicker",function(e){0===t(e.target).closest(".bootstrap-timepicker-widget").length&&i.hideWidget()}),this.$element.trigger({type:"show.timepicker",time:{value:this.getTime(),hours:this.hour,minutes:this.minute,seconds:this.second,meridian:this.meridian}}),this.disableFocus&&this.$element.blur(),this.updateFromElementVal(),"modal"===this.template&&this.$widget.modal?this.$widget.modal("show").on("hidden",t.proxy(this.hideWidget,this)):this.isOpen===!1&&this.$widget.addClass("open"),this.isOpen=!0}},toggleMeridian:function(){this.meridian="AM"===this.meridian?"PM":"AM",this.update()},update:function(){this.$element.trigger({type:"changeTime.timepicker",time:{value:this.getTime(),hours:this.hour,minutes:this.minute,seconds:this.second,meridian:this.meridian}}),this.updateElement(),this.updateWidget()},updateElement:function(){this.$element.val(this.getTime()).change()},updateFromElementVal:function(){var t=this.$element.val();t&&this.setTime(t)},updateWidget:function(){if(this.$widget!==!1){var t=10>this.hour?"0"+this.hour:this.hour,i=10>this.minute?"0"+this.minute:this.minute,e=10>this.second?"0"+this.second:this.second;this.showInputs?(this.$widget.find("input.bootstrap-timepicker-hour").val(t),this.$widget.find("input.bootstrap-timepicker-minute").val(i),this.showSeconds&&this.$widget.find("input.bootstrap-timepicker-second").val(e),this.showMeridian&&this.$widget.find("input.bootstrap-timepicker-meridian").val(this.meridian)):(this.$widget.find("span.bootstrap-timepicker-hour").text(t),this.$widget.find("span.bootstrap-timepicker-minute").text(i),this.showSeconds&&this.$widget.find("span.bootstrap-timepicker-second").text(e),this.showMeridian&&this.$widget.find("span.bootstrap-timepicker-meridian").text(this.meridian))}},updateFromWidgetInputs:function(){if(this.$widget!==!1){var i=t("input.bootstrap-timepicker-hour",this.$widget).val()+":"+t("input.bootstrap-timepicker-minute",this.$widget).val()+(this.showSeconds?":"+t("input.bootstrap-timepicker-second",this.$widget).val():"")+(this.showMeridian?" "+t("input.bootstrap-timepicker-meridian",this.$widget).val():"");this.setTime(i)}},widgetClick:function(i){i.stopPropagation(),i.preventDefault();var e=t(i.target).closest("a").data("action");e&&this[e]()},widgetKeydown:function(i){var e=t(i.target).closest("input"),s=e.attr("name");switch(i.keyCode){case 9:if(this.showMeridian){if("meridian"===s)return this.hideWidget()}else if(this.showSeconds){if("second"===s)return this.hideWidget()}else if("minute"===s)return this.hideWidget();this.updateFromWidgetInputs();break;case 27:this.hideWidget();break;case 38:switch(i.preventDefault(),s){case"hour":this.incrementHour();break;case"minute":this.incrementMinute();break;case"second":this.incrementSecond();break;case"meridian":this.toggleMeridian()}break;case 40:switch(i.preventDefault(),s){case"hour":this.decrementHour();break;case"minute":this.decrementMinute();break;case"second":this.decrementSecond();break;case"meridian":this.toggleMeridian()}}}},t.fn.timepicker=function(i){var e=Array.apply(null,arguments);return e.shift(),this.each(function(){var s=t(this),n=s.data("timepicker"),o="object"==typeof i&&i;n||s.data("timepicker",n=new h(this,t.extend({},t.fn.timepicker.defaults,o,t(this).data()))),"string"==typeof i&&n[i].apply(n,e)})},t.fn.timepicker.defaults={defaultTime:"current",disableFocus:!1,isOpen:!1,minuteStep:15,modalBackdrop:!1,secondStep:15,showSeconds:!1,showInputs:!0,showMeridian:!0,template:"dropdown",appendWidgetTo:".bootstrap-timepicker"},t.fn.timepicker.Constructor=h})(jQuery,window,document);assets/plugins/bootstrap-timepicker/spec/js/TimepickerSpec.js000064400000026523152510440110020512 0ustar00describe('Timepicker feature', function() { 'use strict'; var $input1, $input2, $input3, $timepicker1, $timepicker2, $timepicker3, tp1, tp2, tp3; beforeEach(function () { loadFixtures('timepicker.html'); $input1 = $('#timepicker1'); $timepicker1 = $input1.timepicker(); tp1 = $timepicker1.data('timepicker'); $input2 = $('#timepicker2'); $timepicker2 = $input2.timepicker({ template: 'modal', showSeconds: true, minuteStep: 30, secondStep: 30, defaultTime: false }); tp2 = $timepicker2.data('timepicker'); $input3 = $('#timepicker3'); $timepicker3 = $input3.timepicker({ showMeridian: false, showSeconds: true, defaultTime: '13:25:15' }); tp3 = $timepicker3.data('timepicker'); }); afterEach(function () { if ($input1.data('timepicker') !== undefined) { $input1.data('timepicker').remove(); } if ($input2.data('timepicker') !== undefined) { $input2.data('timepicker').remove(); } if ($input3.data('timepicker') !== undefined) { $input3.data('timepicker').remove(); } $input1.remove(); $input2.remove(); $input3.remove(); }); it('should be available on the jquery object', function() { expect($.fn.timepicker).toBeDefined(); }); it('should be chainable', function() { expect($timepicker1).toBe($input1); }); it('should have sensible defaults', function() { expect(tp1.defaultTime).toBeTruthy(); expect(tp1.minuteStep).toBe(15); expect(tp1.secondStep).toBe(15); expect(tp1.disableFocus).toBe(false); expect(tp1.showSeconds).toBe(false); expect(tp1.showInputs).toBe(true); expect(tp1.showMeridian).toBe(true); expect(tp1.template).toBe('dropdown'); expect(tp1.modalBackdrop).toBe(false); expect(tp1.modalBackdrop).toBe(false); expect(tp1.isOpen).toBe(false); }); it('should allow user to configure defaults', function() { expect(tp2.template).toBe('modal'); expect(tp2.minuteStep).toBe(30); }); it('should be configurable with data attributes', function() { $('body').append('
        12) { hour = hour - 12; } expect(tp1.hour).toBe(hour); expect(tp1.minute).toBe(minute); }); it('should not override time with current time if value is already set', function() { $('body').append('
        '); var $customInput = $('#timepickerCustomInput').timepicker(), tpCustom = $customInput.data('timepicker'); expect($customInput.val()).toBe('12:15 AM'); tpCustom.remove(); $('#timepickerCustom').remove(); }); it('should have no value if defaultTime is set to false', function() { expect($input2.val()).toBe(''); }); it('should be able to set default time with config option', function() { expect(tp3.getTime()).toBe('13:25:15'); }); it('should update the element and widget with the setTime method', function() { tp2.setTime('09:15:20 AM'); expect(tp2.hour).toBe(9); expect(tp2.minute).toBe(15); expect(tp2.second).toBe(20); expect(tp2.meridian).toBe('AM'); expect($input2.val()).toBe('09:15:20 AM'); expect(tp2.$widget.find('.bootstrap-timepicker-hour').val()).toBe('09'); expect(tp2.$widget.find('.bootstrap-timepicker-minute').val()).toBe('15'); expect(tp2.$widget.find('.bootstrap-timepicker-second').val()).toBe('20'); expect(tp2.$widget.find('.bootstrap-timepicker-meridian').val()).toBe('AM'); }); it('should be able to format time values into a string', function() { expect(tp2.formatTime(3, 15, 45, 'PM')).toBe('03:15:45 PM'); }); it('should be able get & set the pickers time', function() { tp3.setTime('23:15:20'); expect(tp3.getTime()).toBe('23:15:20'); }); it('should update picker on blur', function() { $input1.val('10:25 AM'); expect(tp1.getTime()).not.toBe('10:25 AM'); $input1.trigger('blur'); expect(tp1.getTime()).toBe('10:25 AM'); }); it('should update element with updateElement method', function() { tp1.hour = 10; tp1.minute = 30; tp1.meridian = 'PM'; tp1.updateElement(); expect($input1.val()).toBe('10:30 PM'); }); it('should update widget with updateWidget method', function() { tp2.hour = 10; tp2.minute = 30; tp2.second = 15; expect(tp2.$widget.find('.bootstrap-timepicker-hour').val()).not.toBe('10'); expect(tp2.$widget.find('.bootstrap-timepicker-minute').val()).not.toBe('30'); expect(tp2.$widget.find('.bootstrap-timepicker-second').val()).not.toBe('15'); tp2.updateWidget(); expect(tp2.$widget.find('.bootstrap-timepicker-hour').val()).toBe('10'); expect(tp2.$widget.find('.bootstrap-timepicker-minute').val()).toBe('30'); expect(tp2.$widget.find('.bootstrap-timepicker-second').val()).toBe('15'); }); it('should update picker with updateFromElementVal method', function() { tp1.hour = 12; tp1.minute = 12; tp1.meridian = 'PM'; tp1.update(); $input1.val('10:30 AM'); expect(tp1.$widget.find('.bootstrap-timepicker-hour').val()).not.toBe('10'); expect(tp1.$widget.find('.bootstrap-timepicker-minute').val()).not.toBe('30'); expect(tp1.$widget.find('.bootstrap-timepicker-meridian').val()).not.toBe('AM'); expect(tp1.hour).not.toBe(10); expect(tp1.minute).not.toBe(30); expect(tp1.meridian).not.toBe('AM'); tp1.updateFromElementVal(); expect(tp1.$widget.find('.bootstrap-timepicker-hour').val()).toBe('10'); expect(tp1.$widget.find('.bootstrap-timepicker-minute').val()).toBe('30'); expect(tp1.$widget.find('.bootstrap-timepicker-meridian').val()).toBe('AM'); expect(tp1.hour).toBe(10); expect(tp1.minute).toBe(30); expect(tp1.meridian).toBe('AM'); }); it('should update picker with updateFromWidgetInputs method', function() { tp1.hour = 12; tp1.minute = 12; tp1.meridian = 'PM'; tp1.update(); tp1.$widget.find('.bootstrap-timepicker-hour').val(10); tp1.$widget.find('.bootstrap-timepicker-minute').val(30); tp1.$widget.find('.bootstrap-timepicker-meridian').val('AM'); expect(tp1.hour).not.toBe(10); expect(tp1.minute).not.toBe(30); expect(tp1.meridian).not.toBe('AM'); expect($input1.val()).not.toBe('10:30 AM'); tp1.updateFromWidgetInputs(); expect(tp1.hour).toBe(10); expect(tp1.minute).toBe(30); expect(tp1.meridian).toBe('AM'); expect($input1.val()).toBe('10:30 AM'); }); it('should increment hours with incrementHour method', function() { tp1.hour = 9; tp1.incrementHour(); expect(tp1.hour).toBe(10); }); it('should decrement hours with decrementHour method', function() { tp1.hour = 9; tp1.decrementHour(); expect(tp1.hour).toBe(8); }); it('should toggle meridian if hour goes past 12', function() { $input1.val('11:00 AM'); tp1.updateFromElementVal(); tp1.incrementHour(); expect(tp1.hour).toBe(12); expect(tp1.minute).toBe(0); expect(tp1.meridian).toBe('PM'); }); it('should toggle meridian if hour goes below 1', function() { $input1.val('11:00 AM'); tp1.updateFromElementVal(); tp1.incrementHour(); expect(tp1.hour).toBe(12); expect(tp1.minute).toBe(0); expect(tp1.meridian).toBe('PM'); }); it('should set hour to 1 if hour increments on 12 for 12h clock', function() { $input1.val('11:15 PM'); tp1.updateFromElementVal(); tp1.incrementHour(); tp1.incrementHour(); expect(tp1.getTime()).toBe('01:15 AM'); }); it('should set hour to 0 if hour increments on 23 for 24h clock', function() { $input3.val('22:15:30'); tp3.updateFromElementVal(); tp3.incrementHour(); tp3.incrementHour(); expect(tp3.hour).toBe(0); expect(tp3.minute).toBe(15); expect(tp3.second).toBe(30); }); it('should increment minutes with incrementMinute method', function() { tp1.minute = 10; tp1.incrementMinute(); expect(tp1.minute).toBe(15); tp2.minute = 0; tp2.incrementMinute(); expect(tp2.minute).toBe(30); }); it('should decrement minutes with decrementMinute method', function() { tp1.hour = 11; tp1.minute = 0; tp1.decrementMinute(); expect(tp1.hour).toBe(10); expect(tp1.minute).toBe(45); tp2.hour = 11; tp2.minute = 0; tp2.decrementMinute(); expect(tp2.hour).toBe(10); expect(tp2.minute).toBe(30); }); it('should increment hour if minutes increment past 59', function() { $input1.val('11:55 AM'); tp1.updateFromElementVal(); tp1.incrementMinute(); tp1.update(); expect(tp1.getTime()).toBe('12:00 PM'); }); it('should toggle meridian with toggleMeridian method', function() { tp1.meridian = 'PM'; tp1.toggleMeridian(); expect(tp1.meridian).toBe('AM'); }); it('should increment seconds with incrementSecond method', function() { tp1.second = 0; tp1.incrementSecond(); expect(tp1.second).toBe(15); tp2.second = 0; tp2.incrementSecond(); expect(tp2.second).toBe(30); }); it('should decrement seconds with decrementSecond method', function() { tp2.hour = 11; tp2.minute = 0; tp2.second = 0; tp2.decrementSecond(); expect(tp2.minute).toBe(59); expect(tp2.second).toBe(30); }); it('should increment minute by 1 if seconds increment past 59', function() { $input2.val('11:55:30 AM'); tp2.updateFromElementVal(); tp2.incrementSecond(); tp2.update(); expect(tp2.getTime()).toBe('11:56:00 AM'); }); it('should not have any remaining events if remove is called', function() { var hideEvents = 0; $input1.on('hide.timepicker', function() { hideEvents++; }); $input1.parents('div').find('.add-on').trigger('click'); $('body').trigger('mousedown'); expect(hideEvents).toBe(1); tp1.remove(); tp2.remove(); tp3.remove(); $('body').trigger('click'); expect(hideEvents).toBe(1); }); it('should not have the widget in the DOM if remove method is called', function() { expect($('body')).toContain('.bootstrap-timepicker-widget'); tp1.remove(); tp2.remove(); tp3.remove(); expect($('body')).not.toContain('.bootstrap-timepicker-widget'); }); it('should be able to set time from a script', function() { $input1.timepicker('setTime', '12:35 PM'); tp1.update(); expect(tp1.getTime()).toBe('12:35 PM'); }); it('should be able to opened from script', function() { expect(tp1.isOpen).toBe(false); $input1.timepicker('showWidget'); expect(tp1.isOpen).toBe(true); }); }); assets/plugins/bootstrap-timepicker/spec/js/fixtures/timepicker.html000064400000001006152510440110022125 0ustar00
        assets/plugins/bootstrap-timepicker/spec/js/helpers/SpecHelper.js000064400000000001152510440110021256 0ustar00 assets/plugins/bootstrap-timepicker/spec/js/helpers/jasmine-jquery.js000064400000036421152510440110022206 0ustar00var readFixtures = function() { return jasmine.getFixtures().proxyCallTo_('read', arguments) } var preloadFixtures = function() { jasmine.getFixtures().proxyCallTo_('preload', arguments) } var loadFixtures = function() { jasmine.getFixtures().proxyCallTo_('load', arguments) } var appendLoadFixtures = function() { jasmine.getFixtures().proxyCallTo_('appendLoad', arguments) } var setFixtures = function(html) { jasmine.getFixtures().proxyCallTo_('set', arguments) } var appendSetFixtures = function() { jasmine.getFixtures().proxyCallTo_('appendSet', arguments) } var sandbox = function(attributes) { return jasmine.getFixtures().sandbox(attributes) } var spyOnEvent = function(selector, eventName) { return jasmine.JQuery.events.spyOn(selector, eventName) } var preloadStyleFixtures = function() { jasmine.getStyleFixtures().proxyCallTo_('preload', arguments) } var loadStyleFixtures = function() { jasmine.getStyleFixtures().proxyCallTo_('load', arguments) } var appendLoadStyleFixtures = function() { jasmine.getStyleFixtures().proxyCallTo_('appendLoad', arguments) } var setStyleFixtures = function(html) { jasmine.getStyleFixtures().proxyCallTo_('set', arguments) } var appendSetStyleFixtures = function(html) { jasmine.getStyleFixtures().proxyCallTo_('appendSet', arguments) } var loadJSONFixtures = function() { return jasmine.getJSONFixtures().proxyCallTo_('load', arguments) } var getJSONFixture = function(url) { return jasmine.getJSONFixtures().proxyCallTo_('read', arguments)[url] } jasmine.spiedEventsKey = function (selector, eventName) { return [$(selector).selector, eventName].toString() } jasmine.getFixtures = function() { return jasmine.currentFixtures_ = jasmine.currentFixtures_ || new jasmine.Fixtures() } jasmine.getStyleFixtures = function() { return jasmine.currentStyleFixtures_ = jasmine.currentStyleFixtures_ || new jasmine.StyleFixtures() } jasmine.Fixtures = function() { this.containerId = 'jasmine-fixtures' this.fixturesCache_ = {} this.fixturesPath = 'spec/js/fixtures' } jasmine.Fixtures.prototype.set = function(html) { this.cleanUp() this.createContainer_(html) } jasmine.Fixtures.prototype.appendSet= function(html) { this.addToContainer_(html) } jasmine.Fixtures.prototype.preload = function() { this.read.apply(this, arguments) } jasmine.Fixtures.prototype.load = function() { this.cleanUp() this.createContainer_(this.read.apply(this, arguments)) } jasmine.Fixtures.prototype.appendLoad = function() { this.addToContainer_(this.read.apply(this, arguments)) } jasmine.Fixtures.prototype.read = function() { var htmlChunks = [] var fixtureUrls = arguments for(var urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++) { htmlChunks.push(this.getFixtureHtml_(fixtureUrls[urlIndex])) } return htmlChunks.join('') } jasmine.Fixtures.prototype.clearCache = function() { this.fixturesCache_ = {} } jasmine.Fixtures.prototype.cleanUp = function() { $('#' + this.containerId).remove() } jasmine.Fixtures.prototype.sandbox = function(attributes) { var attributesToSet = attributes || {} return $('
        ').attr(attributesToSet) } jasmine.Fixtures.prototype.createContainer_ = function(html) { var container if(html instanceof $) { container = $('
        ') container.html(html) } else { container = '
        ' + html + '
        ' } $(document.body).append(container) } jasmine.Fixtures.prototype.addToContainer_ = function(html){ var container = $(document.body).find('#'+this.containerId).append(html) if(!container.length){ this.createContainer_(html) } } jasmine.Fixtures.prototype.getFixtureHtml_ = function(url) { if (typeof this.fixturesCache_[url] === 'undefined') { this.loadFixtureIntoCache_(url) } return this.fixturesCache_[url] } jasmine.Fixtures.prototype.loadFixtureIntoCache_ = function(relativeUrl) { var url = this.makeFixtureUrl_(relativeUrl) var request = $.ajax({ type: "GET", url: url + "?" + new Date().getTime(), async: false }) this.fixturesCache_[relativeUrl] = request.responseText } jasmine.Fixtures.prototype.makeFixtureUrl_ = function(relativeUrl){ return this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl } jasmine.Fixtures.prototype.proxyCallTo_ = function(methodName, passedArguments) { return this[methodName].apply(this, passedArguments) } jasmine.StyleFixtures = function() { this.fixturesCache_ = {} this.fixturesNodes_ = [] this.fixturesPath = 'spec/javascripts/fixtures' } jasmine.StyleFixtures.prototype.set = function(css) { this.cleanUp() this.createStyle_(css) } jasmine.StyleFixtures.prototype.appendSet = function(css) { this.createStyle_(css) } jasmine.StyleFixtures.prototype.preload = function() { this.read_.apply(this, arguments) } jasmine.StyleFixtures.prototype.load = function() { this.cleanUp() this.createStyle_(this.read_.apply(this, arguments)) } jasmine.StyleFixtures.prototype.appendLoad = function() { this.createStyle_(this.read_.apply(this, arguments)) } jasmine.StyleFixtures.prototype.cleanUp = function() { while(this.fixturesNodes_.length) { this.fixturesNodes_.pop().remove() } } jasmine.StyleFixtures.prototype.createStyle_ = function(html) { var styleText = $('
        ').html(html).text(), style = $('') this.fixturesNodes_.push(style) $('head').append(style) } jasmine.StyleFixtures.prototype.clearCache = jasmine.Fixtures.prototype.clearCache jasmine.StyleFixtures.prototype.read_ = jasmine.Fixtures.prototype.read jasmine.StyleFixtures.prototype.getFixtureHtml_ = jasmine.Fixtures.prototype.getFixtureHtml_ jasmine.StyleFixtures.prototype.loadFixtureIntoCache_ = jasmine.Fixtures.prototype.loadFixtureIntoCache_ jasmine.StyleFixtures.prototype.makeFixtureUrl_ = jasmine.Fixtures.prototype.makeFixtureUrl_ jasmine.StyleFixtures.prototype.proxyCallTo_ = jasmine.Fixtures.prototype.proxyCallTo_ jasmine.getJSONFixtures = function() { return jasmine.currentJSONFixtures_ = jasmine.currentJSONFixtures_ || new jasmine.JSONFixtures() } jasmine.JSONFixtures = function() { this.fixturesCache_ = {} this.fixturesPath = 'spec/javascripts/fixtures/json' } jasmine.JSONFixtures.prototype.load = function() { this.read.apply(this, arguments) return this.fixturesCache_ } jasmine.JSONFixtures.prototype.read = function() { var fixtureUrls = arguments for(var urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++) { this.getFixtureData_(fixtureUrls[urlIndex]) } return this.fixturesCache_ } jasmine.JSONFixtures.prototype.clearCache = function() { this.fixturesCache_ = {} } jasmine.JSONFixtures.prototype.getFixtureData_ = function(url) { this.loadFixtureIntoCache_(url) return this.fixturesCache_[url] } jasmine.JSONFixtures.prototype.loadFixtureIntoCache_ = function(relativeUrl) { var self = this var url = this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl $.ajax({ async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded cache: false, dataType: 'json', url: url, success: function(data) { self.fixturesCache_[relativeUrl] = data }, fail: function(jqXHR, status, errorThrown) { throw Error('JSONFixture could not be loaded: ' + url + ' (status: ' + status + ', message: ' + errorThrown.message + ')') } }) } jasmine.JSONFixtures.prototype.proxyCallTo_ = function(methodName, passedArguments) { return this[methodName].apply(this, passedArguments) } jasmine.JQuery = function() {} jasmine.JQuery.browserTagCaseIndependentHtml = function(html) { return $('
        ').append(html).html() } jasmine.JQuery.elementToString = function(element) { var domEl = $(element).get(0) if (domEl == undefined || domEl.cloneNode) return $('
        ').append($(element).clone()).html() else return element.toString() } jasmine.JQuery.matchersClass = {} !function(namespace) { var data = { spiedEvents: {}, handlers: [] } namespace.events = { spyOn: function(selector, eventName) { var handler = function(e) { data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] = e } $(selector).bind(eventName, handler) data.handlers.push(handler) return { selector: selector, eventName: eventName, handler: handler, reset: function(){ delete data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] } } }, wasTriggered: function(selector, eventName) { return !!(data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]) }, wasPrevented: function(selector, eventName) { var e; return (e = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]) && e.isDefaultPrevented() }, cleanUp: function() { data.spiedEvents = {} data.handlers = [] } } }(jasmine.JQuery) !function(){ var jQueryMatchers = { toHaveClass: function(className) { return this.actual.hasClass(className) }, toHaveCss: function(css){ for (var prop in css){ if (this.actual.css(prop) !== css[prop]) return false } return true }, toBeVisible: function() { return this.actual.is(':visible') }, toBeHidden: function() { return this.actual.is(':hidden') }, toBeSelected: function() { return this.actual.is(':selected') }, toBeChecked: function() { return this.actual.is(':checked') }, toBeEmpty: function() { return this.actual.is(':empty') }, toExist: function() { return $(document).find(this.actual).length }, toHaveLength: function(length) { return this.actual.length === length }, toHaveAttr: function(attributeName, expectedAttributeValue) { return hasProperty(this.actual.attr(attributeName), expectedAttributeValue) }, toHaveProp: function(propertyName, expectedPropertyValue) { return hasProperty(this.actual.prop(propertyName), expectedPropertyValue) }, toHaveId: function(id) { return this.actual.attr('id') == id }, toHaveHtml: function(html) { return this.actual.html() == jasmine.JQuery.browserTagCaseIndependentHtml(html) }, toContainHtml: function(html){ var actualHtml = this.actual.html() var expectedHtml = jasmine.JQuery.browserTagCaseIndependentHtml(html) return (actualHtml.indexOf(expectedHtml) >= 0) }, toHaveText: function(text) { var trimmedText = $.trim(this.actual.text()) if (text && $.isFunction(text.test)) { return text.test(trimmedText) } else { return trimmedText == text } }, toHaveValue: function(value) { return this.actual.val() == value }, toHaveData: function(key, expectedValue) { return hasProperty(this.actual.data(key), expectedValue) }, toBe: function(selector) { return this.actual.is(selector) }, toContain: function(selector) { return this.actual.find(selector).length }, toBeDisabled: function(selector){ return this.actual.is(':disabled') }, toBeFocused: function(selector) { return this.actual[0] === this.actual[0].ownerDocument.activeElement }, toHandle: function(event) { var events = $._data(this.actual.get(0), "events") if(!events || !event || typeof event !== "string") { return false } var namespaces = event.split(".") var eventType = namespaces.shift() var sortedNamespaces = namespaces.slice(0).sort() var namespaceRegExp = new RegExp("(^|\\.)" + sortedNamespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") if(events[eventType] && namespaces.length) { for(var i = 0; i < events[eventType].length; i++) { var namespace = events[eventType][i].namespace if(namespaceRegExp.test(namespace)) { return true } } } else { return events[eventType] && events[eventType].length > 0 } }, // tests the existence of a specific event binding + handler toHandleWith: function(eventName, eventHandler) { var stack = $._data(this.actual.get(0), "events")[eventName] for (var i = 0; i < stack.length; i++) { if (stack[i].handler == eventHandler) return true } return false } } var hasProperty = function(actualValue, expectedValue) { if (expectedValue === undefined) return actualValue !== undefined return actualValue == expectedValue } var bindMatcher = function(methodName) { var builtInMatcher = jasmine.Matchers.prototype[methodName] jasmine.JQuery.matchersClass[methodName] = function() { if (this.actual && (this.actual instanceof $ || jasmine.isDomNode(this.actual))) { this.actual = $(this.actual) var result = jQueryMatchers[methodName].apply(this, arguments) var element if (this.actual.get && (element = this.actual.get()[0]) && !$.isWindow(element) && element.tagName !== "HTML") this.actual = jasmine.JQuery.elementToString(this.actual) return result } if (builtInMatcher) { return builtInMatcher.apply(this, arguments) } return false } } for(var methodName in jQueryMatchers) { bindMatcher(methodName) } }() beforeEach(function() { this.addMatchers(jasmine.JQuery.matchersClass) this.addMatchers({ toHaveBeenTriggeredOn: function(selector) { this.message = function() { return [ "Expected event " + this.actual + " to have been triggered on " + selector, "Expected event " + this.actual + " not to have been triggered on " + selector ] } return jasmine.JQuery.events.wasTriggered(selector, this.actual) } }) this.addMatchers({ toHaveBeenTriggered: function(){ var eventName = this.actual.eventName, selector = this.actual.selector this.message = function() { return [ "Expected event " + eventName + " to have been triggered on " + selector, "Expected event " + eventName + " not to have been triggered on " + selector ] } return jasmine.JQuery.events.wasTriggered(selector, eventName) } }) this.addMatchers({ toHaveBeenPreventedOn: function(selector) { this.message = function() { return [ "Expected event " + this.actual + " to have been prevented on " + selector, "Expected event " + this.actual + " not to have been prevented on " + selector ] } return jasmine.JQuery.events.wasPrevented(selector, this.actual) } }) this.addMatchers({ toHaveBeenPrevented: function() { var eventName = this.actual.eventName, selector = this.actual.selector this.message = function() { return [ "Expected event " + eventName + " to have been prevented on " + selector, "Expected event " + eventName + " not to have been prevented on " + selector ] } return jasmine.JQuery.events.wasPrevented(selector, eventName) } }) }) afterEach(function() { jasmine.getFixtures().cleanUp() jasmine.getStyleFixtures().cleanUp() jasmine.JQuery.events.cleanUp() }) assets/plugins/bootstrap-timepicker/spec/js/KeyboardEventsSpec.js000064400000017611152510440110021341 0ustar00describe('Keyboard events feature', function() { 'use strict'; var $input1, $input2, $input3, $timepicker1, $timepicker2, $timepicker3, tp1, tp2, tp3; beforeEach(function () { loadFixtures('timepicker.html'); $input1 = $('#timepicker1'); $timepicker1 = $input1.timepicker(); tp1 = $timepicker1.data('timepicker'); $input2 = $('#timepicker2'); $timepicker2 = $input2.timepicker({ template: 'modal', showSeconds: true, minuteStep: 30, secondStep: 30, defaultTime: false }); tp2 = $timepicker2.data('timepicker'); $input3 = $('#timepicker3'); $timepicker3 = $input3.timepicker({ defaultTime: '23:15:20', showMeridian: false, showSeconds: true, template: false }); tp3 = $timepicker3.data('timepicker'); }); afterEach(function () { $input1.data('timepicker').remove(); $input2.data('timepicker').remove(); $input3.data('timepicker').remove(); $input1.remove(); $input2.remove(); $input3.remove(); }); it('should be able to control element by the arrow keys', function() { tp1.setTime('11:30 AM'); tp1.update(); $input1.trigger('focus'); if (tp1.highlightedUnit !== 'hour') { tp1.highlightHour(); } expect(tp1.highlightedUnit).toBe('hour', 'hour should be highlighted by default'); // hours $input1.trigger({ 'type': 'keydown', 'keyCode': 38 //up }); expect(tp1.getTime()).toBe('12:30 PM', '1'); $input1.trigger({ 'type': 'keydown', 'keyCode': 40 //down }); expect(tp1.getTime()).toBe('11:30 AM', '2'); expect(tp1.highlightedUnit).toBe('hour', 'hour should be highlighted'); $input1.trigger({ 'type': 'keydown', 'keyCode': 39 //right }); expect(tp1.highlightedUnit).toBe('minute', 'minute should be highlighted'); //minutes $input1.trigger({ 'type': 'keydown', 'keyCode': 38 //up }); expect(tp1.getTime()).toBe('11:45 AM', '3'); expect(tp1.highlightedUnit).toBe('minute', 'minute should be highlighted 1'); $input1.trigger({ 'type': 'keydown', 'keyCode': 40 //down }); expect(tp1.getTime()).toBe('11:30 AM', '4'); expect(tp1.highlightedUnit).toBe('minute', 'minute should be highlighted 2'); $input1.trigger({ 'type': 'keydown', 'keyCode': 39 //right }); expect(tp1.highlightedUnit).toBe('meridian', 'meridian should be highlighted'); //meridian $input1.trigger({ 'type': 'keydown', 'keyCode': 38 //up }); expect(tp1.getTime()).toBe('11:30 PM', '5'); expect(tp1.highlightedUnit).toBe('meridian', 'meridian should be highlighted'); $input1.trigger({ 'type': 'keydown', 'keyCode': 40 //down }); expect(tp1.getTime()).toBe('11:30 AM', '6'); expect(tp1.highlightedUnit).toBe('meridian', 'meridian should be highlighted'); $input1.trigger({ 'type': 'keydown', 'keyCode': 37 //left }); expect(tp1.highlightedUnit).toBe('minute', 'minutes should be highlighted'); // minutes $input1.trigger({ 'type': 'keydown', 'keyCode': 40 //down }); expect(tp1.getTime()).toBe('11:15 AM', '7'); $input1.trigger({ 'type': 'keydown', 'keyCode': 37 //left }); expect(tp1.highlightedUnit).toBe('hour', 'hours should be highlighted'); // hours $input1.trigger({ 'type': 'keydown', 'keyCode': 40 //down }); expect(tp1.getTime()).toBe('10:15 AM', '8'); $input1.trigger({ 'type': 'keydown', 'keyCode': 37 //left }); expect(tp1.highlightedUnit).toBe('meridian', 'meridian should be highlighted'); // meridian $input1.trigger({ 'type': 'keydown', 'keyCode': 40 //down }); expect(tp1.getTime()).toBe('10:15 PM', '9'); }); it('should be able to change time via widget inputs in a dropdown', function() { var $hourInput = tp1.$widget.find('input.bootstrap-timepicker-hour'), $minuteInput = tp1.$widget.find('input.bootstrap-timepicker-minute'), $meridianInput = tp1.$widget.find('input.bootstrap-timepicker-meridian'), eventCount = 0, time; tp1.setTime('9:30 AM'); tp1.update(); $input1.parents('div').find('.add-on').click(); $input1.timepicker().on('changeTime.timepicker', function(e) { eventCount++; time = e.time.value; }); expect(tp1.isOpen).toBe(true); $hourInput.trigger('focus'); $hourInput.autotype('{{back}}{{back}}11{{tab}}'); expect(tp1.hour).toBe(11); expect(eventCount).toBe(1, 'incorrect update events thrown'); expect(time).toBe('11:30 AM'); $minuteInput.autotype('{{back}}{{back}}45{{tab}}'); expect(tp1.minute).toBe(45); expect(eventCount).toBe(2, 'incorrect update events thrown'); expect(time).toBe('11:45 AM'); $meridianInput.autotype('{{back}}{{back}}pm{{tab}}'); expect(tp1.meridian).toBe('PM'); expect(eventCount).toBe(3, 'incorrect update events thrown'); expect(time).toBe('11:45 PM'); }); it('should still be empty if input is empty', function() { $input1.autotype('{{back}}{{back}}{{back}}{{back}}{{back}}{{back}}{{back}}{{back}}{{tab}}'); expect($input1.val()).toBe(''); }); it('should allow time to be changed via widget inputs in a modal', function() { //tp2.setTime('9:30 AM'); //tp2.update(); //$input2.parents('div').find('.add-on').click(); //var $hourInput = $('body').find('input.bootstrap-timepicker-hour'), //$minuteInput = $('body').find('input.bootstrap-timepicker-minute'), //$secondInput = $('body').find('input.bootstrap-timepicker-second'), //$meridianInput = $('body').find('input.bootstrap-timepicker-meridian'); //$hourInput.autotype('{{back}}{{back}}2'); //$hourInput.trigger({ //'type': 'keydown', //'keyCode': 9 //tab //}); //expect(tp2.getTime()).toBe('02:30:00 AM'); //$minuteInput.autotype('{{back}}{{back}}0'); //$minuteInput.trigger({ //'type': 'keydown', //'keyCode': 9 //tab //}); //expect(tp2.getTime()).toBe('02:00:00 AM'); //$secondInput.autotype('{{back}}{{back}}30'); //$secondInput.trigger({ //'type': 'keydown', //'keyCode': 9 //tab //}); //expect(tp2.getTime()).toBe('02:00:30 AM'); //$meridianInput.autotype('{{back}}{{back}}p'); //$meridianInput.trigger({ //'type': 'keydown', //'keyCode': 9 //tab //}); //expect(tp2.getTime()).toBe('02:00:30 PM'); }); it('should be 12:00 AM if 00:00 AM is entered', function() { //$input1.autotype('{{back}}{{back}}{{back}}{{back}}{{back}}{{back}}{{back}}{{back}}0:0 AM'); //$input1.trigger({ //'type': 'keydown', //'keyCode': 9 //tab //}); //expect(tp1.getTime()).toBe('12:00 AM'); }); it('should validate input', function() { //var $hourInput = tp1.$widget.find('input.bootstrap-timepicker-hour'), //$minuteInput = tp1.$widget.find('input.bootstrap-timepicker-minute'), //$meridianInput = tp1.$widget.find('input.bootstrap-timepicker-meridian'), //$input3 = tp3.$element; //tp1.setTime('11:30 AM'); //tp1.update(); //$hourInput.autotype('{{back}}{{back}}13'); //tp1.updateFromWidgetInputs(); //expect(tp1.getTime()).toBe('12:30 AM'); //$minuteInput.autotype('{{back}}{{back}}60'); //tp1.updateFromWidgetInputs(); //expect(tp1.getTime()).toBe('12:59 AM'); //$meridianInput.autotype('{{back}}{{back}}dk'); //tp1.updateFromWidgetInputs(); //expect(tp1.getTime()).toBe('12:59 AM'); //$meridianInput.autotype('{{back}}{{back}}p'); //tp1.updateFromWidgetInputs(); //expect(tp1.getTime()).toBe('12:59 PM'); //$input3.autotype('{{back}}{{back}}{{back}}{{back}}{{back}}{{back}}{{back}}{{back}}25:60:60'); //tp3.updateFromElementVal(); //expect(tp3.getTime()).toBe('23:59:59'); }); }); assets/plugins/bootstrap-timepicker/spec/js/MouseEventsSpec.js000064400000017041152510440110020666 0ustar00describe('Mouse events feature', function() { 'use strict'; var $input1, $input2, $input3, $input4, $timepicker1, $timepicker2, $timepicker3, $timepicker4, tp1, tp2, tp3, tp4; beforeEach(function () { loadFixtures('timepicker.html'); $input1 = $('#timepicker1'); $timepicker1 = $input1.timepicker(); tp1 = $timepicker1.data('timepicker'); $input2 = $('#timepicker2'); $timepicker2 = $input2.timepicker({ template: 'modal', showSeconds: true, minuteStep: 30, secondStep: 30, defaultTime: false }); tp2 = $timepicker2.data('timepicker'); $input3 = $('#timepicker3'); $timepicker3 = $input3.timepicker({ defaultTime: '23:15:20', showMeridian: false, showSeconds: true }); tp3 = $timepicker3.data('timepicker'); $input4 = $('#timepicker4'); $timepicker4 = $input4.timepicker({ minuteStep: 5, showInputs: false, showMeridian: true, template: 'modal', disableFocus: true }); tp4 = $timepicker4.data('timepicker'); }); afterEach(function () { $input1.data('timepicker').remove(); $input2.data('timepicker').remove(); $input3.data('timepicker').remove(); $input4.data('timepicker').remove(); $input1.remove(); $input2.remove(); $input3.remove(); $input4.remove(); }); it('should be shown and trigger show events on input click', function() { var showEvents = 0; $input1.on('show.timepicker', function() { showEvents++; }); $input1.parents('div').find('.add-on').trigger('click'); expect(tp1.isOpen).toBe(true); expect(showEvents).toBe(1); }); it('should be hidden and trigger hide events on click outside of widget', function() { var hideEvents = 0, time; $input1.val('11:30 AM'); $input1.on('hide.timepicker', function(e) { hideEvents++; time = e.time.value; }); $input1.parents('div').find('.add-on').trigger('click'); expect(tp1.isOpen).toBe(true); tp1.$widget.find('.bootstrap-timepicker-hour').trigger('mousedown'); $('body').trigger('mousedown'); expect(tp1.isOpen).toBe(false, 'widget is still open'); expect(hideEvents).toBe(1, 'hide event was not thrown once'); expect(time).toBe('11:30 AM'); }); it('should increment hour on button click', function() { tp1.setTime('11:30 AM'); tp1.update(); tp1.$widget.find('a[data-action="incrementHour"]').trigger('click'); expect(tp1.getTime()).toBe('12:30 PM'); tp2.$widget.find('a[data-action="incrementHour"]').trigger('click'); expect(tp2.getTime()).toBe('01:00:00 AM'); }); it('should decrement hour on button click', function() { tp1.setTime('12:30 PM'); tp1.update(); tp1.$widget.find('a[data-action="decrementHour"]').trigger('click'); expect(tp1.getTime()).toBe('11:30 AM', 'meridian isnt toggling'); tp2.$widget.find('a[data-action="incrementHour"]').trigger('click'); tp2.$widget.find('a[data-action="incrementHour"]').trigger('click'); tp2.$widget.find('a[data-action="decrementHour"]').trigger('click'); expect(tp2.getTime()).toBe('01:00:00 AM'); }); it('should increment minute on button click', function() { tp1.setTime('11:30 AM'); tp1.update(); tp4.setTime('11:30 AM'); tp4.update(); tp1.$widget.find('a[data-action="incrementMinute"]').trigger('click'); expect(tp1.getTime()).toBe('11:45 AM'); tp2.$widget.find('a[data-action="incrementMinute"]').trigger('click'); expect(tp2.getTime()).toBe('00:30:00 AM'); $input4.trigger('click'); tp4.$widget.find('a[data-action="incrementMinute"]').trigger('click'); tp4.$widget.find('a[data-action="decrementHour"]').trigger('click'); $input4.closest('modal').find('.btn-primary').trigger('click'); expect(tp4.getTime()).toBe('10:35 AM'); expect($input4.val()).toBe('10:35 AM'); }); it('should decrement minute on button click', function() { tp1.setTime('12:30 PM'); tp1.update(); tp4.setTime('11:30 AM'); tp4.update(); tp1.$widget.find('a[data-action="decrementMinute"]').trigger('click'); expect(tp1.getTime()).toBe('12:15 PM'); tp4.$widget.find('a[data-action="decrementMinute"]').trigger('click'); expect(tp4.getTime()).toBe('11:25 AM'); }); it('should be 11:30:00 PM if minute is decremented on empty input', function() { tp2.$widget.find('a[data-action="decrementMinute"]').trigger('click'); expect(tp2.getTime()).toBe('11:30:00 PM'); }); it('should increment second on button click', function() { tp2.setTime('11:30:15 AM'); tp2.update(); tp2.$widget.find('a[data-action="incrementSecond"]').trigger('click'); expect(tp2.getTime()).toBe('11:30:30 AM'); }); it('should decrement second on button click', function() { tp2.setTime('12:30:15 PM'); tp2.update(); }); it('should be 11:30:00 PM if minute is decremented on empty input', function() { tp2.$widget.find('a[data-action="decrementMinute"]').trigger('click'); expect(tp2.getTime()).toBe('11:30:00 PM'); }); it('should increment second on button click', function() { tp2.setTime('11:30:15 AM'); tp2.update(); tp2.$widget.find('a[data-action="incrementSecond"]').trigger('click'); expect(tp2.getTime()).toBe('11:30:30 AM'); }); it('should decrement second on button click', function() { tp2.setTime('12:30:15 PM'); tp2.update(); tp2.$widget.find('a[data-action="decrementSecond"]').trigger('click'); expect(tp2.getTime()).toBe('12:29:45 PM'); }); it('should toggle meridian on button click', function() { tp1.setTime('12:30 PM'); tp1.update(); tp1.$widget.find('a[data-action="toggleMeridian"]').first().trigger('click'); expect(tp1.getTime()).toBe('12:30 AM'); tp1.$widget.find('a[data-action="toggleMeridian"]').last().trigger('click'); expect(tp1.getTime()).toBe('12:30 PM'); }); it('should trigger changeTime event if time is changed', function() { var eventCount = 0, time; $input1.timepicker().on('changeTime.timepicker', function(e) { eventCount++; time = e.time.value; }); tp1.setTime('11:30 AM'); expect(eventCount).toBe(1); expect(time).toBe('11:30 AM'); tp1.$widget.find('a[data-action="incrementHour"]').trigger('click'); expect(eventCount).toBe(2); expect(tp1.getTime()).toBe('12:30 PM'); expect(time).toBe('12:30 PM'); tp1.$widget.find('a[data-action="incrementMinute"]').trigger('click'); expect(eventCount).toBe(3); expect(tp1.getTime()).toBe('12:45 PM'); }); it('should highlight widget inputs on click', function() { //TODO; //tp1.setTime('11:55 AM'); //tp1.update(); //$input1.parents('.bootstrap-timepicker').find('.add-on').trigger('click'); //expect(tp1.isOpen).toBe(true); //expect(tp1.$widget.find('.bootstrap-timepicker-hour').val()).toBe('11'); //tp1.$widget.find('.bootstrap-timepicker-hour').trigger('click'); //var hour1 = window.getSelection().toString(); ////var range = window.getSelection().getRangeAt(0); ////var hour1 = range.extractContents(); //expect(hour1).toBe('11', 'hour input not being highlighted'); //tp1.$widget.find('.bootstrap-timepicker-minute').trigger('click'); //var minute1 = window.getSelection().toString(); //expect(minute1).toBe('55', 'minute input not being highlighted'); //tp1.$widget.find('.bootstrap-timepicker-meridian').trigger('click'); //var meridian1 = window.getSelection().toString(); //expect(meridian1).toBe('AM', 'meridian input not being highlighted'); }); }); assets/plugins/bootstrap-timepicker/composer.json000064400000000420152510440110016405 0ustar00{ "name" : "jdewit/bootstrap-timepicker", "description" : "A simple timepicker component for Twitter Bootstrap.", "version" : "0.2.3", "license" : "MIT", "authors": [ { "name" : "Joris de Wit", "email" : "joris.w.dewit@gmail.com" } ] } assets/plugins/bootstrap-timepicker/component.json000064400000001013152510440110016557 0ustar00{ "name": "bootstrap-timepicker", "version": "0.2.3", "description": "A timepicker component for Twitter Bootstrap 2.x", "repository": { "type": "git", "url": "https://github.com/jdewit/bootstrap-timepicker" }, "main": ["js/bootstrap-timepicker.min.js", "css/bootstrap-timepicker.min.css"], "dependencies": { "bootstrap": ">=2.0.4 <3.0", "jquery": ">=1.8.3", "autotype": "https://raw.github.com/mmonteleone/jquery.autotype/master/jquery.autotype.js" } } assets/plugins/bootstrap-timepicker/Gruntfile.js000064400000005566152510440110016200 0ustar00module.exports = function(grunt) { 'use strict'; grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-jasmine'); grunt.loadNpmTasks('grunt-contrib-less'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), meta: { project: 'bootstrap-timepicker', version: '0.2.3' }, jasmine: { build: { src : ['spec/js/libs/jquery/jquery.min.js', 'spec/js/libs/bootstrap/js/bootstrap.min.js', 'spec/js/libs/autotype/index.js', 'js/bootstrap-timepicker.js'], options: { specs : 'spec/js/*Spec.js', helpers : 'spec/js/helpers/*.js', timeout : 100 } } }, jshint: { options: { browser: true, camelcase: true, curly: true, eqeqeq: true, eqnull: true, immed: true, indent: 2, latedef: true, newcap: true, noarg: true, quotmark: true, sub: true, strict: true, trailing: true, undef: true, unused: true, white: false, globals: { jQuery: true, $: true, expect: true, it: true, beforeEach: true, afterEach: true, describe: true, loadFixtures: true, console: true, module: true } }, files: ['js/bootstrap-timepicker.js', 'Gruntfile.js', 'package.json', 'spec/js/*Spec.js'] }, less: { dev: { options: { paths: ['css'] }, files: { 'css/bootstrap-timepicker.css': ['less/*.less'] } }, prod: { options: { paths: ['css'], yuicompress: true }, files: { 'css/bootstrap-timepicker.min.css': ['less/*.less'] } } }, uglify: { options: { banner: '/*! <%= meta.project %> v<%= meta.version %> \n' + '* http://jdewit.github.com/bootstrap-timepicker \n' + '* Copyright (c) <%= grunt.template.today("yyyy") %> Joris de Wit \n' + '* MIT License \n' + '*/' }, build: { src: ['','js/<%= pkg.name %>.js'], dest: 'js/<%= pkg.name %>.min.js' } }, watch: { js: { files: ['js/bootstrap-timepicker.js', 'spec/js/*Spec.js'], tasks: ['jshint', 'jasmine'], options: { livereload: true } }, less: { files: ['less/timepicker.less'], tasks: ['less:dev'], options: { livereload: true } } } }); grunt.registerTask('default', ['jshint', 'jasmine', 'less:dev']); grunt.registerTask('test', ['jasmine', 'jshint']); grunt.registerTask('compile', ['jshint', 'jasmine', 'uglify', 'less:prod']); }; assets/plugins/bootstrap-timepicker/less/timepicker.less000064400000006172152510440110017667 0ustar00/*! * Timepicker Component for Twitter Bootstrap * * Copyright 2013 Joris de Wit * * Contributors https://github.com/jdewit/bootstrap-timepicker/graphs/contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ .bootstrap-timepicker { position: relative; &.pull-right { .bootstrap-timepicker-widget { &.dropdown-menu { left: auto; right: 0; &:before { left: auto; right: 12px; } &:after { left: auto; right: 13px; } } } } .add-on { cursor: pointer; i { display: inline-block; width: 16px; height: 16px; } } } .bootstrap-timepicker-widget { &.dropdown-menu { padding: 2px 3px 2px 2px; &.open { display: inline-block; } &:before { border-bottom: 7px solid rgba(0, 0, 0, 0.2); border-left: 7px solid transparent; border-right: 7px solid transparent; content: ""; display: inline-block; left: 9px; position: absolute; top: -7px; } &:after { border-bottom: 6px solid #FFFFFF; border-left: 6px solid transparent; border-right: 6px solid transparent; content: ""; display: inline-block; left: 10px; position: absolute; top: -6px; } } a.btn, input { border-radius: 4px; } table { width: 100%; margin: 0; td { text-align: center; height: 30px; margin: 0; padding: 2px; &:not(.separator) { min-width: 30px; } span { width: 100%; } a { border: 1px transparent solid; width: 100%; display: inline-block; margin: 0; padding: 8px 0; outline: 0; color: #333; &:hover { text-decoration: none; background-color: #eee; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; border-color: #ddd; } i { margin-top: 2px; } } input { width: 25px; margin: 0; text-align: center; } } } } .bootstrap-timepicker-widget .modal-content { padding: 4px; } @media (min-width: 767px) { .bootstrap-timepicker-widget.modal { width: 200px; margin-left: -100px; } } @media (max-width: 767px) { .bootstrap-timepicker { width: 100%; .dropdown-menu { width: 100%; } } } assets/plugins/bootstrap-timepicker/.gitignore000064400000000067152510440110015662 0ustar00*.swp _site node_modules _SpecRunner.html spec/js/libs assets/plugins/bootstrap-timepicker/LICENSE000064400000002021152510440110014667 0ustar00The MIT license Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. assets/plugins/bootstrap-timepicker/.bowerrc000064400000000044152510440110015331 0ustar00{ "directory" : "spec/js/libs/" } assets/plugins/Jcrop/css/Jcrop.gif000064400000000511152510440110013126 0ustar00GIF89a! NETSCAPE2.0! ,  kTLY,! ,.j^[С쥵! ,bbдXi}! ,bzbhX{! , !)kTLY,! ,j^[С쥵! ,`bдXi}! ,`zbhX{;assets/plugins/Jcrop/css/jquery.Jcrop.min.css000064400000004114152510440110015254 0ustar00/* jquery.Jcrop.min.css v0.9.12 (build:20130521) */ .jcrop-holder{-ms-touch-action:none;direction:ltr;text-align:left;} .jcrop-vline,.jcrop-hline{background:#FFF url(Jcrop.gif);font-size:0;position:absolute;} .jcrop-vline{height:100%;width:1px!important;} .jcrop-vline.right{right:0;} .jcrop-hline{height:1px!important;width:100%;} .jcrop-hline.bottom{bottom:0;} .jcrop-tracker{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-user-select:none;height:100%;width:100%;} .jcrop-handle{background-color:#333;border:1px #EEE solid;font-size:1px;height:7px;width:7px;} .jcrop-handle.ord-n{left:50%;margin-left:-4px;margin-top:-4px;top:0;} .jcrop-handle.ord-s{bottom:0;left:50%;margin-bottom:-4px;margin-left:-4px;} .jcrop-handle.ord-e{margin-right:-4px;margin-top:-4px;right:0;top:50%;} .jcrop-handle.ord-w{left:0;margin-left:-4px;margin-top:-4px;top:50%;} .jcrop-handle.ord-nw{left:0;margin-left:-4px;margin-top:-4px;top:0;} .jcrop-handle.ord-ne{margin-right:-4px;margin-top:-4px;right:0;top:0;} .jcrop-handle.ord-se{bottom:0;margin-bottom:-4px;margin-right:-4px;right:0;} .jcrop-handle.ord-sw{bottom:0;left:0;margin-bottom:-4px;margin-left:-4px;} .jcrop-dragbar.ord-n,.jcrop-dragbar.ord-s{height:7px;width:100%;} .jcrop-dragbar.ord-e,.jcrop-dragbar.ord-w{height:100%;width:7px;} .jcrop-dragbar.ord-n{margin-top:-4px;} .jcrop-dragbar.ord-s{bottom:0;margin-bottom:-4px;} .jcrop-dragbar.ord-e{margin-right:-4px;right:0;} .jcrop-dragbar.ord-w{margin-left:-4px;} .jcrop-light .jcrop-vline,.jcrop-light .jcrop-hline{background:#FFF;filter:alpha(opacity=70)!important;opacity:.70!important;} .jcrop-light .jcrop-handle{-moz-border-radius:3px;-webkit-border-radius:3px;background-color:#000;border-color:#FFF;border-radius:3px;} .jcrop-dark .jcrop-vline,.jcrop-dark .jcrop-hline{background:#000;filter:alpha(opacity=70)!important;opacity:.7!important;} .jcrop-dark .jcrop-handle{-moz-border-radius:3px;-webkit-border-radius:3px;background-color:#FFF;border-color:#000;border-radius:3px;} .solid-line .jcrop-vline,.solid-line .jcrop-hline{background:#FFF;} .jcrop-holder img,img.jcrop-preview{max-width:none;} assets/plugins/Jcrop/css/jquery.Jcrop.css000064400000006413152510440110014476 0ustar00/* jquery.Jcrop.css v0.9.12 - MIT License */ /* The outer-most container in a typical Jcrop instance If you are having difficulty with formatting related to styles on a parent element, place any fixes here or in a like selector You can also style this element if you want to add a border, etc A better method for styling can be seen below with .jcrop-light (Add a class to the holder and style elements for that extended class) */ .jcrop-holder { direction: ltr; text-align: left; /* IE10 touch compatibility */ -ms-touch-action: none; } /* Selection Border */ .jcrop-vline, .jcrop-hline { background: #ffffff url("Jcrop.gif"); font-size: 0; position: absolute; } .jcrop-vline { height: 100%; width: 1px !important; } .jcrop-vline.right { right: 0; } .jcrop-hline { height: 1px !important; width: 100%; } .jcrop-hline.bottom { bottom: 0; } /* Invisible click targets */ .jcrop-tracker { height: 100%; width: 100%; /* "turn off" link highlight */ -webkit-tap-highlight-color: transparent; /* disable callout, image save panel */ -webkit-touch-callout: none; /* disable cut copy paste */ -webkit-user-select: none; } /* Selection Handles */ .jcrop-handle { background-color: #333333; border: 1px #eeeeee solid; width: 7px; height: 7px; font-size: 1px; } .jcrop-handle.ord-n { left: 50%; margin-left: -4px; margin-top: -4px; top: 0; } .jcrop-handle.ord-s { bottom: 0; left: 50%; margin-bottom: -4px; margin-left: -4px; } .jcrop-handle.ord-e { margin-right: -4px; margin-top: -4px; right: 0; top: 50%; } .jcrop-handle.ord-w { left: 0; margin-left: -4px; margin-top: -4px; top: 50%; } .jcrop-handle.ord-nw { left: 0; margin-left: -4px; margin-top: -4px; top: 0; } .jcrop-handle.ord-ne { margin-right: -4px; margin-top: -4px; right: 0; top: 0; } .jcrop-handle.ord-se { bottom: 0; margin-bottom: -4px; margin-right: -4px; right: 0; } .jcrop-handle.ord-sw { bottom: 0; left: 0; margin-bottom: -4px; margin-left: -4px; } /* Dragbars */ .jcrop-dragbar.ord-n, .jcrop-dragbar.ord-s { height: 7px; width: 100%; } .jcrop-dragbar.ord-e, .jcrop-dragbar.ord-w { height: 100%; width: 7px; } .jcrop-dragbar.ord-n { margin-top: -4px; } .jcrop-dragbar.ord-s { bottom: 0; margin-bottom: -4px; } .jcrop-dragbar.ord-e { margin-right: -4px; right: 0; } .jcrop-dragbar.ord-w { margin-left: -4px; } /* The "jcrop-light" class/extension */ .jcrop-light .jcrop-vline, .jcrop-light .jcrop-hline { background: #ffffff; filter: alpha(opacity=70) !important; opacity: .70!important; } .jcrop-light .jcrop-handle { -moz-border-radius: 3px; -webkit-border-radius: 3px; background-color: #000000; border-color: #ffffff; border-radius: 3px; } /* The "jcrop-dark" class/extension */ .jcrop-dark .jcrop-vline, .jcrop-dark .jcrop-hline { background: #000000; filter: alpha(opacity=70) !important; opacity: 0.7 !important; } .jcrop-dark .jcrop-handle { -moz-border-radius: 3px; -webkit-border-radius: 3px; background-color: #ffffff; border-color: #000000; border-radius: 3px; } /* Simple macro to turn off the antlines */ .solid-line .jcrop-vline, .solid-line .jcrop-hline { background: #ffffff; } /* Fix for twitter bootstrap et al. */ .jcrop-holder img, img.jcrop-preview { max-width: none; } assets/plugins/Jcrop/README.md000064400000004315152510440110012057 0ustar00Jcrop Image Cropping Plugin =========================== Jcrop is the quick and easy way to add image cropping functionality to your web application. It combines the ease-of-use of a typical jQuery plugin with a powerful cross-platform DHTML cropping engine that is faithful to familiar desktop graphics applications. Cross-platform Compatibility ---------------------------- * Firefox 2+ * Safari 3+ * Opera 9.5+ * Google Chrome 0.2+ * Internet Explorer 6+ Feature Overview ---------------- * Attaches unobtrusively to any image * Supports aspect ratio locking * Supports minSize/maxSize setting * Callbacks for selection done, or while moving * Keyboard support for nudging selection * API features to create interactivity, including animation * Support for CSS styling * Experimental touch-screen support (iOS, Android, etc) Contributors ============ **Special thanks to the following contributors:** * [Bruno Agutoli](mailto:brunotla1@gmail.com) * dhorrigan * Phil-B * jaymecd * all others who have committed their time and effort to help improve Jcrop MIT License =========== **Jcrop is free software under MIT License.** #### Copyright (c) 2008-2012 Tapmodo Interactive LLC,
        http://github.com/tapmodo/Jcrop Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. assets/plugins/Jcrop/js/jquery.min.js000064400000265614152510440110013666 0ustar00/*! jQuery v1.9.0 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license */(function(e,t){"use strict";function n(e){var t=e.length,n=st.type(e);return st.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}function r(e){var t=Tt[e]={};return st.each(e.match(lt)||[],function(e,n){t[n]=!0}),t}function i(e,n,r,i){if(st.acceptData(e)){var o,a,s=st.expando,u="string"==typeof n,l=e.nodeType,c=l?st.cache:e,f=l?e[s]:e[s]&&s;if(f&&c[f]&&(i||c[f].data)||!u||r!==t)return f||(l?e[s]=f=K.pop()||st.guid++:f=s),c[f]||(c[f]={},l||(c[f].toJSON=st.noop)),("object"==typeof n||"function"==typeof n)&&(i?c[f]=st.extend(c[f],n):c[f].data=st.extend(c[f].data,n)),o=c[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[st.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[st.camelCase(n)])):a=o,a}}function o(e,t,n){if(st.acceptData(e)){var r,i,o,a=e.nodeType,u=a?st.cache:e,l=a?e[st.expando]:st.expando;if(u[l]){if(t&&(r=n?u[l]:u[l].data)){st.isArray(t)?t=t.concat(st.map(t,st.camelCase)):t in r?t=[t]:(t=st.camelCase(t),t=t in r?[t]:t.split(" "));for(i=0,o=t.length;o>i;i++)delete r[t[i]];if(!(n?s:st.isEmptyObject)(r))return}(n||(delete u[l].data,s(u[l])))&&(a?st.cleanData([e],!0):st.support.deleteExpando||u!=u.window?delete u[l]:u[l]=null)}}}function a(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(Nt,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:wt.test(r)?st.parseJSON(r):r}catch(o){}st.data(e,n,r)}else r=t}return r}function s(e){var t;for(t in e)if(("data"!==t||!st.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function u(){return!0}function l(){return!1}function c(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function f(e,t,n){if(t=t||0,st.isFunction(t))return st.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return st.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=st.grep(e,function(e){return 1===e.nodeType});if(Wt.test(t))return st.filter(t,r,!n);t=st.filter(t,r)}return st.grep(e,function(e){return st.inArray(e,t)>=0===n})}function p(e){var t=zt.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function d(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function h(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function g(e){var t=nn.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function m(e,t){for(var n,r=0;null!=(n=e[r]);r++)st._data(n,"globalEval",!t||st._data(t[r],"globalEval"))}function y(e,t){if(1===t.nodeType&&st.hasData(e)){var n,r,i,o=st._data(e),a=st._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)st.event.add(t,n,s[n][r])}a.data&&(a.data=st.extend({},a.data))}}function v(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!st.support.noCloneEvent&&t[st.expando]){r=st._data(t);for(i in r.events)st.removeEvent(t,i,r.handle);t.removeAttribute(st.expando)}"script"===n&&t.text!==e.text?(h(t).text=e.text,g(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),st.support.html5Clone&&e.innerHTML&&!st.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Zt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}function b(e,n){var r,i,o=0,a=e.getElementsByTagName!==t?e.getElementsByTagName(n||"*"):e.querySelectorAll!==t?e.querySelectorAll(n||"*"):t;if(!a)for(a=[],r=e.childNodes||e;null!=(i=r[o]);o++)!n||st.nodeName(i,n)?a.push(i):st.merge(a,b(i,n));return n===t||n&&st.nodeName(e,n)?st.merge([e],a):a}function x(e){Zt.test(e.type)&&(e.defaultChecked=e.checked)}function T(e,t){if(t in e)return t;for(var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Nn.length;i--;)if(t=Nn[i]+n,t in e)return t;return r}function w(e,t){return e=t||e,"none"===st.css(e,"display")||!st.contains(e.ownerDocument,e)}function N(e,t){for(var n,r=[],i=0,o=e.length;o>i;i++)n=e[i],n.style&&(r[i]=st._data(n,"olddisplay"),t?(r[i]||"none"!==n.style.display||(n.style.display=""),""===n.style.display&&w(n)&&(r[i]=st._data(n,"olddisplay",S(n.nodeName)))):r[i]||w(n)||st._data(n,"olddisplay",st.css(n,"display")));for(i=0;o>i;i++)n=e[i],n.style&&(t&&"none"!==n.style.display&&""!==n.style.display||(n.style.display=t?r[i]||"":"none"));return e}function C(e,t,n){var r=mn.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function k(e,t,n,r,i){for(var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;4>o;o+=2)"margin"===n&&(a+=st.css(e,n+wn[o],!0,i)),r?("content"===n&&(a-=st.css(e,"padding"+wn[o],!0,i)),"margin"!==n&&(a-=st.css(e,"border"+wn[o]+"Width",!0,i))):(a+=st.css(e,"padding"+wn[o],!0,i),"padding"!==n&&(a+=st.css(e,"border"+wn[o]+"Width",!0,i)));return a}function E(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=ln(e),a=st.support.boxSizing&&"border-box"===st.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=un(e,t,o),(0>i||null==i)&&(i=e.style[t]),yn.test(i))return i;r=a&&(st.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+k(e,t,n||(a?"border":"content"),r,o)+"px"}function S(e){var t=V,n=bn[e];return n||(n=A(e,t),"none"!==n&&n||(cn=(cn||st("': "");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='
        ',o="";if(h||!j)o+=''+i[b]+"";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='"}u||(k+=o+(h||!(j&&l)?" ":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+=''+c+"";else{g=this._get(a,"yearRange").split(":");var s=(new Date).getFullYear();i=function(q){q=q.match(/c[+-].*/)?c+parseInt(q.substring(1),10):q.match(/[+-].*/)?s+parseInt(q,10):parseInt(q,10);return isNaN(q)?s:q};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b, e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?" ":"")+o;k+="
        ";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c=="Y"?b:0),f=a.drawMonth+ (c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&ba?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");if(b)b.apply(a.input? a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);c=this._daylightSavingAdjust(new Date(c, e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a, "dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=function(a){if(!this.length)return this; if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));return this.each(function(){typeof a== "string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.16";window["DP_jQuery_"+B]=d})(jQuery); ;/* * jQuery UI Progressbar 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Progressbar * * Depends: * jquery.ui.core.js * jquery.ui.widget.js */ (function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("
        ").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"); this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100* this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.16"})})(jQuery); ;/* * jQuery UI Effects 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Effects/ */ jQuery.effects||function(f,j){function m(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1], 16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return n.transparent;return n[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return m(b)}function o(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle, a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function p(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d= a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function l(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor", "borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=m(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var n={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0, 0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211, 211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},q=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b, d){if(f.isFunction(b)){d=b;b=null}return this.queue(function(){var e=f(this),g=e.attr("style")||" ",h=p(o.call(this)),r,v=e.attr("class");f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});r=p(o.call(this));e.attr("class",v);e.animate(u(h,r),{queue:false,duration:a,easing:b,complete:function(){f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments);f.dequeue(this)}})})}; f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this, [{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.16",save:function(c,a){for(var b=0;b
        ").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}), d=document.activeElement;c.wrap(b);if(c[0]===d||f.contains(c[0],d))f(d).focus();b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(e,g){a[g]=c.css(g);if(isNaN(parseInt(a[g],10)))a[g]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){var a,b=document.activeElement; if(c.parent().is(".ui-effects-wrapper")){a=c.parent().replaceWith(c);if(c[0]===b||f.contains(c[0],b))f(b).focus();return a}return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)}); return d.call(this,b)},_show:f.fn.show,show:function(c){if(l(c))return this._show.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(l(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(l(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this, arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/ 2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b, d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c, a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b, d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h
        ").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+ e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery); ;/* * jQuery UI Effects Fade 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Effects/Fade * * Depends: * jquery.effects.core.js */ (function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery); ;/* * jQuery UI Effects Fold 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Effects/Fold * * Depends: * jquery.effects.core.js */ (function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1], 10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery); ;/* * jQuery UI Effects Highlight 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Effects/Highlight * * Depends: * jquery.effects.core.js */ (function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&& this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery); ;/* * jQuery UI Effects Pulsate 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Effects/Pulsate * * Depends: * jquery.effects.core.js */ (function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c
        ').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments); b.dequeue()})})}})(jQuery); ;assets/plugins/jQRangeSlider/lib/jquery.mousewheel.min.js000064400000002560152510440130017600 0ustar00/*! Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net) * Licensed under the MIT License (LICENSE.txt). * * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. * Thanks to: Seamus Leahy for adding deltaX and deltaY * * Version: 3.0.6 * * Requires: 1.2.2+ */ (function(a){function d(b){var c=b||window.event,d=[].slice.call(arguments,1),e=0,f=!0,g=0,h=0;return b=a.event.fix(c),b.type="mousewheel",c.wheelDelta&&(e=c.wheelDelta/120),c.detail&&(e=-c.detail/3),h=e,c.axis!==undefined&&c.axis===c.HORIZONTAL_AXIS&&(h=0,g=-1*e),c.wheelDeltaY!==undefined&&(h=c.wheelDeltaY/120),c.wheelDeltaX!==undefined&&(g=-1*c.wheelDeltaX/120),d.unshift(b,e,g,h),(a.event.dispatch||a.event.handle).apply(this,d)}var b=["DOMMouseScroll","mousewheel"];if(a.event.fixHooks)for(var c=b.length;c;)a.event.fixHooks[b[--c]]=a.event.mouseHooks;a.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=b.length;a;)this.addEventListener(b[--a],d,!1);else this.onmousewheel=d},teardown:function(){if(this.removeEventListener)for(var a=b.length;a;)this.removeEventListener(b[--a],d,!1);else this.onmousewheel=null}},a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery) assets/plugins/jQRangeSlider/lib/jquery-ui.license.txt000064400000002437152510440130017104 0ustar00Copyright (c) 2010 Paul Bakaus, http://jqueryui.com/ This software consists of voluntary contributions made by many individuals (AUTHORS.txt, http://jqueryui.com/about) For exact contribution history, see the revision history and logs, available at http://jquery-ui.googlecode.com/svn/ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. assets/plugins/jQRangeSlider/lib/jquery-1.7.1.min.js000064400000267253152510440130016102 0ustar00/*! 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);assets/plugins/jQRangeSlider/lib/jquery.license.txt000064400000002061152510440130016462 0ustar00Copyright (c) 2010 John Resig, http://jquery.com/ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.assets/plugins/jQRangeSlider/jQAllRangeSliders-min.js000064400000135531152510440130016651 0ustar00/*! jQRangeSlider 5.3.0 - 2013-07-12 - Copyright (C) Guillaume Gautreau 2012 - MIT and GPLv3 licenses.*/!function(a){"use strict";a.widget("ui.rangeSliderMouseTouch",a.ui.mouse,{enabled:!0,_mouseInit:function(){var b=this;a.ui.mouse.prototype._mouseInit.apply(this),this._mouseDownEvent=!1,this.element.bind("touchstart."+this.widgetName,function(a){return b._touchStart(a)})},_mouseDestroy:function(){a(document).unbind("touchmove."+this.widgetName,this._touchMoveDelegate).unbind("touchend."+this.widgetName,this._touchEndDelegate),a.ui.mouse.prototype._mouseDestroy.apply(this)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},destroy:function(){this._mouseDestroy(),a.ui.mouse.prototype.destroy.apply(this),this._mouseInit=null},_touchStart:function(b){if(!this.enabled)return!1;b.which=1,b.preventDefault(),this._fillTouchEvent(b);var c=this,d=this._mouseDownEvent;this._mouseDown(b),d!==this._mouseDownEvent&&(this._touchEndDelegate=function(a){c._touchEnd(a)},this._touchMoveDelegate=function(a){c._touchMove(a)},a(document).bind("touchmove."+this.widgetName,this._touchMoveDelegate).bind("touchend."+this.widgetName,this._touchEndDelegate))},_mouseDown:function(b){return this.enabled?a.ui.mouse.prototype._mouseDown.apply(this,[b]):!1},_touchEnd:function(b){this._fillTouchEvent(b),this._mouseUp(b),a(document).unbind("touchmove."+this.widgetName,this._touchMoveDelegate).unbind("touchend."+this.widgetName,this._touchEndDelegate),this._mouseDownEvent=!1,a(document).trigger("mouseup")},_touchMove:function(a){return a.preventDefault(),this._fillTouchEvent(a),this._mouseMove(a)},_fillTouchEvent:function(a){var b;b="undefined"==typeof a.targetTouches&&"undefined"==typeof a.changedTouches?a.originalEvent.targetTouches[0]||a.originalEvent.changedTouches[0]:a.targetTouches[0]||a.changedTouches[0],a.pageX=b.pageX,a.pageY=b.pageY}})}(jQuery),function(a){"use strict";a.widget("ui.rangeSliderDraggable",a.ui.rangeSliderMouseTouch,{cache:null,options:{containment:null},_create:function(){a.ui.rangeSliderMouseTouch.prototype._create.apply(this),setTimeout(a.proxy(this._initElementIfNotDestroyed,this),10)},destroy:function(){this.cache=null,a.ui.rangeSliderMouseTouch.prototype.destroy.apply(this)},_initElementIfNotDestroyed:function(){this._mouseInit&&this._initElement()},_initElement:function(){this._mouseInit(),this._cache()},_setOption:function(b,c){"containment"===b&&(this.options.containment=null===c||0===a(c).length?null:a(c))},_mouseStart:function(a){return this._cache(),this.cache.click={left:a.pageX,top:a.pageY},this.cache.initialOffset=this.element.offset(),this._triggerMouseEvent("mousestart"),!0},_mouseDrag:function(a){var b=a.pageX-this.cache.click.left;return b=this._constraintPosition(b+this.cache.initialOffset.left),this._applyPosition(b),this._triggerMouseEvent("sliderDrag"),!1},_mouseStop:function(){this._triggerMouseEvent("stop")},_constraintPosition:function(a){return 0!==this.element.parent().length&&null!==this.cache.parent.offset&&(a=Math.min(a,this.cache.parent.offset.left+this.cache.parent.width-this.cache.width.outer),a=Math.max(a,this.cache.parent.offset.left)),a},_applyPosition:function(a){var b={top:this.cache.offset.top,left:a};this.element.offset({left:a}),this.cache.offset=b},_cacheIfNecessary:function(){null===this.cache&&this._cache()},_cache:function(){this.cache={},this._cacheMargins(),this._cacheParent(),this._cacheDimensions(),this.cache.offset=this.element.offset()},_cacheMargins:function(){this.cache.margin={left:this._parsePixels(this.element,"marginLeft"),right:this._parsePixels(this.element,"marginRight"),top:this._parsePixels(this.element,"marginTop"),bottom:this._parsePixels(this.element,"marginBottom")}},_cacheParent:function(){if(null!==this.options.parent){var a=this.element.parent();this.cache.parent={offset:a.offset(),width:a.width()}}else this.cache.parent=null},_cacheDimensions:function(){this.cache.width={outer:this.element.outerWidth(),inner:this.element.width()}},_parsePixels:function(a,b){return parseInt(a.css(b),10)||0},_triggerMouseEvent:function(a){var b=this._prepareEventData();this.element.trigger(a,b)},_prepareEventData:function(){return{element:this.element,offset:this.cache.offset||null}}})}(jQuery),function(a,b){"use strict";a.widget("ui.rangeSlider",{options:{bounds:{min:0,max:100},defaultValues:{min:20,max:50},wheelMode:null,wheelSpeed:4,arrows:!0,valueLabels:"show",formatter:null,durationIn:0,durationOut:400,delayOut:200,range:{min:!1,max:!1},step:!1,scales:!1,enabled:!0},_values:null,_valuesChanged:!1,bar:null,leftHandle:null,rightHandle:null,innerBar:null,container:null,arrows:null,labels:null,changing:{min:!1,max:!1},changed:{min:!1,max:!1},ruler:null,_create:function(){this._setDefaultValues(),this.labels={left:null,right:null,leftDisplayed:!0,rightDisplayed:!0},this.arrows={left:null,right:null},this.changing={min:!1,max:!1},this.changed={min:!1,max:!1},this._createElements(),this._bindResize(),setTimeout(a.proxy(this.resize,this),1),setTimeout(a.proxy(this._initValues,this),1)},_setDefaultValues:function(){this._values={min:this.options.defaultValues.min,max:this.options.defaultValues.max}},_bindResize:function(){var b=this;this._resizeProxy=function(a){b.resize(a)},a(window).resize(this._resizeProxy)},_initWidth:function(){this.container.css("width",this.element.width()-this.container.outerWidth(!0)+this.container.width()),this.innerBar.css("width",this.container.width()-this.innerBar.outerWidth(!0)+this.innerBar.width())},_initValues:function(){this.values(this._values.min,this._values.max)},_setOption:function(a,b){this._setWheelOption(a,b),this._setArrowsOption(a,b),this._setLabelsOption(a,b),this._setLabelsDurations(a,b),this._setFormatterOption(a,b),this._setBoundsOption(a,b),this._setRangeOption(a,b),this._setStepOption(a,b),this._setScalesOption(a,b),this._setEnabledOption(a,b)},_validProperty:function(a,b,c){return null===a||"undefined"==typeof a[b]?c:a[b]},_setStepOption:function(a,b){"step"===a&&(this.options.step=b,this._leftHandle("option","step",b),this._rightHandle("option","step",b),this._changed(!0))},_setScalesOption:function(a,b){"scales"===a&&(b===!1||null===b?(this.options.scales=!1,this._destroyRuler()):b instanceof Array&&(this.options.scales=b,this._updateRuler()))},_setRangeOption:function(a,b){"range"===a&&(this._bar("option","range",b),this.options.range=this._bar("option","range"),this._changed(!0))},_setBoundsOption:function(a,b){"bounds"===a&&"undefined"!=typeof b.min&&"undefined"!=typeof b.max&&this.bounds(b.min,b.max)},_setWheelOption:function(a,b){("wheelMode"===a||"wheelSpeed"===a)&&(this._bar("option",a,b),this.options[a]=this._bar("option",a))},_setLabelsOption:function(a,b){if("valueLabels"===a){if("hide"!==b&&"show"!==b&&"change"!==b)return;this.options.valueLabels=b,"hide"!==b?(this._createLabels(),this._leftLabel("update"),this._rightLabel("update")):this._destroyLabels()}},_setFormatterOption:function(a,b){"formatter"===a&&null!==b&&"function"==typeof b&&(this.options.formatter=b,"hide"!==this.options.valueLabels&&(this._destroyLabels(),this._createLabels()))},_setArrowsOption:function(a,b){"arrows"!==a||b!==!0&&b!==!1||b===this.options.arrows||(b===!0?(this.element.removeClass("ui-rangeSlider-noArrow").addClass("ui-rangeSlider-withArrows"),this.arrows.left.css("display","block"),this.arrows.right.css("display","block"),this.options.arrows=!0):b===!1&&(this.element.addClass("ui-rangeSlider-noArrow").removeClass("ui-rangeSlider-withArrows"),this.arrows.left.css("display","none"),this.arrows.right.css("display","none"),this.options.arrows=!1),this._initWidth())},_setLabelsDurations:function(a,b){if("durationIn"===a||"durationOut"===a||"delayOut"===a){if(parseInt(b,10)!==b)return;null!==this.labels.left&&this._leftLabel("option",a,b),null!==this.labels.right&&this._rightLabel("option",a,b),this.options[a]=b}},_setEnabledOption:function(a,b){"enabled"===a&&this.toggle(b)},_createElements:function(){"absolute"!==this.element.css("position")&&this.element.css("position","relative"),this.element.addClass("ui-rangeSlider"),this.container=a("
        ").css("position","absolute").appendTo(this.element),this.innerBar=a("
        ").css("position","absolute").css("top",0).css("left",0),this._createHandles(),this._createBar(),this.container.prepend(this.innerBar),this._createArrows(),"hide"!==this.options.valueLabels?this._createLabels():this._destroyLabels(),this._updateRuler(),this.options.enabled||this._toggle(this.options.enabled)},_createHandle:function(b){return a("
        ")[this._handleType()](b).bind("sliderDrag",a.proxy(this._changing,this)).bind("stop",a.proxy(this._changed,this))},_createHandles:function(){this.leftHandle=this._createHandle({isLeft:!0,bounds:this.options.bounds,value:this._values.min,step:this.options.step}).appendTo(this.container),this.rightHandle=this._createHandle({isLeft:!1,bounds:this.options.bounds,value:this._values.max,step:this.options.step}).appendTo(this.container)},_createBar:function(){this.bar=a("
        ").prependTo(this.container).bind("sliderDrag scroll zoom",a.proxy(this._changing,this)).bind("stop",a.proxy(this._changed,this)),this._bar({leftHandle:this.leftHandle,rightHandle:this.rightHandle,values:{min:this._values.min,max:this._values.max},type:this._handleType(),range:this.options.range,wheelMode:this.options.wheelMode,wheelSpeed:this.options.wheelSpeed}),this.options.range=this._bar("option","range"),this.options.wheelMode=this._bar("option","wheelMode"),this.options.wheelSpeed=this._bar("option","wheelSpeed")},_createArrows:function(){this.arrows.left=this._createArrow("left"),this.arrows.right=this._createArrow("right"),this.options.arrows?this.element.addClass("ui-rangeSlider-withArrows"):(this.arrows.left.css("display","none"),this.arrows.right.css("display","none"),this.element.addClass("ui-rangeSlider-noArrow"))},_createArrow:function(b){var c,d=a("
        ").append("
        ").addClass("ui-rangeSlider-"+b+"Arrow").css("position","absolute").css(b,0).appendTo(this.element);return c="right"===b?a.proxy(this._scrollRightClick,this):a.proxy(this._scrollLeftClick,this),d.bind("mousedown touchstart",c),d},_proxy:function(a,b,c){var d=Array.prototype.slice.call(c);return a[b].apply(a,d)},_handleType:function(){return"rangeSliderHandle"},_barType:function(){return"rangeSliderBar"},_bar:function(){return this._proxy(this.bar,this._barType(),arguments)},_labelType:function(){return"rangeSliderLabel"},_leftLabel:function(){return this._proxy(this.labels.left,this._labelType(),arguments)},_rightLabel:function(){return this._proxy(this.labels.right,this._labelType(),arguments)},_leftHandle:function(){return this._proxy(this.leftHandle,this._handleType(),arguments)},_rightHandle:function(){return this._proxy(this.rightHandle,this._handleType(),arguments)},_getValue:function(a,b){return b===this.rightHandle&&(a-=b.outerWidth()),a*(this.options.bounds.max-this.options.bounds.min)/(this.container.innerWidth()-b.outerWidth(!0))+this.options.bounds.min},_trigger:function(a){var b=this;setTimeout(function(){b.element.trigger(a,{label:b.element,values:b.values()})},1)},_changing:function(){this._updateValues()&&(this._trigger("valuesChanging"),this._valuesChanged=!0)},_changed:function(a){(this._updateValues()||this._valuesChanged)&&(this._trigger("valuesChanged"),a!==!0&&this._trigger("userValuesChanged"),this._valuesChanged=!1)},_updateValues:function(){var a=this._leftHandle("value"),b=this._rightHandle("value"),c=this._min(a,b),d=this._max(a,b),e=c!==this._values.min||d!==this._values.max;return this._values.min=this._min(a,b),this._values.max=this._max(a,b),e},_min:function(a,b){return Math.min(a,b)},_max:function(a,b){return Math.max(a,b)},_createLabel:function(b,c){var d;return null===b?(d=this._getLabelConstructorParameters(b,c),b=a("
        ").appendTo(this.element)[this._labelType()](d)):(d=this._getLabelRefreshParameters(b,c),b[this._labelType()](d)),b},_getLabelConstructorParameters:function(a,b){return{handle:b,handleType:this._handleType(),formatter:this._getFormatter(),show:this.options.valueLabels,durationIn:this.options.durationIn,durationOut:this.options.durationOut,delayOut:this.options.delayOut}},_getLabelRefreshParameters:function(){return{formatter:this._getFormatter(),show:this.options.valueLabels,durationIn:this.options.durationIn,durationOut:this.options.durationOut,delayOut:this.options.delayOut}},_getFormatter:function(){return this.options.formatter===!1||null===this.options.formatter?this._defaultFormatter:this.options.formatter},_defaultFormatter:function(a){return Math.round(a)},_destroyLabel:function(a){return null!==a&&(a[this._labelType()]("destroy"),a.remove(),a=null),a},_createLabels:function(){this.labels.left=this._createLabel(this.labels.left,this.leftHandle),this.labels.right=this._createLabel(this.labels.right,this.rightHandle),this._leftLabel("pair",this.labels.right)},_destroyLabels:function(){this.labels.left=this._destroyLabel(this.labels.left),this.labels.right=this._destroyLabel(this.labels.right)},_stepRatio:function(){return this._leftHandle("stepRatio")},_scrollRightClick:function(a){return this.options.enabled?(a.preventDefault(),this._bar("startScroll"),this._bindStopScroll(),this._continueScrolling("scrollRight",4*this._stepRatio(),1),void 0):!1},_continueScrolling:function(a,b,c,d){if(!this.options.enabled)return!1;this._bar(a,c),d=d||5,d--;var e=this,f=16,g=Math.max(1,4/this._stepRatio());this._scrollTimeout=setTimeout(function(){0===d&&(b>f?b=Math.max(f,b/1.5):c=Math.min(g,2*c),d=5),e._continueScrolling(a,b,c,d)},b)},_scrollLeftClick:function(a){return this.options.enabled?(a.preventDefault(),this._bar("startScroll"),this._bindStopScroll(),this._continueScrolling("scrollLeft",4*this._stepRatio(),1),void 0):!1},_bindStopScroll:function(){var b=this;this._stopScrollHandle=function(a){a.preventDefault(),b._stopScroll()},a(document).bind("mouseup touchend",this._stopScrollHandle)},_stopScroll:function(){a(document).unbind("mouseup touchend",this._stopScrollHandle),this._stopScrollHandle=null,this._bar("stopScroll"),clearTimeout(this._scrollTimeout)},_createRuler:function(){this.ruler=a("
        ").appendTo(this.innerBar)},_setRulerParameters:function(){this.ruler.ruler({min:this.options.bounds.min,max:this.options.bounds.max,scales:this.options.scales})},_destroyRuler:function(){null!==this.ruler&&a.fn.ruler&&(this.ruler.ruler("destroy"),this.ruler.remove(),this.ruler=null)},_updateRuler:function(){this._destroyRuler(),this.options.scales!==!1&&a.fn.ruler&&(this._createRuler(),this._setRulerParameters())},values:function(a,b){var c=this._bar("values",a,b);return"undefined"!=typeof a&&"undefined"!=typeof b&&this._changed(!0),c},min:function(a){return this._values.min=this.values(a,this._values.max).min,this._values.min},max:function(a){return this._values.max=this.values(this._values.min,a).max,this._values.max},bounds:function(a,b){return this._isValidValue(a)&&this._isValidValue(b)&&b>a&&(this._setBounds(a,b),this._updateRuler(),this._changed(!0)),this.options.bounds},_isValidValue:function(a){return"undefined"!=typeof a&&parseFloat(a)===a},_setBounds:function(a,b){this.options.bounds={min:a,max:b},this._leftHandle("option","bounds",this.options.bounds),this._rightHandle("option","bounds",this.options.bounds),this._bar("option","bounds",this.options.bounds)},zoomIn:function(a){this._bar("zoomIn",a)},zoomOut:function(a){this._bar("zoomOut",a)},scrollLeft:function(a){this._bar("startScroll"),this._bar("scrollLeft",a),this._bar("stopScroll")},scrollRight:function(a){this._bar("startScroll"),this._bar("scrollRight",a),this._bar("stopScroll")},resize:function(){this._initWidth(),this._leftHandle("update"),this._rightHandle("update"),this._bar("update")},enable:function(){this.toggle(!0)},disable:function(){this.toggle(!1)},toggle:function(a){a===b&&(a=!this.options.enabled),this.options.enabled!==a&&this._toggle(a)},_toggle:function(a){this.options.enabled=a,this.element.toggleClass("ui-rangeSlider-disabled",!a);var b=a?"enable":"disable";this._bar(b),this._leftHandle(b),this._rightHandle(b),this._leftLabel(b),this._rightLabel(b)},destroy:function(){this.element.removeClass("ui-rangeSlider-withArrows ui-rangeSlider-noArrow ui-rangeSlider-disabled"),this._destroyWidgets(),this._destroyElements(),this.element.removeClass("ui-rangeSlider"),this.options=null,a(window).unbind("resize",this._resizeProxy),this._resizeProxy=null,this._bindResize=null,a.Widget.prototype.destroy.apply(this,arguments)},_destroyWidget:function(a){this["_"+a]("destroy"),this[a].remove(),this[a]=null},_destroyWidgets:function(){this._destroyWidget("bar"),this._destroyWidget("leftHandle"),this._destroyWidget("rightHandle"),this._destroyRuler(),this._destroyLabels()},_destroyElements:function(){this.container.remove(),this.container=null,this.innerBar.remove(),this.innerBar=null,this.arrows.left.remove(),this.arrows.right.remove(),this.arrows=null}})}(jQuery),function(a){"use strict";a.widget("ui.rangeSliderHandle",a.ui.rangeSliderDraggable,{currentMove:null,margin:0,parentElement:null,options:{isLeft:!0,bounds:{min:0,max:100},range:!1,value:0,step:!1},_value:0,_left:0,_create:function(){a.ui.rangeSliderDraggable.prototype._create.apply(this),this.element.css("position","absolute").css("top",0).addClass("ui-rangeSlider-handle").toggleClass("ui-rangeSlider-leftHandle",this.options.isLeft).toggleClass("ui-rangeSlider-rightHandle",!this.options.isLeft),this.element.append("
        "),this._value=this._constraintValue(this.options.value)},destroy:function(){this.element.empty(),a.ui.rangeSliderDraggable.prototype.destroy.apply(this)},_setOption:function(b,c){"isLeft"!==b||c!==!0&&c!==!1||c===this.options.isLeft?"step"===b&&this._checkStep(c)?(this.options.step=c,this.update()):"bounds"===b?(this.options.bounds=c,this.update()):"range"===b&&this._checkRange(c)&&(this.options.range=c,this.update()):(this.options.isLeft=c,this.element.toggleClass("ui-rangeSlider-leftHandle",this.options.isLeft).toggleClass("ui-rangeSlider-rightHandle",!this.options.isLeft),this._position(this._value),this.element.trigger("switch",this.options.isLeft)),a.ui.rangeSliderDraggable.prototype._setOption.apply(this,[b,c])},_checkRange:function(a){return a===!1||!this._isValidValue(a.min)&&!this._isValidValue(a.max)},_isValidValue:function(a){return"undefined"!=typeof a&&a!==!1&&parseFloat(a)!==a},_checkStep:function(a){return a===!1||parseFloat(a)===a},_initElement:function(){a.ui.rangeSliderDraggable.prototype._initElement.apply(this),0===this.cache.parent.width||null===this.cache.parent.width?setTimeout(a.proxy(this._initElementIfNotDestroyed,this),500):(this._position(this._value),this._triggerMouseEvent("initialize"))},_bounds:function(){return this.options.bounds},_cache:function(){a.ui.rangeSliderDraggable.prototype._cache.apply(this),this._cacheParent()},_cacheParent:function(){var a=this.element.parent();this.cache.parent={element:a,offset:a.offset(),padding:{left:this._parsePixels(a,"paddingLeft")},width:a.width()}},_position:function(a){var b=this._getPositionForValue(a);this._applyPosition(b)},_constraintPosition:function(a){var b=this._getValueForPosition(a);return this._getPositionForValue(b)},_applyPosition:function(b){a.ui.rangeSliderDraggable.prototype._applyPosition.apply(this,[b]),this._left=b,this._setValue(this._getValueForPosition(b)),this._triggerMouseEvent("moving")},_prepareEventData:function(){var b=a.ui.rangeSliderDraggable.prototype._prepareEventData.apply(this);return b.value=this._value,b},_setValue:function(a){a!==this._value&&(this._value=a)},_constraintValue:function(a){if(a=Math.min(a,this._bounds().max),a=Math.max(a,this._bounds().min),a=this._round(a),this.options.range!==!1){var b=this.options.range.min||!1,c=this.options.range.max||!1;b!==!1&&(a=Math.max(a,this._round(b))),c!==!1&&(a=Math.min(a,this._round(c))),a=Math.min(a,this._bounds().max),a=Math.max(a,this._bounds().min)}return a},_round:function(a){return this.options.step!==!1&&this.options.step>0?Math.round(a/this.options.step)*this.options.step:a},_getPositionForValue:function(a){if(!this.cache||!this.cache.parent||null===this.cache.parent.offset)return 0;a=this._constraintValue(a);var b=(a-this.options.bounds.min)/(this.options.bounds.max-this.options.bounds.min),c=this.cache.parent.width-this.cache.width.outer,d=this.cache.parent.offset.left;return b*c+d},_getValueForPosition:function(a){var b=this._getRawValueForPositionAndBounds(a,this.options.bounds.min,this.options.bounds.max);return this._constraintValue(b)},_getRawValueForPositionAndBounds:function(a,b,c){var d=null===this.cache.parent.offset?0:this.cache.parent.offset.left,e=this.cache.parent.width-this.cache.width.outer,f=(a-d)/e;return f*(c-b)+b},value:function(a){return"undefined"!=typeof a&&(this._cache(),a=this._constraintValue(a),this._position(a)),this._value},update:function(){this._cache();var a=this._constraintValue(this._value),b=this._getPositionForValue(a);a!==this._value?(this._triggerMouseEvent("updating"),this._position(a),this._triggerMouseEvent("update")):b!==this.cache.offset.left&&(this._triggerMouseEvent("updating"),this._position(a),this._triggerMouseEvent("update"))},position:function(a){return"undefined"!=typeof a&&(this._cache(),a=this._constraintPosition(a),this._applyPosition(a)),this._left},add:function(a,b){return a+b},substract:function(a,b){return a-b},stepsBetween:function(a,b){return this.options.step===!1?b-a:(b-a)/this.options.step},multiplyStep:function(a,b){return a*b},moveRight:function(a){var b;return this.options.step===!1?(b=this._left,this.position(this._left+a),this._left-b):(b=this._value,this.value(this.add(b,this.multiplyStep(this.options.step,a))),this.stepsBetween(b,this._value))},moveLeft:function(a){return-this.moveRight(-a)},stepRatio:function(){if(this.options.step===!1)return 1;var a=(this.options.bounds.max-this.options.bounds.min)/this.options.step;return this.cache.parent.width/a}})}(jQuery),function(a){"use strict";a.widget("ui.rangeSliderBar",a.ui.rangeSliderDraggable,{options:{leftHandle:null,rightHandle:null,bounds:{min:0,max:100},type:"rangeSliderHandle",range:!1,drag:function(){},stop:function(){},values:{min:0,max:20},wheelSpeed:4,wheelMode:null},_values:{min:0,max:20},_waitingToInit:2,_wheelTimeout:!1,_create:function(){a.ui.rangeSliderDraggable.prototype._create.apply(this),this.element.css("position","absolute").css("top",0).addClass("ui-rangeSlider-bar"),this.options.leftHandle.bind("initialize",a.proxy(this._onInitialized,this)).bind("mousestart",a.proxy(this._cache,this)).bind("stop",a.proxy(this._onHandleStop,this)),this.options.rightHandle.bind("initialize",a.proxy(this._onInitialized,this)).bind("mousestart",a.proxy(this._cache,this)).bind("stop",a.proxy(this._onHandleStop,this)),this._bindHandles(),this._values=this.options.values,this._setWheelModeOption(this.options.wheelMode)},destroy:function(){this.options.leftHandle.unbind(".bar"),this.options.rightHandle.unbind(".bar"),this.options=null,a.ui.rangeSliderDraggable.prototype.destroy.apply(this)},_setOption:function(a,b){"range"===a?this._setRangeOption(b):"wheelSpeed"===a?this._setWheelSpeedOption(b):"wheelMode"===a&&this._setWheelModeOption(b)},_setRangeOption:function(a){if(("object"!=typeof a||null===a)&&(a=!1),a!==!1||this.options.range!==!1){if(a!==!1){var b="undefined"==typeof a.min?this.options.range.min||!1:a.min,c="undefined"==typeof a.max?this.options.range.max||!1:a.max;this.options.range={min:b,max:c}}else this.options.range=!1;this._setLeftRange(),this._setRightRange()}},_setWheelSpeedOption:function(a){"number"==typeof a&&a>0&&(this.options.wheelSpeed=a)},_setWheelModeOption:function(a){(null===a||a===!1||"zoom"===a||"scroll"===a)&&(this.options.wheelMode!==a&&this.element.parent().unbind("mousewheel.bar"),this._bindMouseWheel(a),this.options.wheelMode=a)},_bindMouseWheel:function(b){"zoom"===b?this.element.parent().bind("mousewheel.bar",a.proxy(this._mouseWheelZoom,this)):"scroll"===b&&this.element.parent().bind("mousewheel.bar",a.proxy(this._mouseWheelScroll,this))},_setLeftRange:function(){if(this.options.range===!1)return!1;var a=this._values.max,b={min:!1,max:!1};b.max=(this.options.range.min||!1)!==!1?this._leftHandle("substract",a,this.options.range.min):!1,b.min=(this.options.range.max||!1)!==!1?this._leftHandle("substract",a,this.options.range.max):!1,this._leftHandle("option","range",b)},_setRightRange:function(){var a=this._values.min,b={min:!1,max:!1};b.min=(this.options.range.min||!1)!==!1?this._rightHandle("add",a,this.options.range.min):!1,b.max=(this.options.range.max||!1)!==!1?this._rightHandle("add",a,this.options.range.max):!1,this._rightHandle("option","range",b)},_deactivateRange:function(){this._leftHandle("option","range",!1),this._rightHandle("option","range",!1)},_reactivateRange:function(){this._setRangeOption(this.options.range)},_onInitialized:function(){this._waitingToInit--,0===this._waitingToInit&&this._initMe()},_initMe:function(){this._cache(),this.min(this._values.min),this.max(this._values.max);var a=this._leftHandle("position"),b=this._rightHandle("position")+this.options.rightHandle.width();this.element.offset({left:a}),this.element.css("width",b-a)},_leftHandle:function(){return this._handleProxy(this.options.leftHandle,arguments)},_rightHandle:function(){return this._handleProxy(this.options.rightHandle,arguments)},_handleProxy:function(a,b){var c=Array.prototype.slice.call(b);return a[this.options.type].apply(a,c)},_cache:function(){a.ui.rangeSliderDraggable.prototype._cache.apply(this),this._cacheHandles()},_cacheHandles:function(){this.cache.rightHandle={},this.cache.rightHandle.width=this.options.rightHandle.width(),this.cache.rightHandle.offset=this.options.rightHandle.offset(),this.cache.leftHandle={},this.cache.leftHandle.offset=this.options.leftHandle.offset()},_mouseStart:function(b){a.ui.rangeSliderDraggable.prototype._mouseStart.apply(this,[b]),this._deactivateRange()},_mouseStop:function(b){a.ui.rangeSliderDraggable.prototype._mouseStop.apply(this,[b]),this._cacheHandles(),this._values.min=this._leftHandle("value"),this._values.max=this._rightHandle("value"),this._reactivateRange(),this._leftHandle().trigger("stop"),this._rightHandle().trigger("stop")},_onDragLeftHandle:function(a,b){return this._cacheIfNecessary(),this._switchedValues()?(this._switchHandles(),this._onDragRightHandle(a,b),void 0):(this._values.min=b.value,this.cache.offset.left=b.offset.left,this.cache.leftHandle.offset=b.offset,this._positionBar(),void 0)},_onDragRightHandle:function(a,b){return this._cacheIfNecessary(),this._switchedValues()?(this._switchHandles(),this._onDragLeftHandle(a,b),void 0):(this._values.max=b.value,this.cache.rightHandle.offset=b.offset,this._positionBar(),void 0)},_positionBar:function(){var a=this.cache.rightHandle.offset.left+this.cache.rightHandle.width-this.cache.leftHandle.offset.left;this.cache.width.inner=a,this.element.css("width",a).offset({left:this.cache.leftHandle.offset.left})},_onHandleStop:function(){this._setLeftRange(),this._setRightRange()},_switchedValues:function(){if(this.min()>this.max()){var a=this._values.min;return this._values.min=this._values.max,this._values.max=a,!0}return!1},_switchHandles:function(){var a=this.options.leftHandle;this.options.leftHandle=this.options.rightHandle,this.options.rightHandle=a,this._leftHandle("option","isLeft",!0),this._rightHandle("option","isLeft",!1),this._bindHandles(),this._cacheHandles()},_bindHandles:function(){this.options.leftHandle.unbind(".bar").bind("sliderDrag.bar update.bar moving.bar",a.proxy(this._onDragLeftHandle,this)),this.options.rightHandle.unbind(".bar").bind("sliderDrag.bar update.bar moving.bar",a.proxy(this._onDragRightHandle,this))},_constraintPosition:function(b){var c,d={};return d.left=a.ui.rangeSliderDraggable.prototype._constraintPosition.apply(this,[b]),d.left=this._leftHandle("position",d.left),c=this._rightHandle("position",d.left+this.cache.width.outer-this.cache.rightHandle.width),d.width=c-d.left+this.cache.rightHandle.width,d},_applyPosition:function(b){a.ui.rangeSliderDraggable.prototype._applyPosition.apply(this,[b.left]),this.element.width(b.width)},_mouseWheelZoom:function(b,c,d,e){var f=this._values.min+(this._values.max-this._values.min)/2,g={},h={};return this.options.range===!1||this.options.range.min===!1?(g.max=f,h.min=f):(g.max=f-this.options.range.min/2,h.min=f+this.options.range.min/2),this.options.range!==!1&&this.options.range.max!==!1&&(g.min=f-this.options.range.max/2,h.max=f+this.options.range.max/2),this._leftHandle("option","range",g),this._rightHandle("option","range",h),clearTimeout(this._wheelTimeout),this._wheelTimeout=setTimeout(a.proxy(this._wheelStop,this),200),this.zoomOut(e*this.options.wheelSpeed),!1},_mouseWheelScroll:function(b,c,d,e){return this._wheelTimeout===!1?this.startScroll():clearTimeout(this._wheelTimeout),this._wheelTimeout=setTimeout(a.proxy(this._wheelStop,this),200),this.scrollLeft(e*this.options.wheelSpeed),!1},_wheelStop:function(){this.stopScroll(),this._wheelTimeout=!1},min:function(a){return this._leftHandle("value",a)},max:function(a){return this._rightHandle("value",a)},startScroll:function(){this._deactivateRange()},stopScroll:function(){this._reactivateRange(),this._triggerMouseEvent("stop"),this._leftHandle().trigger("stop"),this._rightHandle().trigger("stop")},scrollLeft:function(a){return a=a||1,0>a?this.scrollRight(-a):(a=this._leftHandle("moveLeft",a),this._rightHandle("moveLeft",a),this.update(),this._triggerMouseEvent("scroll"),void 0)},scrollRight:function(a){return a=a||1,0>a?this.scrollLeft(-a):(a=this._rightHandle("moveRight",a),this._leftHandle("moveRight",a),this.update(),this._triggerMouseEvent("scroll"),void 0)},zoomIn:function(a){if(a=a||1,0>a)return this.zoomOut(-a);var b=this._rightHandle("moveLeft",a);a>b&&(b/=2,this._rightHandle("moveRight",b)),this._leftHandle("moveRight",b),this.update(),this._triggerMouseEvent("zoom")},zoomOut:function(a){if(a=a||1,0>a)return this.zoomIn(-a);var b=this._rightHandle("moveRight",a);a>b&&(b/=2,this._rightHandle("moveLeft",b)),this._leftHandle("moveLeft",b),this.update(),this._triggerMouseEvent("zoom")},values:function(a,b){if("undefined"!=typeof a&&"undefined"!=typeof b){var c=Math.min(a,b),d=Math.max(a,b);this._deactivateRange(),this.options.leftHandle.unbind(".bar"),this.options.rightHandle.unbind(".bar"),this._values.min=this._leftHandle("value",c),this._values.max=this._rightHandle("value",d),this._bindHandles(),this._reactivateRange(),this.update()}return{min:this._values.min,max:this._values.max}},update:function(){this._values.min=this.min(),this._values.max=this.max(),this._cache(),this._positionBar()}})}(jQuery),function(a){"use strict";function b(b,c,d,e){this.label1=b,this.label2=c,this.type=d,this.options=e,this.handle1=this.label1[this.type]("option","handle"),this.handle2=this.label2[this.type]("option","handle"),this.cache=null,this.left=b,this.right=c,this.moving=!1,this.initialized=!1,this.updating=!1,this.Init=function(){this.BindHandle(this.handle1),this.BindHandle(this.handle2),"show"===this.options.show?(setTimeout(a.proxy(this.PositionLabels,this),1),this.initialized=!0):setTimeout(a.proxy(this.AfterInit,this),1e3),this._resizeProxy=a.proxy(this.onWindowResize,this),a(window).resize(this._resizeProxy)},this.Destroy=function(){this._resizeProxy&&(a(window).unbind("resize",this._resizeProxy),this._resizeProxy=null,this.handle1.unbind(".positionner"),this.handle1=null,this.handle2.unbind(".positionner"),this.handle2=null,this.label1=null,this.label2=null,this.left=null,this.right=null),this.cache=null},this.AfterInit=function(){this.initialized=!0},this.Cache=function(){"none"!==this.label1.css("display")&&(this.cache={},this.cache.label1={},this.cache.label2={},this.cache.handle1={},this.cache.handle2={},this.cache.offsetParent={},this.CacheElement(this.label1,this.cache.label1),this.CacheElement(this.label2,this.cache.label2),this.CacheElement(this.handle1,this.cache.handle1),this.CacheElement(this.handle2,this.cache.handle2),this.CacheElement(this.label1.offsetParent(),this.cache.offsetParent)) },this.CacheIfNecessary=function(){null===this.cache?this.Cache():(this.CacheWidth(this.label1,this.cache.label1),this.CacheWidth(this.label2,this.cache.label2),this.CacheHeight(this.label1,this.cache.label1),this.CacheHeight(this.label2,this.cache.label2),this.CacheWidth(this.label1.offsetParent(),this.cache.offsetParent))},this.CacheElement=function(a,b){this.CacheWidth(a,b),this.CacheHeight(a,b),b.offset=a.offset(),b.margin={left:this.ParsePixels("marginLeft",a),right:this.ParsePixels("marginRight",a)},b.border={left:this.ParsePixels("borderLeftWidth",a),right:this.ParsePixels("borderRightWidth",a)}},this.CacheWidth=function(a,b){b.width=a.width(),b.outerWidth=a.outerWidth()},this.CacheHeight=function(a,b){b.outerHeightMargin=a.outerHeight(!0)},this.ParsePixels=function(a,b){return parseInt(b.css(a),10)||0},this.BindHandle=function(b){b.bind("updating.positionner",a.proxy(this.onHandleUpdating,this)),b.bind("update.positionner",a.proxy(this.onHandleUpdated,this)),b.bind("moving.positionner",a.proxy(this.onHandleMoving,this)),b.bind("stop.positionner",a.proxy(this.onHandleStop,this))},this.PositionLabels=function(){if(this.CacheIfNecessary(),null!==this.cache){var a=this.GetRawPosition(this.cache.label1,this.cache.handle1),b=this.GetRawPosition(this.cache.label2,this.cache.handle2);this.ConstraintPositions(a,b),this.PositionLabel(this.label1,a.left,this.cache.label1),this.PositionLabel(this.label2,b.left,this.cache.label2)}},this.PositionLabel=function(a,b,c){var d,e,f,g=this.cache.offsetParent.offset.left+this.cache.offsetParent.border.left;g-b>=0?(a.css("right",""),a.offset({left:b})):(d=g+this.cache.offsetParent.width,e=b+c.margin.left+c.outerWidth+c.margin.right,f=d-e,a.css("left",""),a.css("right",f))},this.ConstraintPositions=function(a,b){a.centerb.outerLeft?(a=this.getLeftPosition(a,b),b=this.getRightPosition(a,b)):a.center>b.center&&b.outerRight>a.outerLeft&&(b=this.getLeftPosition(b,a),a=this.getRightPosition(b,a))},this.getLeftPosition=function(a,b){var c=(b.center+a.center)/2,d=c-a.cache.outerWidth-a.cache.margin.right+a.cache.border.left;return a.left=d,a},this.getRightPosition=function(a,b){var c=(b.center+a.center)/2;return b.left=c+b.cache.margin.left+b.cache.border.left,b},this.ShowIfNecessary=function(){"show"===this.options.show||this.moving||!this.initialized||this.updating||(this.label1.stop(!0,!0).fadeIn(this.options.durationIn||0),this.label2.stop(!0,!0).fadeIn(this.options.durationIn||0),this.moving=!0)},this.HideIfNeeded=function(){this.moving===!0&&(this.label1.stop(!0,!0).delay(this.options.delayOut||0).fadeOut(this.options.durationOut||0),this.label2.stop(!0,!0).delay(this.options.delayOut||0).fadeOut(this.options.durationOut||0),this.moving=!1)},this.onHandleMoving=function(a,b){this.ShowIfNecessary(),this.CacheIfNecessary(),this.UpdateHandlePosition(b),this.PositionLabels()},this.onHandleUpdating=function(){this.updating=!0},this.onHandleUpdated=function(){this.updating=!1,this.cache=null},this.onHandleStop=function(){this.HideIfNeeded()},this.onWindowResize=function(){this.cache=null},this.UpdateHandlePosition=function(a){null!==this.cache&&(a.element[0]===this.handle1[0]?this.UpdatePosition(a,this.cache.handle1):this.UpdatePosition(a,this.cache.handle2))},this.UpdatePosition=function(a,b){b.offset=a.offset},this.GetRawPosition=function(a,b){var c=b.offset.left+b.outerWidth/2,d=c-a.outerWidth/2,e=d+a.outerWidth-a.border.left-a.border.right,f=d-a.margin.left-a.border.left,g=b.offset.top-a.outerHeightMargin;return{left:d,outerLeft:f,top:g,right:e,outerRight:f+a.outerWidth+a.margin.left+a.margin.right,cache:a,center:c}},this.Init()}a.widget("ui.rangeSliderLabel",a.ui.rangeSliderMouseTouch,{options:{handle:null,formatter:!1,handleType:"rangeSliderHandle",show:"show",durationIn:0,durationOut:500,delayOut:500,isLeft:!1},cache:null,_positionner:null,_valueContainer:null,_innerElement:null,_create:function(){this.options.isLeft=this._handle("option","isLeft"),this.element.addClass("ui-rangeSlider-label").css("position","absolute").css("display","block"),this._createElements(),this._toggleClass(),this.options.handle.bind("moving.label",a.proxy(this._onMoving,this)).bind("update.label",a.proxy(this._onUpdate,this)).bind("switch.label",a.proxy(this._onSwitch,this)),"show"!==this.options.show&&this.element.hide(),this._mouseInit()},destroy:function(){this.options.handle.unbind(".label"),this.options.handle=null,this._valueContainer=null,this._innerElement=null,this.element.empty(),this._positionner&&(this._positionner.Destroy(),this._positionner=null),a.ui.rangeSliderMouseTouch.prototype.destroy.apply(this)},_createElements:function(){this._valueContainer=a("
        ").appendTo(this.element),this._innerElement=a("
        ").appendTo(this.element)},_handle:function(){var a=Array.prototype.slice.apply(arguments);return this.options.handle[this.options.handleType].apply(this.options.handle,a)},_setOption:function(a,b){"show"===a?this._updateShowOption(b):("durationIn"===a||"durationOut"===a||"delayOut"===a)&&this._updateDurations(a,b)},_updateShowOption:function(a){this.options.show=a,"show"!==this.options.show?this.element.hide():(this.element.show(),this._display(this.options.handle[this.options.handleType]("value")),this._positionner.PositionLabels()),this._positionner.options.show=this.options.show},_updateDurations:function(a,b){parseInt(b,10)===b&&(this._positionner.options[a]=b,this.options[a]=b)},_display:function(a){this.options.formatter===!1?this._displayText(Math.round(a)):this._displayText(this.options.formatter(a))},_displayText:function(a){this._valueContainer.text(a)},_toggleClass:function(){this.element.toggleClass("ui-rangeSlider-leftLabel",this.options.isLeft).toggleClass("ui-rangeSlider-rightLabel",!this.options.isLeft)},_mouseDown:function(a){this.options.handle.trigger(a)},_mouseUp:function(a){this.options.handle.trigger(a)},_mouseMove:function(a){this.options.handle.trigger(a)},_onMoving:function(a,b){this._display(b.value)},_onUpdate:function(){"show"===this.options.show&&this.update()},_onSwitch:function(a,b){this.options.isLeft=b,this._toggleClass(),this._positionner.PositionLabels()},pair:function(a){null===this._positionner&&(this._positionner=new b(this.element,a,this.widgetName,{show:this.options.show,durationIn:this.options.durationIn,durationOut:this.options.durationOut,delayOut:this.options.delayOut}),a[this.widgetName]("positionner",this._positionner))},positionner:function(a){return"undefined"!=typeof a&&(this._positionner=a),this._positionner},update:function(){this._positionner.cache=null,this._display(this._handle("value")),"show"===this.options.show&&this._positionner.PositionLabels()}})}(jQuery),function(a){"use strict";a.widget("ui.dateRangeSlider",a.ui.rangeSlider,{options:{bounds:{min:new Date(2010,0,1).valueOf(),max:new Date(2012,0,1).valueOf()},defaultValues:{min:new Date(2010,1,11).valueOf(),max:new Date(2011,1,11).valueOf()}},_create:function(){a.ui.rangeSlider.prototype._create.apply(this),this.element.addClass("ui-dateRangeSlider")},destroy:function(){this.element.removeClass("ui-dateRangeSlider"),a.ui.rangeSlider.prototype.destroy.apply(this)},_setDefaultValues:function(){this._values={min:this.options.defaultValues.min.valueOf(),max:this.options.defaultValues.max.valueOf()}},_setRulerParameters:function(){this.ruler.ruler({min:new Date(this.options.bounds.min),max:new Date(this.options.bounds.max),scales:this.options.scales})},_setOption:function(b,c){("defaultValues"===b||"bounds"===b)&&"undefined"!=typeof c&&null!==c&&this._isValidDate(c.min)&&this._isValidDate(c.max)?a.ui.rangeSlider.prototype._setOption.apply(this,[b,{min:c.min.valueOf(),max:c.max.valueOf()}]):a.ui.rangeSlider.prototype._setOption.apply(this,this._toArray(arguments))},_handleType:function(){return"dateRangeSliderHandle"},option:function(b){if("bounds"===b||"defaultValues"===b){var c=a.ui.rangeSlider.prototype.option.apply(this,arguments);return{min:new Date(c.min),max:new Date(c.max)}}return a.ui.rangeSlider.prototype.option.apply(this,this._toArray(arguments))},_defaultFormatter:function(a){var b=a.getMonth()+1,c=a.getDate();return""+a.getFullYear()+"-"+(10>b?"0"+b:b)+"-"+(10>c?"0"+c:c)},_getFormatter:function(){var a=this.options.formatter;return(this.options.formatter===!1||null===this.options.formatter)&&(a=this._defaultFormatter),function(a){return function(b){return a(new Date(b))}}(a)},values:function(b,c){var d=null;return d=this._isValidDate(b)&&this._isValidDate(c)?a.ui.rangeSlider.prototype.values.apply(this,[b.valueOf(),c.valueOf()]):a.ui.rangeSlider.prototype.values.apply(this,this._toArray(arguments)),{min:new Date(d.min),max:new Date(d.max)}},min:function(b){return this._isValidDate(b)?new Date(a.ui.rangeSlider.prototype.min.apply(this,[b.valueOf()])):new Date(a.ui.rangeSlider.prototype.min.apply(this))},max:function(b){return this._isValidDate(b)?new Date(a.ui.rangeSlider.prototype.max.apply(this,[b.valueOf()])):new Date(a.ui.rangeSlider.prototype.max.apply(this))},bounds:function(b,c){var d;return d=this._isValidDate(b)&&this._isValidDate(c)?a.ui.rangeSlider.prototype.bounds.apply(this,[b.valueOf(),c.valueOf()]):a.ui.rangeSlider.prototype.bounds.apply(this,this._toArray(arguments)),{min:new Date(d.min),max:new Date(d.max)}},_isValidDate:function(a){return"undefined"!=typeof a&&a instanceof Date},_toArray:function(a){return Array.prototype.slice.call(a)}})}(jQuery),function(a){"use strict";a.widget("ui.dateRangeSliderHandle",a.ui.rangeSliderHandle,{_steps:!1,_boundsValues:{},_create:function(){this._createBoundsValues(),a.ui.rangeSliderHandle.prototype._create.apply(this)},_getValueForPosition:function(a){var b=this._getRawValueForPositionAndBounds(a,this.options.bounds.min.valueOf(),this.options.bounds.max.valueOf());return this._constraintValue(new Date(b))},_setOption:function(b,c){return"step"===b?(this.options.step=c,this._createSteps(),this.update(),void 0):(a.ui.rangeSliderHandle.prototype._setOption.apply(this,[b,c]),"bounds"===b&&this._createBoundsValues(),void 0)},_createBoundsValues:function(){this._boundsValues={min:this.options.bounds.min.valueOf(),max:this.options.bounds.max.valueOf()}},_bounds:function(){return this._boundsValues},_createSteps:function(){if(this.options.step===!1||!this._isValidStep())return this._steps=!1,void 0;var a=new Date(this.options.bounds.min),b=new Date(this.options.bounds.max),c=a,d=0;for(this._steps=[];b>=c;)this._steps.push(c.valueOf()),c=this._addStep(a,d,this.options.step),d++},_isValidStep:function(){return"object"==typeof this.options.step},_addStep:function(a,b,c){var d=new Date(a.valueOf());return d=this._addThing(d,"FullYear",b,c.years),d=this._addThing(d,"Month",b,c.months),d=this._addThing(d,"Date",b,c.days),d=this._addThing(d,"Hours",b,c.hours),d=this._addThing(d,"Minutes",b,c.minutes),d=this._addThing(d,"Seconds",b,c.seconds)},_addThing:function(a,b,c,d){return 0===c||0===(d||0)?a:(a["set"+b](a["get"+b]()+c*(d||0)),a)},_round:function(a){if(this._steps===!1)return a;for(var b,c,d=this.options.bounds.max.valueOf(),e=this.options.bounds.min.valueOf(),f=Math.max(0,(a-e)/(d-e)),g=Math.floor(this._steps.length*f);this._steps[g]>a;)g--;for(;g+1=this._steps.length-1?this._steps[this._steps.length-1]:0===g?this._steps[0]:(b=this._steps[g],c=this._steps[g+1],c-a>a-b?b:c)},update:function(){this._createBoundsValues(),this._createSteps(),a.ui.rangeSliderHandle.prototype.update.apply(this)},add:function(a,b){return this._addStep(new Date(a),1,b).valueOf()},substract:function(a,b){return this._addStep(new Date(a),-1,b).valueOf()},stepsBetween:function(a,b){if(this.options.step===!1)return b-a;var c=Math.min(a,b),d=Math.max(a,b),e=0,f=!1,g=a>b;for(this.add(c,this.options.step)-c<0&&(f=!0);d>c;)f?d=this.add(d,this.options.step):c=this.add(c,this.options.step),e++;return g?-e:e},multiplyStep:function(a,b){var c={};for(var d in a)a.hasOwnProperty(d)&&(c[d]=a[d]*b);return c},stepRatio:function(){if(this.options.step===!1)return 1;var a=this._steps.length;return this.cache.parent.width/a}})}(jQuery),function(a){"use strict";a.widget("ui.editRangeSlider",a.ui.rangeSlider,{options:{type:"text",round:1},_create:function(){a.ui.rangeSlider.prototype._create.apply(this),this.element.addClass("ui-editRangeSlider")},destroy:function(){this.element.removeClass("ui-editRangeSlider"),a.ui.rangeSlider.prototype.destroy.apply(this)},_setOption:function(b,c){("type"===b||"step"===b)&&this._setLabelOption(b,c),"type"===b&&(this.options[b]=null===this.labels.left?c:this._leftLabel("option",b)),a.ui.rangeSlider.prototype._setOption.apply(this,[b,c])},_setLabelOption:function(a,b){null!==this.labels.left&&(this._leftLabel("option",a,b),this._rightLabel("option",a,b))},_labelType:function(){return"editRangeSliderLabel"},_createLabel:function(b,c){var d=a.ui.rangeSlider.prototype._createLabel.apply(this,[b,c]);return null===b&&d.bind("valueChange",a.proxy(this._onValueChange,this)),d},_addPropertiesToParameter:function(a){return a.type=this.options.type,a.step=this.options.step,a.id=this.element.attr("id"),a},_getLabelConstructorParameters:function(b,c){var d=a.ui.rangeSlider.prototype._getLabelConstructorParameters.apply(this,[b,c]);return this._addPropertiesToParameter(d)},_getLabelRefreshParameters:function(b,c){var d=a.ui.rangeSlider.prototype._getLabelRefreshParameters.apply(this,[b,c]);return this._addPropertiesToParameter(d)},_onValueChange:function(a,b){b.isLeft?this.min(b.value):this.max(b.value)}})}(jQuery),function(a){"use strict";a.widget("ui.editRangeSliderLabel",a.ui.rangeSliderLabel,{options:{type:"text",step:!1,id:""},_input:null,_text:"",_create:function(){a.ui.rangeSliderLabel.prototype._create.apply(this),this._createInput()},_setOption:function(b,c){"type"===b?this._setTypeOption(c):"step"===b&&this._setStepOption(c),a.ui.rangeSliderLabel.prototype._setOption.apply(this,[b,c])},_createInput:function(){this._input=a("").addClass("ui-editRangeSlider-inputValue").appendTo(this._valueContainer),this._setInputName(),this._input.bind("keyup",a.proxy(this._onKeyUp,this)),this._input.blur(a.proxy(this._onChange,this)),"number"===this.options.type&&(this.options.step!==!1&&this._input.attr("step",this.options.step),this._input.click(a.proxy(this._onChange,this))),this._input.val(this._text)},_setInputName:function(){var a=this.options.isLeft?"left":"right";this._input.attr("name",this.options.id+a)},_onSwitch:function(b,c){a.ui.rangeSliderLabel.prototype._onSwitch.apply(this,[b,c]),this._setInputName()},_destroyInput:function(){this._input.remove(),this._input=null},_onKeyUp:function(a){return 13===a.which?(this._onChange(a),!1):void 0},_onChange:function(){var a=this._returnCheckedValue(this._input.val());a!==!1&&this._triggerValue(a)},_triggerValue:function(a){var b=this.options.handle[this.options.handleType]("option","isLeft");this.element.trigger("valueChange",[{isLeft:b,value:a}])},_returnCheckedValue:function(a){var b=parseFloat(a);return isNaN(b)||b.toString()!==a?!1:b},_setTypeOption:function(a){"text"!==a&&"number"!==a||this.options.type===a||(this._destroyInput(),this.options.type=a,this._createInput())},_setStepOption:function(a){this.options.step=a,"number"===this.options.type&&this._input.attr("step",a!==!1?a:"any")},_displayText:function(a){this._input.val(a),this._text=a},enable:function(){a.ui.rangeSliderLabel.prototype.enable.apply(this),this._input.attr("disabled",null)},disable:function(){a.ui.rangeSliderLabel.prototype.disable.apply(this),this._input.attr("disabled","disabled")}})}(jQuery);assets/plugins/jQRangeSlider/jQDateRangeSlider-withRuler-min.js000064400000132064152510440130020614 0ustar00/*! jQRangeSlider 5.3.0 - 2013-07-12 - Copyright (C) Guillaume Gautreau 2012 - MIT and GPLv3 licenses.*/!function(a){"use strict";a.widget("ui.rangeSliderMouseTouch",a.ui.mouse,{enabled:!0,_mouseInit:function(){var b=this;a.ui.mouse.prototype._mouseInit.apply(this),this._mouseDownEvent=!1,this.element.bind("touchstart."+this.widgetName,function(a){return b._touchStart(a)})},_mouseDestroy:function(){a(document).unbind("touchmove."+this.widgetName,this._touchMoveDelegate).unbind("touchend."+this.widgetName,this._touchEndDelegate),a.ui.mouse.prototype._mouseDestroy.apply(this)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},destroy:function(){this._mouseDestroy(),a.ui.mouse.prototype.destroy.apply(this),this._mouseInit=null},_touchStart:function(b){if(!this.enabled)return!1;b.which=1,b.preventDefault(),this._fillTouchEvent(b);var c=this,d=this._mouseDownEvent;this._mouseDown(b),d!==this._mouseDownEvent&&(this._touchEndDelegate=function(a){c._touchEnd(a)},this._touchMoveDelegate=function(a){c._touchMove(a)},a(document).bind("touchmove."+this.widgetName,this._touchMoveDelegate).bind("touchend."+this.widgetName,this._touchEndDelegate))},_mouseDown:function(b){return this.enabled?a.ui.mouse.prototype._mouseDown.apply(this,[b]):!1},_touchEnd:function(b){this._fillTouchEvent(b),this._mouseUp(b),a(document).unbind("touchmove."+this.widgetName,this._touchMoveDelegate).unbind("touchend."+this.widgetName,this._touchEndDelegate),this._mouseDownEvent=!1,a(document).trigger("mouseup")},_touchMove:function(a){return a.preventDefault(),this._fillTouchEvent(a),this._mouseMove(a)},_fillTouchEvent:function(a){var b;b="undefined"==typeof a.targetTouches&&"undefined"==typeof a.changedTouches?a.originalEvent.targetTouches[0]||a.originalEvent.changedTouches[0]:a.targetTouches[0]||a.changedTouches[0],a.pageX=b.pageX,a.pageY=b.pageY}})}(jQuery),function(a){"use strict";a.widget("ui.rangeSliderDraggable",a.ui.rangeSliderMouseTouch,{cache:null,options:{containment:null},_create:function(){a.ui.rangeSliderMouseTouch.prototype._create.apply(this),setTimeout(a.proxy(this._initElementIfNotDestroyed,this),10)},destroy:function(){this.cache=null,a.ui.rangeSliderMouseTouch.prototype.destroy.apply(this)},_initElementIfNotDestroyed:function(){this._mouseInit&&this._initElement()},_initElement:function(){this._mouseInit(),this._cache()},_setOption:function(b,c){"containment"===b&&(this.options.containment=null===c||0===a(c).length?null:a(c))},_mouseStart:function(a){return this._cache(),this.cache.click={left:a.pageX,top:a.pageY},this.cache.initialOffset=this.element.offset(),this._triggerMouseEvent("mousestart"),!0},_mouseDrag:function(a){var b=a.pageX-this.cache.click.left;return b=this._constraintPosition(b+this.cache.initialOffset.left),this._applyPosition(b),this._triggerMouseEvent("sliderDrag"),!1},_mouseStop:function(){this._triggerMouseEvent("stop")},_constraintPosition:function(a){return 0!==this.element.parent().length&&null!==this.cache.parent.offset&&(a=Math.min(a,this.cache.parent.offset.left+this.cache.parent.width-this.cache.width.outer),a=Math.max(a,this.cache.parent.offset.left)),a},_applyPosition:function(a){var b={top:this.cache.offset.top,left:a};this.element.offset({left:a}),this.cache.offset=b},_cacheIfNecessary:function(){null===this.cache&&this._cache()},_cache:function(){this.cache={},this._cacheMargins(),this._cacheParent(),this._cacheDimensions(),this.cache.offset=this.element.offset()},_cacheMargins:function(){this.cache.margin={left:this._parsePixels(this.element,"marginLeft"),right:this._parsePixels(this.element,"marginRight"),top:this._parsePixels(this.element,"marginTop"),bottom:this._parsePixels(this.element,"marginBottom")}},_cacheParent:function(){if(null!==this.options.parent){var a=this.element.parent();this.cache.parent={offset:a.offset(),width:a.width()}}else this.cache.parent=null},_cacheDimensions:function(){this.cache.width={outer:this.element.outerWidth(),inner:this.element.width()}},_parsePixels:function(a,b){return parseInt(a.css(b),10)||0},_triggerMouseEvent:function(a){var b=this._prepareEventData();this.element.trigger(a,b)},_prepareEventData:function(){return{element:this.element,offset:this.cache.offset||null}}})}(jQuery),function(a,b){"use strict";a.widget("ui.rangeSlider",{options:{bounds:{min:0,max:100},defaultValues:{min:20,max:50},wheelMode:null,wheelSpeed:4,arrows:!0,valueLabels:"show",formatter:null,durationIn:0,durationOut:400,delayOut:200,range:{min:!1,max:!1},step:!1,scales:!1,enabled:!0},_values:null,_valuesChanged:!1,bar:null,leftHandle:null,rightHandle:null,innerBar:null,container:null,arrows:null,labels:null,changing:{min:!1,max:!1},changed:{min:!1,max:!1},ruler:null,_create:function(){this._setDefaultValues(),this.labels={left:null,right:null,leftDisplayed:!0,rightDisplayed:!0},this.arrows={left:null,right:null},this.changing={min:!1,max:!1},this.changed={min:!1,max:!1},this._createElements(),this._bindResize(),setTimeout(a.proxy(this.resize,this),1),setTimeout(a.proxy(this._initValues,this),1)},_setDefaultValues:function(){this._values={min:this.options.defaultValues.min,max:this.options.defaultValues.max}},_bindResize:function(){var b=this;this._resizeProxy=function(a){b.resize(a)},a(window).resize(this._resizeProxy)},_initWidth:function(){this.container.css("width",this.element.width()-this.container.outerWidth(!0)+this.container.width()),this.innerBar.css("width",this.container.width()-this.innerBar.outerWidth(!0)+this.innerBar.width())},_initValues:function(){this.values(this._values.min,this._values.max)},_setOption:function(a,b){this._setWheelOption(a,b),this._setArrowsOption(a,b),this._setLabelsOption(a,b),this._setLabelsDurations(a,b),this._setFormatterOption(a,b),this._setBoundsOption(a,b),this._setRangeOption(a,b),this._setStepOption(a,b),this._setScalesOption(a,b),this._setEnabledOption(a,b)},_validProperty:function(a,b,c){return null===a||"undefined"==typeof a[b]?c:a[b]},_setStepOption:function(a,b){"step"===a&&(this.options.step=b,this._leftHandle("option","step",b),this._rightHandle("option","step",b),this._changed(!0))},_setScalesOption:function(a,b){"scales"===a&&(b===!1||null===b?(this.options.scales=!1,this._destroyRuler()):b instanceof Array&&(this.options.scales=b,this._updateRuler()))},_setRangeOption:function(a,b){"range"===a&&(this._bar("option","range",b),this.options.range=this._bar("option","range"),this._changed(!0))},_setBoundsOption:function(a,b){"bounds"===a&&"undefined"!=typeof b.min&&"undefined"!=typeof b.max&&this.bounds(b.min,b.max)},_setWheelOption:function(a,b){("wheelMode"===a||"wheelSpeed"===a)&&(this._bar("option",a,b),this.options[a]=this._bar("option",a))},_setLabelsOption:function(a,b){if("valueLabels"===a){if("hide"!==b&&"show"!==b&&"change"!==b)return;this.options.valueLabels=b,"hide"!==b?(this._createLabels(),this._leftLabel("update"),this._rightLabel("update")):this._destroyLabels()}},_setFormatterOption:function(a,b){"formatter"===a&&null!==b&&"function"==typeof b&&(this.options.formatter=b,"hide"!==this.options.valueLabels&&(this._destroyLabels(),this._createLabels()))},_setArrowsOption:function(a,b){"arrows"!==a||b!==!0&&b!==!1||b===this.options.arrows||(b===!0?(this.element.removeClass("ui-rangeSlider-noArrow").addClass("ui-rangeSlider-withArrows"),this.arrows.left.css("display","block"),this.arrows.right.css("display","block"),this.options.arrows=!0):b===!1&&(this.element.addClass("ui-rangeSlider-noArrow").removeClass("ui-rangeSlider-withArrows"),this.arrows.left.css("display","none"),this.arrows.right.css("display","none"),this.options.arrows=!1),this._initWidth())},_setLabelsDurations:function(a,b){if("durationIn"===a||"durationOut"===a||"delayOut"===a){if(parseInt(b,10)!==b)return;null!==this.labels.left&&this._leftLabel("option",a,b),null!==this.labels.right&&this._rightLabel("option",a,b),this.options[a]=b}},_setEnabledOption:function(a,b){"enabled"===a&&this.toggle(b)},_createElements:function(){"absolute"!==this.element.css("position")&&this.element.css("position","relative"),this.element.addClass("ui-rangeSlider"),this.container=a("
        ").css("position","absolute").appendTo(this.element),this.innerBar=a("
        ").css("position","absolute").css("top",0).css("left",0),this._createHandles(),this._createBar(),this.container.prepend(this.innerBar),this._createArrows(),"hide"!==this.options.valueLabels?this._createLabels():this._destroyLabels(),this._updateRuler(),this.options.enabled||this._toggle(this.options.enabled)},_createHandle:function(b){return a("
        ")[this._handleType()](b).bind("sliderDrag",a.proxy(this._changing,this)).bind("stop",a.proxy(this._changed,this))},_createHandles:function(){this.leftHandle=this._createHandle({isLeft:!0,bounds:this.options.bounds,value:this._values.min,step:this.options.step}).appendTo(this.container),this.rightHandle=this._createHandle({isLeft:!1,bounds:this.options.bounds,value:this._values.max,step:this.options.step}).appendTo(this.container)},_createBar:function(){this.bar=a("
        ").prependTo(this.container).bind("sliderDrag scroll zoom",a.proxy(this._changing,this)).bind("stop",a.proxy(this._changed,this)),this._bar({leftHandle:this.leftHandle,rightHandle:this.rightHandle,values:{min:this._values.min,max:this._values.max},type:this._handleType(),range:this.options.range,wheelMode:this.options.wheelMode,wheelSpeed:this.options.wheelSpeed}),this.options.range=this._bar("option","range"),this.options.wheelMode=this._bar("option","wheelMode"),this.options.wheelSpeed=this._bar("option","wheelSpeed")},_createArrows:function(){this.arrows.left=this._createArrow("left"),this.arrows.right=this._createArrow("right"),this.options.arrows?this.element.addClass("ui-rangeSlider-withArrows"):(this.arrows.left.css("display","none"),this.arrows.right.css("display","none"),this.element.addClass("ui-rangeSlider-noArrow"))},_createArrow:function(b){var c,d=a("
        ").append("
        ").addClass("ui-rangeSlider-"+b+"Arrow").css("position","absolute").css(b,0).appendTo(this.element);return c="right"===b?a.proxy(this._scrollRightClick,this):a.proxy(this._scrollLeftClick,this),d.bind("mousedown touchstart",c),d},_proxy:function(a,b,c){var d=Array.prototype.slice.call(c);return a[b].apply(a,d)},_handleType:function(){return"rangeSliderHandle"},_barType:function(){return"rangeSliderBar"},_bar:function(){return this._proxy(this.bar,this._barType(),arguments)},_labelType:function(){return"rangeSliderLabel"},_leftLabel:function(){return this._proxy(this.labels.left,this._labelType(),arguments)},_rightLabel:function(){return this._proxy(this.labels.right,this._labelType(),arguments)},_leftHandle:function(){return this._proxy(this.leftHandle,this._handleType(),arguments)},_rightHandle:function(){return this._proxy(this.rightHandle,this._handleType(),arguments)},_getValue:function(a,b){return b===this.rightHandle&&(a-=b.outerWidth()),a*(this.options.bounds.max-this.options.bounds.min)/(this.container.innerWidth()-b.outerWidth(!0))+this.options.bounds.min},_trigger:function(a){var b=this;setTimeout(function(){b.element.trigger(a,{label:b.element,values:b.values()})},1)},_changing:function(){this._updateValues()&&(this._trigger("valuesChanging"),this._valuesChanged=!0)},_changed:function(a){(this._updateValues()||this._valuesChanged)&&(this._trigger("valuesChanged"),a!==!0&&this._trigger("userValuesChanged"),this._valuesChanged=!1)},_updateValues:function(){var a=this._leftHandle("value"),b=this._rightHandle("value"),c=this._min(a,b),d=this._max(a,b),e=c!==this._values.min||d!==this._values.max;return this._values.min=this._min(a,b),this._values.max=this._max(a,b),e},_min:function(a,b){return Math.min(a,b)},_max:function(a,b){return Math.max(a,b)},_createLabel:function(b,c){var d;return null===b?(d=this._getLabelConstructorParameters(b,c),b=a("
        ").appendTo(this.element)[this._labelType()](d)):(d=this._getLabelRefreshParameters(b,c),b[this._labelType()](d)),b},_getLabelConstructorParameters:function(a,b){return{handle:b,handleType:this._handleType(),formatter:this._getFormatter(),show:this.options.valueLabels,durationIn:this.options.durationIn,durationOut:this.options.durationOut,delayOut:this.options.delayOut}},_getLabelRefreshParameters:function(){return{formatter:this._getFormatter(),show:this.options.valueLabels,durationIn:this.options.durationIn,durationOut:this.options.durationOut,delayOut:this.options.delayOut}},_getFormatter:function(){return this.options.formatter===!1||null===this.options.formatter?this._defaultFormatter:this.options.formatter},_defaultFormatter:function(a){return Math.round(a)},_destroyLabel:function(a){return null!==a&&(a[this._labelType()]("destroy"),a.remove(),a=null),a},_createLabels:function(){this.labels.left=this._createLabel(this.labels.left,this.leftHandle),this.labels.right=this._createLabel(this.labels.right,this.rightHandle),this._leftLabel("pair",this.labels.right)},_destroyLabels:function(){this.labels.left=this._destroyLabel(this.labels.left),this.labels.right=this._destroyLabel(this.labels.right)},_stepRatio:function(){return this._leftHandle("stepRatio")},_scrollRightClick:function(a){return this.options.enabled?(a.preventDefault(),this._bar("startScroll"),this._bindStopScroll(),this._continueScrolling("scrollRight",4*this._stepRatio(),1),void 0):!1},_continueScrolling:function(a,b,c,d){if(!this.options.enabled)return!1;this._bar(a,c),d=d||5,d--;var e=this,f=16,g=Math.max(1,4/this._stepRatio());this._scrollTimeout=setTimeout(function(){0===d&&(b>f?b=Math.max(f,b/1.5):c=Math.min(g,2*c),d=5),e._continueScrolling(a,b,c,d)},b)},_scrollLeftClick:function(a){return this.options.enabled?(a.preventDefault(),this._bar("startScroll"),this._bindStopScroll(),this._continueScrolling("scrollLeft",4*this._stepRatio(),1),void 0):!1},_bindStopScroll:function(){var b=this;this._stopScrollHandle=function(a){a.preventDefault(),b._stopScroll()},a(document).bind("mouseup touchend",this._stopScrollHandle)},_stopScroll:function(){a(document).unbind("mouseup touchend",this._stopScrollHandle),this._stopScrollHandle=null,this._bar("stopScroll"),clearTimeout(this._scrollTimeout)},_createRuler:function(){this.ruler=a("
        ").appendTo(this.innerBar)},_setRulerParameters:function(){this.ruler.ruler({min:this.options.bounds.min,max:this.options.bounds.max,scales:this.options.scales})},_destroyRuler:function(){null!==this.ruler&&a.fn.ruler&&(this.ruler.ruler("destroy"),this.ruler.remove(),this.ruler=null)},_updateRuler:function(){this._destroyRuler(),this.options.scales!==!1&&a.fn.ruler&&(this._createRuler(),this._setRulerParameters())},values:function(a,b){var c=this._bar("values",a,b);return"undefined"!=typeof a&&"undefined"!=typeof b&&this._changed(!0),c},min:function(a){return this._values.min=this.values(a,this._values.max).min,this._values.min},max:function(a){return this._values.max=this.values(this._values.min,a).max,this._values.max},bounds:function(a,b){return this._isValidValue(a)&&this._isValidValue(b)&&b>a&&(this._setBounds(a,b),this._updateRuler(),this._changed(!0)),this.options.bounds},_isValidValue:function(a){return"undefined"!=typeof a&&parseFloat(a)===a},_setBounds:function(a,b){this.options.bounds={min:a,max:b},this._leftHandle("option","bounds",this.options.bounds),this._rightHandle("option","bounds",this.options.bounds),this._bar("option","bounds",this.options.bounds)},zoomIn:function(a){this._bar("zoomIn",a)},zoomOut:function(a){this._bar("zoomOut",a)},scrollLeft:function(a){this._bar("startScroll"),this._bar("scrollLeft",a),this._bar("stopScroll")},scrollRight:function(a){this._bar("startScroll"),this._bar("scrollRight",a),this._bar("stopScroll")},resize:function(){this._initWidth(),this._leftHandle("update"),this._rightHandle("update"),this._bar("update")},enable:function(){this.toggle(!0)},disable:function(){this.toggle(!1)},toggle:function(a){a===b&&(a=!this.options.enabled),this.options.enabled!==a&&this._toggle(a)},_toggle:function(a){this.options.enabled=a,this.element.toggleClass("ui-rangeSlider-disabled",!a);var b=a?"enable":"disable";this._bar(b),this._leftHandle(b),this._rightHandle(b),this._leftLabel(b),this._rightLabel(b)},destroy:function(){this.element.removeClass("ui-rangeSlider-withArrows ui-rangeSlider-noArrow ui-rangeSlider-disabled"),this._destroyWidgets(),this._destroyElements(),this.element.removeClass("ui-rangeSlider"),this.options=null,a(window).unbind("resize",this._resizeProxy),this._resizeProxy=null,this._bindResize=null,a.Widget.prototype.destroy.apply(this,arguments)},_destroyWidget:function(a){this["_"+a]("destroy"),this[a].remove(),this[a]=null},_destroyWidgets:function(){this._destroyWidget("bar"),this._destroyWidget("leftHandle"),this._destroyWidget("rightHandle"),this._destroyRuler(),this._destroyLabels()},_destroyElements:function(){this.container.remove(),this.container=null,this.innerBar.remove(),this.innerBar=null,this.arrows.left.remove(),this.arrows.right.remove(),this.arrows=null}})}(jQuery),function(a){"use strict";a.widget("ui.rangeSliderHandle",a.ui.rangeSliderDraggable,{currentMove:null,margin:0,parentElement:null,options:{isLeft:!0,bounds:{min:0,max:100},range:!1,value:0,step:!1},_value:0,_left:0,_create:function(){a.ui.rangeSliderDraggable.prototype._create.apply(this),this.element.css("position","absolute").css("top",0).addClass("ui-rangeSlider-handle").toggleClass("ui-rangeSlider-leftHandle",this.options.isLeft).toggleClass("ui-rangeSlider-rightHandle",!this.options.isLeft),this.element.append("
        "),this._value=this._constraintValue(this.options.value)},destroy:function(){this.element.empty(),a.ui.rangeSliderDraggable.prototype.destroy.apply(this)},_setOption:function(b,c){"isLeft"!==b||c!==!0&&c!==!1||c===this.options.isLeft?"step"===b&&this._checkStep(c)?(this.options.step=c,this.update()):"bounds"===b?(this.options.bounds=c,this.update()):"range"===b&&this._checkRange(c)&&(this.options.range=c,this.update()):(this.options.isLeft=c,this.element.toggleClass("ui-rangeSlider-leftHandle",this.options.isLeft).toggleClass("ui-rangeSlider-rightHandle",!this.options.isLeft),this._position(this._value),this.element.trigger("switch",this.options.isLeft)),a.ui.rangeSliderDraggable.prototype._setOption.apply(this,[b,c])},_checkRange:function(a){return a===!1||!this._isValidValue(a.min)&&!this._isValidValue(a.max)},_isValidValue:function(a){return"undefined"!=typeof a&&a!==!1&&parseFloat(a)!==a},_checkStep:function(a){return a===!1||parseFloat(a)===a},_initElement:function(){a.ui.rangeSliderDraggable.prototype._initElement.apply(this),0===this.cache.parent.width||null===this.cache.parent.width?setTimeout(a.proxy(this._initElementIfNotDestroyed,this),500):(this._position(this._value),this._triggerMouseEvent("initialize"))},_bounds:function(){return this.options.bounds},_cache:function(){a.ui.rangeSliderDraggable.prototype._cache.apply(this),this._cacheParent()},_cacheParent:function(){var a=this.element.parent();this.cache.parent={element:a,offset:a.offset(),padding:{left:this._parsePixels(a,"paddingLeft")},width:a.width()}},_position:function(a){var b=this._getPositionForValue(a);this._applyPosition(b)},_constraintPosition:function(a){var b=this._getValueForPosition(a);return this._getPositionForValue(b)},_applyPosition:function(b){a.ui.rangeSliderDraggable.prototype._applyPosition.apply(this,[b]),this._left=b,this._setValue(this._getValueForPosition(b)),this._triggerMouseEvent("moving")},_prepareEventData:function(){var b=a.ui.rangeSliderDraggable.prototype._prepareEventData.apply(this);return b.value=this._value,b},_setValue:function(a){a!==this._value&&(this._value=a)},_constraintValue:function(a){if(a=Math.min(a,this._bounds().max),a=Math.max(a,this._bounds().min),a=this._round(a),this.options.range!==!1){var b=this.options.range.min||!1,c=this.options.range.max||!1;b!==!1&&(a=Math.max(a,this._round(b))),c!==!1&&(a=Math.min(a,this._round(c))),a=Math.min(a,this._bounds().max),a=Math.max(a,this._bounds().min)}return a},_round:function(a){return this.options.step!==!1&&this.options.step>0?Math.round(a/this.options.step)*this.options.step:a},_getPositionForValue:function(a){if(!this.cache||!this.cache.parent||null===this.cache.parent.offset)return 0;a=this._constraintValue(a);var b=(a-this.options.bounds.min)/(this.options.bounds.max-this.options.bounds.min),c=this.cache.parent.width-this.cache.width.outer,d=this.cache.parent.offset.left;return b*c+d},_getValueForPosition:function(a){var b=this._getRawValueForPositionAndBounds(a,this.options.bounds.min,this.options.bounds.max);return this._constraintValue(b)},_getRawValueForPositionAndBounds:function(a,b,c){var d=null===this.cache.parent.offset?0:this.cache.parent.offset.left,e=this.cache.parent.width-this.cache.width.outer,f=(a-d)/e;return f*(c-b)+b},value:function(a){return"undefined"!=typeof a&&(this._cache(),a=this._constraintValue(a),this._position(a)),this._value},update:function(){this._cache();var a=this._constraintValue(this._value),b=this._getPositionForValue(a);a!==this._value?(this._triggerMouseEvent("updating"),this._position(a),this._triggerMouseEvent("update")):b!==this.cache.offset.left&&(this._triggerMouseEvent("updating"),this._position(a),this._triggerMouseEvent("update"))},position:function(a){return"undefined"!=typeof a&&(this._cache(),a=this._constraintPosition(a),this._applyPosition(a)),this._left},add:function(a,b){return a+b},substract:function(a,b){return a-b},stepsBetween:function(a,b){return this.options.step===!1?b-a:(b-a)/this.options.step},multiplyStep:function(a,b){return a*b},moveRight:function(a){var b;return this.options.step===!1?(b=this._left,this.position(this._left+a),this._left-b):(b=this._value,this.value(this.add(b,this.multiplyStep(this.options.step,a))),this.stepsBetween(b,this._value))},moveLeft:function(a){return-this.moveRight(-a)},stepRatio:function(){if(this.options.step===!1)return 1;var a=(this.options.bounds.max-this.options.bounds.min)/this.options.step;return this.cache.parent.width/a}})}(jQuery),function(a){"use strict";a.widget("ui.rangeSliderBar",a.ui.rangeSliderDraggable,{options:{leftHandle:null,rightHandle:null,bounds:{min:0,max:100},type:"rangeSliderHandle",range:!1,drag:function(){},stop:function(){},values:{min:0,max:20},wheelSpeed:4,wheelMode:null},_values:{min:0,max:20},_waitingToInit:2,_wheelTimeout:!1,_create:function(){a.ui.rangeSliderDraggable.prototype._create.apply(this),this.element.css("position","absolute").css("top",0).addClass("ui-rangeSlider-bar"),this.options.leftHandle.bind("initialize",a.proxy(this._onInitialized,this)).bind("mousestart",a.proxy(this._cache,this)).bind("stop",a.proxy(this._onHandleStop,this)),this.options.rightHandle.bind("initialize",a.proxy(this._onInitialized,this)).bind("mousestart",a.proxy(this._cache,this)).bind("stop",a.proxy(this._onHandleStop,this)),this._bindHandles(),this._values=this.options.values,this._setWheelModeOption(this.options.wheelMode)},destroy:function(){this.options.leftHandle.unbind(".bar"),this.options.rightHandle.unbind(".bar"),this.options=null,a.ui.rangeSliderDraggable.prototype.destroy.apply(this)},_setOption:function(a,b){"range"===a?this._setRangeOption(b):"wheelSpeed"===a?this._setWheelSpeedOption(b):"wheelMode"===a&&this._setWheelModeOption(b)},_setRangeOption:function(a){if(("object"!=typeof a||null===a)&&(a=!1),a!==!1||this.options.range!==!1){if(a!==!1){var b="undefined"==typeof a.min?this.options.range.min||!1:a.min,c="undefined"==typeof a.max?this.options.range.max||!1:a.max;this.options.range={min:b,max:c}}else this.options.range=!1;this._setLeftRange(),this._setRightRange()}},_setWheelSpeedOption:function(a){"number"==typeof a&&a>0&&(this.options.wheelSpeed=a)},_setWheelModeOption:function(a){(null===a||a===!1||"zoom"===a||"scroll"===a)&&(this.options.wheelMode!==a&&this.element.parent().unbind("mousewheel.bar"),this._bindMouseWheel(a),this.options.wheelMode=a)},_bindMouseWheel:function(b){"zoom"===b?this.element.parent().bind("mousewheel.bar",a.proxy(this._mouseWheelZoom,this)):"scroll"===b&&this.element.parent().bind("mousewheel.bar",a.proxy(this._mouseWheelScroll,this))},_setLeftRange:function(){if(this.options.range===!1)return!1;var a=this._values.max,b={min:!1,max:!1};b.max=(this.options.range.min||!1)!==!1?this._leftHandle("substract",a,this.options.range.min):!1,b.min=(this.options.range.max||!1)!==!1?this._leftHandle("substract",a,this.options.range.max):!1,this._leftHandle("option","range",b)},_setRightRange:function(){var a=this._values.min,b={min:!1,max:!1};b.min=(this.options.range.min||!1)!==!1?this._rightHandle("add",a,this.options.range.min):!1,b.max=(this.options.range.max||!1)!==!1?this._rightHandle("add",a,this.options.range.max):!1,this._rightHandle("option","range",b)},_deactivateRange:function(){this._leftHandle("option","range",!1),this._rightHandle("option","range",!1)},_reactivateRange:function(){this._setRangeOption(this.options.range)},_onInitialized:function(){this._waitingToInit--,0===this._waitingToInit&&this._initMe()},_initMe:function(){this._cache(),this.min(this._values.min),this.max(this._values.max);var a=this._leftHandle("position"),b=this._rightHandle("position")+this.options.rightHandle.width();this.element.offset({left:a}),this.element.css("width",b-a)},_leftHandle:function(){return this._handleProxy(this.options.leftHandle,arguments)},_rightHandle:function(){return this._handleProxy(this.options.rightHandle,arguments)},_handleProxy:function(a,b){var c=Array.prototype.slice.call(b);return a[this.options.type].apply(a,c)},_cache:function(){a.ui.rangeSliderDraggable.prototype._cache.apply(this),this._cacheHandles()},_cacheHandles:function(){this.cache.rightHandle={},this.cache.rightHandle.width=this.options.rightHandle.width(),this.cache.rightHandle.offset=this.options.rightHandle.offset(),this.cache.leftHandle={},this.cache.leftHandle.offset=this.options.leftHandle.offset()},_mouseStart:function(b){a.ui.rangeSliderDraggable.prototype._mouseStart.apply(this,[b]),this._deactivateRange()},_mouseStop:function(b){a.ui.rangeSliderDraggable.prototype._mouseStop.apply(this,[b]),this._cacheHandles(),this._values.min=this._leftHandle("value"),this._values.max=this._rightHandle("value"),this._reactivateRange(),this._leftHandle().trigger("stop"),this._rightHandle().trigger("stop")},_onDragLeftHandle:function(a,b){return this._cacheIfNecessary(),this._switchedValues()?(this._switchHandles(),this._onDragRightHandle(a,b),void 0):(this._values.min=b.value,this.cache.offset.left=b.offset.left,this.cache.leftHandle.offset=b.offset,this._positionBar(),void 0)},_onDragRightHandle:function(a,b){return this._cacheIfNecessary(),this._switchedValues()?(this._switchHandles(),this._onDragLeftHandle(a,b),void 0):(this._values.max=b.value,this.cache.rightHandle.offset=b.offset,this._positionBar(),void 0)},_positionBar:function(){var a=this.cache.rightHandle.offset.left+this.cache.rightHandle.width-this.cache.leftHandle.offset.left;this.cache.width.inner=a,this.element.css("width",a).offset({left:this.cache.leftHandle.offset.left})},_onHandleStop:function(){this._setLeftRange(),this._setRightRange()},_switchedValues:function(){if(this.min()>this.max()){var a=this._values.min;return this._values.min=this._values.max,this._values.max=a,!0}return!1},_switchHandles:function(){var a=this.options.leftHandle;this.options.leftHandle=this.options.rightHandle,this.options.rightHandle=a,this._leftHandle("option","isLeft",!0),this._rightHandle("option","isLeft",!1),this._bindHandles(),this._cacheHandles()},_bindHandles:function(){this.options.leftHandle.unbind(".bar").bind("sliderDrag.bar update.bar moving.bar",a.proxy(this._onDragLeftHandle,this)),this.options.rightHandle.unbind(".bar").bind("sliderDrag.bar update.bar moving.bar",a.proxy(this._onDragRightHandle,this))},_constraintPosition:function(b){var c,d={};return d.left=a.ui.rangeSliderDraggable.prototype._constraintPosition.apply(this,[b]),d.left=this._leftHandle("position",d.left),c=this._rightHandle("position",d.left+this.cache.width.outer-this.cache.rightHandle.width),d.width=c-d.left+this.cache.rightHandle.width,d},_applyPosition:function(b){a.ui.rangeSliderDraggable.prototype._applyPosition.apply(this,[b.left]),this.element.width(b.width)},_mouseWheelZoom:function(b,c,d,e){var f=this._values.min+(this._values.max-this._values.min)/2,g={},h={};return this.options.range===!1||this.options.range.min===!1?(g.max=f,h.min=f):(g.max=f-this.options.range.min/2,h.min=f+this.options.range.min/2),this.options.range!==!1&&this.options.range.max!==!1&&(g.min=f-this.options.range.max/2,h.max=f+this.options.range.max/2),this._leftHandle("option","range",g),this._rightHandle("option","range",h),clearTimeout(this._wheelTimeout),this._wheelTimeout=setTimeout(a.proxy(this._wheelStop,this),200),this.zoomOut(e*this.options.wheelSpeed),!1},_mouseWheelScroll:function(b,c,d,e){return this._wheelTimeout===!1?this.startScroll():clearTimeout(this._wheelTimeout),this._wheelTimeout=setTimeout(a.proxy(this._wheelStop,this),200),this.scrollLeft(e*this.options.wheelSpeed),!1},_wheelStop:function(){this.stopScroll(),this._wheelTimeout=!1},min:function(a){return this._leftHandle("value",a)},max:function(a){return this._rightHandle("value",a)},startScroll:function(){this._deactivateRange()},stopScroll:function(){this._reactivateRange(),this._triggerMouseEvent("stop"),this._leftHandle().trigger("stop"),this._rightHandle().trigger("stop")},scrollLeft:function(a){return a=a||1,0>a?this.scrollRight(-a):(a=this._leftHandle("moveLeft",a),this._rightHandle("moveLeft",a),this.update(),this._triggerMouseEvent("scroll"),void 0)},scrollRight:function(a){return a=a||1,0>a?this.scrollLeft(-a):(a=this._rightHandle("moveRight",a),this._leftHandle("moveRight",a),this.update(),this._triggerMouseEvent("scroll"),void 0)},zoomIn:function(a){if(a=a||1,0>a)return this.zoomOut(-a);var b=this._rightHandle("moveLeft",a);a>b&&(b/=2,this._rightHandle("moveRight",b)),this._leftHandle("moveRight",b),this.update(),this._triggerMouseEvent("zoom")},zoomOut:function(a){if(a=a||1,0>a)return this.zoomIn(-a);var b=this._rightHandle("moveRight",a);a>b&&(b/=2,this._rightHandle("moveLeft",b)),this._leftHandle("moveLeft",b),this.update(),this._triggerMouseEvent("zoom")},values:function(a,b){if("undefined"!=typeof a&&"undefined"!=typeof b){var c=Math.min(a,b),d=Math.max(a,b);this._deactivateRange(),this.options.leftHandle.unbind(".bar"),this.options.rightHandle.unbind(".bar"),this._values.min=this._leftHandle("value",c),this._values.max=this._rightHandle("value",d),this._bindHandles(),this._reactivateRange(),this.update()}return{min:this._values.min,max:this._values.max}},update:function(){this._values.min=this.min(),this._values.max=this.max(),this._cache(),this._positionBar()}})}(jQuery),function(a){"use strict";function b(b,c,d,e){this.label1=b,this.label2=c,this.type=d,this.options=e,this.handle1=this.label1[this.type]("option","handle"),this.handle2=this.label2[this.type]("option","handle"),this.cache=null,this.left=b,this.right=c,this.moving=!1,this.initialized=!1,this.updating=!1,this.Init=function(){this.BindHandle(this.handle1),this.BindHandle(this.handle2),"show"===this.options.show?(setTimeout(a.proxy(this.PositionLabels,this),1),this.initialized=!0):setTimeout(a.proxy(this.AfterInit,this),1e3),this._resizeProxy=a.proxy(this.onWindowResize,this),a(window).resize(this._resizeProxy)},this.Destroy=function(){this._resizeProxy&&(a(window).unbind("resize",this._resizeProxy),this._resizeProxy=null,this.handle1.unbind(".positionner"),this.handle1=null,this.handle2.unbind(".positionner"),this.handle2=null,this.label1=null,this.label2=null,this.left=null,this.right=null),this.cache=null},this.AfterInit=function(){this.initialized=!0},this.Cache=function(){"none"!==this.label1.css("display")&&(this.cache={},this.cache.label1={},this.cache.label2={},this.cache.handle1={},this.cache.handle2={},this.cache.offsetParent={},this.CacheElement(this.label1,this.cache.label1),this.CacheElement(this.label2,this.cache.label2),this.CacheElement(this.handle1,this.cache.handle1),this.CacheElement(this.handle2,this.cache.handle2),this.CacheElement(this.label1.offsetParent(),this.cache.offsetParent)) },this.CacheIfNecessary=function(){null===this.cache?this.Cache():(this.CacheWidth(this.label1,this.cache.label1),this.CacheWidth(this.label2,this.cache.label2),this.CacheHeight(this.label1,this.cache.label1),this.CacheHeight(this.label2,this.cache.label2),this.CacheWidth(this.label1.offsetParent(),this.cache.offsetParent))},this.CacheElement=function(a,b){this.CacheWidth(a,b),this.CacheHeight(a,b),b.offset=a.offset(),b.margin={left:this.ParsePixels("marginLeft",a),right:this.ParsePixels("marginRight",a)},b.border={left:this.ParsePixels("borderLeftWidth",a),right:this.ParsePixels("borderRightWidth",a)}},this.CacheWidth=function(a,b){b.width=a.width(),b.outerWidth=a.outerWidth()},this.CacheHeight=function(a,b){b.outerHeightMargin=a.outerHeight(!0)},this.ParsePixels=function(a,b){return parseInt(b.css(a),10)||0},this.BindHandle=function(b){b.bind("updating.positionner",a.proxy(this.onHandleUpdating,this)),b.bind("update.positionner",a.proxy(this.onHandleUpdated,this)),b.bind("moving.positionner",a.proxy(this.onHandleMoving,this)),b.bind("stop.positionner",a.proxy(this.onHandleStop,this))},this.PositionLabels=function(){if(this.CacheIfNecessary(),null!==this.cache){var a=this.GetRawPosition(this.cache.label1,this.cache.handle1),b=this.GetRawPosition(this.cache.label2,this.cache.handle2);this.ConstraintPositions(a,b),this.PositionLabel(this.label1,a.left,this.cache.label1),this.PositionLabel(this.label2,b.left,this.cache.label2)}},this.PositionLabel=function(a,b,c){var d,e,f,g=this.cache.offsetParent.offset.left+this.cache.offsetParent.border.left;g-b>=0?(a.css("right",""),a.offset({left:b})):(d=g+this.cache.offsetParent.width,e=b+c.margin.left+c.outerWidth+c.margin.right,f=d-e,a.css("left",""),a.css("right",f))},this.ConstraintPositions=function(a,b){a.centerb.outerLeft?(a=this.getLeftPosition(a,b),b=this.getRightPosition(a,b)):a.center>b.center&&b.outerRight>a.outerLeft&&(b=this.getLeftPosition(b,a),a=this.getRightPosition(b,a))},this.getLeftPosition=function(a,b){var c=(b.center+a.center)/2,d=c-a.cache.outerWidth-a.cache.margin.right+a.cache.border.left;return a.left=d,a},this.getRightPosition=function(a,b){var c=(b.center+a.center)/2;return b.left=c+b.cache.margin.left+b.cache.border.left,b},this.ShowIfNecessary=function(){"show"===this.options.show||this.moving||!this.initialized||this.updating||(this.label1.stop(!0,!0).fadeIn(this.options.durationIn||0),this.label2.stop(!0,!0).fadeIn(this.options.durationIn||0),this.moving=!0)},this.HideIfNeeded=function(){this.moving===!0&&(this.label1.stop(!0,!0).delay(this.options.delayOut||0).fadeOut(this.options.durationOut||0),this.label2.stop(!0,!0).delay(this.options.delayOut||0).fadeOut(this.options.durationOut||0),this.moving=!1)},this.onHandleMoving=function(a,b){this.ShowIfNecessary(),this.CacheIfNecessary(),this.UpdateHandlePosition(b),this.PositionLabels()},this.onHandleUpdating=function(){this.updating=!0},this.onHandleUpdated=function(){this.updating=!1,this.cache=null},this.onHandleStop=function(){this.HideIfNeeded()},this.onWindowResize=function(){this.cache=null},this.UpdateHandlePosition=function(a){null!==this.cache&&(a.element[0]===this.handle1[0]?this.UpdatePosition(a,this.cache.handle1):this.UpdatePosition(a,this.cache.handle2))},this.UpdatePosition=function(a,b){b.offset=a.offset},this.GetRawPosition=function(a,b){var c=b.offset.left+b.outerWidth/2,d=c-a.outerWidth/2,e=d+a.outerWidth-a.border.left-a.border.right,f=d-a.margin.left-a.border.left,g=b.offset.top-a.outerHeightMargin;return{left:d,outerLeft:f,top:g,right:e,outerRight:f+a.outerWidth+a.margin.left+a.margin.right,cache:a,center:c}},this.Init()}a.widget("ui.rangeSliderLabel",a.ui.rangeSliderMouseTouch,{options:{handle:null,formatter:!1,handleType:"rangeSliderHandle",show:"show",durationIn:0,durationOut:500,delayOut:500,isLeft:!1},cache:null,_positionner:null,_valueContainer:null,_innerElement:null,_create:function(){this.options.isLeft=this._handle("option","isLeft"),this.element.addClass("ui-rangeSlider-label").css("position","absolute").css("display","block"),this._createElements(),this._toggleClass(),this.options.handle.bind("moving.label",a.proxy(this._onMoving,this)).bind("update.label",a.proxy(this._onUpdate,this)).bind("switch.label",a.proxy(this._onSwitch,this)),"show"!==this.options.show&&this.element.hide(),this._mouseInit()},destroy:function(){this.options.handle.unbind(".label"),this.options.handle=null,this._valueContainer=null,this._innerElement=null,this.element.empty(),this._positionner&&(this._positionner.Destroy(),this._positionner=null),a.ui.rangeSliderMouseTouch.prototype.destroy.apply(this)},_createElements:function(){this._valueContainer=a("
        ").appendTo(this.element),this._innerElement=a("
        ").appendTo(this.element)},_handle:function(){var a=Array.prototype.slice.apply(arguments);return this.options.handle[this.options.handleType].apply(this.options.handle,a)},_setOption:function(a,b){"show"===a?this._updateShowOption(b):("durationIn"===a||"durationOut"===a||"delayOut"===a)&&this._updateDurations(a,b)},_updateShowOption:function(a){this.options.show=a,"show"!==this.options.show?this.element.hide():(this.element.show(),this._display(this.options.handle[this.options.handleType]("value")),this._positionner.PositionLabels()),this._positionner.options.show=this.options.show},_updateDurations:function(a,b){parseInt(b,10)===b&&(this._positionner.options[a]=b,this.options[a]=b)},_display:function(a){this.options.formatter===!1?this._displayText(Math.round(a)):this._displayText(this.options.formatter(a))},_displayText:function(a){this._valueContainer.text(a)},_toggleClass:function(){this.element.toggleClass("ui-rangeSlider-leftLabel",this.options.isLeft).toggleClass("ui-rangeSlider-rightLabel",!this.options.isLeft)},_mouseDown:function(a){this.options.handle.trigger(a)},_mouseUp:function(a){this.options.handle.trigger(a)},_mouseMove:function(a){this.options.handle.trigger(a)},_onMoving:function(a,b){this._display(b.value)},_onUpdate:function(){"show"===this.options.show&&this.update()},_onSwitch:function(a,b){this.options.isLeft=b,this._toggleClass(),this._positionner.PositionLabels()},pair:function(a){null===this._positionner&&(this._positionner=new b(this.element,a,this.widgetName,{show:this.options.show,durationIn:this.options.durationIn,durationOut:this.options.durationOut,delayOut:this.options.delayOut}),a[this.widgetName]("positionner",this._positionner))},positionner:function(a){return"undefined"!=typeof a&&(this._positionner=a),this._positionner},update:function(){this._positionner.cache=null,this._display(this._handle("value")),"show"===this.options.show&&this._positionner.PositionLabels()}})}(jQuery),function(a){"use strict";a.widget("ui.dateRangeSlider",a.ui.rangeSlider,{options:{bounds:{min:new Date(2010,0,1).valueOf(),max:new Date(2012,0,1).valueOf()},defaultValues:{min:new Date(2010,1,11).valueOf(),max:new Date(2011,1,11).valueOf()}},_create:function(){a.ui.rangeSlider.prototype._create.apply(this),this.element.addClass("ui-dateRangeSlider")},destroy:function(){this.element.removeClass("ui-dateRangeSlider"),a.ui.rangeSlider.prototype.destroy.apply(this)},_setDefaultValues:function(){this._values={min:this.options.defaultValues.min.valueOf(),max:this.options.defaultValues.max.valueOf()}},_setRulerParameters:function(){this.ruler.ruler({min:new Date(this.options.bounds.min),max:new Date(this.options.bounds.max),scales:this.options.scales})},_setOption:function(b,c){("defaultValues"===b||"bounds"===b)&&"undefined"!=typeof c&&null!==c&&this._isValidDate(c.min)&&this._isValidDate(c.max)?a.ui.rangeSlider.prototype._setOption.apply(this,[b,{min:c.min.valueOf(),max:c.max.valueOf()}]):a.ui.rangeSlider.prototype._setOption.apply(this,this._toArray(arguments))},_handleType:function(){return"dateRangeSliderHandle"},option:function(b){if("bounds"===b||"defaultValues"===b){var c=a.ui.rangeSlider.prototype.option.apply(this,arguments);return{min:new Date(c.min),max:new Date(c.max)}}return a.ui.rangeSlider.prototype.option.apply(this,this._toArray(arguments))},_defaultFormatter:function(a){var b=a.getMonth()+1,c=a.getDate();return""+a.getFullYear()+"-"+(10>b?"0"+b:b)+"-"+(10>c?"0"+c:c)},_getFormatter:function(){var a=this.options.formatter;return(this.options.formatter===!1||null===this.options.formatter)&&(a=this._defaultFormatter),function(a){return function(b){return a(new Date(b))}}(a)},values:function(b,c){var d=null;return d=this._isValidDate(b)&&this._isValidDate(c)?a.ui.rangeSlider.prototype.values.apply(this,[b.valueOf(),c.valueOf()]):a.ui.rangeSlider.prototype.values.apply(this,this._toArray(arguments)),{min:new Date(d.min),max:new Date(d.max)}},min:function(b){return this._isValidDate(b)?new Date(a.ui.rangeSlider.prototype.min.apply(this,[b.valueOf()])):new Date(a.ui.rangeSlider.prototype.min.apply(this))},max:function(b){return this._isValidDate(b)?new Date(a.ui.rangeSlider.prototype.max.apply(this,[b.valueOf()])):new Date(a.ui.rangeSlider.prototype.max.apply(this))},bounds:function(b,c){var d;return d=this._isValidDate(b)&&this._isValidDate(c)?a.ui.rangeSlider.prototype.bounds.apply(this,[b.valueOf(),c.valueOf()]):a.ui.rangeSlider.prototype.bounds.apply(this,this._toArray(arguments)),{min:new Date(d.min),max:new Date(d.max)}},_isValidDate:function(a){return"undefined"!=typeof a&&a instanceof Date},_toArray:function(a){return Array.prototype.slice.call(a)}})}(jQuery),function(a){"use strict";a.widget("ui.dateRangeSliderHandle",a.ui.rangeSliderHandle,{_steps:!1,_boundsValues:{},_create:function(){this._createBoundsValues(),a.ui.rangeSliderHandle.prototype._create.apply(this)},_getValueForPosition:function(a){var b=this._getRawValueForPositionAndBounds(a,this.options.bounds.min.valueOf(),this.options.bounds.max.valueOf());return this._constraintValue(new Date(b))},_setOption:function(b,c){return"step"===b?(this.options.step=c,this._createSteps(),this.update(),void 0):(a.ui.rangeSliderHandle.prototype._setOption.apply(this,[b,c]),"bounds"===b&&this._createBoundsValues(),void 0)},_createBoundsValues:function(){this._boundsValues={min:this.options.bounds.min.valueOf(),max:this.options.bounds.max.valueOf()}},_bounds:function(){return this._boundsValues},_createSteps:function(){if(this.options.step===!1||!this._isValidStep())return this._steps=!1,void 0;var a=new Date(this.options.bounds.min),b=new Date(this.options.bounds.max),c=a,d=0;for(this._steps=[];b>=c;)this._steps.push(c.valueOf()),c=this._addStep(a,d,this.options.step),d++},_isValidStep:function(){return"object"==typeof this.options.step},_addStep:function(a,b,c){var d=new Date(a.valueOf());return d=this._addThing(d,"FullYear",b,c.years),d=this._addThing(d,"Month",b,c.months),d=this._addThing(d,"Date",b,c.days),d=this._addThing(d,"Hours",b,c.hours),d=this._addThing(d,"Minutes",b,c.minutes),d=this._addThing(d,"Seconds",b,c.seconds)},_addThing:function(a,b,c,d){return 0===c||0===(d||0)?a:(a["set"+b](a["get"+b]()+c*(d||0)),a)},_round:function(a){if(this._steps===!1)return a;for(var b,c,d=this.options.bounds.max.valueOf(),e=this.options.bounds.min.valueOf(),f=Math.max(0,(a-e)/(d-e)),g=Math.floor(this._steps.length*f);this._steps[g]>a;)g--;for(;g+1=this._steps.length-1?this._steps[this._steps.length-1]:0===g?this._steps[0]:(b=this._steps[g],c=this._steps[g+1],c-a>a-b?b:c)},update:function(){this._createBoundsValues(),this._createSteps(),a.ui.rangeSliderHandle.prototype.update.apply(this)},add:function(a,b){return this._addStep(new Date(a),1,b).valueOf()},substract:function(a,b){return this._addStep(new Date(a),-1,b).valueOf()},stepsBetween:function(a,b){if(this.options.step===!1)return b-a;var c=Math.min(a,b),d=Math.max(a,b),e=0,f=!1,g=a>b;for(this.add(c,this.options.step)-c<0&&(f=!0);d>c;)f?d=this.add(d,this.options.step):c=this.add(c,this.options.step),e++;return g?-e:e},multiplyStep:function(a,b){var c={};for(var d in a)a.hasOwnProperty(d)&&(c[d]=a[d]*b);return c},stepRatio:function(){if(this.options.step===!1)return 1;var a=this._steps.length;return this.cache.parent.width/a}})}(jQuery),function(a){"use strict";var b={first:function(a){return a},next:function(a){return a+1},format:function(){},label:function(a){return Math.round(a)},stop:function(){return!1}};a.widget("ui.ruler",{options:{min:0,max:100,scales:[]},_create:function(){this.element.addClass("ui-ruler"),this._createScales()},destroy:function(){this.element.removeClass("ui-ruler"),this.element.empty()},_regenerate:function(){this.element.empty(),this._createScales()},_setOption:function(a,b){return"min"===a||"max"===a&&b!==this.options[a]?(this.options[a]=b,this._regenerate(),void 0):"scales"===a&&b instanceof Array?(this.options.scales=b,this._regenerate(),void 0):void 0},_createScales:function(){if(this.options.max!==this.options.min)for(var a=0;a").appendTo(this.element);f.addClass("ui-ruler-scale"+d),this._createTicks(f,e)},_createTicks:function(a,b){var c,d,e,f=b.first(this.options.min,this.options.max),g=this.options.max-this.options.min,h=!0;do c=f,f=b.next(c),d=(Math.min(f,this.options.max)-Math.max(c,this.options.min))/g,e=this._createTick(c,f,b),a.append(e),e.css("width",100*d+"%"),h&&c>this.options.min&&e.css("margin-left",100*(c-this.options.min)/g+"%"),h=!1;while(!this._stop(b,f))},_stop:function(a,b){return a.stop(b)||b>=this.options.max},_createTick:function(b,c,d){var e=a("
        "),f=a("
        ").appendTo(e),g=a("").appendTo(f);return g.text(d.label(b,c)),d.format(e,b,c),e}})}(jQuery);assets/plugins/jQRangeSlider/jQDateRangeSlider-min.js000064400000126644152510440130016640 0ustar00/*! jQRangeSlider 5.3.0 - 2013-07-12 - Copyright (C) Guillaume Gautreau 2012 - MIT and GPLv3 licenses.*/!function(a){"use strict";a.widget("ui.rangeSliderMouseTouch",a.ui.mouse,{enabled:!0,_mouseInit:function(){var b=this;a.ui.mouse.prototype._mouseInit.apply(this),this._mouseDownEvent=!1,this.element.bind("touchstart."+this.widgetName,function(a){return b._touchStart(a)})},_mouseDestroy:function(){a(document).unbind("touchmove."+this.widgetName,this._touchMoveDelegate).unbind("touchend."+this.widgetName,this._touchEndDelegate),a.ui.mouse.prototype._mouseDestroy.apply(this)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},destroy:function(){this._mouseDestroy(),a.ui.mouse.prototype.destroy.apply(this),this._mouseInit=null},_touchStart:function(b){if(!this.enabled)return!1;b.which=1,b.preventDefault(),this._fillTouchEvent(b);var c=this,d=this._mouseDownEvent;this._mouseDown(b),d!==this._mouseDownEvent&&(this._touchEndDelegate=function(a){c._touchEnd(a)},this._touchMoveDelegate=function(a){c._touchMove(a)},a(document).bind("touchmove."+this.widgetName,this._touchMoveDelegate).bind("touchend."+this.widgetName,this._touchEndDelegate))},_mouseDown:function(b){return this.enabled?a.ui.mouse.prototype._mouseDown.apply(this,[b]):!1},_touchEnd:function(b){this._fillTouchEvent(b),this._mouseUp(b),a(document).unbind("touchmove."+this.widgetName,this._touchMoveDelegate).unbind("touchend."+this.widgetName,this._touchEndDelegate),this._mouseDownEvent=!1,a(document).trigger("mouseup")},_touchMove:function(a){return a.preventDefault(),this._fillTouchEvent(a),this._mouseMove(a)},_fillTouchEvent:function(a){var b;b="undefined"==typeof a.targetTouches&&"undefined"==typeof a.changedTouches?a.originalEvent.targetTouches[0]||a.originalEvent.changedTouches[0]:a.targetTouches[0]||a.changedTouches[0],a.pageX=b.pageX,a.pageY=b.pageY}})}(jQuery),function(a){"use strict";a.widget("ui.rangeSliderDraggable",a.ui.rangeSliderMouseTouch,{cache:null,options:{containment:null},_create:function(){a.ui.rangeSliderMouseTouch.prototype._create.apply(this),setTimeout(a.proxy(this._initElementIfNotDestroyed,this),10)},destroy:function(){this.cache=null,a.ui.rangeSliderMouseTouch.prototype.destroy.apply(this)},_initElementIfNotDestroyed:function(){this._mouseInit&&this._initElement()},_initElement:function(){this._mouseInit(),this._cache()},_setOption:function(b,c){"containment"===b&&(this.options.containment=null===c||0===a(c).length?null:a(c))},_mouseStart:function(a){return this._cache(),this.cache.click={left:a.pageX,top:a.pageY},this.cache.initialOffset=this.element.offset(),this._triggerMouseEvent("mousestart"),!0},_mouseDrag:function(a){var b=a.pageX-this.cache.click.left;return b=this._constraintPosition(b+this.cache.initialOffset.left),this._applyPosition(b),this._triggerMouseEvent("sliderDrag"),!1},_mouseStop:function(){this._triggerMouseEvent("stop")},_constraintPosition:function(a){return 0!==this.element.parent().length&&null!==this.cache.parent.offset&&(a=Math.min(a,this.cache.parent.offset.left+this.cache.parent.width-this.cache.width.outer),a=Math.max(a,this.cache.parent.offset.left)),a},_applyPosition:function(a){var b={top:this.cache.offset.top,left:a};this.element.offset({left:a}),this.cache.offset=b},_cacheIfNecessary:function(){null===this.cache&&this._cache()},_cache:function(){this.cache={},this._cacheMargins(),this._cacheParent(),this._cacheDimensions(),this.cache.offset=this.element.offset()},_cacheMargins:function(){this.cache.margin={left:this._parsePixels(this.element,"marginLeft"),right:this._parsePixels(this.element,"marginRight"),top:this._parsePixels(this.element,"marginTop"),bottom:this._parsePixels(this.element,"marginBottom")}},_cacheParent:function(){if(null!==this.options.parent){var a=this.element.parent();this.cache.parent={offset:a.offset(),width:a.width()}}else this.cache.parent=null},_cacheDimensions:function(){this.cache.width={outer:this.element.outerWidth(),inner:this.element.width()}},_parsePixels:function(a,b){return parseInt(a.css(b),10)||0},_triggerMouseEvent:function(a){var b=this._prepareEventData();this.element.trigger(a,b)},_prepareEventData:function(){return{element:this.element,offset:this.cache.offset||null}}})}(jQuery),function(a,b){"use strict";a.widget("ui.rangeSlider",{options:{bounds:{min:0,max:100},defaultValues:{min:20,max:50},wheelMode:null,wheelSpeed:4,arrows:!0,valueLabels:"show",formatter:null,durationIn:0,durationOut:400,delayOut:200,range:{min:!1,max:!1},step:!1,scales:!1,enabled:!0},_values:null,_valuesChanged:!1,bar:null,leftHandle:null,rightHandle:null,innerBar:null,container:null,arrows:null,labels:null,changing:{min:!1,max:!1},changed:{min:!1,max:!1},ruler:null,_create:function(){this._setDefaultValues(),this.labels={left:null,right:null,leftDisplayed:!0,rightDisplayed:!0},this.arrows={left:null,right:null},this.changing={min:!1,max:!1},this.changed={min:!1,max:!1},this._createElements(),this._bindResize(),setTimeout(a.proxy(this.resize,this),1),setTimeout(a.proxy(this._initValues,this),1)},_setDefaultValues:function(){this._values={min:this.options.defaultValues.min,max:this.options.defaultValues.max}},_bindResize:function(){var b=this;this._resizeProxy=function(a){b.resize(a)},a(window).resize(this._resizeProxy)},_initWidth:function(){this.container.css("width",this.element.width()-this.container.outerWidth(!0)+this.container.width()),this.innerBar.css("width",this.container.width()-this.innerBar.outerWidth(!0)+this.innerBar.width())},_initValues:function(){this.values(this._values.min,this._values.max)},_setOption:function(a,b){this._setWheelOption(a,b),this._setArrowsOption(a,b),this._setLabelsOption(a,b),this._setLabelsDurations(a,b),this._setFormatterOption(a,b),this._setBoundsOption(a,b),this._setRangeOption(a,b),this._setStepOption(a,b),this._setScalesOption(a,b),this._setEnabledOption(a,b)},_validProperty:function(a,b,c){return null===a||"undefined"==typeof a[b]?c:a[b]},_setStepOption:function(a,b){"step"===a&&(this.options.step=b,this._leftHandle("option","step",b),this._rightHandle("option","step",b),this._changed(!0))},_setScalesOption:function(a,b){"scales"===a&&(b===!1||null===b?(this.options.scales=!1,this._destroyRuler()):b instanceof Array&&(this.options.scales=b,this._updateRuler()))},_setRangeOption:function(a,b){"range"===a&&(this._bar("option","range",b),this.options.range=this._bar("option","range"),this._changed(!0))},_setBoundsOption:function(a,b){"bounds"===a&&"undefined"!=typeof b.min&&"undefined"!=typeof b.max&&this.bounds(b.min,b.max)},_setWheelOption:function(a,b){("wheelMode"===a||"wheelSpeed"===a)&&(this._bar("option",a,b),this.options[a]=this._bar("option",a))},_setLabelsOption:function(a,b){if("valueLabels"===a){if("hide"!==b&&"show"!==b&&"change"!==b)return;this.options.valueLabels=b,"hide"!==b?(this._createLabels(),this._leftLabel("update"),this._rightLabel("update")):this._destroyLabels()}},_setFormatterOption:function(a,b){"formatter"===a&&null!==b&&"function"==typeof b&&(this.options.formatter=b,"hide"!==this.options.valueLabels&&(this._destroyLabels(),this._createLabels()))},_setArrowsOption:function(a,b){"arrows"!==a||b!==!0&&b!==!1||b===this.options.arrows||(b===!0?(this.element.removeClass("ui-rangeSlider-noArrow").addClass("ui-rangeSlider-withArrows"),this.arrows.left.css("display","block"),this.arrows.right.css("display","block"),this.options.arrows=!0):b===!1&&(this.element.addClass("ui-rangeSlider-noArrow").removeClass("ui-rangeSlider-withArrows"),this.arrows.left.css("display","none"),this.arrows.right.css("display","none"),this.options.arrows=!1),this._initWidth())},_setLabelsDurations:function(a,b){if("durationIn"===a||"durationOut"===a||"delayOut"===a){if(parseInt(b,10)!==b)return;null!==this.labels.left&&this._leftLabel("option",a,b),null!==this.labels.right&&this._rightLabel("option",a,b),this.options[a]=b}},_setEnabledOption:function(a,b){"enabled"===a&&this.toggle(b)},_createElements:function(){"absolute"!==this.element.css("position")&&this.element.css("position","relative"),this.element.addClass("ui-rangeSlider"),this.container=a("
        ").css("position","absolute").appendTo(this.element),this.innerBar=a("
        ").css("position","absolute").css("top",0).css("left",0),this._createHandles(),this._createBar(),this.container.prepend(this.innerBar),this._createArrows(),"hide"!==this.options.valueLabels?this._createLabels():this._destroyLabels(),this._updateRuler(),this.options.enabled||this._toggle(this.options.enabled)},_createHandle:function(b){return a("
        ")[this._handleType()](b).bind("sliderDrag",a.proxy(this._changing,this)).bind("stop",a.proxy(this._changed,this))},_createHandles:function(){this.leftHandle=this._createHandle({isLeft:!0,bounds:this.options.bounds,value:this._values.min,step:this.options.step}).appendTo(this.container),this.rightHandle=this._createHandle({isLeft:!1,bounds:this.options.bounds,value:this._values.max,step:this.options.step}).appendTo(this.container)},_createBar:function(){this.bar=a("
        ").prependTo(this.container).bind("sliderDrag scroll zoom",a.proxy(this._changing,this)).bind("stop",a.proxy(this._changed,this)),this._bar({leftHandle:this.leftHandle,rightHandle:this.rightHandle,values:{min:this._values.min,max:this._values.max},type:this._handleType(),range:this.options.range,wheelMode:this.options.wheelMode,wheelSpeed:this.options.wheelSpeed}),this.options.range=this._bar("option","range"),this.options.wheelMode=this._bar("option","wheelMode"),this.options.wheelSpeed=this._bar("option","wheelSpeed")},_createArrows:function(){this.arrows.left=this._createArrow("left"),this.arrows.right=this._createArrow("right"),this.options.arrows?this.element.addClass("ui-rangeSlider-withArrows"):(this.arrows.left.css("display","none"),this.arrows.right.css("display","none"),this.element.addClass("ui-rangeSlider-noArrow"))},_createArrow:function(b){var c,d=a("
        ").append("
        ").addClass("ui-rangeSlider-"+b+"Arrow").css("position","absolute").css(b,0).appendTo(this.element);return c="right"===b?a.proxy(this._scrollRightClick,this):a.proxy(this._scrollLeftClick,this),d.bind("mousedown touchstart",c),d},_proxy:function(a,b,c){var d=Array.prototype.slice.call(c);return a[b].apply(a,d)},_handleType:function(){return"rangeSliderHandle"},_barType:function(){return"rangeSliderBar"},_bar:function(){return this._proxy(this.bar,this._barType(),arguments)},_labelType:function(){return"rangeSliderLabel"},_leftLabel:function(){return this._proxy(this.labels.left,this._labelType(),arguments)},_rightLabel:function(){return this._proxy(this.labels.right,this._labelType(),arguments)},_leftHandle:function(){return this._proxy(this.leftHandle,this._handleType(),arguments)},_rightHandle:function(){return this._proxy(this.rightHandle,this._handleType(),arguments)},_getValue:function(a,b){return b===this.rightHandle&&(a-=b.outerWidth()),a*(this.options.bounds.max-this.options.bounds.min)/(this.container.innerWidth()-b.outerWidth(!0))+this.options.bounds.min},_trigger:function(a){var b=this;setTimeout(function(){b.element.trigger(a,{label:b.element,values:b.values()})},1)},_changing:function(){this._updateValues()&&(this._trigger("valuesChanging"),this._valuesChanged=!0)},_changed:function(a){(this._updateValues()||this._valuesChanged)&&(this._trigger("valuesChanged"),a!==!0&&this._trigger("userValuesChanged"),this._valuesChanged=!1)},_updateValues:function(){var a=this._leftHandle("value"),b=this._rightHandle("value"),c=this._min(a,b),d=this._max(a,b),e=c!==this._values.min||d!==this._values.max;return this._values.min=this._min(a,b),this._values.max=this._max(a,b),e},_min:function(a,b){return Math.min(a,b)},_max:function(a,b){return Math.max(a,b)},_createLabel:function(b,c){var d;return null===b?(d=this._getLabelConstructorParameters(b,c),b=a("
        ").appendTo(this.element)[this._labelType()](d)):(d=this._getLabelRefreshParameters(b,c),b[this._labelType()](d)),b},_getLabelConstructorParameters:function(a,b){return{handle:b,handleType:this._handleType(),formatter:this._getFormatter(),show:this.options.valueLabels,durationIn:this.options.durationIn,durationOut:this.options.durationOut,delayOut:this.options.delayOut}},_getLabelRefreshParameters:function(){return{formatter:this._getFormatter(),show:this.options.valueLabels,durationIn:this.options.durationIn,durationOut:this.options.durationOut,delayOut:this.options.delayOut}},_getFormatter:function(){return this.options.formatter===!1||null===this.options.formatter?this._defaultFormatter:this.options.formatter},_defaultFormatter:function(a){return Math.round(a)},_destroyLabel:function(a){return null!==a&&(a[this._labelType()]("destroy"),a.remove(),a=null),a},_createLabels:function(){this.labels.left=this._createLabel(this.labels.left,this.leftHandle),this.labels.right=this._createLabel(this.labels.right,this.rightHandle),this._leftLabel("pair",this.labels.right)},_destroyLabels:function(){this.labels.left=this._destroyLabel(this.labels.left),this.labels.right=this._destroyLabel(this.labels.right)},_stepRatio:function(){return this._leftHandle("stepRatio")},_scrollRightClick:function(a){return this.options.enabled?(a.preventDefault(),this._bar("startScroll"),this._bindStopScroll(),this._continueScrolling("scrollRight",4*this._stepRatio(),1),void 0):!1},_continueScrolling:function(a,b,c,d){if(!this.options.enabled)return!1;this._bar(a,c),d=d||5,d--;var e=this,f=16,g=Math.max(1,4/this._stepRatio());this._scrollTimeout=setTimeout(function(){0===d&&(b>f?b=Math.max(f,b/1.5):c=Math.min(g,2*c),d=5),e._continueScrolling(a,b,c,d)},b)},_scrollLeftClick:function(a){return this.options.enabled?(a.preventDefault(),this._bar("startScroll"),this._bindStopScroll(),this._continueScrolling("scrollLeft",4*this._stepRatio(),1),void 0):!1},_bindStopScroll:function(){var b=this;this._stopScrollHandle=function(a){a.preventDefault(),b._stopScroll()},a(document).bind("mouseup touchend",this._stopScrollHandle)},_stopScroll:function(){a(document).unbind("mouseup touchend",this._stopScrollHandle),this._stopScrollHandle=null,this._bar("stopScroll"),clearTimeout(this._scrollTimeout)},_createRuler:function(){this.ruler=a("
        ").appendTo(this.innerBar)},_setRulerParameters:function(){this.ruler.ruler({min:this.options.bounds.min,max:this.options.bounds.max,scales:this.options.scales})},_destroyRuler:function(){null!==this.ruler&&a.fn.ruler&&(this.ruler.ruler("destroy"),this.ruler.remove(),this.ruler=null)},_updateRuler:function(){this._destroyRuler(),this.options.scales!==!1&&a.fn.ruler&&(this._createRuler(),this._setRulerParameters())},values:function(a,b){var c=this._bar("values",a,b);return"undefined"!=typeof a&&"undefined"!=typeof b&&this._changed(!0),c},min:function(a){return this._values.min=this.values(a,this._values.max).min,this._values.min},max:function(a){return this._values.max=this.values(this._values.min,a).max,this._values.max},bounds:function(a,b){return this._isValidValue(a)&&this._isValidValue(b)&&b>a&&(this._setBounds(a,b),this._updateRuler(),this._changed(!0)),this.options.bounds},_isValidValue:function(a){return"undefined"!=typeof a&&parseFloat(a)===a},_setBounds:function(a,b){this.options.bounds={min:a,max:b},this._leftHandle("option","bounds",this.options.bounds),this._rightHandle("option","bounds",this.options.bounds),this._bar("option","bounds",this.options.bounds)},zoomIn:function(a){this._bar("zoomIn",a)},zoomOut:function(a){this._bar("zoomOut",a)},scrollLeft:function(a){this._bar("startScroll"),this._bar("scrollLeft",a),this._bar("stopScroll")},scrollRight:function(a){this._bar("startScroll"),this._bar("scrollRight",a),this._bar("stopScroll")},resize:function(){this._initWidth(),this._leftHandle("update"),this._rightHandle("update"),this._bar("update")},enable:function(){this.toggle(!0)},disable:function(){this.toggle(!1)},toggle:function(a){a===b&&(a=!this.options.enabled),this.options.enabled!==a&&this._toggle(a)},_toggle:function(a){this.options.enabled=a,this.element.toggleClass("ui-rangeSlider-disabled",!a);var b=a?"enable":"disable";this._bar(b),this._leftHandle(b),this._rightHandle(b),this._leftLabel(b),this._rightLabel(b)},destroy:function(){this.element.removeClass("ui-rangeSlider-withArrows ui-rangeSlider-noArrow ui-rangeSlider-disabled"),this._destroyWidgets(),this._destroyElements(),this.element.removeClass("ui-rangeSlider"),this.options=null,a(window).unbind("resize",this._resizeProxy),this._resizeProxy=null,this._bindResize=null,a.Widget.prototype.destroy.apply(this,arguments)},_destroyWidget:function(a){this["_"+a]("destroy"),this[a].remove(),this[a]=null},_destroyWidgets:function(){this._destroyWidget("bar"),this._destroyWidget("leftHandle"),this._destroyWidget("rightHandle"),this._destroyRuler(),this._destroyLabels()},_destroyElements:function(){this.container.remove(),this.container=null,this.innerBar.remove(),this.innerBar=null,this.arrows.left.remove(),this.arrows.right.remove(),this.arrows=null}})}(jQuery),function(a){"use strict";a.widget("ui.rangeSliderHandle",a.ui.rangeSliderDraggable,{currentMove:null,margin:0,parentElement:null,options:{isLeft:!0,bounds:{min:0,max:100},range:!1,value:0,step:!1},_value:0,_left:0,_create:function(){a.ui.rangeSliderDraggable.prototype._create.apply(this),this.element.css("position","absolute").css("top",0).addClass("ui-rangeSlider-handle").toggleClass("ui-rangeSlider-leftHandle",this.options.isLeft).toggleClass("ui-rangeSlider-rightHandle",!this.options.isLeft),this.element.append("
        "),this._value=this._constraintValue(this.options.value)},destroy:function(){this.element.empty(),a.ui.rangeSliderDraggable.prototype.destroy.apply(this)},_setOption:function(b,c){"isLeft"!==b||c!==!0&&c!==!1||c===this.options.isLeft?"step"===b&&this._checkStep(c)?(this.options.step=c,this.update()):"bounds"===b?(this.options.bounds=c,this.update()):"range"===b&&this._checkRange(c)&&(this.options.range=c,this.update()):(this.options.isLeft=c,this.element.toggleClass("ui-rangeSlider-leftHandle",this.options.isLeft).toggleClass("ui-rangeSlider-rightHandle",!this.options.isLeft),this._position(this._value),this.element.trigger("switch",this.options.isLeft)),a.ui.rangeSliderDraggable.prototype._setOption.apply(this,[b,c])},_checkRange:function(a){return a===!1||!this._isValidValue(a.min)&&!this._isValidValue(a.max)},_isValidValue:function(a){return"undefined"!=typeof a&&a!==!1&&parseFloat(a)!==a},_checkStep:function(a){return a===!1||parseFloat(a)===a},_initElement:function(){a.ui.rangeSliderDraggable.prototype._initElement.apply(this),0===this.cache.parent.width||null===this.cache.parent.width?setTimeout(a.proxy(this._initElementIfNotDestroyed,this),500):(this._position(this._value),this._triggerMouseEvent("initialize"))},_bounds:function(){return this.options.bounds},_cache:function(){a.ui.rangeSliderDraggable.prototype._cache.apply(this),this._cacheParent()},_cacheParent:function(){var a=this.element.parent();this.cache.parent={element:a,offset:a.offset(),padding:{left:this._parsePixels(a,"paddingLeft")},width:a.width()}},_position:function(a){var b=this._getPositionForValue(a);this._applyPosition(b)},_constraintPosition:function(a){var b=this._getValueForPosition(a);return this._getPositionForValue(b)},_applyPosition:function(b){a.ui.rangeSliderDraggable.prototype._applyPosition.apply(this,[b]),this._left=b,this._setValue(this._getValueForPosition(b)),this._triggerMouseEvent("moving")},_prepareEventData:function(){var b=a.ui.rangeSliderDraggable.prototype._prepareEventData.apply(this);return b.value=this._value,b},_setValue:function(a){a!==this._value&&(this._value=a)},_constraintValue:function(a){if(a=Math.min(a,this._bounds().max),a=Math.max(a,this._bounds().min),a=this._round(a),this.options.range!==!1){var b=this.options.range.min||!1,c=this.options.range.max||!1;b!==!1&&(a=Math.max(a,this._round(b))),c!==!1&&(a=Math.min(a,this._round(c))),a=Math.min(a,this._bounds().max),a=Math.max(a,this._bounds().min)}return a},_round:function(a){return this.options.step!==!1&&this.options.step>0?Math.round(a/this.options.step)*this.options.step:a},_getPositionForValue:function(a){if(!this.cache||!this.cache.parent||null===this.cache.parent.offset)return 0;a=this._constraintValue(a);var b=(a-this.options.bounds.min)/(this.options.bounds.max-this.options.bounds.min),c=this.cache.parent.width-this.cache.width.outer,d=this.cache.parent.offset.left;return b*c+d},_getValueForPosition:function(a){var b=this._getRawValueForPositionAndBounds(a,this.options.bounds.min,this.options.bounds.max);return this._constraintValue(b)},_getRawValueForPositionAndBounds:function(a,b,c){var d=null===this.cache.parent.offset?0:this.cache.parent.offset.left,e=this.cache.parent.width-this.cache.width.outer,f=(a-d)/e;return f*(c-b)+b},value:function(a){return"undefined"!=typeof a&&(this._cache(),a=this._constraintValue(a),this._position(a)),this._value},update:function(){this._cache();var a=this._constraintValue(this._value),b=this._getPositionForValue(a);a!==this._value?(this._triggerMouseEvent("updating"),this._position(a),this._triggerMouseEvent("update")):b!==this.cache.offset.left&&(this._triggerMouseEvent("updating"),this._position(a),this._triggerMouseEvent("update"))},position:function(a){return"undefined"!=typeof a&&(this._cache(),a=this._constraintPosition(a),this._applyPosition(a)),this._left},add:function(a,b){return a+b},substract:function(a,b){return a-b},stepsBetween:function(a,b){return this.options.step===!1?b-a:(b-a)/this.options.step},multiplyStep:function(a,b){return a*b},moveRight:function(a){var b;return this.options.step===!1?(b=this._left,this.position(this._left+a),this._left-b):(b=this._value,this.value(this.add(b,this.multiplyStep(this.options.step,a))),this.stepsBetween(b,this._value))},moveLeft:function(a){return-this.moveRight(-a)},stepRatio:function(){if(this.options.step===!1)return 1;var a=(this.options.bounds.max-this.options.bounds.min)/this.options.step;return this.cache.parent.width/a}})}(jQuery),function(a){"use strict";a.widget("ui.rangeSliderBar",a.ui.rangeSliderDraggable,{options:{leftHandle:null,rightHandle:null,bounds:{min:0,max:100},type:"rangeSliderHandle",range:!1,drag:function(){},stop:function(){},values:{min:0,max:20},wheelSpeed:4,wheelMode:null},_values:{min:0,max:20},_waitingToInit:2,_wheelTimeout:!1,_create:function(){a.ui.rangeSliderDraggable.prototype._create.apply(this),this.element.css("position","absolute").css("top",0).addClass("ui-rangeSlider-bar"),this.options.leftHandle.bind("initialize",a.proxy(this._onInitialized,this)).bind("mousestart",a.proxy(this._cache,this)).bind("stop",a.proxy(this._onHandleStop,this)),this.options.rightHandle.bind("initialize",a.proxy(this._onInitialized,this)).bind("mousestart",a.proxy(this._cache,this)).bind("stop",a.proxy(this._onHandleStop,this)),this._bindHandles(),this._values=this.options.values,this._setWheelModeOption(this.options.wheelMode)},destroy:function(){this.options.leftHandle.unbind(".bar"),this.options.rightHandle.unbind(".bar"),this.options=null,a.ui.rangeSliderDraggable.prototype.destroy.apply(this)},_setOption:function(a,b){"range"===a?this._setRangeOption(b):"wheelSpeed"===a?this._setWheelSpeedOption(b):"wheelMode"===a&&this._setWheelModeOption(b)},_setRangeOption:function(a){if(("object"!=typeof a||null===a)&&(a=!1),a!==!1||this.options.range!==!1){if(a!==!1){var b="undefined"==typeof a.min?this.options.range.min||!1:a.min,c="undefined"==typeof a.max?this.options.range.max||!1:a.max;this.options.range={min:b,max:c}}else this.options.range=!1;this._setLeftRange(),this._setRightRange()}},_setWheelSpeedOption:function(a){"number"==typeof a&&a>0&&(this.options.wheelSpeed=a)},_setWheelModeOption:function(a){(null===a||a===!1||"zoom"===a||"scroll"===a)&&(this.options.wheelMode!==a&&this.element.parent().unbind("mousewheel.bar"),this._bindMouseWheel(a),this.options.wheelMode=a)},_bindMouseWheel:function(b){"zoom"===b?this.element.parent().bind("mousewheel.bar",a.proxy(this._mouseWheelZoom,this)):"scroll"===b&&this.element.parent().bind("mousewheel.bar",a.proxy(this._mouseWheelScroll,this))},_setLeftRange:function(){if(this.options.range===!1)return!1;var a=this._values.max,b={min:!1,max:!1};b.max=(this.options.range.min||!1)!==!1?this._leftHandle("substract",a,this.options.range.min):!1,b.min=(this.options.range.max||!1)!==!1?this._leftHandle("substract",a,this.options.range.max):!1,this._leftHandle("option","range",b)},_setRightRange:function(){var a=this._values.min,b={min:!1,max:!1};b.min=(this.options.range.min||!1)!==!1?this._rightHandle("add",a,this.options.range.min):!1,b.max=(this.options.range.max||!1)!==!1?this._rightHandle("add",a,this.options.range.max):!1,this._rightHandle("option","range",b)},_deactivateRange:function(){this._leftHandle("option","range",!1),this._rightHandle("option","range",!1)},_reactivateRange:function(){this._setRangeOption(this.options.range)},_onInitialized:function(){this._waitingToInit--,0===this._waitingToInit&&this._initMe()},_initMe:function(){this._cache(),this.min(this._values.min),this.max(this._values.max);var a=this._leftHandle("position"),b=this._rightHandle("position")+this.options.rightHandle.width();this.element.offset({left:a}),this.element.css("width",b-a)},_leftHandle:function(){return this._handleProxy(this.options.leftHandle,arguments)},_rightHandle:function(){return this._handleProxy(this.options.rightHandle,arguments)},_handleProxy:function(a,b){var c=Array.prototype.slice.call(b);return a[this.options.type].apply(a,c)},_cache:function(){a.ui.rangeSliderDraggable.prototype._cache.apply(this),this._cacheHandles()},_cacheHandles:function(){this.cache.rightHandle={},this.cache.rightHandle.width=this.options.rightHandle.width(),this.cache.rightHandle.offset=this.options.rightHandle.offset(),this.cache.leftHandle={},this.cache.leftHandle.offset=this.options.leftHandle.offset()},_mouseStart:function(b){a.ui.rangeSliderDraggable.prototype._mouseStart.apply(this,[b]),this._deactivateRange()},_mouseStop:function(b){a.ui.rangeSliderDraggable.prototype._mouseStop.apply(this,[b]),this._cacheHandles(),this._values.min=this._leftHandle("value"),this._values.max=this._rightHandle("value"),this._reactivateRange(),this._leftHandle().trigger("stop"),this._rightHandle().trigger("stop")},_onDragLeftHandle:function(a,b){return this._cacheIfNecessary(),this._switchedValues()?(this._switchHandles(),this._onDragRightHandle(a,b),void 0):(this._values.min=b.value,this.cache.offset.left=b.offset.left,this.cache.leftHandle.offset=b.offset,this._positionBar(),void 0)},_onDragRightHandle:function(a,b){return this._cacheIfNecessary(),this._switchedValues()?(this._switchHandles(),this._onDragLeftHandle(a,b),void 0):(this._values.max=b.value,this.cache.rightHandle.offset=b.offset,this._positionBar(),void 0)},_positionBar:function(){var a=this.cache.rightHandle.offset.left+this.cache.rightHandle.width-this.cache.leftHandle.offset.left;this.cache.width.inner=a,this.element.css("width",a).offset({left:this.cache.leftHandle.offset.left})},_onHandleStop:function(){this._setLeftRange(),this._setRightRange()},_switchedValues:function(){if(this.min()>this.max()){var a=this._values.min;return this._values.min=this._values.max,this._values.max=a,!0}return!1},_switchHandles:function(){var a=this.options.leftHandle;this.options.leftHandle=this.options.rightHandle,this.options.rightHandle=a,this._leftHandle("option","isLeft",!0),this._rightHandle("option","isLeft",!1),this._bindHandles(),this._cacheHandles()},_bindHandles:function(){this.options.leftHandle.unbind(".bar").bind("sliderDrag.bar update.bar moving.bar",a.proxy(this._onDragLeftHandle,this)),this.options.rightHandle.unbind(".bar").bind("sliderDrag.bar update.bar moving.bar",a.proxy(this._onDragRightHandle,this))},_constraintPosition:function(b){var c,d={};return d.left=a.ui.rangeSliderDraggable.prototype._constraintPosition.apply(this,[b]),d.left=this._leftHandle("position",d.left),c=this._rightHandle("position",d.left+this.cache.width.outer-this.cache.rightHandle.width),d.width=c-d.left+this.cache.rightHandle.width,d},_applyPosition:function(b){a.ui.rangeSliderDraggable.prototype._applyPosition.apply(this,[b.left]),this.element.width(b.width)},_mouseWheelZoom:function(b,c,d,e){var f=this._values.min+(this._values.max-this._values.min)/2,g={},h={};return this.options.range===!1||this.options.range.min===!1?(g.max=f,h.min=f):(g.max=f-this.options.range.min/2,h.min=f+this.options.range.min/2),this.options.range!==!1&&this.options.range.max!==!1&&(g.min=f-this.options.range.max/2,h.max=f+this.options.range.max/2),this._leftHandle("option","range",g),this._rightHandle("option","range",h),clearTimeout(this._wheelTimeout),this._wheelTimeout=setTimeout(a.proxy(this._wheelStop,this),200),this.zoomOut(e*this.options.wheelSpeed),!1},_mouseWheelScroll:function(b,c,d,e){return this._wheelTimeout===!1?this.startScroll():clearTimeout(this._wheelTimeout),this._wheelTimeout=setTimeout(a.proxy(this._wheelStop,this),200),this.scrollLeft(e*this.options.wheelSpeed),!1},_wheelStop:function(){this.stopScroll(),this._wheelTimeout=!1},min:function(a){return this._leftHandle("value",a)},max:function(a){return this._rightHandle("value",a)},startScroll:function(){this._deactivateRange()},stopScroll:function(){this._reactivateRange(),this._triggerMouseEvent("stop"),this._leftHandle().trigger("stop"),this._rightHandle().trigger("stop")},scrollLeft:function(a){return a=a||1,0>a?this.scrollRight(-a):(a=this._leftHandle("moveLeft",a),this._rightHandle("moveLeft",a),this.update(),this._triggerMouseEvent("scroll"),void 0)},scrollRight:function(a){return a=a||1,0>a?this.scrollLeft(-a):(a=this._rightHandle("moveRight",a),this._leftHandle("moveRight",a),this.update(),this._triggerMouseEvent("scroll"),void 0)},zoomIn:function(a){if(a=a||1,0>a)return this.zoomOut(-a);var b=this._rightHandle("moveLeft",a);a>b&&(b/=2,this._rightHandle("moveRight",b)),this._leftHandle("moveRight",b),this.update(),this._triggerMouseEvent("zoom")},zoomOut:function(a){if(a=a||1,0>a)return this.zoomIn(-a);var b=this._rightHandle("moveRight",a);a>b&&(b/=2,this._rightHandle("moveLeft",b)),this._leftHandle("moveLeft",b),this.update(),this._triggerMouseEvent("zoom")},values:function(a,b){if("undefined"!=typeof a&&"undefined"!=typeof b){var c=Math.min(a,b),d=Math.max(a,b);this._deactivateRange(),this.options.leftHandle.unbind(".bar"),this.options.rightHandle.unbind(".bar"),this._values.min=this._leftHandle("value",c),this._values.max=this._rightHandle("value",d),this._bindHandles(),this._reactivateRange(),this.update()}return{min:this._values.min,max:this._values.max}},update:function(){this._values.min=this.min(),this._values.max=this.max(),this._cache(),this._positionBar()}})}(jQuery),function(a){"use strict";function b(b,c,d,e){this.label1=b,this.label2=c,this.type=d,this.options=e,this.handle1=this.label1[this.type]("option","handle"),this.handle2=this.label2[this.type]("option","handle"),this.cache=null,this.left=b,this.right=c,this.moving=!1,this.initialized=!1,this.updating=!1,this.Init=function(){this.BindHandle(this.handle1),this.BindHandle(this.handle2),"show"===this.options.show?(setTimeout(a.proxy(this.PositionLabels,this),1),this.initialized=!0):setTimeout(a.proxy(this.AfterInit,this),1e3),this._resizeProxy=a.proxy(this.onWindowResize,this),a(window).resize(this._resizeProxy)},this.Destroy=function(){this._resizeProxy&&(a(window).unbind("resize",this._resizeProxy),this._resizeProxy=null,this.handle1.unbind(".positionner"),this.handle1=null,this.handle2.unbind(".positionner"),this.handle2=null,this.label1=null,this.label2=null,this.left=null,this.right=null),this.cache=null},this.AfterInit=function(){this.initialized=!0},this.Cache=function(){"none"!==this.label1.css("display")&&(this.cache={},this.cache.label1={},this.cache.label2={},this.cache.handle1={},this.cache.handle2={},this.cache.offsetParent={},this.CacheElement(this.label1,this.cache.label1),this.CacheElement(this.label2,this.cache.label2),this.CacheElement(this.handle1,this.cache.handle1),this.CacheElement(this.handle2,this.cache.handle2),this.CacheElement(this.label1.offsetParent(),this.cache.offsetParent)) },this.CacheIfNecessary=function(){null===this.cache?this.Cache():(this.CacheWidth(this.label1,this.cache.label1),this.CacheWidth(this.label2,this.cache.label2),this.CacheHeight(this.label1,this.cache.label1),this.CacheHeight(this.label2,this.cache.label2),this.CacheWidth(this.label1.offsetParent(),this.cache.offsetParent))},this.CacheElement=function(a,b){this.CacheWidth(a,b),this.CacheHeight(a,b),b.offset=a.offset(),b.margin={left:this.ParsePixels("marginLeft",a),right:this.ParsePixels("marginRight",a)},b.border={left:this.ParsePixels("borderLeftWidth",a),right:this.ParsePixels("borderRightWidth",a)}},this.CacheWidth=function(a,b){b.width=a.width(),b.outerWidth=a.outerWidth()},this.CacheHeight=function(a,b){b.outerHeightMargin=a.outerHeight(!0)},this.ParsePixels=function(a,b){return parseInt(b.css(a),10)||0},this.BindHandle=function(b){b.bind("updating.positionner",a.proxy(this.onHandleUpdating,this)),b.bind("update.positionner",a.proxy(this.onHandleUpdated,this)),b.bind("moving.positionner",a.proxy(this.onHandleMoving,this)),b.bind("stop.positionner",a.proxy(this.onHandleStop,this))},this.PositionLabels=function(){if(this.CacheIfNecessary(),null!==this.cache){var a=this.GetRawPosition(this.cache.label1,this.cache.handle1),b=this.GetRawPosition(this.cache.label2,this.cache.handle2);this.ConstraintPositions(a,b),this.PositionLabel(this.label1,a.left,this.cache.label1),this.PositionLabel(this.label2,b.left,this.cache.label2)}},this.PositionLabel=function(a,b,c){var d,e,f,g=this.cache.offsetParent.offset.left+this.cache.offsetParent.border.left;g-b>=0?(a.css("right",""),a.offset({left:b})):(d=g+this.cache.offsetParent.width,e=b+c.margin.left+c.outerWidth+c.margin.right,f=d-e,a.css("left",""),a.css("right",f))},this.ConstraintPositions=function(a,b){a.centerb.outerLeft?(a=this.getLeftPosition(a,b),b=this.getRightPosition(a,b)):a.center>b.center&&b.outerRight>a.outerLeft&&(b=this.getLeftPosition(b,a),a=this.getRightPosition(b,a))},this.getLeftPosition=function(a,b){var c=(b.center+a.center)/2,d=c-a.cache.outerWidth-a.cache.margin.right+a.cache.border.left;return a.left=d,a},this.getRightPosition=function(a,b){var c=(b.center+a.center)/2;return b.left=c+b.cache.margin.left+b.cache.border.left,b},this.ShowIfNecessary=function(){"show"===this.options.show||this.moving||!this.initialized||this.updating||(this.label1.stop(!0,!0).fadeIn(this.options.durationIn||0),this.label2.stop(!0,!0).fadeIn(this.options.durationIn||0),this.moving=!0)},this.HideIfNeeded=function(){this.moving===!0&&(this.label1.stop(!0,!0).delay(this.options.delayOut||0).fadeOut(this.options.durationOut||0),this.label2.stop(!0,!0).delay(this.options.delayOut||0).fadeOut(this.options.durationOut||0),this.moving=!1)},this.onHandleMoving=function(a,b){this.ShowIfNecessary(),this.CacheIfNecessary(),this.UpdateHandlePosition(b),this.PositionLabels()},this.onHandleUpdating=function(){this.updating=!0},this.onHandleUpdated=function(){this.updating=!1,this.cache=null},this.onHandleStop=function(){this.HideIfNeeded()},this.onWindowResize=function(){this.cache=null},this.UpdateHandlePosition=function(a){null!==this.cache&&(a.element[0]===this.handle1[0]?this.UpdatePosition(a,this.cache.handle1):this.UpdatePosition(a,this.cache.handle2))},this.UpdatePosition=function(a,b){b.offset=a.offset},this.GetRawPosition=function(a,b){var c=b.offset.left+b.outerWidth/2,d=c-a.outerWidth/2,e=d+a.outerWidth-a.border.left-a.border.right,f=d-a.margin.left-a.border.left,g=b.offset.top-a.outerHeightMargin;return{left:d,outerLeft:f,top:g,right:e,outerRight:f+a.outerWidth+a.margin.left+a.margin.right,cache:a,center:c}},this.Init()}a.widget("ui.rangeSliderLabel",a.ui.rangeSliderMouseTouch,{options:{handle:null,formatter:!1,handleType:"rangeSliderHandle",show:"show",durationIn:0,durationOut:500,delayOut:500,isLeft:!1},cache:null,_positionner:null,_valueContainer:null,_innerElement:null,_create:function(){this.options.isLeft=this._handle("option","isLeft"),this.element.addClass("ui-rangeSlider-label").css("position","absolute").css("display","block"),this._createElements(),this._toggleClass(),this.options.handle.bind("moving.label",a.proxy(this._onMoving,this)).bind("update.label",a.proxy(this._onUpdate,this)).bind("switch.label",a.proxy(this._onSwitch,this)),"show"!==this.options.show&&this.element.hide(),this._mouseInit()},destroy:function(){this.options.handle.unbind(".label"),this.options.handle=null,this._valueContainer=null,this._innerElement=null,this.element.empty(),this._positionner&&(this._positionner.Destroy(),this._positionner=null),a.ui.rangeSliderMouseTouch.prototype.destroy.apply(this)},_createElements:function(){this._valueContainer=a("
        ").appendTo(this.element),this._innerElement=a("
        ").appendTo(this.element)},_handle:function(){var a=Array.prototype.slice.apply(arguments);return this.options.handle[this.options.handleType].apply(this.options.handle,a)},_setOption:function(a,b){"show"===a?this._updateShowOption(b):("durationIn"===a||"durationOut"===a||"delayOut"===a)&&this._updateDurations(a,b)},_updateShowOption:function(a){this.options.show=a,"show"!==this.options.show?this.element.hide():(this.element.show(),this._display(this.options.handle[this.options.handleType]("value")),this._positionner.PositionLabels()),this._positionner.options.show=this.options.show},_updateDurations:function(a,b){parseInt(b,10)===b&&(this._positionner.options[a]=b,this.options[a]=b)},_display:function(a){this.options.formatter===!1?this._displayText(Math.round(a)):this._displayText(this.options.formatter(a))},_displayText:function(a){this._valueContainer.text(a)},_toggleClass:function(){this.element.toggleClass("ui-rangeSlider-leftLabel",this.options.isLeft).toggleClass("ui-rangeSlider-rightLabel",!this.options.isLeft)},_mouseDown:function(a){this.options.handle.trigger(a)},_mouseUp:function(a){this.options.handle.trigger(a)},_mouseMove:function(a){this.options.handle.trigger(a)},_onMoving:function(a,b){this._display(b.value)},_onUpdate:function(){"show"===this.options.show&&this.update()},_onSwitch:function(a,b){this.options.isLeft=b,this._toggleClass(),this._positionner.PositionLabels()},pair:function(a){null===this._positionner&&(this._positionner=new b(this.element,a,this.widgetName,{show:this.options.show,durationIn:this.options.durationIn,durationOut:this.options.durationOut,delayOut:this.options.delayOut}),a[this.widgetName]("positionner",this._positionner))},positionner:function(a){return"undefined"!=typeof a&&(this._positionner=a),this._positionner},update:function(){this._positionner.cache=null,this._display(this._handle("value")),"show"===this.options.show&&this._positionner.PositionLabels()}})}(jQuery),function(a){"use strict";a.widget("ui.dateRangeSlider",a.ui.rangeSlider,{options:{bounds:{min:new Date(2010,0,1).valueOf(),max:new Date(2012,0,1).valueOf()},defaultValues:{min:new Date(2010,1,11).valueOf(),max:new Date(2011,1,11).valueOf()}},_create:function(){a.ui.rangeSlider.prototype._create.apply(this),this.element.addClass("ui-dateRangeSlider")},destroy:function(){this.element.removeClass("ui-dateRangeSlider"),a.ui.rangeSlider.prototype.destroy.apply(this)},_setDefaultValues:function(){this._values={min:this.options.defaultValues.min.valueOf(),max:this.options.defaultValues.max.valueOf()}},_setRulerParameters:function(){this.ruler.ruler({min:new Date(this.options.bounds.min),max:new Date(this.options.bounds.max),scales:this.options.scales})},_setOption:function(b,c){("defaultValues"===b||"bounds"===b)&&"undefined"!=typeof c&&null!==c&&this._isValidDate(c.min)&&this._isValidDate(c.max)?a.ui.rangeSlider.prototype._setOption.apply(this,[b,{min:c.min.valueOf(),max:c.max.valueOf()}]):a.ui.rangeSlider.prototype._setOption.apply(this,this._toArray(arguments))},_handleType:function(){return"dateRangeSliderHandle"},option:function(b){if("bounds"===b||"defaultValues"===b){var c=a.ui.rangeSlider.prototype.option.apply(this,arguments);return{min:new Date(c.min),max:new Date(c.max)}}return a.ui.rangeSlider.prototype.option.apply(this,this._toArray(arguments))},_defaultFormatter:function(a){var b=a.getMonth()+1,c=a.getDate();return""+a.getFullYear()+"-"+(10>b?"0"+b:b)+"-"+(10>c?"0"+c:c)},_getFormatter:function(){var a=this.options.formatter;return(this.options.formatter===!1||null===this.options.formatter)&&(a=this._defaultFormatter),function(a){return function(b){return a(new Date(b))}}(a)},values:function(b,c){var d=null;return d=this._isValidDate(b)&&this._isValidDate(c)?a.ui.rangeSlider.prototype.values.apply(this,[b.valueOf(),c.valueOf()]):a.ui.rangeSlider.prototype.values.apply(this,this._toArray(arguments)),{min:new Date(d.min),max:new Date(d.max)}},min:function(b){return this._isValidDate(b)?new Date(a.ui.rangeSlider.prototype.min.apply(this,[b.valueOf()])):new Date(a.ui.rangeSlider.prototype.min.apply(this))},max:function(b){return this._isValidDate(b)?new Date(a.ui.rangeSlider.prototype.max.apply(this,[b.valueOf()])):new Date(a.ui.rangeSlider.prototype.max.apply(this))},bounds:function(b,c){var d;return d=this._isValidDate(b)&&this._isValidDate(c)?a.ui.rangeSlider.prototype.bounds.apply(this,[b.valueOf(),c.valueOf()]):a.ui.rangeSlider.prototype.bounds.apply(this,this._toArray(arguments)),{min:new Date(d.min),max:new Date(d.max)}},_isValidDate:function(a){return"undefined"!=typeof a&&a instanceof Date},_toArray:function(a){return Array.prototype.slice.call(a)}})}(jQuery),function(a){"use strict";a.widget("ui.dateRangeSliderHandle",a.ui.rangeSliderHandle,{_steps:!1,_boundsValues:{},_create:function(){this._createBoundsValues(),a.ui.rangeSliderHandle.prototype._create.apply(this)},_getValueForPosition:function(a){var b=this._getRawValueForPositionAndBounds(a,this.options.bounds.min.valueOf(),this.options.bounds.max.valueOf());return this._constraintValue(new Date(b))},_setOption:function(b,c){return"step"===b?(this.options.step=c,this._createSteps(),this.update(),void 0):(a.ui.rangeSliderHandle.prototype._setOption.apply(this,[b,c]),"bounds"===b&&this._createBoundsValues(),void 0)},_createBoundsValues:function(){this._boundsValues={min:this.options.bounds.min.valueOf(),max:this.options.bounds.max.valueOf()}},_bounds:function(){return this._boundsValues},_createSteps:function(){if(this.options.step===!1||!this._isValidStep())return this._steps=!1,void 0;var a=new Date(this.options.bounds.min),b=new Date(this.options.bounds.max),c=a,d=0;for(this._steps=[];b>=c;)this._steps.push(c.valueOf()),c=this._addStep(a,d,this.options.step),d++},_isValidStep:function(){return"object"==typeof this.options.step},_addStep:function(a,b,c){var d=new Date(a.valueOf());return d=this._addThing(d,"FullYear",b,c.years),d=this._addThing(d,"Month",b,c.months),d=this._addThing(d,"Date",b,c.days),d=this._addThing(d,"Hours",b,c.hours),d=this._addThing(d,"Minutes",b,c.minutes),d=this._addThing(d,"Seconds",b,c.seconds)},_addThing:function(a,b,c,d){return 0===c||0===(d||0)?a:(a["set"+b](a["get"+b]()+c*(d||0)),a)},_round:function(a){if(this._steps===!1)return a;for(var b,c,d=this.options.bounds.max.valueOf(),e=this.options.bounds.min.valueOf(),f=Math.max(0,(a-e)/(d-e)),g=Math.floor(this._steps.length*f);this._steps[g]>a;)g--;for(;g+1=this._steps.length-1?this._steps[this._steps.length-1]:0===g?this._steps[0]:(b=this._steps[g],c=this._steps[g+1],c-a>a-b?b:c)},update:function(){this._createBoundsValues(),this._createSteps(),a.ui.rangeSliderHandle.prototype.update.apply(this)},add:function(a,b){return this._addStep(new Date(a),1,b).valueOf()},substract:function(a,b){return this._addStep(new Date(a),-1,b).valueOf()},stepsBetween:function(a,b){if(this.options.step===!1)return b-a;var c=Math.min(a,b),d=Math.max(a,b),e=0,f=!1,g=a>b;for(this.add(c,this.options.step)-c<0&&(f=!0);d>c;)f?d=this.add(d,this.options.step):c=this.add(c,this.options.step),e++;return g?-e:e},multiplyStep:function(a,b){var c={};for(var d in a)a.hasOwnProperty(d)&&(c[d]=a[d]*b);return c},stepRatio:function(){if(this.options.step===!1)return 1;var a=this._steps.length;return this.cache.parent.width/a}})}(jQuery);assets/plugins/jQRangeSlider/demo/sliderDemo.js000064400000021462152510440130015572 0ustar00 (function($, undefined){ "use strict"; $.widget("ui.sliderDemo", { options:{ }, _title: "Float values", _name: "rangeSlider", _create: function(){ this.element.addClass("ui-sliderDemo"); this._elements = {}; this._createTitle(); this._createZones(); this._createOptions(); this._createSlider(); this._createLog(); this._createCode(); }, destroy: function(){ this.element.empty(); }, _setOption: function(name, value){ this._elements.slider[this._name]("option", name, value); }, _getOption: function(name){ return this._elements.slider[this._name]("option", name); }, _easyOptionChange: function(e){ var target = $(e.target), value = target.val(), name = target.attr("name"); if (value === "false"){ value = false } else if (value === "null"){ value = null } else if (!isNaN(parseFloat(value)) && parseFloat(value).toString() == value){ value = parseFloat(value) } this._setOption(name, value); }, _createZones: function(){ var wrapper = $("
        ").appendTo(this.element), inputZone = $("
        ").appendTo(wrapper), optionsZone = $("
        ").appendTo(this.element); this._elements.sliderZone = $("
        ").appendTo(inputZone); this._elements.optionsZone = $("").appendTo(optionsZone); this._elements.logZone = $("
        ").appendTo(wrapper); }, _createTitle: function(){ var title = $("

        "); title.text(this._title); this.element.append(title); }, _createInputs: function(){ var inputs = $("
        "), minInputContainer = $("
        "), maxInputContainer = $("
        "); this._elements.minInput = $("").appendTo(minInputContainer); this._elements.maxInput = $("").appendTo(maxInputContainer); inputs.append("
        min
        ") .append(minInputContainer) .append("
        max
        ") .append(maxInputContainer) .appendTo(this._elements.sliderZone); }, _createSlider: function(){ var slider = $("
        ").appendTo(this._elements.sliderZone); slider[this._name](); this._elements.slider = slider; }, _format: function(value){ return value; }, _createOptions: function(){ this._elements.options = $("
        ").appendTo(this._elements.optionsZone); this._createBoundsOptions(); this._createRangeOptions(); this._createStepOption(); this._createWheelModeOption(); this._createWheelSpeedOption(); this._createArrowsOption(); this._createLabelsOption(); this._createEnabledOption(); }, _createBoundsOptions: function(){ this._createDT("Bounds"); var minSelect = this._createSelect("min", "Bound"), maxSelect = this._createSelect("max", "Bound"); this._addOption(minSelect, 0); this._addOption(minSelect, 10); this._addOption(minSelect, 20); this._addOption(maxSelect, 100); this._addOption(maxSelect, 90); this._addOption(maxSelect, 80); minSelect.bind("change", "min", $.proxy(this._changeBound, this)); maxSelect.bind("change", "max", $.proxy(this._changeBound, this)); }, _changeBound: function(event, ui){ var value = $(event.target).val(), bounds = this._getOption("bounds"); bounds[event.data] = parseFloat(value); this._setOption("bounds", bounds); }, _createRangeOptions: function(){ this._createDT("Range limit"); var minSelect = this._createSelect("min", "RangeLimit"), maxSelect = this._createSelect("max", "RangeLimit"); this._fillMinSelect(minSelect); this._fillMaxSelect(maxSelect); minSelect.bind("change", $.proxy(this._minSelectChange, this)); maxSelect.bind("change", $.proxy(this._maxSelectChange, this)); }, _createStepOption: function(){ this._createDT("Step"); var select = $("").attr("name", name + suffix); this._elements.options.append($("
        ") .append(name + ":") .append(select)); return select; }, _fillMinSelect: function(select){ this._addOption(select, "false"); this._addOption(select, 10); this._addOption(select, 20); this._addOption(select, 30); this._addOption(select, 40); }, _fillMaxSelect: function(select){ this._addOption(select, "false"); this._addOption(select, 50); this._addOption(select, 60); this._addOption(select, 70); this._addOption(select, 80); }, _addOption: function(select, text, value){ var value, option = $("
        ").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var a,b;if(c.browser.msie&& c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a

        ").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(b.range==="min"||b.range==="max"?" ui-slider-range-"+b.range:""))}for(var j=c.length;j"); this.handles=c.add(d(e.join("")).appendTo(a.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(g){g.preventDefault()}).hover(function(){b.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(b.disabled)d(this).blur();else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(g){d(this).data("index.ui-slider-handle", g)});this.handles.keydown(function(g){var k=true,l=d(this).data("index.ui-slider-handle"),i,h,m;if(!a.options.disabled){switch(g.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:k=false;if(!a._keySliding){a._keySliding=true;d(this).addClass("ui-state-active");i=a._start(g,l);if(i===false)return}break}m=a.options.step;i=a.options.values&&a.options.values.length? (h=a.values(l)):(h=a.value());switch(g.keyCode){case d.ui.keyCode.HOME:h=a._valueMin();break;case d.ui.keyCode.END:h=a._valueMax();break;case d.ui.keyCode.PAGE_UP:h=a._trimAlignValue(i+(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:h=a._trimAlignValue(i-(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(i===a._valueMax())return;h=a._trimAlignValue(i+m);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(i===a._valueMin())return;h=a._trimAlignValue(i- m);break}a._slide(g,l,h);return k}}).keyup(function(g){var k=d(this).data("index.ui-slider-handle");if(a._keySliding){a._keySliding=false;a._stop(g,k);a._change(g,k);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy(); return this},_mouseCapture:function(a){var b=this.options,c,f,e,j,g;if(b.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:a.pageX,y:a.pageY});f=this._valueMax()-this._valueMin()+1;j=this;this.handles.each(function(k){var l=Math.abs(c-j.values(k));if(f>l){f=l;e=d(this);g=k}});if(b.range===true&&this.values(1)===b.min){g+=1;e=d(this.handles[g])}if(this._start(a,g)===false)return false; this._mouseSliding=true;j._handleIndex=g;e.addClass("ui-state-active").focus();b=e.offset();this._clickOffset=!d(a.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:a.pageX-b.left-e.width()/2,top:a.pageY-b.top-e.height()/2-(parseInt(e.css("borderTopWidth"),10)||0)-(parseInt(e.css("borderBottomWidth"),10)||0)+(parseInt(e.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(a,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(a){var b= this._normValueFromMouse({x:a.pageX,y:a.pageY});this._slide(a,this._handleIndex,b);return false},_mouseStop:function(a){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(a,this._handleIndex);this._change(a,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b;if(this.orientation==="horizontal"){b= this.elementSize.width;a=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{b=this.elementSize.height;a=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}b=a/b;if(b>1)b=1;if(b<0)b=0;if(this.orientation==="vertical")b=1-b;a=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+b*a)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b); c.values=this.values()}return this._trigger("start",a,c)},_slide:function(a,b,c){var f;if(this.options.values&&this.options.values.length){f=this.values(b?0:1);if(this.options.values.length===2&&this.options.range===true&&(b===0&&c>f||b===1&&c1){this.options.values[a]=this._trimAlignValue(b);this._refreshValue();this._change(null,a)}else if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;f=arguments[0];for(e=0;e=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b;a=a-c;if(Math.abs(c)*2>=b)a+=c>0?b:-b;return parseFloat(a.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var a= this.options.range,b=this.options,c=this,f=!this._animateOff?b.animate:false,e,j={},g,k,l,i;if(this.options.values&&this.options.values.length)this.handles.each(function(h){e=(c.values(h)-c._valueMin())/(c._valueMax()-c._valueMin())*100;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";d(this).stop(1,1)[f?"animate":"css"](j,b.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(h===0)c.range.stop(1,1)[f?"animate":"css"]({left:e+"%"},b.animate);if(h===1)c.range[f?"animate":"css"]({width:e- g+"%"},{queue:false,duration:b.animate})}else{if(h===0)c.range.stop(1,1)[f?"animate":"css"]({bottom:e+"%"},b.animate);if(h===1)c.range[f?"animate":"css"]({height:e-g+"%"},{queue:false,duration:b.animate})}g=e});else{k=this.value();l=this._valueMin();i=this._valueMax();e=i!==l?(k-l)/(i-l)*100:0;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[f?"animate":"css"](j,b.animate);if(a==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[f?"animate":"css"]({width:e+"%"}, b.animate);if(a==="max"&&this.orientation==="horizontal")this.range[f?"animate":"css"]({width:100-e+"%"},{queue:false,duration:b.animate});if(a==="min"&&this.orientation==="vertical")this.range.stop(1,1)[f?"animate":"css"]({height:e+"%"},b.animate);if(a==="max"&&this.orientation==="vertical")this.range[f?"animate":"css"]({height:100-e+"%"},{queue:false,duration:b.animate})}}});d.extend(d.ui.slider,{version:"1.8.16"})})(jQuery); ;/* * jQuery UI Tabs 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Tabs * * Depends: * jquery.ui.core.js * jquery.ui.widget.js */ (function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"
        ",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:"
      1. #{label}
      2. "},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&& e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b= d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]|| (q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"); this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected= this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")); this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+ g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal", function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")}; this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected= -1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier."; d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e= d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b, e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]); j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove(); if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null, this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this}, load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c, "cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this}, url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.16"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k
        '))}function N(a){return a.bind("mouseout", function(b){b=d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");b.length&&b.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(b){b=d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!(d.datepicker._isDisabledDatepicker(J.inline?a.parent()[0]:J.input[0])||!b.length)){b.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"); b.addClass("ui-state-hover");b.hasClass("ui-datepicker-prev")&&b.addClass("ui-datepicker-prev-hover");b.hasClass("ui-datepicker-next")&&b.addClass("ui-datepicker-next-hover")}})}function H(a,b){d.extend(a,b);for(var c in b)if(b[c]==null||b[c]==C)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.16"}});var B=(new Date).getTime(),J;d.extend(M.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv}, setDefaults:function(a){H(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g, "\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:N(d('
        '))}},_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker", function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b);b.settings.disabled&&this._disableDatepicker(a)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&b.append.remove();if(c){b.append=d(''+c+"");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c== "focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('').addClass(this._triggerClass).html(f==""?c:d("").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker(): d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;gh){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a, b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),true);this._updateDatepicker(b);this._updateAlternate(b);b.settings.disabled&&this._disableDatepicker(a);b.dpDiv.css("display","block")}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+= 1;this._dialogInput=d('');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}H(a.settings,e||{});b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/ 2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b= d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e= a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().removeClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a, "datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().addClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f== a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;for(var b=0;b-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input", a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);if(d.datepicker._curInst&&d.datepicker._curInst!=b){d.datepicker._datepickerShowing&&d.datepicker._triggerOnClose(d.datepicker._curInst);d.datepicker._curInst.dpDiv.stop(true,true)}var c=d.datepicker._get(b,"beforeShow");c=c?c.apply(a,[a,b]):{};if(c!==false){H(b.settings,c);b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value= "";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b); c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.datepicker._datepickerShowing= true;d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}}},_updateDatepicker:function(a){this.maxRows=4;var b=d.datepicker._getBorders(a.dpDiv);J=a;a.dpDiv.empty().append(this._generateHTML(a));var c=a.dpDiv.find("iframe.ui-datepicker-cover");c.length&&c.css({left:-b[0],top:-b[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()}); a.dpDiv.find("."+this._dayOverClass+" a").mouseover();b=this._getNumberOfMonths(a);c=b[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");c>1&&a.dpDiv.addClass("ui-datepicker-multi-"+c).css("width",17*c+"em");a.dpDiv[(b[0]!=1||b[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&& !a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var e=a.yearshtml;setTimeout(function(){e===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);e=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(), h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b= this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_triggerOnClose:function(a){var b=this._get(a,"onClose");if(b)b.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a])},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b); this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();d.datepicker._triggerOnClose(b);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")}, _checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"): 0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e["selected"+(c=="M"? "Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a); this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField"); if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"? b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=A+1-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,j-1,l));if(v.getFullYear()!=c||v.getMonth()+1!=j||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd", COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames: null)||this._defaults.monthNames;var i=function(o){(o=k+1 12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&& a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay? new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&nn;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a)); n=this._canAdjustMonth(a,-1,m,g)?''+n+"":f?"":''+n+"";var s=this._get(a,"nextText");s=!h?s:this.formatDate(s,this._daylightSavingAdjust(new Date(m, g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?''+s+"":f?"":''+s+"";j=this._get(a,"currentText");s=this._get(a,"gotoCurrent")&& a.currentDay?u:b;j=!h?j:this.formatDate(j,s,this._getFormatConfig(a));h=!a.inline?'":"";e=e?'
        '+(c?h:"")+(this._isInRange(a,s)?'":"")+(c?"":h)+"
        ":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");s=this._get(a,"dayNames");this._get(a,"dayNamesShort");var q=this._get(a,"dayNamesMin"),A=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),D=this._get(a,"showOtherMonths"),K=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var E=this._getDefaultDate(a),w="",x=0;x1)switch(G){case 0:y+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:y+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:y+=" ui-datepicker-group-middle";t="";break}y+='">'}y+='
        '+(/all|left/.test(t)&& x==0?c?f:n:"")+(/all|right/.test(t)&&x==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,x>0||G>0,A,v)+'
        ';var z=j?'":"";for(t=0;t<7;t++){var r=(t+h)%7;z+="=5?' class="ui-datepicker-week-end"':"")+'>'+q[r]+""}y+=z+"";z=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay, z);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;z=Math.ceil((t+z)/7);this.maxRows=z=l?this.maxRows>z?this.maxRows:z:z;r=this._daylightSavingAdjust(new Date(m,g,1-t));for(var Q=0;Q";var R=!j?"":'";for(t=0;t<7;t++){var I=p?p.apply(a.input?a.input[0]:null,[r]):[true,""],F=r.getMonth()!=g,L=F&&!K||!I[0]||k&&ro;R+='";r.setDate(r.getDate()+1);r=this._daylightSavingAdjust(r)}y+=R+""}g++;if(g>11){g=0;m++}y+="
        '+this._get(a,"weekHeader")+"
        '+this._get(a,"calculateWeek")(r)+""+(F&&!D?" ":L?''+ r.getDate()+"":''+r.getDate()+"")+"
        "+(l?"
        "+(i[0]>0&&G==i[1]-1?'
        ':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'': "");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='
        ',o="";if(h||!j)o+=''+i[b]+"";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='"}u||(k+=o+(h||!(j&&l)?" ":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+=''+c+"";else{g=this._get(a,"yearRange").split(":");var s=(new Date).getFullYear();i=function(q){q=q.match(/c[+-].*/)?c+parseInt(q.substring(1),10):q.match(/[+-].*/)?s+parseInt(q,10):parseInt(q,10);return isNaN(q)?s:q};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b, e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?" ":"")+o;k+="
        ";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c=="Y"?b:0),f=a.drawMonth+ (c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&ba?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");if(b)b.apply(a.input? a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);c=this._daylightSavingAdjust(new Date(c, e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a, "dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=function(a){if(!this.length)return this; if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));return this.each(function(){typeof a== "string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.16";window["DP_jQuery_"+B]=d})(jQuery); ;/* * jQuery UI Progressbar 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Progressbar * * Depends: * jquery.ui.core.js * jquery.ui.widget.js */ (function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("
        ").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"); this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100* this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.16"})})(jQuery); ;/* * jQuery UI Effects 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Effects/ */ jQuery.effects||function(f,j){function m(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1], 16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return n.transparent;return n[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return m(b)}function o(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle, a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function p(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d= a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function l(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor", "borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=m(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var n={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0, 0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211, 211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},q=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b, d){if(f.isFunction(b)){d=b;b=null}return this.queue(function(){var e=f(this),g=e.attr("style")||" ",h=p(o.call(this)),r,v=e.attr("class");f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});r=p(o.call(this));e.attr("class",v);e.animate(u(h,r),{queue:false,duration:a,easing:b,complete:function(){f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments);f.dequeue(this)}})})}; f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this, [{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.16",save:function(c,a){for(var b=0;b
        ").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}), d=document.activeElement;c.wrap(b);if(c[0]===d||f.contains(c[0],d))f(d).focus();b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(e,g){a[g]=c.css(g);if(isNaN(parseInt(a[g],10)))a[g]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){var a,b=document.activeElement; if(c.parent().is(".ui-effects-wrapper")){a=c.parent().replaceWith(c);if(c[0]===b||f.contains(c[0],b))f(b).focus();return a}return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)}); return d.call(this,b)},_show:f.fn.show,show:function(c){if(l(c))return this._show.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(l(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(l(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this, arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/ 2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b, d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c, a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b, d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+ e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery); ;/* * jQuery UI Effects Fade 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Effects/Fade * * Depends: * jquery.effects.core.js */ (function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery); ;/* * jQuery UI Effects Fold 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Effects/Fold * * Depends: * jquery.effects.core.js */ (function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1], 10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery); ;/* * jQuery UI Effects Highlight 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Effects/Highlight * * Depends: * jquery.effects.core.js */ (function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&& this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery); ;/* * jQuery UI Effects Pulsate 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Effects/Pulsate * * Depends: * jquery.effects.core.js */ (function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments); b.dequeue()})})}})(jQuery); ;assets/plugins/jQRangeSlider/demo/img/classicTheme.png000064400000010443152510440140017031 0ustar00PNG  IHDRtPȧQ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FNIDATx]hWwl&)&~A(OR)5j(K_J B mH%V *Fn6+$ZSd9}31d6 n|{Y"TD BE B*PAPA "Tl (vj# @M쐳'6ZDO(Wr4*YG#rG?Al)B+Pe#r gb(F6 dnpF?AA_ V "?dz\FK1}>\i2OOq(b ʎ%}P% le*J URY\)9-B}Pr%{4s DmUTBo=m;f~ka4ƿEA0@`RrjW3~9Ԇ:S"15{w?~F<㟶 r?"i &Ky/B}lDf=xnF< ;qL{/\w5:w I !'eYDbEBL3z'8r,)+p^ *˕51pe O.YƉΗDTBy T2ңcHZstN4zq" ݏ+@@zo8'YɄJS4A"99U@!ePD S&jqyR明[ ŖLͨМ{KܶG(+<u;v <% P\U%PTN, J)wp").V^ ַ1GX v}'T,{1ݸUf)9P<zl< C8k:+XΛ-YxIHP߱r13%QP R x0^f|;+c az_C1D#X]]-Wݸ.*L!C"\gi>\i*PA "T "TDD B1t uIENDB`assets/plugins/jQRangeSlider/demo/img/calendar.png000064400000001243152510440140016174 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<5IDAT8˥KQQs4B$[U;i6h&h["jբMBFQ&2 "!!2l{NWY /=}*;9![\v*D'`EpNpX'UpVq"Sw.Djw7{|$W@q`Lt/d~W[%BH L l>/`xl xD$"q[d(o FjeUU}.Ex toJU5"0NUV UM2r7P3.&"ZP JTS =EݤqB=kJ V"x\.F@D],#X=ZycIgڒTt[<_~H%Q qQ mXAKu1|/M@!F>"
        >9Qv7aY8:]X9u #BZ=pIENDB`assets/plugins/jQRangeSlider/demo/img/iThingTheme.png000064400000003303152510440140016627 0ustar00PNG  IHDRtPGPtEXtSoftwareAdobe ImageReadyqe<eIDATxklU3},JjAKy6T }_N{n^c?qaOb-!>7Ux$U0Zg@EwF.G?cu//n}r)b?O_/2`Zj7c2n=OVmɵ GrJ'Oeebo,5>~7&c+Vz +`}..YV8pw;nuղƛ4a%Ro].ptvu ܱ\2`8$Ip} ۗ1J !TÕZ:BO)>+E/\XݱdH="keTj\%,z\m42;45o8R9("L}of7[p T*r4.DZ& i+LD~o8elYȂQO Jp*\ϊB;nA|Eអ6a h.4JJL\ڳΛ?y{l C0-ZЫF4.ovs.L҄i5N6MB xoP˦utyc7d)ͱNTiZaf;BGp'ׯ]z#t֭Y==!p 3sfVYz%Xlv ;[pYY pg w-I\pI*^kp";r\oND–m `˛uFKbBgg7mzJ[pӛhiPjyl^iXnsk Xn2'Zk[2xpmq w'M(K;>ȖsJ'l_U!z c^5i+9\Ɓ,JWdD硑ڼH%(E\rak!%C>mwI,T.hd0߽ws]w2_QUr jQRangeSlider demo page

        jQRangeSlider demos

        Classic
        classic
        iThing
        iThing
        assets/plugins/jQRangeSlider/jQAllRangeSliders-withRuler-min.js000064400000140751152510440140020635 0ustar00/*! jQRangeSlider 5.3.0 - 2013-07-12 - Copyright (C) Guillaume Gautreau 2012 - MIT and GPLv3 licenses.*/!function(a){"use strict";a.widget("ui.rangeSliderMouseTouch",a.ui.mouse,{enabled:!0,_mouseInit:function(){var b=this;a.ui.mouse.prototype._mouseInit.apply(this),this._mouseDownEvent=!1,this.element.bind("touchstart."+this.widgetName,function(a){return b._touchStart(a)})},_mouseDestroy:function(){a(document).unbind("touchmove."+this.widgetName,this._touchMoveDelegate).unbind("touchend."+this.widgetName,this._touchEndDelegate),a.ui.mouse.prototype._mouseDestroy.apply(this)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},destroy:function(){this._mouseDestroy(),a.ui.mouse.prototype.destroy.apply(this),this._mouseInit=null},_touchStart:function(b){if(!this.enabled)return!1;b.which=1,b.preventDefault(),this._fillTouchEvent(b);var c=this,d=this._mouseDownEvent;this._mouseDown(b),d!==this._mouseDownEvent&&(this._touchEndDelegate=function(a){c._touchEnd(a)},this._touchMoveDelegate=function(a){c._touchMove(a)},a(document).bind("touchmove."+this.widgetName,this._touchMoveDelegate).bind("touchend."+this.widgetName,this._touchEndDelegate))},_mouseDown:function(b){return this.enabled?a.ui.mouse.prototype._mouseDown.apply(this,[b]):!1},_touchEnd:function(b){this._fillTouchEvent(b),this._mouseUp(b),a(document).unbind("touchmove."+this.widgetName,this._touchMoveDelegate).unbind("touchend."+this.widgetName,this._touchEndDelegate),this._mouseDownEvent=!1,a(document).trigger("mouseup")},_touchMove:function(a){return a.preventDefault(),this._fillTouchEvent(a),this._mouseMove(a)},_fillTouchEvent:function(a){var b;b="undefined"==typeof a.targetTouches&&"undefined"==typeof a.changedTouches?a.originalEvent.targetTouches[0]||a.originalEvent.changedTouches[0]:a.targetTouches[0]||a.changedTouches[0],a.pageX=b.pageX,a.pageY=b.pageY}})}(jQuery),function(a){"use strict";a.widget("ui.rangeSliderDraggable",a.ui.rangeSliderMouseTouch,{cache:null,options:{containment:null},_create:function(){a.ui.rangeSliderMouseTouch.prototype._create.apply(this),setTimeout(a.proxy(this._initElementIfNotDestroyed,this),10)},destroy:function(){this.cache=null,a.ui.rangeSliderMouseTouch.prototype.destroy.apply(this)},_initElementIfNotDestroyed:function(){this._mouseInit&&this._initElement()},_initElement:function(){this._mouseInit(),this._cache()},_setOption:function(b,c){"containment"===b&&(this.options.containment=null===c||0===a(c).length?null:a(c))},_mouseStart:function(a){return this._cache(),this.cache.click={left:a.pageX,top:a.pageY},this.cache.initialOffset=this.element.offset(),this._triggerMouseEvent("mousestart"),!0},_mouseDrag:function(a){var b=a.pageX-this.cache.click.left;return b=this._constraintPosition(b+this.cache.initialOffset.left),this._applyPosition(b),this._triggerMouseEvent("sliderDrag"),!1},_mouseStop:function(){this._triggerMouseEvent("stop")},_constraintPosition:function(a){return 0!==this.element.parent().length&&null!==this.cache.parent.offset&&(a=Math.min(a,this.cache.parent.offset.left+this.cache.parent.width-this.cache.width.outer),a=Math.max(a,this.cache.parent.offset.left)),a},_applyPosition:function(a){var b={top:this.cache.offset.top,left:a};this.element.offset({left:a}),this.cache.offset=b},_cacheIfNecessary:function(){null===this.cache&&this._cache()},_cache:function(){this.cache={},this._cacheMargins(),this._cacheParent(),this._cacheDimensions(),this.cache.offset=this.element.offset()},_cacheMargins:function(){this.cache.margin={left:this._parsePixels(this.element,"marginLeft"),right:this._parsePixels(this.element,"marginRight"),top:this._parsePixels(this.element,"marginTop"),bottom:this._parsePixels(this.element,"marginBottom")}},_cacheParent:function(){if(null!==this.options.parent){var a=this.element.parent();this.cache.parent={offset:a.offset(),width:a.width()}}else this.cache.parent=null},_cacheDimensions:function(){this.cache.width={outer:this.element.outerWidth(),inner:this.element.width()}},_parsePixels:function(a,b){return parseInt(a.css(b),10)||0},_triggerMouseEvent:function(a){var b=this._prepareEventData();this.element.trigger(a,b)},_prepareEventData:function(){return{element:this.element,offset:this.cache.offset||null}}})}(jQuery),function(a,b){"use strict";a.widget("ui.rangeSlider",{options:{bounds:{min:0,max:100},defaultValues:{min:20,max:50},wheelMode:null,wheelSpeed:4,arrows:!0,valueLabels:"show",formatter:null,durationIn:0,durationOut:400,delayOut:200,range:{min:!1,max:!1},step:!1,scales:!1,enabled:!0},_values:null,_valuesChanged:!1,bar:null,leftHandle:null,rightHandle:null,innerBar:null,container:null,arrows:null,labels:null,changing:{min:!1,max:!1},changed:{min:!1,max:!1},ruler:null,_create:function(){this._setDefaultValues(),this.labels={left:null,right:null,leftDisplayed:!0,rightDisplayed:!0},this.arrows={left:null,right:null},this.changing={min:!1,max:!1},this.changed={min:!1,max:!1},this._createElements(),this._bindResize(),setTimeout(a.proxy(this.resize,this),1),setTimeout(a.proxy(this._initValues,this),1)},_setDefaultValues:function(){this._values={min:this.options.defaultValues.min,max:this.options.defaultValues.max}},_bindResize:function(){var b=this;this._resizeProxy=function(a){b.resize(a)},a(window).resize(this._resizeProxy)},_initWidth:function(){this.container.css("width",this.element.width()-this.container.outerWidth(!0)+this.container.width()),this.innerBar.css("width",this.container.width()-this.innerBar.outerWidth(!0)+this.innerBar.width())},_initValues:function(){this.values(this._values.min,this._values.max)},_setOption:function(a,b){this._setWheelOption(a,b),this._setArrowsOption(a,b),this._setLabelsOption(a,b),this._setLabelsDurations(a,b),this._setFormatterOption(a,b),this._setBoundsOption(a,b),this._setRangeOption(a,b),this._setStepOption(a,b),this._setScalesOption(a,b),this._setEnabledOption(a,b)},_validProperty:function(a,b,c){return null===a||"undefined"==typeof a[b]?c:a[b]},_setStepOption:function(a,b){"step"===a&&(this.options.step=b,this._leftHandle("option","step",b),this._rightHandle("option","step",b),this._changed(!0))},_setScalesOption:function(a,b){"scales"===a&&(b===!1||null===b?(this.options.scales=!1,this._destroyRuler()):b instanceof Array&&(this.options.scales=b,this._updateRuler()))},_setRangeOption:function(a,b){"range"===a&&(this._bar("option","range",b),this.options.range=this._bar("option","range"),this._changed(!0))},_setBoundsOption:function(a,b){"bounds"===a&&"undefined"!=typeof b.min&&"undefined"!=typeof b.max&&this.bounds(b.min,b.max)},_setWheelOption:function(a,b){("wheelMode"===a||"wheelSpeed"===a)&&(this._bar("option",a,b),this.options[a]=this._bar("option",a))},_setLabelsOption:function(a,b){if("valueLabels"===a){if("hide"!==b&&"show"!==b&&"change"!==b)return;this.options.valueLabels=b,"hide"!==b?(this._createLabels(),this._leftLabel("update"),this._rightLabel("update")):this._destroyLabels()}},_setFormatterOption:function(a,b){"formatter"===a&&null!==b&&"function"==typeof b&&(this.options.formatter=b,"hide"!==this.options.valueLabels&&(this._destroyLabels(),this._createLabels()))},_setArrowsOption:function(a,b){"arrows"!==a||b!==!0&&b!==!1||b===this.options.arrows||(b===!0?(this.element.removeClass("ui-rangeSlider-noArrow").addClass("ui-rangeSlider-withArrows"),this.arrows.left.css("display","block"),this.arrows.right.css("display","block"),this.options.arrows=!0):b===!1&&(this.element.addClass("ui-rangeSlider-noArrow").removeClass("ui-rangeSlider-withArrows"),this.arrows.left.css("display","none"),this.arrows.right.css("display","none"),this.options.arrows=!1),this._initWidth())},_setLabelsDurations:function(a,b){if("durationIn"===a||"durationOut"===a||"delayOut"===a){if(parseInt(b,10)!==b)return;null!==this.labels.left&&this._leftLabel("option",a,b),null!==this.labels.right&&this._rightLabel("option",a,b),this.options[a]=b}},_setEnabledOption:function(a,b){"enabled"===a&&this.toggle(b)},_createElements:function(){"absolute"!==this.element.css("position")&&this.element.css("position","relative"),this.element.addClass("ui-rangeSlider"),this.container=a("
        ").css("position","absolute").appendTo(this.element),this.innerBar=a("
        ").css("position","absolute").css("top",0).css("left",0),this._createHandles(),this._createBar(),this.container.prepend(this.innerBar),this._createArrows(),"hide"!==this.options.valueLabels?this._createLabels():this._destroyLabels(),this._updateRuler(),this.options.enabled||this._toggle(this.options.enabled)},_createHandle:function(b){return a("
        ")[this._handleType()](b).bind("sliderDrag",a.proxy(this._changing,this)).bind("stop",a.proxy(this._changed,this))},_createHandles:function(){this.leftHandle=this._createHandle({isLeft:!0,bounds:this.options.bounds,value:this._values.min,step:this.options.step}).appendTo(this.container),this.rightHandle=this._createHandle({isLeft:!1,bounds:this.options.bounds,value:this._values.max,step:this.options.step}).appendTo(this.container)},_createBar:function(){this.bar=a("
        ").prependTo(this.container).bind("sliderDrag scroll zoom",a.proxy(this._changing,this)).bind("stop",a.proxy(this._changed,this)),this._bar({leftHandle:this.leftHandle,rightHandle:this.rightHandle,values:{min:this._values.min,max:this._values.max},type:this._handleType(),range:this.options.range,wheelMode:this.options.wheelMode,wheelSpeed:this.options.wheelSpeed}),this.options.range=this._bar("option","range"),this.options.wheelMode=this._bar("option","wheelMode"),this.options.wheelSpeed=this._bar("option","wheelSpeed")},_createArrows:function(){this.arrows.left=this._createArrow("left"),this.arrows.right=this._createArrow("right"),this.options.arrows?this.element.addClass("ui-rangeSlider-withArrows"):(this.arrows.left.css("display","none"),this.arrows.right.css("display","none"),this.element.addClass("ui-rangeSlider-noArrow"))},_createArrow:function(b){var c,d=a("
        ").append("
        ").addClass("ui-rangeSlider-"+b+"Arrow").css("position","absolute").css(b,0).appendTo(this.element);return c="right"===b?a.proxy(this._scrollRightClick,this):a.proxy(this._scrollLeftClick,this),d.bind("mousedown touchstart",c),d},_proxy:function(a,b,c){var d=Array.prototype.slice.call(c);return a[b].apply(a,d)},_handleType:function(){return"rangeSliderHandle"},_barType:function(){return"rangeSliderBar"},_bar:function(){return this._proxy(this.bar,this._barType(),arguments)},_labelType:function(){return"rangeSliderLabel"},_leftLabel:function(){return this._proxy(this.labels.left,this._labelType(),arguments)},_rightLabel:function(){return this._proxy(this.labels.right,this._labelType(),arguments)},_leftHandle:function(){return this._proxy(this.leftHandle,this._handleType(),arguments)},_rightHandle:function(){return this._proxy(this.rightHandle,this._handleType(),arguments)},_getValue:function(a,b){return b===this.rightHandle&&(a-=b.outerWidth()),a*(this.options.bounds.max-this.options.bounds.min)/(this.container.innerWidth()-b.outerWidth(!0))+this.options.bounds.min},_trigger:function(a){var b=this;setTimeout(function(){b.element.trigger(a,{label:b.element,values:b.values()})},1)},_changing:function(){this._updateValues()&&(this._trigger("valuesChanging"),this._valuesChanged=!0)},_changed:function(a){(this._updateValues()||this._valuesChanged)&&(this._trigger("valuesChanged"),a!==!0&&this._trigger("userValuesChanged"),this._valuesChanged=!1)},_updateValues:function(){var a=this._leftHandle("value"),b=this._rightHandle("value"),c=this._min(a,b),d=this._max(a,b),e=c!==this._values.min||d!==this._values.max;return this._values.min=this._min(a,b),this._values.max=this._max(a,b),e},_min:function(a,b){return Math.min(a,b)},_max:function(a,b){return Math.max(a,b)},_createLabel:function(b,c){var d;return null===b?(d=this._getLabelConstructorParameters(b,c),b=a("
        ").appendTo(this.element)[this._labelType()](d)):(d=this._getLabelRefreshParameters(b,c),b[this._labelType()](d)),b},_getLabelConstructorParameters:function(a,b){return{handle:b,handleType:this._handleType(),formatter:this._getFormatter(),show:this.options.valueLabels,durationIn:this.options.durationIn,durationOut:this.options.durationOut,delayOut:this.options.delayOut}},_getLabelRefreshParameters:function(){return{formatter:this._getFormatter(),show:this.options.valueLabels,durationIn:this.options.durationIn,durationOut:this.options.durationOut,delayOut:this.options.delayOut}},_getFormatter:function(){return this.options.formatter===!1||null===this.options.formatter?this._defaultFormatter:this.options.formatter},_defaultFormatter:function(a){return Math.round(a)},_destroyLabel:function(a){return null!==a&&(a[this._labelType()]("destroy"),a.remove(),a=null),a},_createLabels:function(){this.labels.left=this._createLabel(this.labels.left,this.leftHandle),this.labels.right=this._createLabel(this.labels.right,this.rightHandle),this._leftLabel("pair",this.labels.right)},_destroyLabels:function(){this.labels.left=this._destroyLabel(this.labels.left),this.labels.right=this._destroyLabel(this.labels.right)},_stepRatio:function(){return this._leftHandle("stepRatio")},_scrollRightClick:function(a){return this.options.enabled?(a.preventDefault(),this._bar("startScroll"),this._bindStopScroll(),this._continueScrolling("scrollRight",4*this._stepRatio(),1),void 0):!1},_continueScrolling:function(a,b,c,d){if(!this.options.enabled)return!1;this._bar(a,c),d=d||5,d--;var e=this,f=16,g=Math.max(1,4/this._stepRatio());this._scrollTimeout=setTimeout(function(){0===d&&(b>f?b=Math.max(f,b/1.5):c=Math.min(g,2*c),d=5),e._continueScrolling(a,b,c,d)},b)},_scrollLeftClick:function(a){return this.options.enabled?(a.preventDefault(),this._bar("startScroll"),this._bindStopScroll(),this._continueScrolling("scrollLeft",4*this._stepRatio(),1),void 0):!1},_bindStopScroll:function(){var b=this;this._stopScrollHandle=function(a){a.preventDefault(),b._stopScroll()},a(document).bind("mouseup touchend",this._stopScrollHandle)},_stopScroll:function(){a(document).unbind("mouseup touchend",this._stopScrollHandle),this._stopScrollHandle=null,this._bar("stopScroll"),clearTimeout(this._scrollTimeout)},_createRuler:function(){this.ruler=a("
        ").appendTo(this.innerBar)},_setRulerParameters:function(){this.ruler.ruler({min:this.options.bounds.min,max:this.options.bounds.max,scales:this.options.scales})},_destroyRuler:function(){null!==this.ruler&&a.fn.ruler&&(this.ruler.ruler("destroy"),this.ruler.remove(),this.ruler=null)},_updateRuler:function(){this._destroyRuler(),this.options.scales!==!1&&a.fn.ruler&&(this._createRuler(),this._setRulerParameters())},values:function(a,b){var c=this._bar("values",a,b);return"undefined"!=typeof a&&"undefined"!=typeof b&&this._changed(!0),c},min:function(a){return this._values.min=this.values(a,this._values.max).min,this._values.min},max:function(a){return this._values.max=this.values(this._values.min,a).max,this._values.max},bounds:function(a,b){return this._isValidValue(a)&&this._isValidValue(b)&&b>a&&(this._setBounds(a,b),this._updateRuler(),this._changed(!0)),this.options.bounds},_isValidValue:function(a){return"undefined"!=typeof a&&parseFloat(a)===a},_setBounds:function(a,b){this.options.bounds={min:a,max:b},this._leftHandle("option","bounds",this.options.bounds),this._rightHandle("option","bounds",this.options.bounds),this._bar("option","bounds",this.options.bounds)},zoomIn:function(a){this._bar("zoomIn",a)},zoomOut:function(a){this._bar("zoomOut",a)},scrollLeft:function(a){this._bar("startScroll"),this._bar("scrollLeft",a),this._bar("stopScroll")},scrollRight:function(a){this._bar("startScroll"),this._bar("scrollRight",a),this._bar("stopScroll")},resize:function(){this._initWidth(),this._leftHandle("update"),this._rightHandle("update"),this._bar("update")},enable:function(){this.toggle(!0)},disable:function(){this.toggle(!1)},toggle:function(a){a===b&&(a=!this.options.enabled),this.options.enabled!==a&&this._toggle(a)},_toggle:function(a){this.options.enabled=a,this.element.toggleClass("ui-rangeSlider-disabled",!a);var b=a?"enable":"disable";this._bar(b),this._leftHandle(b),this._rightHandle(b),this._leftLabel(b),this._rightLabel(b)},destroy:function(){this.element.removeClass("ui-rangeSlider-withArrows ui-rangeSlider-noArrow ui-rangeSlider-disabled"),this._destroyWidgets(),this._destroyElements(),this.element.removeClass("ui-rangeSlider"),this.options=null,a(window).unbind("resize",this._resizeProxy),this._resizeProxy=null,this._bindResize=null,a.Widget.prototype.destroy.apply(this,arguments)},_destroyWidget:function(a){this["_"+a]("destroy"),this[a].remove(),this[a]=null},_destroyWidgets:function(){this._destroyWidget("bar"),this._destroyWidget("leftHandle"),this._destroyWidget("rightHandle"),this._destroyRuler(),this._destroyLabels()},_destroyElements:function(){this.container.remove(),this.container=null,this.innerBar.remove(),this.innerBar=null,this.arrows.left.remove(),this.arrows.right.remove(),this.arrows=null}})}(jQuery),function(a){"use strict";a.widget("ui.rangeSliderHandle",a.ui.rangeSliderDraggable,{currentMove:null,margin:0,parentElement:null,options:{isLeft:!0,bounds:{min:0,max:100},range:!1,value:0,step:!1},_value:0,_left:0,_create:function(){a.ui.rangeSliderDraggable.prototype._create.apply(this),this.element.css("position","absolute").css("top",0).addClass("ui-rangeSlider-handle").toggleClass("ui-rangeSlider-leftHandle",this.options.isLeft).toggleClass("ui-rangeSlider-rightHandle",!this.options.isLeft),this.element.append("
        "),this._value=this._constraintValue(this.options.value)},destroy:function(){this.element.empty(),a.ui.rangeSliderDraggable.prototype.destroy.apply(this)},_setOption:function(b,c){"isLeft"!==b||c!==!0&&c!==!1||c===this.options.isLeft?"step"===b&&this._checkStep(c)?(this.options.step=c,this.update()):"bounds"===b?(this.options.bounds=c,this.update()):"range"===b&&this._checkRange(c)&&(this.options.range=c,this.update()):(this.options.isLeft=c,this.element.toggleClass("ui-rangeSlider-leftHandle",this.options.isLeft).toggleClass("ui-rangeSlider-rightHandle",!this.options.isLeft),this._position(this._value),this.element.trigger("switch",this.options.isLeft)),a.ui.rangeSliderDraggable.prototype._setOption.apply(this,[b,c])},_checkRange:function(a){return a===!1||!this._isValidValue(a.min)&&!this._isValidValue(a.max)},_isValidValue:function(a){return"undefined"!=typeof a&&a!==!1&&parseFloat(a)!==a},_checkStep:function(a){return a===!1||parseFloat(a)===a},_initElement:function(){a.ui.rangeSliderDraggable.prototype._initElement.apply(this),0===this.cache.parent.width||null===this.cache.parent.width?setTimeout(a.proxy(this._initElementIfNotDestroyed,this),500):(this._position(this._value),this._triggerMouseEvent("initialize"))},_bounds:function(){return this.options.bounds},_cache:function(){a.ui.rangeSliderDraggable.prototype._cache.apply(this),this._cacheParent()},_cacheParent:function(){var a=this.element.parent();this.cache.parent={element:a,offset:a.offset(),padding:{left:this._parsePixels(a,"paddingLeft")},width:a.width()}},_position:function(a){var b=this._getPositionForValue(a);this._applyPosition(b)},_constraintPosition:function(a){var b=this._getValueForPosition(a);return this._getPositionForValue(b)},_applyPosition:function(b){a.ui.rangeSliderDraggable.prototype._applyPosition.apply(this,[b]),this._left=b,this._setValue(this._getValueForPosition(b)),this._triggerMouseEvent("moving")},_prepareEventData:function(){var b=a.ui.rangeSliderDraggable.prototype._prepareEventData.apply(this);return b.value=this._value,b},_setValue:function(a){a!==this._value&&(this._value=a)},_constraintValue:function(a){if(a=Math.min(a,this._bounds().max),a=Math.max(a,this._bounds().min),a=this._round(a),this.options.range!==!1){var b=this.options.range.min||!1,c=this.options.range.max||!1;b!==!1&&(a=Math.max(a,this._round(b))),c!==!1&&(a=Math.min(a,this._round(c))),a=Math.min(a,this._bounds().max),a=Math.max(a,this._bounds().min)}return a},_round:function(a){return this.options.step!==!1&&this.options.step>0?Math.round(a/this.options.step)*this.options.step:a},_getPositionForValue:function(a){if(!this.cache||!this.cache.parent||null===this.cache.parent.offset)return 0;a=this._constraintValue(a);var b=(a-this.options.bounds.min)/(this.options.bounds.max-this.options.bounds.min),c=this.cache.parent.width-this.cache.width.outer,d=this.cache.parent.offset.left;return b*c+d},_getValueForPosition:function(a){var b=this._getRawValueForPositionAndBounds(a,this.options.bounds.min,this.options.bounds.max);return this._constraintValue(b)},_getRawValueForPositionAndBounds:function(a,b,c){var d=null===this.cache.parent.offset?0:this.cache.parent.offset.left,e=this.cache.parent.width-this.cache.width.outer,f=(a-d)/e;return f*(c-b)+b},value:function(a){return"undefined"!=typeof a&&(this._cache(),a=this._constraintValue(a),this._position(a)),this._value},update:function(){this._cache();var a=this._constraintValue(this._value),b=this._getPositionForValue(a);a!==this._value?(this._triggerMouseEvent("updating"),this._position(a),this._triggerMouseEvent("update")):b!==this.cache.offset.left&&(this._triggerMouseEvent("updating"),this._position(a),this._triggerMouseEvent("update"))},position:function(a){return"undefined"!=typeof a&&(this._cache(),a=this._constraintPosition(a),this._applyPosition(a)),this._left},add:function(a,b){return a+b},substract:function(a,b){return a-b},stepsBetween:function(a,b){return this.options.step===!1?b-a:(b-a)/this.options.step},multiplyStep:function(a,b){return a*b},moveRight:function(a){var b;return this.options.step===!1?(b=this._left,this.position(this._left+a),this._left-b):(b=this._value,this.value(this.add(b,this.multiplyStep(this.options.step,a))),this.stepsBetween(b,this._value))},moveLeft:function(a){return-this.moveRight(-a)},stepRatio:function(){if(this.options.step===!1)return 1;var a=(this.options.bounds.max-this.options.bounds.min)/this.options.step;return this.cache.parent.width/a}})}(jQuery),function(a){"use strict";a.widget("ui.rangeSliderBar",a.ui.rangeSliderDraggable,{options:{leftHandle:null,rightHandle:null,bounds:{min:0,max:100},type:"rangeSliderHandle",range:!1,drag:function(){},stop:function(){},values:{min:0,max:20},wheelSpeed:4,wheelMode:null},_values:{min:0,max:20},_waitingToInit:2,_wheelTimeout:!1,_create:function(){a.ui.rangeSliderDraggable.prototype._create.apply(this),this.element.css("position","absolute").css("top",0).addClass("ui-rangeSlider-bar"),this.options.leftHandle.bind("initialize",a.proxy(this._onInitialized,this)).bind("mousestart",a.proxy(this._cache,this)).bind("stop",a.proxy(this._onHandleStop,this)),this.options.rightHandle.bind("initialize",a.proxy(this._onInitialized,this)).bind("mousestart",a.proxy(this._cache,this)).bind("stop",a.proxy(this._onHandleStop,this)),this._bindHandles(),this._values=this.options.values,this._setWheelModeOption(this.options.wheelMode)},destroy:function(){this.options.leftHandle.unbind(".bar"),this.options.rightHandle.unbind(".bar"),this.options=null,a.ui.rangeSliderDraggable.prototype.destroy.apply(this)},_setOption:function(a,b){"range"===a?this._setRangeOption(b):"wheelSpeed"===a?this._setWheelSpeedOption(b):"wheelMode"===a&&this._setWheelModeOption(b)},_setRangeOption:function(a){if(("object"!=typeof a||null===a)&&(a=!1),a!==!1||this.options.range!==!1){if(a!==!1){var b="undefined"==typeof a.min?this.options.range.min||!1:a.min,c="undefined"==typeof a.max?this.options.range.max||!1:a.max;this.options.range={min:b,max:c}}else this.options.range=!1;this._setLeftRange(),this._setRightRange()}},_setWheelSpeedOption:function(a){"number"==typeof a&&a>0&&(this.options.wheelSpeed=a)},_setWheelModeOption:function(a){(null===a||a===!1||"zoom"===a||"scroll"===a)&&(this.options.wheelMode!==a&&this.element.parent().unbind("mousewheel.bar"),this._bindMouseWheel(a),this.options.wheelMode=a)},_bindMouseWheel:function(b){"zoom"===b?this.element.parent().bind("mousewheel.bar",a.proxy(this._mouseWheelZoom,this)):"scroll"===b&&this.element.parent().bind("mousewheel.bar",a.proxy(this._mouseWheelScroll,this))},_setLeftRange:function(){if(this.options.range===!1)return!1;var a=this._values.max,b={min:!1,max:!1};b.max=(this.options.range.min||!1)!==!1?this._leftHandle("substract",a,this.options.range.min):!1,b.min=(this.options.range.max||!1)!==!1?this._leftHandle("substract",a,this.options.range.max):!1,this._leftHandle("option","range",b)},_setRightRange:function(){var a=this._values.min,b={min:!1,max:!1};b.min=(this.options.range.min||!1)!==!1?this._rightHandle("add",a,this.options.range.min):!1,b.max=(this.options.range.max||!1)!==!1?this._rightHandle("add",a,this.options.range.max):!1,this._rightHandle("option","range",b)},_deactivateRange:function(){this._leftHandle("option","range",!1),this._rightHandle("option","range",!1)},_reactivateRange:function(){this._setRangeOption(this.options.range)},_onInitialized:function(){this._waitingToInit--,0===this._waitingToInit&&this._initMe()},_initMe:function(){this._cache(),this.min(this._values.min),this.max(this._values.max);var a=this._leftHandle("position"),b=this._rightHandle("position")+this.options.rightHandle.width();this.element.offset({left:a}),this.element.css("width",b-a)},_leftHandle:function(){return this._handleProxy(this.options.leftHandle,arguments)},_rightHandle:function(){return this._handleProxy(this.options.rightHandle,arguments)},_handleProxy:function(a,b){var c=Array.prototype.slice.call(b);return a[this.options.type].apply(a,c)},_cache:function(){a.ui.rangeSliderDraggable.prototype._cache.apply(this),this._cacheHandles()},_cacheHandles:function(){this.cache.rightHandle={},this.cache.rightHandle.width=this.options.rightHandle.width(),this.cache.rightHandle.offset=this.options.rightHandle.offset(),this.cache.leftHandle={},this.cache.leftHandle.offset=this.options.leftHandle.offset()},_mouseStart:function(b){a.ui.rangeSliderDraggable.prototype._mouseStart.apply(this,[b]),this._deactivateRange()},_mouseStop:function(b){a.ui.rangeSliderDraggable.prototype._mouseStop.apply(this,[b]),this._cacheHandles(),this._values.min=this._leftHandle("value"),this._values.max=this._rightHandle("value"),this._reactivateRange(),this._leftHandle().trigger("stop"),this._rightHandle().trigger("stop")},_onDragLeftHandle:function(a,b){return this._cacheIfNecessary(),this._switchedValues()?(this._switchHandles(),this._onDragRightHandle(a,b),void 0):(this._values.min=b.value,this.cache.offset.left=b.offset.left,this.cache.leftHandle.offset=b.offset,this._positionBar(),void 0)},_onDragRightHandle:function(a,b){return this._cacheIfNecessary(),this._switchedValues()?(this._switchHandles(),this._onDragLeftHandle(a,b),void 0):(this._values.max=b.value,this.cache.rightHandle.offset=b.offset,this._positionBar(),void 0)},_positionBar:function(){var a=this.cache.rightHandle.offset.left+this.cache.rightHandle.width-this.cache.leftHandle.offset.left;this.cache.width.inner=a,this.element.css("width",a).offset({left:this.cache.leftHandle.offset.left})},_onHandleStop:function(){this._setLeftRange(),this._setRightRange()},_switchedValues:function(){if(this.min()>this.max()){var a=this._values.min;return this._values.min=this._values.max,this._values.max=a,!0}return!1},_switchHandles:function(){var a=this.options.leftHandle;this.options.leftHandle=this.options.rightHandle,this.options.rightHandle=a,this._leftHandle("option","isLeft",!0),this._rightHandle("option","isLeft",!1),this._bindHandles(),this._cacheHandles()},_bindHandles:function(){this.options.leftHandle.unbind(".bar").bind("sliderDrag.bar update.bar moving.bar",a.proxy(this._onDragLeftHandle,this)),this.options.rightHandle.unbind(".bar").bind("sliderDrag.bar update.bar moving.bar",a.proxy(this._onDragRightHandle,this))},_constraintPosition:function(b){var c,d={};return d.left=a.ui.rangeSliderDraggable.prototype._constraintPosition.apply(this,[b]),d.left=this._leftHandle("position",d.left),c=this._rightHandle("position",d.left+this.cache.width.outer-this.cache.rightHandle.width),d.width=c-d.left+this.cache.rightHandle.width,d},_applyPosition:function(b){a.ui.rangeSliderDraggable.prototype._applyPosition.apply(this,[b.left]),this.element.width(b.width)},_mouseWheelZoom:function(b,c,d,e){var f=this._values.min+(this._values.max-this._values.min)/2,g={},h={};return this.options.range===!1||this.options.range.min===!1?(g.max=f,h.min=f):(g.max=f-this.options.range.min/2,h.min=f+this.options.range.min/2),this.options.range!==!1&&this.options.range.max!==!1&&(g.min=f-this.options.range.max/2,h.max=f+this.options.range.max/2),this._leftHandle("option","range",g),this._rightHandle("option","range",h),clearTimeout(this._wheelTimeout),this._wheelTimeout=setTimeout(a.proxy(this._wheelStop,this),200),this.zoomOut(e*this.options.wheelSpeed),!1},_mouseWheelScroll:function(b,c,d,e){return this._wheelTimeout===!1?this.startScroll():clearTimeout(this._wheelTimeout),this._wheelTimeout=setTimeout(a.proxy(this._wheelStop,this),200),this.scrollLeft(e*this.options.wheelSpeed),!1},_wheelStop:function(){this.stopScroll(),this._wheelTimeout=!1},min:function(a){return this._leftHandle("value",a)},max:function(a){return this._rightHandle("value",a)},startScroll:function(){this._deactivateRange()},stopScroll:function(){this._reactivateRange(),this._triggerMouseEvent("stop"),this._leftHandle().trigger("stop"),this._rightHandle().trigger("stop")},scrollLeft:function(a){return a=a||1,0>a?this.scrollRight(-a):(a=this._leftHandle("moveLeft",a),this._rightHandle("moveLeft",a),this.update(),this._triggerMouseEvent("scroll"),void 0)},scrollRight:function(a){return a=a||1,0>a?this.scrollLeft(-a):(a=this._rightHandle("moveRight",a),this._leftHandle("moveRight",a),this.update(),this._triggerMouseEvent("scroll"),void 0)},zoomIn:function(a){if(a=a||1,0>a)return this.zoomOut(-a);var b=this._rightHandle("moveLeft",a);a>b&&(b/=2,this._rightHandle("moveRight",b)),this._leftHandle("moveRight",b),this.update(),this._triggerMouseEvent("zoom")},zoomOut:function(a){if(a=a||1,0>a)return this.zoomIn(-a);var b=this._rightHandle("moveRight",a);a>b&&(b/=2,this._rightHandle("moveLeft",b)),this._leftHandle("moveLeft",b),this.update(),this._triggerMouseEvent("zoom")},values:function(a,b){if("undefined"!=typeof a&&"undefined"!=typeof b){var c=Math.min(a,b),d=Math.max(a,b);this._deactivateRange(),this.options.leftHandle.unbind(".bar"),this.options.rightHandle.unbind(".bar"),this._values.min=this._leftHandle("value",c),this._values.max=this._rightHandle("value",d),this._bindHandles(),this._reactivateRange(),this.update()}return{min:this._values.min,max:this._values.max}},update:function(){this._values.min=this.min(),this._values.max=this.max(),this._cache(),this._positionBar()}})}(jQuery),function(a){"use strict";function b(b,c,d,e){this.label1=b,this.label2=c,this.type=d,this.options=e,this.handle1=this.label1[this.type]("option","handle"),this.handle2=this.label2[this.type]("option","handle"),this.cache=null,this.left=b,this.right=c,this.moving=!1,this.initialized=!1,this.updating=!1,this.Init=function(){this.BindHandle(this.handle1),this.BindHandle(this.handle2),"show"===this.options.show?(setTimeout(a.proxy(this.PositionLabels,this),1),this.initialized=!0):setTimeout(a.proxy(this.AfterInit,this),1e3),this._resizeProxy=a.proxy(this.onWindowResize,this),a(window).resize(this._resizeProxy)},this.Destroy=function(){this._resizeProxy&&(a(window).unbind("resize",this._resizeProxy),this._resizeProxy=null,this.handle1.unbind(".positionner"),this.handle1=null,this.handle2.unbind(".positionner"),this.handle2=null,this.label1=null,this.label2=null,this.left=null,this.right=null),this.cache=null},this.AfterInit=function(){this.initialized=!0},this.Cache=function(){"none"!==this.label1.css("display")&&(this.cache={},this.cache.label1={},this.cache.label2={},this.cache.handle1={},this.cache.handle2={},this.cache.offsetParent={},this.CacheElement(this.label1,this.cache.label1),this.CacheElement(this.label2,this.cache.label2),this.CacheElement(this.handle1,this.cache.handle1),this.CacheElement(this.handle2,this.cache.handle2),this.CacheElement(this.label1.offsetParent(),this.cache.offsetParent)) },this.CacheIfNecessary=function(){null===this.cache?this.Cache():(this.CacheWidth(this.label1,this.cache.label1),this.CacheWidth(this.label2,this.cache.label2),this.CacheHeight(this.label1,this.cache.label1),this.CacheHeight(this.label2,this.cache.label2),this.CacheWidth(this.label1.offsetParent(),this.cache.offsetParent))},this.CacheElement=function(a,b){this.CacheWidth(a,b),this.CacheHeight(a,b),b.offset=a.offset(),b.margin={left:this.ParsePixels("marginLeft",a),right:this.ParsePixels("marginRight",a)},b.border={left:this.ParsePixels("borderLeftWidth",a),right:this.ParsePixels("borderRightWidth",a)}},this.CacheWidth=function(a,b){b.width=a.width(),b.outerWidth=a.outerWidth()},this.CacheHeight=function(a,b){b.outerHeightMargin=a.outerHeight(!0)},this.ParsePixels=function(a,b){return parseInt(b.css(a),10)||0},this.BindHandle=function(b){b.bind("updating.positionner",a.proxy(this.onHandleUpdating,this)),b.bind("update.positionner",a.proxy(this.onHandleUpdated,this)),b.bind("moving.positionner",a.proxy(this.onHandleMoving,this)),b.bind("stop.positionner",a.proxy(this.onHandleStop,this))},this.PositionLabels=function(){if(this.CacheIfNecessary(),null!==this.cache){var a=this.GetRawPosition(this.cache.label1,this.cache.handle1),b=this.GetRawPosition(this.cache.label2,this.cache.handle2);this.ConstraintPositions(a,b),this.PositionLabel(this.label1,a.left,this.cache.label1),this.PositionLabel(this.label2,b.left,this.cache.label2)}},this.PositionLabel=function(a,b,c){var d,e,f,g=this.cache.offsetParent.offset.left+this.cache.offsetParent.border.left;g-b>=0?(a.css("right",""),a.offset({left:b})):(d=g+this.cache.offsetParent.width,e=b+c.margin.left+c.outerWidth+c.margin.right,f=d-e,a.css("left",""),a.css("right",f))},this.ConstraintPositions=function(a,b){a.centerb.outerLeft?(a=this.getLeftPosition(a,b),b=this.getRightPosition(a,b)):a.center>b.center&&b.outerRight>a.outerLeft&&(b=this.getLeftPosition(b,a),a=this.getRightPosition(b,a))},this.getLeftPosition=function(a,b){var c=(b.center+a.center)/2,d=c-a.cache.outerWidth-a.cache.margin.right+a.cache.border.left;return a.left=d,a},this.getRightPosition=function(a,b){var c=(b.center+a.center)/2;return b.left=c+b.cache.margin.left+b.cache.border.left,b},this.ShowIfNecessary=function(){"show"===this.options.show||this.moving||!this.initialized||this.updating||(this.label1.stop(!0,!0).fadeIn(this.options.durationIn||0),this.label2.stop(!0,!0).fadeIn(this.options.durationIn||0),this.moving=!0)},this.HideIfNeeded=function(){this.moving===!0&&(this.label1.stop(!0,!0).delay(this.options.delayOut||0).fadeOut(this.options.durationOut||0),this.label2.stop(!0,!0).delay(this.options.delayOut||0).fadeOut(this.options.durationOut||0),this.moving=!1)},this.onHandleMoving=function(a,b){this.ShowIfNecessary(),this.CacheIfNecessary(),this.UpdateHandlePosition(b),this.PositionLabels()},this.onHandleUpdating=function(){this.updating=!0},this.onHandleUpdated=function(){this.updating=!1,this.cache=null},this.onHandleStop=function(){this.HideIfNeeded()},this.onWindowResize=function(){this.cache=null},this.UpdateHandlePosition=function(a){null!==this.cache&&(a.element[0]===this.handle1[0]?this.UpdatePosition(a,this.cache.handle1):this.UpdatePosition(a,this.cache.handle2))},this.UpdatePosition=function(a,b){b.offset=a.offset},this.GetRawPosition=function(a,b){var c=b.offset.left+b.outerWidth/2,d=c-a.outerWidth/2,e=d+a.outerWidth-a.border.left-a.border.right,f=d-a.margin.left-a.border.left,g=b.offset.top-a.outerHeightMargin;return{left:d,outerLeft:f,top:g,right:e,outerRight:f+a.outerWidth+a.margin.left+a.margin.right,cache:a,center:c}},this.Init()}a.widget("ui.rangeSliderLabel",a.ui.rangeSliderMouseTouch,{options:{handle:null,formatter:!1,handleType:"rangeSliderHandle",show:"show",durationIn:0,durationOut:500,delayOut:500,isLeft:!1},cache:null,_positionner:null,_valueContainer:null,_innerElement:null,_create:function(){this.options.isLeft=this._handle("option","isLeft"),this.element.addClass("ui-rangeSlider-label").css("position","absolute").css("display","block"),this._createElements(),this._toggleClass(),this.options.handle.bind("moving.label",a.proxy(this._onMoving,this)).bind("update.label",a.proxy(this._onUpdate,this)).bind("switch.label",a.proxy(this._onSwitch,this)),"show"!==this.options.show&&this.element.hide(),this._mouseInit()},destroy:function(){this.options.handle.unbind(".label"),this.options.handle=null,this._valueContainer=null,this._innerElement=null,this.element.empty(),this._positionner&&(this._positionner.Destroy(),this._positionner=null),a.ui.rangeSliderMouseTouch.prototype.destroy.apply(this)},_createElements:function(){this._valueContainer=a("
        ").appendTo(this.element),this._innerElement=a("
        ").appendTo(this.element)},_handle:function(){var a=Array.prototype.slice.apply(arguments);return this.options.handle[this.options.handleType].apply(this.options.handle,a)},_setOption:function(a,b){"show"===a?this._updateShowOption(b):("durationIn"===a||"durationOut"===a||"delayOut"===a)&&this._updateDurations(a,b)},_updateShowOption:function(a){this.options.show=a,"show"!==this.options.show?this.element.hide():(this.element.show(),this._display(this.options.handle[this.options.handleType]("value")),this._positionner.PositionLabels()),this._positionner.options.show=this.options.show},_updateDurations:function(a,b){parseInt(b,10)===b&&(this._positionner.options[a]=b,this.options[a]=b)},_display:function(a){this.options.formatter===!1?this._displayText(Math.round(a)):this._displayText(this.options.formatter(a))},_displayText:function(a){this._valueContainer.text(a)},_toggleClass:function(){this.element.toggleClass("ui-rangeSlider-leftLabel",this.options.isLeft).toggleClass("ui-rangeSlider-rightLabel",!this.options.isLeft)},_mouseDown:function(a){this.options.handle.trigger(a)},_mouseUp:function(a){this.options.handle.trigger(a)},_mouseMove:function(a){this.options.handle.trigger(a)},_onMoving:function(a,b){this._display(b.value)},_onUpdate:function(){"show"===this.options.show&&this.update()},_onSwitch:function(a,b){this.options.isLeft=b,this._toggleClass(),this._positionner.PositionLabels()},pair:function(a){null===this._positionner&&(this._positionner=new b(this.element,a,this.widgetName,{show:this.options.show,durationIn:this.options.durationIn,durationOut:this.options.durationOut,delayOut:this.options.delayOut}),a[this.widgetName]("positionner",this._positionner))},positionner:function(a){return"undefined"!=typeof a&&(this._positionner=a),this._positionner},update:function(){this._positionner.cache=null,this._display(this._handle("value")),"show"===this.options.show&&this._positionner.PositionLabels()}})}(jQuery),function(a){"use strict";a.widget("ui.dateRangeSlider",a.ui.rangeSlider,{options:{bounds:{min:new Date(2010,0,1).valueOf(),max:new Date(2012,0,1).valueOf()},defaultValues:{min:new Date(2010,1,11).valueOf(),max:new Date(2011,1,11).valueOf()}},_create:function(){a.ui.rangeSlider.prototype._create.apply(this),this.element.addClass("ui-dateRangeSlider")},destroy:function(){this.element.removeClass("ui-dateRangeSlider"),a.ui.rangeSlider.prototype.destroy.apply(this)},_setDefaultValues:function(){this._values={min:this.options.defaultValues.min.valueOf(),max:this.options.defaultValues.max.valueOf()}},_setRulerParameters:function(){this.ruler.ruler({min:new Date(this.options.bounds.min),max:new Date(this.options.bounds.max),scales:this.options.scales})},_setOption:function(b,c){("defaultValues"===b||"bounds"===b)&&"undefined"!=typeof c&&null!==c&&this._isValidDate(c.min)&&this._isValidDate(c.max)?a.ui.rangeSlider.prototype._setOption.apply(this,[b,{min:c.min.valueOf(),max:c.max.valueOf()}]):a.ui.rangeSlider.prototype._setOption.apply(this,this._toArray(arguments))},_handleType:function(){return"dateRangeSliderHandle"},option:function(b){if("bounds"===b||"defaultValues"===b){var c=a.ui.rangeSlider.prototype.option.apply(this,arguments);return{min:new Date(c.min),max:new Date(c.max)}}return a.ui.rangeSlider.prototype.option.apply(this,this._toArray(arguments))},_defaultFormatter:function(a){var b=a.getMonth()+1,c=a.getDate();return""+a.getFullYear()+"-"+(10>b?"0"+b:b)+"-"+(10>c?"0"+c:c)},_getFormatter:function(){var a=this.options.formatter;return(this.options.formatter===!1||null===this.options.formatter)&&(a=this._defaultFormatter),function(a){return function(b){return a(new Date(b))}}(a)},values:function(b,c){var d=null;return d=this._isValidDate(b)&&this._isValidDate(c)?a.ui.rangeSlider.prototype.values.apply(this,[b.valueOf(),c.valueOf()]):a.ui.rangeSlider.prototype.values.apply(this,this._toArray(arguments)),{min:new Date(d.min),max:new Date(d.max)}},min:function(b){return this._isValidDate(b)?new Date(a.ui.rangeSlider.prototype.min.apply(this,[b.valueOf()])):new Date(a.ui.rangeSlider.prototype.min.apply(this))},max:function(b){return this._isValidDate(b)?new Date(a.ui.rangeSlider.prototype.max.apply(this,[b.valueOf()])):new Date(a.ui.rangeSlider.prototype.max.apply(this))},bounds:function(b,c){var d;return d=this._isValidDate(b)&&this._isValidDate(c)?a.ui.rangeSlider.prototype.bounds.apply(this,[b.valueOf(),c.valueOf()]):a.ui.rangeSlider.prototype.bounds.apply(this,this._toArray(arguments)),{min:new Date(d.min),max:new Date(d.max)}},_isValidDate:function(a){return"undefined"!=typeof a&&a instanceof Date},_toArray:function(a){return Array.prototype.slice.call(a)}})}(jQuery),function(a){"use strict";a.widget("ui.dateRangeSliderHandle",a.ui.rangeSliderHandle,{_steps:!1,_boundsValues:{},_create:function(){this._createBoundsValues(),a.ui.rangeSliderHandle.prototype._create.apply(this)},_getValueForPosition:function(a){var b=this._getRawValueForPositionAndBounds(a,this.options.bounds.min.valueOf(),this.options.bounds.max.valueOf());return this._constraintValue(new Date(b))},_setOption:function(b,c){return"step"===b?(this.options.step=c,this._createSteps(),this.update(),void 0):(a.ui.rangeSliderHandle.prototype._setOption.apply(this,[b,c]),"bounds"===b&&this._createBoundsValues(),void 0)},_createBoundsValues:function(){this._boundsValues={min:this.options.bounds.min.valueOf(),max:this.options.bounds.max.valueOf()}},_bounds:function(){return this._boundsValues},_createSteps:function(){if(this.options.step===!1||!this._isValidStep())return this._steps=!1,void 0;var a=new Date(this.options.bounds.min),b=new Date(this.options.bounds.max),c=a,d=0;for(this._steps=[];b>=c;)this._steps.push(c.valueOf()),c=this._addStep(a,d,this.options.step),d++},_isValidStep:function(){return"object"==typeof this.options.step},_addStep:function(a,b,c){var d=new Date(a.valueOf());return d=this._addThing(d,"FullYear",b,c.years),d=this._addThing(d,"Month",b,c.months),d=this._addThing(d,"Date",b,c.days),d=this._addThing(d,"Hours",b,c.hours),d=this._addThing(d,"Minutes",b,c.minutes),d=this._addThing(d,"Seconds",b,c.seconds)},_addThing:function(a,b,c,d){return 0===c||0===(d||0)?a:(a["set"+b](a["get"+b]()+c*(d||0)),a)},_round:function(a){if(this._steps===!1)return a;for(var b,c,d=this.options.bounds.max.valueOf(),e=this.options.bounds.min.valueOf(),f=Math.max(0,(a-e)/(d-e)),g=Math.floor(this._steps.length*f);this._steps[g]>a;)g--;for(;g+1=this._steps.length-1?this._steps[this._steps.length-1]:0===g?this._steps[0]:(b=this._steps[g],c=this._steps[g+1],c-a>a-b?b:c)},update:function(){this._createBoundsValues(),this._createSteps(),a.ui.rangeSliderHandle.prototype.update.apply(this)},add:function(a,b){return this._addStep(new Date(a),1,b).valueOf()},substract:function(a,b){return this._addStep(new Date(a),-1,b).valueOf()},stepsBetween:function(a,b){if(this.options.step===!1)return b-a;var c=Math.min(a,b),d=Math.max(a,b),e=0,f=!1,g=a>b;for(this.add(c,this.options.step)-c<0&&(f=!0);d>c;)f?d=this.add(d,this.options.step):c=this.add(c,this.options.step),e++;return g?-e:e},multiplyStep:function(a,b){var c={};for(var d in a)a.hasOwnProperty(d)&&(c[d]=a[d]*b);return c},stepRatio:function(){if(this.options.step===!1)return 1;var a=this._steps.length;return this.cache.parent.width/a}})}(jQuery),function(a){"use strict";a.widget("ui.editRangeSlider",a.ui.rangeSlider,{options:{type:"text",round:1},_create:function(){a.ui.rangeSlider.prototype._create.apply(this),this.element.addClass("ui-editRangeSlider")},destroy:function(){this.element.removeClass("ui-editRangeSlider"),a.ui.rangeSlider.prototype.destroy.apply(this)},_setOption:function(b,c){("type"===b||"step"===b)&&this._setLabelOption(b,c),"type"===b&&(this.options[b]=null===this.labels.left?c:this._leftLabel("option",b)),a.ui.rangeSlider.prototype._setOption.apply(this,[b,c])},_setLabelOption:function(a,b){null!==this.labels.left&&(this._leftLabel("option",a,b),this._rightLabel("option",a,b))},_labelType:function(){return"editRangeSliderLabel"},_createLabel:function(b,c){var d=a.ui.rangeSlider.prototype._createLabel.apply(this,[b,c]);return null===b&&d.bind("valueChange",a.proxy(this._onValueChange,this)),d},_addPropertiesToParameter:function(a){return a.type=this.options.type,a.step=this.options.step,a.id=this.element.attr("id"),a},_getLabelConstructorParameters:function(b,c){var d=a.ui.rangeSlider.prototype._getLabelConstructorParameters.apply(this,[b,c]);return this._addPropertiesToParameter(d)},_getLabelRefreshParameters:function(b,c){var d=a.ui.rangeSlider.prototype._getLabelRefreshParameters.apply(this,[b,c]);return this._addPropertiesToParameter(d)},_onValueChange:function(a,b){b.isLeft?this.min(b.value):this.max(b.value)}})}(jQuery),function(a){"use strict";a.widget("ui.editRangeSliderLabel",a.ui.rangeSliderLabel,{options:{type:"text",step:!1,id:""},_input:null,_text:"",_create:function(){a.ui.rangeSliderLabel.prototype._create.apply(this),this._createInput()},_setOption:function(b,c){"type"===b?this._setTypeOption(c):"step"===b&&this._setStepOption(c),a.ui.rangeSliderLabel.prototype._setOption.apply(this,[b,c])},_createInput:function(){this._input=a("").addClass("ui-editRangeSlider-inputValue").appendTo(this._valueContainer),this._setInputName(),this._input.bind("keyup",a.proxy(this._onKeyUp,this)),this._input.blur(a.proxy(this._onChange,this)),"number"===this.options.type&&(this.options.step!==!1&&this._input.attr("step",this.options.step),this._input.click(a.proxy(this._onChange,this))),this._input.val(this._text)},_setInputName:function(){var a=this.options.isLeft?"left":"right";this._input.attr("name",this.options.id+a)},_onSwitch:function(b,c){a.ui.rangeSliderLabel.prototype._onSwitch.apply(this,[b,c]),this._setInputName()},_destroyInput:function(){this._input.remove(),this._input=null},_onKeyUp:function(a){return 13===a.which?(this._onChange(a),!1):void 0},_onChange:function(){var a=this._returnCheckedValue(this._input.val());a!==!1&&this._triggerValue(a)},_triggerValue:function(a){var b=this.options.handle[this.options.handleType]("option","isLeft");this.element.trigger("valueChange",[{isLeft:b,value:a}])},_returnCheckedValue:function(a){var b=parseFloat(a);return isNaN(b)||b.toString()!==a?!1:b},_setTypeOption:function(a){"text"!==a&&"number"!==a||this.options.type===a||(this._destroyInput(),this.options.type=a,this._createInput())},_setStepOption:function(a){this.options.step=a,"number"===this.options.type&&this._input.attr("step",a!==!1?a:"any")},_displayText:function(a){this._input.val(a),this._text=a},enable:function(){a.ui.rangeSliderLabel.prototype.enable.apply(this),this._input.attr("disabled",null)},disable:function(){a.ui.rangeSliderLabel.prototype.disable.apply(this),this._input.attr("disabled","disabled")}})}(jQuery),function(a){"use strict";var b={first:function(a){return a},next:function(a){return a+1},format:function(){},label:function(a){return Math.round(a)},stop:function(){return!1}};a.widget("ui.ruler",{options:{min:0,max:100,scales:[]},_create:function(){this.element.addClass("ui-ruler"),this._createScales()},destroy:function(){this.element.removeClass("ui-ruler"),this.element.empty()},_regenerate:function(){this.element.empty(),this._createScales()},_setOption:function(a,b){return"min"===a||"max"===a&&b!==this.options[a]?(this.options[a]=b,this._regenerate(),void 0):"scales"===a&&b instanceof Array?(this.options.scales=b,this._regenerate(),void 0):void 0},_createScales:function(){if(this.options.max!==this.options.min)for(var a=0;a").appendTo(this.element);f.addClass("ui-ruler-scale"+d),this._createTicks(f,e)},_createTicks:function(a,b){var c,d,e,f=b.first(this.options.min,this.options.max),g=this.options.max-this.options.min,h=!0;do c=f,f=b.next(c),d=(Math.min(f,this.options.max)-Math.max(c,this.options.min))/g,e=this._createTick(c,f,b),a.append(e),e.css("width",100*d+"%"),h&&c>this.options.min&&e.css("margin-left",100*(c-this.options.min)/g+"%"),h=!1;while(!this._stop(b,f))},_stop:function(a,b){return a.stop(b)||b>=this.options.max},_createTick:function(b,c,d){var e=a("
        "),f=a("
        ").appendTo(e),g=a("").appendTo(f);return g.text(d.label(b,c)),d.format(e,b,c),e}})}(jQuery);assets/plugins/DataTables/package.json000064400000001417152510440140014020 0ustar00{ "name": "DataTables", "version": "1.9.4", "title": "DataTables", "author": { "name": "Allan Jardine", "url": "http://sprymedia.co.uk" }, "licenses": [ { "type": "BSD", "url": "http://datatables.net/license_bsd" }, { "type": "GPLv2", "url": "http://datatables.net/license_gpl2" } ], "dependencies": { "jquery": "1.4 - 1.8" }, "description": "DataTables enhances HTML tables with the ability to sort, filter and page the data in the table very easily. It provides a comprehensive API and set of configuration options, allowing you to consume data from virtually any data source.", "keywords": [ "DataTables", "DataTable", "table", "grid", "filter", "sort", "page", "internationalisable" ], "homepage": "http://datatables.net" } assets/plugins/DataTables/Readme.txt000064400000002020152510440140013457 0ustar00This DataTables plugin (v1.9.x) for jQuery was developed out of the desire to allow highly configurable access to HTML tables with advanced access features. For detailed installation, usage and API instructions, please refer to the DataTables web-pages: http://www.datatables.net Questions, feature requests and bug reports (etc) can all be asked on the DataTables forums: http://www.datatables.net/forums/ The DataTables source can be found in the media/js/ directory of this archive. DataTables is released with dual licensing, using the GPL v2 (license-gpl2.txt) and an BSD style license (license-bsd.txt). You may select which of the two licenses you wish to use DataTables under. Please see the corresponding license file for details of these licenses. You are free to use, modify and distribute this software, but all copyright information must remain. If you discover any bugs in DataTables, have any suggestions for improvements or even if you just like using it, please free to get in touch with me: www.datatables.net/contactassets/plugins/DataTables/extras/TableTools/bootstrap.html000064400000035520152510440140020015 0ustar00 TableTools example
        TableTools with Twitter Bootstrap

        Preamble

        Twitter Bootstrap is a very powerful design framework for allowing you to very quickly create applications with a unified look and feel. DataTables integrates well with Bootstrap, and so does TableTools.

        This example shows the default Bootstrap theme being used with a Bootstrap styled DataTable. sDom is supplied to the DataTable with a setup suitable for Bootstrap styling, and a TableTools collection is used to show how it can be used in this environment.

        Live example

        Rendering engine Browser Platform(s) Engine version CSS grade
        Rendering engine Browser Platform(s) Engine version CSS grade
        Trident Internet Explorer 4.0 Win 95+ (Entity: &) 4 X
        Trident Internet Explorer 5.0 Win 95+ 5 C
        Trident Internet Explorer 5.5 Win 95+ 5.5 A
        Trident Internet Explorer 6 Win 98+ 6 A
        Trident Internet Explorer 7 Win XP SP2+ 7 A
        Trident AOL browser (AOL desktop) Win XP 6 A
        Gecko (UTF-8: $¢€ היצוא) Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
        Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
        Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
        Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
        Gecko Camino 1.0 OSX.2+ 1.8 A
        Gecko Camino 1.5 OSX.3+ 1.8 A
        Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
        Gecko Netscape Browser 8 Win 98SE+ 1.7 A
        Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
        Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
        Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
        Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
        Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
        Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
        Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
        Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
        Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
        Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
        Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
        Gecko Epiphany 2.20 Gnome 1.8 A
        Webkit Safari 1.2 OSX.3 125.5 A
        Webkit Safari 1.3 OSX.3 312.8 A
        Webkit Safari 2.0 OSX.4+ 419.3 A
        Webkit Safari 3.0 OSX.4+ 522.1 A
        Webkit OmniWeb 5.5 OSX.4+ 420 A
        Webkit iPod Touch / iPhone iPod 420.1 A
        Webkit S60 S60 413 A
        Presto Opera 7.0 Win 95+ / OSX.1+ - A
        Presto Opera 7.5 Win 95+ / OSX.2+ - A
        Presto Opera 8.0 Win 95+ / OSX.2+ - A
        Presto Opera 8.5 Win 95+ / OSX.2+ - A
        Presto Opera 9.0 Win 95+ / OSX.3+ - A
        Presto Opera 9.2 Win 88+ / OSX.3+ - A
        Presto Opera 9.5 Win 88+ / OSX.3+ - A
        Presto Opera for Wii Wii - A
        Presto Nokia N800 N800 - A
        Presto Nintendo DS browser Nintendo DS 8.5 C/A1
        KHTML Konqureror 3.1 KDE 3.1 3.1 C
        KHTML Konqureror 3.3 KDE 3.3 3.3 A
        KHTML Konqureror 3.5 KDE 3.5 3.5 A
        Tasman Internet Explorer 4.5 Mac OS 8-9 - X
        Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
        Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
        Misc NetFront 3.1 Embedded devices - C
        Misc NetFront 3.4 Embedded devices - A
        Misc Dillo 0.8 Embedded devices - X
        Misc Links Text only - X
        Misc Lynx Text only - X
        Misc IE Mobile Windows Mobile 6 - C
        Misc PSP browser PSP - C
        Other browsers All others - - U

        Initialisation code

        $(document).ready( function () {
        	$('#example').dataTable( {
        		"sDom": "<'row-fluid'<'span6'T><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
        		"oTableTools": {
        			"aButtons": [
        				"copy",
        				"print",
        				{
        					"sExtends":    "collection",
        					"sButtonText": 'Save <span class="caret" />',
        					"aButtons":    [ "csv", "xls", "pdf" ]
        				}
        			]
        		}
        	} );
        } );

        The following code is included from the DataTables bootstrap integration file:

        // Set the classes that TableTools uses to something suitable for Bootstrap
        $.extend( true, $.fn.DataTable.TableTools.classes, {
        	"container": "btn-group",
        	"buttons": {
        		"normal": "btn",
        		"disabled": "btn disabled"
        	},
        	"collection": {
        		"container": "DTTT_dropdown dropdown-menu",
        		"buttons": {
        			"normal": "",
        			"disabled": "disabled"
        		}
        	}
        } );
        
        // Have the collection use a bootstrap compatible dropdown
        $.extend( true, $.fn.DataTable.TableTools.DEFAULTS.oTags, {
        	"collection": {
        		"container": "ul",
        		"button": "li",
        		"liner": "a"
        	}
        } );

        Other examples

        assets/plugins/DataTables/extras/TableTools/theme.html000064400000033201152510440140017074 0ustar00 TableTools example
        TableTools example - jQuery UI theming

        Preamble

        Like DataTables, TableTools can be styled by a jQuery UI theme. The required classes for the theming with TableTools are added automatically when the bJQueryUI option is detected from DataTables. This example shows that in action, and also defines a button collection to show the themeing there.

        Live example

        Rendering engine Browser Platform(s) Engine version CSS grade
        Rendering engine Browser Platform(s) Engine version CSS grade
        Trident Internet Explorer 4.0 Win 95+ (Entity: &) 4 X
        Trident Internet Explorer 5.0 Win 95+ 5 C
        Trident Internet Explorer 5.5 Win 95+ 5.5 A
        Trident Internet Explorer 6 Win 98+ 6 A
        Trident Internet Explorer 7 Win XP SP2+ 7 A
        Trident AOL browser (AOL desktop) Win XP 6 A
        Gecko (UTF-8: $¢€) Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
        Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
        Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
        Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
        Gecko Camino 1.0 OSX.2+ 1.8 A
        Gecko Camino 1.5 OSX.3+ 1.8 A
        Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
        Gecko Netscape Browser 8 Win 98SE+ 1.7 A
        Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
        Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
        Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
        Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
        Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
        Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
        Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
        Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
        Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
        Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
        Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
        Gecko Epiphany 2.20 Gnome 1.8 A
        Webkit Safari 1.2 OSX.3 125.5 A
        Webkit Safari 1.3 OSX.3 312.8 A
        Webkit Safari 2.0 OSX.4+ 419.3 A
        Webkit Safari 3.0 OSX.4+ 522.1 A
        Webkit OmniWeb 5.5 OSX.4+ 420 A
        Webkit iPod Touch / iPhone iPod 420.1 A
        Webkit S60 S60 413 A
        Presto Opera 7.0 Win 95+ / OSX.1+ - A
        Presto Opera 7.5 Win 95+ / OSX.2+ - A
        Presto Opera 8.0 Win 95+ / OSX.2+ - A
        Presto Opera 8.5 Win 95+ / OSX.2+ - A
        Presto Opera 9.0 Win 95+ / OSX.3+ - A
        Presto Opera 9.2 Win 88+ / OSX.3+ - A
        Presto Opera 9.5 Win 88+ / OSX.3+ - A
        Presto Opera for Wii Wii - A
        Presto Nokia N800 N800 - A
        Presto Nintendo DS browser Nintendo DS 8.5 C/A1
        KHTML Konqureror 3.1 KDE 3.1 3.1 C
        KHTML Konqureror 3.3 KDE 3.3 3.3 A
        KHTML Konqureror 3.5 KDE 3.5 3.5 A
        Tasman Internet Explorer 4.5 Mac OS 8-9 - X
        Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
        Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
        Misc NetFront 3.1 Embedded devices - C
        Misc NetFront 3.4 Embedded devices - A
        Misc Dillo 0.8 Embedded devices - X
        Misc Links Text only - X
        Misc Lynx Text only - X
        Misc IE Mobile Windows Mobile 6 - C
        Misc PSP browser PSP - C
        Other browsers All others - - U

        Initialisation code

        $(document).ready( function () {
        	$('#example').dataTable( {
        		"bJQueryUI": true,
        		"sPaginationType": "full_numbers",
        		"sDom": '<"H"Tfr>t<"F"ip>',
        		"oTableTools": {
        			"aButtons": [
        				"copy", "csv", "xls", "pdf",
        				{
        					"sExtends":    "collection",
        					"sButtonText": "Save",
        					"aButtons":    [ "csv", "xls", "pdf" ]
        				}
        			]
        		}
        	} );
        } );

        Other examples

        assets/plugins/DataTables/extras/TableTools/media/swf/copy_csv_xls_pdf.swf000064400000162676152510440140023072 0ustar00CWS UKx}`#յGi4rYo] $˾-y-/, OƶXYr4zJB %@RYB 4H{;$;}ͽ2{n;sfI}펦&Ҕ\yTSSӿ~Lij\MmMf EkB[NT6RyBPh#Rl+} 'oe$M+[UAdZrɢ\.tZ."sYY0gb;((4U*f*[3ss|6CmfJ=ƩBƚ%<|`nJW0#VR$8Wֺff(wg4+r,4X,T\ufjqO4oQRlTJ)$ t53mnM 8;꘩[CcP  ff okSY榄x`76 w7#E{Y.% Rk:MM Ks| `$?X) 'H!N Ցœ#E8)RGrRI]unN#pROzH1NՑ#%8)QGJrRTj W_Aί`_:~9u r~ +W+Xǯ W_Aί`_:~9u r~ +W+Xǯk.5A܂c2pfyiT1s8fOA + 2(_prS H_p2 ZbD18V8]p˔b80b9?=CT:8b8œqp0f@l3nƤ&pA%g&;a28`"9TDÜ]p*92S6)3 T 9LR<+A8j5yvvuSR]x˺y_'yEOV]7PCXHUi 0V;'cR.QF9/:)`sfaMI5)lgGch;~FLk"I]FB,y'V G82ceC7eI!#eKO 1 $880͞#)q^Pʕ*oOcZ3)>fI@C$1Q$gv;CRI;rrY3,SFxʄ1,o3,$E85.'(™*F}9d/Ar3d%8i+e[ra);I;,^HpqEbdSBFFV.%Į$!v؀Ⱥ+b'S] N]J]aڥ ôn..idES\~B찠KnìcEJ]ؘnncO#]]b!iaj EQ>!v]F1/;8%R&y>>8%!v}\j\b'ߛgɄЅdsQB'Y!tqjW j % 8'.e\ ^V559+ڕeʲveY]Y֮,kW3ڕ( c}A?@ rZhAA qZ1MD4Hy1qZ"D Zz.NcSBDC,opK%hL5 t݂4.*hL[EsRBѓ$_QcHB 8SH\^θޠQX3b/WD{C$pIb< cpSIM4܎qnoiM~G,;\ql+I-AF$rbTԒ[j0vYI{bB(}*%zSKzcQ#&ӱged2*䏫"H4T()D.Q,D`ƕ R+FBn(tTALh A:ǸbFyX#GHBc\1G@A &M 8gbcq.blPTk"ơEX TU\ t R t.BB.8gb16"L"Fd8c㜉]ب`bq@荐fLطk"XetI$SR{ Xc|!1::SJ0X~Z at*U a{\KBC.n#V^k1X/Isp J!o4 B~(zLݴ-7f\BDn1Ds;x)Rrqi0F$HcNsij0FaK Wi1L=c ^ A> c噴pEmc 1\]Ɛ*V"A//a c^"S&iV6IKP#8cTH~"aS*0 W>j,Q3Galc[`1v [a1J 7c8U$-*fbYUXVU,*U˪eUZG}%u,?$ϊD .Тt b>*7{}4kABtH~eoFLsvS#q/FL-eC-jYPZܻI[VG-QeuԲ:jY_>PlᏜOtKlk,ec.s9c.811k%_7K.>(ԗ\pS.w VCԶv/>Oq 8/M>V [#.8%#|oQ.G̔gqyǪ&ϲfYmYV,m6jeBmQi?ch H4lFNԫK [QDhH~p? #1HOz9S6S.fqE{:v(ɻUQ$Ҧ(NDm%I+$I$54\: tdV7ϡZZIϫbi,ni6A,KPK7,-0EA+)([䧼VD{Q'C4"JhN:?%L6QՆ05jFfL9r$3=FԨjC5ZmSF ajh!L6QՆ05jFVԨ@C5hSF ajh!L ^Qm05jFvԨC5]S ijh!LCQ}05j4 F/ԨM5Z SF*ajhZ.)\j1-ajh{%LބQ՛05jzFVoԨM5Z SF7ajh&L ܄Q05j4pFnԨ`P5 SFDajhw&LmلQٚ05jPFFsԨѼN5 SFLajTo0xp+eղjYeZVY-UV*eKZqS<;GZ=ܳ\3oSxm|ڇ߰6zO}L4\姱l7]s?4V܅Ӽ_~ܖ.:8 x:~qH+ ^}~m+ ?|[ʟm .s']='MO<{nkS7>z[OX؄bDݬ8q`><铺$ 'Kr=6WWLW4۟sOV+oiT8!̝a|P؄.KZ 3TOK&Kd @Zf%#uxճe*ڛÙm'nEYbnv+Q-[r CYn2{DivgeS6+#Ҝ-#)ݪӥt_OR<$EF5 'M(Ye*ϬhVT?7N"8IRZij \ 6W̩ uwj$ZVh1nS/h0LRu1 Xe~k8mWTex3U4o"3gp<$uyVn3 $o fHWJJ ){td<+9kfGo,ARgyU<"t p̈Fg Nhs)%J_f6_دMgMfh譑J<[G@n*iǼ[ FlfI_ “/ӘD$%<}K+Q=Ty鶺5W~-N+Uٌ&ñ*=3l3N 5=@⢬g3" T;hffk3 _ KbsE3R?i~TRYbtVnZNp]T1t^ ʹ=BGU"V7ensi#.jyli/KƽB%iCDMc9O@)Φ.".\Eygm-X%5Hn^w 5S.X-9!$H:\J,S-bgIBh(\[F4`_3S졃e/c'BޑRa?>v VEmیN{HNDڎ1]l``Is;,ccnAݞl%7XkbspP ,%]$BVAһQ@!%\|}?Q-}lŲ$N˔-3s8&Mtyڴt{H詻0fC(*RiGI#Nٛc[mBl)Y-;=ȯ0_jdd1lyQJAC Bulv1-I#icSMkMCXQyk UPAo.+[(YlWv`;L̤-_,8ϙ"À5-˞Se`={6_BjKo"Zf5f9B2wqdZ%p+[xo~Dx#As4)v&:>x;+cCs%{jء$0TH^lf)țV vXp q1;um HEgVW`6=ob`G>1Y؟Ӌs3'! q :&hjCwO O 8'9bg%6p-Ҧz,xq611v%G Gɶ[HjGL(753E6:kb9?zM"KQ푎>D<=vȾYȹ'9Gc-j Y[ˤy\,nhбx\cbcbgBlZ&&BU`6q>;O2]URd^yߙꆁ] VssUˋ;&;^-JeGϋIY>nrr<ދDR-iY~tŮjuO%Źi`0J|KXz(yKEdKs?ιs9RZaf*j¶*5M|S}&U Ks4a:|dp'rͤq{ ٥Rx X?>YtBRE=cūtR$8lY9fѥG6Lܥ֥pJg& 6Sdab[|'Vj3VSjQӓdbbG%1׽+&mt:ݜ. -Nk0(dUT2fHƆK36S4;V*/kc1ZXٝ\q,VBDk7%j-t7&jp7ݾ.v{/s/G xS Xzbl'wbEڱnt#%HmfAgsyEm"oγS-|h4f昋1%Tn#c&7)RrW% .vݮV-GVqb"ܾ l\gŽnOf,0YS[;-=6IKm:thZɔml9tϝeSC/-ӬZJuD;pr¦~/U*6гvr\ghl+9!f͡7/Cb.(T#ϑ;3M,t~ZgWJdFI3?[>e5`f^v-tm A[R$f[d1܄ ":$m[(%xǖdz k-'D+ }}V bo`,!HR')EMUkO~%NY0ν1FQ*]2 kJ߀H#K%m{DȂ,g .:|Ђ,g xFGӣ>J%b#)} S̱<ؙr;:' m,K& 7$ܰ#G,HөQ@j{l@KIfcѣW\~%GS&r,D|x "Bn9Z!#' V9EtT?k},OmɒŊV6 ҭm,HuScʹ[GK8'xr2%o4z!l'^Kckx خADN -FCX9$&Lr 'b.L;{458N bⱱDW=u}#)Y矌tV2CMQ3SВ@ZF=v :?JHú3>>Kш7ٟHM 'ͽ _ nr*~$tk,F3BuQtŒTҕ!9iUiL=j&cMf$c_HG7N"=J(],r!N-c2fx(4;S.-EdJKǧ4PF29;i7!j/?)ap=ŏ 6UNiͤϖ;B 1d V8=|sô6FWfO]|iݒ4JTn13 _99C}x^Ԁ,rT5>œk^h_g9JqS|\c"'zenxBlBsq 5ܪ㖗+=Wh-3dC֌nlWI`ywpM]xӂ>ký#CN,b墽=5׽WaTz9)klcs'Y5z,k d=]Q6ab'7<;3,\q&JskF W/4Ტ*d-ahQ)͑5edqfSuxVҠnl%5:@*+风Ż;J0%Fhd6 TS lp_2 ddx&q#hTJj5LQfifY/عZêd'Y#?(w̘Tc!wf@F feӴ7 ȝ34e;}s+rFb83g% g-NţX .e8R+5l:XKĿ035h' hēv DJeuLo-gn =~6vy[ o6RKf膟V#c7[OZX˴5@x_?fqu+N'M hÏbm_]RDjͨDFdlYRpAi~hay"lO,« R\a8[Wو1 )w kGNd?ĤQ+#w3mgn jlbe!#uynlOJVi\Oq`ZzHOc_36(#l.y-#ISL9#c| E$@uhIuV])zչuu:g$L\Q7K q MU#=9Lgr] 5f %~!Z0 Ŏs_qs瞫i*Uԁh90v v{~5}=Ƚljua}l}DJ ;V%HMa?8-#WlI/WfjhٜN˭sVud{sP*\8q%>ՅѭƖ x.˓:N(^2wcwaZ~}\,_c ^a1!S$h `)1q'\qf?/ <ayk#IdlKيY-|n[Yus3mudx,[i2/!Yxq:h S8{Qs-_ؠJMm6&JB'֜txkӋvsŮYں6/h%qΕgK0%;( `Sp>'okVu2bٓOT|K?w౛?|O{#cY邏utR3+չf)9ڐ!{c͔i6U^j,2]5jnvK$1a@iq)㎩SY *{]ʐSsRU܈|*>>QəLny$V+@MD [iqN 4 =B/ܚ1q~Kdk]v`VcrL3wc5jomI*̖HɖFqu)sud`oIi/1蜢Qb\LqQNi)-E:cS'"=Q0Lg O{xF"3a[i96%;:g*Ʒk[%dnfxi8mwB[N[դxۉ] %@0(H;J8h7BE&Uz@k/G,cgMֆV\,Rѣ&D oj{vv H- 'e[)֭͛=v2~86vIl3I 7!<~6o5ū\|m׬)1_{ vmVrW6ѭmj4c7~w^k=G 2V ^l0t?W~?cUg[M`C\l1j!l/cCjd͊6֋2D?%+_ ^_fZVlbP #hiFH]cBԄ8k`-O_jMm)ï&xd`< {f7cd9B4^0y+u&^܍8f2vU?^̓xg*F~1ALD1^&Ko7vH>b{1C `ͽve7bqNЈ`o>C[~zbȕ}}[ٟJJx9C*N@9Q &I ՟0vwCWLt[5^,z416q;'3s/n7?[^vK+- j!Y^v: ړ:&. 0~3D?@6¬Gi8"F-9ZzmcjBu]8SNV`'6fvG: g[.3DpFFI`rˆEC}!򹰓s[78{اuya u̳saM+vZ vhaS6ݞۿhb46 pqκ,Rز8-Nc#O9Y#ly{ת=8\޶2?ԣ= E$DYOi^`૧e6],^4Vq+]]T NV,66k7y;ըu/m2_%2fqJ!UCF~Ӥ io`m R AkA2Fxr6AU|jG` HO z qJLI*)eXQRQL)\QJҭ(K[([<#W˞mqs!ƪ+gs!nMIPgb2%IrrBdTmi?*?)qh ռ?$2EDfw.oΦxS3f$3Ɣ-5όHReN5f%8}\G٢b$Q909(n3P]eiK4N秸1PVɂ]-2rXpmP2CáI e"ksf6?jc+׃kV2j.jC#btD:3V)1kkRR_fR=}ߢ}Kaۿc0 -F mm^ xmz÷Mo䉉|}a!X9-uXrtI,><ňU鍦}s%IǢٲI;R!/IX6nD4]([4vyr+O?םȼ= (䓟XͿq'r]Y:`hE"S:+Tٹ:+ _LzQ4zN1}\P:oGKǪ_džc::^ر#ر􎁎aߘWu|Pq5y^{uNMΎ;}opt5uqN߷o}BJݨ^vAIݮ6v㝪^nw?>>"TUTWUT7T߷Ԏ諭﫾~~~~~vN:nqnuÅ>x:q|{~;{Jwn߫ݾ׸}׺}׹ngݾ'w}5n߷ܾo}q{iQ#Fg< #OoS<[W_H_ߋ[ײ*0po=q1o׿*W"61Q~֎Zq7qfWu=5gݝCiU<:}+(kkuu k)7*7)K](7+[ S=*o@prrҦw*oR7-DԔޥܦ跃H~UYu'(wev+[)qەwY/U@Gi}rƻ6ВVUFu{dFW*̳GW++D2O)T&H+eZA坼JQ+(üGAAeeWz5š9TMqi[S4ͩkjjՔ6MYWkQhM?V_5yNZNZ^vjJ@k i.խ)I[q45yV>ͱCskgh+U#ڪ3U2yښqmNmYښ]ښs5jkӔ M'Mhʤd5%)LiʴfF[֜٣)hkf5WQuKhUc1u:khuZ:M_\xp)J2r JUW7^ xFf-m[;woxp/pn={>h!A!#GGG>|x iEs|gO|e+Wkp|&-i3wx!#E?~/_~{?8\Д/..^\  xj*55;p=7^܌[+7onn  x;{'z{@{7><|x> >< |q}q}?S CpyI /_|x u7oO|}? Sgρ_~ [w? W pS; cᨋb<rGa<pN_ֿ xj3+ ]\HE+-npjԎũ 7o˩p74'xpN]}N0T!A3px < |xĩuG cNmݧv2p2p2Xqg>< |"%2 << | 8 Uk$T-v/fgp?|jO"U-QC8: UK{| !A!#GGGnG>S.-Ys'/_|y|x u7oOviqiKӭMajT4q3)3=:iv28͠N3 t26K [wq? WЭqoen`s{)pp[+^ U_j׸5zSiz-֍ponn^ x#&[ۀہ;,;1 k ]ۀ-zpN]T>{>T.0֭zCG>|>|[k}ܭ{[~ O_ < <|>,[X ]~F_t]~~ =? \a.^\ \\ x-p#p3z 7wwwwx~i% 6U(tyGQtB$ctB4H><|%+Sׁojږo}x.}kڥOS~F_t]~Mt.A7.#.8  px p p)pp9p%j55u ktG{r ]^­7o  x+p'p6n;ѮP>IpTy >|G>< |"_ |*57oѮT^|ߣZ]h~ѮR~?~Ѽk75'"'_`.^\ Lýxj*5vr5 pȼV/R?-Lj/@P^-Wʍ^6 ܦ{۫^A~ӫՉ hQ1ptQp US><vñecKjU.+-}\IW~9]<FWWov]}  ׶opu`c&JA[Zxןmxۭ?R?:Asq$|^ y!'Od`EW{ Χ7@hP_6\恗".cm(?:L?D?céHdžhۡ_)7gu;LS9QZZITғǹEp:t7S\SNQW(txqgS3=PT\UIT]U:թ(RR;ii-kA&ESf_kXiMH+4-hQWuT^Y BUXDYN yVNgk69Uq\N M(Ӆ++\T I\6kV2vUMliuZM~Ҵqb+)K@Un(TbZ!Nu[UEszrN7X'cf霡nbsuzW7y<+* $4չ1ct8rV\Ttt3y*+Fq67+ͬv.dϡNhSEO[QWU's zV҂2M39E!TXոZ(&dlIf-^_/FO6t$`|8ѡS~l`$䅠 C=礘&r [4D3}ĕSNթSN:UNN1Kť"W^l_Xb8 slBgJZaPc&T5r6.8D>x&LY`zN̓܃ȩ1g wJZ^ׁGh *|K(e52Fs #\G/HbBJA UHz/C\,I>5b0G  $\p#j )!_gKB*Jೕ~UHepiʿ.˰^.TIgKzuco鰬ʷI!kiZѕ$Qw(]jB > S)?!SBg9_P/ 4hlPlq&p-u'_~CxSE Gҹ)u7Nq7SKR??S/J]7;fA)#hbZdx V2p {1F i'0DN) n4A2; 3bg\RavAZq. .Ի9X\"ry^XVsk8~-ÃwZpodM3nc]Wwy;z~ ph7@!{8 S)+ pqO 0 3Ō}}I4/? .=_%o p+|[|@a+`: Pw[{w|]~~?'9 ,ϛe!b/[F4V[eY: !{4@| \{3 OI )7L.3n߳g9 61Y,!E#݀ŀVpX 8Z,#+o+ljU2 Հb-$qdpX8Ul]l&6N[gwmw3Ž>9~FIM<.vv݀CÀ # ţcw STa"BW-i ] U4 Ft݀>:T-7sӞçCz2ٚg cx2ۑPf"V26 v@UwTNn]· :ra9 87S-:rGHo#G+w Hψ/2<2'',ЅKfP#- [9VڒFqhpX1G;Qx 0^YzP^e^sHL<,AX^GXm1q'1q,L:WNx<?:ORFlfuù hn1ZCE2J-`8| )\,bnv2\¥.F/Sh[FˤcdҌ &Dxyeip1eiᩀtL&Ԧ@w3C^LiQYDJsey(6#6)od>%u@ܒ6fr;{;@^(-#Kf;>p b0G>1.q000knεM\"4 \~X!Rޏ*)2 kdBTY` ~)2zG K#TNpϜ,ZܬV$PRޖ_MxmHĜ//KJ |J)_4J.^*ќ ñ oS/8Ӣ2p2e}Du:Btû.VN;̻ə Y M4sN,MMQdQve)P*#B/.Pe\-˙nJJdV!PKi5W+b Ց+RԵp 7뤵J.߫X:Sd٨Clf<Bpx+%uu;H6= hU\ #}}yr_O~}NA5#v!nUzUQTq0ᇈ*y||DR z+'iYpj?T8RmE تx 8Jp:JRG#!ۥ^ Uae|kr7R]SY2ܣ UF6"Bۣ~/W.d٭Ѧe9E^ϫc(^;I.b?ç>ʳ,d<'E/1|3Uy!a:( o2|z[8=ؐas10;2<#'d,JY09#_S[#Q[_W`UoE uh1ocQo<|W:}u"$ɀ)SOTfڀMHMCF#åQ|΢”_XvD ԫ#-MФYd|`8fFOb1WL"IBHm4[)7)IԡI(i&ͧP#Ƹ-" ޸=K[ׅR*뺬EIb żut]V-u-Tu=)K =*̕dJŔV#)))jSZK&˔tbr)# ؂J!"/ȶ麡6v5Ľ_gV&>]( q)S +b( 񠮗*3 -]T]M5Ϣèy!Ô4#T)CNt ]Tn!DnmIY!2hiouJ^;JU=f7!ޤ>CM;DMAUt?tIyd!$^ёk|]#狆k;ZcHO$bNERkt<4XT5NaHBZ >KŐjՐjVCҫQdTK ɬRZkHj6CTK ZoH i!VK )Z-M6jiQeTL-6*ӌ2}Ut5bPZL%.֯N"wIMϢ^b6f92s s)$?m5X>\ޥT g): QOy ,]XH(QxUiekh! 2rT":)\SWJ _ZKːi T_ZK /6tC/c:C//7C/hH t!MP-TSJ 66p)SAԤ AMdɪrb)6S<@Y%X*vRFwJkIV+UAK vC z*iG]xƘ`=GyHSWKGLQE0UIUL*tMeP%FQ =tD邒Fn(iZi$x{cjc4x-$rHFz jFzjYvtF:ݮnHpojbS: f#L9T4'"'E/19rUKUI D*)OV%5#JZo Ud<%;x/q BJBTT)rRbU*jE*"ؒ;e1t,#ވg w{AY|gK(QsߔEJ#x~O,ZWlY(CKG?pY]hBWJ(wHQgHF|lLߣ~)}7m3U7U 3q5ר( 8haVko7M2MLbq#31slu2JU[ڜ d+!JMC!Mgifiߧ7K BQ+!wVinqnu-.AJ2ä#Jֆ\y%ke? ׊'קoZ24%}>N#] V!nY*'?.^ESJD"/_\ rXyy/RM? Mc /J.KsX=*CCȲ=)pn9-Ae4B7zqcVGY3Ftߓ.0ͮsL11tIPk&PGS>Y0 萩_STU.lBWAԂSxa|3mA<&?b^>e7`R֎P?><Yd1/2.Fږa?|0G-Yg24r٤8ÚV "R۪֮j? Nf@[;5MvՊTm R?LMfckka'~F6?sPNd^=Ez(X!SenzثeT`XBSfMm2򱐗)l=c l$V= k1 nTS:XU>ʙi`64ưX:K+nXo:uQT`C`1Y!!F{H RM.;0\PC#0B]]ҋ"UAkʐ LuCD7iQ(V8?,"V#mWgĵ# +Ip *j:ĝX)M}1& ʟ$ǹKP/'B͜&M[蜞  3|&i'n"Yɲ1 CG9mMh:I,a~{Kgp3RuC94neK8q`#]͢].&1;Ls4J;ӟRfZE@9'.jzYu4rMjbF%u\JXJ*3g)3RأS3:#?g.LXR@mks3J$9KgTS4XkT:\ (1pI~?&l makքp}?| $ٳk`,Ƌvw/y!g2-ـ|g#S6?/Kbt$ʁhz"-ņcV}uSʲ+` ߓ$_o?&-BlQ"'bP<^D @M]d kn̆[XO$ kr%ZS3SÉDFZ60s7X).E&s3D0= En$[xx *eG@.sʃNs,5FM62\ 䫠G;H L3ʕ]GRa;ŒƤl̀Ssq 1Ȭкh [E[\%9e+lX))[qePia|/33 ;ŠG't& pG "%fU?>%*j`00u1%JhR޸1k7^y6~4ǫ8*kdb tnxؽ^Nys<ԫNmeMyG8YKNiQˎ"_/ZO"> ѥP@B:.cr-tĬ>": TL*_(䜸Ԕ@@GX3:Y(%1A]fŚlKj/hqrW$YεjTYD;31BLe|2KD7!ٵ+*}DYs<4\\]lRpd{F=AW/7 u0V<]=oSuf1׎R>9yvOy6曳vv\_.jF63Ba.%Y&Na_?t*vq`RC'Sl<R0@*nj=hE?E۽Nu,"S:>ѳK0 =I k$I 2,gJ 6DV3 dL3d1K tZTЎ% g0z!9b0kWo%9x#-@reum:/@TTtAFZF(@O!J4V3@#lh[ZJ%lJ<[YOQf'=]x֔,Q#ՂⰜ=ҍ zLo=1W S#S76VG0`zGorpwoT^yAK<_1!%5x)VZ>!J^-\"kR$sB:|QLTE(** #yvqK"ZF*XaAQj%e{0.ǔs(IvAhް_&ȩ <ɞdtLLetO/g5.ƃNNTP43s%C \; ]aeC|GZʹCSi>? d3B[\eh\#+0"up?5:ŦY&p4HXfrFSNLt&\u'څ;A Oo_,4ۙT;M|`zL,/O4jת^ٯ@n|7ŝZFbUηh<&uy /DDIavY.3úvhl6Ѭ,_" 3#ax7!i&;>%GJD;2Qp*B\m2[iGl6[Q^6^pQS5Um)z-)f߄|c{a &kXP:u3N V ')~A SKTm9\+} x۰7,g=w^4oRoXbܰEr;GE# Sd`8vS$k!F;{C a<Y9SaS1vd엲f@lo_YKߴ>^4bkz_MaN3v 22MXcip4]BSlD`u:!!g*!ZP^<dƆhmXq>7JG>F.J';6,Rkօ9<%wyWn k/h޶ Vw6􀍘M2^]JSUDLPB Qֈa= t9g|r-8p{ :dXa|eԮhXPTf(A*Zga1bPH196z_֖ zX)=\9LŞEA}h;3zf?{ѝZZ1@bҐ1^S_?{Y6cjkmaERw{ס&lv$h˹_*&~kkb$cÝtX(ZJ6}n^3{f" ad֋DK_bAk_Dg$b|R/C.V:BB-Y;)$h\G)7&&B<#$s!Cv*|I%D^Kz[fj0%ƟgB}KaYJ I0v ,]=|x|p2<7l{ ^%AD9@{=O?ߜf&&C T ~geɾ0>:3f!YGTDݢLoJ!UDQ5,‡j? ztGݗQ3-h(y},Hl#U- RB *>V}m4em@ Rˣ+6ohet w*:>֋7԰гxCyC-4Pռv,(\P{7@ wλMsйNfp u$?CBi:MQssl՝wH|pZS*I@)E99(^Y$ ײ'MSuQLJLy.*)]FMCwDrXWFe8O N\=B%KTwSdm8iy:nt;](Ѫf6_hpHbZAsr)uDuH^P:G :Y@bDtI}ҺsZ)0 1FMDOZ"IɿMQq35&3S^oRICtVuZO2ёLIZc#fapĂ{8{2ĕ.$1:H7߹ }H1ukؚ%W{ wy-Xr0%n(+]Hz0RߥW19qmH|:ƍ%n? 6hs;W!Nۏȍ۴t2qo9=,N=1Va56>I9sMrmó]=h*rnҰH6rfgj 3R)JƄA[(Y@p:@܈|{A\_*ŗ\I}wL$LCr0cGGrN%\bO&FRё[D(maSjS<ۤH2u o7P=8`VA~拓~ކ&wieeBlAX DuXު|\$S/R;MtI/]I($}!S\ԕ7PUD[EMWW.:R}d*dЗLwPsv(TMLTWj Ld%@,f9 V'/znJSJFJ F-m_d[$7G#iuprL \k^#wG&Ub#v=5¼ U蘆'>w#}&ڵ8L;/( 詴RPKTAC' O '?cDV',!ٻJ>'D%)rŜ2X.\rg_xy+5XЙDI[]^O/9aC. S17W~ؿR{B ]ZF<7Sub(Qe}ε1yȘ> ˓9@C6z7p̲ɬ2 *U}.Ut.4_נ,05qYdMtw-bOZw? zKX"/ ˊug$(ꥌܴJuz%;ę_NؙGg GtG6Lޞj}B& e~.?TPS}Kvv^Z]1 -X3dED*>>?ϙ{ߌQr> 5_:XK" TmH48da9O`9IMII)¤ #Jj-4'Ɉ[JܡwNZ\mv+EpyZr)L'+sɷF?A.;'_O@+\]d"Bx6)~牂͍xk !C뿱\]Sۺ(}W 5!6&Qxr٧bMw>7Olg?K 34B 2]X@at;Dߛ&hνF ?wn2E//\38 nįugRN&*źd)8ϴǭ_8ӱ8S*wvcwO9oo9Ճb(pwyJo)Y:@lPѮS_Z})9n/t_b^ on6owj.at\/e omw+?p+ ڤTngrS_A6{ =!  Mc5A{J^eʦ.p!n-Iah|#'& /%' nƺv,'Uޙ)J\Ndhk˿p)b'կ6AwOmiDumMk7>ho#i[ө_n {HZc´7O#e 3\\烌ECoJ V@)׽އ簃a%< /()|r J?)Yѧ;`/?jʼNڕo/'g;T^Ϡ0EŅ"ٹ<"Eܾ"?cgcX޾_H2[uuv>iuwǷTH(x@$r$O5(*mȥz6 H[nPdVFb쿛i^"ܦ%!hl3o˝ɟ-y)·g ߖ=$^?x*ؑ'xO~ x CںEUz^[F[{FzPI#[6 oN#&:%vJ\4'uL\2'r߻ȗz*G!]}pH8}޸僣HO\1 pjq}A;CE+cP}JX7(0@(J<:}\oTe7m&:aHN;:h?0an}%Aoܨ[Y=Qoܤ[#&qn4-j$[v޸MFmzvk$8#q޸C&z}5Hܧ7ޯ[Szux@oܩ[ӍNAݚa$#zA"9{'ޢ6u3}.ݺHw,#[o|H=ۗ+][FQ1ݚo$r,\嚽POXgx wޣzCh:WwI%\yŸB}BǨ { {5+oZҭ }zB߷c6>4N5:\HL"2{MX~,# QG44^c:NŤ7,3Sh2Sf.pLc_c91[As\j_މr:  o%3mC^HR[|G:>h,sHvQH\M?&#|WyTmyD0 :`B|"'O"'dX@ Dp{`!LO!|2JS4#_x1^k& VyvxTMRgSY(1NhމD;v.Jҍ n&t6+3rt7N;&9!'ڕ$:jCm'sWwMŢD.05>[ˍzZi$]HtݺHt8{y9d}Nld.mܫ_\ث7/&O%'OW$?p g8zVo|Nƃz,8H,`iWn\xo*k!Ζyئ4-SA}1BZ|_JSoн<񪀞2YlSQ+&~>= "l6ٸ;7G |V_\`;e:[Ar]G:"]kK㨮tZd"0Pm($$3Y`Ȍ8(yaxyԂN{%-l06,ly+`0oxw/Hb6^~?䅙y3{|RWss=w=H8o{l u 6DZ9*ӹ5-'w{<:˜L^-zF?/ fj؟ϣ8H@}}BڃZ!'-[G#iPd_$TSjG?Ń>9C3Z59^OZ&5jO*ؠќ?8D] }G(o,}%=)(rTy.Jq41k~invԮ2$|¬uvg;9h^|FuLuq?ڝrlF灳I {oW=%C sls\\կH>PꚔ> lZ `:5Xz7YFQ(G_Fџ A{w_>Ğnjx ;ZҞzNbDi,7V-&ڒ.\rh>烚P{ó젱yJ[9QB:86iE62[C%؞avZk9h#o##^{FXg4˘mju.-czJ9JƈڑH){aw3Poyۿ~eoP:=)P fF(ެS;! ~܄YgPٟ&G(ҵ*U͔XS㔚E0I-Φok ^$8Ď &ZcVٯUɦ'گ d-nv'f$sIԚch%S3Z< zAW37I"&8X#|z4>|zQ=D<{x^JRH$RO1dhQg:(=(1㍕_HZL+T%SĚ`37Y"8ٟ=Gt|U/4/T/t+WdWjިJ1{]y݄}> #Hb_l3rRAɲ۫8J8 ~C(Q SQ̓FAR0'3kDTgF`} RQlAK5qSa`Ad'°i |gˆnH_pNqN{:kd_̛O:Ps~viu3t3t3tɀθح΄^\@F t@m\{ئ L7pwN:YNб[ʞؗy9%8{tN`%.б[:C?nWVgPACWhu1tv2tVINKΓ"TWPBt2t(KBgt [  sVAKG!]s"萟KBg:'dZTa] ZˆNaH_ayyJ$!Na:K΄CO Wju|ucwX @_T)Na3HYЙPE A A:[YY a][W/aMRСXp\oكXnu@ \Zti1y¥C ,gtf@f35A):a-*б;B,:#Ų&OwjՇN: KC!ʭN+:/aU|Vg :|1yzVIt:3:VgC =tbֵ١sztNV+ɇ: :O)nuV3tLi% A)nuZYLn)Lb21&,Vj3sCf:"? !3AClTKthAgtf@tZCfk!*AtT3*ZU@*sZtN1nu(Ki qv1ҡf.|殚O~;~vNJ]XpO\=uOl_(q(yobHء{Q<> oe;{=v2luscsPin6ޚqXǑu?\4F*W4z"]/vCB {w!pRTurch VN^u \)QLrNv1؇/['nMk7C'u,?|Ă>P{J+Nc.uΫ7O`#"vN؈oM SZ %N7|G1`aYSDb0mMiœǝ-u}:v 6|"зmz".fU`ȰmSY-N3תB#[ct5b 2 u_4c|sPɪBLRT/%lo%vU٤}Qn<#b7 'C+ EL}*1=NjVҲ0yR sdBVN~G:~Ύ#d\?@#PHC %~wֳ{Z PũGYTek( %U@٩"wJI9N J=)rMfrMrfE{<_Q(,H(1I2JCioغuʦ<6[N]$p9TyZ]|Ɍd'F~)5Tݒݒ_CޗRYiėyrD#["ո>H>SOjVS)l{:B5kt)x軉%PCvޒM/exՋ7eyp1t^/5:'c. b-WK& 15L\SdC{w[F#~lXX}Y(vcE0GB^a*(b SYEbAΟ[wHh*BTP uŨ|>ǗumT~1Y| wVZ9.IDgrMي 9Jq3k]IpmB7U`{RV*Xߍ[C E"{ۚWڻ[2SZ6ې'\>W.ɇ_)y_R`j?R.Mң¿Fo@EwSDb?!2;DcwKsހ\~8*ߍC^T{@jՠwMv_)v =uKƒ!*+-esל{<bsZH, M' ]DV̅|,RY="^ 9VLՒKx[JTL5heYD>&SY~FaT=?B=ǜڣT@9ɈuJ .dͷ#XLVRj*%#T=2+z) iSy \,|[]ؿ,tf~ p.:tx&ˠkI.Qg萍1q%/b+Хs6Iz840?>0e&̟g2HVdeϮh(CBܨrgL7A!T{mKo,g [*bNИKb z=p=jʡPRR"rs!1ŨvHu ;Š:6+_^9V2 D /3ZSğ,Ck2Oܡ;E0W$^c,V1%*RHs!$`* \A 4EG@u}7${q }?U|oxgF43~0~N@{`"pZh4153~G{T )>XOJP)%8)>Vx$82*ŧHqiR|Uϣ:hC)HR|!a@/℔R|@"@H57#I6).;$\Yv¤)W8?(?G1)~\'8?-H/[$"S NM!o~542w*c~\ o,eF p-&UN`8 &w<%@FFb\7h8! gxK$ Ek^׷}oxW۳ld )"]$/tdYWA3ESn^*\Dji1no6ؑTSexRD@r$Wӫ#:qZ> -3_YwcrÍg6^!Zh4;vh_6^4 E:uF|Kf*rk8 JwspJlCȎu>/aEzD3N,ʫVRJOq\@j!鄬jo%E[ș[e7&L8xZY2b=a^L.\VG]cMI[6Ħ<`}n16#NiUcDRc"m9-(i2" 3)gG`}E\sÄ -KejR5J#}>aA.5VmZT:uNJt뜒[ڑƵ3略 *~^aŇdC#;u PRen)mj u!OqW[*Gz\ˁ3xrEIQGv)[%4/Jbaq#F?^p:WA~=w5ߵgӭ x\ dՓ~7f` /hlhI`Σc].t.tY ]х,Ivo^Xhh%ˉV&:,f(56ыb0'6V5DM- W9L%#FyMLd1q-PQ4"w 7$)L,'fJA4W kW'iO!ڤ i <&9! a8[P(W#E'&õGokFhY_Q]k^:I3Ld՗uw ]dˮK^g*Ɲs370w}gw! .t.tY ]хaBѿSr57=k=ظLXz~DػKe=]݃~=cz FB,wIFUTGH4)Ͷsp#t,7n]  t]43PCeI&f}O_RgW (,=گ2NK;Edx/-B'^[ϭ̛dC,c2$rB:; <n(R$=+;dG"DD’]$`fOO pq~IGedo9[u[uGt,͗[\߮W R[w{'Α47+Hp=ϵE#Cn O_wWb0WeWFR$KΘ~JQKuI&\Hhi4f"V?{qD-CdGA6!v9'2!gq9괤p{I^BPcCje7]LFfRE!>؈܊%Q#FX ~1}&bUt?Li ȏǖUBx&'Vˮ+q(b2r**JTQ4t)* p(j:5 oc̋_P3~Oӝ}1Mg[LCQX=8 zO?zOO?%~>=+>=t3ou~4ԉ۷O +Q2Hf^"D^&C a d D2B)0LRK&*%gbNuZ,Z\)[+Qe:Wd6;a[iMF*eW=T߳ck}ǛДfWUKu< u<\g(2 Xd[Ϧl>tSUOԨ rʷv#Sw5M@_m-`HZ.u.HDϲb,: u?Jf^bO*V$?Qi\ޮJ)!Jqs5Ph_iMA!R >9[K%:w:,|w\W_Һ)?Rۛ@ӢjԜ5gFYQsvԜ5Fע漨zԜ5߈oFQv\5߉Q󽨹8j.K沨wwhWD7Ujvΐ+عRd.3SK(;t?Ι,F&KbU)Is&4H"P7Zp6$6QPkDyo9 "0ޫH;WjHB9i4HʾCXv@C)dzTdmzW!dʴ4V2- 3MCE@mLc78d"hMSzU}o2)'Q֕Bl5`O=!l7?r|T!Pg9j]?~ke;/Pcϰo[BGŜXtKh:uBꦿX0Ot`+gQ.%MҍP15h~;إMʨz$3oә8n4f)ٜmFw+w 5-ʩۨ'{V4ŇzK޿j`VAg+O@G.\y*+u!/@UN%2UQzͳ|-Cls:PŲ_kPZm+ҩ*ʹj_g0[DB,@'Rvf`֓O|"jV{">{jVo Iuc]Bo̡Lor*!*O.s=uj>ݎr Y( z'h@RµےҳA}r%ϲ*[ R:Au$IWr sm%)Ļna⾣--,׻# O@'w^*~oA%7Nkni4V/S`Lr MРf7(BhNͨY3=,=B]uqI0LCa2PԆČnn&ΗnG\Wm$\1;(l-9/RN-p۩JSnߧ, mŻayxO ~ "^]~{>>=zOzOܧ~ߧg^ӳ@w@^^l􎾽,=p7 ~ .Dˍ|\6BYˢOYhu(u~z^z'g?nđs/0ׅ4bK+PcзãЯ[v!U0mSi䌊3G?Pi(lR:KbĒj#i ڐށ- .FecH^5@m*~!nr憐Am(w]g~?wG; 3cEǫM\9rz?Y7b /ΑZ!(m$ַD-_ooY߁+wVTCc?t>6)ڤL:uAx^ͤ詃:yIN!AПp8L>>ke|F δ'1 Q'#j|#޿2^`'[]sN ;Yj%UgДcEr-**bq}YrR֪lUC%Ӄn$}G:u@6!GҠ Q:b0KdvǴ نLƜ=߷`3CIkۡkw^ˡصKy|~Z>??_]?)i&ITź"tjBVtv+J>נpkNF"ٰ XЂ%8udܪ% Qyd[M8@(#Jˊ Eh~P8k/әϹ)=5~otqbQ y!>3f_Z%.2JGrZ>AGɣ kjx mf7Z ]ᚍ6>G*_Qc:cZMgWN rjilGQӈ4̒9iY,֪YLܟ#gHU]}dy,K\KL)Y5]=L 2MfX@;2S [.۰ 3* ՊU6uh%;T˱S7xF)K:E/ H5q;ĕ>.ɟs,G(A_:ZYzu]&(h:f0hAƘYP L2b^ƩRs"|!,CS>'BɎR ̺ !pn-o._- 9/@tOk' [TdY   EACza gepKO;ߪxY qнRJ\#>5< ]Ն[`Tr=e񾓞7z!.}ǡ,.JU8Z+{/_O[y3UBѥgx\H  iFpuBz֎}$z/TğF s?21FFQ ?n݋ sTXE f w/K S(b:9(l0ߠZ~FоSHQrh*М&rZOD[\!}ݶ!Z)UcGw!][EpZȌSUwp/N O숾%c7I1~9jlpUu\GvAjK BݿD<ְHʯY 6&7Ur"~HH \hlKvimqm%m_T]dq Q1V7CrW|F Đ{lۘ :T{: ӭݹ)Gl+/(P|+Ǫ]x3h#Cq$E*`(ʦ0 s#tjjS{#n_ڤ5 pqj;UwKgJk-&jyZ:kau;r ~_u *bp'N`8.jlO{l:YE-_u9q0."?D޿MeU؍˜! [ O||H'#; d?CVQ|f೼Ou ~?OAt> >KBZAy%> S)hluXE=k̓~i~C?CO~7o=}#~;+za}Y ՌdӀՌӷW{V C~7Ih`oRtassets/plugins/DataTables/extras/TableTools/media/swf/copy_csv_xls.swf000064400000004136152510440140022223 0ustar00CWS ; x}VKs&A m֮/I^ʲ$JdKbI1A` b, >m{9l% [9jzySAO=!,\&|7 dՍ~Ӳi6|5],& ]*&y{ml`yk|ӱ\VN4:kN[m ]ZYl+ёMTYղLMyh;{.5fg|oם:V,?ZG&X? t6U>9bu1*|~ wj-k0wm^m4szK6]zN0Fg O'(89S,7K3ϐrH ?iSX7uʖ٪; bj )$F:W.Yb6]pvbuՃddM˓| ˦#Zz n\g ib-ihD#Şc :M[[pTko&qtS҈U[/]qSe);4[fdw7 \[z:`P5vBmumbn0S5Xu"G"6 V+Q]lљz){'\ށ糦6ƒ[ti+3w6u_Nexb-51Y(mMBLG0r\ki3E0y)vYdx8z^dJy<'iLYmWm5L͓l۴?,%+S.3sKjoƆi/J^R~AM(vܕVXzW}BX}\ֺ\y9$vUKk|i8`dReƤrum}u tc~azY > EYͱ s2=:=~qB:-eqYزPv[9EmԴu_5˰xGJ:D;.x l~g5M_(/eX %%A 'H +3Ïg O ud—]2ٍx2@ D II I7Pe @2W\{ H.T2Hr<(=A*Stzn&VoHΓc2~C \L ҫRn۵d0x{70F/*wX_5T" %0j.nP-BFX-k?^*:=nQڸbpN\OO7s 5fFes/m#cDJl80"t50"t%0#t-0#t=0"t)0z"t90zah ]VDHp`nTK\M](1 4(+<$ʁ<Rɳ\L)gb..(ʡG;O:ptMc31^BkXTu>:a08M?QP"2\bL&3MOT*0r9<-5. |:>2!1j*>{'ѝAu9~ ᤾(+_t2&>w?!a]<GTyd`p}>HX~^B=1ct?>AXT[-J祚Zx5(&^(CWɠassets/plugins/DataTables/extras/TableTools/media/css/TableTools.css000064400000022467152510440140021551 0ustar00/* * File: TableTools.css * Description: Styles for TableTools 2 * Author: Allan Jardine (www.sprymedia.co.uk) * Language: Javascript * License: GPL v2 / 3 point BSD * Project: DataTables * * Copyright 2009-2012 Allan Jardine, all rights reserved. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * CSS name space: * DTTT DataTables TableTools * * Style sheet provides: * CONTAINER TableTools container element and styles applying to all components * BUTTON_STYLES Action specific button styles * SELECTING Row selection styles * COLLECTIONS Drop down list (collection) styles * PRINTING Print display styles */ /* * CONTAINER * TableTools container element and styles applying to all components */ div.DTTT_container { position: relative; float: right; margin-bottom: 1em; } button.DTTT_button, div.DTTT_button, a.DTTT_button { position: relative; float: left; margin-right: 3px; padding: 5px 8px; border: 1px solid #999; cursor: pointer; *cursor: hand; font-size: 0.88em; color: black !important; -webkit-border-radius: 2px; -moz-border-radius: 2px; -ms-border-radius: 2px; -o-border-radius: 2px; border-radius: 2px; -webkit-box-shadow: 1px 1px 3px #ccc; -moz-box-shadow: 1px 1px 3px #ccc; -ms-box-shadow: 1px 1px 3px #ccc; -o-box-shadow: 1px 1px 3px #ccc; box-shadow: 1px 1px 3px #ccc; /* Generated by http://www.colorzilla.com/gradient-editor/ */ background: #ffffff; /* Old browsers */ background: -webkit-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* Chrome10+,Safari5.1+ */ background: -moz-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* FF3.6+ */ background: -ms-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* IE10+ */ background: -o-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* Opera 11.10+ */ background: linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* W3C */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#f9f9f9',GradientType=0 ); /* IE6-9 */ } /* Buttons are cunning border-box sizing - we can't just use that for A and DIV due to IE6/7 */ button.DTTT_button { height: 30px; padding: 3px 8px; } .DTTT_button embed { outline: none; } button.DTTT_button:hover, div.DTTT_button:hover, a.DTTT_button:hover { border: 1px solid #666; text-decoration: none !important; -webkit-box-shadow: 1px 1px 3px #999; -moz-box-shadow: 1px 1px 3px #999; -ms-box-shadow: 1px 1px 3px #999; -o-box-shadow: 1px 1px 3px #999; box-shadow: 1px 1px 3px #999; background: #f3f3f3; /* Old browsers */ background: -webkit-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* Chrome10+,Safari5.1+ */ background: -moz-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* FF3.6+ */ background: -ms-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* IE10+ */ background: -o-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* Opera 11.10+ */ background: linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* W3C */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f3f3f3', endColorstr='#f4f4f4',GradientType=0 ); /* IE6-9 */ } button.DTTT_disabled, div.DTTT_disabled, a.DTTT_disabled { color: #999; border: 1px solid #d0d0d0; background: #ffffff; /* Old browsers */ background: -webkit-linear-gradient(top, #ffffff 0%,#f9f9f9 89%,#fafafa 100%); /* Chrome10+,Safari5.1+ */ background: -moz-linear-gradient(top, #ffffff 0%,#f9f9f9 89%,#fafafa 100%); /* FF3.6+ */ background: -ms-linear-gradient(top, #ffffff 0%,#f9f9f9 89%,#fafafa 100%); /* IE10+ */ background: -o-linear-gradient(top, #ffffff 0%,#f9f9f9 89%,#fafafa 100%); /* Opera 11.10+ */ background: linear-gradient(top, #ffffff 0%,#f9f9f9 89%,#fafafa 100%); /* W3C */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#fafafa',GradientType=0 ); /* IE6-9 */ } /* * BUTTON_STYLES * Action specific button styles * If you want images - comment this back in button.DTTT_button_csv, button.DTTT_button_xls, button.DTTT_button_copy, button.DTTT_button_pdf, button.DTTT_button_print { padding-right: 0px; } button.DTTT_button_csv span, button.DTTT_button_xls span, button.DTTT_button_copy span, button.DTTT_button_pdf span, button.DTTT_button_print span { display: inline-block; height: 24px; line-height: 24px; padding-right: 30px; } button.DTTT_button_csv span { background: url(../images/csv.png) no-repeat bottom right; } button.DTTT_button_csv:hover span { background: url(../images/csv_hover.png) no-repeat center right; } button.DTTT_button_xls span { background: url(../images/xls.png) no-repeat center right; } button.DTTT_button_xls:hover span { background: #f0f0f0 url(../images/xls_hover.png) no-repeat center right; } button.DTTT_button_copy span { background: url(../images/copy.png) no-repeat center right; } button.DTTT_button_copy:hover span { background: #f0f0f0 url(../images/copy_hover.png) no-repeat center right; } button.DTTT_button_pdf span { background: url(../images/pdf.png) no-repeat center right; } button.DTTT_button_pdf:hover span { background: #f0f0f0 url(../images/pdf_hover.png) no-repeat center right; } button.DTTT_button_print span { background: url(../images/print.png) no-repeat center right; } button.DTTT_button_print:hover span { background: #f0f0f0 url(../images/print_hover.png) no-repeat center right; } */ button.DTTT_button_collection span { padding-right: 17px; background: url(../images/collection.png) no-repeat center right; } button.DTTT_button_collection:hover span { padding-right: 17px; background: #f0f0f0 url(../images/collection_hover.png) no-repeat center right; } /* * SELECTING * Row selection styles */ table.DTTT_selectable tbody tr { cursor: pointer; *cursor: hand; } table.dataTable tr.DTTT_selected.odd { background-color: #9FAFD1; } table.dataTable tr.DTTT_selected.odd td.sorting_1 { background-color: #9FAFD1; } table.dataTable tr.DTTT_selected.odd td.sorting_2 { background-color: #9FAFD1; } table.dataTable tr.DTTT_selected.odd td.sorting_3 { background-color: #9FAFD1; } table.dataTable tr.DTTT_selected.even { background-color: #B0BED9; } table.dataTable tr.DTTT_selected.even td.sorting_1 { background-color: #B0BED9; } table.dataTable tr.DTTT_selected.even td.sorting_2 { background-color: #B0BED9; } table.dataTable tr.DTTT_selected.even td.sorting_3 { background-color: #B0BED9; } /* * COLLECTIONS * Drop down list (collection) styles */ div.DTTT_collection { width: 150px; padding: 8px 8px 4px 8px; border: 1px solid #ccc; border: 1px solid rgba( 0, 0, 0, 0.4 ); background-color: #f3f3f3; background-color: rgba( 255, 255, 255, 0.3 ); overflow: hidden; z-index: 2002; -webkit-border-radius: 5px; -moz-border-radius: 5px; -ms-border-radius: 5px; -o-border-radius: 5px; border-radius: 5px; -webkit-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3); -moz-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3); -ms-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3); -o-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3); box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3); } div.DTTT_collection_background { background: transparent url(../images/background.png) repeat top left; z-index: 2001; } div.DTTT_collection button.DTTT_button, div.DTTT_collection div.DTTT_button, div.DTTT_collection a.DTTT_button { position: relative; left: 0; right: 0; display: block; float: none; margin-bottom: 4px; -webkit-box-shadow: 1px 1px 3px #999; -moz-box-shadow: 1px 1px 3px #999; -ms-box-shadow: 1px 1px 3px #999; -o-box-shadow: 1px 1px 3px #999; box-shadow: 1px 1px 3px #999; } /* * PRINTING * Print display styles */ .DTTT_print_info { position: fixed; top: 50%; left: 50%; width: 400px; height: 150px; margin-left: -200px; margin-top: -75px; text-align: center; color: #333; padding: 10px 30px; background: #ffffff; /* Old browsers */ background: -webkit-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* Chrome10+,Safari5.1+ */ background: -moz-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* FF3.6+ */ background: -ms-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* IE10+ */ background: -o-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* Opera 11.10+ */ background: linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* W3C */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#f9f9f9',GradientType=0 ); /* IE6-9 */ opacity: 0.95; border: 1px solid black; border: 1px solid rgba(0, 0, 0, 0.5); -webkit-border-radius: 6px; -moz-border-radius: 6px; -ms-border-radius: 6px; -o-border-radius: 6px; border-radius: 6px; -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5); -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5); -ms-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5); -o-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5); box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5); } .DTTT_print_info h6 { font-weight: normal; font-size: 28px; line-height: 28px; margin: 1em; } .DTTT_print_info p { font-size: 14px; line-height: 20px; } assets/plugins/DataTables/extras/TableTools/media/css/TableTools_JUI.css000064400000007110152510440140022244 0ustar00/* * File: TableTools.css * Description: Styles for TableTools 2 with JUI theming * Author: Allan Jardine (www.sprymedia.co.uk) * Language: Javascript * License: LGPL / 3 point BSD * Project: DataTables * * Copyright 2010 Allan Jardine, all rights reserved. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Notes: * Generally speaking, please refer to the TableTools.css file - this file contains basic * modifications to that 'master' stylesheet for ThemeRoller. * * CSS name space: * DTTT DataTables TableTools * * Colour dictionary: * Button border #d0d0d0 * Button border hover #999999 * Hover background #f0f0f0 * Action blue #4b66d9 * * Style sheet provides: * CONTAINER TableTools container element and styles applying to all components * SELECTING Row selection styles * COLLECTIONS Drop down list (collection) styles * PRINTING Print display styles * MISC Minor misc styles */ /* * CONTAINER * TableTools container element and styles applying to all components */ div.DTTT_container { position: relative; float: left; } .DTTT_button { position: relative; float: left; margin-right: 3px; padding: 3px 10px; border: 1px solid #d0d0d0; background-color: #fff; color: #333 !important; cursor: pointer; *cursor: hand; } .DTTT_button::-moz-focus-inner { border: none !important; padding: 0; } /* * SELECTING * Row selection styles */ table.DTTT_selectable tbody tr { cursor: pointer; *cursor: hand; } table.dataTable tr.DTTT_selected.odd { background-color: #9FAFD1; } table.dataTable tr.DTTT_selected.odd td.sorting_1 { background-color: #9FAFD1; } table.dataTable tr.DTTT_selected.odd td.sorting_2 { background-color: #9FAFD1; } table.dataTable tr.DTTT_selected.odd td.sorting_3 { background-color: #9FAFD1; } table.dataTable tr.DTTT_selected.even { background-color: #B0BED9; } table.dataTable tr.DTTT_selected.even td.sorting_1 { background-color: #B0BED9; } table.dataTable tr.DTTT_selected.even td.sorting_2 { background-color: #B0BED9; } table.dataTable tr.DTTT_selected.even td.sorting_3 { background-color: #B0BED9; } /* * COLLECTIONS * Drop down list (collection) styles */ div.DTTT_collection { width: 150px; background-color: #f3f3f3; overflow: hidden; z-index: 2002; box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5); -moz-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5); } div.DTTT_collection_background { background: url(../images/background.png) repeat top left; z-index: 2001; } div.DTTT_collection button.DTTT_button, div.DTTT_collection div.DTTT_button, div.DTTT_collection a.DTTT_button { float: none; width: 100%; margin-bottom: -0.1em; } /* * PRINTING * Print display styles */ .DTTT_print_info { position: absolute; top: 50%; left: 50%; width: 400px; height: 150px; margin-left: -200px; margin-top: -75px; text-align: center; background-color: #3f3f3f; color: white; padding: 10px 30px; opacity: 0.9; border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5); -moz-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5); } .DTTT_print_info h6 { font-weight: normal; font-size: 28px; line-height: 28px; margin: 1em; } .DTTT_print_info p { font-size: 14px; line-height: 20px; } /* * MISC * Minor misc styles */ .DTTT_disabled { color: #999; } assets/plugins/DataTables/extras/TableTools/media/js/ZeroClipboard.js000064400000026233152510440140021703 0ustar00// Simple Set Clipboard System // Author: Joseph Huckaby var ZeroClipboard_TableTools = { version: "1.0.4-TableTools2", clients: {}, // registered upload clients on page, indexed by id moviePath: '', // URL to movie nextId: 1, // ID of next movie $: function(thingy) { // simple DOM lookup utility function if (typeof(thingy) == 'string') thingy = document.getElementById(thingy); if (!thingy.addClass) { // extend element with a few useful methods thingy.hide = function() { this.style.display = 'none'; }; thingy.show = function() { this.style.display = ''; }; thingy.addClass = function(name) { this.removeClass(name); this.className += ' ' + name; }; thingy.removeClass = function(name) { this.className = this.className.replace( new RegExp("\\s*" + name + "\\s*"), " ").replace(/^\s+/, '').replace(/\s+$/, ''); }; thingy.hasClass = function(name) { return !!this.className.match( new RegExp("\\s*" + name + "\\s*") ); } } return thingy; }, setMoviePath: function(path) { // set path to ZeroClipboard.swf this.moviePath = path; }, dispatch: function(id, eventName, args) { // receive event from flash movie, send to client var client = this.clients[id]; if (client) { client.receiveEvent(eventName, args); } }, register: function(id, client) { // register new client to receive events this.clients[id] = client; }, getDOMObjectPosition: function(obj) { // get absolute coordinates for dom element var info = { left: 0, top: 0, width: obj.width ? obj.width : obj.offsetWidth, height: obj.height ? obj.height : obj.offsetHeight }; if ( obj.style.width != "" ) info.width = obj.style.width.replace("px",""); if ( obj.style.height != "" ) info.height = obj.style.height.replace("px",""); while (obj) { info.left += obj.offsetLeft; info.top += obj.offsetTop; obj = obj.offsetParent; } return info; }, Client: function(elem) { // constructor for new simple upload client this.handlers = {}; // unique ID this.id = ZeroClipboard_TableTools.nextId++; this.movieId = 'ZeroClipboard_TableToolsMovie_' + this.id; // register client with singleton to receive flash events ZeroClipboard_TableTools.register(this.id, this); // create movie if (elem) this.glue(elem); } }; ZeroClipboard_TableTools.Client.prototype = { id: 0, // unique ID for us ready: false, // whether movie is ready to receive events or not movie: null, // reference to movie object clipText: '', // text to copy to clipboard fileName: '', // default file save name action: 'copy', // action to perform handCursorEnabled: true, // whether to show hand cursor, or default pointer cursor cssEffects: true, // enable CSS mouse effects on dom container handlers: null, // user event handlers sized: false, glue: function(elem, title) { // glue to DOM element // elem can be ID or actual DOM element object this.domElement = ZeroClipboard_TableTools.$(elem); // float just above object, or zIndex 99 if dom element isn't set var zIndex = 99; if (this.domElement.style.zIndex) { zIndex = parseInt(this.domElement.style.zIndex) + 1; } // find X/Y position of domElement var box = ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement); // create floating DIV above element this.div = document.createElement('div'); var style = this.div.style; style.position = 'absolute'; style.left = '0px'; style.top = '0px'; style.width = (box.width) + 'px'; style.height = box.height + 'px'; style.zIndex = zIndex; if ( typeof title != "undefined" && title != "" ) { this.div.title = title; } if ( box.width != 0 && box.height != 0 ) { this.sized = true; } // style.backgroundColor = '#f00'; // debug if ( this.domElement ) { this.domElement.appendChild(this.div); this.div.innerHTML = this.getHTML( box.width, box.height ); } }, positionElement: function() { var box = ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement); var style = this.div.style; style.position = 'absolute'; //style.left = (this.domElement.offsetLeft)+'px'; //style.top = this.domElement.offsetTop+'px'; style.width = box.width + 'px'; style.height = box.height + 'px'; if ( box.width != 0 && box.height != 0 ) { this.sized = true; } else { return; } var flash = this.div.childNodes[0]; flash.width = box.width; flash.height = box.height; }, getHTML: function(width, height) { // return HTML for movie var html = ''; var flashvars = 'id=' + this.id + '&width=' + width + '&height=' + height; if (navigator.userAgent.match(/MSIE/)) { // IE gets an OBJECT tag var protocol = location.href.match(/^https/i) ? 'https://' : 'http://'; html += ''; } else { // all other browsers get an EMBED tag html += ''; } return html; }, hide: function() { // temporarily hide floater offscreen if (this.div) { this.div.style.left = '-2000px'; } }, show: function() { // show ourselves after a call to hide() this.reposition(); }, destroy: function() { // destroy control and floater if (this.domElement && this.div) { this.hide(); this.div.innerHTML = ''; var body = document.getElementsByTagName('body')[0]; try { body.removeChild( this.div ); } catch(e) {;} this.domElement = null; this.div = null; } }, reposition: function(elem) { // reposition our floating div, optionally to new container // warning: container CANNOT change size, only position if (elem) { this.domElement = ZeroClipboard_TableTools.$(elem); if (!this.domElement) this.hide(); } if (this.domElement && this.div) { var box = ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement); var style = this.div.style; style.left = '' + box.left + 'px'; style.top = '' + box.top + 'px'; } }, clearText: function() { // clear the text to be copy / saved this.clipText = ''; if (this.ready) this.movie.clearText(); }, appendText: function(newText) { // append text to that which is to be copied / saved this.clipText += newText; if (this.ready) { this.movie.appendText(newText) ;} }, setText: function(newText) { // set text to be copied to be copied / saved this.clipText = newText; if (this.ready) { this.movie.setText(newText) ;} }, setCharSet: function(charSet) { // set the character set (UTF16LE or UTF8) this.charSet = charSet; if (this.ready) { this.movie.setCharSet(charSet) ;} }, setBomInc: function(bomInc) { // set if the BOM should be included or not this.incBom = bomInc; if (this.ready) { this.movie.setBomInc(bomInc) ;} }, setFileName: function(newText) { // set the file name this.fileName = newText; if (this.ready) this.movie.setFileName(newText); }, setAction: function(newText) { // set action (save or copy) this.action = newText; if (this.ready) this.movie.setAction(newText); }, addEventListener: function(eventName, func) { // add user event listener for event // event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel eventName = eventName.toString().toLowerCase().replace(/^on/, ''); if (!this.handlers[eventName]) this.handlers[eventName] = []; this.handlers[eventName].push(func); }, setHandCursor: function(enabled) { // enable hand cursor (true), or default arrow cursor (false) this.handCursorEnabled = enabled; if (this.ready) this.movie.setHandCursor(enabled); }, setCSSEffects: function(enabled) { // enable or disable CSS effects on DOM container this.cssEffects = !!enabled; }, receiveEvent: function(eventName, args) { // receive event from flash eventName = eventName.toString().toLowerCase().replace(/^on/, ''); // special behavior for certain events switch (eventName) { case 'load': // movie claims it is ready, but in IE this isn't always the case... // bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function this.movie = document.getElementById(this.movieId); if (!this.movie) { var self = this; setTimeout( function() { self.receiveEvent('load', null); }, 1 ); return; } // firefox on pc needs a "kick" in order to set these in certain cases if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) { var self = this; setTimeout( function() { self.receiveEvent('load', null); }, 100 ); this.ready = true; return; } this.ready = true; this.movie.clearText(); this.movie.appendText( this.clipText ); this.movie.setFileName( this.fileName ); this.movie.setAction( this.action ); this.movie.setCharSet( this.charSet ); this.movie.setBomInc( this.incBom ); this.movie.setHandCursor( this.handCursorEnabled ); break; case 'mouseover': if (this.domElement && this.cssEffects) { //this.domElement.addClass('hover'); if (this.recoverActive) this.domElement.addClass('active'); } break; case 'mouseout': if (this.domElement && this.cssEffects) { this.recoverActive = false; if (this.domElement.hasClass('active')) { this.domElement.removeClass('active'); this.recoverActive = true; } //this.domElement.removeClass('hover'); } break; case 'mousedown': if (this.domElement && this.cssEffects) { this.domElement.addClass('active'); } break; case 'mouseup': if (this.domElement && this.cssEffects) { this.domElement.removeClass('active'); this.recoverActive = false; } break; } // switch eventName if (this.handlers[eventName]) { for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) { var func = this.handlers[eventName][idx]; if (typeof(func) == 'function') { // actual function reference func(this, args); } else if ((typeof(func) == 'object') && (func.length == 2)) { // PHP style object + method, i.e. [myObject, 'myMethod'] func[0][ func[1] ](this, args); } else if (typeof(func) == 'string') { // name of function window[func](this, args); } } // foreach event handler defined } // user defined handler for event } }; assets/plugins/DataTables/extras/TableTools/media/js/TableTools.js000064400000175213152510440140021217 0ustar00/* * File: TableTools.js * Version: 2.1.4 * Description: Tools and buttons for DataTables * Author: Allan Jardine (www.sprymedia.co.uk) * Language: Javascript * License: GPL v2 or BSD 3 point style * Project: DataTables * * Copyright 2009-2012 Allan Jardine, all rights reserved. * * This source file is free software, under either the GPL v2 license or a * BSD style license, available at: * http://datatables.net/license_gpl2 * http://datatables.net/license_bsd */ /* Global scope for TableTools */ var TableTools; (function($, window, document) { /** * TableTools provides flexible buttons and other tools for a DataTables enhanced table * @class TableTools * @constructor * @param {Object} oDT DataTables instance * @param {Object} oOpts TableTools options * @param {String} oOpts.sSwfPath ZeroClipboard SWF path * @param {String} oOpts.sRowSelect Row selection options - 'none', 'single' or 'multi' * @param {Function} oOpts.fnPreRowSelect Callback function just prior to row selection * @param {Function} oOpts.fnRowSelected Callback function just after row selection * @param {Function} oOpts.fnRowDeselected Callback function when row is deselected * @param {Array} oOpts.aButtons List of buttons to be used */ TableTools = function( oDT, oOpts ) { /* Santiy check that we are a new instance */ if ( ! this instanceof TableTools ) { alert( "Warning: TableTools must be initialised with the keyword 'new'" ); } /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Public class variables * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /** * @namespace Settings object which contains customisable information for TableTools instance */ this.s = { /** * Store 'this' so the instance can be retrieved from the settings object * @property that * @type object * @default this */ "that": this, /** * DataTables settings objects * @property dt * @type object * @default From the oDT init option */ "dt": oDT.fnSettings(), /** * @namespace Print specific information */ "print": { /** * DataTables draw 'start' point before the printing display was shown * @property saveStart * @type int * @default -1 */ "saveStart": -1, /** * DataTables draw 'length' point before the printing display was shown * @property saveLength * @type int * @default -1 */ "saveLength": -1, /** * Page scrolling point before the printing display was shown so it can be restored * @property saveScroll * @type int * @default -1 */ "saveScroll": -1, /** * Wrapped function to end the print display (to maintain scope) * @property funcEnd * @type Function * @default function () {} */ "funcEnd": function () {} }, /** * A unique ID is assigned to each button in each instance * @property buttonCounter * @type int * @default 0 */ "buttonCounter": 0, /** * @namespace Select rows specific information */ "select": { /** * Select type - can be 'none', 'single' or 'multi' * @property type * @type string * @default "" */ "type": "", /** * Array of nodes which are currently selected * @property selected * @type array * @default [] */ "selected": [], /** * Function to run before the selection can take place. Will cancel the select if the * function returns false * @property preRowSelect * @type Function * @default null */ "preRowSelect": null, /** * Function to run when a row is selected * @property postSelected * @type Function * @default null */ "postSelected": null, /** * Function to run when a row is deselected * @property postDeselected * @type Function * @default null */ "postDeselected": null, /** * Indicate if all rows are selected (needed for server-side processing) * @property all * @type boolean * @default false */ "all": false, /** * Class name to add to selected TR nodes * @property selectedClass * @type String * @default "" */ "selectedClass": "" }, /** * Store of the user input customisation object * @property custom * @type object * @default {} */ "custom": {}, /** * SWF movie path * @property swfPath * @type string * @default "" */ "swfPath": "", /** * Default button set * @property buttonSet * @type array * @default [] */ "buttonSet": [], /** * When there is more than one TableTools instance for a DataTable, there must be a * master which controls events (row selection etc) * @property master * @type boolean * @default false */ "master": false, /** * Tag names that are used for creating collections and buttons * @namesapce */ "tags": {} }; /** * @namespace Common and useful DOM elements for the class instance */ this.dom = { /** * DIV element that is create and all TableTools buttons (and their children) put into * @property container * @type node * @default null */ "container": null, /** * The table node to which TableTools will be applied * @property table * @type node * @default null */ "table": null, /** * @namespace Nodes used for the print display */ "print": { /** * Nodes which have been removed from the display by setting them to display none * @property hidden * @type array * @default [] */ "hidden": [], /** * The information display saying telling the user about the print display * @property message * @type node * @default null */ "message": null }, /** * @namespace Nodes used for a collection display. This contains the currently used collection */ "collection": { /** * The div wrapper containing the buttons in the collection (i.e. the menu) * @property collection * @type node * @default null */ "collection": null, /** * Background display to provide focus and capture events * @property background * @type node * @default null */ "background": null } }; /** * @namespace Name space for the classes that this TableTools instance will use * @extends TableTools.classes */ this.classes = $.extend( true, {}, TableTools.classes ); if ( this.s.dt.bJUI ) { $.extend( true, this.classes, TableTools.classes_themeroller ); } /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Public class methods * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /** * Retreieve the settings object from an instance * @method fnSettings * @returns {object} TableTools settings object */ this.fnSettings = function () { return this.s; }; /* Constructor logic */ if ( typeof oOpts == 'undefined' ) { oOpts = {}; } this._fnConstruct( oOpts ); return this; }; TableTools.prototype = { /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Public methods * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /** * Retreieve the settings object from an instance * @returns {array} List of TR nodes which are currently selected * @param {boolean} [filtered=false] Get only selected rows which are * available given the filtering applied to the table. By default * this is false - i.e. all rows, regardless of filtering are selected. */ "fnGetSelected": function ( filtered ) { var out = [], data = this.s.dt.aoData, displayed = this.s.dt.aiDisplay, i, iLen; if ( filtered ) { // Only consider filtered rows for ( i=0, iLen=displayed.length ; i 0 ) { sTitle = anTitle[0].innerHTML; } } /* Strip characters which the OS will object to - checking for UTF8 support in the scripting * engine */ if ( "\u00A1".toString().length < 4 ) { return sTitle.replace(/[^a-zA-Z0-9_\u00A1-\uFFFF\.,\-_ !\(\)]/g, ""); } else { return sTitle.replace(/[^a-zA-Z0-9_\.,\-_ !\(\)]/g, ""); } }, /** * Calculate a unity array with the column width by proportion for a set of columns to be * included for a button. This is particularly useful for PDF creation, where we can use the * column widths calculated by the browser to size the columns in the PDF. * @param {Object} oConfig Button configuration object * @returns {Array} Unity array of column ratios */ "fnCalcColRatios": function ( oConfig ) { var aoCols = this.s.dt.aoColumns, aColumnsInc = this._fnColumnTargets( oConfig.mColumns ), aColWidths = [], iWidth = 0, iTotal = 0, i, iLen; for ( i=0, iLen=aColumnsInc.length ; i
      * @type object * @default {} * * @example * // Case-sensitive string sorting, with no pre-formatting method * $.extend( $.fn.dataTableExt.oSort, { * "string-case-asc": function(x,y) { * return ((x < y) ? -1 : ((x > y) ? 1 : 0)); * }, * "string-case-desc": function(x,y) { * return ((x < y) ? 1 : ((x > y) ? -1 : 0)); * } * } ); * * @example * // Case-insensitive string sorting, with pre-formatting * $.extend( $.fn.dataTableExt.oSort, { * "string-pre": function(x) { * return x.toLowerCase(); * }, * "string-asc": function(x,y) { * return ((x < y) ? -1 : ((x > y) ? 1 : 0)); * }, * "string-desc": function(x,y) { * return ((x < y) ? 1 : ((x > y) ? -1 : 0)); * } * } ); */ "oSort": {}, /** * Version string for plug-ins to check compatibility. Allowed format is * a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and * e are optional * @type string * @default Version number */ "sVersion": DataTable.version, /** * How should DataTables report an error. Can take the value 'alert' or 'throw' * @type string * @default alert */ "sErrMode": "alert", /** * Store information for DataTables to access globally about other instances * @namespace * @private */ "_oExternConfig": { /* int:iNextUnique - next unique number for an instance */ "iNextUnique": 0 } }; assets/plugins/DataTables/media/src/DataTables.js000064400000025147152510440370015755 0ustar00/** * @summary DataTables * @description Paginate, search and sort HTML tables * @version 1.9.4 * @file jquery.dataTables.js * @author Allan Jardine (www.sprymedia.co.uk) * @contact www.sprymedia.co.uk/contact * * @copyright Copyright 2008-2012 Allan Jardine, all rights reserved. * * This source file is free software, under either the GPL v2 license or a * BSD style license, available at: * http://datatables.net/license_gpl2 * http://datatables.net/license_bsd * * This source file is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. * * For details please refer to: http://www.datatables.net */ /*jslint evil: true, undef: true, browser: true */ /*globals $, jQuery,define,_fnExternApiFunc,_fnInitialise,_fnInitComplete,_fnLanguageCompat,_fnAddColumn,_fnColumnOptions,_fnAddData,_fnCreateTr,_fnGatherData,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnServerParams,_fnAddOptionsHtml,_fnFeatureHtmlTable,_fnScrollDraw,_fnAdjustColumnSizing,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnBuildSearchArray,_fnBuildSearchRow,_fnFilterCreateSearch,_fnDataToSearch,_fnSort,_fnSortAttachListener,_fnSortingClasses,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnFeatureHtmlLength,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnNodeToDataIndex,_fnVisbleColumns,_fnCalculateEnd,_fnConvertToWidth,_fnCalculateColumnWidths,_fnScrollingWidthAdjust,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnDetectType,_fnSettingsFromNode,_fnGetDataMaster,_fnGetTrNodes,_fnGetTdNodes,_fnEscapeRegex,_fnDeleteIndex,_fnReOrderIndex,_fnColumnOrdering,_fnLog,_fnClearTable,_fnSaveState,_fnLoadState,_fnCreateCookie,_fnReadCookie,_fnDetectHeader,_fnGetUniqueThs,_fnScrollBarWidth,_fnApplyToChildren,_fnMap,_fnGetRowData,_fnGetCellData,_fnSetCellData,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnApplyColumnDefs,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnJsonString,_fnRender,_fnNodeToColumnIndex,_fnInfoMacros,_fnBrowserDetect,_fnGetColumns*/ (/** @lends */function( window, document, undefined ) { (function( factory ) { "use strict"; // Define as an AMD module if possible if ( typeof define === 'function' && define.amd ) { define( ['jquery'], factory ); } /* Define using browser globals otherwise * Prevent multiple instantiations if the script is loaded twice */ else if ( jQuery && !jQuery.fn.dataTable ) { factory( jQuery ); } } (/** @lends */function( $ ) { "use strict"; /** * DataTables is a plug-in for the jQuery Javascript library. It is a * highly flexible tool, based upon the foundations of progressive * enhancement, which will add advanced interaction controls to any * HTML table. For a full list of features please refer to * DataTables.net. * * Note that the DataTable object is not a global variable but is * aliased to jQuery.fn.DataTable and jQuery.fn.dataTable through which * it may be accessed. * * @class * @param {object} [oInit={}] Configuration object for DataTables. Options * are defined by {@link DataTable.defaults} * @requires jQuery 1.3+ * * @example * // Basic initialisation * $(document).ready( function { * $('#example').dataTable(); * } ); * * @example * // Initialisation with configuration options - in this case, disable * // pagination and sorting. * $(document).ready( function { * $('#example').dataTable( { * "bPaginate": false, * "bSort": false * } ); * } ); */ var DataTable = function( oInit ) { require('core.columns.js'); require('core.data.js'); require('core.draw.js'); require('core.ajax.js'); require('core.filter.js'); require('core.info.js'); require('core.init.js'); require('core.length.js'); require('core.page.js'); require('core.processing.js'); require('core.scrolling.js'); require('core.sizing.js'); require('core.sort.js'); require('core.state.js'); require('core.support.js'); require('api.methods.js'); require('api.internal.js'); var _that = this; this.each(function() { require('core.constructor.js'); } ); _that = null; return this; }; require('api.static.js'); /** * Version string for plug-ins to check compatibility. Allowed format is * a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and * e are optional * @member * @type string * @default Version number */ DataTable.version = "1.9.4"; /** * Private data store, containing all of the settings objects that are created for the * tables on a given page. * * Note that the DataTable.settings object is aliased to jQuery.fn.dataTableExt * through which it may be accessed and manipulated, or jQuery.fn.dataTable.settings. * @member * @type array * @default [] * @private */ DataTable.settings = []; /** * Object models container, for the various models that DataTables has available * to it. These models define the objects that are used to hold the active state * and configuration of the table. * @namespace */ DataTable.models = {}; require('model.ext.js'); require('model.search.js'); require('model.row.js'); require('model.column.js'); require('model.defaults.js'); require('model.defaults.columns.js'); require('model.settings.js'); /** * Extension object for DataTables that is used to provide all extension options. * * Note that the DataTable.ext object is available through * jQuery.fn.dataTable.ext where it may be accessed and manipulated. It is * also aliased to jQuery.fn.dataTableExt for historic reasons. * @namespace * @extends DataTable.models.ext */ DataTable.ext = $.extend( true, {}, DataTable.models.ext ); require('ext.classes.js'); require('ext.paging.js'); require('ext.sorting.js'); require('ext.types.js'); // jQuery aliases $.fn.DataTable = DataTable; $.fn.dataTable = DataTable; $.fn.dataTableSettings = DataTable.settings; $.fn.dataTableExt = DataTable.ext; // Information about events fired by DataTables - for documentation. /** * Draw event, fired whenever the table is redrawn on the page, at the same point as * fnDrawCallback. This may be useful for binding events or performing calculations when * the table is altered at all. * @name DataTable#draw * @event * @param {event} e jQuery event object * @param {object} o DataTables settings object {@link DataTable.models.oSettings} */ /** * Filter event, fired when the filtering applied to the table (using the build in global * global filter, or column filters) is altered. * @name DataTable#filter * @event * @param {event} e jQuery event object * @param {object} o DataTables settings object {@link DataTable.models.oSettings} */ /** * Page change event, fired when the paging of the table is altered. * @name DataTable#page * @event * @param {event} e jQuery event object * @param {object} o DataTables settings object {@link DataTable.models.oSettings} */ /** * Sort event, fired when the sorting applied to the table is altered. * @name DataTable#sort * @event * @param {event} e jQuery event object * @param {object} o DataTables settings object {@link DataTable.models.oSettings} */ /** * DataTables initialisation complete event, fired when the table is fully drawn, * including Ajax data loaded, if Ajax data is required. * @name DataTable#init * @event * @param {event} e jQuery event object * @param {object} oSettings DataTables settings object * @param {object} json The JSON object request from the server - only * present if client-side Ajax sourced data is used */ /** * State save event, fired when the table has changed state a new state save is required. * This method allows modification of the state saving object prior to actually doing the * save, including addition or other state properties (for plug-ins) or modification * of a DataTables core property. * @name DataTable#stateSaveParams * @event * @param {event} e jQuery event object * @param {object} oSettings DataTables settings object * @param {object} json The state information to be saved */ /** * State load event, fired when the table is loading state from the stored data, but * prior to the settings object being modified by the saved state - allowing modification * of the saved state is required or loading of state for a plug-in. * @name DataTable#stateLoadParams * @event * @param {event} e jQuery event object * @param {object} oSettings DataTables settings object * @param {object} json The saved state information */ /** * State loaded event, fired when state has been loaded from stored data and the settings * object has been modified by the loaded data. * @name DataTable#stateLoaded * @event * @param {event} e jQuery event object * @param {object} oSettings DataTables settings object * @param {object} json The saved state information */ /** * Processing event, fired when DataTables is doing some kind of processing (be it, * sort, filter or anything else). Can be used to indicate to the end user that * there is something happening, or that something has finished. * @name DataTable#processing * @event * @param {event} e jQuery event object * @param {object} oSettings DataTables settings object * @param {boolean} bShow Flag for if DataTables is doing processing or not */ /** * Ajax (XHR) event, fired whenever an Ajax request is completed from a request to * made to the server for new data (note that this trigger is called in fnServerData, * if you override fnServerData and which to use this event, you need to trigger it in * you success function). * @name DataTable#xhr * @event * @param {event} e jQuery event object * @param {object} o DataTables settings object {@link DataTable.models.oSettings} * @param {object} json JSON returned from the server */ /** * Destroy event, fired when the DataTable is destroyed by calling fnDestroy or passing * the bDestroy:true parameter in the initialisation object. This can be used to remove * bound events, added DOM nodes, etc. * @name DataTable#destroy * @event * @param {event} e jQuery event object * @param {object} o DataTables settings object {@link DataTable.models.oSettings} */ })); }(window, document)); assets/plugins/DataTables/media/src/core/core.sizing.js000064400000024523152510440370017130 0ustar00/** * Convert a CSS unit width to pixels (e.g. 2em) * @param {string} sWidth width to be converted * @param {node} nParent parent to get the with for (required for relative widths) - optional * @returns {int} iWidth width in pixels * @memberof DataTable#oApi */ function _fnConvertToWidth ( sWidth, nParent ) { if ( !sWidth || sWidth === null || sWidth === '' ) { return 0; } if ( !nParent ) { nParent = document.body; } var iWidth; var nTmp = document.createElement( "div" ); nTmp.style.width = _fnStringToCss( sWidth ); nParent.appendChild( nTmp ); iWidth = nTmp.offsetWidth; nParent.removeChild( nTmp ); return ( iWidth ); } /** * Calculate the width of columns for the table * @param {object} oSettings dataTables settings object * @memberof DataTable#oApi */ function _fnCalculateColumnWidths ( oSettings ) { var iTableWidth = oSettings.nTable.offsetWidth; var iUserInputs = 0; var iTmpWidth; var iVisibleColumns = 0; var iColums = oSettings.aoColumns.length; var i, iIndex, iCorrector, iWidth; var oHeaders = $('th', oSettings.nTHead); var widthAttr = oSettings.nTable.getAttribute('width'); var nWrapper = oSettings.nTable.parentNode; /* Convert any user input sizes into pixel sizes */ for ( i=0 ; itd', nCalcTmp); } /* Apply custom sizing to the cloned header */ var nThs = _fnGetUniqueThs( oSettings, nTheadClone ); iCorrector = 0; for ( i=0 ; i 0 ) { oSettings.aoColumns[i].sWidth = _fnStringToCss( iWidth ); } iCorrector++; } } var cssWidth = $(nCalcTmp).css('width'); oSettings.nTable.style.width = (cssWidth.indexOf('%') !== -1) ? cssWidth : _fnStringToCss( $(nCalcTmp).outerWidth() ); nCalcTmp.parentNode.removeChild( nCalcTmp ); } if ( widthAttr ) { oSettings.nTable.style.width = _fnStringToCss( widthAttr ); } } /** * Adjust a table's width to take account of scrolling * @param {object} oSettings dataTables settings object * @param {node} n table node * @memberof DataTable#oApi */ function _fnScrollingWidthAdjust ( oSettings, n ) { if ( oSettings.oScroll.sX === "" && oSettings.oScroll.sY !== "" ) { /* When y-scrolling only, we want to remove the width of the scroll bar so the table * + scroll bar will fit into the area avaialble. */ var iOrigWidth = $(n).width(); n.style.width = _fnStringToCss( $(n).outerWidth()-oSettings.oScroll.iBarWidth ); } else if ( oSettings.oScroll.sX !== "" ) { /* When x-scrolling both ways, fix the table at it's current size, without adjusting */ n.style.width = _fnStringToCss( $(n).outerWidth() ); } } /** * Get the widest node * @param {object} oSettings dataTables settings object * @param {int} iCol column of interest * @returns {node} widest table node * @memberof DataTable#oApi */ function _fnGetWidestNode( oSettings, iCol ) { var iMaxIndex = _fnGetMaxLenString( oSettings, iCol ); if ( iMaxIndex < 0 ) { return null; } if ( oSettings.aoData[iMaxIndex].nTr === null ) { var n = document.createElement('td'); n.innerHTML = _fnGetCellData( oSettings, iMaxIndex, iCol, '' ); return n; } return _fnGetTdNodes(oSettings, iMaxIndex)[iCol]; } /** * Get the maximum strlen for each data column * @param {object} oSettings dataTables settings object * @param {int} iCol column of interest * @returns {string} max string length for each column * @memberof DataTable#oApi */ function _fnGetMaxLenString( oSettings, iCol ) { var iMax = -1; var iMaxIndex = -1; for ( var i=0 ; i/g, "" ); if ( s.length > iMax ) { iMax = s.length; iMaxIndex = i; } } return iMaxIndex; } /** * Append a CSS unit (only if required) to a string * @param {array} aArray1 first array * @param {array} aArray2 second array * @returns {int} 0 if match, 1 if length is different, 2 if no match * @memberof DataTable#oApi */ function _fnStringToCss( s ) { if ( s === null ) { return "0px"; } if ( typeof s == 'number' ) { if ( s < 0 ) { return "0px"; } return s+"px"; } /* Check if the last character is not 0-9 */ var c = s.charCodeAt( s.length-1 ); if (c < 0x30 || c > 0x39) { return s; } return s+"px"; } /** * Get the width of a scroll bar in this browser being used * @returns {int} width in pixels * @memberof DataTable#oApi */ function _fnScrollBarWidth () { var inner = document.createElement('p'); var style = inner.style; style.width = "100%"; style.height = "200px"; style.padding = "0px"; var outer = document.createElement('div'); style = outer.style; style.position = "absolute"; style.top = "0px"; style.left = "0px"; style.visibility = "hidden"; style.width = "200px"; style.height = "150px"; style.padding = "0px"; style.overflow = "hidden"; outer.appendChild(inner); document.body.appendChild(outer); var w1 = inner.offsetWidth; outer.style.overflow = 'scroll'; var w2 = inner.offsetWidth; if ( w1 == w2 ) { w2 = outer.clientWidth; } document.body.removeChild(outer); return (w1 - w2); } assets/plugins/DataTables/media/src/core/core.columns.js000064400000023545152510440370017310 0ustar00 /** * Add a column to the list used for the table with default values * @param {object} oSettings dataTables settings object * @param {node} nTh The th element for this column * @memberof DataTable#oApi */ function _fnAddColumn( oSettings, nTh ) { var oDefaults = DataTable.defaults.columns; var iCol = oSettings.aoColumns.length; var oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, { "sSortingClass": oSettings.oClasses.sSortable, "sSortingClassJUI": oSettings.oClasses.sSortJUI, "nTh": nTh ? nTh : document.createElement('th'), "sTitle": oDefaults.sTitle ? oDefaults.sTitle : nTh ? nTh.innerHTML : '', "aDataSort": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol], "mData": oDefaults.mData ? oDefaults.oDefaults : iCol } ); oSettings.aoColumns.push( oCol ); /* Add a column specific filter */ if ( oSettings.aoPreSearchCols[ iCol ] === undefined || oSettings.aoPreSearchCols[ iCol ] === null ) { oSettings.aoPreSearchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch ); } else { var oPre = oSettings.aoPreSearchCols[ iCol ]; /* Don't require that the user must specify bRegex, bSmart or bCaseInsensitive */ if ( oPre.bRegex === undefined ) { oPre.bRegex = true; } if ( oPre.bSmart === undefined ) { oPre.bSmart = true; } if ( oPre.bCaseInsensitive === undefined ) { oPre.bCaseInsensitive = true; } } /* Use the column options function to initialise classes etc */ _fnColumnOptions( oSettings, iCol, null ); } /** * Apply options for a column * @param {object} oSettings dataTables settings object * @param {int} iCol column index to consider * @param {object} oOptions object with sType, bVisible and bSearchable etc * @memberof DataTable#oApi */ function _fnColumnOptions( oSettings, iCol, oOptions ) { var oCol = oSettings.aoColumns[ iCol ]; /* User specified column options */ if ( oOptions !== undefined && oOptions !== null ) { /* Backwards compatibility for mDataProp */ if ( oOptions.mDataProp && !oOptions.mData ) { oOptions.mData = oOptions.mDataProp; } if ( oOptions.sType !== undefined ) { oCol.sType = oOptions.sType; oCol._bAutoType = false; } $.extend( oCol, oOptions ); _fnMap( oCol, oOptions, "sWidth", "sWidthOrig" ); /* iDataSort to be applied (backwards compatibility), but aDataSort will take * priority if defined */ if ( oOptions.iDataSort !== undefined ) { oCol.aDataSort = [ oOptions.iDataSort ]; } _fnMap( oCol, oOptions, "aDataSort" ); } /* Cache the data get and set functions for speed */ var mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null; var mData = _fnGetObjectDataFn( oCol.mData ); oCol.fnGetData = function (oData, sSpecific) { var innerData = mData( oData, sSpecific ); if ( oCol.mRender && (sSpecific && sSpecific !== '') ) { return mRender( innerData, sSpecific, oData ); } return innerData; }; oCol.fnSetData = _fnSetObjectDataFn( oCol.mData ); /* Feature sorting overrides column specific when off */ if ( !oSettings.oFeatures.bSort ) { oCol.bSortable = false; } /* Check that the class assignment is correct for sorting */ if ( !oCol.bSortable || ($.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1) ) { oCol.sSortingClass = oSettings.oClasses.sSortableNone; oCol.sSortingClassJUI = ""; } else if ( $.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1 ) { oCol.sSortingClass = oSettings.oClasses.sSortable; oCol.sSortingClassJUI = oSettings.oClasses.sSortJUI; } else if ( $.inArray('asc', oCol.asSorting) != -1 && $.inArray('desc', oCol.asSorting) == -1 ) { oCol.sSortingClass = oSettings.oClasses.sSortableAsc; oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIAscAllowed; } else if ( $.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) != -1 ) { oCol.sSortingClass = oSettings.oClasses.sSortableDesc; oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIDescAllowed; } } /** * Adjust the table column widths for new data. Note: you would probably want to * do a redraw after calling this function! * @param {object} oSettings dataTables settings object * @memberof DataTable#oApi */ function _fnAdjustColumnSizing ( oSettings ) { /* Not interested in doing column width calculation if auto-width is disabled */ if ( oSettings.oFeatures.bAutoWidth === false ) { return false; } _fnCalculateColumnWidths( oSettings ); for ( var i=0 , iLen=oSettings.aoColumns.length ; i

      Namespace: oLanguage

      Ancestry: DataTable » .models » .oSettings. » oLanguage

      DataTables v1.9.4 documentation

      Navigation

      Hiding private elements (toggle)
      Showing extended elements (toggle)

      Language information for the table.

      Extends

      Summary

      Properties - static

      <static> fnInfoCallback :function

      Information callback function. See DataTable.defaults.fnInfoCallback

      Details

      Properties - static

      <static> fnInfoCallback :function

      Information callback function. See DataTable.defaults.fnInfoCallback

      assets/plugins/DataTables/docs/DataTable.defaults.oLanguage.html000064400000054047152510440400020706 0ustar00 Namespace: oLanguage - documentation

      Namespace: oLanguage

      Ancestry: DataTable » .defaults. » oLanguage

      DataTables v1.9.4 documentation

      Navigation

      Hiding private elements (toggle)
      Showing extended elements (toggle)

      All strings that DataTables uses in the user interface that it creates are defined in this object, allowing you to modified them individually or completely replace them all as required.

      Summary

      Namespaces

      oAria

      Strings that are used for WAI-ARIA labels and controls only (these are not actually visible on the page, but will be read by screenreaders, and thus must be internationalised as well).

      oPaginate

      Pagination string used by DataTables for the two built-in pagination control types ("two_button" and "full_numbers")

      Properties - static

      <static> sEmptyTable :string

      This string is shown in preference to sZeroRecords when the table is empty of data (regardless of filtering). Note that this is an optional parameter - if it is not given, the value of sZeroRecords will be used instead (either the default or given value).

      <static> sInfo :string

      This string gives information to the end user about the information that is current on display on the page. The START, END and TOTAL variables are all dynamically replaced as the table display updates, and can be freely moved or removed as the language requirements change.

      <static> sInfoEmpty :string

      Display information string for when the table is empty. Typically the format of this string should match sInfo.

      <static> sInfoFiltered :string

      When a user filters the information in a table, this string is appended to the information (sInfo) to give an idea of how strong the filtering is. The variable MAX is dynamically updated.

      <static> sInfoPostFix :string

      If can be useful to append extra information to the info string at times, and this variable does exactly that. This information will be appended to the sInfo (sInfoEmpty and sInfoFiltered in whatever combination they are being used) at all times.

      <static> sInfoThousands :string

      DataTables has a build in number formatter (fnFormatNumber) which is used to format large numbers that are used in the table information. By default a comma is used, but this can be trivially changed to any character you wish with this parameter.

      <static> sLengthMenu :string

      Detail the action that will be taken when the drop down menu for the pagination length option is changed. The 'MENU' variable is replaced with a default select list of 10, 25, 50 and 100, and can be replaced with a custom select box if required.

      <static> sLoadingRecords :string

      When using Ajax sourced data and during the first draw when DataTables is gathering the data, this message is shown in an empty row in the table to indicate to the end user the the data is being loaded. Note that this parameter is not used when loading data by server-side processing, just Ajax sourced data with client-side processing.

      <static> sProcessing :string

      Text which is displayed when the table is processing a user action (usually a sort command or similar).

      <static> sSearch :string

      Details the actions that will be taken when the user types into the filtering input text box. The variable "INPUT", if used in the string, is replaced with the HTML text box for the filtering input allowing control over where it appears in the string. If "INPUT" is not given then the input box is appended to the string automatically.

      <static> sUrl :string

      All of the language information can be stored in a file on the server-side, which DataTables will look up if this parameter is passed. It must store the URL of the language file, which is in a JSON format, and the object has the same properties as the oLanguage object in the initialiser object (i.e. the above parameters). Please refer to one of the example language files to see how this works in action.

      <static> sZeroRecords :string

      Text shown inside the table records when the is no information to be displayed after filtering. sEmptyTable is shown when there is simply no information in the table at all (regardless of filtering).

      Details

      Properties - static

      <static> sEmptyTable :string

      This string is shown in preference to sZeroRecords when the table is empty of data (regardless of filtering). Note that this is an optional parameter - if it is not given, the value of sZeroRecords will be used instead (either the default or given value).

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "oLanguage": {
               "sEmptyTable": "No data available in table"
             }
           } );
         } );
      <static> sInfo :string

      This string gives information to the end user about the information that is current on display on the page. The START, END and TOTAL variables are all dynamically replaced as the table display updates, and can be freely moved or removed as the language requirements change.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "oLanguage": {
               "sInfo": "Got a total of _TOTAL_ entries to show (_START_ to _END_)"
             }
           } );
         } );
      <static> sInfoEmpty :string

      Display information string for when the table is empty. Typically the format of this string should match sInfo.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "oLanguage": {
               "sInfoEmpty": "No entries to show"
             }
           } );
         } );
      <static> sInfoFiltered :string

      When a user filters the information in a table, this string is appended to the information (sInfo) to give an idea of how strong the filtering is. The variable MAX is dynamically updated.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "oLanguage": {
               "sInfoFiltered": " - filtering from _MAX_ records"
             }
           } );
         } );
      <static> sInfoPostFix :string

      If can be useful to append extra information to the info string at times, and this variable does exactly that. This information will be appended to the sInfo (sInfoEmpty and sInfoFiltered in whatever combination they are being used) at all times.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "oLanguage": {
               "sInfoPostFix": "All records shown are derived from real information."
             }
           } );
         } );
      <static> sInfoThousands :string

      DataTables has a build in number formatter (fnFormatNumber) which is used to format large numbers that are used in the table information. By default a comma is used, but this can be trivially changed to any character you wish with this parameter.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "oLanguage": {
               "sInfoThousands": "'"
             }
           } );
         } );
      <static> sLengthMenu :string

      Detail the action that will be taken when the drop down menu for the pagination length option is changed. The 'MENU' variable is replaced with a default select list of 10, 25, 50 and 100, and can be replaced with a custom select box if required.

      Examples
         // Language change only
         $(document).ready( function() {
           $('#example').dataTable( {
             "oLanguage": {
               "sLengthMenu": "Display _MENU_ records"
             }
           } );
         } );
         
       
         // Language and options change
         $(document).ready( function() {
           $('#example').dataTable( {
             "oLanguage": {
               "sLengthMenu": 'Display  records'
             }
           } );
         } );
      <static> sLoadingRecords :string

      When using Ajax sourced data and during the first draw when DataTables is gathering the data, this message is shown in an empty row in the table to indicate to the end user the the data is being loaded. Note that this parameter is not used when loading data by server-side processing, just Ajax sourced data with client-side processing.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "oLanguage": {
               "sLoadingRecords": "Please wait - loading..."
             }
           } );
         } );
      <static> sProcessing :string

      Text which is displayed when the table is processing a user action (usually a sort command or similar).

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "oLanguage": {
               "sProcessing": "DataTables is currently busy"
             }
           } );
         } );
      <static> sSearch :string

      Details the actions that will be taken when the user types into the filtering input text box. The variable "INPUT", if used in the string, is replaced with the HTML text box for the filtering input allowing control over where it appears in the string. If "INPUT" is not given then the input box is appended to the string automatically.

      Examples
         // Input text box will be appended at the end automatically
         $(document).ready( function() {
           $('#example').dataTable( {
             "oLanguage": {
               "sSearch": "Filter records:"
             }
           } );
         } );
         
       
         // Specify where the filter should appear
         $(document).ready( function() {
           $('#example').dataTable( {
             "oLanguage": {
               "sSearch": "Apply filter _INPUT_ to table"
             }
           } );
         } );
      <static> sUrl :string

      All of the language information can be stored in a file on the server-side, which DataTables will look up if this parameter is passed. It must store the URL of the language file, which is in a JSON format, and the object has the same properties as the oLanguage object in the initialiser object (i.e. the above parameters). Please refer to one of the example language files to see how this works in action.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "oLanguage": {
               "sUrl": "http://www.sprymedia.co.uk/dataTables/lang.txt"
             }
           } );
         } );
      <static> sZeroRecords :string

      Text shown inside the table records when the is no information to be displayed after filtering. sEmptyTable is shown when there is simply no information in the table at all (regardless of filtering).

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "oLanguage": {
               "sZeroRecords": "No records to display"
             }
           } );
         } );
      assets/plugins/DataTables/docs/34cdb56b2c.html000064400000521750152510440400015017 0ustar00 Namespace: oApi - documentation

      Namespace: oApi

      Ancestry: DataTable# » oApi

      DataTables v1.9.4 documentation

      Navigation

      Hiding private elements (toggle)
      Showing extended elements (toggle)

      Reference to internal functions for use by plug-in developers. Note that these methods are references to internal functions and are considered to be private. If you use these methods, be aware that they are liable to change between versions (check the upgrade notes).

      Summary

      Properties - static

      <static> _fnJsonString

      JSON stringify. If JSON.stringify it provided by the browser, json2.js or any other library, then we use that as it is fast, safe and accurate. If the function isn't available then we need to built it ourselves - the inspiration for this function comes from Craig Buckler ( http://www.sitepoint.com/javascript-json-serialization/ ). It is not perfect and absolutely should not be used as a replacement to json2.js - but it does do what we need, without requiring a dependency for DataTables.

      Methods - static

      <static> _fnAddColumn(oSettings, nTh)

      Add a column to the list used for the table with default values

      <static> _fnAddData(oSettings, aData) → {int}

      Add a data array to the table, creating DOM node etc. This is the parallel to _fnGatherData, but for adding rows from a Javascript source, rather than a DOM source.

      <static> _fnAddOptionsHtml(oSettings)

      Add the options to the page HTML for the table

      <static> _fnAdjustColumnSizing(oSettings)

      Adjust the table column widths for new data. Note: you would probably want to do a redraw after calling this function!

      <static> _fnAjaxParameters(oSettings) → {bool}

      Build up the parameters in an object needed for a server-side processing request

      <static> _fnAjaxUpdate(oSettings) → {boolean}

      Update the table using an Ajax call

      <static> _fnAjaxUpdateDraw(oSettings, json)

      Data the data from the server (nuking the old) and redraw the table

      <static> _fnApplyColumnDefs(oSettings, aoColDefs, aoCols, fn)

      Take the column definitions and static columns arrays and calculate how they relate to column indexes. The callback function will then apply the definition found for a column to a suitable configuration object.

      <static> _fnApplyToChildren(fn, array, array)

      Apply a given function to the display child nodes of an element array (typically TD children of TR rows

      <static> _fnBindAction(n, oData, fn)

      Bind an event handers to allow a click or return key to activate the callback. This is good for accessibility since a return on the keyboard will have the same effect as a click, if the element has focus.

      <static> _fnBrowserDetect(oSettings)

      From some browsers (specifically IE6/7) we need special handling to work around browser bugs - this function is used to detect when these workarounds are needed.

      <static> _fnBuildHead(oSettings)

      Create the HTML header for the table

      <static> _fnBuildSearchArray(oSettings, iMaster)

      Create an array which can be quickly search through

      <static> _fnBuildSearchRow(oSettings, aData)

      Create a searchable string from a single data row

      <static> _fnCalculateColumnWidths(oSettings)

      Calculate the width of columns for the table

      <static> _fnCalculateEnd(oSettings)

      Recalculate the end point based on the start point

      <static> _fnCallbackFire(oSettings, sStore, sTrigger, aArgs)

      Fire callback functions and trigger events. Note that the loop over the callback array store is done backwards! Further note that you do not want to fire off triggers in time sensitive applications (for example cell creation) as its slow.

      <static> _fnCallbackReg(oSettings, sStore, fn, sName)

      Register a callback function. Easily allows a callback function to be added to an array store of callback functions that can then all be called together.

      <static> _fnClearTable(oSettings)

      Nuke the table

      <static> _fnColumnIndexToVisible(iMatch, oSettings) → {int}

      Covert the index of an index in the data array and convert it to the visible column index (take account of hidden columns)

      <static> _fnColumnOptions(oSettings, iCol, oOptions)

      Apply options for a column

      <static> _fnColumnOrdering(oSettings) → {string}

      Get the column ordering that DataTables expects

      <static> _fnConvertToWidth(sWidth, nParent) → {int}

      Convert a CSS unit width to pixels (e.g. 2em)

      <static> _fnCreateCookie(sName, sValue, iSecs, sBaseName, fnCallback)

      Create a new cookie with a value to store the state of a table

      <static> _fnCreateTr(oSettings, iRow)

      Create a new TR element (and it's TD children) for a row

      <static> _fnDataToSearch(sData, sType) → {string}

      Convert raw data into something that the user can search on

      <static> _fnDeleteIndex(a, iTarget)

      Take an array of integers (index array) and remove a target integer (value - not the key!)

      <static> _fnDetectHeader(array, nThead)

      Use the DOM source to create up an array of header cells. The idea here is to create a layout grid (array) of rows x columns, which contains a reference to the cell that that point in the grid (regardless of col/rowspan), such that any column / row could be removed and the new grid constructed

      <static> _fnDetectType(sData) → {string}

      Get the sort type based on an input string

      <static> _fnDraw(oSettings)

      Insert the required TR nodes into the table for display

      <static> _fnDrawHead(oSettings, array, bIncludeHidden)

      Draw the header (or footer) element based on the column visibility states. The methodology here is to use the layout array from _fnDetectHeader, modified for the instantaneous column visibility, to construct the new layout. The grid is traversed over cell at a time in a rows x columns grid fashion, although each cell insert can cover multiple elements in the grid - which is tracks using the aApplied array. Cell inserts in the grid will only occur where there isn't already a cell in that position.

      <static> _fnEscapeRegex(sVal) → {string}

      scape a string such that it can be used in a regular expression

      <static> _fnExtend(oOut, oExtender) → {object}

      Extend objects - very similar to jQuery.extend, but deep copy objects, and shallow copy arrays. The reason we need to do this, is that we don't want to deep copy array init values (such as aaSorting) since the dev wouldn't be able to override them, but we do want to deep copy arrays.

      <static> _fnExternApiFunc(sFunc) → {function}

      Create a wrapper function for exporting an internal functions to an external API.

      <static> _fnFeatureHtmlFilter(oSettings) → {node}

      Generate the node required for filtering text

      <static> _fnFeatureHtmlInfo(oSettings) → {node}

      Generate the node required for the info display

      <static> _fnFeatureHtmlLength(oSettings) → {node}

      Generate the node required for user display length changing

      <static> _fnFeatureHtmlPaginate(oSettings) → {node}

      Generate the node required for default pagination

      <static> _fnFeatureHtmlProcessing(oSettings) → {node}

      Generate the node required for the processing node

      <static> _fnFeatureHtmlTable(oSettings) → {node}

      Add any control elements for the table - specifically scrolling

      <static> _fnFilter(oSettings, sInput, iForce, bRegex, bSmart, bCaseInsensitive)

      Filter the data table based on user input and draw the table

      <static> _fnFilterColumn(oSettings, sInput, iColumn, bRegex, bSmart, bCaseInsensitive)

      Filter the table on a per-column basis

      <static> _fnFilterComplete(oSettings, oSearch, iForce)

      Filter the table using both the global filter and column based filtering

      <static> _fnFilterCreateSearch(sSearch, bRegex, bSmart, bCaseInsensitive) → {RegExp}

      Build a regular expression object suitable for searching a table

      <static> _fnFilterCustom(oSettings)

      Apply custom filtering functions

      <static> _fnGatherData(oSettings)

      Read in the data from the target table from the DOM

      <static> _fnGetCellData(oSettings, iRow, iCol, sSpecific) → {*}

      Get the data for a given cell from the internal cache, taking into account data mapping

      <static> _fnGetColumns(oSettings, sParam) → {array}

      Get an array of column indexes that match a given property

      <static> _fnGetDataMaster(oSettings)

      Return an array with the full table data

      <static> _fnGetMaxLenString(oSettings, iCol) → {string}

      Get the maximum strlen for each data column

      <static> _fnGetObjectDataFn(mSource) → {function}

      Return a function that can be used to get data from a source object, taking into account the ability to use nested objects as a source

      <static> _fnGetRowData(oSettings, iRow, sSpecific, aiColumns) → {array}

      Get an array of data for a given row from the internal data cache

      <static> _fnGetTdNodes(oSettings, iIndividualRow) → {array}

      Return an flat array with all TD nodes for the table, or row

      <static> _fnGetTrNodes(oSettings) → {array}

      Return an array with the TR nodes for the table

      <static> _fnGetUniqueThs(oSettings, nHeader, aLayout)

      Get an array of unique th elements, one for each column

      <static> _fnGetWidestNode(oSettings, iCol) → {node}

      Get the widest node

      <static> _fnInitComplete(oSettings, json)

      Draw the table for the first time, adding all required features

      <static> _fnInitialise(oSettings)

      Draw the table for the first time, adding all required features

      <static> _fnLanguageCompat(oSettings)

      Language compatibility - when certain options are given, and others aren't, we need to duplicate the values over, in order to provide backwards compatibility with older language files.

      <static> _fnLoadState(oSettings, oInit)

      Attempt to load a saved table state from a cookie

      <static> _fnLog(oSettings, iLevel, sMesg)

      Log an error message

      <static> _fnMap(oRet, oSrc, sName, sMappedName)

      See if a property is defined on one object, if so assign it to the other object

      <static> _fnNodeToColumnIndex(oSettings, iRow, n) → {int}

      Take a TD element and convert it into a column data index (not the visible index)

      <static> _fnNodeToDataIndex(oSettings, n) → {int}

      Take a TR element and convert it to an index in aoData

      <static> _fnPageChange(oSettings, mAction) → {bool}

      Alter the display settings to change the page

      <static> _fnProcessingDisplay(oSettings, bShow)

      Display or hide the processing indicator

      <static> _fnReadCookie(sName) → {string}

      Read an old cookie to get a cookie with an old table state

      <static> _fnReDraw(oSettings)

      Redraw the table - taking account of the various features which are enabled

      <static> _fnRender(oSettings, iRow, iCol) → {*}

      Call the developer defined fnRender function for a given cell (row/column) with the required parameters and return the result.

      <static> _fnReOrderIndex(oSettings)

      Figure out how to reorder a display list

      <static> _fnSaveState(oSettings)

      Save the state of a table in a cookie such that the page can be reloaded

      <static> _fnScrollBarWidth() → {int}

      Get the width of a scroll bar in this browser being used

      <static> _fnScrollDraw(o) → {node}

      Update the various tables for resizing. It's a bit of a pig this function, but basically the idea to: 1. Re-create the table inside the scrolling div 2. Take live measurements from the DOM 3. Apply the measurements 4. Clean up

      <static> _fnScrollingWidthAdjust(oSettings, n)

      Adjust a table's width to take account of scrolling

      <static> _fnServerParams(oSettings, array)

      Add Ajax parameters from plug-ins

      <static> _fnSetCellData(oSettings, iRow, iCol, val)

      Set the value for a specific cell, into the internal data cache

      <static> _fnSetObjectDataFn(mSource) → {function}

      Return a function that can be used to set data from a source object, taking into account the ability to use nested objects as a source

      <static> _fnSettingsFromNode(nTable) → {object}

      Return the settings object for a particular table

      <static> _fnSort(oSettings, bApplyClasses)

      Change the order of the table

      <static> _fnSortAttachListener(oSettings, nNode, iDataIndex, fnCallback)

      Attach a sort handler (click) to a node

      <static> _fnSortingClasses(oSettings)

      Set the sorting classes on the header, Note: it is safe to call this function when bSort and bSortClasses are false

      <static> _fnStringToCss(aArray1, aArray2) → {int}

      Append a CSS unit (only if required) to a string

      <static> _fnUpdateInfo(oSettings)

      Update the information elements in the display

      <static> _fnVisbleColumns(oSettings) → {int}

      Get the number of visible columns

      <static> _fnVisibleToColumnIndex(oSettings, iMatch) → {int}

      Covert the index of a visible column to the index in the data array (take account of hidden columns)

      Details

      Properties - static

      <static> _fnJsonString

      JSON stringify. If JSON.stringify it provided by the browser, json2.js or any other library, then we use that as it is fast, safe and accurate. If the function isn't available then we need to built it ourselves - the inspiration for this function comes from Craig Buckler ( http://www.sitepoint.com/javascript-json-serialization/ ). It is not perfect and absolutely should not be used as a replacement to json2.js - but it does do what we need, without requiring a dependency for DataTables.

      Methods - static

      <static> _fnAddColumn(oSettings, nTh)

      Add a column to the list used for the table with default values

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      nThnode

      The th element for this column

      <static> _fnAddData(oSettings, aData) → {int}

      Add a data array to the table, creating DOM node etc. This is the parallel to _fnGatherData, but for adding rows from a Javascript source, rather than a DOM source.

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      aDataarray

      data array to be added

      Returns:

      =0 if successful (index of new aoData entry), -1 if failed

      <static> _fnAddOptionsHtml(oSettings)

      Add the options to the page HTML for the table

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      <static> _fnAdjustColumnSizing(oSettings)

      Adjust the table column widths for new data. Note: you would probably want to do a redraw after calling this function!

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      <static> _fnAjaxParameters(oSettings) → {bool}

      Build up the parameters in an object needed for a server-side processing request

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      Returns:

      block the table drawing or not

      <static> _fnAjaxUpdate(oSettings) → {boolean}

      Update the table using an Ajax call

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      Returns:

      Block the table drawing or not

      <static> _fnAjaxUpdateDraw(oSettings, json)

      Data the data from the server (nuking the old) and redraw the table

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      jsonobject

      json data return from the server.

      json.sEchostring

      Tracking flag for DataTables to match requests

      json.iTotalRecordsint

      Number of records in the data set, not accounting for filtering

      json.iTotalDisplayRecordsint

      Number of records in the data set, accounting for filtering

      json.aaDataarray

      The data to display on this page

      json.sColumnsstring<optional>

      Column ordering (sName, comma separated)

      <static> _fnApplyColumnDefs(oSettings, aoColDefs, aoCols, fn)

      Take the column definitions and static columns arrays and calculate how they relate to column indexes. The callback function will then apply the definition found for a column to a suitable configuration object.

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      aoColDefsarray

      The aoColumnDefs array that is to be applied

      3
      aoColsarray

      The aoColumns array that defines columns individually

      4
      fnfunction

      Callback function - takes two parameters, the calculated column index and the definition for that column.

      <static> _fnApplyToChildren(fn, array, array)

      Apply a given function to the display child nodes of an element array (typically TD children of TR rows

      Parameters:
      Name Type Attributes Default Description
      1
      fnfunction

      Method to apply to the objects

      2
      array

      {nodes} an1 List of elements to look through for display children

      3
      array

      {nodes} an2 Another list (identical structure to the first) - optional

      <static> _fnBindAction(n, oData, fn)

      Bind an event handers to allow a click or return key to activate the callback. This is good for accessibility since a return on the keyboard will have the same effect as a click, if the element has focus.

      Parameters:
      Name Type Attributes Default Description
      1
      nelement

      Element to bind the action to

      2
      oDataobject

      Data object to pass to the triggered function

      3
      fnfunction

      Callback function for when the event is triggered

      <static> _fnBrowserDetect(oSettings)

      From some browsers (specifically IE6/7) we need special handling to work around browser bugs - this function is used to detect when these workarounds are needed.

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      <static> _fnBuildHead(oSettings)

      Create the HTML header for the table

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      <static> _fnBuildSearchArray(oSettings, iMaster)

      Create an array which can be quickly search through

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      iMasterint

      use the master data array - optional

      <static> _fnBuildSearchRow(oSettings, aData)

      Create a searchable string from a single data row

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      aDataarray

      Row data array to use for the data to search

      <static> _fnCalculateColumnWidths(oSettings)

      Calculate the width of columns for the table

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      <static> _fnCalculateEnd(oSettings)

      Recalculate the end point based on the start point

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      <static> _fnCallbackFire(oSettings, sStore, sTrigger, aArgs)

      Fire callback functions and trigger events. Note that the loop over the callback array store is done backwards! Further note that you do not want to fire off triggers in time sensitive applications (for example cell creation) as its slow.

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      sStorestring

      Name of the array storage for the callbacks in oSettings

      3
      sTriggerstring

      Name of the jQuery custom event to trigger. If null no trigger is fired

      4
      aArgsarray

      Array of arguments to pass to the callback function / trigger

      <static> _fnCallbackReg(oSettings, sStore, fn, sName)

      Register a callback function. Easily allows a callback function to be added to an array store of callback functions that can then all be called together.

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      sStorestring

      Name of the array storage for the callbacks in oSettings

      3
      fnfunction

      Function to be called back

      4
      sNamestring

      Identifying name for the callback (i.e. a label)

      <static> _fnClearTable(oSettings)

      Nuke the table

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      <static> _fnColumnIndexToVisible(iMatch, oSettings) → {int}

      Covert the index of an index in the data array and convert it to the visible column index (take account of hidden columns)

      Parameters:
      Name Type Attributes Default Description
      1
      iMatchint

      Column index to lookup

      2
      oSettingsobject

      dataTables settings object

      Returns:

      i the data index

      <static> _fnColumnOptions(oSettings, iCol, oOptions)

      Apply options for a column

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      iColint

      column index to consider

      3
      oOptionsobject

      object with sType, bVisible and bSearchable etc

      <static> _fnColumnOrdering(oSettings) → {string}

      Get the column ordering that DataTables expects

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      Returns:

      comma separated list of names

      <static> _fnConvertToWidth(sWidth, nParent) → {int}

      Convert a CSS unit width to pixels (e.g. 2em)

      Parameters:
      Name Type Attributes Default Description
      1
      sWidthstring

      width to be converted

      2
      nParentnode

      parent to get the with for (required for relative widths) - optional

      Returns:

      iWidth width in pixels

      <static> _fnCreateCookie(sName, sValue, iSecs, sBaseName, fnCallback)

      Create a new cookie with a value to store the state of a table

      Parameters:
      Name Type Attributes Default Description
      1
      sNamestring

      name of the cookie to create

      2
      sValuestring

      the value the cookie should take

      3
      iSecsint

      duration of the cookie

      4
      sBaseNamestring

      sName is made up of the base + file name - this is the base

      5
      fnCallbackfunction

      User definable function to modify the cookie

      <static> _fnCreateTr(oSettings, iRow)

      Create a new TR element (and it's TD children) for a row

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      iRowint

      Row to consider

      <static> _fnDataToSearch(sData, sType) → {string}

      Convert raw data into something that the user can search on

      Parameters:
      Name Type Attributes Default Description
      1
      sDatastring

      data to be modified

      2
      sTypestring

      data type

      Returns:

      search string

      <static> _fnDeleteIndex(a, iTarget)

      Take an array of integers (index array) and remove a target integer (value - not the key!)

      Parameters:
      Name Type Attributes Default Description
      1
      aarray

      Index array to target

      2
      iTargetint

      value to find

      <static> _fnDetectHeader(array, nThead)

      Use the DOM source to create up an array of header cells. The idea here is to create a layout grid (array) of rows x columns, which contains a reference to the cell that that point in the grid (regardless of col/rowspan), such that any column / row could be removed and the new grid constructed

      Parameters:
      Name Type Attributes Default Description
      1
      array

      {object} aLayout Array to store the calculated layout in

      2
      nTheadnode

      The header/footer element for the table

      <static> _fnDetectType(sData) → {string}

      Get the sort type based on an input string

      Parameters:
      Name Type Attributes Default Description
      1
      sDatastring

      data we wish to know the type of

      Returns:

      type (defaults to 'string' if no type can be detected)

      <static> _fnDraw(oSettings)

      Insert the required TR nodes into the table for display

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      <static> _fnDrawHead(oSettings, array, bIncludeHidden)

      Draw the header (or footer) element based on the column visibility states. The methodology here is to use the layout array from _fnDetectHeader, modified for the instantaneous column visibility, to construct the new layout. The grid is traversed over cell at a time in a rows x columns grid fashion, although each cell insert can cover multiple elements in the grid - which is tracks using the aApplied array. Cell inserts in the grid will only occur where there isn't already a cell in that position.

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      array

      {objects} aoSource Layout array from _fnDetectHeader

      3
      bIncludeHiddenbooleanOptionalfalse

      If true then include the hidden columns in the calc,

      <static> _fnEscapeRegex(sVal) → {string}

      scape a string such that it can be used in a regular expression

      Parameters:
      Name Type Attributes Default Description
      1
      sValstring

      string to escape

      Returns:

      escaped string

      <static> _fnExtend(oOut, oExtender) → {object}

      Extend objects - very similar to jQuery.extend, but deep copy objects, and shallow copy arrays. The reason we need to do this, is that we don't want to deep copy array init values (such as aaSorting) since the dev wouldn't be able to override them, but we do want to deep copy arrays.

      Parameters:
      Name Type Attributes Default Description
      1
      oOutobject

      Object to extend

      2
      oExtenderobject

      Object from which the properties will be applied to oOut

      Returns:

      oOut Reference, just for convenience - oOut === the return.

      <static> _fnExternApiFunc(sFunc) → {function}

      Create a wrapper function for exporting an internal functions to an external API.

      Parameters:
      Name Type Attributes Default Description
      1
      sFuncstring

      API function name

      Returns:

      wrapped function

      <static> _fnFeatureHtmlFilter(oSettings) → {node}

      Generate the node required for filtering text

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      Returns:

      Filter control element

      <static> _fnFeatureHtmlInfo(oSettings) → {node}

      Generate the node required for the info display

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      Returns:

      Information element

      <static> _fnFeatureHtmlLength(oSettings) → {node}

      Generate the node required for user display length changing

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      Returns:

      Display length feature node

      <static> _fnFeatureHtmlPaginate(oSettings) → {node}

      Generate the node required for default pagination

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      Returns:

      Pagination feature node

      <static> _fnFeatureHtmlProcessing(oSettings) → {node}

      Generate the node required for the processing node

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      Returns:

      Processing element

      <static> _fnFeatureHtmlTable(oSettings) → {node}

      Add any control elements for the table - specifically scrolling

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      Returns:

      Node to add to the DOM

      <static> _fnFilter(oSettings, sInput, iForce, bRegex, bSmart, bCaseInsensitive)

      Filter the data table based on user input and draw the table

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      sInputstring

      string to filter on

      3
      iForceint

      optional - force a research of the master array (1) or not (undefined or 0)

      4
      bRegexbool

      treat as a regular expression or not

      5
      bSmartbool

      perform smart filtering or not

      6
      bCaseInsensitivebool

      Do case insenstive matching or not

      <static> _fnFilterColumn(oSettings, sInput, iColumn, bRegex, bSmart, bCaseInsensitive)

      Filter the table on a per-column basis

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      sInputstring

      string to filter on

      3
      iColumnint

      column to filter

      4
      bRegexbool

      treat search string as a regular expression or not

      5
      bSmartbool

      use smart filtering or not

      6
      bCaseInsensitivebool

      Do case insenstive matching or not

      <static> _fnFilterComplete(oSettings, oSearch, iForce)

      Filter the table using both the global filter and column based filtering

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      oSearchobject

      search information

      3
      iForceintOptional

      force a research of the master array (1) or not (undefined or 0)

      <static> _fnFilterCreateSearch(sSearch, bRegex, bSmart, bCaseInsensitive) → {RegExp}

      Build a regular expression object suitable for searching a table

      Parameters:
      Name Type Attributes Default Description
      1
      sSearchstring

      string to search for

      2
      bRegexbool

      treat as a regular expression or not

      3
      bSmartbool

      perform smart filtering or not

      4
      bCaseInsensitivebool

      Do case insensitive matching or not

      Returns:

      constructed object

      <static> _fnFilterCustom(oSettings)

      Apply custom filtering functions

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      <static> _fnGatherData(oSettings)

      Read in the data from the target table from the DOM

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      <static> _fnGetCellData(oSettings, iRow, iCol, sSpecific) → {*}

      Get the data for a given cell from the internal cache, taking into account data mapping

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      iRowint

      aoData row id

      3
      iColint

      Column index

      4
      sSpecificstring

      data get type ('display', 'type' 'filter' 'sort')

      Returns:

      Cell data

      <static> _fnGetColumns(oSettings, sParam) → {array}

      Get an array of column indexes that match a given property

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      sParamstring

      Parameter in aoColumns to look for - typically bVisible or bSearchable

      Returns:

      Array of indexes with matched properties

      <static> _fnGetDataMaster(oSettings)

      Return an array with the full table data

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      Returns:

      array {array} aData Master data array

      <static> _fnGetMaxLenString(oSettings, iCol) → {string}

      Get the maximum strlen for each data column

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      iColint

      column of interest

      Returns:

      max string length for each column

      <static> _fnGetObjectDataFn(mSource) → {function}

      Return a function that can be used to get data from a source object, taking into account the ability to use nested objects as a source

      Parameters:
      Name Type Attributes Default Description
      1
      mSourcestring | int | function

      The data source for the object

      Returns:

      Data get function

      <static> _fnGetRowData(oSettings, iRow, sSpecific, aiColumns) → {array}

      Get an array of data for a given row from the internal data cache

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      iRowint

      aoData row id

      3
      sSpecificstring

      data get type ('type' 'filter' 'sort')

      4
      aiColumnsarray

      Array of column indexes to get data from

      Returns:

      Data array

      <static> _fnGetTdNodes(oSettings, iIndividualRow) → {array}

      Return an flat array with all TD nodes for the table, or row

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      iIndividualRowintOptional

      aoData index to get the nodes for - optional if not given then the return array will contain all nodes for the table

      Returns:

      TD array

      <static> _fnGetTrNodes(oSettings) → {array}

      Return an array with the TR nodes for the table

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      Returns:

      TR array

      <static> _fnGetUniqueThs(oSettings, nHeader, aLayout)

      Get an array of unique th elements, one for each column

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      nHeadernode

      automatically detect the layout from this node - optional

      3
      aLayoutarray

      thead/tfoot layout from _fnDetectHeader - optional

      Returns:

      array {node} aReturn list of unique th's

      <static> _fnGetWidestNode(oSettings, iCol) → {node}

      Get the widest node

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      iColint

      column of interest

      Returns:

      widest table node

      <static> _fnInitComplete(oSettings, json)

      Draw the table for the first time, adding all required features

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      jsonobjectOptional

      JSON from the server that completed the table, if using Ajax source with client-side processing (optional)

      <static> _fnInitialise(oSettings)

      Draw the table for the first time, adding all required features

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      <static> _fnLanguageCompat(oSettings)

      Language compatibility - when certain options are given, and others aren't, we need to duplicate the values over, in order to provide backwards compatibility with older language files.

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      <static> _fnLoadState(oSettings, oInit)

      Attempt to load a saved table state from a cookie

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      oInitobject

      DataTables init object so we can override settings

      <static> _fnLog(oSettings, iLevel, sMesg)

      Log an error message

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      iLevelint

      log error messages, or display them to the user

      3
      sMesgstring

      error message

      <static> _fnMap(oRet, oSrc, sName, sMappedName)

      See if a property is defined on one object, if so assign it to the other object

      Parameters:
      Name Type Attributes Default Description
      1
      oRetobject

      target object

      2
      oSrcobject

      source object

      3
      sNamestring

      property

      4
      sMappedNamestringOptional

      name to map too - optional, sName used if not given

      <static> _fnNodeToColumnIndex(oSettings, iRow, n) → {int}

      Take a TD element and convert it into a column data index (not the visible index)

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      iRowint

      The row number the TD/TH can be found in

      3
      nnode

      The TD/TH element to find

      Returns:

      index if the node is found, -1 if not

      <static> _fnNodeToDataIndex(oSettings, n) → {int}

      Take a TR element and convert it to an index in aoData

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      nnode

      the TR element to find

      Returns:

      index if the node is found, null if not

      <static> _fnPageChange(oSettings, mAction) → {bool}

      Alter the display settings to change the page

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      mActionstring | int

      Paging action to take: "first", "previous", "next" or "last" or page number to jump to (integer)

      Returns:

      true page has changed, false - no change (no effect) eg 'first' on page 1

      <static> _fnProcessingDisplay(oSettings, bShow)

      Display or hide the processing indicator

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      bShowbool

      Show the processing indicator (true) or not (false)

      <static> _fnReadCookie(sName) → {string}

      Read an old cookie to get a cookie with an old table state

      Parameters:
      Name Type Attributes Default Description
      1
      sNamestring

      name of the cookie to read

      Returns:

      contents of the cookie - or null if no cookie with that name found

      <static> _fnReDraw(oSettings)

      Redraw the table - taking account of the various features which are enabled

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      <static> _fnRender(oSettings, iRow, iCol) → {*}

      Call the developer defined fnRender function for a given cell (row/column) with the required parameters and return the result.

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      iRowint

      aoData index for the row

      3
      iColint

      aoColumns index for the column

      Returns:

      Return of the developer's fnRender function

      <static> _fnReOrderIndex(oSettings)

      Figure out how to reorder a display list

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      Returns:

      array {int} aiReturn index list for reordering

      <static> _fnSaveState(oSettings)

      Save the state of a table in a cookie such that the page can be reloaded

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      <static> _fnScrollBarWidth() → {int}

      Get the width of a scroll bar in this browser being used

      Returns:

      width in pixels

      <static> _fnScrollDraw(o) → {node}

      Update the various tables for resizing. It's a bit of a pig this function, but basically the idea to: 1. Re-create the table inside the scrolling div 2. Take live measurements from the DOM 3. Apply the measurements 4. Clean up

      Parameters:
      Name Type Attributes Default Description
      1
      oobject

      dataTables settings object

      Returns:

      Node to add to the DOM

      <static> _fnScrollingWidthAdjust(oSettings, n)

      Adjust a table's width to take account of scrolling

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      nnode

      table node

      <static> _fnServerParams(oSettings, array)

      Add Ajax parameters from plug-ins

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      array

      {objects} aoData name/value pairs to send to the server

      <static> _fnSetCellData(oSettings, iRow, iCol, val)

      Set the value for a specific cell, into the internal data cache

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      iRowint

      aoData row id

      3
      iColint

      Column index

      4
      val*

      Value to set

      <static> _fnSetObjectDataFn(mSource) → {function}

      Return a function that can be used to set data from a source object, taking into account the ability to use nested objects as a source

      Parameters:
      Name Type Attributes Default Description
      1
      mSourcestring | int | function

      The data source for the object

      Returns:

      Data set function

      <static> _fnSettingsFromNode(nTable) → {object}

      Return the settings object for a particular table

      Parameters:
      Name Type Attributes Default Description
      1
      nTablenode

      table we are using as a dataTable

      Returns:

      Settings object - or null if not found

      <static> _fnSort(oSettings, bApplyClasses)

      Change the order of the table

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      bApplyClassesbool

      optional - should we apply classes or not

      <static> _fnSortAttachListener(oSettings, nNode, iDataIndex, fnCallback)

      Attach a sort handler (click) to a node

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      nNodenode

      node to attach the handler to

      3
      iDataIndexint

      column sorting index

      4
      fnCallbackfunctionOptional

      callback function

      <static> _fnSortingClasses(oSettings)

      Set the sorting classes on the header, Note: it is safe to call this function when bSort and bSortClasses are false

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      <static> _fnStringToCss(aArray1, aArray2) → {int}

      Append a CSS unit (only if required) to a string

      Parameters:
      Name Type Attributes Default Description
      1
      aArray1array

      first array

      2
      aArray2array

      second array

      Returns:

      0 if match, 1 if length is different, 2 if no match

      <static> _fnUpdateInfo(oSettings)

      Update the information elements in the display

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      <static> _fnVisbleColumns(oSettings) → {int}

      Get the number of visible columns

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      Returns:

      i the number of visible columns

      <static> _fnVisibleToColumnIndex(oSettings, iMatch) → {int}

      Covert the index of a visible column to the index in the data array (take account of hidden columns)

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      dataTables settings object

      2
      iMatchint

      Visible column index to lookup

      Returns:

      i the data index

      assets/plugins/DataTables/docs/DataTable.defaults.oLanguage.oPaginate.html000064400000017626152510440400022616 0ustar00 Namespace: oPaginate - documentation

      Namespace: oPaginate

      Ancestry: DataTable » .defaults » .oLanguage. » oPaginate

      DataTables v1.9.4 documentation

      Navigation

      Hiding private elements (toggle)
      Showing extended elements (toggle)

      Pagination string used by DataTables for the two built-in pagination control types ("two_button" and "full_numbers")

      Summary

      Properties - static

      <static> sFirst :string

      Text to use when using the 'full_numbers' type of pagination for the button to take the user to the first page.

      <static> sLast :string

      Text to use when using the 'full_numbers' type of pagination for the button to take the user to the last page.

      <static> sNext :string

      Text to use for the 'next' pagination button (to take the user to the next page).

      <static> sPrevious :string

      Text to use for the 'previous' pagination button (to take the user to
      the previous page).

      Details

      Properties - static

      <static> sFirst :string

      Text to use when using the 'full_numbers' type of pagination for the button to take the user to the first page.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "oLanguage": {
               "oPaginate": {
                 "sFirst": "First page"
               }
             }
           } );
         } );
      <static> sLast :string

      Text to use when using the 'full_numbers' type of pagination for the button to take the user to the last page.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "oLanguage": {
               "oPaginate": {
                 "sLast": "Last page"
               }
             }
           } );
         } );
      <static> sNext :string

      Text to use for the 'next' pagination button (to take the user to the next page).

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "oLanguage": {
               "oPaginate": {
                 "sNext": "Next page"
               }
             }
           } );
         } );
      <static> sPrevious :string

      Text to use for the 'previous' pagination button (to take the user to
      the previous page).

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "oLanguage": {
               "oPaginate": {
                 "sPrevious": "Previous page"
               }
             }
           } );
         } );
      assets/plugins/DataTables/docs/DataTable.models.oSettings.oFeatures.html000064400000041007152510440400022363 0ustar00 Namespace: oFeatures - documentation

      Namespace: oFeatures

      Ancestry: DataTable » .models » .oSettings. » oFeatures

      DataTables v1.9.4 documentation

      Navigation

      Hiding private elements (toggle)
      Showing extended elements (toggle)

      Primary features of DataTables and their enablement state.

      Summary

      Properties - static

      <static> bAutoWidth :boolean

      Flag to say if DataTables should automatically try to calculate the optimum table and columns widths (true) or not (false). Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bDeferRender :boolean

      Delay the creation of TR and TD elements until they are actually needed by a driven page draw. This can give a significant speed increase for Ajax source and Javascript source data, but makes no difference at all fro DOM and server-side processing tables. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bFilter :boolean

      Enable filtering on the table or not. Note that if this is disabled then there is no filtering at all on the table, including fnFilter. To just remove the filtering input use sDom and remove the 'f' option. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bInfo :boolean

      Table information element (the 'Showing x of y records' div) enable flag. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bLengthChange :boolean

      Present a user control allowing the end user to change the page size when pagination is enabled. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bPaginate :boolean

      Pagination enabled or not. Note that if this is disabled then length changing must also be disabled. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bProcessing :boolean

      Processing indicator enable flag whenever DataTables is enacting a user request - typically an Ajax request for server-side processing. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bServerSide :boolean

      Server-side processing enabled flag - when enabled DataTables will get all data from the server for every draw - there is no filtering, sorting or paging done on the client-side. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bSort :boolean

      Sorting enablement flag. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bSortClasses :boolean

      Apply a class to the columns which are being sorted to provide a visual highlight or not. This can slow things down when enabled since there is a lot of DOM interaction. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bStateSave :boolean

      State saving enablement flag. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      Details

      Properties - static

      <static> bAutoWidth :boolean

      Flag to say if DataTables should automatically try to calculate the optimum table and columns widths (true) or not (false). Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bDeferRender :boolean

      Delay the creation of TR and TD elements until they are actually needed by a driven page draw. This can give a significant speed increase for Ajax source and Javascript source data, but makes no difference at all fro DOM and server-side processing tables. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bFilter :boolean

      Enable filtering on the table or not. Note that if this is disabled then there is no filtering at all on the table, including fnFilter. To just remove the filtering input use sDom and remove the 'f' option. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bInfo :boolean

      Table information element (the 'Showing x of y records' div) enable flag. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bLengthChange :boolean

      Present a user control allowing the end user to change the page size when pagination is enabled. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bPaginate :boolean

      Pagination enabled or not. Note that if this is disabled then length changing must also be disabled. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bProcessing :boolean

      Processing indicator enable flag whenever DataTables is enacting a user request - typically an Ajax request for server-side processing. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bServerSide :boolean

      Server-side processing enabled flag - when enabled DataTables will get all data from the server for every draw - there is no filtering, sorting or paging done on the client-side. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bSort :boolean

      Sorting enablement flag. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bSortClasses :boolean

      Apply a class to the columns which are being sorted to provide a visual highlight or not. This can slow things down when enabled since there is a lot of DOM interaction. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bStateSave :boolean

      State saving enablement flag. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      assets/plugins/DataTables/docs/DataTable.ext.html000064400000006156152510440400015774 0ustar00 Namespace: ext - documentation

      Namespace: ext

      Ancestry: DataTable. » ext

      DataTables v1.9.4 documentation

      Navigation

      • Overview
      • Summary
        Classes (0)Namespaces (0)
        Properties (0)Static properties (0)
        Methods (0)Static methods (0)
        Events (0)
      • Details
        Properties (0)Static properties (0)
        Methods (0)Static methods (0)
        Events (0)
      Hiding private elements (toggle)
      Showing extended elements (toggle)

      Extension object for DataTables that is used to provide all extension options.

      Note that the DataTable.ext object is available through jQuery.fn.dataTable.ext where it may be accessed and manipulated. It is also aliased to jQuery.fn.dataTableExt for historic reasons.

      Extends

      assets/plugins/DataTables/docs/DataTable.models.oSettings.oBrowser.html000064400000010422152510440400022225 0ustar00 Namespace: oBrowser - documentation

      Namespace: oBrowser

      Ancestry: DataTable » .models » .oSettings. » oBrowser

      DataTables v1.9.4 documentation

      Navigation

      Hiding private elements (toggle)
      Showing extended elements (toggle)

      Browser support parameters

      Summary

      Properties - static

      <static> bScrollOversize :boolean

      Indicate if the browser incorrectly calculates width:100% inside a scrolling element (IE6/7)

      Details

      Properties - static

      <static> bScrollOversize :boolean

      Indicate if the browser incorrectly calculates width:100% inside a scrolling element (IE6/7)

      assets/plugins/DataTables/docs/DataTable.models.html000064400000012173152510440400016453 0ustar00 Namespace: models - documentation

      Namespace: models

      Ancestry: DataTable. » models

      DataTables v1.9.4 documentation

      Navigation

      • Overview
      • Summary
        Classes (0)Namespaces (5)
        Properties (0)Static properties (0)
        Methods (0)Static methods (0)
        Events (0)
      • Details
        Properties (0)Static properties (0)
        Methods (0)Static methods (0)
        Events (0)
      Hiding private elements (toggle)
      Showing extended elements (toggle)

      Object models container, for the various models that DataTables has available to it. These models define the objects that are used to hold the active state and configuration of the table.

      Summary

      Namespaces

      ext

      DataTables extension options and plug-ins. This namespace acts as a collection "area" for plug-ins that can be used to extend the default DataTables behaviour - indeed many of the build in methods use this method to provide their own capabilities (sorting methods for example). [...]

      oColumn

      Template object for the column information object in DataTables. This object is held in the settings aoColumns array and contains all the information that DataTables needs about each individual column. [...]

      oRow

      Template object for the way in which DataTables holds information about each individual row. This is the object format used for the settings aoData array.

      oSearch

      Template object for the way in which DataTables holds information about search information for the global filter and individual column filters.

      oSettings

      DataTables settings object - this holds all the information needed for a given table, including configuration, data and current application of the table options. DataTables does not have a single instance for each DataTable with the settings attached to that instance, but rather instances of the DataTable "class" are created on-the-fly as needed (typically by a $().dataTable() call) and the settings object is then applied to that instance. [...]

      assets/plugins/DataTables/docs/DataTable.models.oSettings.oPreviousSearch.html000064400000006350152510440400023551 0ustar00 Namespace: oPreviousSearch - documentation

      Namespace: oPreviousSearch

      Ancestry: DataTable » .models » .oSettings. » oPreviousSearch

      DataTables v1.9.4 documentation

      Navigation

      • Overview
      • Summary
        Classes (0)Namespaces (0)
        Properties (0)Static properties (0)
        Methods (0)Static methods (0)
        Events (0)
      • Details
        Properties (0)Static properties (0)
        Methods (0)Static methods (0)
        Events (0)
      Hiding private elements (toggle)
      Showing extended elements (toggle)

      Store the applied global search information in case we want to force a research or compare the old search to a new one. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      Extends

      assets/plugins/DataTables/docs/DataTable.models.oSettings.html000064400000212042152510440400020426 0ustar00 Namespace: oSettings - documentation

      Namespace: oSettings

      Ancestry: DataTable » .models. » oSettings

      DataTables v1.9.4 documentation

      Navigation

      Hiding private elements (toggle)
      Showing extended elements (toggle)

      DataTables settings object - this holds all the information needed for a given table, including configuration, data and current application of the table options. DataTables does not have a single instance for each DataTable with the settings attached to that instance, but rather instances of the DataTable "class" are created on-the-fly as needed (typically by a $().dataTable() call) and the settings object is then applied to that instance.

      Note that this object is related to DataTable.defaults but this one is the internal data store for DataTables's cache of columns. It should NOT be manipulated outside of DataTables. Any configuration should be done through the initialisation options.

      Summary

      Namespaces

      oBrowser

      Browser support parameters

      oFeatures

      Primary features of DataTables and their enablement state.

      oLanguage

      Language information for the table.

      oPreviousSearch

      Store the applied global search information in case we want to force a research or compare the old search to a new one. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      oScroll

      Scrolling settings for a table.

      Properties - static

      <static> aanFeatures :array

      Array referencing the nodes which are used for the features. The parameters of this object match what is allowed by sDom - i.e.

      • 'l' - Length changing
      • 'f' - Filtering input
      • 't' - The table!
      • 'i' - Information
      • 'p' - Pagination
      • 'r' - pRocessing

      <static> aaSorting :array

      Sorting that is applied to the table. Note that the inner arrays are used in the following manner: [...]

      <static> aaSortingFixed :array|null

      Sorting that is always applied to the table (i.e. prefixed in front of aaSorting). Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> aiDisplay :array

      Array of indexes which are in the current display (after filtering etc)

      <static> aiDisplayMaster :array

      Array of indexes for display - no filtering

      <static> aLengthMenu :array

      List of options that can be used for the user selectable length menu. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> aoColumns :array

      Store information about each column that is in use

      <static> aoData :array

      Store data information - see DataTable.models.oRow for detailed information.

      <static> aoDestroyCallback :array

      Destroy callback functions - for plug-ins to attach themselves to the destroy so they can clean up markup and events.

      <static> aoDrawCallback :array

      Array of callback functions for draw callback functions

      <static> aoFooter :array

      Store information about the table's footer

      <static> aoFooterCallback :array

      Callback function for the footer on each draw.

      <static> aoHeader :array

      Store information about the table's header

      <static> aoHeaderCallback :array

      Callback functions for the header on each draw.

      <static> aoInitComplete :array

      Callback functions for when the table has been initialised.

      <static> aoOpenRows :array

      Information about open rows. Each object in the array has the parameters 'nTr' and 'nParent'

      <static> aoPreDrawCallback :array

      Callback functions for just before the table is redrawn. A return of false will be used to cancel the draw.

      <static> aoPreSearchCols :array

      Store the applied search for each column - see DataTable.models.oSearch for the format that is used for the filtering information for each column.

      <static> aoRowCallback :array

      Callback functions array for every time a row is inserted (i.e. on a draw).

      <static> aoRowCreatedCallback :array

      Array of callback functions for row created function

      <static> aoServerParams :array

      Functions which are called prior to sending an Ajax request so extra parameters can easily be sent to the server

      <static> aoStateLoad :array

      Array of callback functions for state loading. Each array element is an object with the following parameters:

      • function:fn - function to call. Takes two parameters, oSettings and the object stored. May return false to cancel state loading
      • string:sName - name of callback

      <static> aoStateLoaded :array

      Callbacks for operating on the settings object once the saved state has been loaded

      <static> aoStateLoadParams :array

      Callbacks for modifying the settings that have been stored for state saving prior to using the stored values to restore the state.

      <static> aoStateSave :array

      Array of callback functions for state saving. Each array element is an object with the following parameters:

      • function:fn - function to call. Takes two parameters, oSettings and the JSON string to save that has been thus far created. Returns a JSON string to be inserted into a json object (i.e. '"param": [ 0, 1, 2]')
      • string:sName - name of callback

      <static> aoStateSaveParams :array

      Callbacks for modifying the settings to be stored for state saving, prior to saving state.

      <static> asDataSearch :array

      Search data array for regular expression searching

      <static> asDestroyStripes :array

      If restoring a table - we should restore its striping classes as well

      <static> asStripeClasses :array

      Classes to use for the striping of a table. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bAjaxDataGet :boolean

      Note if draw should be blocked while getting data

      <static> bDeferLoading :boolean

      Indicate if when using server-side processing the loading of data should be deferred until the second draw. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bDrawing :boolean

      Indicate if a redraw is being done - useful for Ajax

      <static> bFiltered :boolean

      Flag attached to the settings object so you can check in the draw callback if filtering has been done in the draw. Deprecated in favour of events.

      <static> bInitialised :boolean

      Indicate if all required information has been read in

      <static> bJUI :boolean

      Flag to indicate if jQuery UI marking and classes should be used. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bSortCellsTop :boolean

      Indicate that if multiple rows are in the header and there is more than one unique cell per column, if the top one (true) or bottom one (false) should be used for sorting / title by DataTables. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bSorted :boolean

      Flag attached to the settings object so you can check in the draw callback if sorting has been done in the draw. Deprecated in favour of events.

      <static> fnCookieCallback :function

      Callback function for cookie creation. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> fnFormatNumber :function

      Format numbers for display. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> fnServerData :function

      Function to get the server-side data. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> iCookieDuration :int

      The cookie duration (for bStateSave) in seconds. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> iDraw :int

      Counter for the draws that the table does. Also used as a tracker for server-side processing

      <static> iDrawError :int

      Draw index (iDraw) of the last error when parsing the returned data

      <static> iTabIndex

      tabindex attribute value that is added to DataTables control elements, allowing keyboard navigation of the table and its controls.

      <static> jqXHR :object

      The last jQuery XHR object that was used for server-side data gathering. This can be used for working with the XHR information in one of the callbacks

      <static> nScrollFoot

      DIV container for the footer scrolling table if scrolling

      <static> nScrollHead

      DIV container for the footer scrolling table if scrolling

      <static> nTable :node

      The TABLE node for the main table

      <static> nTableWrapper :node

      Cache the wrapper node (contains all DataTables controlled elements)

      <static> nTBody :node

      Permanent ref to the tbody element

      <static> nTFoot :node

      Permanent ref to the tfoot element - if it exists

      <static> nTHead :node

      Permanent ref to the thead element

      <static> oClasses :object

      The classes to use for the table

      <static> oInit :object

      Initialisation object that is used for the table

      <static> oInstance :object

      The DataTables object for this table

      <static> oLoadedState :object

      State that was loaded from the cookie. Useful for back reference

      <static> sAjaxDataProp :string

      Property from a given object from which to read the table data from. This can be an empty string (when not server-side processing), in which case it is assumed an an array is given directly. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> sAjaxSource :string

      Source url for AJAX data for the table. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> sCookiePrefix :string

      The cookie name prefix. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> sDestroyWidth :int

      If restoring a table - we should restore its width

      <static> sDom :string

      Dictate the positioning of DataTables' control elements - see DataTable.model.oInit.sDom. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> sInstance :string

      Unique identifier for each instance of the DataTables object. If there is an ID on the table node, then it takes that value, otherwise an incrementing internal counter is used.

      <static> sPaginationType :string

      Which type of pagination should be used. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> sServerMethod :string

      Send the XHR HTTP method - GET or POST (could be PUT or DELETE if required). Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> sTableId :string

      Cache the table ID for quick access

      <static> _iDisplayLength :int

      Paging display length

      <static> _iDisplayStart :int

      Paging start point - aiDisplay index

      Methods - static

      <static> fnDisplayEnd()

      Set the display end point - aiDisplay index

      <static> fnRecordsDisplay()

      Get the number of records in the current record set, after filtering

      <static> fnRecordsTotal()

      Get the number of records in the current record set, before filtering

      Details

      Properties - static

      <static> aanFeatures :array

      Array referencing the nodes which are used for the features. The parameters of this object match what is allowed by sDom - i.e.

      • 'l' - Length changing
      • 'f' - Filtering input
      • 't' - The table!
      • 'i' - Information
      • 'p' - Pagination
      • 'r' - pRocessing

      <static> aaSorting :array

      Sorting that is applied to the table. Note that the inner arrays are used in the following manner:

      • Index 0 - column number
      • Index 1 - current sorting direction
      • Index 2 - index of asSorting for this column

      Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> aaSortingFixed :array|null

      Sorting that is always applied to the table (i.e. prefixed in front of aaSorting). Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> aiDisplay :array

      Array of indexes which are in the current display (after filtering etc)

      <static> aiDisplayMaster :array

      Array of indexes for display - no filtering

      <static> aLengthMenu :array

      List of options that can be used for the user selectable length menu. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> aoColumns :array

      Store information about each column that is in use

      <static> aoData :array

      Store data information - see DataTable.models.oRow for detailed information.

      <static> aoDestroyCallback :array

      Destroy callback functions - for plug-ins to attach themselves to the destroy so they can clean up markup and events.

      <static> aoDrawCallback :array

      Array of callback functions for draw callback functions

      <static> aoFooter :array

      Store information about the table's footer

      <static> aoFooterCallback :array

      Callback function for the footer on each draw.

      <static> aoHeader :array

      Store information about the table's header

      <static> aoHeaderCallback :array

      Callback functions for the header on each draw.

      <static> aoInitComplete :array

      Callback functions for when the table has been initialised.

      <static> aoOpenRows :array

      Information about open rows. Each object in the array has the parameters 'nTr' and 'nParent'

      <static> aoPreDrawCallback :array

      Callback functions for just before the table is redrawn. A return of false will be used to cancel the draw.

      <static> aoPreSearchCols :array

      Store the applied search for each column - see DataTable.models.oSearch for the format that is used for the filtering information for each column.

      <static> aoRowCallback :array

      Callback functions array for every time a row is inserted (i.e. on a draw).

      <static> aoRowCreatedCallback :array

      Array of callback functions for row created function

      <static> aoServerParams :array

      Functions which are called prior to sending an Ajax request so extra parameters can easily be sent to the server

      <static> aoStateLoad :array

      Array of callback functions for state loading. Each array element is an object with the following parameters:

      • function:fn - function to call. Takes two parameters, oSettings and the object stored. May return false to cancel state loading
      • string:sName - name of callback

      <static> aoStateLoaded :array

      Callbacks for operating on the settings object once the saved state has been loaded

      <static> aoStateLoadParams :array

      Callbacks for modifying the settings that have been stored for state saving prior to using the stored values to restore the state.

      <static> aoStateSave :array

      Array of callback functions for state saving. Each array element is an object with the following parameters:

      • function:fn - function to call. Takes two parameters, oSettings and the JSON string to save that has been thus far created. Returns a JSON string to be inserted into a json object (i.e. '"param": [ 0, 1, 2]')
      • string:sName - name of callback

      <static> aoStateSaveParams :array

      Callbacks for modifying the settings to be stored for state saving, prior to saving state.

      <static> asDataSearch :array

      Search data array for regular expression searching

      <static> asDestroyStripes :array

      If restoring a table - we should restore its striping classes as well

      <static> asStripeClasses :array

      Classes to use for the striping of a table. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bAjaxDataGet :boolean

      Note if draw should be blocked while getting data

      <static> bDeferLoading :boolean

      Indicate if when using server-side processing the loading of data should be deferred until the second draw. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bDrawing :boolean

      Indicate if a redraw is being done - useful for Ajax

      <static> bFiltered :boolean

      Flag attached to the settings object so you can check in the draw callback if filtering has been done in the draw. Deprecated in favour of events.

      Deprecated
      Yes
      <static> bInitialised :boolean

      Indicate if all required information has been read in

      <static> bJUI :boolean

      Flag to indicate if jQuery UI marking and classes should be used. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bSortCellsTop :boolean

      Indicate that if multiple rows are in the header and there is more than one unique cell per column, if the top one (true) or bottom one (false) should be used for sorting / title by DataTables. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bSorted :boolean

      Flag attached to the settings object so you can check in the draw callback if sorting has been done in the draw. Deprecated in favour of events.

      Deprecated
      Yes
      <static> fnCookieCallback :function

      Callback function for cookie creation. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> fnFormatNumber :function

      Format numbers for display. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> fnServerData :function

      Function to get the server-side data. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> iCookieDuration :int

      The cookie duration (for bStateSave) in seconds. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> iDraw :int

      Counter for the draws that the table does. Also used as a tracker for server-side processing

      <static> iDrawError :int

      Draw index (iDraw) of the last error when parsing the returned data

      <static> iTabIndex

      tabindex attribute value that is added to DataTables control elements, allowing keyboard navigation of the table and its controls.

      <static> jqXHR :object

      The last jQuery XHR object that was used for server-side data gathering. This can be used for working with the XHR information in one of the callbacks

      <static> nScrollFoot

      DIV container for the footer scrolling table if scrolling

      <static> nScrollHead

      DIV container for the footer scrolling table if scrolling

      <static> nTable :node

      The TABLE node for the main table

      <static> nTableWrapper :node

      Cache the wrapper node (contains all DataTables controlled elements)

      <static> nTBody :node

      Permanent ref to the tbody element

      <static> nTFoot :node

      Permanent ref to the tfoot element - if it exists

      <static> nTHead :node

      Permanent ref to the thead element

      <static> oClasses :object

      The classes to use for the table

      <static> oInit :object

      Initialisation object that is used for the table

      <static> oInstance :object

      The DataTables object for this table

      <static> oLoadedState :object

      State that was loaded from the cookie. Useful for back reference

      <static> sAjaxDataProp :string

      Property from a given object from which to read the table data from. This can be an empty string (when not server-side processing), in which case it is assumed an an array is given directly. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> sAjaxSource :string

      Source url for AJAX data for the table. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> sCookiePrefix :string

      The cookie name prefix. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> sDestroyWidth :int

      If restoring a table - we should restore its width

      <static> sDom :string

      Dictate the positioning of DataTables' control elements - see DataTable.model.oInit.sDom. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> sInstance :string

      Unique identifier for each instance of the DataTables object. If there is an ID on the table node, then it takes that value, otherwise an incrementing internal counter is used.

      <static> sPaginationType :string

      Which type of pagination should be used. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> sServerMethod :string

      Send the XHR HTTP method - GET or POST (could be PUT or DELETE if required). Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> sTableId :string

      Cache the table ID for quick access

      <static> _iDisplayLength :int

      Paging display length

      <static> _iDisplayStart :int

      Paging start point - aiDisplay index

      Methods - static

      <static> fnDisplayEnd()

      Set the display end point - aiDisplay index

      <static> fnRecordsDisplay()

      Get the number of records in the current record set, after filtering

      <static> fnRecordsTotal()

      Get the number of records in the current record set, before filtering

      assets/plugins/DataTables/docs/media/css/shThemeDataTables.css000064400000006266152510440400020373 0ustar00/** * SyntaxHighlighter * http://alexgorbatchev.com/SyntaxHighlighter * * SyntaxHighlighter is donationware. If you are using it, please donate. * http://alexgorbatchev.com/SyntaxHighlighter/donate.html * * @version * 3.0.83 (July 02 2010) * * @copyright * Copyright (C) 2004-2010 Alex Gorbatchev. * * @license * Dual licensed under the MIT and GPL licenses. */ .syntaxhighlighter { background-color: white !important; font-size: 14px !important; overflow: visible !important; } .syntaxhighlighter .line.alt1 { background-color: white !important; } .syntaxhighlighter .line.alt2 { background-color: #F8F8F8 !important; } .syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 { background-color: #e0e0e0 !important; } .syntaxhighlighter .line.highlighted.number { color: black !important; } .syntaxhighlighter table caption { color: black !important; } .syntaxhighlighter .gutter { } .syntaxhighlighter .gutter div { color: #5C5C5C !important; width: 20px !important; } .syntaxhighlighter .gutter .line.alt1, .syntaxhighlighter .gutter .line.alt2 { background-color: white !important; } .odd .syntaxhighlighter .gutter .line.alt1, .odd .syntaxhighlighter .gutter .line.alt2 { background-color: #F2F2F2 !important; } .syntaxhighlighter .gutter .line { border-right: 3px solid #4E6CA3 !important; } .syntaxhighlighter .gutter .line.highlighted { background-color: #4E6CA3 !important; color: white !important; } .syntaxhighlighter.printing .line .content { border: none !important; } .syntaxhighlighter.collapsed { overflow: visible !important; } .syntaxhighlighter.collapsed .toolbar { color: blue !important; background: white !important; border: 1px solid #4E6CA3 !important; } .syntaxhighlighter.collapsed .toolbar a { color: blue !important; } .syntaxhighlighter.collapsed .toolbar a:hover { color: red !important; } .syntaxhighlighter .toolbar { color: white !important; background: #4E6CA3 !important; border: none !important; } .syntaxhighlighter .toolbar a { color: white !important; } .syntaxhighlighter .toolbar a:hover { color: black !important; } .syntaxhighlighter .plain, .syntaxhighlighter .plain a { color: black !important; } .syntaxhighlighter .comments, .syntaxhighlighter .comments a { color: #008200 !important; } .syntaxhighlighter .string, .syntaxhighlighter .string a { color: blue !important; } .syntaxhighlighter .keyword { color: #006699 !important; } .syntaxhighlighter .preprocessor { color: gray !important; } .syntaxhighlighter .variable { color: #aa7700 !important; } .syntaxhighlighter .value { color: #009900 !important; } .syntaxhighlighter .functions { color: #ff1493 !important; } .syntaxhighlighter .constants { color: #0066cc !important; } .syntaxhighlighter .script { font-weight: bold !important; color: #006699 !important; background-color: none !important; } .syntaxhighlighter .color1, .syntaxhighlighter .color1 a { color: gray !important; } .syntaxhighlighter .color2, .syntaxhighlighter .color2 a { color: #ff1493 !important; } .syntaxhighlighter .color3, .syntaxhighlighter .color3 a { color: red !important; } .syntaxhighlighter .keyword { font-weight: bold !important; } assets/plugins/DataTables/docs/media/css/shCore.css000064400000014107152510440400016265 0ustar00/** * SyntaxHighlighter * http://alexgorbatchev.com/SyntaxHighlighter * * SyntaxHighlighter is donationware. If you are using it, please donate. * http://alexgorbatchev.com/SyntaxHighlighter/donate.html * * @version * 3.0.83 (July 02 2010) * * @copyright * Copyright (C) 2004-2010 Alex Gorbatchev. * * @license * Dual licensed under the MIT and GPL licenses. */ .syntaxhighlighter a, .syntaxhighlighter div, .syntaxhighlighter code, .syntaxhighlighter table, .syntaxhighlighter table td, .syntaxhighlighter table tr, .syntaxhighlighter table tbody, .syntaxhighlighter table thead, .syntaxhighlighter table caption, .syntaxhighlighter textarea { -moz-border-radius: 0 0 0 0 !important; -webkit-border-radius: 0 0 0 0 !important; background: none !important; border: 0 !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0 !important; outline: 0 !important; overflow: visible !important; padding: 0 !important; position: static !important; right: auto !important; text-align: left !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: "Consolas","Monaco","Bitstream Vera Sans Mono","Courier New",Courier,monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; min-height: inherit !important; min-height: auto !important; } .syntaxhighlighter { width: 100% !important; margin: 1em 0 1em 0 !important; position: relative !important; overflow: auto !important; font-size: 1em !important; } .syntaxhighlighter.source { overflow: hidden !important; } .syntaxhighlighter .bold { font-weight: bold !important; } .syntaxhighlighter .italic { font-style: italic !important; } .syntaxhighlighter .line { white-space: pre !important; } .syntaxhighlighter table { width: 100% !important; } .syntaxhighlighter table caption { text-align: left !important; padding: .5em 0 0.5em 1em !important; } .syntaxhighlighter table td.code { width: 100% !important; } .syntaxhighlighter table td.code .container { position: relative !important; } .syntaxhighlighter table td.code .container textarea { box-sizing: border-box !important; position: absolute !important; left: 0 !important; top: 0 !important; width: 100% !important; height: 100% !important; border: none !important; background: white !important; padding-left: 1em !important; overflow: hidden !important; white-space: pre !important; } .syntaxhighlighter table td.gutter .line { text-align: right !important; padding: 2px 0.5em 2px 1em !important; } .syntaxhighlighter table td.code .line { padding: 2px 1em !important; } .syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line { padding-left: 0em !important; } .syntaxhighlighter.show { display: block !important; } .syntaxhighlighter.collapsed table { display: none !important; } .syntaxhighlighter.collapsed .toolbar { padding: 0.1em 0.8em 0em 0.8em !important; font-size: 1em !important; position: static !important; width: auto !important; height: auto !important; } .syntaxhighlighter.collapsed .toolbar span { display: inline !important; margin-right: 1em !important; } .syntaxhighlighter.collapsed .toolbar span a { padding: 0 !important; display: none !important; } .syntaxhighlighter.collapsed .toolbar span a.expandSource { display: inline !important; } .syntaxhighlighter .toolbar { position: absolute !important; right: 1px !important; top: 1px !important; width: 11px !important; height: 11px !important; font-size: 10px !important; z-index: 10 !important; } .syntaxhighlighter .toolbar span.title { display: inline !important; } .syntaxhighlighter .toolbar a { display: block !important; text-align: center !important; text-decoration: none !important; padding-top: 1px !important; } .syntaxhighlighter .toolbar a.expandSource { display: none !important; } .syntaxhighlighter.ie { font-size: .9em !important; padding: 1px 0 1px 0 !important; } .syntaxhighlighter.ie .toolbar { line-height: 8px !important; } .syntaxhighlighter.ie .toolbar a { padding-top: 0px !important; } .syntaxhighlighter.printing .line.alt1 .content, .syntaxhighlighter.printing .line.alt2 .content, .syntaxhighlighter.printing .line.highlighted .number, .syntaxhighlighter.printing .line.highlighted.alt1 .content, .syntaxhighlighter.printing .line.highlighted.alt2 .content { background: none !important; } .syntaxhighlighter.printing .line .number { color: #bbbbbb !important; } .syntaxhighlighter.printing .line .content { color: black !important; } .syntaxhighlighter.printing .toolbar { display: none !important; } .syntaxhighlighter.printing a { text-decoration: none !important; } .syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a { color: black !important; } .syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a { color: #008200 !important; } .syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a { color: blue !important; } .syntaxhighlighter.printing .keyword { color: #006699 !important; font-weight: bold !important; } .syntaxhighlighter.printing .preprocessor { color: gray !important; } .syntaxhighlighter.printing .variable { color: #aa7700 !important; } .syntaxhighlighter.printing .value { color: #009900 !important; } .syntaxhighlighter.printing .functions { color: #ff1493 !important; } .syntaxhighlighter.printing .constants { color: #0066cc !important; } .syntaxhighlighter.printing .script { font-weight: bold !important; } .syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a { color: gray !important; } .syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a { color: #ff1493 !important; } .syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a { color: red !important; } .syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a { color: black !important; } assets/plugins/DataTables/docs/media/css/doc.css000064400000011652152510440400015611 0ustar00/* Copyright (c) 2006, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: http://developer.yahoo.net/yui/license.txt version: 0.12.0 */ body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td{margin:0;padding:0;} table{border-collapse:collapse;border-spacing:0;} fieldset,img{border:0;} address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;} ol,ul {list-style:none;} caption,th {text-align:left;} h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;} q:before,q:after{content:'';} abbr,acronym {border:0;} html, body { margin: 0; padding: 0; width: 100%; font: 14px/1.45em "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; color: #111; } div.fw_container { width: 980px; padding-top: 2em; margin: 0 auto; } div.fw_header { position: relative; } div.fw_content { padding-top: 2em; } div.fw_footer { padding-top: 4em; font-size: 75%; text-align: center; } .type-attr .type-signature { background-color: #ccc; color: white; border-radius: 3px; display: inline-block; padding: 0 3px; font-size: 0.9em; } .type-attr { float: right; color: #999; } .type-name { font-weight: bold; } .type-sig { color: #999; } .type-param { color: #D32929; } .type-return { color: #FF8080; } .type-brace { color: #111; } .example-code { margin-left: 30px; } .example-code td.code { border-top: 1px solid #4E6CA3 !important; } .type-augmented { position: absolute; left: 8px; top: 0; } dt, dd { padding: 0.4em 10px; } dt { padding-bottom: 0 !important; } dd { position: relative; padding-top: 0 !important; padding-left: 3em; } dt.even, dd.even { background-color: white; } dt.odd, dd.odd { background-color: #F2F2F2; } div.doc_overview dd, div.doc_overview dt { padding-left: 0 !important; } .right_border div { width: 20px; padding: 2px 0.5em 2px 1em; text-align: right; } .right_border { border-right: 3px solid #4E6CA3; } .bottom_border { border-bottom: 1px solid #4E6CA3; } a { text-decoration: none; color: #4E6CA3; } a:hover { text-decoration: underline; cursor: pointer; *cursor: hand; } div.fw_content ul { list-style-image: url('../images/arrow.png'); padding: 0 0 0 2em; } /* h2 { font-size: 1.4em; margin-top: 2em; border-bottom: 3px solid #829ac6; padding-left: 5px; } h3 { font-size: 1.2em; margin-top: 1em; border-bottom: 1px solid #A4B5D5; padding-left: 5px; } */ h1 { font-size: 2em; } h2 { font-size: 1.6em; padding-top: 5px; } h2.ancestors { font-size: 14px; margin: 0; } h3 { font-size: 1.3em; padding-top: 5px; margin-bottom: 5px; } h5 { padding-top: 6px; font-weight: bold; font-size: 0.9em; border-bottom: 1px solid #cad4e6; margin-bottom: 1em; } div.doc_summary, div.doc_details { margin-top: 2em; clear: both; } div.doc_group { margin-top: 1em; border-top: 1px solid #A4B5D5; border-left: 1px solid #A4B5D5; padding-left: 10px; } div.extended { margin-left: 30px; } table.params { margin-left: 30px; width: 97%; } table.params th, table.params td { padding: 3px; } tr.odd { background-color: white; } tr.even { background-color: #F8F8F8; } th.name, td.name { padding-left: 13px; } td.number { background-color: white; color: #5C5C5C; } dd.odd td.number { background-color: #F2F2F2; } p { margin: 1em 0; } p:first-child { margin-top: 0; } p:last-child { margin-bottom: 0; } p.returns { margin-left: 5%; } div.page-info { position: absolute; top: 0; right: 0; } .private { display: none; } code { font-family: Menlo, Monaco, Consolas, "Courier New", monospace; padding: 2px 4px !important; white-space: pre; font-size: 0.9em; color: #D14; background-color: #F7F7F9; border: 1px solid #E1E1E8; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } pre { background-color: #f8f8f8; border: 1px solid #ccc; border-radius: 3px; padding: 6px 10px; } pre>code { background-color: transparent; border: none; color: #111; } strong { font-weight: bold; } em { font-style: italic; } ol { list-style-type: decimal; list-style-position: outside; padding-left: 30px; } div.fw_nav { position: fixed; top: 25px; right: 30px; width: 250px; border: 1px solid #A4B5D5; background-color: white; padding: 10px; z-index: 1001; font-size: 12px; overflow: hidden; } div.fw_nav h2 { margin: -10px 0 10px -10px; width: 250px; padding: 5px 10px; background-color: #A4B5D5; font-size: 12px; cursor: pointer; *cursor: hand; } div.fw_nav ul>li>div { padding: 0 0 0 1em; } div.nav_blocker { float: right; } div.fw_nav td { color: #999; } div.fw_nav li { margin-bottom: 5px; } div.fw_nav li>a { font-weight: bold; } .css_clear { clear: both; height: 0; line-height: 0; visibility: hidden; } .css_right { text-align: right; } .css_center { text-align: center; } .css_spacing { margin-top: 1.5em; } .css_small { font-size: 75%; line-height: 1.45em; } .css_vsmall { font-size: 65%; line-height: 1.45em; } assets/plugins/DataTables/docs/media/license/Syntax Highlighter000064400000002045152510440400020610 0ustar00Copyright (c) 2003, 2004 Jim Weirich Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. assets/plugins/DataTables/docs/media/js/jquery.js000064400000647407152510440400016050 0ustar00/*! * jQuery JavaScript Library v1.5.1 * http://jquery.com/ * * Copyright 2011, John Resig * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * Includes Sizzle.js * http://sizzlejs.com/ * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * * Date: Wed Feb 23 13:55:29 2011 -0500 */ (function( window, undefined ) { // Use the correct document accordingly with window argument (sandbox) var document = window.document; var jQuery = (function() { // Define a local copy of jQuery var jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' return new jQuery.fn.init( selector, context, rootjQuery ); }, // Map over jQuery in case of overwrite _jQuery = window.jQuery, // Map over the $ in case of overwrite _$ = window.$, // A central reference to the root jQuery(document) rootjQuery, // A simple way to check for HTML strings or ID strings // (both of which we optimize for) quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/, // Check if a string has a non-whitespace character in it rnotwhite = /\S/, // Used for trimming whitespace trimLeft = /^\s+/, trimRight = /\s+$/, // Check for digits rdigit = /\d/, // Match a standalone tag rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, // JSON RegExp rvalidchars = /^[\],:{}\s]*$/, rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, // Useragent RegExp rwebkit = /(webkit)[ \/]([\w.]+)/, ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, rmsie = /(msie) ([\w.]+)/, rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, // Keep a UserAgent string for use with jQuery.browser userAgent = navigator.userAgent, // For matching the engine and version of the browser browserMatch, // Has the ready events already been bound? readyBound = false, // The deferred used on DOM ready readyList, // Promise methods promiseMethods = "then done fail isResolved isRejected promise".split( " " ), // The ready event handler DOMContentLoaded, // Save a reference to some core methods toString = Object.prototype.toString, hasOwn = Object.prototype.hasOwnProperty, push = Array.prototype.push, slice = Array.prototype.slice, trim = String.prototype.trim, indexOf = Array.prototype.indexOf, // [[Class]] -> type pairs class2type = {}; jQuery.fn = jQuery.prototype = { constructor: jQuery, init: function( selector, context, rootjQuery ) { var match, elem, ret, doc; // Handle $(""), $(null), or $(undefined) if ( !selector ) { return this; } // Handle $(DOMElement) if ( selector.nodeType ) { this.context = this[0] = selector; this.length = 1; return this; } // The body element only exists once, optimize finding it if ( selector === "body" && !context && document.body ) { this.context = document; this[0] = document.body; this.selector = "body"; this.length = 1; return this; } // Handle HTML strings if ( typeof selector === "string" ) { // Are we dealing with HTML string or an ID? match = quickExpr.exec( selector ); // Verify a match, and that no context was specified for #id if ( match && (match[1] || !context) ) { // HANDLE: $(html) -> $(array) if ( match[1] ) { context = context instanceof jQuery ? context[0] : context; doc = (context ? context.ownerDocument || context : document); // If a single string is passed in and it's a single tag // just do a createElement and skip the rest ret = rsingleTag.exec( selector ); if ( ret ) { if ( jQuery.isPlainObject( context ) ) { selector = [ document.createElement( ret[1] ) ]; jQuery.fn.attr.call( selector, context, true ); } else { selector = [ doc.createElement( ret[1] ) ]; } } else { ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes; } return jQuery.merge( this, selector ); // HANDLE: $("#id") } else { elem = document.getElementById( match[2] ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 if ( elem && elem.parentNode ) { // Handle the case where IE and Opera return items // by name instead of ID if ( elem.id !== match[2] ) { return rootjQuery.find( selector ); } // Otherwise, we inject the element directly into the jQuery object this.length = 1; this[0] = elem; } this.context = document; this.selector = selector; return this; } // HANDLE: $(expr, $(...)) } else if ( !context || context.jquery ) { return (context || rootjQuery).find( selector ); // HANDLE: $(expr, context) // (which is just equivalent to: $(context).find(expr) } else { return this.constructor( context ).find( selector ); } // HANDLE: $(function) // Shortcut for document ready } else if ( jQuery.isFunction( selector ) ) { return rootjQuery.ready( selector ); } if (selector.selector !== undefined) { this.selector = selector.selector; this.context = selector.context; } return jQuery.makeArray( selector, this ); }, // Start with an empty selector selector: "", // The current version of jQuery being used jquery: "1.5.1", // The default length of a jQuery object is 0 length: 0, // The number of elements contained in the matched element set size: function() { return this.length; }, toArray: function() { return slice.call( this, 0 ); }, // Get the Nth element in the matched element set OR // Get the whole matched element set as a clean array get: function( num ) { return num == null ? // Return a 'clean' array this.toArray() : // Return just the object ( num < 0 ? this[ this.length + num ] : this[ num ] ); }, // Take an array of elements and push it onto the stack // (returning the new matched element set) pushStack: function( elems, name, selector ) { // Build a new jQuery matched element set var ret = this.constructor(); if ( jQuery.isArray( elems ) ) { push.apply( ret, elems ); } else { jQuery.merge( ret, elems ); } // Add the old object onto the stack (as a reference) ret.prevObject = this; ret.context = this.context; if ( name === "find" ) { ret.selector = this.selector + (this.selector ? " " : "") + selector; } else if ( name ) { ret.selector = this.selector + "." + name + "(" + selector + ")"; } // Return the newly-formed element set return ret; }, // Execute a callback for every element in the matched set. // (You can seed the arguments with an array of args, but this is // only used internally.) each: function( callback, args ) { return jQuery.each( this, callback, args ); }, ready: function( fn ) { // Attach the listeners jQuery.bindReady(); // Add the callback readyList.done( fn ); return this; }, eq: function( i ) { return i === -1 ? this.slice( i ) : this.slice( i, +i + 1 ); }, first: function() { return this.eq( 0 ); }, last: function() { return this.eq( -1 ); }, slice: function() { return this.pushStack( slice.apply( this, arguments ), "slice", slice.call(arguments).join(",") ); }, map: function( callback ) { return this.pushStack( jQuery.map(this, function( elem, i ) { return callback.call( elem, i, elem ); })); }, end: function() { return this.prevObject || this.constructor(null); }, // For internal use only. // Behaves like an Array's method, not like a jQuery method. push: push, sort: [].sort, splice: [].splice }; // Give the init function the jQuery prototype for later instantiation jQuery.fn.init.prototype = jQuery.fn; jQuery.extend = jQuery.fn.extend = function() { var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false; // Handle a deep copy situation if ( typeof target === "boolean" ) { deep = target; target = arguments[1] || {}; // skip the boolean and the target i = 2; } // Handle case when target is a string or something (possible in deep copy) if ( typeof target !== "object" && !jQuery.isFunction(target) ) { target = {}; } // extend jQuery itself if only one argument is passed if ( length === i ) { target = this; --i; } for ( ; i < length; i++ ) { // Only deal with non-null/undefined values if ( (options = arguments[ i ]) != null ) { // Extend the base object for ( name in options ) { src = target[ name ]; copy = options[ name ]; // Prevent never-ending loop if ( target === copy ) { continue; } // Recurse if we're merging plain objects or arrays if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { if ( copyIsArray ) { copyIsArray = false; clone = src && jQuery.isArray(src) ? src : []; } else { clone = src && jQuery.isPlainObject(src) ? src : {}; } // Never move original objects, clone them target[ name ] = jQuery.extend( deep, clone, copy ); // Don't bring in undefined values } else if ( copy !== undefined ) { target[ name ] = copy; } } } } // Return the modified object return target; }; jQuery.extend({ noConflict: function( deep ) { window.$ = _$; if ( deep ) { window.jQuery = _jQuery; } return jQuery; }, // Is the DOM ready to be used? Set to true once it occurs. isReady: false, // A counter to track how many items to wait for before // the ready event fires. See #6781 readyWait: 1, // Handle when the DOM is ready ready: function( wait ) { // A third-party is pushing the ready event forwards if ( wait === true ) { jQuery.readyWait--; } // Make sure that the DOM is not already loaded if ( !jQuery.readyWait || (wait !== true && !jQuery.isReady) ) { // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). if ( !document.body ) { return setTimeout( jQuery.ready, 1 ); } // Remember that the DOM is ready jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be if ( wait !== true && --jQuery.readyWait > 0 ) { return; } // If there are functions bound, to execute readyList.resolveWith( document, [ jQuery ] ); // Trigger any bound ready events if ( jQuery.fn.trigger ) { jQuery( document ).trigger( "ready" ).unbind( "ready" ); } } }, bindReady: function() { if ( readyBound ) { return; } readyBound = true; // Catch cases where $(document).ready() is called after the // browser event has already occurred. if ( document.readyState === "complete" ) { // Handle it asynchronously to allow scripts the opportunity to delay ready return setTimeout( jQuery.ready, 1 ); } // Mozilla, Opera and webkit nightlies currently support this event if ( document.addEventListener ) { // Use the handy event callback document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); // A fallback to window.onload, that will always work window.addEventListener( "load", jQuery.ready, false ); // If IE event model is used } else if ( document.attachEvent ) { // ensure firing before onload, // maybe late but safe also for iframes document.attachEvent("onreadystatechange", DOMContentLoaded); // A fallback to window.onload, that will always work window.attachEvent( "onload", jQuery.ready ); // If IE and not a frame // continually check to see if the document is ready var toplevel = false; try { toplevel = window.frameElement == null; } catch(e) {} if ( document.documentElement.doScroll && toplevel ) { doScrollCheck(); } } }, // See test/unit/core.js for details concerning isFunction. // Since version 1.3, DOM methods and functions like alert // aren't supported. They return false on IE (#2968). isFunction: function( obj ) { return jQuery.type(obj) === "function"; }, isArray: Array.isArray || function( obj ) { return jQuery.type(obj) === "array"; }, // A crude way of determining if an object is a window isWindow: function( obj ) { return obj && typeof obj === "object" && "setInterval" in obj; }, isNaN: function( obj ) { return obj == null || !rdigit.test( obj ) || isNaN( obj ); }, type: function( obj ) { return obj == null ? String( obj ) : class2type[ toString.call(obj) ] || "object"; }, isPlainObject: function( obj ) { // Must be an Object. // Because of IE, we also have to check the presence of the constructor property. // Make sure that DOM nodes and window objects don't pass through, as well if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { return false; } // Not own constructor property must be Object if ( obj.constructor && !hasOwn.call(obj, "constructor") && !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { return false; } // Own properties are enumerated firstly, so to speed up, // if last one is own, then all properties are own. var key; for ( key in obj ) {} return key === undefined || hasOwn.call( obj, key ); }, isEmptyObject: function( obj ) { for ( var name in obj ) { return false; } return true; }, error: function( msg ) { throw msg; }, parseJSON: function( data ) { if ( typeof data !== "string" || !data ) { return null; } // Make sure leading/trailing whitespace is removed (IE can't handle it) data = jQuery.trim( data ); // Make sure the incoming data is actual JSON // Logic borrowed from http://json.org/json2.js if ( rvalidchars.test(data.replace(rvalidescape, "@") .replace(rvalidtokens, "]") .replace(rvalidbraces, "")) ) { // Try to use the native JSON parser first return window.JSON && window.JSON.parse ? window.JSON.parse( data ) : (new Function("return " + data))(); } else { jQuery.error( "Invalid JSON: " + data ); } }, // Cross-browser xml parsing // (xml & tmp used internally) parseXML: function( data , xml , tmp ) { if ( window.DOMParser ) { // Standard tmp = new DOMParser(); xml = tmp.parseFromString( data , "text/xml" ); } else { // IE xml = new ActiveXObject( "Microsoft.XMLDOM" ); xml.async = "false"; xml.loadXML( data ); } tmp = xml.documentElement; if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) { jQuery.error( "Invalid XML: " + data ); } return xml; }, noop: function() {}, // Evalulates a script in a global context globalEval: function( data ) { if ( data && rnotwhite.test(data) ) { // Inspired by code by Andrea Giammarchi // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html var head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement, script = document.createElement( "script" ); if ( jQuery.support.scriptEval() ) { script.appendChild( document.createTextNode( data ) ); } else { script.text = data; } // Use insertBefore instead of appendChild to circumvent an IE6 bug. // This arises when a base node is used (#2709). head.insertBefore( script, head.firstChild ); head.removeChild( script ); } }, nodeName: function( elem, name ) { return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); }, // args is for internal usage only each: function( object, callback, args ) { var name, i = 0, length = object.length, isObj = length === undefined || jQuery.isFunction(object); if ( args ) { if ( isObj ) { for ( name in object ) { if ( callback.apply( object[ name ], args ) === false ) { break; } } } else { for ( ; i < length; ) { if ( callback.apply( object[ i++ ], args ) === false ) { break; } } } // A special, fast, case for the most common use of each } else { if ( isObj ) { for ( name in object ) { if ( callback.call( object[ name ], name, object[ name ] ) === false ) { break; } } } else { for ( var value = object[0]; i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {} } } return object; }, // Use native String.trim function wherever possible trim: trim ? function( text ) { return text == null ? "" : trim.call( text ); } : // Otherwise use our own trimming functionality function( text ) { return text == null ? "" : text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); }, // results is for internal usage only makeArray: function( array, results ) { var ret = results || []; if ( array != null ) { // The window, strings (and functions) also have 'length' // The extra typeof function check is to prevent crashes // in Safari 2 (See: #3039) // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 var type = jQuery.type(array); if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { push.call( ret, array ); } else { jQuery.merge( ret, array ); } } return ret; }, inArray: function( elem, array ) { if ( array.indexOf ) { return array.indexOf( elem ); } for ( var i = 0, length = array.length; i < length; i++ ) { if ( array[ i ] === elem ) { return i; } } return -1; }, merge: function( first, second ) { var i = first.length, j = 0; if ( typeof second.length === "number" ) { for ( var l = second.length; j < l; j++ ) { first[ i++ ] = second[ j ]; } } else { while ( second[j] !== undefined ) { first[ i++ ] = second[ j++ ]; } } first.length = i; return first; }, grep: function( elems, callback, inv ) { var ret = [], retVal; inv = !!inv; // Go through the array, only saving the items // that pass the validator function for ( var i = 0, length = elems.length; i < length; i++ ) { retVal = !!callback( elems[ i ], i ); if ( inv !== retVal ) { ret.push( elems[ i ] ); } } return ret; }, // arg is for internal usage only map: function( elems, callback, arg ) { var ret = [], value; // Go through the array, translating each of the items to their // new value (or values). for ( var i = 0, length = elems.length; i < length; i++ ) { value = callback( elems[ i ], i, arg ); if ( value != null ) { ret[ ret.length ] = value; } } // Flatten any nested arrays return ret.concat.apply( [], ret ); }, // A global GUID counter for objects guid: 1, proxy: function( fn, proxy, thisObject ) { if ( arguments.length === 2 ) { if ( typeof proxy === "string" ) { thisObject = fn; fn = thisObject[ proxy ]; proxy = undefined; } else if ( proxy && !jQuery.isFunction( proxy ) ) { thisObject = proxy; proxy = undefined; } } if ( !proxy && fn ) { proxy = function() { return fn.apply( thisObject || this, arguments ); }; } // Set the guid of unique handler to the same of original handler, so it can be removed if ( fn ) { proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; } // So proxy can be declared as an argument return proxy; }, // Mutifunctional method to get and set values to a collection // The value/s can be optionally by executed if its a function access: function( elems, key, value, exec, fn, pass ) { var length = elems.length; // Setting many attributes if ( typeof key === "object" ) { for ( var k in key ) { jQuery.access( elems, k, key[k], exec, fn, value ); } return elems; } // Setting one attribute if ( value !== undefined ) { // Optionally, function values get executed if exec is true exec = !pass && exec && jQuery.isFunction(value); for ( var i = 0; i < length; i++ ) { fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); } return elems; } // Getting an attribute return length ? fn( elems[0], key ) : undefined; }, now: function() { return (new Date()).getTime(); }, // Create a simple deferred (one callbacks list) _Deferred: function() { var // callbacks list callbacks = [], // stored [ context , args ] fired, // to avoid firing when already doing so firing, // flag to know if the deferred has been cancelled cancelled, // the deferred itself deferred = { // done( f1, f2, ...) done: function() { if ( !cancelled ) { var args = arguments, i, length, elem, type, _fired; if ( fired ) { _fired = fired; fired = 0; } for ( i = 0, length = args.length; i < length; i++ ) { elem = args[ i ]; type = jQuery.type( elem ); if ( type === "array" ) { deferred.done.apply( deferred, elem ); } else if ( type === "function" ) { callbacks.push( elem ); } } if ( _fired ) { deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] ); } } return this; }, // resolve with given context and args resolveWith: function( context, args ) { if ( !cancelled && !fired && !firing ) { firing = 1; try { while( callbacks[ 0 ] ) { callbacks.shift().apply( context, args ); } } // We have to add a catch block for // IE prior to 8 or else the finally // block will never get executed catch (e) { throw e; } finally { fired = [ context, args ]; firing = 0; } } return this; }, // resolve with this as context and given arguments resolve: function() { deferred.resolveWith( jQuery.isFunction( this.promise ) ? this.promise() : this, arguments ); return this; }, // Has this deferred been resolved? isResolved: function() { return !!( firing || fired ); }, // Cancel cancel: function() { cancelled = 1; callbacks = []; return this; } }; return deferred; }, // Full fledged deferred (two callbacks list) Deferred: function( func ) { var deferred = jQuery._Deferred(), failDeferred = jQuery._Deferred(), promise; // Add errorDeferred methods, then and promise jQuery.extend( deferred, { then: function( doneCallbacks, failCallbacks ) { deferred.done( doneCallbacks ).fail( failCallbacks ); return this; }, fail: failDeferred.done, rejectWith: failDeferred.resolveWith, reject: failDeferred.resolve, isRejected: failDeferred.isResolved, // Get a promise for this deferred // If obj is provided, the promise aspect is added to the object promise: function( obj ) { if ( obj == null ) { if ( promise ) { return promise; } promise = obj = {}; } var i = promiseMethods.length; while( i-- ) { obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ]; } return obj; } } ); // Make sure only one callback list will be used deferred.done( failDeferred.cancel ).fail( deferred.cancel ); // Unexpose cancel delete deferred.cancel; // Call given func if any if ( func ) { func.call( deferred, deferred ); } return deferred; }, // Deferred helper when: function( object ) { var lastIndex = arguments.length, deferred = lastIndex <= 1 && object && jQuery.isFunction( object.promise ) ? object : jQuery.Deferred(), promise = deferred.promise(); if ( lastIndex > 1 ) { var array = slice.call( arguments, 0 ), count = lastIndex, iCallback = function( index ) { return function( value ) { array[ index ] = arguments.length > 1 ? slice.call( arguments, 0 ) : value; if ( !( --count ) ) { deferred.resolveWith( promise, array ); } }; }; while( ( lastIndex-- ) ) { object = array[ lastIndex ]; if ( object && jQuery.isFunction( object.promise ) ) { object.promise().then( iCallback(lastIndex), deferred.reject ); } else { --count; } } if ( !count ) { deferred.resolveWith( promise, array ); } } else if ( deferred !== object ) { deferred.resolve( object ); } return promise; }, // Use of jQuery.browser is frowned upon. // More details: http://docs.jquery.com/Utilities/jQuery.browser uaMatch: function( ua ) { ua = ua.toLowerCase(); var match = rwebkit.exec( ua ) || ropera.exec( ua ) || rmsie.exec( ua ) || ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || []; return { browser: match[1] || "", version: match[2] || "0" }; }, sub: function() { function jQuerySubclass( selector, context ) { return new jQuerySubclass.fn.init( selector, context ); } jQuery.extend( true, jQuerySubclass, this ); jQuerySubclass.superclass = this; jQuerySubclass.fn = jQuerySubclass.prototype = this(); jQuerySubclass.fn.constructor = jQuerySubclass; jQuerySubclass.subclass = this.subclass; jQuerySubclass.fn.init = function init( selector, context ) { if ( context && context instanceof jQuery && !(context instanceof jQuerySubclass) ) { context = jQuerySubclass(context); } return jQuery.fn.init.call( this, selector, context, rootjQuerySubclass ); }; jQuerySubclass.fn.init.prototype = jQuerySubclass.fn; var rootjQuerySubclass = jQuerySubclass(document); return jQuerySubclass; }, browser: {} }); // Create readyList deferred readyList = jQuery._Deferred(); // Populate the class2type map jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); }); browserMatch = jQuery.uaMatch( userAgent ); if ( browserMatch.browser ) { jQuery.browser[ browserMatch.browser ] = true; jQuery.browser.version = browserMatch.version; } // Deprecated, use jQuery.browser.webkit instead if ( jQuery.browser.webkit ) { jQuery.browser.safari = true; } if ( indexOf ) { jQuery.inArray = function( elem, array ) { return indexOf.call( array, elem ); }; } // IE doesn't match non-breaking spaces with \s if ( rnotwhite.test( "\xA0" ) ) { trimLeft = /^[\s\xA0]+/; trimRight = /[\s\xA0]+$/; } // All jQuery objects should point back to these rootjQuery = jQuery(document); // Cleanup functions for the document ready method if ( document.addEventListener ) { DOMContentLoaded = function() { document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); jQuery.ready(); }; } else if ( document.attachEvent ) { DOMContentLoaded = function() { // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). if ( document.readyState === "complete" ) { document.detachEvent( "onreadystatechange", DOMContentLoaded ); jQuery.ready(); } }; } // The DOM ready check for Internet Explorer function doScrollCheck() { if ( jQuery.isReady ) { return; } try { // If IE is used, use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ document.documentElement.doScroll("left"); } catch(e) { setTimeout( doScrollCheck, 1 ); return; } // and execute any waiting functions jQuery.ready(); } // Expose jQuery to the global object return jQuery; })(); (function() { jQuery.support = {}; var div = document.createElement("div"); div.style.display = "none"; div.innerHTML = "
      a"; var all = div.getElementsByTagName("*"), a = div.getElementsByTagName("a")[0], select = document.createElement("select"), opt = select.appendChild( document.createElement("option") ), input = div.getElementsByTagName("input")[0]; // Can't get basic test support if ( !all || !all.length || !a ) { return; } jQuery.support = { // IE strips leading whitespace when .innerHTML is used leadingWhitespace: div.firstChild.nodeType === 3, // Make sure that tbody elements aren't automatically inserted // IE will insert them into empty tables tbody: !div.getElementsByTagName("tbody").length, // Make sure that link elements get serialized correctly by innerHTML // This requires a wrapper element in IE htmlSerialize: !!div.getElementsByTagName("link").length, // Get the style information from getAttribute // (IE uses .cssText insted) style: /red/.test( a.getAttribute("style") ), // Make sure that URLs aren't manipulated // (IE normalizes it by default) hrefNormalized: a.getAttribute("href") === "/a", // Make sure that element opacity exists // (IE uses filter instead) // Use a regex to work around a WebKit issue. See #5145 opacity: /^0.55$/.test( a.style.opacity ), // Verify style float existence // (IE uses styleFloat instead of cssFloat) cssFloat: !!a.style.cssFloat, // Make sure that if no value is specified for a checkbox // that it defaults to "on". // (WebKit defaults to "" instead) checkOn: input.value === "on", // Make sure that a selected-by-default option has a working selected property. // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) optSelected: opt.selected, // Will be defined later deleteExpando: true, optDisabled: false, checkClone: false, noCloneEvent: true, noCloneChecked: true, boxModel: null, inlineBlockNeedsLayout: false, shrinkWrapBlocks: false, reliableHiddenOffsets: true }; input.checked = true; jQuery.support.noCloneChecked = input.cloneNode( true ).checked; // Make sure that the options inside disabled selects aren't marked as disabled // (WebKit marks them as diabled) select.disabled = true; jQuery.support.optDisabled = !opt.disabled; var _scriptEval = null; jQuery.support.scriptEval = function() { if ( _scriptEval === null ) { var root = document.documentElement, script = document.createElement("script"), id = "script" + jQuery.now(); try { script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); } catch(e) {} root.insertBefore( script, root.firstChild ); // Make sure that the execution of code works by injecting a script // tag with appendChild/createTextNode // (IE doesn't support this, fails, and uses .text instead) if ( window[ id ] ) { _scriptEval = true; delete window[ id ]; } else { _scriptEval = false; } root.removeChild( script ); // release memory in IE root = script = id = null; } return _scriptEval; }; // Test to see if it's possible to delete an expando from an element // Fails in Internet Explorer try { delete div.test; } catch(e) { jQuery.support.deleteExpando = false; } if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { div.attachEvent("onclick", function click() { // Cloning a node shouldn't copy over any // bound event handlers (IE does this) jQuery.support.noCloneEvent = false; div.detachEvent("onclick", click); }); div.cloneNode(true).fireEvent("onclick"); } div = document.createElement("div"); div.innerHTML = ""; var fragment = document.createDocumentFragment(); fragment.appendChild( div.firstChild ); // WebKit doesn't clone checked state correctly in fragments jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked; // Figure out if the W3C box model works as expected // document.body must exist before we can do this jQuery(function() { var div = document.createElement("div"), body = document.getElementsByTagName("body")[0]; // Frameset documents with no body should not run this code if ( !body ) { return; } div.style.width = div.style.paddingLeft = "1px"; body.appendChild( div ); jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; if ( "zoom" in div.style ) { // Check if natively block-level elements act like inline-block // elements when setting their display to 'inline' and giving // them layout // (IE < 8 does this) div.style.display = "inline"; div.style.zoom = 1; jQuery.support.inlineBlockNeedsLayout = div.offsetWidth === 2; // Check if elements with layout shrink-wrap their children // (IE 6 does this) div.style.display = ""; div.innerHTML = "
      "; jQuery.support.shrinkWrapBlocks = div.offsetWidth !== 2; } div.innerHTML = "
      t
      "; var tds = div.getElementsByTagName("td"); // Check if table cells still have offsetWidth/Height when they are set // to display:none and there are still other visible table cells in a // table row; if so, offsetWidth/Height are not reliable for use when // determining if an element has been hidden directly using // display:none (it is still safe to use offsets if a parent element is // hidden; don safety goggles and see bug #4512 for more information). // (only IE 8 fails this test) jQuery.support.reliableHiddenOffsets = tds[0].offsetHeight === 0; tds[0].style.display = ""; tds[1].style.display = "none"; // Check if empty table cells still have offsetWidth/Height // (IE < 8 fail this test) jQuery.support.reliableHiddenOffsets = jQuery.support.reliableHiddenOffsets && tds[0].offsetHeight === 0; div.innerHTML = ""; body.removeChild( div ).style.display = "none"; div = tds = null; }); // Technique from Juriy Zaytsev // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ var eventSupported = function( eventName ) { var el = document.createElement("div"); eventName = "on" + eventName; // We only care about the case where non-standard event systems // are used, namely in IE. Short-circuiting here helps us to // avoid an eval call (in setAttribute) which can cause CSP // to go haywire. See: https://developer.mozilla.org/en/Security/CSP if ( !el.attachEvent ) { return true; } var isSupported = (eventName in el); if ( !isSupported ) { el.setAttribute(eventName, "return;"); isSupported = typeof el[eventName] === "function"; } el = null; return isSupported; }; jQuery.support.submitBubbles = eventSupported("submit"); jQuery.support.changeBubbles = eventSupported("change"); // release memory in IE div = all = a = null; })(); var rbrace = /^(?:\{.*\}|\[.*\])$/; jQuery.extend({ cache: {}, // Please use with caution uuid: 0, // Unique for each copy of jQuery on the page // Non-digits removed to match rinlinejQuery expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), // The following elements throw uncatchable exceptions if you // attempt to add expando properties to them. noData: { "embed": true, // Ban all objects except for Flash (which handle expandos) "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", "applet": true }, hasData: function( elem ) { elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; return !!elem && !isEmptyDataObject( elem ); }, data: function( elem, name, data, pvt /* Internal Use Only */ ) { if ( !jQuery.acceptData( elem ) ) { return; } var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache, // We have to handle DOM nodes and JS objects differently because IE6-7 // can't GC object references properly across the DOM-JS boundary isNode = elem.nodeType, // Only DOM nodes need the global jQuery cache; JS object data is // attached directly to the object so GC can occur automatically cache = isNode ? jQuery.cache : elem, // Only defining an ID for JS objects if its cache already exists allows // the code to shortcut on the same path as a DOM node with no cache id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando; // Avoid doing any more work than we need to when trying to get data on an // object that has no data at all if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) { return; } if ( !id ) { // Only DOM nodes need a new unique ID for each element since their data // ends up in the global cache if ( isNode ) { elem[ jQuery.expando ] = id = ++jQuery.uuid; } else { id = jQuery.expando; } } if ( !cache[ id ] ) { cache[ id ] = {}; // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery // metadata on plain JS objects when the object is serialized using // JSON.stringify if ( !isNode ) { cache[ id ].toJSON = jQuery.noop; } } // An object can be passed to jQuery.data instead of a key/value pair; this gets // shallow copied over onto the existing cache if ( typeof name === "object" || typeof name === "function" ) { if ( pvt ) { cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name); } else { cache[ id ] = jQuery.extend(cache[ id ], name); } } thisCache = cache[ id ]; // Internal jQuery data is stored in a separate object inside the object's data // cache in order to avoid key collisions between internal data and user-defined // data if ( pvt ) { if ( !thisCache[ internalKey ] ) { thisCache[ internalKey ] = {}; } thisCache = thisCache[ internalKey ]; } if ( data !== undefined ) { thisCache[ name ] = data; } // TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should // not attempt to inspect the internal events object using jQuery.data, as this // internal data object is undocumented and subject to change. if ( name === "events" && !thisCache[name] ) { return thisCache[ internalKey ] && thisCache[ internalKey ].events; } return getByName ? thisCache[ name ] : thisCache; }, removeData: function( elem, name, pvt /* Internal Use Only */ ) { if ( !jQuery.acceptData( elem ) ) { return; } var internalKey = jQuery.expando, isNode = elem.nodeType, // See jQuery.data for more information cache = isNode ? jQuery.cache : elem, // See jQuery.data for more information id = isNode ? elem[ jQuery.expando ] : jQuery.expando; // If there is already no cache entry for this object, there is no // purpose in continuing if ( !cache[ id ] ) { return; } if ( name ) { var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ]; if ( thisCache ) { delete thisCache[ name ]; // If there is no data left in the cache, we want to continue // and let the cache object itself get destroyed if ( !isEmptyDataObject(thisCache) ) { return; } } } // See jQuery.data for more information if ( pvt ) { delete cache[ id ][ internalKey ]; // Don't destroy the parent cache unless the internal data object // had been the only thing left in it if ( !isEmptyDataObject(cache[ id ]) ) { return; } } var internalCache = cache[ id ][ internalKey ]; // Browsers that fail expando deletion also refuse to delete expandos on // the window, but it will allow it on all other JS objects; other browsers // don't care if ( jQuery.support.deleteExpando || cache != window ) { delete cache[ id ]; } else { cache[ id ] = null; } // We destroyed the entire user cache at once because it's faster than // iterating through each key, but we need to continue to persist internal // data if it existed if ( internalCache ) { cache[ id ] = {}; // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery // metadata on plain JS objects when the object is serialized using // JSON.stringify if ( !isNode ) { cache[ id ].toJSON = jQuery.noop; } cache[ id ][ internalKey ] = internalCache; // Otherwise, we need to eliminate the expando on the node to avoid // false lookups in the cache for entries that no longer exist } else if ( isNode ) { // IE does not allow us to delete expando properties from nodes, // nor does it have a removeAttribute function on Document nodes; // we must handle all of these cases if ( jQuery.support.deleteExpando ) { delete elem[ jQuery.expando ]; } else if ( elem.removeAttribute ) { elem.removeAttribute( jQuery.expando ); } else { elem[ jQuery.expando ] = null; } } }, // For internal use only. _data: function( elem, name, data ) { return jQuery.data( elem, name, data, true ); }, // A method for determining if a DOM node can handle the data expando acceptData: function( elem ) { if ( elem.nodeName ) { var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; if ( match ) { return !(match === true || elem.getAttribute("classid") !== match); } } return true; } }); jQuery.fn.extend({ data: function( key, value ) { var data = null; if ( typeof key === "undefined" ) { if ( this.length ) { data = jQuery.data( this[0] ); if ( this[0].nodeType === 1 ) { var attr = this[0].attributes, name; for ( var i = 0, l = attr.length; i < l; i++ ) { name = attr[i].name; if ( name.indexOf( "data-" ) === 0 ) { name = name.substr( 5 ); dataAttr( this[0], name, data[ name ] ); } } } } return data; } else if ( typeof key === "object" ) { return this.each(function() { jQuery.data( this, key ); }); } var parts = key.split("."); parts[1] = parts[1] ? "." + parts[1] : ""; if ( value === undefined ) { data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); // Try to fetch any internally stored data first if ( data === undefined && this.length ) { data = jQuery.data( this[0], key ); data = dataAttr( this[0], key, data ); } return data === undefined && parts[1] ? this.data( parts[0] ) : data; } else { return this.each(function() { var $this = jQuery( this ), args = [ parts[0], value ]; $this.triggerHandler( "setData" + parts[1] + "!", args ); jQuery.data( this, key, value ); $this.triggerHandler( "changeData" + parts[1] + "!", args ); }); } }, removeData: function( key ) { return this.each(function() { jQuery.removeData( this, key ); }); } }); function dataAttr( elem, key, data ) { // If nothing was found internally, try to fetch any // data from the HTML5 data-* attribute if ( data === undefined && elem.nodeType === 1 ) { data = elem.getAttribute( "data-" + key ); if ( typeof data === "string" ) { try { data = data === "true" ? true : data === "false" ? false : data === "null" ? null : !jQuery.isNaN( data ) ? parseFloat( data ) : rbrace.test( data ) ? jQuery.parseJSON( data ) : data; } catch( e ) {} // Make sure we set the data so it isn't changed later jQuery.data( elem, key, data ); } else { data = undefined; } } return data; } // TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON // property to be considered empty objects; this property always exists in // order to make sure JSON.stringify does not expose internal metadata function isEmptyDataObject( obj ) { for ( var name in obj ) { if ( name !== "toJSON" ) { return false; } } return true; } jQuery.extend({ queue: function( elem, type, data ) { if ( !elem ) { return; } type = (type || "fx") + "queue"; var q = jQuery._data( elem, type ); // Speed up dequeue by getting out quickly if this is just a lookup if ( !data ) { return q || []; } if ( !q || jQuery.isArray(data) ) { q = jQuery._data( elem, type, jQuery.makeArray(data) ); } else { q.push( data ); } return q; }, dequeue: function( elem, type ) { type = type || "fx"; var queue = jQuery.queue( elem, type ), fn = queue.shift(); // If the fx queue is dequeued, always remove the progress sentinel if ( fn === "inprogress" ) { fn = queue.shift(); } if ( fn ) { // Add a progress sentinel to prevent the fx queue from being // automatically dequeued if ( type === "fx" ) { queue.unshift("inprogress"); } fn.call(elem, function() { jQuery.dequeue(elem, type); }); } if ( !queue.length ) { jQuery.removeData( elem, type + "queue", true ); } } }); jQuery.fn.extend({ queue: function( type, data ) { if ( typeof type !== "string" ) { data = type; type = "fx"; } if ( data === undefined ) { return jQuery.queue( this[0], type ); } return this.each(function( i ) { var queue = jQuery.queue( this, type, data ); if ( type === "fx" && queue[0] !== "inprogress" ) { jQuery.dequeue( this, type ); } }); }, dequeue: function( type ) { return this.each(function() { jQuery.dequeue( this, type ); }); }, // Based off of the plugin by Clint Helfers, with permission. // http://blindsignals.com/index.php/2009/07/jquery-delay/ delay: function( time, type ) { time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; type = type || "fx"; return this.queue( type, function() { var elem = this; setTimeout(function() { jQuery.dequeue( elem, type ); }, time ); }); }, clearQueue: function( type ) { return this.queue( type || "fx", [] ); } }); var rclass = /[\n\t\r]/g, rspaces = /\s+/, rreturn = /\r/g, rspecialurl = /^(?:href|src|style)$/, rtype = /^(?:button|input)$/i, rfocusable = /^(?:button|input|object|select|textarea)$/i, rclickable = /^a(?:rea)?$/i, rradiocheck = /^(?:radio|checkbox)$/i; jQuery.props = { "for": "htmlFor", "class": "className", readonly: "readOnly", maxlength: "maxLength", cellspacing: "cellSpacing", rowspan: "rowSpan", colspan: "colSpan", tabindex: "tabIndex", usemap: "useMap", frameborder: "frameBorder" }; jQuery.fn.extend({ attr: function( name, value ) { return jQuery.access( this, name, value, true, jQuery.attr ); }, removeAttr: function( name, fn ) { return this.each(function(){ jQuery.attr( this, name, "" ); if ( this.nodeType === 1 ) { this.removeAttribute( name ); } }); }, addClass: function( value ) { if ( jQuery.isFunction(value) ) { return this.each(function(i) { var self = jQuery(this); self.addClass( value.call(this, i, self.attr("class")) ); }); } if ( value && typeof value === "string" ) { var classNames = (value || "").split( rspaces ); for ( var i = 0, l = this.length; i < l; i++ ) { var elem = this[i]; if ( elem.nodeType === 1 ) { if ( !elem.className ) { elem.className = value; } else { var className = " " + elem.className + " ", setClass = elem.className; for ( var c = 0, cl = classNames.length; c < cl; c++ ) { if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) { setClass += " " + classNames[c]; } } elem.className = jQuery.trim( setClass ); } } } } return this; }, removeClass: function( value ) { if ( jQuery.isFunction(value) ) { return this.each(function(i) { var self = jQuery(this); self.removeClass( value.call(this, i, self.attr("class")) ); }); } if ( (value && typeof value === "string") || value === undefined ) { var classNames = (value || "").split( rspaces ); for ( var i = 0, l = this.length; i < l; i++ ) { var elem = this[i]; if ( elem.nodeType === 1 && elem.className ) { if ( value ) { var className = (" " + elem.className + " ").replace(rclass, " "); for ( var c = 0, cl = classNames.length; c < cl; c++ ) { className = className.replace(" " + classNames[c] + " ", " "); } elem.className = jQuery.trim( className ); } else { elem.className = ""; } } } } return this; }, toggleClass: function( value, stateVal ) { var type = typeof value, isBool = typeof stateVal === "boolean"; if ( jQuery.isFunction( value ) ) { return this.each(function(i) { var self = jQuery(this); self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal ); }); } return this.each(function() { if ( type === "string" ) { // toggle individual class names var className, i = 0, self = jQuery( this ), state = stateVal, classNames = value.split( rspaces ); while ( (className = classNames[ i++ ]) ) { // check each className given, space seperated list state = isBool ? state : !self.hasClass( className ); self[ state ? "addClass" : "removeClass" ]( className ); } } else if ( type === "undefined" || type === "boolean" ) { if ( this.className ) { // store className if set jQuery._data( this, "__className__", this.className ); } // toggle whole className this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; } }); }, hasClass: function( selector ) { var className = " " + selector + " "; for ( var i = 0, l = this.length; i < l; i++ ) { if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { return true; } } return false; }, val: function( value ) { if ( !arguments.length ) { var elem = this[0]; if ( elem ) { if ( jQuery.nodeName( elem, "option" ) ) { // attributes.value is undefined in Blackberry 4.7 but // uses .value. See #6932 var val = elem.attributes.value; return !val || val.specified ? elem.value : elem.text; } // We need to handle select boxes special if ( jQuery.nodeName( elem, "select" ) ) { var index = elem.selectedIndex, values = [], options = elem.options, one = elem.type === "select-one"; // Nothing was selected if ( index < 0 ) { return null; } // Loop through all the selected options for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { var option = options[ i ]; // Don't return options that are disabled or in a disabled optgroup if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { // Get the specific value for the option value = jQuery(option).val(); // We don't need an array for one selects if ( one ) { return value; } // Multi-Selects return an array values.push( value ); } } // Fixes Bug #2551 -- select.val() broken in IE after form.reset() if ( one && !values.length && options.length ) { return jQuery( options[ index ] ).val(); } return values; } // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) { return elem.getAttribute("value") === null ? "on" : elem.value; } // Everything else, we just grab the value return (elem.value || "").replace(rreturn, ""); } return undefined; } var isFunction = jQuery.isFunction(value); return this.each(function(i) { var self = jQuery(this), val = value; if ( this.nodeType !== 1 ) { return; } if ( isFunction ) { val = value.call(this, i, self.val()); } // Treat null/undefined as ""; convert numbers to string if ( val == null ) { val = ""; } else if ( typeof val === "number" ) { val += ""; } else if ( jQuery.isArray(val) ) { val = jQuery.map(val, function (value) { return value == null ? "" : value + ""; }); } if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) { this.checked = jQuery.inArray( self.val(), val ) >= 0; } else if ( jQuery.nodeName( this, "select" ) ) { var values = jQuery.makeArray(val); jQuery( "option", this ).each(function() { this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; }); if ( !values.length ) { this.selectedIndex = -1; } } else { this.value = val; } }); } }); jQuery.extend({ attrFn: { val: true, css: true, html: true, text: true, data: true, width: true, height: true, offset: true }, attr: function( elem, name, value, pass ) { // don't get/set attributes on text, comment and attribute nodes if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || elem.nodeType === 2 ) { return undefined; } if ( pass && name in jQuery.attrFn ) { return jQuery(elem)[name](value); } var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ), // Whether we are setting (or getting) set = value !== undefined; // Try to normalize/fix the name name = notxml && jQuery.props[ name ] || name; // Only do all the following if this is a node (faster for style) if ( elem.nodeType === 1 ) { // These attributes require special treatment var special = rspecialurl.test( name ); // Safari mis-reports the default selected property of an option // Accessing the parent's selectedIndex property fixes it if ( name === "selected" && !jQuery.support.optSelected ) { var parent = elem.parentNode; if ( parent ) { parent.selectedIndex; // Make sure that it also works with optgroups, see #5701 if ( parent.parentNode ) { parent.parentNode.selectedIndex; } } } // If applicable, access the attribute via the DOM 0 way // 'in' checks fail in Blackberry 4.7 #6931 if ( (name in elem || elem[ name ] !== undefined) && notxml && !special ) { if ( set ) { // We can't allow the type property to be changed (since it causes problems in IE) if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) { jQuery.error( "type property can't be changed" ); } if ( value === null ) { if ( elem.nodeType === 1 ) { elem.removeAttribute( name ); } } else { elem[ name ] = value; } } // browsers index elements by id/name on forms, give priority to attributes. if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) { return elem.getAttributeNode( name ).nodeValue; } // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ if ( name === "tabIndex" ) { var attributeNode = elem.getAttributeNode( "tabIndex" ); return attributeNode && attributeNode.specified ? attributeNode.value : rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? 0 : undefined; } return elem[ name ]; } if ( !jQuery.support.style && notxml && name === "style" ) { if ( set ) { elem.style.cssText = "" + value; } return elem.style.cssText; } if ( set ) { // convert the value to a string (all browsers do this but IE) see #1070 elem.setAttribute( name, "" + value ); } // Ensure that missing attributes return undefined // Blackberry 4.7 returns "" from getAttribute #6938 if ( !elem.attributes[ name ] && (elem.hasAttribute && !elem.hasAttribute( name )) ) { return undefined; } var attr = !jQuery.support.hrefNormalized && notxml && special ? // Some attributes require a special call on IE elem.getAttribute( name, 2 ) : elem.getAttribute( name ); // Non-existent attributes return null, we normalize to undefined return attr === null ? undefined : attr; } // Handle everything which isn't a DOM element node if ( set ) { elem[ name ] = value; } return elem[ name ]; } }); var rnamespaces = /\.(.*)$/, rformElems = /^(?:textarea|input|select)$/i, rperiod = /\./g, rspace = / /g, rescape = /[^\w\s.|`]/g, fcleanup = function( nm ) { return nm.replace(rescape, "\\$&"); }; /* * A number of helper functions used for managing events. * Many of the ideas behind this code originated from * Dean Edwards' addEvent library. */ jQuery.event = { // Bind an event to an element // Original by Dean Edwards add: function( elem, types, handler, data ) { if ( elem.nodeType === 3 || elem.nodeType === 8 ) { return; } // TODO :: Use a try/catch until it's safe to pull this out (likely 1.6) // Minor release fix for bug #8018 try { // For whatever reason, IE has trouble passing the window object // around, causing it to be cloned in the process if ( jQuery.isWindow( elem ) && ( elem !== window && !elem.frameElement ) ) { elem = window; } } catch ( e ) {} if ( handler === false ) { handler = returnFalse; } else if ( !handler ) { // Fixes bug #7229. Fix recommended by jdalton return; } var handleObjIn, handleObj; if ( handler.handler ) { handleObjIn = handler; handler = handleObjIn.handler; } // Make sure that the function being executed has a unique ID if ( !handler.guid ) { handler.guid = jQuery.guid++; } // Init the element's event structure var elemData = jQuery._data( elem ); // If no elemData is found then we must be trying to bind to one of the // banned noData elements if ( !elemData ) { return; } var events = elemData.events, eventHandle = elemData.handle; if ( !events ) { elemData.events = events = {}; } if ( !eventHandle ) { elemData.handle = eventHandle = function() { // Handle the second event of a trigger and when // an event is called after a page has unloaded return typeof jQuery !== "undefined" && !jQuery.event.triggered ? jQuery.event.handle.apply( eventHandle.elem, arguments ) : undefined; }; } // Add elem as a property of the handle function // This is to prevent a memory leak with non-native events in IE. eventHandle.elem = elem; // Handle multiple events separated by a space // jQuery(...).bind("mouseover mouseout", fn); types = types.split(" "); var type, i = 0, namespaces; while ( (type = types[ i++ ]) ) { handleObj = handleObjIn ? jQuery.extend({}, handleObjIn) : { handler: handler, data: data }; // Namespaced event handlers if ( type.indexOf(".") > -1 ) { namespaces = type.split("."); type = namespaces.shift(); handleObj.namespace = namespaces.slice(0).sort().join("."); } else { namespaces = []; handleObj.namespace = ""; } handleObj.type = type; if ( !handleObj.guid ) { handleObj.guid = handler.guid; } // Get the current list of functions bound to this event var handlers = events[ type ], special = jQuery.event.special[ type ] || {}; // Init the event handler queue if ( !handlers ) { handlers = events[ type ] = []; // Check for a special event handler // Only use addEventListener/attachEvent if the special // events handler returns false if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { // Bind the global event handler to the element if ( elem.addEventListener ) { elem.addEventListener( type, eventHandle, false ); } else if ( elem.attachEvent ) { elem.attachEvent( "on" + type, eventHandle ); } } } if ( special.add ) { special.add.call( elem, handleObj ); if ( !handleObj.handler.guid ) { handleObj.handler.guid = handler.guid; } } // Add the function to the element's handler list handlers.push( handleObj ); // Keep track of which events have been used, for global triggering jQuery.event.global[ type ] = true; } // Nullify elem to prevent memory leaks in IE elem = null; }, global: {}, // Detach an event or set of events from an element remove: function( elem, types, handler, pos ) { // don't do events on text and comment nodes if ( elem.nodeType === 3 || elem.nodeType === 8 ) { return; } if ( handler === false ) { handler = returnFalse; } var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType, elemData = jQuery.hasData( elem ) && jQuery._data( elem ), events = elemData && elemData.events; if ( !elemData || !events ) { return; } // types is actually an event object here if ( types && types.type ) { handler = types.handler; types = types.type; } // Unbind all events for the element if ( !types || typeof types === "string" && types.charAt(0) === "." ) { types = types || ""; for ( type in events ) { jQuery.event.remove( elem, type + types ); } return; } // Handle multiple events separated by a space // jQuery(...).unbind("mouseover mouseout", fn); types = types.split(" "); while ( (type = types[ i++ ]) ) { origType = type; handleObj = null; all = type.indexOf(".") < 0; namespaces = []; if ( !all ) { // Namespaced event handlers namespaces = type.split("."); type = namespaces.shift(); namespace = new RegExp("(^|\\.)" + jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)"); } eventType = events[ type ]; if ( !eventType ) { continue; } if ( !handler ) { for ( j = 0; j < eventType.length; j++ ) { handleObj = eventType[ j ]; if ( all || namespace.test( handleObj.namespace ) ) { jQuery.event.remove( elem, origType, handleObj.handler, j ); eventType.splice( j--, 1 ); } } continue; } special = jQuery.event.special[ type ] || {}; for ( j = pos || 0; j < eventType.length; j++ ) { handleObj = eventType[ j ]; if ( handler.guid === handleObj.guid ) { // remove the given handler for the given type if ( all || namespace.test( handleObj.namespace ) ) { if ( pos == null ) { eventType.splice( j--, 1 ); } if ( special.remove ) { special.remove.call( elem, handleObj ); } } if ( pos != null ) { break; } } } // remove generic event handler if no more handlers exist if ( eventType.length === 0 || pos != null && eventType.length === 1 ) { if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { jQuery.removeEvent( elem, type, elemData.handle ); } ret = null; delete events[ type ]; } } // Remove the expando if it's no longer used if ( jQuery.isEmptyObject( events ) ) { var handle = elemData.handle; if ( handle ) { handle.elem = null; } delete elemData.events; delete elemData.handle; if ( jQuery.isEmptyObject( elemData ) ) { jQuery.removeData( elem, undefined, true ); } } }, // bubbling is internal trigger: function( event, data, elem /*, bubbling */ ) { // Event object or event type var type = event.type || event, bubbling = arguments[3]; if ( !bubbling ) { event = typeof event === "object" ? // jQuery.Event object event[ jQuery.expando ] ? event : // Object literal jQuery.extend( jQuery.Event(type), event ) : // Just the event type (string) jQuery.Event(type); if ( type.indexOf("!") >= 0 ) { event.type = type = type.slice(0, -1); event.exclusive = true; } // Handle a global trigger if ( !elem ) { // Don't bubble custom events when global (to avoid too much overhead) event.stopPropagation(); // Only trigger if we've ever bound an event for it if ( jQuery.event.global[ type ] ) { // XXX This code smells terrible. event.js should not be directly // inspecting the data cache jQuery.each( jQuery.cache, function() { // internalKey variable is just used to make it easier to find // and potentially change this stuff later; currently it just // points to jQuery.expando var internalKey = jQuery.expando, internalCache = this[ internalKey ]; if ( internalCache && internalCache.events && internalCache.events[ type ] ) { jQuery.event.trigger( event, data, internalCache.handle.elem ); } }); } } // Handle triggering a single element // don't do events on text and comment nodes if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { return undefined; } // Clean up in case it is reused event.result = undefined; event.target = elem; // Clone the incoming data, if any data = jQuery.makeArray( data ); data.unshift( event ); } event.currentTarget = elem; // Trigger the event, it is assumed that "handle" is a function var handle = jQuery._data( elem, "handle" ); if ( handle ) { handle.apply( elem, data ); } var parent = elem.parentNode || elem.ownerDocument; // Trigger an inline bound script try { if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) { if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) { event.result = false; event.preventDefault(); } } // prevent IE from throwing an error for some elements with some event types, see #3533 } catch (inlineError) {} if ( !event.isPropagationStopped() && parent ) { jQuery.event.trigger( event, data, parent, true ); } else if ( !event.isDefaultPrevented() ) { var old, target = event.target, targetType = type.replace( rnamespaces, "" ), isClick = jQuery.nodeName( target, "a" ) && targetType === "click", special = jQuery.event.special[ targetType ] || {}; if ( (!special._default || special._default.call( elem, event ) === false) && !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) { try { if ( target[ targetType ] ) { // Make sure that we don't accidentally re-trigger the onFOO events old = target[ "on" + targetType ]; if ( old ) { target[ "on" + targetType ] = null; } jQuery.event.triggered = true; target[ targetType ](); } // prevent IE from throwing an error for some elements with some event types, see #3533 } catch (triggerError) {} if ( old ) { target[ "on" + targetType ] = old; } jQuery.event.triggered = false; } } }, handle: function( event ) { var all, handlers, namespaces, namespace_re, events, namespace_sort = [], args = jQuery.makeArray( arguments ); event = args[0] = jQuery.event.fix( event || window.event ); event.currentTarget = this; // Namespaced event handlers all = event.type.indexOf(".") < 0 && !event.exclusive; if ( !all ) { namespaces = event.type.split("."); event.type = namespaces.shift(); namespace_sort = namespaces.slice(0).sort(); namespace_re = new RegExp("(^|\\.)" + namespace_sort.join("\\.(?:.*\\.)?") + "(\\.|$)"); } event.namespace = event.namespace || namespace_sort.join("."); events = jQuery._data(this, "events"); handlers = (events || {})[ event.type ]; if ( events && handlers ) { // Clone the handlers to prevent manipulation handlers = handlers.slice(0); for ( var j = 0, l = handlers.length; j < l; j++ ) { var handleObj = handlers[ j ]; // Filter the functions by class if ( all || namespace_re.test( handleObj.namespace ) ) { // Pass in a reference to the handler function itself // So that we can later remove it event.handler = handleObj.handler; event.data = handleObj.data; event.handleObj = handleObj; var ret = handleObj.handler.apply( this, args ); if ( ret !== undefined ) { event.result = ret; if ( ret === false ) { event.preventDefault(); event.stopPropagation(); } } if ( event.isImmediatePropagationStopped() ) { break; } } } } return event.result; }, props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), fix: function( event ) { if ( event[ jQuery.expando ] ) { return event; } // store a copy of the original event object // and "clone" to set read-only properties var originalEvent = event; event = jQuery.Event( originalEvent ); for ( var i = this.props.length, prop; i; ) { prop = this.props[ --i ]; event[ prop ] = originalEvent[ prop ]; } // Fix target property, if necessary if ( !event.target ) { // Fixes #1925 where srcElement might not be defined either event.target = event.srcElement || document; } // check if target is a textnode (safari) if ( event.target.nodeType === 3 ) { event.target = event.target.parentNode; } // Add relatedTarget, if necessary if ( !event.relatedTarget && event.fromElement ) { event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; } // Calculate pageX/Y if missing and clientX/Y available if ( event.pageX == null && event.clientX != null ) { var doc = document.documentElement, body = document.body; event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); } // Add which for key events if ( event.which == null && (event.charCode != null || event.keyCode != null) ) { event.which = event.charCode != null ? event.charCode : event.keyCode; } // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) if ( !event.metaKey && event.ctrlKey ) { event.metaKey = event.ctrlKey; } // Add which for click: 1 === left; 2 === middle; 3 === right // Note: button is not normalized, so don't use it if ( !event.which && event.button !== undefined ) { event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); } return event; }, // Deprecated, use jQuery.guid instead guid: 1E8, // Deprecated, use jQuery.proxy instead proxy: jQuery.proxy, special: { ready: { // Make sure the ready event is setup setup: jQuery.bindReady, teardown: jQuery.noop }, live: { add: function( handleObj ) { jQuery.event.add( this, liveConvert( handleObj.origType, handleObj.selector ), jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) ); }, remove: function( handleObj ) { jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj ); } }, beforeunload: { setup: function( data, namespaces, eventHandle ) { // We only want to do this special case on windows if ( jQuery.isWindow( this ) ) { this.onbeforeunload = eventHandle; } }, teardown: function( namespaces, eventHandle ) { if ( this.onbeforeunload === eventHandle ) { this.onbeforeunload = null; } } } } }; jQuery.removeEvent = document.removeEventListener ? function( elem, type, handle ) { if ( elem.removeEventListener ) { elem.removeEventListener( type, handle, false ); } } : function( elem, type, handle ) { if ( elem.detachEvent ) { elem.detachEvent( "on" + type, handle ); } }; jQuery.Event = function( src ) { // Allow instantiation without the 'new' keyword if ( !this.preventDefault ) { return new jQuery.Event( src ); } // Event object if ( src && src.type ) { this.originalEvent = src; this.type = src.type; // Events bubbling up the document may have been marked as prevented // by a handler lower down the tree; reflect the correct value. this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false || src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse; // Event type } else { this.type = src; } // timeStamp is buggy for some events on Firefox(#3843) // So we won't rely on the native value this.timeStamp = jQuery.now(); // Mark it as fixed this[ jQuery.expando ] = true; }; function returnFalse() { return false; } function returnTrue() { return true; } // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html jQuery.Event.prototype = { preventDefault: function() { this.isDefaultPrevented = returnTrue; var e = this.originalEvent; if ( !e ) { return; } // if preventDefault exists run it on the original event if ( e.preventDefault ) { e.preventDefault(); // otherwise set the returnValue property of the original event to false (IE) } else { e.returnValue = false; } }, stopPropagation: function() { this.isPropagationStopped = returnTrue; var e = this.originalEvent; if ( !e ) { return; } // if stopPropagation exists run it on the original event if ( e.stopPropagation ) { e.stopPropagation(); } // otherwise set the cancelBubble property of the original event to true (IE) e.cancelBubble = true; }, stopImmediatePropagation: function() { this.isImmediatePropagationStopped = returnTrue; this.stopPropagation(); }, isDefaultPrevented: returnFalse, isPropagationStopped: returnFalse, isImmediatePropagationStopped: returnFalse }; // Checks if an event happened on an element within another element // Used in jQuery.event.special.mouseenter and mouseleave handlers var withinElement = function( event ) { // Check if mouse(over|out) are still within the same parent element var parent = event.relatedTarget; // Firefox sometimes assigns relatedTarget a XUL element // which we cannot access the parentNode property of try { // Chrome does something similar, the parentNode property // can be accessed but is null. if ( parent !== document && !parent.parentNode ) { return; } // Traverse up the tree while ( parent && parent !== this ) { parent = parent.parentNode; } if ( parent !== this ) { // set the correct event type event.type = event.data; // handle event if we actually just moused on to a non sub-element jQuery.event.handle.apply( this, arguments ); } // assuming we've left the element since we most likely mousedover a xul element } catch(e) { } }, // In case of event delegation, we only need to rename the event.type, // liveHandler will take care of the rest. delegate = function( event ) { event.type = event.data; jQuery.event.handle.apply( this, arguments ); }; // Create mouseenter and mouseleave events jQuery.each({ mouseenter: "mouseover", mouseleave: "mouseout" }, function( orig, fix ) { jQuery.event.special[ orig ] = { setup: function( data ) { jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig ); }, teardown: function( data ) { jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement ); } }; }); // submit delegation if ( !jQuery.support.submitBubbles ) { jQuery.event.special.submit = { setup: function( data, namespaces ) { if ( this.nodeName && this.nodeName.toLowerCase() !== "form" ) { jQuery.event.add(this, "click.specialSubmit", function( e ) { var elem = e.target, type = elem.type; if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { trigger( "submit", this, arguments ); } }); jQuery.event.add(this, "keypress.specialSubmit", function( e ) { var elem = e.target, type = elem.type; if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { trigger( "submit", this, arguments ); } }); } else { return false; } }, teardown: function( namespaces ) { jQuery.event.remove( this, ".specialSubmit" ); } }; } // change delegation, happens here so we have bind. if ( !jQuery.support.changeBubbles ) { var changeFilters, getVal = function( elem ) { var type = elem.type, val = elem.value; if ( type === "radio" || type === "checkbox" ) { val = elem.checked; } else if ( type === "select-multiple" ) { val = elem.selectedIndex > -1 ? jQuery.map( elem.options, function( elem ) { return elem.selected; }).join("-") : ""; } else if ( elem.nodeName.toLowerCase() === "select" ) { val = elem.selectedIndex; } return val; }, testChange = function testChange( e ) { var elem = e.target, data, val; if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) { return; } data = jQuery._data( elem, "_change_data" ); val = getVal(elem); // the current data will be also retrieved by beforeactivate if ( e.type !== "focusout" || elem.type !== "radio" ) { jQuery._data( elem, "_change_data", val ); } if ( data === undefined || val === data ) { return; } if ( data != null || val ) { e.type = "change"; e.liveFired = undefined; jQuery.event.trigger( e, arguments[1], elem ); } }; jQuery.event.special.change = { filters: { focusout: testChange, beforedeactivate: testChange, click: function( e ) { var elem = e.target, type = elem.type; if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) { testChange.call( this, e ); } }, // Change has to be called before submit // Keydown will be called before keypress, which is used in submit-event delegation keydown: function( e ) { var elem = e.target, type = elem.type; if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") || (e.keyCode === 32 && (type === "checkbox" || type === "radio")) || type === "select-multiple" ) { testChange.call( this, e ); } }, // Beforeactivate happens also before the previous element is blurred // with this event you can't trigger a change event, but you can store // information beforeactivate: function( e ) { var elem = e.target; jQuery._data( elem, "_change_data", getVal(elem) ); } }, setup: function( data, namespaces ) { if ( this.type === "file" ) { return false; } for ( var type in changeFilters ) { jQuery.event.add( this, type + ".specialChange", changeFilters[type] ); } return rformElems.test( this.nodeName ); }, teardown: function( namespaces ) { jQuery.event.remove( this, ".specialChange" ); return rformElems.test( this.nodeName ); } }; changeFilters = jQuery.event.special.change.filters; // Handle when the input is .focus()'d changeFilters.focus = changeFilters.beforeactivate; } function trigger( type, elem, args ) { // Piggyback on a donor event to simulate a different one. // Fake originalEvent to avoid donor's stopPropagation, but if the // simulated event prevents default then we do the same on the donor. // Don't pass args or remember liveFired; they apply to the donor event. var event = jQuery.extend( {}, args[ 0 ] ); event.type = type; event.originalEvent = {}; event.liveFired = undefined; jQuery.event.handle.call( elem, event ); if ( event.isDefaultPrevented() ) { args[ 0 ].preventDefault(); } } // Create "bubbling" focus and blur events if ( document.addEventListener ) { jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { jQuery.event.special[ fix ] = { setup: function() { this.addEventListener( orig, handler, true ); }, teardown: function() { this.removeEventListener( orig, handler, true ); } }; function handler( e ) { e = jQuery.event.fix( e ); e.type = fix; return jQuery.event.handle.call( this, e ); } }); } jQuery.each(["bind", "one"], function( i, name ) { jQuery.fn[ name ] = function( type, data, fn ) { // Handle object literals if ( typeof type === "object" ) { for ( var key in type ) { this[ name ](key, data, type[key], fn); } return this; } if ( jQuery.isFunction( data ) || data === false ) { fn = data; data = undefined; } var handler = name === "one" ? jQuery.proxy( fn, function( event ) { jQuery( this ).unbind( event, handler ); return fn.apply( this, arguments ); }) : fn; if ( type === "unload" && name !== "one" ) { this.one( type, data, fn ); } else { for ( var i = 0, l = this.length; i < l; i++ ) { jQuery.event.add( this[i], type, handler, data ); } } return this; }; }); jQuery.fn.extend({ unbind: function( type, fn ) { // Handle object literals if ( typeof type === "object" && !type.preventDefault ) { for ( var key in type ) { this.unbind(key, type[key]); } } else { for ( var i = 0, l = this.length; i < l; i++ ) { jQuery.event.remove( this[i], type, fn ); } } return this; }, delegate: function( selector, types, data, fn ) { return this.live( types, data, fn, selector ); }, undelegate: function( selector, types, fn ) { if ( arguments.length === 0 ) { return this.unbind( "live" ); } else { return this.die( types, null, fn, selector ); } }, trigger: function( type, data ) { return this.each(function() { jQuery.event.trigger( type, data, this ); }); }, triggerHandler: function( type, data ) { if ( this[0] ) { var event = jQuery.Event( type ); event.preventDefault(); event.stopPropagation(); jQuery.event.trigger( event, data, this[0] ); return event.result; } }, toggle: function( fn ) { // Save reference to arguments for access in closure var args = arguments, i = 1; // link all the functions, so any of them can unbind this click handler while ( i < args.length ) { jQuery.proxy( fn, args[ i++ ] ); } return this.click( jQuery.proxy( fn, function( event ) { // Figure out which function to execute var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); // Make sure that clicks stop event.preventDefault(); // and execute the function return args[ lastToggle ].apply( this, arguments ) || false; })); }, hover: function( fnOver, fnOut ) { return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); } }); var liveMap = { focus: "focusin", blur: "focusout", mouseenter: "mouseover", mouseleave: "mouseout" }; jQuery.each(["live", "die"], function( i, name ) { jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) { var type, i = 0, match, namespaces, preType, selector = origSelector || this.selector, context = origSelector ? this : jQuery( this.context ); if ( typeof types === "object" && !types.preventDefault ) { for ( var key in types ) { context[ name ]( key, data, types[key], selector ); } return this; } if ( jQuery.isFunction( data ) ) { fn = data; data = undefined; } types = (types || "").split(" "); while ( (type = types[ i++ ]) != null ) { match = rnamespaces.exec( type ); namespaces = ""; if ( match ) { namespaces = match[0]; type = type.replace( rnamespaces, "" ); } if ( type === "hover" ) { types.push( "mouseenter" + namespaces, "mouseleave" + namespaces ); continue; } preType = type; if ( type === "focus" || type === "blur" ) { types.push( liveMap[ type ] + namespaces ); type = type + namespaces; } else { type = (liveMap[ type ] || type) + namespaces; } if ( name === "live" ) { // bind live handler for ( var j = 0, l = context.length; j < l; j++ ) { jQuery.event.add( context[j], "live." + liveConvert( type, selector ), { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } ); } } else { // unbind live handler context.unbind( "live." + liveConvert( type, selector ), fn ); } } return this; }; }); function liveHandler( event ) { var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret, elems = [], selectors = [], events = jQuery._data( this, "events" ); // Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911) if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) { return; } if ( event.namespace ) { namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)"); } event.liveFired = this; var live = events.live.slice(0); for ( j = 0; j < live.length; j++ ) { handleObj = live[j]; if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) { selectors.push( handleObj.selector ); } else { live.splice( j--, 1 ); } } match = jQuery( event.target ).closest( selectors, event.currentTarget ); for ( i = 0, l = match.length; i < l; i++ ) { close = match[i]; for ( j = 0; j < live.length; j++ ) { handleObj = live[j]; if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) { elem = close.elem; related = null; // Those two events require additional checking if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) { event.type = handleObj.preType; related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0]; } if ( !related || related !== elem ) { elems.push({ elem: elem, handleObj: handleObj, level: close.level }); } } } } for ( i = 0, l = elems.length; i < l; i++ ) { match = elems[i]; if ( maxLevel && match.level > maxLevel ) { break; } event.currentTarget = match.elem; event.data = match.handleObj.data; event.handleObj = match.handleObj; ret = match.handleObj.origHandler.apply( match.elem, arguments ); if ( ret === false || event.isPropagationStopped() ) { maxLevel = match.level; if ( ret === false ) { stop = false; } if ( event.isImmediatePropagationStopped() ) { break; } } } return stop; } function liveConvert( type, selector ) { return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspace, "&"); } jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup error").split(" "), function( i, name ) { // Handle event binding jQuery.fn[ name ] = function( data, fn ) { if ( fn == null ) { fn = data; data = null; } return arguments.length > 0 ? this.bind( name, data, fn ) : this.trigger( name ); }; if ( jQuery.attrFn ) { jQuery.attrFn[ name ] = true; } }); /*! * Sizzle CSS Selector Engine * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * More information: http://sizzlejs.com/ */ (function(){ var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, done = 0, toString = Object.prototype.toString, hasDuplicate = false, baseHasDuplicate = true, rBackslash = /\\/g, rNonWord = /\W/; // Here we check if the JavaScript engine is using some sort of // optimization where it does not always call our comparision // function. If that is the case, discard the hasDuplicate value. // Thus far that includes Google Chrome. [0, 0].sort(function() { baseHasDuplicate = false; return 0; }); var Sizzle = function( selector, context, results, seed ) { results = results || []; context = context || document; var origContext = context; if ( context.nodeType !== 1 && context.nodeType !== 9 ) { return []; } if ( !selector || typeof selector !== "string" ) { return results; } var m, set, checkSet, extra, ret, cur, pop, i, prune = true, contextXML = Sizzle.isXML( context ), parts = [], soFar = selector; // Reset the position of the chunker regexp (start from head) do { chunker.exec( "" ); m = chunker.exec( soFar ); if ( m ) { soFar = m[3]; parts.push( m[1] ); if ( m[2] ) { extra = m[3]; break; } } } while ( m ); if ( parts.length > 1 && origPOS.exec( selector ) ) { if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { set = posProcess( parts[0] + parts[1], context ); } else { set = Expr.relative[ parts[0] ] ? [ context ] : Sizzle( parts.shift(), context ); while ( parts.length ) { selector = parts.shift(); if ( Expr.relative[ selector ] ) { selector += parts.shift(); } set = posProcess( selector, set ); } } } else { // Take a shortcut and set the context if the root selector is an ID // (but not if it'll be faster if the inner selector is an ID) if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { ret = Sizzle.find( parts.shift(), context, contextXML ); context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0]; } if ( context ) { ret = seed ? { expr: parts.pop(), set: makeArray(seed) } : Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set; if ( parts.length > 0 ) { checkSet = makeArray( set ); } else { prune = false; } while ( parts.length ) { cur = parts.pop(); pop = cur; if ( !Expr.relative[ cur ] ) { cur = ""; } else { pop = parts.pop(); } if ( pop == null ) { pop = context; } Expr.relative[ cur ]( checkSet, pop, contextXML ); } } else { checkSet = parts = []; } } if ( !checkSet ) { checkSet = set; } if ( !checkSet ) { Sizzle.error( cur || selector ); } if ( toString.call(checkSet) === "[object Array]" ) { if ( !prune ) { results.push.apply( results, checkSet ); } else if ( context && context.nodeType === 1 ) { for ( i = 0; checkSet[i] != null; i++ ) { if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { results.push( set[i] ); } } } else { for ( i = 0; checkSet[i] != null; i++ ) { if ( checkSet[i] && checkSet[i].nodeType === 1 ) { results.push( set[i] ); } } } } else { makeArray( checkSet, results ); } if ( extra ) { Sizzle( extra, origContext, results, seed ); Sizzle.uniqueSort( results ); } return results; }; Sizzle.uniqueSort = function( results ) { if ( sortOrder ) { hasDuplicate = baseHasDuplicate; results.sort( sortOrder ); if ( hasDuplicate ) { for ( var i = 1; i < results.length; i++ ) { if ( results[i] === results[ i - 1 ] ) { results.splice( i--, 1 ); } } } } return results; }; Sizzle.matches = function( expr, set ) { return Sizzle( expr, null, null, set ); }; Sizzle.matchesSelector = function( node, expr ) { return Sizzle( expr, null, null, [node] ).length > 0; }; Sizzle.find = function( expr, context, isXML ) { var set; if ( !expr ) { return []; } for ( var i = 0, l = Expr.order.length; i < l; i++ ) { var match, type = Expr.order[i]; if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { var left = match[1]; match.splice( 1, 1 ); if ( left.substr( left.length - 1 ) !== "\\" ) { match[1] = (match[1] || "").replace( rBackslash, "" ); set = Expr.find[ type ]( match, context, isXML ); if ( set != null ) { expr = expr.replace( Expr.match[ type ], "" ); break; } } } } if ( !set ) { set = typeof context.getElementsByTagName !== "undefined" ? context.getElementsByTagName( "*" ) : []; } return { set: set, expr: expr }; }; Sizzle.filter = function( expr, set, inplace, not ) { var match, anyFound, old = expr, result = [], curLoop = set, isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); while ( expr && set.length ) { for ( var type in Expr.filter ) { if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { var found, item, filter = Expr.filter[ type ], left = match[1]; anyFound = false; match.splice(1,1); if ( left.substr( left.length - 1 ) === "\\" ) { continue; } if ( curLoop === result ) { result = []; } if ( Expr.preFilter[ type ] ) { match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); if ( !match ) { anyFound = found = true; } else if ( match === true ) { continue; } } if ( match ) { for ( var i = 0; (item = curLoop[i]) != null; i++ ) { if ( item ) { found = filter( item, match, i, curLoop ); var pass = not ^ !!found; if ( inplace && found != null ) { if ( pass ) { anyFound = true; } else { curLoop[i] = false; } } else if ( pass ) { result.push( item ); anyFound = true; } } } } if ( found !== undefined ) { if ( !inplace ) { curLoop = result; } expr = expr.replace( Expr.match[ type ], "" ); if ( !anyFound ) { return []; } break; } } } // Improper expression if ( expr === old ) { if ( anyFound == null ) { Sizzle.error( expr ); } else { break; } } old = expr; } return curLoop; }; Sizzle.error = function( msg ) { throw "Syntax error, unrecognized expression: " + msg; }; var Expr = Sizzle.selectors = { order: [ "ID", "NAME", "TAG" ], match: { ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ }, leftMatch: {}, attrMap: { "class": "className", "for": "htmlFor" }, attrHandle: { href: function( elem ) { return elem.getAttribute( "href" ); }, type: function( elem ) { return elem.getAttribute( "type" ); } }, relative: { "+": function(checkSet, part){ var isPartStr = typeof part === "string", isTag = isPartStr && !rNonWord.test( part ), isPartStrNotTag = isPartStr && !isTag; if ( isTag ) { part = part.toLowerCase(); } for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { if ( (elem = checkSet[i]) ) { while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? elem || false : elem === part; } } if ( isPartStrNotTag ) { Sizzle.filter( part, checkSet, true ); } }, ">": function( checkSet, part ) { var elem, isPartStr = typeof part === "string", i = 0, l = checkSet.length; if ( isPartStr && !rNonWord.test( part ) ) { part = part.toLowerCase(); for ( ; i < l; i++ ) { elem = checkSet[i]; if ( elem ) { var parent = elem.parentNode; checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; } } } else { for ( ; i < l; i++ ) { elem = checkSet[i]; if ( elem ) { checkSet[i] = isPartStr ? elem.parentNode : elem.parentNode === part; } } if ( isPartStr ) { Sizzle.filter( part, checkSet, true ); } } }, "": function(checkSet, part, isXML){ var nodeCheck, doneName = done++, checkFn = dirCheck; if ( typeof part === "string" && !rNonWord.test( part ) ) { part = part.toLowerCase(); nodeCheck = part; checkFn = dirNodeCheck; } checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); }, "~": function( checkSet, part, isXML ) { var nodeCheck, doneName = done++, checkFn = dirCheck; if ( typeof part === "string" && !rNonWord.test( part ) ) { part = part.toLowerCase(); nodeCheck = part; checkFn = dirNodeCheck; } checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); } }, find: { ID: function( match, context, isXML ) { if ( typeof context.getElementById !== "undefined" && !isXML ) { var m = context.getElementById(match[1]); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 return m && m.parentNode ? [m] : []; } }, NAME: function( match, context ) { if ( typeof context.getElementsByName !== "undefined" ) { var ret = [], results = context.getElementsByName( match[1] ); for ( var i = 0, l = results.length; i < l; i++ ) { if ( results[i].getAttribute("name") === match[1] ) { ret.push( results[i] ); } } return ret.length === 0 ? null : ret; } }, TAG: function( match, context ) { if ( typeof context.getElementsByTagName !== "undefined" ) { return context.getElementsByTagName( match[1] ); } } }, preFilter: { CLASS: function( match, curLoop, inplace, result, not, isXML ) { match = " " + match[1].replace( rBackslash, "" ) + " "; if ( isXML ) { return match; } for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { if ( elem ) { if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { if ( !inplace ) { result.push( elem ); } } else if ( inplace ) { curLoop[i] = false; } } } return false; }, ID: function( match ) { return match[1].replace( rBackslash, "" ); }, TAG: function( match, curLoop ) { return match[1].replace( rBackslash, "" ).toLowerCase(); }, CHILD: function( match ) { if ( match[1] === "nth" ) { if ( !match[2] ) { Sizzle.error( match[0] ); } match[2] = match[2].replace(/^\+|\s*/g, ''); // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); // calculate the numbers (first)n+(last) including if they are negative match[2] = (test[1] + (test[2] || 1)) - 0; match[3] = test[3] - 0; } else if ( match[2] ) { Sizzle.error( match[0] ); } // TODO: Move to normal caching system match[0] = done++; return match; }, ATTR: function( match, curLoop, inplace, result, not, isXML ) { var name = match[1] = match[1].replace( rBackslash, "" ); if ( !isXML && Expr.attrMap[name] ) { match[1] = Expr.attrMap[name]; } // Handle if an un-quoted value was used match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); if ( match[2] === "~=" ) { match[4] = " " + match[4] + " "; } return match; }, PSEUDO: function( match, curLoop, inplace, result, not ) { if ( match[1] === "not" ) { // If we're dealing with a complex expression, or a simple one if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { match[3] = Sizzle(match[3], null, null, curLoop); } else { var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); if ( !inplace ) { result.push.apply( result, ret ); } return false; } } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { return true; } return match; }, POS: function( match ) { match.unshift( true ); return match; } }, filters: { enabled: function( elem ) { return elem.disabled === false && elem.type !== "hidden"; }, disabled: function( elem ) { return elem.disabled === true; }, checked: function( elem ) { return elem.checked === true; }, selected: function( elem ) { // Accessing this property makes selected-by-default // options in Safari work properly if ( elem.parentNode ) { elem.parentNode.selectedIndex; } return elem.selected === true; }, parent: function( elem ) { return !!elem.firstChild; }, empty: function( elem ) { return !elem.firstChild; }, has: function( elem, i, match ) { return !!Sizzle( match[3], elem ).length; }, header: function( elem ) { return (/h\d/i).test( elem.nodeName ); }, text: function( elem ) { // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) // use getAttribute instead to test this case return "text" === elem.getAttribute( 'type' ); }, radio: function( elem ) { return "radio" === elem.type; }, checkbox: function( elem ) { return "checkbox" === elem.type; }, file: function( elem ) { return "file" === elem.type; }, password: function( elem ) { return "password" === elem.type; }, submit: function( elem ) { return "submit" === elem.type; }, image: function( elem ) { return "image" === elem.type; }, reset: function( elem ) { return "reset" === elem.type; }, button: function( elem ) { return "button" === elem.type || elem.nodeName.toLowerCase() === "button"; }, input: function( elem ) { return (/input|select|textarea|button/i).test( elem.nodeName ); } }, setFilters: { first: function( elem, i ) { return i === 0; }, last: function( elem, i, match, array ) { return i === array.length - 1; }, even: function( elem, i ) { return i % 2 === 0; }, odd: function( elem, i ) { return i % 2 === 1; }, lt: function( elem, i, match ) { return i < match[3] - 0; }, gt: function( elem, i, match ) { return i > match[3] - 0; }, nth: function( elem, i, match ) { return match[3] - 0 === i; }, eq: function( elem, i, match ) { return match[3] - 0 === i; } }, filter: { PSEUDO: function( elem, match, i, array ) { var name = match[1], filter = Expr.filters[ name ]; if ( filter ) { return filter( elem, i, match, array ); } else if ( name === "contains" ) { return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0; } else if ( name === "not" ) { var not = match[3]; for ( var j = 0, l = not.length; j < l; j++ ) { if ( not[j] === elem ) { return false; } } return true; } else { Sizzle.error( name ); } }, CHILD: function( elem, match ) { var type = match[1], node = elem; switch ( type ) { case "only": case "first": while ( (node = node.previousSibling) ) { if ( node.nodeType === 1 ) { return false; } } if ( type === "first" ) { return true; } node = elem; case "last": while ( (node = node.nextSibling) ) { if ( node.nodeType === 1 ) { return false; } } return true; case "nth": var first = match[2], last = match[3]; if ( first === 1 && last === 0 ) { return true; } var doneName = match[0], parent = elem.parentNode; if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { var count = 0; for ( node = parent.firstChild; node; node = node.nextSibling ) { if ( node.nodeType === 1 ) { node.nodeIndex = ++count; } } parent.sizcache = doneName; } var diff = elem.nodeIndex - last; if ( first === 0 ) { return diff === 0; } else { return ( diff % first === 0 && diff / first >= 0 ); } } }, ID: function( elem, match ) { return elem.nodeType === 1 && elem.getAttribute("id") === match; }, TAG: function( elem, match ) { return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; }, CLASS: function( elem, match ) { return (" " + (elem.className || elem.getAttribute("class")) + " ") .indexOf( match ) > -1; }, ATTR: function( elem, match ) { var name = match[1], result = Expr.attrHandle[ name ] ? Expr.attrHandle[ name ]( elem ) : elem[ name ] != null ? elem[ name ] : elem.getAttribute( name ), value = result + "", type = match[2], check = match[4]; return result == null ? type === "!=" : type === "=" ? value === check : type === "*=" ? value.indexOf(check) >= 0 : type === "~=" ? (" " + value + " ").indexOf(check) >= 0 : !check ? value && result !== false : type === "!=" ? value !== check : type === "^=" ? value.indexOf(check) === 0 : type === "$=" ? value.substr(value.length - check.length) === check : type === "|=" ? value === check || value.substr(0, check.length + 1) === check + "-" : false; }, POS: function( elem, match, i, array ) { var name = match[2], filter = Expr.setFilters[ name ]; if ( filter ) { return filter( elem, i, match, array ); } } } }; var origPOS = Expr.match.POS, fescape = function(all, num){ return "\\" + (num - 0 + 1); }; for ( var type in Expr.match ) { Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); } var makeArray = function( array, results ) { array = Array.prototype.slice.call( array, 0 ); if ( results ) { results.push.apply( results, array ); return results; } return array; }; // Perform a simple check to determine if the browser is capable of // converting a NodeList to an array using builtin methods. // Also verifies that the returned array holds DOM nodes // (which is not the case in the Blackberry browser) try { Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; // Provide a fallback method if it does not work } catch( e ) { makeArray = function( array, results ) { var i = 0, ret = results || []; if ( toString.call(array) === "[object Array]" ) { Array.prototype.push.apply( ret, array ); } else { if ( typeof array.length === "number" ) { for ( var l = array.length; i < l; i++ ) { ret.push( array[i] ); } } else { for ( ; array[i]; i++ ) { ret.push( array[i] ); } } } return ret; }; } var sortOrder, siblingCheck; if ( document.documentElement.compareDocumentPosition ) { sortOrder = function( a, b ) { if ( a === b ) { hasDuplicate = true; return 0; } if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { return a.compareDocumentPosition ? -1 : 1; } return a.compareDocumentPosition(b) & 4 ? -1 : 1; }; } else { sortOrder = function( a, b ) { var al, bl, ap = [], bp = [], aup = a.parentNode, bup = b.parentNode, cur = aup; // The nodes are identical, we can exit early if ( a === b ) { hasDuplicate = true; return 0; // If the nodes are siblings (or identical) we can do a quick check } else if ( aup === bup ) { return siblingCheck( a, b ); // If no parents were found then the nodes are disconnected } else if ( !aup ) { return -1; } else if ( !bup ) { return 1; } // Otherwise they're somewhere else in the tree so we need // to build up a full list of the parentNodes for comparison while ( cur ) { ap.unshift( cur ); cur = cur.parentNode; } cur = bup; while ( cur ) { bp.unshift( cur ); cur = cur.parentNode; } al = ap.length; bl = bp.length; // Start walking down the tree looking for a discrepancy for ( var i = 0; i < al && i < bl; i++ ) { if ( ap[i] !== bp[i] ) { return siblingCheck( ap[i], bp[i] ); } } // We ended someplace up the tree so do a sibling check return i === al ? siblingCheck( a, bp[i], -1 ) : siblingCheck( ap[i], b, 1 ); }; siblingCheck = function( a, b, ret ) { if ( a === b ) { return ret; } var cur = a.nextSibling; while ( cur ) { if ( cur === b ) { return -1; } cur = cur.nextSibling; } return 1; }; } // Utility function for retreiving the text value of an array of DOM nodes Sizzle.getText = function( elems ) { var ret = "", elem; for ( var i = 0; elems[i]; i++ ) { elem = elems[i]; // Get the text from text nodes and CDATA nodes if ( elem.nodeType === 3 || elem.nodeType === 4 ) { ret += elem.nodeValue; // Traverse everything else, except comment nodes } else if ( elem.nodeType !== 8 ) { ret += Sizzle.getText( elem.childNodes ); } } return ret; }; // Check to see if the browser returns elements by name when // querying by getElementById (and provide a workaround) (function(){ // We're going to inject a fake input element with a specified name var form = document.createElement("div"), id = "script" + (new Date()).getTime(), root = document.documentElement; form.innerHTML = ""; // Inject it into the root element, check its status, and remove it quickly root.insertBefore( form, root.firstChild ); // The workaround has to do additional checks after a getElementById // Which slows things down for other browsers (hence the branching) if ( document.getElementById( id ) ) { Expr.find.ID = function( match, context, isXML ) { if ( typeof context.getElementById !== "undefined" && !isXML ) { var m = context.getElementById(match[1]); return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []; } }; Expr.filter.ID = function( elem, match ) { var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); return elem.nodeType === 1 && node && node.nodeValue === match; }; } root.removeChild( form ); // release memory in IE root = form = null; })(); (function(){ // Check to see if the browser returns only elements // when doing getElementsByTagName("*") // Create a fake element var div = document.createElement("div"); div.appendChild( document.createComment("") ); // Make sure no comments are found if ( div.getElementsByTagName("*").length > 0 ) { Expr.find.TAG = function( match, context ) { var results = context.getElementsByTagName( match[1] ); // Filter out possible comments if ( match[1] === "*" ) { var tmp = []; for ( var i = 0; results[i]; i++ ) { if ( results[i].nodeType === 1 ) { tmp.push( results[i] ); } } results = tmp; } return results; }; } // Check to see if an attribute returns normalized href attributes div.innerHTML = ""; if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && div.firstChild.getAttribute("href") !== "#" ) { Expr.attrHandle.href = function( elem ) { return elem.getAttribute( "href", 2 ); }; } // release memory in IE div = null; })(); if ( document.querySelectorAll ) { (function(){ var oldSizzle = Sizzle, div = document.createElement("div"), id = "__sizzle__"; div.innerHTML = "

      "; // Safari can't handle uppercase or unicode characters when // in quirks mode. if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { return; } Sizzle = function( query, context, extra, seed ) { context = context || document; // Only use querySelectorAll on non-XML documents // (ID selectors don't work in non-HTML documents) if ( !seed && !Sizzle.isXML(context) ) { // See if we find a selector to speed up var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { // Speed-up: Sizzle("TAG") if ( match[1] ) { return makeArray( context.getElementsByTagName( query ), extra ); // Speed-up: Sizzle(".CLASS") } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { return makeArray( context.getElementsByClassName( match[2] ), extra ); } } if ( context.nodeType === 9 ) { // Speed-up: Sizzle("body") // The body element only exists once, optimize finding it if ( query === "body" && context.body ) { return makeArray( [ context.body ], extra ); // Speed-up: Sizzle("#ID") } else if ( match && match[3] ) { var elem = context.getElementById( match[3] ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 if ( elem && elem.parentNode ) { // Handle the case where IE and Opera return items // by name instead of ID if ( elem.id === match[3] ) { return makeArray( [ elem ], extra ); } } else { return makeArray( [], extra ); } } try { return makeArray( context.querySelectorAll(query), extra ); } catch(qsaError) {} // qSA works strangely on Element-rooted queries // We can work around this by specifying an extra ID on the root // and working up from there (Thanks to Andrew Dupont for the technique) // IE 8 doesn't work on object elements } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { var oldContext = context, old = context.getAttribute( "id" ), nid = old || id, hasParent = context.parentNode, relativeHierarchySelector = /^\s*[+~]/.test( query ); if ( !old ) { context.setAttribute( "id", nid ); } else { nid = nid.replace( /'/g, "\\$&" ); } if ( relativeHierarchySelector && hasParent ) { context = context.parentNode; } try { if ( !relativeHierarchySelector || hasParent ) { return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); } } catch(pseudoError) { } finally { if ( !old ) { oldContext.removeAttribute( "id" ); } } } } return oldSizzle(query, context, extra, seed); }; for ( var prop in oldSizzle ) { Sizzle[ prop ] = oldSizzle[ prop ]; } // release memory in IE div = null; })(); } (function(){ var html = document.documentElement, matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector, pseudoWorks = false; try { // This should fail with an exception // Gecko does not error, returns false instead matches.call( document.documentElement, "[test!='']:sizzle" ); } catch( pseudoError ) { pseudoWorks = true; } if ( matches ) { Sizzle.matchesSelector = function( node, expr ) { // Make sure that attribute selectors are quoted expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); if ( !Sizzle.isXML( node ) ) { try { if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { return matches.call( node, expr ); } } catch(e) {} } return Sizzle(expr, null, null, [node]).length > 0; }; } })(); (function(){ var div = document.createElement("div"); div.innerHTML = "
      "; // Opera can't find a second classname (in 9.6) // Also, make sure that getElementsByClassName actually exists if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { return; } // Safari caches class attributes, doesn't catch changes (in 3.2) div.lastChild.className = "e"; if ( div.getElementsByClassName("e").length === 1 ) { return; } Expr.order.splice(1, 0, "CLASS"); Expr.find.CLASS = function( match, context, isXML ) { if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { return context.getElementsByClassName(match[1]); } }; // release memory in IE div = null; })(); function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { for ( var i = 0, l = checkSet.length; i < l; i++ ) { var elem = checkSet[i]; if ( elem ) { var match = false; elem = elem[dir]; while ( elem ) { if ( elem.sizcache === doneName ) { match = checkSet[elem.sizset]; break; } if ( elem.nodeType === 1 && !isXML ){ elem.sizcache = doneName; elem.sizset = i; } if ( elem.nodeName.toLowerCase() === cur ) { match = elem; break; } elem = elem[dir]; } checkSet[i] = match; } } } function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { for ( var i = 0, l = checkSet.length; i < l; i++ ) { var elem = checkSet[i]; if ( elem ) { var match = false; elem = elem[dir]; while ( elem ) { if ( elem.sizcache === doneName ) { match = checkSet[elem.sizset]; break; } if ( elem.nodeType === 1 ) { if ( !isXML ) { elem.sizcache = doneName; elem.sizset = i; } if ( typeof cur !== "string" ) { if ( elem === cur ) { match = true; break; } } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { match = elem; break; } } elem = elem[dir]; } checkSet[i] = match; } } } if ( document.documentElement.contains ) { Sizzle.contains = function( a, b ) { return a !== b && (a.contains ? a.contains(b) : true); }; } else if ( document.documentElement.compareDocumentPosition ) { Sizzle.contains = function( a, b ) { return !!(a.compareDocumentPosition(b) & 16); }; } else { Sizzle.contains = function() { return false; }; } Sizzle.isXML = function( elem ) { // documentElement is verified for cases where it doesn't yet exist // (such as loading iframes in IE - #4833) var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; return documentElement ? documentElement.nodeName !== "HTML" : false; }; var posProcess = function( selector, context ) { var match, tmpSet = [], later = "", root = context.nodeType ? [context] : context; // Position selectors must be done after the filter // And so must :not(positional) so we move all PSEUDOs to the end while ( (match = Expr.match.PSEUDO.exec( selector )) ) { later += match[0]; selector = selector.replace( Expr.match.PSEUDO, "" ); } selector = Expr.relative[selector] ? selector + "*" : selector; for ( var i = 0, l = root.length; i < l; i++ ) { Sizzle( selector, root[i], tmpSet ); } return Sizzle.filter( later, tmpSet ); }; // EXPOSE jQuery.find = Sizzle; jQuery.expr = Sizzle.selectors; jQuery.expr[":"] = jQuery.expr.filters; jQuery.unique = Sizzle.uniqueSort; jQuery.text = Sizzle.getText; jQuery.isXMLDoc = Sizzle.isXML; jQuery.contains = Sizzle.contains; })(); var runtil = /Until$/, rparentsprev = /^(?:parents|prevUntil|prevAll)/, // Note: This RegExp should be improved, or likely pulled from Sizzle rmultiselector = /,/, isSimple = /^.[^:#\[\.,]*$/, slice = Array.prototype.slice, POS = jQuery.expr.match.POS, // methods guaranteed to produce a unique set when starting from a unique set guaranteedUnique = { children: true, contents: true, next: true, prev: true }; jQuery.fn.extend({ find: function( selector ) { var ret = this.pushStack( "", "find", selector ), length = 0; for ( var i = 0, l = this.length; i < l; i++ ) { length = ret.length; jQuery.find( selector, this[i], ret ); if ( i > 0 ) { // Make sure that the results are unique for ( var n = length; n < ret.length; n++ ) { for ( var r = 0; r < length; r++ ) { if ( ret[r] === ret[n] ) { ret.splice(n--, 1); break; } } } } } return ret; }, has: function( target ) { var targets = jQuery( target ); return this.filter(function() { for ( var i = 0, l = targets.length; i < l; i++ ) { if ( jQuery.contains( this, targets[i] ) ) { return true; } } }); }, not: function( selector ) { return this.pushStack( winnow(this, selector, false), "not", selector); }, filter: function( selector ) { return this.pushStack( winnow(this, selector, true), "filter", selector ); }, is: function( selector ) { return !!selector && jQuery.filter( selector, this ).length > 0; }, closest: function( selectors, context ) { var ret = [], i, l, cur = this[0]; if ( jQuery.isArray( selectors ) ) { var match, selector, matches = {}, level = 1; if ( cur && selectors.length ) { for ( i = 0, l = selectors.length; i < l; i++ ) { selector = selectors[i]; if ( !matches[selector] ) { matches[selector] = jQuery.expr.match.POS.test( selector ) ? jQuery( selector, context || this.context ) : selector; } } while ( cur && cur.ownerDocument && cur !== context ) { for ( selector in matches ) { match = matches[selector]; if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) { ret.push({ selector: selector, elem: cur, level: level }); } } cur = cur.parentNode; level++; } } return ret; } var pos = POS.test( selectors ) ? jQuery( selectors, context || this.context ) : null; for ( i = 0, l = this.length; i < l; i++ ) { cur = this[i]; while ( cur ) { if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { ret.push( cur ); break; } else { cur = cur.parentNode; if ( !cur || !cur.ownerDocument || cur === context ) { break; } } } } ret = ret.length > 1 ? jQuery.unique(ret) : ret; return this.pushStack( ret, "closest", selectors ); }, // Determine the position of an element within // the matched set of elements index: function( elem ) { if ( !elem || typeof elem === "string" ) { return jQuery.inArray( this[0], // If it receives a string, the selector is used // If it receives nothing, the siblings are used elem ? jQuery( elem ) : this.parent().children() ); } // Locate the position of the desired element return jQuery.inArray( // If it receives a jQuery object, the first element is used elem.jquery ? elem[0] : elem, this ); }, add: function( selector, context ) { var set = typeof selector === "string" ? jQuery( selector, context ) : jQuery.makeArray( selector ), all = jQuery.merge( this.get(), set ); return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? all : jQuery.unique( all ) ); }, andSelf: function() { return this.add( this.prevObject ); } }); // A painfully simple check to see if an element is disconnected // from a document (should be improved, where feasible). function isDisconnected( node ) { return !node || !node.parentNode || node.parentNode.nodeType === 11; } jQuery.each({ parent: function( elem ) { var parent = elem.parentNode; return parent && parent.nodeType !== 11 ? parent : null; }, parents: function( elem ) { return jQuery.dir( elem, "parentNode" ); }, parentsUntil: function( elem, i, until ) { return jQuery.dir( elem, "parentNode", until ); }, next: function( elem ) { return jQuery.nth( elem, 2, "nextSibling" ); }, prev: function( elem ) { return jQuery.nth( elem, 2, "previousSibling" ); }, nextAll: function( elem ) { return jQuery.dir( elem, "nextSibling" ); }, prevAll: function( elem ) { return jQuery.dir( elem, "previousSibling" ); }, nextUntil: function( elem, i, until ) { return jQuery.dir( elem, "nextSibling", until ); }, prevUntil: function( elem, i, until ) { return jQuery.dir( elem, "previousSibling", until ); }, siblings: function( elem ) { return jQuery.sibling( elem.parentNode.firstChild, elem ); }, children: function( elem ) { return jQuery.sibling( elem.firstChild ); }, contents: function( elem ) { return jQuery.nodeName( elem, "iframe" ) ? elem.contentDocument || elem.contentWindow.document : jQuery.makeArray( elem.childNodes ); } }, function( name, fn ) { jQuery.fn[ name ] = function( until, selector ) { var ret = jQuery.map( this, fn, until ), // The variable 'args' was introduced in // https://github.com/jquery/jquery/commit/52a0238 // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed. // http://code.google.com/p/v8/issues/detail?id=1050 args = slice.call(arguments); if ( !runtil.test( name ) ) { selector = until; } if ( selector && typeof selector === "string" ) { ret = jQuery.filter( selector, ret ); } ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { ret = ret.reverse(); } return this.pushStack( ret, name, args.join(",") ); }; }); jQuery.extend({ filter: function( expr, elems, not ) { if ( not ) { expr = ":not(" + expr + ")"; } return elems.length === 1 ? jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : jQuery.find.matches(expr, elems); }, dir: function( elem, dir, until ) { var matched = [], cur = elem[ dir ]; while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { if ( cur.nodeType === 1 ) { matched.push( cur ); } cur = cur[dir]; } return matched; }, nth: function( cur, result, dir, elem ) { result = result || 1; var num = 0; for ( ; cur; cur = cur[dir] ) { if ( cur.nodeType === 1 && ++num === result ) { break; } } return cur; }, sibling: function( n, elem ) { var r = []; for ( ; n; n = n.nextSibling ) { if ( n.nodeType === 1 && n !== elem ) { r.push( n ); } } return r; } }); // Implement the identical functionality for filter and not function winnow( elements, qualifier, keep ) { if ( jQuery.isFunction( qualifier ) ) { return jQuery.grep(elements, function( elem, i ) { var retVal = !!qualifier.call( elem, i, elem ); return retVal === keep; }); } else if ( qualifier.nodeType ) { return jQuery.grep(elements, function( elem, i ) { return (elem === qualifier) === keep; }); } else if ( typeof qualifier === "string" ) { var filtered = jQuery.grep(elements, function( elem ) { return elem.nodeType === 1; }); if ( isSimple.test( qualifier ) ) { return jQuery.filter(qualifier, filtered, !keep); } else { qualifier = jQuery.filter( qualifier, filtered ); } } return jQuery.grep(elements, function( elem, i ) { return (jQuery.inArray( elem, qualifier ) >= 0) === keep; }); } var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, rleadingWhitespace = /^\s+/, rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, rtagName = /<([\w:]+)/, rtbody = /", "" ], legend: [ 1, "
      ", "
      " ], thead: [ 1, "", "
      " ], tr: [ 2, "", "
      " ], td: [ 3, "", "
      " ], col: [ 2, "", "
      " ], area: [ 1, "", "" ], _default: [ 0, "", "" ] }; wrapMap.optgroup = wrapMap.option; wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; wrapMap.th = wrapMap.td; // IE can't serialize and

      Class: DataTable

      DataTables v1.9.4 documentation
      new DataTable(oInit)

      DataTables is a plug-in for the jQuery Javascript library. It is a highly flexible tool, based upon the foundations of progressive enhancement, which will add advanced interaction controls to any HTML table. For a full list of features please refer to DataTables.net.

      Note that the DataTable object is not a global variable but is aliased to jQuery.fn.DataTable and jQuery.fn.dataTable through which it may be accessed.

      Constructor

      Parameters:
      Name Type Attributes Default Description
      1
      oInitobjectOptional{}

      Configuration object for DataTables. Options are defined by DataTable.defaults

      Examples:
         // Basic initialisation
         $(document).ready( function {
           $('#example').dataTable();
         } );
       
       
         // Initialisation with configuration options - in this case, disable
         // pagination and sorting.
         $(document).ready( function {
           $('#example').dataTable( {
             "bPaginate": false,
             "bSort": false 
           } );
         } );

      Requires

      • module:jQuery

      Summary

      Namespaces

      defaults

      Initialisation options that can be given to DataTables at initialisation time.

      ext

      Extension object for DataTables that is used to provide all extension options. [...]

      models

      Object models container, for the various models that DataTables has available to it. These models define the objects that are used to hold the active state and configuration of the table.

      oApi

      Reference to internal functions for use by plug-in developers. Note that these methods are references to internal functions and are considered to be private. If you use these methods, be aware that they are liable to change between versions (check the upgrade notes).

      Properties - static

      <static> version :string

      Version string for plug-ins to check compatibility. Allowed format is a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and e are optional

      Methods - instance

      $(sSelector, oOpts) → {object}

      Perform a jQuery selector action on the table's TR elements (from the tbody) and return the resulting jQuery object.

      _(sSelector, oOpts) → {array}

      Almost identical to $ in operation, but in this case returns the data for the matched rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes rather than any descendants, so the data can be obtained for the row/cell. If matching rows are found, the data returned is the original data array/object that was used to
      create the row (or a generated array if from a DOM source). [...]

      fnAddData(mData, bRedraw) → {array}

      Add a single new row or multiple rows of data to the table. Please note that this is suitable for client-side processing only - if you are using server-side processing (i.e. "bServerSide": true), then to add data, you must add it to the data source, i.e. the server-side, through an Ajax call.

      fnAdjustColumnSizing(bRedraw)

      This function will make DataTables recalculate the column sizes, based on the data contained in the table and the sizes applied to the columns (in the DOM, CSS or through the sWidth parameter). This can be useful when the width of the table's parent element changes (for example a window resize).

      fnClearTable(bRedraw)

      Quickly and simply clear a table

      fnClose(nTr) → {int}

      The exact opposite of 'opening' a row, this function will close any rows which are currently 'open'.

      fnDeleteRow(mTarget, fnCallBack, bRedraw) → {array}

      Remove a row for the table

      fnDestroy(bRemove)

      Restore the table to it's original state in the DOM by removing all of DataTables enhancements, alterations to the DOM structure of the table and event listeners.

      fnDraw(bComplete)

      Redraw the table

      fnFilter(sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive)

      Filter the input based on data

      fnGetData(mRow, iCol) → {array|object|string}

      Get the data for the whole table, an individual row or an individual cell based on the provided parameters.

      fnGetNodes(iRow) → {array|node}

      Get an array of the TR nodes that are used in the table's body. Note that you will typically want to use the '$' API method in preference to this as it is more flexible.

      fnGetPosition(nNode) → {int}

      Get the array indexes of a particular cell from it's DOM element and column index including hidden columns

      fnIsOpen(nTr) → {boolean}

      Check to see if a row is 'open' or not.

      fnOpen(nTr, mHtml, sClass) → {node}

      This function will place a new row directly after a row which is currently on display on the page, with the HTML contents that is passed into the function. This can be used, for example, to ask for confirmation that a particular record should be deleted.

      fnPageChange(mAction, bRedraw)

      Change the pagination - provides the internal logic for pagination in a simple API function. With this function you can have a DataTables table go to the next, previous, first or last pages.

      fnSetColumnVis(iCol, bShow, bRedraw)

      Show a particular column

      fnSettings() → {object}

      Get the settings for a particular table for external manipulation

      fnSort(iCol)

      Sort the table by a particular column

      fnSortListener(nNode, iColumn, fnCallback)

      Attach a sort listener to an element for a given column

      fnUpdate(mData, mRow, iColumn, bRedraw, bAction) → {int}

      Update a table cell or row - this method will accept either a single value to update the cell with, an array of values with one element for each column or an object in the same format as the original data source. The function is self-referencing in order to make the multi column updates easier.

      fnVersionCheck(sVersion) → {boolean}

      Provide a common method for plug-ins to check the version of DataTables being used, in order to ensure compatibility.

      Methods - static

      <static> fnIsDataTable(nTable) → {boolean}

      Check if a TABLE node is a DataTable table already or not.

      <static> fnTables(bVisible) → {array}

      Get all DataTable tables that have been initialised - optionally you can select to get only currently visible tables.

      <static> fnVersionCheck(sVersion) → {boolean}

      Provide a common method for plug-ins to check the version of DataTables being used, in order to ensure compatibility.

      Events

      destroy

      Destroy event, fired when the DataTable is destroyed by calling fnDestroy or passing the bDestroy:true parameter in the initialisation object. This can be used to remove bound events, added DOM nodes, etc.

      draw

      Draw event, fired whenever the table is redrawn on the page, at the same point as fnDrawCallback. This may be useful for binding events or performing calculations when the table is altered at all.

      filter

      Filter event, fired when the filtering applied to the table (using the build in global global filter, or column filters) is altered.

      init

      DataTables initialisation complete event, fired when the table is fully drawn, including Ajax data loaded, if Ajax data is required.

      page

      Page change event, fired when the paging of the table is altered.

      processing

      Processing event, fired when DataTables is doing some kind of processing (be it, sort, filter or anything else). Can be used to indicate to the end user that there is something happening, or that something has finished.

      sort

      Sort event, fired when the sorting applied to the table is altered.

      stateLoaded

      State loaded event, fired when state has been loaded from stored data and the settings object has been modified by the loaded data.

      stateLoadParams

      State load event, fired when the table is loading state from the stored data, but prior to the settings object being modified by the saved state - allowing modification of the saved state is required or loading of state for a plug-in.

      stateSaveParams

      State save event, fired when the table has changed state a new state save is required. This method allows modification of the state saving object prior to actually doing the save, including addition or other state properties (for plug-ins) or modification of a DataTables core property.

      xhr

      Ajax (XHR) event, fired whenever an Ajax request is completed from a request to made to the server for new data (note that this trigger is called in fnServerData, if you override fnServerData and which to use this event, you need to trigger it in you success function).

      Details

      Properties - static

      <static> version :string

      Version string for plug-ins to check compatibility. Allowed format is a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and e are optional

      Methods - instance

      $(sSelector, oOpts) → {object}

      Perform a jQuery selector action on the table's TR elements (from the tbody) and return the resulting jQuery object.

      Parameters:
      Name Type Attributes Default Description
      1
      sSelectorstring | node | jQuery

      jQuery selector or node collection to act on

      2
      oOptsobjectOptional

      Optional parameters for modifying the rows to be included

      oOpts.filterstring<optional>
      none

      Select TR elements that meet the current filter criterion ("applied") or all TR elements (i.e. no filter).

      oOpts.orderstring<optional>
      current

      Order of the TR elements in the processed array. Can be either 'current', whereby the current sorting of the table is used, or 'original' whereby the original order the data was read into the table is used.

      oOpts.pagestring<optional>
      all

      Limit the selection to the currently displayed page ("current") or not ("all"). If 'current' is given, then order is assumed to be 'current' and filter is 'applied', regardless of what they might be given as.

      Returns:

      jQuery object, filtered by the given selector.

      Examples:
         $(document).ready(function() {
           var oTable = $('#example').dataTable();
      
           // Highlight every second row
           oTable.$('tr:odd').css('backgroundColor', 'blue');
         } );
      
       
         $(document).ready(function() {
           var oTable = $('#example').dataTable();
      
           // Filter to rows with 'Webkit' in them, add a background colour and then
           // remove the filter, thus highlighting the 'Webkit' rows only.
           oTable.fnFilter('Webkit');
           oTable.$('tr', {"filter": "applied"}).css('backgroundColor', 'blue');
           oTable.fnFilter('');
         } );
      _(sSelector, oOpts) → {array}

      Almost identical to $ in operation, but in this case returns the data for the matched rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes rather than any descendants, so the data can be obtained for the row/cell. If matching rows are found, the data returned is the original data array/object that was used to
      create the row (or a generated array if from a DOM source).

      This method is often useful in-combination with $ where both functions are given the same parameters and the array indexes will match identically.

      Parameters:
      Name Type Attributes Default Description
      1
      sSelectorstring | node | jQuery

      jQuery selector or node collection to act on

      2
      oOptsobjectOptional

      Optional parameters for modifying the rows to be included

      oOpts.filterstring<optional>
      none

      Select elements that meet the current filter criterion ("applied") or all elements (i.e. no filter).

      oOpts.orderstring<optional>
      current

      Order of the data in the processed array. Can be either 'current', whereby the current sorting of the table is used, or 'original' whereby the original order the data was read into the table is used.

      oOpts.pagestring<optional>
      all

      Limit the selection to the currently displayed page ("current") or not ("all"). If 'current' is given, then order is assumed to be 'current' and filter is 'applied', regardless of what they might be given as.

      Returns:

      Data for the matched elements. If any elements, as a result of the selector, were not TR, TD or TH elements in the DataTable, they will have a null entry in the array.

      Examples:
         $(document).ready(function() {
           var oTable = $('#example').dataTable();
      
           // Get the data from the first row in the table
           var data = oTable._('tr:first');
      
           // Do something useful with the data
           alert( "First cell is: "+data[0] );
         } );
      
       
         $(document).ready(function() {
           var oTable = $('#example').dataTable();
      
           // Filter to 'Webkit' and get all data for 
           oTable.fnFilter('Webkit');
           var data = oTable._('tr', {"filter": "applied"});
           
           // Do something with the data
           alert( data.length+" rows matched the filter" );
         } );
      fnAddData(mData, bRedraw) → {array}

      Add a single new row or multiple rows of data to the table. Please note that this is suitable for client-side processing only - if you are using server-side processing (i.e. "bServerSide": true), then to add data, you must add it to the data source, i.e. the server-side, through an Ajax call.

      Parameters:
      Name Type Attributes Default Description
      1
      mDataarray | object

      The data to be added to the table. This can be:

      • 1D array of data - add a single row with the data provided
      • 2D array of arrays - add multiple rows in a single call
      • object - data object when using mData
      • array of objects - multiple data objects when using mData

      2
      bRedrawboolOptionaltrue

      redraw the table or not

      Returns:

      An array of integers, representing the list of indexes in aoData (DataTable.models.oSettings) that have been added to the table.

      Example:
         // Global var for counter
         var giCount = 2;
         
         $(document).ready(function() {
           $('#example').dataTable();
         } );
         
         function fnClickAddRow() {
           $('#example').dataTable().fnAddData( [
             giCount+".1",
             giCount+".2",
             giCount+".3",
             giCount+".4" ]
           );
             
           giCount++;
         }
      fnAdjustColumnSizing(bRedraw)

      This function will make DataTables recalculate the column sizes, based on the data contained in the table and the sizes applied to the columns (in the DOM, CSS or through the sWidth parameter). This can be useful when the width of the table's parent element changes (for example a window resize).

      Parameters:
      Name Type Attributes Default Description
      1
      bRedrawbooleanOptionaltrue

      Redraw the table or not, you will typically want to

      Example:
         $(document).ready(function() {
           var oTable = $('#example').dataTable( {
             "sScrollY": "200px",
             "bPaginate": false
           } );
           
           $(window).bind('resize', function () {
             oTable.fnAdjustColumnSizing();
           } );
         } );
      fnClearTable(bRedraw)

      Quickly and simply clear a table

      Parameters:
      Name Type Attributes Default Description
      1
      bRedrawboolOptionaltrue

      redraw the table or not

      Example:
         $(document).ready(function() {
           var oTable = $('#example').dataTable();
           
           // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...)
           oTable.fnClearTable();
         } );
      fnClose(nTr) → {int}

      The exact opposite of 'opening' a row, this function will close any rows which are currently 'open'.

      Parameters:
      Name Type Attributes Default Description
      1
      nTrnode

      the table row to 'close'

      Returns:

      0 on success, or 1 if failed (can't find the row)

      Example:
         $(document).ready(function() {
           var oTable;
           
           // 'open' an information row when a row is clicked on
           $('#example tbody tr').click( function () {
             if ( oTable.fnIsOpen(this) ) {
               oTable.fnClose( this );
             } else {
               oTable.fnOpen( this, "Temporary row opened", "info_row" );
             }
           } );
           
           oTable = $('#example').dataTable();
         } );
      fnDeleteRow(mTarget, fnCallBack, bRedraw) → {array}

      Remove a row for the table

      Parameters:
      Name Type Attributes Default Description
      1
      mTargetmixed

      The index of the row from aoData to be deleted, or the TR element you want to delete

      2
      fnCallBackfunction | nullOptional

      Callback function

      3
      bRedrawboolOptionaltrue

      Redraw the table or not

      Returns:

      The row that was deleted

      Example:
         $(document).ready(function() {
           var oTable = $('#example').dataTable();
           
           // Immediately remove the first row
           oTable.fnDeleteRow( 0 );
         } );
      fnDestroy(bRemove)

      Restore the table to it's original state in the DOM by removing all of DataTables enhancements, alterations to the DOM structure of the table and event listeners.

      Parameters:
      Name Type Attributes Default Description
      1
      bRemovebooleanOptionalfalse

      Completely remove the table from the DOM

      Example:
         $(document).ready(function() {
           // This example is fairly pointless in reality, but shows how fnDestroy can be used
           var oTable = $('#example').dataTable();
           oTable.fnDestroy();
         } );
      fnDraw(bComplete)

      Redraw the table

      Parameters:
      Name Type Attributes Default Description
      1
      bCompleteboolOptionaltrue

      Re-filter and resort (if enabled) the table before the draw.

      Example:
         $(document).ready(function() {
           var oTable = $('#example').dataTable();
           
           // Re-draw the table - you wouldn't want to do it here, but it's an example :-)
           oTable.fnDraw();
         } );
      fnFilter(sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive)

      Filter the input based on data

      Parameters:
      Name Type Attributes Default Description
      1
      sInputstring

      String to filter the table on

      2
      iColumnint | nullOptional

      Column to limit filtering to

      3
      bRegexboolOptionalfalse

      Treat as regular expression or not

      4
      bSmartboolOptionaltrue

      Perform smart filtering or not

      5
      bShowGlobalboolOptionaltrue

      Show the input global filter in it's input box(es)

      6
      bCaseInsensitiveboolOptionaltrue

      Do case-insensitive matching (true) or not (false)

      Example:
         $(document).ready(function() {
           var oTable = $('#example').dataTable();
           
           // Sometime later - filter...
           oTable.fnFilter( 'test string' );
         } );
      fnGetData(mRow, iCol) → {array|object|string}

      Get the data for the whole table, an individual row or an individual cell based on the provided parameters.

      Parameters:
      Name Type Attributes Default Description
      1
      mRowint | nodeOptional

      A TR row node, TD/TH cell node or an integer. If given as a TR node then the data source for the whole row will be returned. If given as a TD/TH cell node then iCol will be automatically calculated and the data for the cell returned. If given as an integer, then this is treated as the aoData internal data index for the row (see fnGetPosition) and the data for that row used.

      2
      iColintOptional

      Optional column index that you want the data of.

      Returns:

      If mRow is undefined, then the data for all rows is returned. If mRow is defined, just data for that row, and is iCol is defined, only data for the designated cell is returned.

      Examples:
         // Row data
         $(document).ready(function() {
           oTable = $('#example').dataTable();
      
           oTable.$('tr').click( function () {
             var data = oTable.fnGetData( this );
             // ... do something with the array / object of data for the row
           } );
         } );
      
       
         // Individual cell data
         $(document).ready(function() {
           oTable = $('#example').dataTable();
      
           oTable.$('td').click( function () {
             var sData = oTable.fnGetData( this );
             alert( 'The cell clicked on had the value of '+sData );
           } );
         } );
      fnGetNodes(iRow) → {array|node}

      Get an array of the TR nodes that are used in the table's body. Note that you will typically want to use the '$' API method in preference to this as it is more flexible.

      Parameters:
      Name Type Attributes Default Description
      1
      iRowintOptional

      Optional row index for the TR element you want

      Returns:

      If iRow is undefined, returns an array of all TR elements in the table's body, or iRow is defined, just the TR element requested.

      Example:
         $(document).ready(function() {
           var oTable = $('#example').dataTable();
           
           // Get the nodes from the table
           var nNodes = oTable.fnGetNodes( );
         } );
      fnGetPosition(nNode) → {int}

      Get the array indexes of a particular cell from it's DOM element and column index including hidden columns

      Parameters:
      Name Type Attributes Default Description
      1
      nNodenode

      this can either be a TR, TD or TH in the table's body

      Returns:

      If nNode is given as a TR, then a single index is returned, or if given as a cell, an array of [row index, column index (visible), column index (all)] is given.

      Example:
         $(document).ready(function() {
           $('#example tbody td').click( function () {
             // Get the position of the current data from the node
             var aPos = oTable.fnGetPosition( this );
             
             // Get the data array for this row
             var aData = oTable.fnGetData( aPos[0] );
             
             // Update the data array and return the value
             aData[ aPos[1] ] = 'clicked';
             this.innerHTML = 'clicked';
           } );
           
           // Init DataTables
           oTable = $('#example').dataTable();
         } );
      fnIsOpen(nTr) → {boolean}

      Check to see if a row is 'open' or not.

      Parameters:
      Name Type Attributes Default Description
      1
      nTrnode

      the table row to check

      Returns:

      true if the row is currently open, false otherwise

      Example:
         $(document).ready(function() {
           var oTable;
           
           // 'open' an information row when a row is clicked on
           $('#example tbody tr').click( function () {
             if ( oTable.fnIsOpen(this) ) {
               oTable.fnClose( this );
             } else {
               oTable.fnOpen( this, "Temporary row opened", "info_row" );
             }
           } );
           
           oTable = $('#example').dataTable();
         } );
      fnOpen(nTr, mHtml, sClass) → {node}

      This function will place a new row directly after a row which is currently on display on the page, with the HTML contents that is passed into the function. This can be used, for example, to ask for confirmation that a particular record should be deleted.

      Parameters:
      Name Type Attributes Default Description
      1
      nTrnode

      The table row to 'open'

      2
      mHtmlstring | node | jQuery

      The HTML to put into the row

      3
      sClassstring

      Class to give the new TD cell

      Returns:

      The row opened. Note that if the table row passed in as the first parameter, is not found in the table, this method will silently return.

      Example:
         $(document).ready(function() {
           var oTable;
           
           // 'open' an information row when a row is clicked on
           $('#example tbody tr').click( function () {
             if ( oTable.fnIsOpen(this) ) {
               oTable.fnClose( this );
             } else {
               oTable.fnOpen( this, "Temporary row opened", "info_row" );
             }
           } );
           
           oTable = $('#example').dataTable();
         } );
      fnPageChange(mAction, bRedraw)

      Change the pagination - provides the internal logic for pagination in a simple API function. With this function you can have a DataTables table go to the next, previous, first or last pages.

      Parameters:
      Name Type Attributes Default Description
      1
      mActionstring | int

      Paging action to take: "first", "previous", "next" or "last" or page number to jump to (integer), note that page 0 is the first page.

      2
      bRedrawboolOptionaltrue

      Redraw the table or not

      Example:
         $(document).ready(function() {
           var oTable = $('#example').dataTable();
           oTable.fnPageChange( 'next' );
         } );
      fnSetColumnVis(iCol, bShow, bRedraw)

      Show a particular column

      Parameters:
      Name Type Attributes Default Description
      1
      iColint

      The column whose display should be changed

      2
      bShowbool

      Show (true) or hide (false) the column

      3
      bRedrawboolOptionaltrue

      Redraw the table or not

      Example:
         $(document).ready(function() {
           var oTable = $('#example').dataTable();
           
           // Hide the second column after initialisation
           oTable.fnSetColumnVis( 1, false );
         } );
      fnSettings() → {object}

      Get the settings for a particular table for external manipulation

      Returns:

      DataTables settings object. See DataTable.models.oSettings

      Example:
         $(document).ready(function() {
           var oTable = $('#example').dataTable();
           var oSettings = oTable.fnSettings();
           
           // Show an example parameter from the settings
           alert( oSettings._iDisplayStart );
         } );
      fnSort(iCol)

      Sort the table by a particular column

      Parameters:
      Name Type Attributes Default Description
      1
      iColint

      the data index to sort on. Note that this will not match the 'display index' if you have hidden data entries

      Example:
         $(document).ready(function() {
           var oTable = $('#example').dataTable();
           
           // Sort immediately with columns 0 and 1
           oTable.fnSort( [ [0,'asc'], [1,'asc'] ] );
         } );
      fnSortListener(nNode, iColumn, fnCallback)

      Attach a sort listener to an element for a given column

      Parameters:
      Name Type Attributes Default Description
      1
      nNodenode

      the element to attach the sort listener to

      2
      iColumnint

      the column that a click on this node will sort on

      3
      fnCallbackfunctionOptional

      callback function when sort is run

      Example:
         $(document).ready(function() {
           var oTable = $('#example').dataTable();
           
           // Sort on column 1, when 'sorter' is clicked on
           oTable.fnSortListener( document.getElementById('sorter'), 1 );
         } );
      fnUpdate(mData, mRow, iColumn, bRedraw, bAction) → {int}

      Update a table cell or row - this method will accept either a single value to update the cell with, an array of values with one element for each column or an object in the same format as the original data source. The function is self-referencing in order to make the multi column updates easier.

      Parameters:
      Name Type Attributes Default Description
      1
      mDataobject | array | string

      Data to update the cell/row with

      2
      mRownode | int

      TR element you want to update or the aoData index

      3
      iColumnintOptional

      The column to update (not used of mData is an array or object)

      4
      bRedrawboolOptionaltrue

      Redraw the table or not

      5
      bActionboolOptionaltrue

      Perform pre-draw actions or not

      Returns:

      0 on success, 1 on error

      Example:
         $(document).ready(function() {
           var oTable = $('#example').dataTable();
           oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell
           oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], 1, 0 ); // Row
         } );
      fnVersionCheck(sVersion) → {boolean}

      Provide a common method for plug-ins to check the version of DataTables being used, in order to ensure compatibility.

      Parameters:
      Name Type Attributes Default Description
      1
      sVersionstring

      Version string to check for, in the format "X.Y.Z". Note that the formats "X" and "X.Y" are also acceptable.

      Returns:

      true if this version of DataTables is greater or equal to the required version, or false if this version of DataTales is not suitable

      Example:
         $(document).ready(function() {
           var oTable = $('#example').dataTable();
           alert( oTable.fnVersionCheck( '1.9.0' ) );
         } );

      Methods - static

      <static> fnIsDataTable(nTable) → {boolean}

      Check if a TABLE node is a DataTable table already or not.

      Parameters:
      Name Type Attributes Default Description
      1
      nTablenode

      The TABLE node to check if it is a DataTable or not (note that other node types can be passed in, but will always return false).

      Returns:

      true the table given is a DataTable, or false otherwise

      Example:
         var ex = document.getElementById('example');
         if ( ! $.fn.DataTable.fnIsDataTable( ex ) ) {
           $(ex).dataTable();
         }
      <static> fnTables(bVisible) → {array}

      Get all DataTable tables that have been initialised - optionally you can select to get only currently visible tables.

      Parameters:
      Name Type Attributes Default Description
      1
      bVisiblebooleanOptionalfalse

      Flag to indicate if you want all (default) or visible tables only.

      Returns:

      Array of TABLE nodes (not DataTable instances) which are DataTables

      Example:
         var table = $.fn.dataTable.fnTables(true);
         if ( table.length > 0 ) {
           $(table).dataTable().fnAdjustColumnSizing();
         }
      <static> fnVersionCheck(sVersion) → {boolean}

      Provide a common method for plug-ins to check the version of DataTables being used, in order to ensure compatibility.

      Parameters:
      Name Type Attributes Default Description
      1
      sVersionstring

      Version string to check for, in the format "X.Y.Z". Note that the formats "X" and "X.Y" are also acceptable.

      Returns:

      true if this version of DataTables is greater or equal to the required version, or false if this version of DataTales is not suitable

      Example:
         alert( $.fn.dataTable.fnVersionCheck( '1.9.0' ) );

      Events

      destroy

      Destroy event, fired when the DataTable is destroyed by calling fnDestroy or passing the bDestroy:true parameter in the initialisation object. This can be used to remove bound events, added DOM nodes, etc.

      Parameters:
      Name Type Attributes Default Description
      1
      eevent

      jQuery event object

      2
      oobject

      DataTables settings object DataTable.models.oSettings

      draw

      Draw event, fired whenever the table is redrawn on the page, at the same point as fnDrawCallback. This may be useful for binding events or performing calculations when the table is altered at all.

      Parameters:
      Name Type Attributes Default Description
      1
      eevent

      jQuery event object

      2
      oobject

      DataTables settings object DataTable.models.oSettings

      filter

      Filter event, fired when the filtering applied to the table (using the build in global global filter, or column filters) is altered.

      Parameters:
      Name Type Attributes Default Description
      1
      eevent

      jQuery event object

      2
      oobject

      DataTables settings object DataTable.models.oSettings

      init

      DataTables initialisation complete event, fired when the table is fully drawn, including Ajax data loaded, if Ajax data is required.

      Parameters:
      Name Type Attributes Default Description
      1
      eevent

      jQuery event object

      2
      oSettingsobject

      DataTables settings object

      3
      jsonobject

      The JSON object request from the server - only present if client-side Ajax sourced data is used

      page

      Page change event, fired when the paging of the table is altered.

      Parameters:
      Name Type Attributes Default Description
      1
      eevent

      jQuery event object

      2
      oobject

      DataTables settings object DataTable.models.oSettings

      processing

      Processing event, fired when DataTables is doing some kind of processing (be it, sort, filter or anything else). Can be used to indicate to the end user that there is something happening, or that something has finished.

      Parameters:
      Name Type Attributes Default Description
      1
      eevent

      jQuery event object

      2
      oSettingsobject

      DataTables settings object

      3
      bShowboolean

      Flag for if DataTables is doing processing or not

      sort

      Sort event, fired when the sorting applied to the table is altered.

      Parameters:
      Name Type Attributes Default Description
      1
      eevent

      jQuery event object

      2
      oobject

      DataTables settings object DataTable.models.oSettings

      stateLoaded

      State loaded event, fired when state has been loaded from stored data and the settings object has been modified by the loaded data.

      Parameters:
      Name Type Attributes Default Description
      1
      eevent

      jQuery event object

      2
      oSettingsobject

      DataTables settings object

      3
      jsonobject

      The saved state information

      stateLoadParams

      State load event, fired when the table is loading state from the stored data, but prior to the settings object being modified by the saved state - allowing modification of the saved state is required or loading of state for a plug-in.

      Parameters:
      Name Type Attributes Default Description
      1
      eevent

      jQuery event object

      2
      oSettingsobject

      DataTables settings object

      3
      jsonobject

      The saved state information

      stateSaveParams

      State save event, fired when the table has changed state a new state save is required. This method allows modification of the state saving object prior to actually doing the save, including addition or other state properties (for plug-ins) or modification of a DataTables core property.

      Parameters:
      Name Type Attributes Default Description
      1
      eevent

      jQuery event object

      2
      oSettingsobject

      DataTables settings object

      3
      jsonobject

      The state information to be saved

      xhr

      Ajax (XHR) event, fired whenever an Ajax request is completed from a request to made to the server for new data (note that this trigger is called in fnServerData, if you override fnServerData and which to use this event, you need to trigger it in you success function).

      Parameters:
      Name Type Attributes Default Description
      1
      eevent

      jQuery event object

      2
      oobject

      DataTables settings object DataTable.models.oSettings

      3
      jsonobject

      JSON returned from the server

      assets/plugins/DataTables/docs/DataTable.defaults.oLanguage.oAria.html000064400000014436152510440410021737 0ustar00 Namespace: oAria - documentation

      Namespace: oAria

      Ancestry: DataTable » .defaults » .oLanguage. » oAria

      DataTables v1.9.4 documentation

      Navigation

      Hiding private elements (toggle)
      Showing extended elements (toggle)

      Strings that are used for WAI-ARIA labels and controls only (these are not actually visible on the page, but will be read by screenreaders, and thus must be internationalised as well).

      Summary

      Properties - static

      <static> sSortAscending :string

      ARIA label that is added to the table headers when the column may be sorted ascending by activing the column (click or return when focused). Note that the column header is prefixed to this string.

      <static> sSortDescending :string

      ARIA label that is added to the table headers when the column may be sorted descending by activing the column (click or return when focused). Note that the column header is prefixed to this string.

      Details

      Properties - static

      <static> sSortAscending :string

      ARIA label that is added to the table headers when the column may be sorted ascending by activing the column (click or return when focused). Note that the column header is prefixed to this string.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "oLanguage": {
               "oAria": {
                 "sSortAscending": " - click/return to sort ascending"
               }
             }
           } );
         } );
      <static> sSortDescending :string

      ARIA label that is added to the table headers when the column may be sorted descending by activing the column (click or return when focused). Note that the column header is prefixed to this string.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "oLanguage": {
               "oAria": {
                 "sSortDescending": " - click/return to sort descending"
               }
             }
           } );
         } );
      assets/plugins/DataTables/docs/DataTable.models.oSearch.html000064400000015235152510440410020041 0ustar00 Namespace: oSearch - documentation

      Namespace: oSearch

      Ancestry: DataTable » .models. » oSearch

      DataTables v1.9.4 documentation

      Navigation

      Hiding private elements (toggle)
      Showing extended elements (toggle)

      Template object for the way in which DataTables holds information about search information for the global filter and individual column filters.

      Summary

      Properties - static

      <static> bCaseInsensitive :boolean

      Flag to indicate if the filtering should be case insensitive or not

      <static> bRegex :boolean

      Flag to indicate if the search term should be interpreted as a regular expression (true) or not (false) and therefore and special regex characters escaped.

      <static> bSmart :boolean

      Flag to indicate if DataTables is to use its smart filtering or not.

      <static> sSearch :string

      Applied search term

      Details

      Properties - static

      <static> bCaseInsensitive :boolean

      Flag to indicate if the filtering should be case insensitive or not

      <static> bRegex :boolean

      Flag to indicate if the search term should be interpreted as a regular expression (true) or not (false) and therefore and special regex characters escaped.

      <static> bSmart :boolean

      Flag to indicate if DataTables is to use its smart filtering or not.

      <static> sSearch :string

      Applied search term

      assets/plugins/DataTables/docs/DataTable.models.oRow.html000064400000012462152510440410017402 0ustar00 Namespace: oRow - documentation

      Namespace: oRow

      Ancestry: DataTable » .models. » oRow

      DataTables v1.9.4 documentation

      Navigation

      Hiding private elements (toggle)
      Showing extended elements (toggle)

      Template object for the way in which DataTables holds information about each individual row. This is the object format used for the settings aoData array.

      Summary

      Properties - static

      <static> nTr :node

      TR element for the row

      <static> _aData :array|object

      Data object from the original data source for the row. This is either an array if using the traditional form of DataTables, or an object if using mData options. The exact type will depend on the passed in data from the data source, or will be an array if using DOM a data source.

      Details

      Properties - static

      <static> nTr :node

      TR element for the row

      <static> _aData :array|object

      Data object from the original data source for the row. This is either an array if using the traditional form of DataTables, or an object if using mData options. The exact type will depend on the passed in data from the data source, or will be an array if using DOM a data source.

      assets/plugins/DataTables/docs/DataTable.models.ext.html000064400000120126152510440410017251 0ustar00 Namespace: ext - documentation

      Namespace: ext

      Ancestry: DataTable » .models. » ext

      DataTables v1.9.4 documentation

      Navigation

      Hiding private elements (toggle)
      Showing extended elements (toggle)

      DataTables extension options and plug-ins. This namespace acts as a collection "area" for plug-ins that can be used to extend the default DataTables behaviour - indeed many of the build in methods use this method to provide their own capabilities (sorting methods for example).

      Note that this namespace is aliased to jQuery.fn.dataTableExt so it can be readily accessed and modified by plug-ins.

      Summary

      Properties - static

      <static> afnFiltering :array

      Plug-in filtering functions - this method of filtering is complimentary to the default type based filtering, and a lot more comprehensive as it allows you complete control over the filtering logic. Each element in this array is a function (parameters described below) that is called for every row in the table, and your logic decides if it should be included in the filtered data set or not.

      • Function input parameters:
        • {object} DataTables settings object: see DataTable.models.oSettings.
        • {array|object} Data for the row to be processed (same as the original format that was passed in as the data source, or an array from a DOM data source
        • {int} Row index in aoData (DataTable.models.oSettings.aoData), which can be useful to retrieve the TR element if you need DOM interaction.
      • Function return:
        • {boolean} Include the row in the filtered result set (true) or not (false)

      <static> afnSortData :array

      Plug-in sorting functions - this method of sorting is complimentary to the default type based sorting that DataTables does automatically, allowing much greater control over the the data that is being used to sort a column. This is useful if you want to do sorting based on live data (for example the contents of an 'input' element) rather than just the static string that DataTables knows of. The way these plug-ins work is that you create an array of the values you wish to be sorted for the column in question and then return that array. Which pre-sorting function is run here depends on the sSortDataType parameter that is used for the column (if any). This is the corollary of ofnSearch for sort data.

      • Function input parameters:
      • Function return:
        • {array} Data for the column to be sorted upon
      [...]

      <static> aoFeatures :array

      Feature plug-ins - This is an array of objects which describe the feature plug-ins that are available to DataTables. These feature plug-ins are accessible through the sDom initialisation option. As such, each feature plug-in must describe a function that is used to initialise itself (fnInit), a character so the feature can be enabled by sDom (cFeature) and the name of the feature (sFeature). Thus the objects attached to this method must provide:

      • {function} fnInit Initialisation of the plug-in
        • Function input parameters:
        • Function return:
          • {node|null} The element which contains your feature. Note that the return may also be void if your plug-in does not require to inject any DOM elements into DataTables control (sDom) - for example this might be useful when developing a plug-in which allows table control via keyboard entry.
      • {character} cFeature Character that will be matched in sDom - case sensitive
      • {string} sFeature Feature name

      <static> aTypes :array

      Type detection plug-in functions - DataTables utilises types to define how sorting and filtering behave, and types can be either be defined by the developer (sType for the column) or they can be automatically detected by the methods in this array. The functions defined in the array are quite simple, taking a single parameter (the data to analyse) and returning the type if it is a known type, or null otherwise.

      • Function input parameters:
        • {*} Data from the column cell to be analysed
      • Function return:
        • {string|null} Data type detected, or null if unknown (and thus pass it on to the other type detection functions.

      <static> fnVersionCheck :function

      Provide a common method for plug-ins to check the version of DataTables being used, in order to ensure compatibility.

      <static> iApiIndex :int

      Index for what 'this' index API functions should use

      <static> oApi :object

      Container for all private functions in DataTables so they can be exposed externally

      <static> ofnSearch :object

      Pre-processing of filtering data plug-ins - When you assign the sType for a column (or have it automatically detected for you by DataTables or a type detection plug-in), you will typically be using this for custom sorting, but it can also be used to provide custom filtering by allowing you to pre-processing the data and returning the data in the format that should be filtered upon. This is done by adding functions this object with a parameter name which matches the sType for that target column. This is the corollary of afnSortData for filtering data.

      • Function input parameters:
        • {*} Data from the column cell to be prepared for filtering
      • Function return:
        • {string|null} Formatted string that will be used for the filtering.
      [...]

      <static> oJUIClasses :object

      Storage for the various classes that DataTables uses - jQuery UI suitable

      <static> oPagination :object

      Pagination plug-in methods - The style and controls of the pagination can significantly impact on how the end user interacts with the data in your table, and DataTables allows the addition of pagination controls by extending this object, which can then be enabled through the sPaginationType initialisation parameter. Each pagination type that is added is an object (the property name of which is what sPaginationType refers to) that has two properties, both methods that are used by DataTables to update the control's state.

      • fnInit - Initialisation of the paging controls. Called only during initialisation of the table. It is expected that this function will add the required DOM elements to the page for the paging controls to work. The element pointer 'oSettings.aanFeatures.p' array is provided by DataTables to contain the paging controls (note that this is a 2D array to allow for multiple instances of each DataTables DOM element). It is suggested that you add the controls to this element as children
        • Function input parameters:
          • {object} DataTables settings object: see DataTable.models.oSettings.
          • {node} Container into which the pagination controls must be inserted
          • {function} Draw callback function - whenever the controls cause a page change, this method must be called to redraw the table.
        • Function return:
          • No return required
      • fnInit - This function is called whenever the paging status of the table changes and is typically used to update classes and/or text of the paging controls to reflex the new status.
        • Function input parameters:
          • {object} DataTables settings object: see DataTable.models.oSettings.
          • {function} Draw callback function - in case you need to redraw the table again or attach new event listeners
        • Function return:
          • No return required

      <static> oSort :object

      Sorting plug-in methods - Sorting in DataTables is based on the detected type of the data column (you can add your own type detection functions, or override automatic detection using sType). With this specific type given to the column, DataTables will apply the required sort from the functions in the object. Each sort type must provide two mandatory methods, one each for ascending and descending sorting, and can optionally provide a pre-formatting method that will help speed up sorting by allowing DataTables to pre-format the sort data only once (rather than every time the actual sort functions are run). The two sorting functions are typical Javascript sort methods:

      • Function input parameters:
        • {} Data to compare to the second parameter
        • {} Data to compare to the first parameter
      • Function return:
        • {int} Sorting match: <0 if first parameter should be sorted lower than the second parameter, ===0 if the two parameters are equal and >0 if the first parameter should be sorted height than the second parameter.

      <static> oStdClasses :object

      Storage for the various classes that DataTables uses

      <static> sErrMode :string

      How should DataTables report an error. Can take the value 'alert' or 'throw'

      <static> sVersion :string

      Version string for plug-ins to check compatibility. Allowed format is a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and e are optional

      Details

      Properties - static

      <static> afnFiltering :array

      Plug-in filtering functions - this method of filtering is complimentary to the default type based filtering, and a lot more comprehensive as it allows you complete control over the filtering logic. Each element in this array is a function (parameters described below) that is called for every row in the table, and your logic decides if it should be included in the filtered data set or not.

      • Function input parameters:
        • {object} DataTables settings object: see DataTable.models.oSettings.
        • {array|object} Data for the row to be processed (same as the original format that was passed in as the data source, or an array from a DOM data source
        • {int} Row index in aoData (DataTable.models.oSettings.aoData), which can be useful to retrieve the TR element if you need DOM interaction.
      • Function return:
        • {boolean} Include the row in the filtered result set (true) or not (false)

      Example
         // The following example shows custom filtering being applied to the fourth column (i.e.
         // the aData[3] index) based on two input values from the end-user, matching the data in 
         // a certain range.
         $.fn.dataTableExt.afnFiltering.push(
           function( oSettings, aData, iDataIndex ) {
             var iMin = document.getElementById('min').value * 1;
             var iMax = document.getElementById('max').value * 1;
             var iVersion = aData[3] == "-" ? 0 : aData[3]*1;
             if ( iMin == "" && iMax == "" ) {
               return true;
             }
             else if ( iMin == "" && iVersion < iMax ) {
               return true;
             }
             else if ( iMin < iVersion && "" == iMax ) {
               return true;
             }
             else if ( iMin < iVersion && iVersion < iMax ) {
               return true;
             }
             return false;
           }
         );
      <static> afnSortData :array

      Plug-in sorting functions - this method of sorting is complimentary to the default type based sorting that DataTables does automatically, allowing much greater control over the the data that is being used to sort a column. This is useful if you want to do sorting based on live data (for example the contents of an 'input' element) rather than just the static string that DataTables knows of. The way these plug-ins work is that you create an array of the values you wish to be sorted for the column in question and then return that array. Which pre-sorting function is run here depends on the sSortDataType parameter that is used for the column (if any). This is the corollary of ofnSearch for sort data.

      • Function input parameters:
      • Function return:
        • {array} Data for the column to be sorted upon

      Note that as of v1.9, it is typically preferable to use mData to prepare data for the different uses that DataTables can put the data to. Specifically mData when used as a function will give you a 'type' (sorting, filtering etc) that you can use to prepare the data as required for the different types. As such, this method is deprecated.

      Deprecated
      Yes
      Example
         // Updating the cached sorting information with user entered values in HTML input elements
         jQuery.fn.dataTableExt.afnSortData['dom-text'] = function ( oSettings, iColumn )
         {
           var aData = [];
           $( 'td:eq('+iColumn+') input', oSettings.oApi._fnGetTrNodes(oSettings) ).each( function () {
             aData.push( this.value );
           } );
           return aData;
         }
      <static> aoFeatures :array

      Feature plug-ins - This is an array of objects which describe the feature plug-ins that are available to DataTables. These feature plug-ins are accessible through the sDom initialisation option. As such, each feature plug-in must describe a function that is used to initialise itself (fnInit), a character so the feature can be enabled by sDom (cFeature) and the name of the feature (sFeature). Thus the objects attached to this method must provide:

      • {function} fnInit Initialisation of the plug-in
        • Function input parameters:
        • Function return:
          • {node|null} The element which contains your feature. Note that the return may also be void if your plug-in does not require to inject any DOM elements into DataTables control (sDom) - for example this might be useful when developing a plug-in which allows table control via keyboard entry.
      • {character} cFeature Character that will be matched in sDom - case sensitive
      • {string} sFeature Feature name

      Example
         // How TableTools initialises itself.
         $.fn.dataTableExt.aoFeatures.push( {
           "fnInit": function( oSettings ) {
             return new TableTools( { "oDTSettings": oSettings } );
           },
           "cFeature": "T",
           "sFeature": "TableTools"
         } );
      <static> aTypes :array

      Type detection plug-in functions - DataTables utilises types to define how sorting and filtering behave, and types can be either be defined by the developer (sType for the column) or they can be automatically detected by the methods in this array. The functions defined in the array are quite simple, taking a single parameter (the data to analyse) and returning the type if it is a known type, or null otherwise.

      • Function input parameters:
        • {*} Data from the column cell to be analysed
      • Function return:
        • {string|null} Data type detected, or null if unknown (and thus pass it on to the other type detection functions.

      Example
         // Currency type detection plug-in:
         jQuery.fn.dataTableExt.aTypes.push(
           function ( sData ) {
             var sValidChars = "0123456789.-";
             var Char;
             
             // Check the numeric part
             for ( i=1 ; i
          
      <static> fnVersionCheck :function

      Provide a common method for plug-ins to check the version of DataTables being used, in order to ensure compatibility.

      Parameters:
      Name Type Attributes Default Description
      1
      sVersionstring

      Version string to check for, in the format "X.Y.Z". Note that the formats "X" and "X.Y" are also acceptable.

      Returns:

      true if this version of DataTables is greater or equal to the required version, or false if this version of DataTales is not suitable

      Example:
         $(document).ready(function() {
           var oTable = $('#example').dataTable();
           alert( oTable.fnVersionCheck( '1.9.0' ) );
         } );
      <static> iApiIndex :int

      Index for what 'this' index API functions should use

      <static> oApi :object

      Container for all private functions in DataTables so they can be exposed externally

      <static> ofnSearch :object

      Pre-processing of filtering data plug-ins - When you assign the sType for a column (or have it automatically detected for you by DataTables or a type detection plug-in), you will typically be using this for custom sorting, but it can also be used to provide custom filtering by allowing you to pre-processing the data and returning the data in the format that should be filtered upon. This is done by adding functions this object with a parameter name which matches the sType for that target column. This is the corollary of afnSortData for filtering data.

      • Function input parameters:
        • {*} Data from the column cell to be prepared for filtering
      • Function return:
        • {string|null} Formatted string that will be used for the filtering.

      Note that as of v1.9, it is typically preferable to use mData to prepare data for the different uses that DataTables can put the data to. Specifically mData when used as a function will give you a 'type' (sorting, filtering etc) that you can use to prepare the data as required for the different types. As such, this method is deprecated.

      Deprecated
      Yes
      Example
         $.fn.dataTableExt.ofnSearch['title-numeric'] = function ( sData ) {
           return sData.replace(/\n/g," ").replace( /<.*?>/g, "" );
         }
      <static> oJUIClasses :object

      Storage for the various classes that DataTables uses - jQuery UI suitable

      <static> oPagination :object

      Pagination plug-in methods - The style and controls of the pagination can significantly impact on how the end user interacts with the data in your table, and DataTables allows the addition of pagination controls by extending this object, which can then be enabled through the sPaginationType initialisation parameter. Each pagination type that is added is an object (the property name of which is what sPaginationType refers to) that has two properties, both methods that are used by DataTables to update the control's state.

      • fnInit - Initialisation of the paging controls. Called only during initialisation of the table. It is expected that this function will add the required DOM elements to the page for the paging controls to work. The element pointer 'oSettings.aanFeatures.p' array is provided by DataTables to contain the paging controls (note that this is a 2D array to allow for multiple instances of each DataTables DOM element). It is suggested that you add the controls to this element as children
        • Function input parameters:
          • {object} DataTables settings object: see DataTable.models.oSettings.
          • {node} Container into which the pagination controls must be inserted
          • {function} Draw callback function - whenever the controls cause a page change, this method must be called to redraw the table.
        • Function return:
          • No return required
      • fnInit - This function is called whenever the paging status of the table changes and is typically used to update classes and/or text of the paging controls to reflex the new status.
        • Function input parameters:
          • {object} DataTables settings object: see DataTable.models.oSettings.
          • {function} Draw callback function - in case you need to redraw the table again or attach new event listeners
        • Function return:
          • No return required

      Example
         $.fn.dataTableExt.oPagination.four_button = {
           "fnInit": function ( oSettings, nPaging, fnCallbackDraw ) {
             nFirst = document.createElement( 'span' );
             nPrevious = document.createElement( 'span' );
             nNext = document.createElement( 'span' );
             nLast = document.createElement( 'span' );
             
             nFirst.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sFirst ) );
             nPrevious.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sPrevious ) );
             nNext.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sNext ) );
             nLast.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sLast ) );
             
             nFirst.className = "paginate_button first";
             nPrevious.className = "paginate_button previous";
             nNext.className="paginate_button next";
             nLast.className = "paginate_button last";
             
             nPaging.appendChild( nFirst );
             nPaging.appendChild( nPrevious );
             nPaging.appendChild( nNext );
             nPaging.appendChild( nLast );
             
             $(nFirst).click( function () {
               oSettings.oApi._fnPageChange( oSettings, "first" );
               fnCallbackDraw( oSettings );
             } );
             
             $(nPrevious).click( function() {
               oSettings.oApi._fnPageChange( oSettings, "previous" );
               fnCallbackDraw( oSettings );
             } );
             
             $(nNext).click( function() {
               oSettings.oApi._fnPageChange( oSettings, "next" );
               fnCallbackDraw( oSettings );
             } );
             
             $(nLast).click( function() {
               oSettings.oApi._fnPageChange( oSettings, "last" );
               fnCallbackDraw( oSettings );
             } );
             
             $(nFirst).bind( 'selectstart', function () { return false; } );
             $(nPrevious).bind( 'selectstart', function () { return false; } );
             $(nNext).bind( 'selectstart', function () { return false; } );
             $(nLast).bind( 'selectstart', function () { return false; } );
           },
           
           "fnUpdate": function ( oSettings, fnCallbackDraw ) {
             if ( !oSettings.aanFeatures.p ) {
               return;
             }
             
             // Loop over each instance of the pager
             var an = oSettings.aanFeatures.p;
             for ( var i=0, iLen=an.length ; i
          
      <static> oSort :object

      Sorting plug-in methods - Sorting in DataTables is based on the detected type of the data column (you can add your own type detection functions, or override automatic detection using sType). With this specific type given to the column, DataTables will apply the required sort from the functions in the object. Each sort type must provide two mandatory methods, one each for ascending and descending sorting, and can optionally provide a pre-formatting method that will help speed up sorting by allowing DataTables to pre-format the sort data only once (rather than every time the actual sort functions are run). The two sorting functions are typical Javascript sort methods:

      • Function input parameters:
        • {} Data to compare to the second parameter
        • {} Data to compare to the first parameter
      • Function return:
        • {int} Sorting match: <0 if first parameter should be sorted lower than the second parameter, ===0 if the two parameters are equal and >0 if the first parameter should be sorted height than the second parameter.

      Examples
         // Case-sensitive string sorting, with no pre-formatting method
         $.extend( $.fn.dataTableExt.oSort, {
           "string-case-asc": function(x,y) {
             return ((x < y) ? -1 : ((x > y) ? 1 : 0));
           },
           "string-case-desc": function(x,y) {
             return ((x < y) ? 1 : ((x > y) ? -1 : 0));
           }
         } );
      
       
         // Case-insensitive string sorting, with pre-formatting
         $.extend( $.fn.dataTableExt.oSort, {
           "string-pre": function(x) {
             return x.toLowerCase();
           },
           "string-asc": function(x,y) {
             return ((x < y) ? -1 : ((x > y) ? 1 : 0));
           },
           "string-desc": function(x,y) {
             return ((x < y) ? 1 : ((x > y) ? -1 : 0));
           }
         } );
      <static> oStdClasses :object

      Storage for the various classes that DataTables uses

      <static> sErrMode :string

      How should DataTables report an error. Can take the value 'alert' or 'throw'

      <static> sVersion :string

      Version string for plug-ins to check compatibility. Allowed format is a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and e are optional

      assets/plugins/DataTables/docs/DataTable.defaults.html000064400000351671152510440410017011 0ustar00 Namespace: defaults - documentation

      Namespace: defaults

      Ancestry: DataTable. » defaults

      DataTables v1.9.4 documentation

      Navigation

      Hiding private elements (toggle)
      Showing extended elements (toggle)

      Initialisation options that can be given to DataTables at initialisation time.

      Summary

      Namespaces

      columns

      Column options that can be given to DataTables at initialisation time.

      oLanguage

      All strings that DataTables uses in the user interface that it creates are defined in this object, allowing you to modified them individually or completely replace them all as required.

      oSearch

      This parameter allows you to have define the global filtering state at initialisation time. As an object the "sSearch" parameter must be defined, but all other parameters are optional. When "bRegex" is true, the search string will be treated as a regular expression, when false (default) it will be treated as a straight string. When "bSmart" DataTables will use it's smart filtering methods (to word match at any point in the data), when false this will not be done.

      Properties - static

      <static> aaData :array

      An array of data to use for the table, passed in at initialisation which will be used in preference to any data which is already in the DOM. This is particularly useful for constructing tables purely in Javascript, for example with a custom Ajax call.

      <static> aaSorting :array

      If sorting is enabled, then DataTables will perform a first pass sort on initialisation. You can define which column(s) the sort is performed upon, and the sorting direction, with this variable. The aaSorting array should contain an array for each column to be sorted initially containing the column's index and a direction string ('asc' or 'desc').

      <static> aaSortingFixed :array

      This parameter is basically identical to the aaSorting parameter, but cannot be overridden by user interaction with the table. What this means is that you could have a column (visible or hidden) which the sorting will always be forced on first - any sorting after that (from the user) will then be performed as required. This can be useful for grouping rows together.

      <static> aLengthMenu :array

      This parameter allows you to readily specify the entries in the length drop down menu that DataTables shows when pagination is enabled. It can be either a 1D array of options which will be used for both the displayed option and the value, or a 2D array which will use the array in the first position as the value, and the array in the second position as the displayed options (useful for language strings such as 'All').

      <static> aoColumnDefs

      Very similar to aoColumns, aoColumnDefs allows you to target a specific column, multiple columns, or all columns, using the aTargets property of each object in the array. This allows great flexibility when creating tables, as the aoColumnDefs arrays can be of any length, targeting the columns you specifically want. aoColumnDefs may use any of the column options available: DataTable.defaults.columns, but it must have aTargets defined in each object in the array. Values in the aTargets array may be:

      • a string - class name will be matched on the TH for the column
      • 0 or a positive integer - column index counting from the left
      • a negative integer - column index counting from the right
      • the string "_all" - all columns (i.e. assign a default)

      <static> aoColumns

      The aoColumns option in the initialisation parameter allows you to define details about the way individual columns behave. For a full list of column options that can be set, please see DataTable.defaults.columns. Note that if you use aoColumns to define your columns, you must have an entry in the array for every single column that you have in your table (these can be null if you don't which to specify any options).

      <static> aoSearchCols :array

      Basically the same as oSearch, this parameter defines the individual column filtering state at initialisation time. The array must be of the same size as the number of columns, and each element be an object with the parameters "sSearch" and "bEscapeRegex" (the latter is optional). 'null' is also accepted and the default will be used.

      <static> asStripeClasses :array

      An array of CSS classes that should be applied to displayed rows. This array may be of any length, and DataTables will apply each class sequentially, looping when required.

      <static> bAutoWidth :boolean

      Enable or disable automatic column width calculation. This can be disabled as an optimisation (it takes some time to calculate the widths) if the tables widths are passed in using aoColumns.

      <static> bDeferRender :boolean

      Deferred rendering can provide DataTables with a huge speed boost when you are using an Ajax or JS data source for the table. This option, when set to true, will cause DataTables to defer the creation of the table elements for each row until they are needed for a draw - saving a significant amount of time.

      <static> bDestroy :boolean

      Replace a DataTable which matches the given selector and replace it with one which has the properties of the new initialisation object passed. If no table matches the selector, then the new DataTable will be constructed as per normal.

      <static> bFilter :boolean

      Enable or disable filtering of data. Filtering in DataTables is "smart" in that it allows the end user to input multiple words (space separated) and will match a row containing those words, even if not in the order that was specified (this allow matching across multiple columns). Note that if you wish to use filtering in DataTables this must remain 'true' - to remove the default filtering input box and retain filtering abilities, please use DataTable.defaults.sDom.

      <static> bInfo :boolean

      Enable or disable the table information display. This shows information about the data that is currently visible on the page, including information about filtered data if that action is being performed.

      <static> bJQueryUI :boolean

      Enable jQuery UI ThemeRoller support (required as ThemeRoller requires some slightly different and additional mark-up from what DataTables has traditionally used).

      <static> bLengthChange :boolean

      Allows the end user to select the size of a formatted page from a select menu (sizes are 10, 25, 50 and 100). Requires pagination (bPaginate).

      <static> bPaginate :boolean

      Enable or disable pagination.

      <static> bProcessing :boolean

      Enable or disable the display of a 'processing' indicator when the table is being processed (e.g. a sort). This is particularly useful for tables with large amounts of data where it can take a noticeable amount of time to sort the entries.

      <static> bRetrieve :boolean

      Retrieve the DataTables object for the given selector. Note that if the table has already been initialised, this parameter will cause DataTables to simply return the object that has already been set up - it will not take account of any changes you might have made to the initialisation object passed to DataTables (setting this parameter to true is an acknowledgement that you understand this). bDestroy can be used to reinitialise a table if you need.

      <static> bScrollAutoCss :boolean

      Indicate if DataTables should be allowed to set the padding / margin etc for the scrolling header elements or not. Typically you will want this.

      <static> bScrollCollapse :boolean

      When vertical (y) scrolling is enabled, DataTables will force the height of the table's viewport to the given height at all times (useful for layout). However, this can look odd when filtering data down to a small data set, and the footer is left "floating" further down. This parameter (when enabled) will cause DataTables to collapse the table's viewport down when the result set will fit within the given Y height.

      <static> bScrollInfinite :boolean

      Enable infinite scrolling for DataTables (to be used in combination with sScrollY). Infinite scrolling means that DataTables will continually load data as a user scrolls through a table, which is very useful for large dataset. This cannot be used with pagination, which is automatically disabled. Note - the Scroller extra for DataTables is recommended in in preference to this option.

      <static> bServerSide :boolean

      Configure DataTables to use server-side processing. Note that the sAjaxSource parameter must also be given in order to give DataTables a source to obtain the required data for each draw.

      <static> bSort :boolean

      Enable or disable sorting of columns. Sorting of individual columns can be disabled by the "bSortable" option for each column.

      <static> bSortCellsTop :boolean

      Allows control over whether DataTables should use the top (true) unique cell that is found for a single column, or the bottom (false - default). This is useful when using complex headers.

      <static> bSortClasses :boolean

      Enable or disable the addition of the classes 'sorting_1', 'sorting_2' and 'sorting_3' to the columns which are currently being sorted on. This is presented as a feature switch as it can increase processing time (while classes are removed and added) so for large data sets you might want to turn this off.

      <static> bStateSave :boolean

      Enable or disable state saving. When enabled a cookie will be used to save table display information such as pagination information, display length, filtering and sorting. As such when the end user reloads the page the display display will match what thy had previously set up.

      <static> fnCookieCallback :function

      Customise the cookie and / or the parameters being stored when using DataTables with state saving enabled. This function is called whenever the cookie is modified, and it expects a fully formed cookie string to be returned. Note that the data object passed in is a Javascript object which must be converted to a string (JSON.stringify for example).

      <static> fnCreatedRow :function

      This function is called when a TR element is created (and all TD child elements have been inserted), or registered if using a DOM source, allowing manipulation of the TR element (adding classes etc).

      <static> fnDrawCallback :function

      This function is called on every 'draw' event, and allows you to dynamically modify any aspect you want about the created DOM.

      <static> fnFooterCallback :function

      Identical to fnHeaderCallback() but for the table footer this function allows you to modify the table footer on every 'draw' even.

      <static> fnFormatNumber :function

      When rendering large numbers in the information element for the table (i.e. "Showing 1 to 10 of 57 entries") DataTables will render large numbers to have a comma separator for the 'thousands' units (e.g. 1 million is rendered as "1,000,000") to help readability for the end user. This function will override the default method DataTables uses.

      <static> fnHeaderCallback :function

      This function is called on every 'draw' event, and allows you to dynamically modify the header row. This can be used to calculate and display useful information about the table.

      <static> fnInfoCallback :function

      The information element can be used to convey information about the current state of the table. Although the internationalisation options presented by DataTables are quite capable of dealing with most customisations, there may be times where you wish to customise the string further. This callback allows you to do exactly that.

      <static> fnInitComplete :function

      Called when the table has been initialised. Normally DataTables will initialise sequentially and there will be no need for this function, however, this does not hold true when using external language information since that is obtained using an async XHR call.

      <static> fnPreDrawCallback :function

      Called at the very start of each table draw and can be used to cancel the draw by returning false, any other return (including undefined) results in the full draw occurring).

      <static> fnRowCallback :function

      This function allows you to 'post process' each row after it have been generated for each table draw, but before it is rendered on screen. This function might be used for setting the row class name etc.

      <static> fnServerData :function

      This parameter allows you to override the default function which obtains the data from the server ($.getJSON) so something more suitable for your application. For example you could use POST data, or pull information from a Gears or AIR database.

      <static> fnServerParams :function

      It is often useful to send extra data to the server when making an Ajax request - for example custom filtering information, and this callback function makes it trivial to send extra information to the server. The passed in parameter is the data set that has been constructed by DataTables, and you can add to this or modify it as you require.

      <static> fnStateLoad :function

      Load the table state. With this function you can define from where, and how, the state of a table is loaded. By default DataTables will load from its state saving cookie, but you might wish to use local storage (HTML5) or a server-side database.

      <static> fnStateLoaded :function

      Callback that is called when the state has been loaded from the state saving method and the DataTables settings object has been modified as a result of the loaded state.

      <static> fnStateLoadParams :function

      Callback which allows modification of the saved state prior to loading that state. This callback is called when the table is loading state from the stored data, but prior to the settings object being modified by the saved state. Note that for plug-in authors, you should use the 'stateLoadParams' event to load parameters for a plug-in.

      <static> fnStateSave :function

      Save the table state. This function allows you to define where and how the state information for the table is stored - by default it will use a cookie, but you might want to use local storage (HTML5) or a server-side database.

      <static> fnStateSaveParams :function

      Callback which allows modification of the state to be saved. Called when the table has changed state a new state save is required. This method allows modification of the state saving object prior to actually doing the save, including addition or other state properties or modification. Note that for plug-in authors, you should use the 'stateSaveParams' event to save parameters for a plug-in.

      <static> iCookieDuration :int

      Duration of the cookie which is used for storing session information. This value is given in seconds.

      <static> iDeferLoading :int|array

      When enabled DataTables will not make a request to the server for the first page draw - rather it will use the data already on the page (no sorting etc will be applied to it), thus saving on an XHR at load time. iDeferLoading is used to indicate that deferred loading is required, but it is also used to tell DataTables how many records there are in the full table (allowing the information element and pagination to be displayed correctly). In the case where a filtering is applied to the table on initial load, this can be indicated by giving the parameter as an array, where the first element is the number of records available after filtering and the second element is the number of records without filtering (allowing the table information element to be shown correctly).

      <static> iDisplayLength :int

      Number of rows to display on a single page when using pagination. If feature enabled (bLengthChange) then the end user will be able to override this to a custom setting using a pop-up menu.

      <static> iDisplayStart :int

      Define the starting point for data display when using DataTables with pagination. Note that this parameter is the number of records, rather than the page number, so if you have 10 records per page and want to start on the third page, it should be "20".

      <static> iScrollLoadGap :int

      The scroll gap is the amount of scrolling that is left to go before DataTables will load the next 'page' of data automatically. You typically want a gap which is big enough that the scrolling will be smooth for the user, while not so large that it will load more data than need.

      <static> iTabIndex :int

      By default DataTables allows keyboard navigation of the table (sorting, paging, and filtering) by adding a tabindex attribute to the required elements. This allows you to tab through the controls and press the enter key to activate them. The tabindex is default 0, meaning that the tab follows the flow of the document. You can overrule this using this parameter if you wish. Use a value of -1 to disable built-in keyboard navigation.

      <static> sAjaxDataProp :string

      By default DataTables will look for the property 'aaData' when obtaining data from an Ajax source or for server-side processing - this parameter allows that property to be changed. You can use Javascript dotted object notation to get a data source for multiple levels of nesting.

      <static> sAjaxSource :string

      You can instruct DataTables to load data from an external source using this parameter (use aData if you want to pass data in you already have). Simply provide a url a JSON object can be obtained from. This object must include the parameter 'aaData' which is the data source for the table.

      <static> sCookiePrefix :string

      This parameter can be used to override the default prefix that DataTables assigns to a cookie when state saving is enabled.

      <static> sDom :string

      This initialisation variable allows you to specify exactly where in the DOM you want DataTables to inject the various controls it adds to the page (for example you might want the pagination controls at the top of the table). DIV elements (with or without a custom class) can also be added to aid styling. The follow syntax is used:

      • The following options are allowed:
        • 'l' - Length changing
        • 'f' - Filtering input
        • 't' - The table!
        • 'i' - Information
        • 'p' - Pagination
        • 'r' - pRocessing
      • The following constants are allowed:
        • 'H' - jQueryUI theme "header" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')
        • 'F' - jQueryUI theme "footer" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')
      • The following syntax is expected:
        • '<' and '>' - div elements
        • '<"class" and '>' - div with a class
        • '<"#id" and '>' - div with an ID
      • Examples:
        • '<"wrapper"flipt>'
        • '<lf<t>ip>'

      <static> sPaginationType :string

      DataTables features two different built-in pagination interaction methods ('two_button' or 'full_numbers') which present different page controls to the end user. Further methods can be added using the API (see below).

      <static> sScrollX :string

      Enable horizontal scrolling. When a table is too wide to fit into a certain layout, or you have a large number of columns in the table, you can enable x-scrolling to show the table in a viewport, which can be scrolled. This property can be any CSS unit, or a number (in which case it will be treated as a pixel measurement).

      <static> sScrollXInner :string

      This property can be used to force a DataTable to use more width than it might otherwise do when x-scrolling is enabled. For example if you have a table which requires to be well spaced, this parameter is useful for "over-sizing" the table, and thus forcing scrolling. This property can by any CSS unit, or a number (in which case it will be treated as a pixel measurement).

      <static> sScrollY :string

      Enable vertical scrolling. Vertical scrolling will constrain the DataTable to the given height, and enable scrolling for any data which overflows the current viewport. This can be used as an alternative to paging to display a lot of data in a small area (although paging and scrolling can both be enabled at the same time). This property can be any CSS unit, or a number (in which case it will be treated as a pixel measurement).

      <static> sServerMethod :string

      Set the HTTP method that is used to make the Ajax call for server-side processing or Ajax sourced data.

      Details

      Properties - static

      <static> aaData :array

      An array of data to use for the table, passed in at initialisation which will be used in preference to any data which is already in the DOM. This is particularly useful for constructing tables purely in Javascript, for example with a custom Ajax call.

      Examples
         // Using a 2D array data source
         $(document).ready( function () {
           $('#example').dataTable( {
             "aaData": [
               ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'],
               ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'],
             ],
             "aoColumns": [
               { "sTitle": "Engine" },
               { "sTitle": "Browser" },
               { "sTitle": "Platform" },
               { "sTitle": "Version" },
               { "sTitle": "Grade" }
             ]
           } );
         } );
         
       
         // Using an array of objects as a data source (mData)
         $(document).ready( function () {
           $('#example').dataTable( {
             "aaData": [
               {
                 "engine":   "Trident",
                 "browser":  "Internet Explorer 4.0",
                 "platform": "Win 95+",
                 "version":  4,
                 "grade":    "X"
               },
               {
                 "engine":   "Trident",
                 "browser":  "Internet Explorer 5.0",
                 "platform": "Win 95+",
                 "version":  5,
                 "grade":    "C"
               }
             ],
             "aoColumns": [
               { "sTitle": "Engine",   "mData": "engine" },
               { "sTitle": "Browser",  "mData": "browser" },
               { "sTitle": "Platform", "mData": "platform" },
               { "sTitle": "Version",  "mData": "version" },
               { "sTitle": "Grade",    "mData": "grade" }
             ]
           } );
         } );
      <static> aaSorting :array

      If sorting is enabled, then DataTables will perform a first pass sort on initialisation. You can define which column(s) the sort is performed upon, and the sorting direction, with this variable. The aaSorting array should contain an array for each column to be sorted initially containing the column's index and a direction string ('asc' or 'desc').

      Example
         // Sort by 3rd column first, and then 4th column
         $(document).ready( function() {
           $('#example').dataTable( {
             "aaSorting": [[2,'asc'], [3,'desc']]
           } );
         } );
         
         // No initial sorting
         $(document).ready( function() {
           $('#example').dataTable( {
             "aaSorting": []
           } );
         } );
      <static> aaSortingFixed :array

      This parameter is basically identical to the aaSorting parameter, but cannot be overridden by user interaction with the table. What this means is that you could have a column (visible or hidden) which the sorting will always be forced on first - any sorting after that (from the user) will then be performed as required. This can be useful for grouping rows together.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "aaSortingFixed": [[0,'asc']]
           } );
         } )
      <static> aLengthMenu :array

      This parameter allows you to readily specify the entries in the length drop down menu that DataTables shows when pagination is enabled. It can be either a 1D array of options which will be used for both the displayed option and the value, or a 2D array which will use the array in the first position as the value, and the array in the second position as the displayed options (useful for language strings such as 'All').

      Examples
         $(document).ready( function() {
           $('#example').dataTable( {
             "aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]]
           } );
         } );
       
       
         // Setting the default display length as well as length menu
         // This is likely to be wanted if you remove the '10' option which
         // is the iDisplayLength default.
         $(document).ready( function() {
           $('#example').dataTable( {
             "iDisplayLength": 25,
             "aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]]
           } );
         } );
      <static> aoColumnDefs

      Very similar to aoColumns, aoColumnDefs allows you to target a specific column, multiple columns, or all columns, using the aTargets property of each object in the array. This allows great flexibility when creating tables, as the aoColumnDefs arrays can be of any length, targeting the columns you specifically want. aoColumnDefs may use any of the column options available: DataTable.defaults.columns, but it must have aTargets defined in each object in the array. Values in the aTargets array may be:

      • a string - class name will be matched on the TH for the column
      • 0 or a positive integer - column index counting from the left
      • a negative integer - column index counting from the right
      • the string "_all" - all columns (i.e. assign a default)

      <static> aoColumns

      The aoColumns option in the initialisation parameter allows you to define details about the way individual columns behave. For a full list of column options that can be set, please see DataTable.defaults.columns. Note that if you use aoColumns to define your columns, you must have an entry in the array for every single column that you have in your table (these can be null if you don't which to specify any options).

      <static> aoSearchCols :array

      Basically the same as oSearch, this parameter defines the individual column filtering state at initialisation time. The array must be of the same size as the number of columns, and each element be an object with the parameters "sSearch" and "bEscapeRegex" (the latter is optional). 'null' is also accepted and the default will be used.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoSearchCols": [
               null,
               { "sSearch": "My filter" },
               null,
               { "sSearch": "^[0-9]", "bEscapeRegex": false }
             ]
           } );
         } )
      <static> asStripeClasses :array

      An array of CSS classes that should be applied to displayed rows. This array may be of any length, and DataTables will apply each class sequentially, looping when required.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "asStripeClasses": [ 'strip1', 'strip2', 'strip3' ]
           } );
         } )
      <static> bAutoWidth :boolean

      Enable or disable automatic column width calculation. This can be disabled as an optimisation (it takes some time to calculate the widths) if the tables widths are passed in using aoColumns.

      Example
         $(document).ready( function () {
           $('#example').dataTable( {
             "bAutoWidth": false
           } );
         } );
      <static> bDeferRender :boolean

      Deferred rendering can provide DataTables with a huge speed boost when you are using an Ajax or JS data source for the table. This option, when set to true, will cause DataTables to defer the creation of the table elements for each row until they are needed for a draw - saving a significant amount of time.

      Example
         $(document).ready( function() {
           var oTable = $('#example').dataTable( {
             "sAjaxSource": "sources/arrays.txt",
             "bDeferRender": true
           } );
         } );
      <static> bDestroy :boolean

      Replace a DataTable which matches the given selector and replace it with one which has the properties of the new initialisation object passed. If no table matches the selector, then the new DataTable will be constructed as per normal.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "sScrollY": "200px",
             "bPaginate": false
           } );
           
           // Some time later....
           $('#example').dataTable( {
             "bFilter": false,
             "bDestroy": true
           } );
         } );
      <static> bFilter :boolean

      Enable or disable filtering of data. Filtering in DataTables is "smart" in that it allows the end user to input multiple words (space separated) and will match a row containing those words, even if not in the order that was specified (this allow matching across multiple columns). Note that if you wish to use filtering in DataTables this must remain 'true' - to remove the default filtering input box and retain filtering abilities, please use DataTable.defaults.sDom.

      Example
         $(document).ready( function () {
           $('#example').dataTable( {
             "bFilter": false
           } );
         } );
      <static> bInfo :boolean

      Enable or disable the table information display. This shows information about the data that is currently visible on the page, including information about filtered data if that action is being performed.

      Example
         $(document).ready( function () {
           $('#example').dataTable( {
             "bInfo": false
           } );
         } );
      <static> bJQueryUI :boolean

      Enable jQuery UI ThemeRoller support (required as ThemeRoller requires some slightly different and additional mark-up from what DataTables has traditionally used).

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "bJQueryUI": true
           } );
         } );
      <static> bLengthChange :boolean

      Allows the end user to select the size of a formatted page from a select menu (sizes are 10, 25, 50 and 100). Requires pagination (bPaginate).

      Example
         $(document).ready( function () {
           $('#example').dataTable( {
             "bLengthChange": false
           } );
         } );
      <static> bPaginate :boolean

      Enable or disable pagination.

      Example
         $(document).ready( function () {
           $('#example').dataTable( {
             "bPaginate": false
           } );
         } );
      <static> bProcessing :boolean

      Enable or disable the display of a 'processing' indicator when the table is being processed (e.g. a sort). This is particularly useful for tables with large amounts of data where it can take a noticeable amount of time to sort the entries.

      Example
         $(document).ready( function () {
           $('#example').dataTable( {
             "bProcessing": true
           } );
         } );
      <static> bRetrieve :boolean

      Retrieve the DataTables object for the given selector. Note that if the table has already been initialised, this parameter will cause DataTables to simply return the object that has already been set up - it will not take account of any changes you might have made to the initialisation object passed to DataTables (setting this parameter to true is an acknowledgement that you understand this). bDestroy can be used to reinitialise a table if you need.

      Example
         $(document).ready( function() {
           initTable();
           tableActions();
         } );
         
         function initTable ()
         {
           return $('#example').dataTable( {
             "sScrollY": "200px",
             "bPaginate": false,
             "bRetrieve": true
           } );
         }
         
         function tableActions ()
         {
           var oTable = initTable();
           // perform API operations with oTable 
         }
      <static> bScrollAutoCss :boolean

      Indicate if DataTables should be allowed to set the padding / margin etc for the scrolling header elements or not. Typically you will want this.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "bScrollAutoCss": false,
             "sScrollY": "200px"
           } );
         } );
      <static> bScrollCollapse :boolean

      When vertical (y) scrolling is enabled, DataTables will force the height of the table's viewport to the given height at all times (useful for layout). However, this can look odd when filtering data down to a small data set, and the footer is left "floating" further down. This parameter (when enabled) will cause DataTables to collapse the table's viewport down when the result set will fit within the given Y height.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "sScrollY": "200",
             "bScrollCollapse": true
           } );
         } );
      <static> bScrollInfinite :boolean

      Enable infinite scrolling for DataTables (to be used in combination with sScrollY). Infinite scrolling means that DataTables will continually load data as a user scrolls through a table, which is very useful for large dataset. This cannot be used with pagination, which is automatically disabled. Note - the Scroller extra for DataTables is recommended in in preference to this option.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "bScrollInfinite": true,
             "bScrollCollapse": true,
             "sScrollY": "200px"
           } );
         } );
      <static> bServerSide :boolean

      Configure DataTables to use server-side processing. Note that the sAjaxSource parameter must also be given in order to give DataTables a source to obtain the required data for each draw.

      Example
         $(document).ready( function () {
           $('#example').dataTable( {
             "bServerSide": true,
             "sAjaxSource": "xhr.php"
           } );
         } );
      <static> bSort :boolean

      Enable or disable sorting of columns. Sorting of individual columns can be disabled by the "bSortable" option for each column.

      Example
         $(document).ready( function () {
           $('#example').dataTable( {
             "bSort": false
           } );
         } );
      <static> bSortCellsTop :boolean

      Allows control over whether DataTables should use the top (true) unique cell that is found for a single column, or the bottom (false - default). This is useful when using complex headers.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "bSortCellsTop": true
           } );
         } );
      <static> bSortClasses :boolean

      Enable or disable the addition of the classes 'sorting_1', 'sorting_2' and 'sorting_3' to the columns which are currently being sorted on. This is presented as a feature switch as it can increase processing time (while classes are removed and added) so for large data sets you might want to turn this off.

      Example
         $(document).ready( function () {
           $('#example').dataTable( {
             "bSortClasses": false
           } );
         } );
      <static> bStateSave :boolean

      Enable or disable state saving. When enabled a cookie will be used to save table display information such as pagination information, display length, filtering and sorting. As such when the end user reloads the page the display display will match what thy had previously set up.

      Example
         $(document).ready( function () {
           $('#example').dataTable( {
             "bStateSave": true
           } );
         } );
      <static> fnCookieCallback :function

      Customise the cookie and / or the parameters being stored when using DataTables with state saving enabled. This function is called whenever the cookie is modified, and it expects a fully formed cookie string to be returned. Note that the data object passed in is a Javascript object which must be converted to a string (JSON.stringify for example).

      Parameters:
      Name Type Attributes Default Description
      1
      sNamestring

      Name of the cookie defined by DataTables

      2
      oDataobject

      Data to be stored in the cookie

      3
      sExpiresstring

      Cookie expires string

      4
      sPathstring

      Path of the cookie to set

      Returns:

      Cookie formatted string (which should be encoded by using encodeURIComponent())

      Example:
         $(document).ready( function () {
           $('#example').dataTable( {
             "fnCookieCallback": function (sName, oData, sExpires, sPath) {
               // Customise oData or sName or whatever else here
               return sName + "="+JSON.stringify(oData)+"; expires=" + sExpires +"; path=" + sPath;
             }
           } );
         } );
      <static> fnCreatedRow :function

      This function is called when a TR element is created (and all TD child elements have been inserted), or registered if using a DOM source, allowing manipulation of the TR element (adding classes etc).

      Parameters:
      Name Type Attributes Default Description
      1
      nRownode

      "TR" element for the current row

      2
      aDataarray

      Raw data array for this row

      3
      iDataIndexint

      The index of this row in aoData

      Example:
         $(document).ready( function() {
           $('#example').dataTable( {
             "fnCreatedRow": function( nRow, aData, iDataIndex ) {
               // Bold the grade for all 'A' grade browsers
               if ( aData[4] == "A" )
               {
                 $('td:eq(4)', nRow).html( 'A' );
               }
             }
           } );
         } );
      <static> fnDrawCallback :function

      This function is called on every 'draw' event, and allows you to dynamically modify any aspect you want about the created DOM.

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      DataTables settings object

      Example:
         $(document).ready( function() {
           $('#example').dataTable( {
             "fnDrawCallback": function( oSettings ) {
               alert( 'DataTables has redrawn the table' );
             }
           } );
         } );
      <static> fnFooterCallback :function

      Identical to fnHeaderCallback() but for the table footer this function allows you to modify the table footer on every 'draw' even.

      Parameters:
      Name Type Attributes Default Description
      1
      nFootnode

      "TR" element for the footer

      2
      aDataarray

      Full table data (as derived from the original HTML)

      3
      iStartint

      Index for the current display starting point in the display array

      4
      iEndint

      Index for the current display ending point in the display array

      5
      aiDisplayarray int

      Index array to translate the visual position to the full data array

      Example:
         $(document).ready( function() {
           $('#example').dataTable( {
             "fnFooterCallback": function( nFoot, aData, iStart, iEnd, aiDisplay ) {
               nFoot.getElementsByTagName('th')[0].innerHTML = "Starting index is "+iStart;
             }
           } );
         } )
      <static> fnFormatNumber :function

      When rendering large numbers in the information element for the table (i.e. "Showing 1 to 10 of 57 entries") DataTables will render large numbers to have a comma separator for the 'thousands' units (e.g. 1 million is rendered as "1,000,000") to help readability for the end user. This function will override the default method DataTables uses.

      Parameters:
      Name Type Attributes Default Description
      1
      iInint

      number to be formatted

      Returns:

      formatted string for DataTables to show the number

      Example:
         $(document).ready( function() {
           $('#example').dataTable( {
             "fnFormatNumber": function ( iIn ) {
               if ( iIn < 1000 ) {
                 return iIn;
               } else {
                 var 
                   s=(iIn+""), 
                   a=s.split(""), out="", 
                   iLen=s.length;
                 
                 for ( var i=0 ; i<iLen ; i++ ) {
                   if ( i%3 === 0 && i !== 0 ) {
                     out = "'"+out;
                   }
                   out = a[iLen-i-1]+out;
                 }
               }
               return out;
             };
           } );
         } );
      <static> fnHeaderCallback :function

      This function is called on every 'draw' event, and allows you to dynamically modify the header row. This can be used to calculate and display useful information about the table.

      Parameters:
      Name Type Attributes Default Description
      1
      nHeadnode

      "TR" element for the header

      2
      aDataarray

      Full table data (as derived from the original HTML)

      3
      iStartint

      Index for the current display starting point in the display array

      4
      iEndint

      Index for the current display ending point in the display array

      5
      aiDisplayarray int

      Index array to translate the visual position to the full data array

      Example:
         $(document).ready( function() {
           $('#example').dataTable( {
             "fnHeaderCallback": function( nHead, aData, iStart, iEnd, aiDisplay ) {
               nHead.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records";
             }
           } );
         } )
      <static> fnInfoCallback :function

      The information element can be used to convey information about the current state of the table. Although the internationalisation options presented by DataTables are quite capable of dealing with most customisations, there may be times where you wish to customise the string further. This callback allows you to do exactly that.

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      DataTables settings object

      2
      iStartint

      Starting position in data for the draw

      3
      iEndint

      End position in data for the draw

      4
      iMaxint

      Total number of rows in the table (regardless of filtering)

      5
      iTotalint

      Total number of rows in the data set, after filtering

      6
      sPrestring

      The string that DataTables has formatted using it's own rules

      Returns:

      The string to be displayed in the information element.

      Example:
         $('#example').dataTable( {
           "fnInfoCallback": function( oSettings, iStart, iEnd, iMax, iTotal, sPre ) {
             return iStart +" to "+ iEnd;
           }
         } );
      <static> fnInitComplete :function

      Called when the table has been initialised. Normally DataTables will initialise sequentially and there will be no need for this function, however, this does not hold true when using external language information since that is obtained using an async XHR call.

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      DataTables settings object

      2
      jsonobject

      The JSON object request from the server - only present if client-side Ajax sourced data is used

      Example:
         $(document).ready( function() {
           $('#example').dataTable( {
             "fnInitComplete": function(oSettings, json) {
               alert( 'DataTables has finished its initialisation.' );
             }
           } );
         } )
      <static> fnPreDrawCallback :function

      Called at the very start of each table draw and can be used to cancel the draw by returning false, any other return (including undefined) results in the full draw occurring).

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      DataTables settings object

      Returns:

      False will cancel the draw, anything else (including no return) will allow it to complete.

      Example:
         $(document).ready( function() {
           $('#example').dataTable( {
             "fnPreDrawCallback": function( oSettings ) {
               if ( $('#test').val() == 1 ) {
                 return false;
               }
             }
           } );
         } );
      <static> fnRowCallback :function

      This function allows you to 'post process' each row after it have been generated for each table draw, but before it is rendered on screen. This function might be used for setting the row class name etc.

      Parameters:
      Name Type Attributes Default Description
      1
      nRownode

      "TR" element for the current row

      2
      aDataarray

      Raw data array for this row

      3
      iDisplayIndexint

      The display index for the current table draw

      4
      iDisplayIndexFullint

      The index of the data in the full list of rows (after filtering)

      Example:
         $(document).ready( function() {
           $('#example').dataTable( {
             "fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
               // Bold the grade for all 'A' grade browsers
               if ( aData[4] == "A" )
               {
                 $('td:eq(4)', nRow).html( 'A' );
               }
             }
           } );
         } );
      <static> fnServerData :function

      This parameter allows you to override the default function which obtains the data from the server ($.getJSON) so something more suitable for your application. For example you could use POST data, or pull information from a Gears or AIR database.

      Parameters:
      Name Type Attributes Default Description
      1
      sSourcestring

      HTTP source to obtain the data from (sAjaxSource)

      2
      aoDataarray

      A key/value pair object containing the data to send to the server

      3
      fnCallbackfunction

      to be called on completion of the data get process that will draw the data on the page.

      4
      oSettingsobject

      DataTables settings object

      Example:
         // POST data to server
         $(document).ready( function() {
           $('#example').dataTable( {
             "bProcessing": true,
             "bServerSide": true,
             "sAjaxSource": "xhr.php",
             "fnServerData": function ( sSource, aoData, fnCallback, oSettings ) {
               oSettings.jqXHR = $.ajax( {
                 "dataType": 'json', 
                 "type": "POST", 
                 "url": sSource, 
                 "data": aoData, 
                 "success": fnCallback
               } );
             }
           } );
         } );
      <static> fnServerParams :function

      It is often useful to send extra data to the server when making an Ajax request - for example custom filtering information, and this callback function makes it trivial to send extra information to the server. The passed in parameter is the data set that has been constructed by DataTables, and you can add to this or modify it as you require.

      Parameters:
      Name Type Attributes Default Description
      1
      aoDataarray

      Data array (array of objects which are name/value pairs) that has been constructed by DataTables and will be sent to the server. In the case of Ajax sourced data with server-side processing this will be an empty array, for server-side processing there will be a significant number of parameters!

      Returns:

      Ensure that you modify the aoData array passed in, as this is passed by reference.

      Example:
         $(document).ready( function() {
           $('#example').dataTable( {
             "bProcessing": true,
             "bServerSide": true,
             "sAjaxSource": "scripts/server_processing.php",
             "fnServerParams": function ( aoData ) {
               aoData.push( { "name": "more_data", "value": "my_value" } );
             }
           } );
         } );
      <static> fnStateLoad :function

      Load the table state. With this function you can define from where, and how, the state of a table is loaded. By default DataTables will load from its state saving cookie, but you might wish to use local storage (HTML5) or a server-side database.

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      DataTables settings object

      Returns:

      The DataTables state object to be loaded

      Example:
         $(document).ready( function() {
           $('#example').dataTable( {
             "bStateSave": true,
             "fnStateLoad": function (oSettings) {
               var o;
               
               // Send an Ajax request to the server to get the data. Note that
               // this is a synchronous request.
               $.ajax( {
                 "url": "/state_load",
                 "async": false,
                 "dataType": "json",
                 "success": function (json) {
                   o = json;
                 }
               } );
               
               return o;
             }
           } );
         } );
      <static> fnStateLoaded :function

      Callback that is called when the state has been loaded from the state saving method and the DataTables settings object has been modified as a result of the loaded state.

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      DataTables settings object

      2
      oDataobject

      The state object that was loaded

      Example:
         // Show an alert with the filtering value that was saved
         $(document).ready( function() {
           $('#example').dataTable( {
             "bStateSave": true,
             "fnStateLoaded": function (oSettings, oData) {
               alert( 'Saved filter was: '+oData.oSearch.sSearch );
             }
           } );
         } );
      <static> fnStateLoadParams :function

      Callback which allows modification of the saved state prior to loading that state. This callback is called when the table is loading state from the stored data, but prior to the settings object being modified by the saved state. Note that for plug-in authors, you should use the 'stateLoadParams' event to load parameters for a plug-in.

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      DataTables settings object

      2
      oDataobject

      The state object that is to be loaded

      Examples:
         // Remove a saved filter, so filtering is never loaded
         $(document).ready( function() {
           $('#example').dataTable( {
             "bStateSave": true,
             "fnStateLoadParams": function (oSettings, oData) {
               oData.oSearch.sSearch = "";
             }
           } );
         } );
      
       
         // Disallow state loading by returning false
         $(document).ready( function() {
           $('#example').dataTable( {
             "bStateSave": true,
             "fnStateLoadParams": function (oSettings, oData) {
               return false;
             }
           } );
         } );
      <static> fnStateSave :function

      Save the table state. This function allows you to define where and how the state information for the table is stored - by default it will use a cookie, but you might want to use local storage (HTML5) or a server-side database.

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      DataTables settings object

      2
      oDataobject

      The state object to be saved

      Example:
         $(document).ready( function() {
           $('#example').dataTable( {
             "bStateSave": true,
             "fnStateSave": function (oSettings, oData) {
               // Send an Ajax request to the server with the state object
               $.ajax( {
                 "url": "/state_save",
                 "data": oData,
                 "dataType": "json",
                 "method": "POST"
                 "success": function () {}
               } );
             }
           } );
         } );
      <static> fnStateSaveParams :function

      Callback which allows modification of the state to be saved. Called when the table has changed state a new state save is required. This method allows modification of the state saving object prior to actually doing the save, including addition or other state properties or modification. Note that for plug-in authors, you should use the 'stateSaveParams' event to save parameters for a plug-in.

      Parameters:
      Name Type Attributes Default Description
      1
      oSettingsobject

      DataTables settings object

      2
      oDataobject

      The state object to be saved

      Example:
         // Remove a saved filter, so filtering is never saved
         $(document).ready( function() {
           $('#example').dataTable( {
             "bStateSave": true,
             "fnStateSaveParams": function (oSettings, oData) {
               oData.oSearch.sSearch = "";
             }
           } );
         } );
      <static> iCookieDuration :int

      Duration of the cookie which is used for storing session information. This value is given in seconds.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "iCookieDuration": 60*60*24; // 1 day
           } );
         } )
      <static> iDeferLoading :int|array

      When enabled DataTables will not make a request to the server for the first page draw - rather it will use the data already on the page (no sorting etc will be applied to it), thus saving on an XHR at load time. iDeferLoading is used to indicate that deferred loading is required, but it is also used to tell DataTables how many records there are in the full table (allowing the information element and pagination to be displayed correctly). In the case where a filtering is applied to the table on initial load, this can be indicated by giving the parameter as an array, where the first element is the number of records available after filtering and the second element is the number of records without filtering (allowing the table information element to be shown correctly).

      Examples
         // 57 records available in the table, no filtering applied
         $(document).ready( function() {
           $('#example').dataTable( {
             "bServerSide": true,
             "sAjaxSource": "scripts/server_processing.php",
             "iDeferLoading": 57
           } );
         } );
      
       
         // 57 records after filtering, 100 without filtering (an initial filter applied)
         $(document).ready( function() {
           $('#example').dataTable( {
             "bServerSide": true,
             "sAjaxSource": "scripts/server_processing.php",
             "iDeferLoading": [ 57, 100 ],
             "oSearch": {
               "sSearch": "my_filter"
             }
           } );
         } );
      <static> iDisplayLength :int

      Number of rows to display on a single page when using pagination. If feature enabled (bLengthChange) then the end user will be able to override this to a custom setting using a pop-up menu.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "iDisplayLength": 50
           } );
         } )
      <static> iDisplayStart :int

      Define the starting point for data display when using DataTables with pagination. Note that this parameter is the number of records, rather than the page number, so if you have 10 records per page and want to start on the third page, it should be "20".

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "iDisplayStart": 20
           } );
         } )
      <static> iScrollLoadGap :int

      The scroll gap is the amount of scrolling that is left to go before DataTables will load the next 'page' of data automatically. You typically want a gap which is big enough that the scrolling will be smooth for the user, while not so large that it will load more data than need.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "bScrollInfinite": true,
             "bScrollCollapse": true,
             "sScrollY": "200px",
             "iScrollLoadGap": 50
           } );
         } );
      <static> iTabIndex :int

      By default DataTables allows keyboard navigation of the table (sorting, paging, and filtering) by adding a tabindex attribute to the required elements. This allows you to tab through the controls and press the enter key to activate them. The tabindex is default 0, meaning that the tab follows the flow of the document. You can overrule this using this parameter if you wish. Use a value of -1 to disable built-in keyboard navigation.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "iTabIndex": 1
           } );
         } );
      <static> sAjaxDataProp :string

      By default DataTables will look for the property 'aaData' when obtaining data from an Ajax source or for server-side processing - this parameter allows that property to be changed. You can use Javascript dotted object notation to get a data source for multiple levels of nesting.

      Examples
         // Get data from { "data": [...] }
         $(document).ready( function() {
           var oTable = $('#example').dataTable( {
             "sAjaxSource": "sources/data.txt",
             "sAjaxDataProp": "data"
           } );
         } );
         
       
         // Get data from { "data": { "inner": [...] } }
         $(document).ready( function() {
           var oTable = $('#example').dataTable( {
             "sAjaxSource": "sources/data.txt",
             "sAjaxDataProp": "data.inner"
           } );
         } );
      <static> sAjaxSource :string

      You can instruct DataTables to load data from an external source using this parameter (use aData if you want to pass data in you already have). Simply provide a url a JSON object can be obtained from. This object must include the parameter 'aaData' which is the data source for the table.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "sAjaxSource": "http://www.sprymedia.co.uk/dataTables/json.php"
           } );
         } )
      <static> sCookiePrefix :string

      This parameter can be used to override the default prefix that DataTables assigns to a cookie when state saving is enabled.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "sCookiePrefix": "my_datatable_",
           } );
         } );
      <static> sDom :string

      This initialisation variable allows you to specify exactly where in the DOM you want DataTables to inject the various controls it adds to the page (for example you might want the pagination controls at the top of the table). DIV elements (with or without a custom class) can also be added to aid styling. The follow syntax is used:

      • The following options are allowed:
        • 'l' - Length changing
        • 'f' - Filtering input
        • 't' - The table!
        • 'i' - Information
        • 'p' - Pagination
        • 'r' - pRocessing
      • The following constants are allowed:
        • 'H' - jQueryUI theme "header" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')
        • 'F' - jQueryUI theme "footer" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')
      • The following syntax is expected:
        • '<' and '>' - div elements
        • '<"class" and '>' - div with a class
        • '<"#id" and '>' - div with an ID
      • Examples:
        • '<"wrapper"flipt>'
        • '<lf<t>ip>'

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "sDom": '<"top"i>rt<"bottom"flp><"clear">'
           } );
         } );
      <static> sPaginationType :string

      DataTables features two different built-in pagination interaction methods ('two_button' or 'full_numbers') which present different page controls to the end user. Further methods can be added using the API (see below).

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "sPaginationType": "full_numbers"
           } );
         } )
      <static> sScrollX :string

      Enable horizontal scrolling. When a table is too wide to fit into a certain layout, or you have a large number of columns in the table, you can enable x-scrolling to show the table in a viewport, which can be scrolled. This property can be any CSS unit, or a number (in which case it will be treated as a pixel measurement).

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "sScrollX": "100%",
             "bScrollCollapse": true
           } );
         } );
      <static> sScrollXInner :string

      This property can be used to force a DataTable to use more width than it might otherwise do when x-scrolling is enabled. For example if you have a table which requires to be well spaced, this parameter is useful for "over-sizing" the table, and thus forcing scrolling. This property can by any CSS unit, or a number (in which case it will be treated as a pixel measurement).

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "sScrollX": "100%",
             "sScrollXInner": "110%"
           } );
         } );
      <static> sScrollY :string

      Enable vertical scrolling. Vertical scrolling will constrain the DataTable to the given height, and enable scrolling for any data which overflows the current viewport. This can be used as an alternative to paging to display a lot of data in a small area (although paging and scrolling can both be enabled at the same time). This property can be any CSS unit, or a number (in which case it will be treated as a pixel measurement).

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "sScrollY": "200px",
             "bPaginate": false
           } );
         } );
      <static> sServerMethod :string

      Set the HTTP method that is used to make the Ajax call for server-side processing or Ajax sourced data.

      Example
         $(document).ready( function() {
           $('#example').dataTable( {
             "bServerSide": true,
             "sAjaxSource": "scripts/post.php",
             "sServerMethod": "POST"
           } );
         } );
      assets/plugins/DataTables/docs/index.html000064400000003355152510440410014462 0ustar00 Table of Contents - documentation

      Table of Contents

      DataTable

      DataTables is a plug-in for the jQuery Javascript library. It is a highly flexible tool, based upon the foundations of progressive enhancement, which will add advanced interaction controls to any HTML table. For a full list of features please refer to DataTables.net.

      Note that the DataTable object is not a global variable but is aliased to jQuery.fn.DataTable and jQuery.fn.dataTable through which it may be accessed.

      assets/plugins/DataTables/docs/DataTable.defaults.columns.html000064400000141511152510440410020456 0ustar00 Namespace: columns - documentation

      Namespace: columns

      Ancestry: DataTable » .defaults. » columns

      DataTables v1.9.4 documentation

      Navigation

      Hiding private elements (toggle)
      Showing extended elements (toggle)

      Column options that can be given to DataTables at initialisation time.

      Summary

      Properties - static

      <static> aDataSort :array

      Allows a column's sorting to take multiple columns into account when doing a sort. For example first name / last name columns make sense to do a multi-column sort over the two columns.

      <static> asSorting :array

      You can control the default sorting direction, and even alter the behaviour of the sort handler (i.e. only allow ascending sorting etc) using this parameter.

      <static> bSearchable :boolean

      Enable or disable filtering on the data in this column.

      <static> bSortable :boolean

      Enable or disable sorting on this column.

      <static> bUseRendered :boolean

      Deprecated When using fnRender() for a column, you may wish to use the original data (before rendering) for sorting and filtering (the default is to used the rendered data that the user can see). This may be useful for dates etc. [...]

      <static> bVisible :boolean

      Enable or disable the display of this column.

      <static> fnCreatedCell :function

      Developer definable function that is called whenever a cell is created (Ajax source, etc) or processed for input (DOM source). This can be used as a compliment to mRender allowing you to modify the DOM element (add background colour for example) when the element is available.

      <static> fnRender :function

      Deprecated Custom display function that will be called for the display of each cell in this column. [...]

      <static> iDataSort :int

      The column index (starting from 0!) that you wish a sort to be performed upon when this column is selected for sorting. This can be used for sorting on hidden columns for example.

      <static> mData :string|int|function|null

      This property can be used to read data from any JSON data source property, including deeply nested objects / properties. mData can be given in a number of different ways which effect its behaviour:

      • integer - treated as an array index for the data source. This is the default that DataTables uses (incrementally increased for each column).
      • string - read an object property from the data source. Note that you can use Javascript dotted notation to read deep properties / arrays from the data source.
      • null - the sDefaultContent option will be used for the cell (null by default, so you will need to specify the default content you want - typically an empty string). This can be useful on generated columns such as edit / delete action columns.
      • function - the function given will be executed whenever DataTables needs to set or get the data for a cell in the column. The function takes three parameters:
        • {array|object} The data source for the row
        • {string} The type call data requested - this will be 'set' when setting data or 'filter', 'display', 'type', 'sort' or undefined when gathering data. Note that when undefined is given for the type DataTables expects to get the raw data for the object back
        • {*} Data to set when the second parameter is 'set'.
        The return value from the function is not required when 'set' is the type of call, but otherwise the return is what will be used for the data requested.
      [...]

      <static> mDataProp

      This parameter has been replaced by mData in DataTables to ensure naming consistency. mDataProp can still be used, as there is backwards compatibility in DataTables for this option, but it is strongly recommended that you use mData in preference to mDataProp.

      <static> mRender :string|int|function|null

      This property is the rendering partner to mData and it is suggested that when you want to manipulate data for display (including filtering, sorting etc) but not altering the underlying data for the table, use this property. mData can actually do everything this property can and more, but this parameter is easier to use since there is no 'set' option. Like mData is can be given in a number of different ways to effect its behaviour, with the addition of supporting array syntax for easy outputting of arrays (including arrays of objects):

      • integer - treated as an array index for the data source. This is the default that DataTables uses (incrementally increased for each column).
      • string - read an object property from the data source. Note that you can use Javascript dotted notation to read deep properties / arrays from the data source and also array brackets to indicate that the data reader should loop over the data source array. When characters are given between the array brackets, these characters are used to join the data source array together. For example: "accounts[, ].name" would result in a comma separated list with the 'name' value from the 'accounts' array of objects.
      • function - the function given will be executed whenever DataTables needs to set or get the data for a cell in the column. The function takes three parameters:
        • {array|object} The data source for the row (based on mData)
        • {string} The type call data requested - this will be 'filter', 'display', 'type' or 'sort'.
        • {array|object} The full data source for the row (not based on mData)
        The return value from the function is what will be used for the data requested.

      <static> sCellType :string

      Change the cell type created for the column - either TD cells or TH cells. This can be useful as TH cells have semantic meaning in the table body, allowing them to act as a header for a row (you may wish to add scope='row' to the TH elements).

      <static> sClass :string

      Class to give to each cell in this column.

      <static> sContentPadding :string

      When DataTables calculates the column widths to assign to each column, it finds the longest string in each column and then constructs a temporary table and reads the widths from that. The problem with this is that "mmm" is much wider then "iiii", but the latter is a longer string - thus the calculation can go wrong (doing it properly and putting it into an DOM object and measuring that is horribly(!) slow). Thus as a "work around" we provide this option. It will append its value to the text that is found to be the longest string for the column - i.e. padding. Generally you shouldn't need this, and it is not documented on the general DataTables.net documentation

      <static> sDefaultContent :string

      Allows a default value to be given for a column's data, and will be used whenever a null data source is encountered (this can be because mData is set to null, or because the data source itself is null).

      <static> sName :string

      This parameter is only used in DataTables' server-side processing. It can be exceptionally useful to know what columns are being displayed on the client side, and to map these to database fields. When defined, the names also allow DataTables to reorder information from the server if it comes back in an unexpected order (i.e. if you switch your columns around on the client-side, your server-side code does not also need updating).

      <static> sSortDataType :string

      Defines a data source type for the sorting which can be used to read real-time information from the table (updating the internally cached version) prior to sorting. This allows sorting to occur on user editable elements such as form inputs.

      <static> sTitle :string

      The title of this column.

      <static> sType :string

      The type allows you to specify how the data for this column will be sorted. Four types (string, numeric, date and html (which will strip HTML tags before sorting)) are currently available. Note that only date formats understood by Javascript's Date() object will be accepted as type date. For example: "Mar 26, 2008 5:03 PM". May take the values: 'string', 'numeric', 'date' or 'html' (by default). Further types can be adding through plug-ins.

      <static> sWidth :string

      Defining the width of the column, this parameter may take any CSS value (3em, 20px etc). DataTables apples 'smart' widths to columns which have not been given a specific width through this interface ensuring that the table remains readable.

      Details

      Properties - static

      <static> aDataSort :array

      Allows a column's sorting to take multiple columns into account when doing a sort. For example first name / last name columns make sense to do a multi-column sort over the two columns.

      Examples
         // Using aoColumnDefs
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumnDefs": [
               { "aDataSort": [ 0, 1 ], "aTargets": [ 0 ] },
               { "aDataSort": [ 1, 0 ], "aTargets": [ 1 ] },
               { "aDataSort": [ 2, 3, 4 ], "aTargets": [ 2 ] }
             ]
           } );
         } );
         
       
         // Using aoColumns
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumns": [
               { "aDataSort": [ 0, 1 ] },
               { "aDataSort": [ 1, 0 ] },
               { "aDataSort": [ 2, 3, 4 ] },
               null,
               null
             ]
           } );
         } );
      <static> asSorting :array

      You can control the default sorting direction, and even alter the behaviour of the sort handler (i.e. only allow ascending sorting etc) using this parameter.

      Examples
         // Using aoColumnDefs
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumnDefs": [
               { "asSorting": [ "asc" ], "aTargets": [ 1 ] },
               { "asSorting": [ "desc", "asc", "asc" ], "aTargets": [ 2 ] },
               { "asSorting": [ "desc" ], "aTargets": [ 3 ] }
             ]
           } );
         } );
         
       
         // Using aoColumns
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumns": [
               null,
               { "asSorting": [ "asc" ] },
               { "asSorting": [ "desc", "asc", "asc" ] },
               { "asSorting": [ "desc" ] },
               null
             ]
           } );
         } );
      <static> bSearchable :boolean

      Enable or disable filtering on the data in this column.

      Examples
         // Using aoColumnDefs
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumnDefs": [ 
               { "bSearchable": false, "aTargets": [ 0 ] }
             ] } );
         } );
         
       
         // Using aoColumns
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumns": [ 
               { "bSearchable": false },
               null,
               null,
               null,
               null
             ] } );
         } );
      <static> bSortable :boolean

      Enable or disable sorting on this column.

      Examples
         // Using aoColumnDefs
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumnDefs": [ 
               { "bSortable": false, "aTargets": [ 0 ] }
             ] } );
         } );
         
       
         // Using aoColumns
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumns": [ 
               { "bSortable": false },
               null,
               null,
               null,
               null
             ] } );
         } );
      <static> bUseRendered :boolean

      Deprecated When using fnRender() for a column, you may wish to use the original data (before rendering) for sorting and filtering (the default is to used the rendered data that the user can see). This may be useful for dates etc.

      Please note that this option has now been deprecated and will be removed in the next version of DataTables. Please use mRender / mData rather than fnRender.

      Deprecated
      Yes
      <static> bVisible :boolean

      Enable or disable the display of this column.

      Examples
         // Using aoColumnDefs
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumnDefs": [ 
               { "bVisible": false, "aTargets": [ 0 ] }
             ] } );
         } );
         
       
         // Using aoColumns
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumns": [ 
               { "bVisible": false },
               null,
               null,
               null,
               null
             ] } );
         } );
      <static> fnCreatedCell :function

      Developer definable function that is called whenever a cell is created (Ajax source, etc) or processed for input (DOM source). This can be used as a compliment to mRender allowing you to modify the DOM element (add background colour for example) when the element is available.

      Parameters:
      Name Type Attributes Default Description
      1
      nTdelement

      The TD node that has been created

      2
      sData*

      The Data for the cell

      3
      oDataarray | object

      The data for the whole row

      4
      iRowint

      The row index for the aoData data store

      5
      iColint

      The column index for aoColumns

      Example:
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumnDefs": [ {
               "aTargets": [3],
               "fnCreatedCell": function (nTd, sData, oData, iRow, iCol) {
                 if ( sData == "1.7" ) {
                   $(nTd).css('color', 'blue')
                 }
               }
             } ]
           });
         } );
      <static> fnRender :function

      Deprecated Custom display function that will be called for the display of each cell in this column.

      Please note that this option has now been deprecated and will be removed in the next version of DataTables. Please use mRender / mData rather than fnRender.

      Deprecated
      Yes
      Parameters:
      Name Type Attributes Default Description
      1
      oobject

      Object with the following parameters:

      o.iDataRowint

      The row in aoData

      o.iDataColumnint

      The column in question

      o.aDataarray

      The data for the row in question

      o.oSettingsobject

      The settings object for this DataTables instance

      o.mDataPropobject

      The data property used for this column

      7
      val*

      The current cell value

      Returns:

      The string you which to use in the display

      <static> iDataSort :int

      The column index (starting from 0!) that you wish a sort to be performed upon when this column is selected for sorting. This can be used for sorting on hidden columns for example.

      Examples
         // Using aoColumnDefs
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumnDefs": [ 
               { "iDataSort": 1, "aTargets": [ 0 ] }
             ]
           } );
         } );
         
       
         // Using aoColumns
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumns": [ 
               { "iDataSort": 1 },
               null,
               null,
               null,
               null
             ]
           } );
         } );
      <static> mData :string|int|function|null

      This property can be used to read data from any JSON data source property, including deeply nested objects / properties. mData can be given in a number of different ways which effect its behaviour:

      • integer - treated as an array index for the data source. This is the default that DataTables uses (incrementally increased for each column).
      • string - read an object property from the data source. Note that you can use Javascript dotted notation to read deep properties / arrays from the data source.
      • null - the sDefaultContent option will be used for the cell (null by default, so you will need to specify the default content you want - typically an empty string). This can be useful on generated columns such as edit / delete action columns.
      • function - the function given will be executed whenever DataTables needs to set or get the data for a cell in the column. The function takes three parameters:
        • {array|object} The data source for the row
        • {string} The type call data requested - this will be 'set' when setting data or 'filter', 'display', 'type', 'sort' or undefined when gathering data. Note that when undefined is given for the type DataTables expects to get the raw data for the object back
        • {*} Data to set when the second parameter is 'set'.
        The return value from the function is not required when 'set' is the type of call, but otherwise the return is what will be used for the data requested.

      Note that prior to DataTables 1.9.2 mData was called mDataProp. The name change reflects the flexibility of this property and is consistent with the naming of mRender. If 'mDataProp' is given, then it will still be used by DataTables, as it automatically maps the old name to the new if required.

      Examples
         // Read table data from objects
         $(document).ready( function() {
           var oTable = $('#example').dataTable( {
             "sAjaxSource": "sources/deep.txt",
             "aoColumns": [
               { "mData": "engine" },
               { "mData": "browser" },
               { "mData": "platform.inner" },
               { "mData": "platform.details.0" },
               { "mData": "platform.details.1" }
             ]
           } );
         } );
      
       
         // Using mData as a function to provide different information for
         // sorting, filtering and display. In this case, currency (price)
         $(document).ready( function() {
           var oTable = $('#example').dataTable( {
             "aoColumnDefs": [ {
               "aTargets": [ 0 ],
               "mData": function ( source, type, val ) {
                 if (type === 'set') {
                   source.price = val;
                   // Store the computed dislay and filter values for efficiency
                   source.price_display = val=="" ? "" : "$"+numberFormat(val);
                   source.price_filter  = val=="" ? "" : "$"+numberFormat(val)+" "+val;
                   return;
                 }
                 else if (type === 'display') {
                   return source.price_display;
                 }
                 else if (type === 'filter') {
                   return source.price_filter;
                 }
                 // 'sort', 'type' and undefined all just use the integer
                 return source.price;
               }
             } ]
           } );
         } );
      <static> mDataProp

      This parameter has been replaced by mData in DataTables to ensure naming consistency. mDataProp can still be used, as there is backwards compatibility in DataTables for this option, but it is strongly recommended that you use mData in preference to mDataProp.

      <static> mRender :string|int|function|null

      This property is the rendering partner to mData and it is suggested that when you want to manipulate data for display (including filtering, sorting etc) but not altering the underlying data for the table, use this property. mData can actually do everything this property can and more, but this parameter is easier to use since there is no 'set' option. Like mData is can be given in a number of different ways to effect its behaviour, with the addition of supporting array syntax for easy outputting of arrays (including arrays of objects):

      • integer - treated as an array index for the data source. This is the default that DataTables uses (incrementally increased for each column).
      • string - read an object property from the data source. Note that you can use Javascript dotted notation to read deep properties / arrays from the data source and also array brackets to indicate that the data reader should loop over the data source array. When characters are given between the array brackets, these characters are used to join the data source array together. For example: "accounts[, ].name" would result in a comma separated list with the 'name' value from the 'accounts' array of objects.
      • function - the function given will be executed whenever DataTables needs to set or get the data for a cell in the column. The function takes three parameters:
        • {array|object} The data source for the row (based on mData)
        • {string} The type call data requested - this will be 'filter', 'display', 'type' or 'sort'.
        • {array|object} The full data source for the row (not based on mData)
        The return value from the function is what will be used for the data requested.

      Examples
         // Create a comma separated list from an array of objects
         $(document).ready( function() {
           var oTable = $('#example').dataTable( {
             "sAjaxSource": "sources/deep.txt",
             "aoColumns": [
               { "mData": "engine" },
               { "mData": "browser" },
               {
                 "mData": "platform",
                 "mRender": "[, ].name"
               }
             ]
           } );
         } );
      
       
         // Use as a function to create a link from the data source
         $(document).ready( function() {
           var oTable = $('#example').dataTable( {
             "aoColumnDefs": [
             {
               "aTargets": [ 0 ],
               "mData": "download_link",
               "mRender": function ( data, type, full ) {
                 return 'Download';
               }
             ]
           } );
         } );
      <static> sCellType :string

      Change the cell type created for the column - either TD cells or TH cells. This can be useful as TH cells have semantic meaning in the table body, allowing them to act as a header for a row (you may wish to add scope='row' to the TH elements).

      Example
         // Make the first column use TH cells
         $(document).ready( function() {
           var oTable = $('#example').dataTable( {
             "aoColumnDefs": [ {
               "aTargets": [ 0 ],
               "sCellType": "th"
             } ]
           } );
         } );
      <static> sClass :string

      Class to give to each cell in this column.

      Examples
         // Using aoColumnDefs
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumnDefs": [ 
               { "sClass": "my_class", "aTargets": [ 0 ] }
             ]
           } );
         } );
         
       
         // Using aoColumns
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumns": [ 
               { "sClass": "my_class" },
               null,
               null,
               null,
               null
             ]
           } );
         } );
      <static> sContentPadding :string

      When DataTables calculates the column widths to assign to each column, it finds the longest string in each column and then constructs a temporary table and reads the widths from that. The problem with this is that "mmm" is much wider then "iiii", but the latter is a longer string - thus the calculation can go wrong (doing it properly and putting it into an DOM object and measuring that is horribly(!) slow). Thus as a "work around" we provide this option. It will append its value to the text that is found to be the longest string for the column - i.e. padding. Generally you shouldn't need this, and it is not documented on the general DataTables.net documentation

      Example
         // Using aoColumns
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumns": [ 
               null,
               null,
               null,
               {
                 "sContentPadding": "mmm"
               }
             ]
           } );
         } );
      <static> sDefaultContent :string

      Allows a default value to be given for a column's data, and will be used whenever a null data source is encountered (this can be because mData is set to null, or because the data source itself is null).

      Examples
         // Using aoColumnDefs
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumnDefs": [ 
               {
                 "mData": null,
                 "sDefaultContent": "Edit",
                 "aTargets": [ -1 ]
               }
             ]
           } );
         } );
         
       
         // Using aoColumns
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumns": [ 
               null,
               null,
               null,
               {
                 "mData": null,
                 "sDefaultContent": "Edit"
               }
             ]
           } );
         } );
      <static> sName :string

      This parameter is only used in DataTables' server-side processing. It can be exceptionally useful to know what columns are being displayed on the client side, and to map these to database fields. When defined, the names also allow DataTables to reorder information from the server if it comes back in an unexpected order (i.e. if you switch your columns around on the client-side, your server-side code does not also need updating).

      Examples
         // Using aoColumnDefs
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumnDefs": [ 
               { "sName": "engine", "aTargets": [ 0 ] },
               { "sName": "browser", "aTargets": [ 1 ] },
               { "sName": "platform", "aTargets": [ 2 ] },
               { "sName": "version", "aTargets": [ 3 ] },
               { "sName": "grade", "aTargets": [ 4 ] }
             ]
           } );
         } );
         
       
         // Using aoColumns
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumns": [ 
               { "sName": "engine" },
               { "sName": "browser" },
               { "sName": "platform" },
               { "sName": "version" },
               { "sName": "grade" }
             ]
           } );
         } );
      <static> sSortDataType :string

      Defines a data source type for the sorting which can be used to read real-time information from the table (updating the internally cached version) prior to sorting. This allows sorting to occur on user editable elements such as form inputs.

      Examples
         // Using aoColumnDefs
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumnDefs": [
               { "sSortDataType": "dom-text", "aTargets": [ 2, 3 ] },
               { "sType": "numeric", "aTargets": [ 3 ] },
               { "sSortDataType": "dom-select", "aTargets": [ 4 ] },
               { "sSortDataType": "dom-checkbox", "aTargets": [ 5 ] }
             ]
           } );
         } );
         
       
         // Using aoColumns
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumns": [
               null,
               null,
               { "sSortDataType": "dom-text" },
               { "sSortDataType": "dom-text", "sType": "numeric" },
               { "sSortDataType": "dom-select" },
               { "sSortDataType": "dom-checkbox" }
             ]
           } );
         } );
      <static> sTitle :string

      The title of this column.

      Examples
         // Using aoColumnDefs
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumnDefs": [ 
               { "sTitle": "My column title", "aTargets": [ 0 ] }
             ]
           } );
         } );
         
       
         // Using aoColumns
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumns": [ 
               { "sTitle": "My column title" },
               null,
               null,
               null,
               null
             ]
           } );
         } );
      <static> sType :string

      The type allows you to specify how the data for this column will be sorted. Four types (string, numeric, date and html (which will strip HTML tags before sorting)) are currently available. Note that only date formats understood by Javascript's Date() object will be accepted as type date. For example: "Mar 26, 2008 5:03 PM". May take the values: 'string', 'numeric', 'date' or 'html' (by default). Further types can be adding through plug-ins.

      Examples
         // Using aoColumnDefs
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumnDefs": [ 
               { "sType": "html", "aTargets": [ 0 ] }
             ]
           } );
         } );
         
       
         // Using aoColumns
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumns": [ 
               { "sType": "html" },
               null,
               null,
               null,
               null
             ]
           } );
         } );
      <static> sWidth :string

      Defining the width of the column, this parameter may take any CSS value (3em, 20px etc). DataTables apples 'smart' widths to columns which have not been given a specific width through this interface ensuring that the table remains readable.

      Examples
         // Using aoColumnDefs
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumnDefs": [ 
               { "sWidth": "20%", "aTargets": [ 0 ] }
             ]
           } );
         } );
         
       
         // Using aoColumns
         $(document).ready( function() {
           $('#example').dataTable( {
             "aoColumns": [ 
               { "sWidth": "20%" },
               null,
               null,
               null,
               null
             ]
           } );
         } );
      assets/plugins/DataTables/docs/DataTable.defaults.oSearch.html000064400000007101152510440410020356 0ustar00 Namespace: oSearch - documentation

      Namespace: oSearch

      Ancestry: DataTable » .defaults. » oSearch

      DataTables v1.9.4 documentation

      Navigation

      • Overview
      • Summary
        Classes (0)Namespaces (0)
        Properties (0)Static properties (0)
        Methods (0)Static methods (0)
        Events (0)
      • Details
        Properties (0)Static properties (0)
        Methods (0)Static methods (0)
        Events (0)
      Hiding private elements (toggle)
      Showing extended elements (toggle)

      This parameter allows you to have define the global filtering state at initialisation time. As an object the "sSearch" parameter must be defined, but all other parameters are optional. When "bRegex" is true, the search string will be treated as a regular expression, when false (default) it will be treated as a straight string. When "bSmart" DataTables will use it's smart filtering methods (to word match at any point in the data), when false this will not be done.

      Example

         $(document).ready( function() {
           $('#example').dataTable( {
             "oSearch": {"sSearch": "Initial search"}
           } );
         } )

      Extends

      assets/plugins/DataTables/docs/DataTable.models.oSettings.oScroll.html000064400000030502152510440410022042 0ustar00 Namespace: oScroll - documentation

      Namespace: oScroll

      Ancestry: DataTable » .models » .oSettings. » oScroll

      DataTables v1.9.4 documentation

      Navigation

      Hiding private elements (toggle)
      Showing extended elements (toggle)

      Scrolling settings for a table.

      Summary

      Properties - static

      <static> bAutoCss :boolean

      Indicate if DataTables should be allowed to set the padding / margin etc for the scrolling header elements or not. Typically you will want this. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bCollapse :boolean

      When the table is shorter in height than sScrollY, collapse the table container down to the height of the table (when true). Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bInfinite :boolean

      Infinite scrolling enablement flag. Now deprecated in favour of using the Scroller plug-in. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> iBarWidth :int

      Width of the scrollbar for the web-browser's platform. Calculated during table initialisation.

      <static> iLoadGap :int

      Space (in pixels) between the bottom of the scrolling container and the bottom of the scrolling viewport before the next page is loaded when using infinite scrolling. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> sX :string

      Viewport width for horizontal scrolling. Horizontal scrolling is disabled if an empty string. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> sXInner :string

      Width to expand the table to when using x-scrolling. Typically you should not need to use this. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> sY :string

      Viewport height for vertical scrolling. Vertical scrolling is disabled if an empty string. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      Details

      Properties - static

      <static> bAutoCss :boolean

      Indicate if DataTables should be allowed to set the padding / margin etc for the scrolling header elements or not. Typically you will want this. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bCollapse :boolean

      When the table is shorter in height than sScrollY, collapse the table container down to the height of the table (when true). Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> bInfinite :boolean

      Infinite scrolling enablement flag. Now deprecated in favour of using the Scroller plug-in. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> iBarWidth :int

      Width of the scrollbar for the web-browser's platform. Calculated during table initialisation.

      <static> iLoadGap :int

      Space (in pixels) between the bottom of the scrolling container and the bottom of the scrolling viewport before the next page is loaded when using infinite scrolling. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> sX :string

      Viewport width for horizontal scrolling. Horizontal scrolling is disabled if an empty string. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      <static> sXInner :string

      Width to expand the table to when using x-scrolling. Typically you should not need to use this. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      Deprecated
      Yes
      <static> sY :string

      Viewport height for vertical scrolling. Vertical scrolling is disabled if an empty string. Note that this parameter will be set by the initialisation routine. To set a default use DataTable.defaults.

      assets/plugins/DataTables/docs/DataTable.models.oColumn.html000064400000104545152510440410020074 0ustar00 Namespace: oColumn - documentation

      Namespace: oColumn

      Ancestry: DataTable » .models. » oColumn

      DataTables v1.9.4 documentation

      Navigation

      Hiding private elements (toggle)
      Showing extended elements (toggle)

      Template object for the column information object in DataTables. This object is held in the settings aoColumns array and contains all the information that DataTables needs about each individual column.

      Note that this object is related to DataTable.defaults.columns but this one is the internal data store for DataTables's cache of columns. It should NOT be manipulated outside of DataTables. Any configuration should be done through the initialisation options.

      Summary

      Properties - static

      <static> aDataSort :array

      A list of the columns that sorting should occur on when this column is sorted. That this property is an array allows multi-column sorting to be defined for a column (for example first name / last name columns would benefit from this). The values are integers pointing to the columns to be sorted on (typically it will be a single integer pointing at itself, but that doesn't need to be the case).

      <static> asSorting :array

      Define the sorting directions that are applied to the column, in sequence as the column is repeatedly sorted upon - i.e. the first value is used as the sorting direction when the column if first sorted (clicked on). Sort it again (click again) and it will move on to the next index. Repeat until loop.

      <static> bSearchable :boolean

      Flag to indicate if the column is searchable, and thus should be included in the filtering or not.

      <static> bSortable :boolean

      Flag to indicate if the column is sortable or not.

      <static> bUseRendered :boolean

      Deprecated When using fnRender, you have two options for what to do with the data, and this property serves as the switch. Firstly, you can have the sorting and filtering use the rendered value (true - default), or you can have the sorting and filtering us the original value (false). [...]

      <static> bVisible :boolean

      Flag to indicate if the column is currently visible in the table or not

      <static> fnCreatedCell :function

      Developer definable function that is called whenever a cell is created (Ajax source, etc) or processed for input (DOM source). This can be used as a compliment to mRender allowing you to modify the DOM element (add background colour for example) when the element is available.

      <static> fnGetData :function

      Function to get data from a cell in a column. You should never access data directly through _aData internally in DataTables - always use the method attached to this property. It allows mData to function as required. This function is automatically assigned by the column initialisation method

      <static> fnRender :function

      Deprecated Custom display function that will be called for the display of each cell in this column. [...]

      <static> fnSetData :function

      Function to set data for a cell in the column. You should never set the data directly to _aData internally in DataTables - always use this method. It allows mData to function as required. This function is automatically assigned by the column initialisation method

      <static> mData :function|int|string|null

      Property to read the value for the cells in the column from the data source array / object. If null, then the default content is used, if a function is given then the return from the function is used.

      <static> mRender :function|int|string|null

      Partner property to mData which is used (only when defined) to get the data - i.e. it is basically the same as mData, but without the 'set' option, and also the data fed to it is the result from mData. This is the rendering method to match the data method of mData.

      <static> nTf :node

      Unique footer TH/TD element for this column (if there is one). Not used in DataTables as such, but can be used for plug-ins to reference the footer for each column.

      <static> nTh :node

      Unique header TH/TD element for this column - this is what the sorting listener is attached to (if sorting is enabled.)

      <static> sClass :string

      The class to apply to all TD elements in the table's TBODY for the column

      <static> sContentPadding :string

      When DataTables calculates the column widths to assign to each column, it finds the longest string in each column and then constructs a temporary table and reads the widths from that. The problem with this is that "mmm" is much wider then "iiii", but the latter is a longer string - thus the calculation can go wrong (doing it properly and putting it into an DOM object and measuring that is horribly(!) slow). Thus as a "work around" we provide this option. It will append its value to the text that is found to be the longest string for the column - i.e. padding.

      <static> sDefaultContent :string

      Allows a default value to be given for a column's data, and will be used whenever a null data source is encountered (this can be because mData is set to null, or because the data source itself is null).

      <static> sName :string

      Name for the column, allowing reference to the column by name as well as by index (needs a lookup to work by name).

      <static> sSortDataType :string

      Custom sorting data type - defines which of the available plug-ins in afnSortData the custom sorting will use - if any is defined.

      <static> sSortingClass :string

      Class to be applied to the header element when sorting on this column

      <static> sSortingClassJUI :string

      Class to be applied to the header element when sorting on this column - when jQuery UI theming is used.

      <static> sTitle :string

      Title of the column - what is seen in the TH element (nTh).

      <static> sType :string

      Column sorting and filtering type

      <static> sWidth :string

      Width of the column

      <static> sWidthOrig :string

      Width of the column when it was first "encountered"

      Details

      Properties - static

      <static> aDataSort :array

      A list of the columns that sorting should occur on when this column is sorted. That this property is an array allows multi-column sorting to be defined for a column (for example first name / last name columns would benefit from this). The values are integers pointing to the columns to be sorted on (typically it will be a single integer pointing at itself, but that doesn't need to be the case).

      <static> asSorting :array

      Define the sorting directions that are applied to the column, in sequence as the column is repeatedly sorted upon - i.e. the first value is used as the sorting direction when the column if first sorted (clicked on). Sort it again (click again) and it will move on to the next index. Repeat until loop.

      <static> bSearchable :boolean

      Flag to indicate if the column is searchable, and thus should be included in the filtering or not.

      <static> bSortable :boolean

      Flag to indicate if the column is sortable or not.

      <static> bUseRendered :boolean

      Deprecated When using fnRender, you have two options for what to do with the data, and this property serves as the switch. Firstly, you can have the sorting and filtering use the rendered value (true - default), or you can have the sorting and filtering us the original value (false).

      Please note that this option has now been deprecated and will be removed in the next version of DataTables. Please use mRender / mData rather than fnRender.

      Deprecated
      Yes
      <static> bVisible :boolean

      Flag to indicate if the column is currently visible in the table or not

      <static> fnCreatedCell :function

      Developer definable function that is called whenever a cell is created (Ajax source, etc) or processed for input (DOM source). This can be used as a compliment to mRender allowing you to modify the DOM element (add background colour for example) when the element is available.

      Parameters:
      Name Type Attributes Default Description
      1
      nTdelement

      The TD node that has been created

      2
      sData*

      The Data for the cell

      3
      oDataarray | object

      The data for the whole row

      4
      iRowint

      The row index for the aoData data store

      <static> fnGetData :function

      Function to get data from a cell in a column. You should never access data directly through _aData internally in DataTables - always use the method attached to this property. It allows mData to function as required. This function is automatically assigned by the column initialisation method

      Parameters:
      Name Type Attributes Default Description
      1
      oDataarray | object

      The data array/object for the array (i.e. aoData[]._aData)

      2
      sSpecificstring

      The specific data type you want to get - 'display', 'type' 'filter' 'sort'

      Returns:

      The data for the cell from the given row's data

      <static> fnRender :function

      Deprecated Custom display function that will be called for the display of each cell in this column.

      Please note that this option has now been deprecated and will be removed in the next version of DataTables. Please use mRender / mData rather than fnRender.

      Deprecated
      Yes
      Parameters:
      Name Type Attributes Default Description
      1
      oobject

      Object with the following parameters:

      o.iDataRowint

      The row in aoData

      o.iDataColumnint

      The column in question

      o.aDataarray

      The data for the row in question

      o.oSettingsobject

      The settings object for this DataTables instance

      Returns:

      The string you which to use in the display

      <static> fnSetData :function

      Function to set data for a cell in the column. You should never set the data directly to _aData internally in DataTables - always use this method. It allows mData to function as required. This function is automatically assigned by the column initialisation method

      Parameters:
      Name Type Attributes Default Description
      1
      oDataarray | object

      The data array/object for the array (i.e. aoData[]._aData)

      2
      sValue*

      Value to set

      <static> mData :function|int|string|null

      Property to read the value for the cells in the column from the data source array / object. If null, then the default content is used, if a function is given then the return from the function is used.

      <static> mRender :function|int|string|null

      Partner property to mData which is used (only when defined) to get the data - i.e. it is basically the same as mData, but without the 'set' option, and also the data fed to it is the result from mData. This is the rendering method to match the data method of mData.

      <static> nTf :node

      Unique footer TH/TD element for this column (if there is one). Not used in DataTables as such, but can be used for plug-ins to reference the footer for each column.

      <static> nTh :node

      Unique header TH/TD element for this column - this is what the sorting listener is attached to (if sorting is enabled.)

      <static> sClass :string

      The class to apply to all TD elements in the table's TBODY for the column

      <static> sContentPadding :string

      When DataTables calculates the column widths to assign to each column, it finds the longest string in each column and then constructs a temporary table and reads the widths from that. The problem with this is that "mmm" is much wider then "iiii", but the latter is a longer string - thus the calculation can go wrong (doing it properly and putting it into an DOM object and measuring that is horribly(!) slow). Thus as a "work around" we provide this option. It will append its value to the text that is found to be the longest string for the column - i.e. padding.

      <static> sDefaultContent :string

      Allows a default value to be given for a column's data, and will be used whenever a null data source is encountered (this can be because mData is set to null, or because the data source itself is null).

      <static> sName :string

      Name for the column, allowing reference to the column by name as well as by index (needs a lookup to work by name).

      <static> sSortDataType :string

      Custom sorting data type - defines which of the available plug-ins in afnSortData the custom sorting will use - if any is defined.

      <static> sSortingClass :string

      Class to be applied to the header element when sorting on this column

      <static> sSortingClassJUI :string

      Class to be applied to the header element when sorting on this column - when jQuery UI theming is used.

      <static> sTitle :string

      Title of the column - what is seen in the TH element (nTh).

      <static> sType :string

      Column sorting and filtering type

      <static> sWidth :string

      Width of the column

      <static> sWidthOrig :string

      Width of the column when it was first "encountered"

      assets/plugins/DataTables/examples/data_sources/dom.html000064400000045523152510440410017477 0ustar00 DataTables example
      DataTables zero configuration example

      Preamble

      The foundation for DataTables is progressive enhancement, so it is very adept at reading table information directly from the DOM. Therefore, if your user's browser is capable the user will get a DataTables enhanced experience. Otherwise they get the plain HTML.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable();
      } );

      Other examples

      assets/plugins/DataTables/examples/data_sources/ajax.html000064400000025444152510440410017643 0ustar00 DataTables example
      DataTables AJAX source example

      Preamble

      Although DataTables is built from the principle of progressive enhancement, it is often useful to be able to construct a table from an AJAX source. This can be done in one of two ways - either using the aaData initialisation parameter which takes an array of data, or using the sAjaxSource initialisation parameter which will have DataTables go to that source with an XHR call and load data from there. This example shows the latter method in action. DataTables expects an object with an array called "aaData" with the data source.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable( {
      		"bProcessing": true,
      		"sAjaxSource": '../ajax/sources/arrays.txt'
      	} );
      } );

      Server response

      The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.

      
      			
      			
      			

      Other examples

      assets/plugins/DataTables/examples/data_sources/server_side.html000064400000037120152510440410021224 0ustar00 DataTables example
      DataTables server-side processing example

      Preamble

      There are many ways to get your data into DataTables, and if you are working with seriously large databases, you might want to consider using the server-side options that DataTables provides. Basically all of the paging, filtering, sorting etc that DataTables does can be handed off to a server (or any other data source - Google Gears or Adobe Air for example!) and DataTables is just an events and display module.

      The example here shows a very simple display of the CSS data (used in all my other examples), but in this instance coming from the server on each draw. Filtering, multi-column sorting etc all work as you would expect.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Loading data from server
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable( {
      		"bProcessing": true,
      		"bServerSide": true,
      		"sAjaxSource": "../server_side/scripts/server_processing.php"
      	} );
      } );

      Server response

      The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.

      
      			
      			
      			

      Server side (PHP) code

      <?php
      	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      	 * Easy set variables
      	 */
      	
      	/* Array of database columns which should be read and sent back to DataTables. Use a space where
      	 * you want to insert a non-database field (for example a counter or static image)
      	 */
      	$aColumns = array( 'engine', 'browser', 'platform', 'version', 'grade' );
      	
      	/* Indexed column (used for fast and accurate table cardinality) */
      	$sIndexColumn = "id";
      	
      	/* DB table to use */
      	$sTable = "ajax";
      	
      	/* Database connection information */
      	$gaSql['user']       = "";
      	$gaSql['password']   = "";
      	$gaSql['db']         = "";
      	$gaSql['server']     = "localhost";
      	
      	/* REMOVE THIS LINE (it just includes my SQL connection user/pass) */
      	include( $_SERVER['DOCUMENT_ROOT']."/datatables/mysql.php" );
      	
      	
      	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      	 * If you just want to use the basic configuration for DataTables with PHP server-side, there is
      	 * no need to edit below this line
      	 */
      	
      	/* 
      	 * MySQL connection
      	 */
      	$gaSql['link'] =  mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password']  ) or
      		die( 'Could not open connection to server' );
      	
      	mysql_select_db( $gaSql['db'], $gaSql['link'] ) or 
      		die( 'Could not select database '. $gaSql['db'] );
      	
      	
      	/* 
      	 * Paging
      	 */
      	$sLimit = "";
      	if ( isset( $_GET['iDisplayStart'] ) && $_GET['iDisplayLength'] != '-1' )
      	{
      		$sLimit = "LIMIT ".intval( $_GET['iDisplayStart'] ).", ".
      			intval( $_GET['iDisplayLength'] );
      	}
      	
      	
      	/*
      	 * Ordering
      	 */
      	$sOrder = "";
      	if ( isset( $_GET['iSortCol_0'] ) )
      	{
      		$sOrder = "ORDER BY  ";
      		for ( $i=0 ; $i<intval( $_GET['iSortingCols'] ) ; $i++ )
      		{
      			if ( $_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true" )
      			{
      				$sOrder .= "`".$aColumns[ intval( $_GET['iSortCol_'.$i] ) ]."` ".
      					($_GET['sSortDir_'.$i]==='asc' ? 'asc' : 'desc') .", ";
      			}
      		}
      		
      		$sOrder = substr_replace( $sOrder, "", -2 );
      		if ( $sOrder == "ORDER BY" )
      		{
      			$sOrder = "";
      		}
      	}
      	
      	
      	/* 
      	 * Filtering
      	 * NOTE this does not match the built-in DataTables filtering which does it
      	 * word by word on any field. It's possible to do here, but concerned about efficiency
      	 * on very large tables, and MySQL's regex functionality is very limited
      	 */
      	$sWhere = "";
      	if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" )
      	{
      		$sWhere = "WHERE (";
      		for ( $i=0 ; $i<count($aColumns) ; $i++ )
      		{
      			$sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR ";
      		}
      		$sWhere = substr_replace( $sWhere, "", -3 );
      		$sWhere .= ')';
      	}
      	
      	/* Individual column filtering */
      	for ( $i=0 ; $i<count($aColumns) ; $i++ )
      	{
      		if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' )
      		{
      			if ( $sWhere == "" )
      			{
      				$sWhere = "WHERE ";
      			}
      			else
      			{
      				$sWhere .= " AND ";
      			}
      			$sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' ";
      		}
      	}
      	
      	
      	/*
      	 * SQL queries
      	 * Get data to display
      	 */
      	$sQuery = "
      		SELECT SQL_CALC_FOUND_ROWS `".str_replace(" , ", " ", implode("`, `", $aColumns))."`
      		FROM   $sTable
      		$sWhere
      		$sOrder
      		$sLimit
      		";
      	$rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());
      	
      	/* Data set length after filtering */
      	$sQuery = "
      		SELECT FOUND_ROWS()
      	";
      	$rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());
      	$aResultFilterTotal = mysql_fetch_array($rResultFilterTotal);
      	$iFilteredTotal = $aResultFilterTotal[0];
      	
      	/* Total data set length */
      	$sQuery = "
      		SELECT COUNT(`".$sIndexColumn."`)
      		FROM   $sTable
      	";
      	$rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());
      	$aResultTotal = mysql_fetch_array($rResultTotal);
      	$iTotal = $aResultTotal[0];
      	
      	
      	/*
      	 * Output
      	 */
      	$output = array(
      		"sEcho" => intval($_GET['sEcho']),
      		"iTotalRecords" => $iTotal,
      		"iTotalDisplayRecords" => $iFilteredTotal,
      		"aaData" => array()
      	);
      	
      	while ( $aRow = mysql_fetch_array( $rResult ) )
      	{
      		$row = array();
      		for ( $i=0 ; $i<count($aColumns) ; $i++ )
      		{
      			if ( $aColumns[$i] == "version" )
      			{
      				/* Special output formatting for 'version' column */
      				$row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ];
      			}
      			else if ( $aColumns[$i] != ' ' )
      			{
      				/* General output */
      				$row[] = $aRow[ $aColumns[$i] ];
      			}
      		}
      		$output['aaData'][] = $row;
      	}
      	
      	echo json_encode( $output );
      ?>

      Other examples

      assets/plugins/DataTables/examples/data_sources/js_array.html000064400000034554152510440410020534 0ustar00 DataTables example
      DataTables dynamic creation example

      Preamble

      At times you will wish to be able to create a table from dynamic information passed directly to DataTables, rather than having it read from the document. This is achieved using the "aaData" array in the initialisation object. A table node must first be created before the initialiser is called (as shown in the code below). This is also useful for optimisation - if you are able to format the data as required, this method can save a lot of DOM parsing to create a table.

      Live example

      Initialisation code

      $(document).ready(function() {
      	$('#demo').html( '<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"></table>' );
      	$('#example').dataTable( {
      		"aaData": [
      			/* Reduced data set */
      			[ "Trident", "Internet Explorer 4.0", "Win 95+", 4, "X" ],
      			[ "Trident", "Internet Explorer 5.0", "Win 95+", 5, "C" ],
      			[ "Trident", "Internet Explorer 5.5", "Win 95+", 5.5, "A" ],
      			[ "Trident", "Internet Explorer 6.0", "Win 98+", 6, "A" ],
      			[ "Trident", "Internet Explorer 7.0", "Win XP SP2+", 7, "A" ],
      			[ "Gecko", "Firefox 1.5", "Win 98+ / OSX.2+", 1.8, "A" ],
      			[ "Gecko", "Firefox 2", "Win 98+ / OSX.2+", 1.8, "A" ],
      			[ "Gecko", "Firefox 3", "Win 2k+ / OSX.3+", 1.9, "A" ],
      			[ "Webkit", "Safari 1.2", "OSX.3", 125.5, "A" ],
      			[ "Webkit", "Safari 1.3", "OSX.3", 312.8, "A" ],
      			[ "Webkit", "Safari 2.0", "OSX.4+", 419.3, "A" ],
      			[ "Webkit", "Safari 3.0", "OSX.4+", 522.1, "A" ]
      		],
      		"aoColumns": [
      			{ "sTitle": "Engine" },
      			{ "sTitle": "Browser" },
      			{ "sTitle": "Platform" },
      			{ "sTitle": "Version", "sClass": "center" },
      			{ "sTitle": "Grade", "sClass": "center" }
      		]
      	} );	
      } );

      Other examples

      assets/plugins/DataTables/examples/basic_init/scroll_y.html000064400000046716152510440410020203 0ustar00 DataTables example
      DataTables vertical scrolling example

      Preamble

      This example shows the DataTables table body scrolling in the vertical direction. This can generally be seen as an alternative method to pagination for displaying a large table in a fairly small vertical area, and as such pagination has been disabled here (note that this is not mandatory, it will work just fine with pagination enabled as well!). The example is set up to show grid lines using CSS, which is useful for alignment, both for testing and end user usability. To enable y scrolling simply set the sScrollY parameter to be whatever you want the container wrapper's height to be (any CSS measurement is acceptable, or just a number which is treated as pixels).

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable( {
      		"sScrollY": "200px",
      		"bPaginate": false,
      		"bScrollCollapse": true
      	} );
      } );

      Other examples

      assets/plugins/DataTables/examples/basic_init/flexible_width.html000064400000046301152510440420021335 0ustar00 DataTables example
      DataTables - flexible width example

      Preamble

      Often you may want to have your table resize dynamically with the page. Typically this is done by assigning width:100% in your CSS, but this presents a problem for Javascript since it can be very hard to get that relative size, rather than the absolute pixels. As such, if you apply the width attribute to the HTML table tag, this will be used as the width for the table (overruling any CSS styles).

      This example shows a table width width="100%" and the container is also flexible width, so as the window is resized, the table will also resize dynamically.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable();
      } );

      Other examples

      assets/plugins/DataTables/examples/basic_init/scroll_y_infinite.html000064400000047202152510440420022060 0ustar00 DataTables example
      DataTables infinite vertical scrolling example

      Preamble

      This example shows the DataTables table body scrolling in the vertical direction with infinite scrolling. The idea of infinite scrolling means that data will be added to the table dynamically, as and when needed by the user scrolling the table. A sub-set of the data is loaded initially, and more added as needed (technically of course, it is not "infinite" since it will stop loading data at the end of the data set!). Note that pagination much be enabled for infinite scrolling to work, but the pagination controls will not be shown (they could be, but can cause very confusing user interaction).

      DataTables' infinite scroll can be used with any of the four data sources supported, and they do not require any modification to work (including server-side scripts).

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable( {
      		"bScrollInfinite": true,
      		"bScrollCollapse": true,
      		"sScrollY": "200px"
      	} );
      } );

      Other examples

      assets/plugins/DataTables/examples/basic_init/zero_config.html000064400000045415152510440420020655 0ustar00 DataTables example
      DataTables zero configuration example

      Preamble

      DataTables has most features enabled by default, so all you need to do to use it with one of your own tables is to call the construction function (as shown below).

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable();
      } );

      Other examples

      assets/plugins/DataTables/examples/basic_init/themes.html000064400000046324152510440420017636 0ustar00 DataTables example
      DataTables with jQuery UI themes example

      Preamble

      Styling widgets such as DataTables can often take a considerable amount of time to fully integrate it into your site/application, with the demo styles as a base. This holds true for all widgets, and the jQuery UI team have addressed this issue by introducing themes through their excellent ThemeRoller. DataTables has full support for ThemeRoller created themes, all you need to do is enable the bJQueryUI flag in the initialisation object, and the required mark-up and classes will be added by DataTables.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U

      Initialisation code

      $(document).ready(function() {
      	oTable = $('#example').dataTable({
      		"bJQueryUI": true,
      		"sPaginationType": "full_numbers"
      	});
      } );

      Other examples

      assets/plugins/DataTables/examples/basic_init/hidden_columns.html000064400000046560152510440420021346 0ustar00 DataTables example
      DataTables with hidden columns

      Preamble

      There are times when you might find it useful to display only a sub-set of the information that was available in the original table. For example you might want to reduce the amount of data shown on screen to make it clearer for the user. This hidden data can still be filtered upon allowing the user access to that data (for example 'tag' information for a row entry), or this can be disabled. In the table below both the platform and engine version columns have been hidden, the former is searchable, the latter is not.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      $(document).ready(function() {
      				$('#example').dataTable( {
      					"aoColumnDefs": [ 
      						{ "bSearchable": false, "bVisible": false, "aTargets": [ 2 ] },
      						{ "bVisible": false, "aTargets": [ 3 ] }
      					] } );
      			} );

      Other examples

      assets/plugins/DataTables/examples/basic_init/dom.html000064400000047514152510440420017132 0ustar00 DataTables example
      DataTables DOM positioning example

      Preamble

      When customising DataTables for your own usage, you might find that the default position of the feature elements (filter input etc) is not quite to your liking. To address this issue DataTables takes inspiration from the CSS 3 Advanced Layout Module and provides the sDom initialisation parameter which can be set to indicate where you which particular features to appear in the DOM. You can also specify div wrapping containers (with classes) to provide complete layout flexibility. The syntax available is:

      • l - Length changing
      • f - Filtering input
      • t - The table!
      • i - Information
      • p - Pagination
      • r - pRocessing
      • < and > - div elements
      • <"class" and > - div with a class
      • Examples: <"wrapper"flipt>, <lf<t>ip>

      In the example below I've moved the table information to the top of the table, and all the interaction elements to the bottom, each wrapper in a container div.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable( {
      		"sDom": '<"top"i>rt<"bottom"flp><"clear">'
      	} );
      } );

      Other examples

      assets/plugins/DataTables/examples/basic_init/language.html000064400000046570152510440420020137 0ustar00 DataTables example
      DataTables dynamic language

      Preamble

      Changing the language information displayed by DataTables is as simple as passing in a language object to the dataTable constructor. The example above shows a different set of English language definitions to be used, rather than the defaults.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      $(document).ready(function() {
      $('#example').dataTable( {
      		"oLanguage": {
      			"sLengthMenu": "Display _MENU_ records per page",
      			"sZeroRecords": "Nothing found - sorry",
      			"sInfo": "Showing _START_ to _END_ of _TOTAL_ records",
      			"sInfoEmpty": "Showing 0 to 0 of 0 records",
      			"sInfoFiltered": "(filtered from _MAX_ total records)"
      		}
      	} );
      } );

      Other examples

      assets/plugins/DataTables/examples/basic_init/multi_col_sort.html000064400000051434152510440420021405 0ustar00 DataTables example
      DataTables multi column and custom sort example

      Preamble

      As you would expect with a desktop application, DataTables allows you to sort by multiple columns at the same time. This multiple sorting mechanism is always active if the bSort initialiser is true (it is by default) and the end user can activate it by 'shift' clicking on the column they want to add to the sort. You can also pass in an array of information using the aaSorting initialiser, as I have done in the example below there the first column is sorted as the primary column and the second one then used if the elements in the first column match. As many columns as you wish can be added to the sort.

      DataTables also provides a method to add your own sorting functions, to extend those built into DataTables. This can be very useful if you wish to sort on data formats such as currency and non-Javascript standard date formats (this natural sort algorithm is a popular useage). This is achieved by extending the jQuery.fn.dataTableExt object with ascending and descending sort functions. In the example below I've added case sensitive sorting functions.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      /* Define two custom functions (asc and desc) for string sorting */
      jQuery.fn.dataTableExt.oSort['string-case-asc']  = function(x,y) {
      	return ((x < y) ? -1 : ((x > y) ?  1 : 0));
      };
      
      jQuery.fn.dataTableExt.oSort['string-case-desc'] = function(x,y) {
      	return ((x < y) ?  1 : ((x > y) ? -1 : 0));
      };
      
      $(document).ready(function() {
      	/* Build the DataTable with third column using our custom sort functions */
      	$('#example').dataTable( {
      		"aaSorting": [ [0,'asc'], [1,'asc'] ],
      		"aoColumns": [
      			null,
      			null,
      			{ "sType": 'string-case' },
      			null,
      			null
      		]
      	} );
      } );

      Other examples

      assets/plugins/DataTables/examples/basic_init/alt_pagination.html000064400000047412152510440420021341 0ustar00 DataTables example
      DataTables alternative pagination example

      Preamble

      The page controls which are used by default in DataTables (forward and backward buttons only) are great for most situations, but there are cases where you may wish to customise the controls presented to the end user. This is made simple by DataTables through its extensible pagination mechanism. There are two types of pagination controls built into DataTables: two_button (default) and full_numbers. To switch between these two types, use the sPaginationType initialisation parameter. You can add additional types of pagination control by extending the $.fn.dataTableExt.oPagination object.

      Note also that the number of pages which are shown with direct links (the 1, 2, 3...) can be changed by setting the variable jQuery.fn.dataTableExt.oPagination.iFullNumbersShowPages (default 5). Odd numbers are best to keep the display even.

      The example below shows the full_numbers type of pagination, where 'first', 'previous', 'next' and 'last' buttons are presented, as well as the five pages around the current page.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable( {
      		"sPaginationType": "full_numbers"
      	} );
      } );

      Other examples

      assets/plugins/DataTables/examples/basic_init/multiple_tables.html000064400000036224152510440420021534 0ustar00 DataTables example
      DataTables multiple tables example

      Preamble

      Using standard jQuery selector syntax with DataTables it is trivial to initialise multiple tables with a single line of Javascript, as shown below. All tables are completely independent, but share the parameters passed thought the initialiser object (for example if you specific the Spanish language file, all tables will be shown in Spanish).

      Live example

      Trident based browsers

      Browser Platform(s) Engine version CSS grade
      Internet Explorer 4.0 Win 95+ 4 X
      Internet Explorer 5.0 Win 95+ 5 C
      Internet Explorer 5.5 Win 95+ 5.5 A
      Internet Explorer 6 Win 98+ 6 A
      Internet Explorer 7 Win XP SP2+ 7 A
      AOL browser (AOL desktop) Win XP 6 A

      Gecko based browsers

      Browser Platform(s) Engine version CSS grade
      Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Camino 1.0 OSX.2+ 1.8 A
      Camino 1.5 OSX.3+ 1.8 A
      Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Netscape Browser 8 Win 98SE+ 1.7 A
      Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Epiphany 2.20 Gnome 1.8 A

      WebKit based browsers (note no platform)

      Browser Engine version CSS grade
      Safari 1.2 125.5 A
      Safari 1.3 312.8 A
      Safari 2.0 419.3 A
      Safari 3.0 522.1 A
      OmniWeb 5.5 420 A
      iPod Touch / iPhone 420.1 A
      S60 413 A

      Initialisation code

      $(document).ready(function() {
      	$('.dataTable').dataTable();
      } );

      Other examples

      assets/plugins/DataTables/examples/basic_init/base_themeroller.html000064400000045120152510440420021656 0ustar00 DataTables example
      DataTables base example (CDN CSS)

      Preamble

      DataTables has most features enabled by default, so all you need to do to use it with one of your own tables is to call the construction function (as shown below).

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable();
      } );

      Other examples

      assets/plugins/DataTables/examples/basic_init/table_sorting.html000064400000047020152510440420021177 0ustar00 DataTables example
      DataTables table sorting example

      Preamble

      With DataTables you can alter the sorting characteristics of the table at initialisation time. Using the aaSorting initialisation parameter, you can get the table exactly how you want to present the information. The aaSorting parameter is an array of arrays where the first value is the column to sort on, and the second is 'asc' or 'desc' as required (it is a double array for multi-column sorting). The table below is sorted (descending) by the CSS grade. Note also that the 'Engine version' column is automatically detected as a numeric column and sorted accordingly. Finally, also note that "asSorting" has been defined for the column in question for this example. The reason for this is that DataTables uses ["asc","desc"] for sorting order by default, but we would in this case prefer "desc" to be given first priority.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable( {
      		"aaSorting": [[ 4, "desc" ]]
      	} );
      } );

      Other examples

      assets/plugins/DataTables/examples/basic_init/filter_only.html000064400000046113152510440420020673 0ustar00 DataTables example
      DataTables with only the filter feature

      Preamble

      Disabling features that you don't wish to use for a particular table is easily done by setting a variable in the initialisation object. In the following example only the filter feature is left enabled (although I've explicitly declared it as enabled).

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable( {
      		"bPaginate": false,
      		"bLengthChange": false,
      		"bFilter": true,
      		"bSort": false,
      		"bInfo": false,
      		"bAutoWidth": false
      	} );
      } );

      Other examples

      assets/plugins/DataTables/examples/basic_init/state_save.html000064400000046237152510440420020512 0ustar00 DataTables example
      DataTables state saving example

      Preamble

      DataTables can use cookies in the end user's web-browser in order to store it's state after each change in drawing. What this means is that if the user were to reload the page, the table should remain exactly as it was (length, filtering, pagination and sorting). This feature is disabled by default, but can be easily enabled using the bStateSave initialisation parameter as shown in this example. Note also that the duration of the cookie can be set using the iCookieDuration initialisation parameter (which is in seconds).

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable( {
      		"bStateSave": true
      	} );
      } );

      Other examples

      assets/plugins/DataTables/examples/basic_init/scroll_xy.html000064400000045426152510440420020371 0ustar00 DataTables example
      DataTables horizontal and vertical scrolling example

      Preamble

      In this example you can see DataTables doing horizontal and vertical scrolling at the same time. Note also that pagination is enabled, and the scrolling accounts for this.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable( {
      		"sScrollY": 200,
      		"sScrollX": "100%",
      		"sScrollXInner": "110%"
      	} );
      } );

      Other examples

      assets/plugins/DataTables/examples/basic_init/scroll_y_theme.html000064400000046006152510440420021356 0ustar00 DataTables example
      DataTables vertical scrolling with jQuery UI ThemeRoller example

      Preamble

      This example is an extension of the vertical scrolling example, showing DataTables ability to be themed by jQuery UI's ThemeRoller.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable( {
      		"sScrollY": 200,
      		"bJQueryUI": true,
      		"sPaginationType": "full_numbers"
      	} );
      } );

      Other examples

      assets/plugins/DataTables/examples/basic_init/base.html000064400000045100152510440420017252 0ustar00 DataTables example
      DataTables base example (CDN CSS)

      Preamble

      DataTables has most features enabled by default, so all you need to do to use it with one of your own tables is to call the construction function (as shown below).

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable();
      } );

      Other examples

      assets/plugins/DataTables/examples/basic_init/complex_header.html000064400000046201152510440420021322 0ustar00 DataTables example
      DataTables complex header example (row and colspans)

      Preamble

      When using tables to display data, you will often wish to display column information in groups. DataTables fully supports colspan and rowspans in the header, assigning the required sorting listeners to the TH element suitable for that column. Each column must have one TH cell (and only one) which is unique to it for the listeners to be added. The example shown below has the core browser information grouped together.

      Live example

      Rendering engine Browser Details
      Platform(s) Engine version CSS grade
      Rendering engine Browser Platform(s) Engine version CSS grade
      Details
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable();
      } );

      Other examples

      assets/plugins/DataTables/examples/basic_init/scroll_x.html000064400000047210152510440420020171 0ustar00 DataTables example
      DataTables horizontal scrolling example

      Preamble

      This DataTables horizontal scrolling example shows horizontal scrolling on a DataTable, which is very useful for when you have a wide table, with a large number of columns to display, but want to constrain it to a limited horizontal display area. To enable x scrolling simply set the sScrollX parameter to be whatever you want the container wrapper's width to be (any CSS measurement is acceptable, or just a number which is treated as pixels). Note also that sScrollXInner is used here to force the table to be wider than is strictly needed. You may or may not want to include this parameter depending on your application.

      Also shown in this example is the use of a 'collapsing scroll table' by using bScrollCollapse. When this parameter is set to true, the table size will 'collapse' down to match the number of rows, if the table height is smaller than the scrollable area.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable( {
      		"sScrollX": "100%",
      		"sScrollXInner": "110%",
      		"bScrollCollapse": true
      	} );
      } );

      Other examples

      assets/plugins/DataTables/examples/server_side/editable.html000064400000027544152510440420020333 0ustar00 DataTables example
      DataTables server-side processing example

      Preamble

      When using server-side processing and you wish to integrate the jEditable plug-in for jQuery with DataTables, you need to consider that each time data is returned from the server, DataTables will build new DOM elements - so these need the jEditable event handlers applied to them. This is down through use of the fnDrawCallback function.

      If you are interested in a full CRUD implementation for DataTables, check out the Editor plug-in for DataTables, which provides a flexible and easy to use create, edit and delete environment for DataTables controlled tables with full server interaction.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Loading data from server
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      $(document).ready(function() {
      	var oTable = $('#example').dataTable( {
      		"bProcessing": true,
      		"bServerSide": true,
      		"sAjaxSource": "scripts/server_processing.php",
      		"fnDrawCallback": function () {
      			$('#example tbody td').editable( '../examples_support/editable_ajax.php', {
      				"callback": function( sValue, y ) {
      					/* Redraw the table from the new data on the server */
      					oTable.fnDraw();
      				},
      				"height": "14px"
      			} );
      		}
      	} );
      } );

      Server response

      The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.

      
      			
      			
      			

      Other examples

      assets/plugins/DataTables/examples/server_side/post.html000064400000025405152510440430017542 0ustar00 DataTables example
      DataTables server-side processing with POST example

      Preamble

      The default HTTP method that DataTables uses to get data from the server-side if GET, however, there are times when you may wish to use POST. This is very easy using the sServerMethod initialisation parameter, which is simply set to the HTTP method that you want to use - the default is 'GET' and this example shows 'POST' being used.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Loading data from server
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable( {
      		"bProcessing": true,
      		"bServerSide": true,
      		"sAjaxSource": "scripts/post.php",
      		"sServerMethod": "POST"
      	} );
      } );

      Server response

      The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.

      
      			
      			
      			

      Other examples

      assets/plugins/DataTables/examples/server_side/ids.html000064400000025655152510440430017343 0ustar00 DataTables example
      DataTables server-side processing example - automatic row ID addition

      Preamble

      Often when using server-side processing you will find that it can be useful to have a specific ID on each row (the row ID from the database for example). By assigning the ID you want to apply to each row using the property DT_RowId of the data source object for each row, DataTables will automatically add it for you. Likewise there is a DT_RowClass option which will add your given class. This example shows both and is a trivial modification of the server-side script to add these two options, with no changes on the client-side.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Loading data from server
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable( {
      		"bProcessing": true,
      		"bServerSide": true,
      		"sAjaxSource": "scripts/id.php"
      	} );
      } );

      Server response

      The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.

      
      			
      			
      			

      Other examples

      assets/plugins/DataTables/examples/server_side/select_rows.html000064400000027672152510440430021116 0ustar00 DataTables example
      DataTables server-side processing with user selectable rows example

      Preamble

      When you want to detail with user selectable rows and DataTables, it is relatively simple when using DOM based data - but if using server-side processing, DataTables doesn't retain state over pages / filters etc, leaving this to the server-side instead. As such, you will need to keep a track of which rows a user as selected and mark them as selected on each draw. This is shown in this demo, which uses a unique ID assigned to the TR element (this is done automatically through the use of the DT_RowId special property returned as part of the object given by the server for each row).

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Loading data from server
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      $(document).ready(function() {
      	var aSelected = [];
      	
      	/* Init the table */
      	$("#example").dataTable({
      		"bProcessing": true,
      		"bServerSide": true,
      		"sAjaxSource": "scripts/id.php",
      		"fnRowCallback": function( nRow, aData, iDisplayIndex ) {
      			if ( jQuery.inArray(aData.DT_RowId, aSelected) !== -1 ) {
      				$(nRow).addClass('row_selected');
      			}
      		}
      	});
      	
      	/* Click event handler */
      	$('#example tbody tr').live('click', function () {
      		var id = this.id;
      		var index = jQuery.inArray(id, aSelected);
      		
      		if ( index === -1 ) {
      			aSelected.push( id );
      		} else {
      			aSelected.splice( index, 1 );
      		}
      		
      		$(this).toggleClass('row_selected');
      	} );
      } );

      Server response

      The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.

      
      			
      			
      			

      Other examples

      assets/plugins/DataTables/examples/server_side/jsonp.html000064400000026312152510440430017704 0ustar00 DataTables example
      DataTables server-side processing example with JSONP

      Preamble

      JSONP is a method of using JSON data from any server, regardless of XSS protection that modern browsers use. It is very useful for being able to retrieve JSON data from any domain name you choose and is easy to integrate with DataTables, thanks to jQuery's Ajax handler, as shown in this example.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Loading data from server
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable( {
      		"bProcessing": true,
      		"bServerSide": true,
      		"sAjaxSource": "scripts/jsonp.php",
      		"fnServerData": function( sUrl, aoData, fnCallback, oSettings ) {
      			oSettings.jqXHR = $.ajax( {
      				"url": sUrl,
      				"data": aoData,
      				"success": fnCallback,
      				"dataType": "jsonp",
      				"cache": false
      			} );
      		}
      	} );
      } );

      Server response

      The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.

      
      			
      			
      			

      Other examples

      assets/plugins/DataTables/examples/server_side/server_side.html000064400000037516152510440430021075 0ustar00 DataTables example
      DataTables server-side processing example

      Preamble

      There are many ways to get your data into DataTables, and if you are working with seriously large databases, you might want to consider using the server-side options that DataTables provides. Basically all of the paging, filtering, sorting etc that DataTables does can be handed off to a server (or any other data source - Google Gears or Adobe Air for example!) and DataTables is just an events and display module.

      The example here shows a very simple display of the CSS data (used in all my other examples), but in this instance coming from the server on each draw. Filtering, multi-column sorting etc all work as you would expect.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Loading data from server
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable( {
      		"bProcessing": true,
      		"bServerSide": true,
      		"sAjaxSource": "scripts/server_processing.php"
      	} );
      } );

      Server response

      The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.

      
      			
      			

      Server side (PHP) code

      <?php
      	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      	 * Easy set variables
      	 */
      	
      	/* Array of database columns which should be read and sent back to DataTables. Use a space where
      	 * you want to insert a non-database field (for example a counter or static image)
      	 */
      	$aColumns = array( 'engine', 'browser', 'platform', 'version', 'grade' );
      	
      	/* Indexed column (used for fast and accurate table cardinality) */
      	$sIndexColumn = "id";
      	
      	/* DB table to use */
      	$sTable = "ajax";
      	
      	/* Database connection information */
      	$gaSql['user']       = "";
      	$gaSql['password']   = "";
      	$gaSql['db']         = "";
      	$gaSql['server']     = "localhost";
      	
      	/* REMOVE THIS LINE (it just includes my SQL connection user/pass) */
      	include( $_SERVER['DOCUMENT_ROOT']."/datatables/mysql.php" );
      	
      	
      	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      	 * If you just want to use the basic configuration for DataTables with PHP server-side, there is
      	 * no need to edit below this line
      	 */
      	
      	/* 
      	 * Local functions
      	 */
      	function fatal_error ( $sErrorMessage = '' )
      	{
      		header( $_SERVER['SERVER_PROTOCOL'] .' 500 Internal Server Error' );
      		die( $sErrorMessage );
      	}
      
      	
      	/* 
      	 * MySQL connection
      	 */
      	if ( ! $gaSql['link'] = mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password']  ) )
      	{
      		fatal_error( 'Could not open connection to server' );
      	}
      
      	if ( ! mysql_select_db( $gaSql['db'], $gaSql['link'] ) )
      	{
      		fatal_error( 'Could not select database ' );
      	}
      	
      	
      	/* 
      	 * Paging
      	 */
      	$sLimit = "";
      	if ( isset( $_GET['iDisplayStart'] ) && $_GET['iDisplayLength'] != '-1' )
      	{
      		$sLimit = "LIMIT ".intval( $_GET['iDisplayStart'] ).", ".
      			intval( $_GET['iDisplayLength'] );
      	}
      	
      	
      	/*
      	 * Ordering
      	 */
      	$sOrder = "";
      	if ( isset( $_GET['iSortCol_0'] ) )
      	{
      		$sOrder = "ORDER BY  ";
      		for ( $i=0 ; $i<intval( $_GET['iSortingCols'] ) ; $i++ )
      		{
      			if ( $_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true" )
      			{
      				$sOrder .= "`".$aColumns[ intval( $_GET['iSortCol_'.$i] ) ]."` ".
      					($_GET['sSortDir_'.$i]==='asc' ? 'asc' : 'desc') .", ";
      			}
      		}
      		
      		$sOrder = substr_replace( $sOrder, "", -2 );
      		if ( $sOrder == "ORDER BY" )
      		{
      			$sOrder = "";
      		}
      	}
      	
      	
      	/* 
      	 * Filtering
      	 * NOTE this does not match the built-in DataTables filtering which does it
      	 * word by word on any field. It's possible to do here, but concerned about efficiency
      	 * on very large tables, and MySQL's regex functionality is very limited
      	 */
      	$sWhere = "";
      	if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" )
      	{
      		$sWhere = "WHERE (";
      		for ( $i=0 ; $i<count($aColumns) ; $i++ )
      		{
      			$sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR ";
      		}
      		$sWhere = substr_replace( $sWhere, "", -3 );
      		$sWhere .= ')';
      	}
      	
      	/* Individual column filtering */
      	for ( $i=0 ; $i<count($aColumns) ; $i++ )
      	{
      		if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' )
      		{
      			if ( $sWhere == "" )
      			{
      				$sWhere = "WHERE ";
      			}
      			else
      			{
      				$sWhere .= " AND ";
      			}
      			$sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' ";
      		}
      	}
      	
      	
      	/*
      	 * SQL queries
      	 * Get data to display
      	 */
      	$sQuery = "
      		SELECT SQL_CALC_FOUND_ROWS `".str_replace(" , ", " ", implode("`, `", $aColumns))."`
      		FROM   $sTable
      		$sWhere
      		$sOrder
      		$sLimit
      		";
      	$rResult = mysql_query( $sQuery, $gaSql['link'] ) or fatal_error( 'MySQL Error: ' . mysql_errno() );
      	
      	/* Data set length after filtering */
      	$sQuery = "
      		SELECT FOUND_ROWS()
      	";
      	$rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or fatal_error( 'MySQL Error: ' . mysql_errno() );
      	$aResultFilterTotal = mysql_fetch_array($rResultFilterTotal);
      	$iFilteredTotal = $aResultFilterTotal[0];
      	
      	/* Total data set length */
      	$sQuery = "
      		SELECT COUNT(`".$sIndexColumn."`)
      		FROM   $sTable
      	";
      	$rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or fatal_error( 'MySQL Error: ' . mysql_errno() );
      	$aResultTotal = mysql_fetch_array($rResultTotal);
      	$iTotal = $aResultTotal[0];
      	
      	
      	/*
      	 * Output
      	 */
      	$output = array(
      		"sEcho" => intval($_GET['sEcho']),
      		"iTotalRecords" => $iTotal,
      		"iTotalDisplayRecords" => $iFilteredTotal,
      		"aaData" => array()
      	);
      	
      	while ( $aRow = mysql_fetch_array( $rResult ) )
      	{
      		$row = array();
      		for ( $i=0 ; $i<count($aColumns) ; $i++ )
      		{
      			if ( $aColumns[$i] == "version" )
      			{
      				/* Special output formatting for 'version' column */
      				$row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ];
      			}
      			else if ( $aColumns[$i] != ' ' )
      			{
      				/* General output */
      				$row[] = $aRow[ $aColumns[$i] ];
      			}
      		}
      		$output['aaData'][] = $row;
      	}
      	
      	echo json_encode( $output );
      ?>

      Other examples

      assets/plugins/DataTables/examples/server_side/row_details.html000064400000031774152510440430021077 0ustar00 DataTables example
      DataTables server-side processing example with hidden row information

      Preamble

      This example shows how you might modify the client-side show/hide details rows example for use with DataTables server-side processing option.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Loading data from server
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      var oTable;
      
      /* Formating function for row details */
      function fnFormatDetails ( nTr )
      {
      	var aData = oTable.fnGetData( nTr );
      	var sOut = '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">';
      	sOut += '<tr><td>Rendering engine:</td><td>'+aData[2]+' '+aData[5]+'</td></tr>';
      	sOut += '<tr><td>Link to source:</td><td>Could provide a link here</td></tr>';
      	sOut += '<tr><td>Extra info:</td><td>And any further details here (images etc)</td></tr>';
      	sOut += '</table>';
      	
      	return sOut;
      }
      
      $(document).ready(function() {
      	oTable = $('#example').dataTable( {
      		"bProcessing": true,
      		"bServerSide": true,
      		"sAjaxSource": "scripts/details_col.php",
      		"aoColumns": [
      			{ "sClass": "center", "bSortable": false },
      			null,
      			null,
      			null,
      			{ "sClass": "center" },
      			{ "sClass": "center" }
      		],
      		"aaSorting": [[1, 'asc']]
      	} );
      	
      	$('#example tbody td img').live( 'click', function () {
      		var nTr = $(this).parents('tr')[0];
      		if ( oTable.fnIsOpen(nTr) )
      		{
      			/* This row is already open - close it */
      			this.src = "../examples_support/details_open.png";
      			oTable.fnClose( nTr );
      		}
      		else
      		{
      			/* Open this row */
      			this.src = "../examples_support/details_close.png";
      			oTable.fnOpen( nTr, fnFormatDetails(nTr), 'details' );
      		}
      	} );
      } );

      Server response

      The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.

      
      			
      			
      			

      Other examples

      assets/plugins/DataTables/examples/server_side/custom_vars.html000064400000026210152510440430021115 0ustar00 DataTables example
      DataTables server-side processing example

      Preamble

      It can often be useful to send a little bit of extra information to the server when utilising DataTables' server-side processing option. This can be done by using the fnServerParams callback function which is called whenever an XHR is sent to the server. fnServerParams Takes a single parameter, the array of name/value pairs of parameters that are to be sent to the server. You can manipulate this as you require - typically adding another parameter, as shown in this example.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Loading data from server
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable( {
      		"bProcessing": true,
      		"bServerSide": true,
      		"sAjaxSource": "scripts/server_processing.php"
      		"fnServerParams": function ( aoData ) {
      			aoData.push( { "name": "more_data", "value": "my_value" } );
      		}
      	} );
      } );

      Server response

      The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.

      
      			
      			
      			

      Other examples

      assets/plugins/DataTables/examples/server_side/defer_loading.html000064400000030566152510440430021343 0ustar00 DataTables example
      DataTables server-side processing example with deferred loading

      Preamble

      When using DataTables with server-side processing the default behaviour is to have DataTables automatically go the server and load the data, removing anything which might already be on the page. However, this behaviour might not always be desirable when the first page of the table has already been preloaded in the HTML. This is achieved by using the iDeferLoading initialisation property. It serves two purposes, firstly to include that deferred loading is required, but also to tell DataTables how many records there are in the full table, in this case 57 (this allows the information element and pagination to be displayed correctly).

      In this example the preloaded data is hardcoded in, but you could use a PHP include or anything else to put the data in the table for the first page - DataTables won't process it at all, simply display it and be ready to load the next page / search / sort etc.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable( {
      		"bProcessing": true,
      		"bServerSide": true,
      		"sAjaxSource": "scripts/server_processing.php",
      		"iDeferLoading": 57
      	} );
      } );

      Server response

      The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.

      
      			
      			
      			

      Other examples

      assets/plugins/DataTables/examples/server_side/pipeline.html000064400000041270152510440430020360 0ustar00 DataTables example
      DataTables server-side processing with pipelining example

      Preamble

      When using server-side processing with DataTables, it can be quite intensive on your server having an Ajax call every time the user performs some kind of interaction - you can effectively DDOS your server with your own application!

      This example shows how you might over-come this by modifying the request set to the server to retrieve more information than is actually required for a single page's display. This means that the user can page multiple times (5 times the display size is the default) before a request must be made of the server. Paging is typically the most common interaction performed with a DataTable, so this can be most beneficial to your server's resource usage. Of course the pipeline must be cleared for interactions other than paging (sorting, filtering etc), but that's the trade off that can be made (sending extra information is cheap - while another XHR is expensive).

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Loading data from server
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      var oCache = {
      	iCacheLower: -1
      };
      
      function fnSetKey( aoData, sKey, mValue )
      {
      	for ( var i=0, iLen=aoData.length ; i<iLen ; i++ )
      	{
      		if ( aoData[i].name == sKey )
      		{
      			aoData[i].value = mValue;
      		}
      	}
      }
      
      function fnGetKey( aoData, sKey )
      {
      	for ( var i=0, iLen=aoData.length ; i<iLen ; i++ )
      	{
      		if ( aoData[i].name == sKey )
      		{
      			return aoData[i].value;
      		}
      	}
      	return null;
      }
      
      function fnDataTablesPipeline ( sSource, aoData, fnCallback ) {
      	var iPipe = 5; /* Ajust the pipe size */
      	
      	var bNeedServer = false;
      	var sEcho = fnGetKey(aoData, "sEcho");
      	var iRequestStart = fnGetKey(aoData, "iDisplayStart");
      	var iRequestLength = fnGetKey(aoData, "iDisplayLength");
      	var iRequestEnd = iRequestStart + iRequestLength;
      	oCache.iDisplayStart = iRequestStart;
      	
      	/* outside pipeline? */
      	if ( oCache.iCacheLower < 0 || iRequestStart < oCache.iCacheLower || iRequestEnd > oCache.iCacheUpper )
      	{
      		bNeedServer = true;
      	}
      	
      	/* sorting etc changed? */
      	if ( oCache.lastRequest && !bNeedServer )
      	{
      		for( var i=0, iLen=aoData.length ; i<iLen ; i++ )
      		{
      			if ( aoData[i].name != "iDisplayStart" && aoData[i].name != "iDisplayLength" && aoData[i].name != "sEcho" )
      			{
      				if ( aoData[i].value != oCache.lastRequest[i].value )
      				{
      					bNeedServer = true;
      					break;
      				}
      			}
      		}
      	}
      	
      	/* Store the request for checking next time around */
      	oCache.lastRequest = aoData.slice();
      	
      	if ( bNeedServer )
      	{
      		if ( iRequestStart < oCache.iCacheLower )
      		{
      			iRequestStart = iRequestStart - (iRequestLength*(iPipe-1));
      			if ( iRequestStart < 0 )
      			{
      				iRequestStart = 0;
      			}
      		}
      		
      		oCache.iCacheLower = iRequestStart;
      		oCache.iCacheUpper = iRequestStart + (iRequestLength * iPipe);
      		oCache.iDisplayLength = fnGetKey( aoData, "iDisplayLength" );
      		fnSetKey( aoData, "iDisplayStart", iRequestStart );
      		fnSetKey( aoData, "iDisplayLength", iRequestLength*iPipe );
      		
      		$.getJSON( sSource, aoData, function (json) { 
      			/* Callback processing */
      			oCache.lastJson = jQuery.extend(true, {}, json);
      			
      			if ( oCache.iCacheLower != oCache.iDisplayStart )
      			{
      				json.aaData.splice( 0, oCache.iDisplayStart-oCache.iCacheLower );
      			}
      			json.aaData.splice( oCache.iDisplayLength, json.aaData.length );
      			
      			fnCallback(json)
      		} );
      	}
      	else
      	{
      		json = jQuery.extend(true, {}, oCache.lastJson);
      		json.sEcho = sEcho; /* Update the echo for each response */
      		json.aaData.splice( 0, iRequestStart-oCache.iCacheLower );
      		json.aaData.splice( iRequestLength, json.aaData.length );
      		fnCallback(json);
      		return;
      	}
      }
      
      $(document).ready(function() {
      	$('#example').dataTable( {
      		"bProcessing": true,
      		"bServerSide": true,
      		"sAjaxSource": "scripts/server_processing.php",
      		"fnServerData": fnDataTablesPipeline
      	} );
      } );

      Server response

      The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.

      
      			
      			
      			

      Other examples

      assets/plugins/DataTables/examples/server_side/scripts/server_processing.php000064400000011441152510440430023624 0ustar00 intval($_GET['sEcho']), "iTotalRecords" => $iTotal, "iTotalDisplayRecords" => $iFilteredTotal, "aaData" => array() ); while ( $aRow = mysql_fetch_array( $rResult ) ) { $row = array(); for ( $i=0 ; $iassets/plugins/DataTables/examples/server_side/scripts/jsonp.php000064400000011457152510440430021222 0ustar00 intval($_GET['sEcho']), "iTotalRecords" => $iTotal, "iTotalDisplayRecords" => $iFilteredTotal, "aaData" => array() ); while ( $aRow = mysql_fetch_array( $rResult ) ) { $row = array(); for ( $i=0 ; $iassets/plugins/DataTables/examples/server_side/scripts/details_col.php000064400000011660152510440430022347 0ustar00 intval($_GET['sEcho']), "iTotalRecords" => $iTotal, "iTotalDisplayRecords" => $iFilteredTotal, "aaData" => array() ); while ( $aRow = mysql_fetch_array( $rResult ) ) { $row = array(); /* Add the details image at the start of the display array */ $row[] = ''; for ( $i=0 ; $iassets/plugins/DataTables/examples/server_side/scripts/post.php000064400000012155152510440430021052 0ustar00assets/plugins/DataTables/examples/server_side/scripts/filter_col.php000064400000007636152510440430022217 0ustar00assets/plugins/DataTables/examples/server_side/scripts/objects_jsonp.php000064400000011746152510440430022734 0ustar00 intval($_GET['sEcho']), "iTotalRecords" => $iTotal, "iTotalDisplayRecords" => $iFilteredTotal, "aaData" => array() ); while ( $aRow = mysql_fetch_array( $rResult ) ) { $row = array(); for ( $i=0 ; $iassets/plugins/DataTables/examples/server_side/scripts/objects.php000064400000011713152510440430021515 0ustar00 intval($_GET['sEcho']), "iTotalRecords" => $iTotal, "iTotalDisplayRecords" => $iFilteredTotal, "aaData" => array() ); while ( $aRow = mysql_fetch_array( $rResult ) ) { $row = array(); for ( $i=0 ; $iassets/plugins/DataTables/examples/server_side/scripts/id.php000064400000011643152510440430020462 0ustar00 intval($_GET['sEcho']), "iTotalRecords" => $iTotal, "iTotalDisplayRecords" => $iFilteredTotal, "aaData" => array() ); while ( $aRow = mysql_fetch_array( $rResult ) ) { $row = array(); // Add the row ID and class to the object $row['DT_RowId'] = 'row_'.$aRow['id']; $row['DT_RowClass'] = 'grade'.$aRow['grade']; for ( $i=0 ; $iassets/plugins/DataTables/examples/server_side/scripts/id_jsonp.php000064400000011676152510440430021701 0ustar00 intval($_GET['sEcho']), "iTotalRecords" => $iTotal, "iTotalDisplayRecords" => $iFilteredTotal, "aaData" => array() ); while ( $aRow = mysql_fetch_array( $rResult ) ) { $row = array(); // Add the row ID and class to the object $row['DT_RowId'] = 'row_'.$aRow['id']; $row['DT_RowClass'] = 'grade'.$aRow['grade']; for ( $i=0 ; $iassets/plugins/DataTables/examples/server_side/scripts/custom_data_property.php000064400000011417152510440430024334 0ustar00 intval($_GET['sEcho']), "iTotalRecords" => $iTotal, "iTotalDisplayRecords" => $iFilteredTotal, "test" => array() ); while ( $aRow = mysql_fetch_array( $rResult ) ) { $row = array(); for ( $i=0 ; $iassets/plugins/DataTables/examples/server_side/object_data.html000064400000026474152510440430021023 0ustar00 DataTables example
      DataTables server-side processing example - object based data source

      Preamble

      The "native" data format that DataTables expects for server-side processing is a 2D array of data (rows by columns). However, this is often not flexible enough for either the server-side environment, or you might want to convey more information in the data source than is necessary to show in the table (row IDs from the database for example). For this DataTables supports the reading of data for objects as well as arrays.

      In this example the server responds with an array of objects, and DataTables will look up each property that is specified by the mData property given for each column

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Loading data from server
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      $(document).ready(function() {
      	$('#example').dataTable( {
      		"bProcessing": true,
      		"bServerSide": true,
      		"sAjaxSource": "scripts/objects.php",
      		"aoColumns": [
      			{ "mData": "engine" },
      			{ "mData": "browser" },
      			{ "mData": "platform" },
      			{ "mData": "version" },
      			{ "mData": "grade" }
      		]
      	} );
      } );

      Server response

      The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.

      
      			
      			
      			

      Other examples

      assets/plugins/DataTables/examples/plug-ins/sorting_sType.html000064400000050665152510440430020660 0ustar00 DataTables example
      DataTables sorting plug-in example

      Preamble

      When dealing with your own data formats, it can be desirable to define how you want sorting to occur. Using plug-in sorting functions, you have have DataTables sort data in any manner you wish. You tell DataTables how to sort a column by using the sType parameter - if it is not given then DataTables will attempt to automatically detect the type based on it's built in formatting functions.

      This example shows sorting with a comma (',') for a decimal place. This sorting plug-in (and others can be found on DataTables.net.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5,5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1,7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1,8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1,8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1,9 A
      Gecko Camino 1.0 OSX.2+ 1,8 A
      Gecko Camino 1.5 OSX.3+ 1,8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1,7 A
      Gecko Netscape Browser 8 Win 98SE+ 1,7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1,8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1,1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1,2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1,3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1,4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1,5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1,6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1,7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1,8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1,8 A
      Gecko Epiphany 2.20 Gnome 1,8 A
      Webkit Safari 1.2 OSX.3 125,5 A
      Webkit Safari 1.3 OSX.3 312,8 A
      Webkit Safari 2.0 OSX.4+ 419,3 A
      Webkit Safari 3.0 OSX.4+ 522,1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420,1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8,5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3,1 C
      KHTML Konqureror 3.3 KDE 3.3 3,3 A
      KHTML Konqureror 3.5 KDE 3.5 3,5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      jQuery.fn.dataTableExt.oSort['numeric-comma-asc']  = function(a,b) {
      	var x = (a == "-") ? 0 : a.replace( /,/, "." );
      	var y = (b == "-") ? 0 : b.replace( /,/, "." );
      	x = parseFloat( x );
      	y = parseFloat( y );
      	return ((x < y) ? -1 : ((x > y) ?  1 : 0));
      };
      
      jQuery.fn.dataTableExt.oSort['numeric-comma-desc'] = function(a,b) {
      	var x = (a == "-") ? 0 : a.replace( /,/, "." );
      	var y = (b == "-") ? 0 : b.replace( /,/, "." );
      	x = parseFloat( x );
      	y = parseFloat( y );
      	return ((x < y) ?  1 : ((x > y) ? -1 : 0));
      };
      
      $(document).ready(function() {
      	$('#example').dataTable( {
      		"aoColumns": [
      			null,
      			null,
      			null,
      			{ "sType": "numeric-comma" },
      			null
      		]
      	} );
      } );

      Other examples

      assets/plugins/DataTables/examples/plug-ins/paging_plugin.html000064400000064267152510440430020635 0ustar00 DataTables example
      DataTables custom pagination plug-in example

      Preamble

      The two default pagination styles that DataTables comes with are great for basic tables, but you might which to add extra customisation or a bit of 'glitz'. This plug-in will scroll the table in an animated style.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      /* Time between each scrolling frame */
      $.fn.dataTableExt.oPagination.iTweenTime = 100;
      
      $.fn.dataTableExt.oPagination.scrolling = {
      	"fnInit": function ( oSettings, nPaging, fnCallbackDraw )
      	{
      		/* Store the next and previous elements in the oSettings object as they can be very
      		 * usful for automation - particularly testing
      		 */
      		var nPrevious = document.createElement( 'div' );
      		var nNext = document.createElement( 'div' );
      		
      		if ( oSettings.sTableId !== '' )
      		{
      			nPaging.setAttribute( 'id', oSettings.sTableId+'_paginate' );
      			nPrevious.setAttribute( 'id', oSettings.sTableId+'_previous' );
      			nNext.setAttribute( 'id', oSettings.sTableId+'_next' );
      		}
      		
      		nPrevious.className = "paginate_disabled_previous";
      		nNext.className = "paginate_disabled_next";
      		
      		nPrevious.title = oSettings.oLanguage.oPaginate.sPrevious;
      		nNext.title = oSettings.oLanguage.oPaginate.sNext;
      		
      		nPaging.appendChild( nPrevious );
      		nPaging.appendChild( nNext );
      		
      		$(nPrevious).click( function() {
      			/* Disallow paging event during a current paging event */
      			if ( typeof oSettings.iPagingLoopStart != 'undefined' && oSettings.iPagingLoopStart != -1 )
      			{
      				return;
      			}
      			
      			oSettings.iPagingLoopStart = oSettings._iDisplayStart;
      			oSettings.iPagingEnd = oSettings._iDisplayStart - oSettings._iDisplayLength;
      			
      			/* Correct for underrun */
      			if ( oSettings.iPagingEnd < 0 )
      			{
      			  oSettings.iPagingEnd = 0;
      			}
      			
      			var iTween = $.fn.dataTableExt.oPagination.iTweenTime;
      			var innerLoop = function () {
      				if ( oSettings.iPagingLoopStart > oSettings.iPagingEnd ) {
      					oSettings.iPagingLoopStart--;
      					oSettings._iDisplayStart = oSettings.iPagingLoopStart;
      					fnCallbackDraw( oSettings );
      					setTimeout( function() { innerLoop(); }, iTween );
      				} else {
      					oSettings.iPagingLoopStart = -1;
      				}
      			};
      			innerLoop();
      		} );
      		
      		$(nNext).click( function() {
      			/* Disallow paging event during a current paging event */
      			if ( typeof oSettings.iPagingLoopStart != 'undefined' && oSettings.iPagingLoopStart != -1 )
      			{
      				return;
      			}
      			
      			oSettings.iPagingLoopStart = oSettings._iDisplayStart;
      			
      			/* Make sure we are not over running the display array */
      			if ( oSettings._iDisplayStart + oSettings._iDisplayLength < oSettings.fnRecordsDisplay() )
      			{
      				oSettings.iPagingEnd = oSettings._iDisplayStart + oSettings._iDisplayLength;
      			}
      			
      			var iTween = $.fn.dataTableExt.oPagination.iTweenTime;
      			var innerLoop = function () {
      				if ( oSettings.iPagingLoopStart < oSettings.iPagingEnd ) {
      					oSettings.iPagingLoopStart++;
      					oSettings._iDisplayStart = oSettings.iPagingLoopStart;
      					fnCallbackDraw( oSettings );
      					setTimeout( function() { innerLoop(); }, iTween );
      				} else {
      					oSettings.iPagingLoopStart = -1;
      				}
      			};
      			innerLoop();
      		} );
      		
      		/* Take the brutal approach to cancelling text selection */
      		$(nPrevious).bind( 'selectstart', function () { return false; } );
      		$(nNext).bind( 'selectstart', function () { return false; } );
      	},
      	
      	"fnUpdate": function ( oSettings, fnCallbackDraw )
      	{
      		if ( !oSettings.aanFeatures.p )
      		{
      			return;
      		}
      		
      		/* Loop over each instance of the pager */
      		var an = oSettings.aanFeatures.p;
      		for ( var i=0, iLen=an.length ; i<iLen ; i++ )
      		{
      			if ( an[i].childNodes.length !== 0 )
      			{
      				an[i].childNodes[0].className = 
      					( oSettings._iDisplayStart === 0 ) ? 
      					oSettings.oClasses.sPagePrevDisabled : oSettings.oClasses.sPagePrevEnabled;
      				
      				an[i].childNodes[1].className = 
      					( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) ? 
      					oSettings.oClasses.sPageNextDisabled : oSettings.oClasses.sPageNextEnabled;
      			}
      		}
      	}
      }
      
      $(document).ready(function() {
      	$('#example').dataTable( {
      		"sPaginationType": "scrolling"
      	} );
      } );

      Other examples

      assets/plugins/DataTables/examples/plug-ins/html_sort.html000064400000024640152510440430020014 0ustar00 DataTables example
      DataTables HTML sorting auto-detection example

      Preamble

      It can be very useful to have DataTables default to it's built in type of HTML, rather than string, which a column does not fit the requirements of any other type. The way this method works is to put the 'html' type at the end of aTypes, which means it will be set as that type only if none of the other types match the data in question.

      Live example

      Reflection Link
      DataTables DataTables
      Integrity A link to Integrity
      Integrity Integrity

      Initialisation code

      jQuery.fn.dataTableExt.aTypes.push(
      	function ( sData ) {
      		return 'html';
      	}
      );
      
      $(document).ready(function() {
      	$('#example').dataTable();
      } );

      Other examples

      assets/plugins/DataTables/examples/plug-ins/dom_sort.html000064400000122626152510440430017632 0ustar00 DataTables example
      DataTables live DOM sorting example

      Preamble

      This example shows how you can use information available in the DOM to sort columns. Typically DataTables will read information to be sorted during it's initialisation phase, and this will not be updated based on user interaction, so sorting on columns which have, for example, form elements in them, may not reflect the current value of the input. To overcome this problem, you must update the data that DataTables will sort on, just prior to the sort. This method is much more efficient than actually sorting using the DOM, since only one DOM query is needed for each cell to be sorted.

      The example below shows the first two columns as normal text with sorting as you would expect. The following columns all have a form input element of different kinds, and the information contained within is what DataTables will perform the sort on, based on the value at the time of the sort.

      This is a fairly simple example, but it you aren't constrained to just using form input elements, you could use anything and customise your DOM queries to suit yourself. You could also update the sorting live as a user in entered data into a form using an event handler calling fnSort() or fnDraw().

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade Check
      Trident Internet Explorer 4.0
      Trident Internet Explorer 5.0
      Trident Internet Explorer 5.5
      Trident Internet Explorer 6
      Trident Internet Explorer 7
      Trident AOL browser (AOL desktop)
      Gecko Firefox 1.0
      Gecko Firefox 1.5
      Gecko Firefox 2.0
      Gecko Firefox 3.0
      Gecko Camino 1.0
      Gecko Camino 1.5
      Gecko Netscape 7.2
      Gecko Netscape Browser 8
      Gecko Netscape Navigator 9
      Gecko Mozilla 1.0
      Gecko Mozilla 1.1
      Gecko Mozilla 1.2
      Gecko Mozilla 1.3
      Gecko Mozilla 1.4
      Gecko Mozilla 1.5
      Gecko Mozilla 1.6
      Gecko Mozilla 1.7
      Gecko Mozilla 1.8
      Gecko Seamonkey 1.1
      Gecko Epiphany 2.20
      Webkit Safari 1.2
      Webkit Safari 1.3
      Webkit Safari 2.0
      Webkit Safari 3.0
      Webkit OmniWeb 5.5
      Webkit iPod Touch / iPhone
      Webkit S60
      Presto Opera 7.0
      Presto Opera 7.5
      Presto Opera 8.0
      Presto Opera 8.5
      Presto Opera 9.0
      Presto Opera 9.2
      Presto Opera 9.5
      Presto Opera for Wii
      Presto Nokia N800
      Presto Nintendo DS browser
      KHTML Konqureror 3.1
      KHTML Konqureror 3.3
      KHTML Konqureror 3.5
      Tasman Internet Explorer 4.5
      Tasman Internet Explorer 5.1
      Tasman Internet Explorer 5.2
      Misc NetFront 3.1
      Misc NetFront 3.4
      Misc Dillo 0.8
      Misc Links
      Misc Lynx
      Misc IE Mobile
      Misc PSP browser
      Other browsers All others
      Rendering engine Browser Platform(s) Engine version CSS grade Check

      Initialisation code

      /* Create an array with the values of all the input boxes in a column */
      $.fn.dataTableExt.afnSortData['dom-text'] = function  ( oSettings, iColumn )
      {
      	var aData = [];
      	$( 'td:eq('+iColumn+') input', oSettings.oApi._fnGetTrNodes(oSettings) ).each( function () {
      		aData.push( this.value );
      	} );
      	return aData;
      }
      
      /* Create an array with the values of all the select options in a column */
      $.fn.dataTableExt.afnSortData['dom-select'] = function  ( oSettings, iColumn )
      {
      	var aData = [];
      	$( 'td:eq('+iColumn+') select', oSettings.oApi._fnGetTrNodes(oSettings) ).each( function () {
      		aData.push( $(this).val() );
      	} );
      	return aData;
      }
      
      /* Create an array with the values of all the checkboxes in a column */
      $.fn.dataTableExt.afnSortData['dom-checkbox'] = function  ( oSettings, iColumn )
      {
      	var aData = [];
      	$( 'td:eq('+iColumn+') input', oSettings.oApi._fnGetTrNodes(oSettings) ).each( function () {
      		aData.push( this.checked==true ? "1" : "0" );
      	} );
      	return aData;
      }
      
      /* Initialise the table with the required column sorting data types */
      $(document).ready(function() {
      	$('#example').dataTable( {
      		"aoColumns": [
      			null,
      			null,
      			{ "sSortDataType": "dom-text" },
      			{ "sSortDataType": "dom-text", "sType": "numeric" },
      			{ "sSortDataType": "dom-select" },
      			{ "sSortDataType": "dom-checkbox" }
      		]
      	} );
      } );

      Other examples

      assets/plugins/DataTables/examples/plug-ins/sorting_plugin.html000064400000052662152510440440021052 0ustar00 DataTables example
      DataTables sorting and type detection example

      Preamble

      When dealing with your own data formatting, it can often be very useful to have DataTables detect data types and sorting them accordingly for types which are not build into DataTables. For this reason plug-in support is provided to allow custom type detection and sorting.

      This example shows sorting with a comma (',') for a decimal place. These plug-ins (and others can be found on DataTables.net.

      Live example

      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5,5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1,7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1,8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1,8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1,9 A
      Gecko Camino 1.0 OSX.2+ 1,8 A
      Gecko Camino 1.5 OSX.3+ 1,8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1,7 A
      Gecko Netscape Browser 8 Win 98SE+ 1,7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1,8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1,1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1,2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1,3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1,4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1,5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1,6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1,7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1,8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1,8 A
      Gecko Epiphany 2.20 Gnome 1,8 A
      Webkit Safari 1.2 OSX.3 125,5 A
      Webkit Safari 1.3 OSX.3 312,8 A
      Webkit Safari 2.0 OSX.4+ 419,3 A
      Webkit Safari 3.0 OSX.4+ 522,1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420,1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8,5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3,1 C
      KHTML Konqureror 3.3 KDE 3.3 3,3 A
      KHTML Konqureror 3.5 KDE 3.5 3,5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      /* Note 'unshift' does not work in IE6. A simply array concatenation would. This is used
       * to give the custom type top priority
       */
      jQuery.fn.dataTableExt.aTypes.unshift(
      	function ( sData )
      	{
      		var sValidChars = "0123456789-,";
      		var Char;
      		var bDecimal = false;
      		
      		/* Check the numeric part */
      		for ( i=0 ; i<sData.length ; i++ )
      		{
      			Char = sData.charAt(i);
      			if (sValidChars.indexOf(Char) == -1)
      			{
      				return null;
      			}
      			
      			/* Only allowed one decimal place... */
      			if ( Char == "," )
      			{
      				if ( bDecimal )
      				{
      					return null;
      				}
      				bDecimal = true;
      			}
      		}
      		
      		return 'numeric-comma';
      	}
      );
      
      jQuery.fn.dataTableExt.oSort['numeric-comma-asc']  = function(a,b) {
      	var x = (a == "-") ? 0 : a.replace( /,/, "." );
      	var y = (b == "-") ? 0 : b.replace( /,/, "." );
      	x = parseFloat( x );
      	y = parseFloat( y );
      	return ((x < y) ? -1 : ((x > y) ?  1 : 0));
      };
      
      jQuery.fn.dataTableExt.oSort['numeric-comma-desc'] = function(a,b) {
      	var x = (a == "-") ? 0 : a.replace( /,/, "." );
      	var y = (b == "-") ? 0 : b.replace( /,/, "." );
      	x = parseFloat( x );
      	y = parseFloat( y );
      	return ((x < y) ?  1 : ((x > y) ? -1 : 0));
      };
      
      $(document).ready(function() {
      	$('#example').dataTable();
      } );

      Other examples

      assets/plugins/DataTables/examples/plug-ins/plugin_api.html000064400000052526152510440440020135 0ustar00 DataTables example
      DataTables new API function plug-in example

      Preamble

      DataTables presents a number of useful API functions to the calling code which can be used to manipulate the table data as required. But there are times when DataTables doesn't provide the API function that you want - so for this DataTables allows a method by which custom API functions can be defined (effectively a plug-in). This is done by adding functions the $.fn.dataTableExt.oApi object, which will be registered by DataTables. Each function is passed a single parameter, the settings object for the table in question.

      In the example below, I present an API function which is used to obtain all of the TR rows which are currently not on display (useful for building a form from the table).

      Live example

      Click to get hidden rows
      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      /*
       * Function: fnGetHiddenTrNodes
       * Purpose:  Get all of the hidden TR nodes (i.e. the ones which aren't on display)
       * Returns:  array:
       * Inputs:   object:oSettings - DataTables settings object
       */
      $.fn.dataTableExt.oApi.fnGetHiddenTrNodes = function ( oSettings )
      {
      	/* Note the use of a DataTables 'private' function thought the 'oApi' object */
      	var anNodes = this.oApi._fnGetTrNodes( oSettings );
      	var anDisplay = $('tbody tr', oSettings.nTable);
      	
      	/* Remove nodes which are being displayed */
      	for ( var i=0 ; i<anDisplay.length ; i++ )
      	{
      		var iIndex = jQuery.inArray( anDisplay[i], anNodes );
      		if ( iIndex != -1 )
      		{
      			anNodes.splice( iIndex, 1 );
      		}
      	}
      	
      	/* Fire back the array to the caller */
      	return anNodes;
      }
      
      /* Init the table and fire off a call to get the hidden nodes. */
      var oTable;
      $(document).ready(function() {
      	var oTable = $('#example').dataTable();
      	
      	$('#button').click( function () {
      		var nHidden = oTable.fnGetHiddenTrNodes();
      		alert( nHidden.length +' nodes were returned' );
      	} );
      } );

      Other examples

      assets/plugins/DataTables/examples/plug-ins/range_filtering.html000064400000052074152510440440021143 0ustar00 DataTables example
      DataTables custom filtering (range filtering) example

      Preamble

      There may be occasions when you wish to filter data presented to the end user in your own manner, common examples are number range filtering (in between two numbers) and date range filtering. DataTables provide an API method to add your own filtering functions, $.fn.dataTableExt.afnFiltering. This is an array of functions (push your own onto it) which will will be run at table draw time to see if a particular row should be included or not.

      Live example

      Minimum engine version:
      Maximum engine version:
      Rendering engine Browser Platform(s) Engine version CSS grade
      Trident Internet Explorer 4.0 Win 95+ 4 X
      Trident Internet Explorer 5.0 Win 95+ 5 C
      Trident Internet Explorer 5.5 Win 95+ 5.5 A
      Trident Internet Explorer 6 Win 98+ 6 A
      Trident Internet Explorer 7 Win XP SP2+ 7 A
      Trident AOL browser (AOL desktop) Win XP 6 A
      Gecko Firefox 1.0 Win 98+ / OSX.2+ 1.7 A
      Gecko Firefox 1.5 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 2.0 Win 98+ / OSX.2+ 1.8 A
      Gecko Firefox 3.0 Win 2k+ / OSX.3+ 1.9 A
      Gecko Camino 1.0 OSX.2+ 1.8 A
      Gecko Camino 1.5 OSX.3+ 1.8 A
      Gecko Netscape 7.2 Win 95+ / Mac OS 8.6-9.2 1.7 A
      Gecko Netscape Browser 8 Win 98SE+ 1.7 A
      Gecko Netscape Navigator 9 Win 98+ / OSX.2+ 1.8 A
      Gecko Mozilla 1.0 Win 95+ / OSX.1+ 1 A
      Gecko Mozilla 1.1 Win 95+ / OSX.1+ 1.1 A
      Gecko Mozilla 1.2 Win 95+ / OSX.1+ 1.2 A
      Gecko Mozilla 1.3 Win 95+ / OSX.1+ 1.3 A
      Gecko Mozilla 1.4 Win 95+ / OSX.1+ 1.4 A
      Gecko Mozilla 1.5 Win 95+ / OSX.1+ 1.5 A
      Gecko Mozilla 1.6 Win 95+ / OSX.1+ 1.6 A
      Gecko Mozilla 1.7 Win 98+ / OSX.1+ 1.7 A
      Gecko Mozilla 1.8 Win 98+ / OSX.1+ 1.8 A
      Gecko Seamonkey 1.1 Win 98+ / OSX.2+ 1.8 A
      Gecko Epiphany 2.20 Gnome 1.8 A
      Webkit Safari 1.2 OSX.3 125.5 A
      Webkit Safari 1.3 OSX.3 312.8 A
      Webkit Safari 2.0 OSX.4+ 419.3 A
      Webkit Safari 3.0 OSX.4+ 522.1 A
      Webkit OmniWeb 5.5 OSX.4+ 420 A
      Webkit iPod Touch / iPhone iPod 420.1 A
      Webkit S60 S60 413 A
      Presto Opera 7.0 Win 95+ / OSX.1+ - A
      Presto Opera 7.5 Win 95+ / OSX.2+ - A
      Presto Opera 8.0 Win 95+ / OSX.2+ - A
      Presto Opera 8.5 Win 95+ / OSX.2+ - A
      Presto Opera 9.0 Win 95+ / OSX.3+ - A
      Presto Opera 9.2 Win 88+ / OSX.3+ - A
      Presto Opera 9.5 Win 88+ / OSX.3+ - A
      Presto Opera for Wii Wii - A
      Presto Nokia N800 N800 - A
      Presto Nintendo DS browser Nintendo DS 8.5 C/A1
      KHTML Konqureror 3.1 KDE 3.1 3.1 C
      KHTML Konqureror 3.3 KDE 3.3 3.3 A
      KHTML Konqureror 3.5 KDE 3.5 3.5 A
      Tasman Internet Explorer 4.5 Mac OS 8-9 - X
      Tasman Internet Explorer 5.1 Mac OS 7.6-9 1 C
      Tasman Internet Explorer 5.2 Mac OS 8-X 1 C
      Misc NetFront 3.1 Embedded devices - C
      Misc NetFront 3.4 Embedded devices - A
      Misc Dillo 0.8 Embedded devices - X
      Misc Links Text only - X
      Misc Lynx Text only - X
      Misc IE Mobile Windows Mobile 6 - C
      Misc PSP browser PSP - C
      Other browsers All others - - U
      Rendering engine Browser Platform(s) Engine version CSS grade

      Initialisation code

      /* Custom filtering function which will filter data in column four between two values */
      $.fn.dataTableExt.afnFiltering.push(
      	function( oSettings, aData, iDataIndex ) {
      		var iMin = document.getElementById('min').value * 1;
      		var iMax = document.getElementById('max').value * 1;
      		var iVersion = aData[3] == "-" ? 0 : aData[3]*1;
      		if ( iMin == "" && iMax == "" )
      		{
      			return true;
      		}
      		else if ( iMin == "" && iVersion < iMax )
      		{
      			return true;
      		}
      		else if ( iMin < iVersion && "" == iMax )
      		{
      			return true;
      		}
      		else if ( iMin < iVersion && iVersion < iMax )
      		{
      			return true;
      		}
      		return false;
      	}
      );
      
      $(document).ready(function() {
      	/* Initialise datatables */
      	var oTable = $('#example').dataTable();
      	
      	/* Add event listeners to the two range filtering inputs */
      	$('#min').keyup( function() { oTable.fnDraw(); } );
      	$('#max').keyup( function() { oTable.fnDraw(); } );
      } );

      Other examples

      assets/plugins/DataTables/examples/examples_support/themes/ui-lightness/jquery-ui-1.8.4.custom.css000064400000102477152510440440027320 0ustar00/* * jQuery UI CSS Framework @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Theming/API */ /* Layout helpers ----------------------------------*/ .ui-helper-hidden { display: none; } .ui-helper-hidden-accessible { position: absolute; left: -99999999px; } .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .ui-helper-clearfix { display: inline-block; } /* required comment for clearfix to work in Opera \*/ * html .ui-helper-clearfix { height:1%; } .ui-helper-clearfix { display:block; } /* end clearfix */ .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } /* Interaction Cues ----------------------------------*/ .ui-state-disabled { cursor: default !important; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } /* Misc visuals ----------------------------------*/ /* Overlays */ .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } /* * jQuery UI CSS Framework @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Theming/API * * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px */ /* Component containers ----------------------------------*/ .ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } .ui-widget .ui-widget { font-size: 1em; } .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } .ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } .ui-widget-content a { color: #333333; } .ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } .ui-widget-header a { color: #ffffff; } /* Interaction states ----------------------------------*/ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; } .ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; } .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } .ui-widget :active { outline: none; } /* Interaction Cues ----------------------------------*/ .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; } .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } .ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } .ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } .ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } .ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } /* positioning */ .ui-icon-carat-1-n { background-position: 0 0; } .ui-icon-carat-1-ne { background-position: -16px 0; } .ui-icon-carat-1-e { background-position: -32px 0; } .ui-icon-carat-1-se { background-position: -48px 0; } .ui-icon-carat-1-s { background-position: -64px 0; } .ui-icon-carat-1-sw { background-position: -80px 0; } .ui-icon-carat-1-w { background-position: -96px 0; } .ui-icon-carat-1-nw { background-position: -112px 0; } .ui-icon-carat-2-n-s { background-position: -128px 0; } .ui-icon-carat-2-e-w { background-position: -144px 0; } .ui-icon-triangle-1-n { background-position: 0 -16px; } .ui-icon-triangle-1-ne { background-position: -16px -16px; } .ui-icon-triangle-1-e { background-position: -32px -16px; } .ui-icon-triangle-1-se { background-position: -48px -16px; } .ui-icon-triangle-1-s { background-position: -64px -16px; } .ui-icon-triangle-1-sw { background-position: -80px -16px; } .ui-icon-triangle-1-w { background-position: -96px -16px; } .ui-icon-triangle-1-nw { background-position: -112px -16px; } .ui-icon-triangle-2-n-s { background-position: -128px -16px; } .ui-icon-triangle-2-e-w { background-position: -144px -16px; } .ui-icon-arrow-1-n { background-position: 0 -32px; } .ui-icon-arrow-1-ne { background-position: -16px -32px; } .ui-icon-arrow-1-e { background-position: -32px -32px; } .ui-icon-arrow-1-se { background-position: -48px -32px; } .ui-icon-arrow-1-s { background-position: -64px -32px; } .ui-icon-arrow-1-sw { background-position: -80px -32px; } .ui-icon-arrow-1-w { background-position: -96px -32px; } .ui-icon-arrow-1-nw { background-position: -112px -32px; } .ui-icon-arrow-2-n-s { background-position: -128px -32px; } .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } .ui-icon-arrow-2-e-w { background-position: -160px -32px; } .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } .ui-icon-arrowstop-1-n { background-position: -192px -32px; } .ui-icon-arrowstop-1-e { background-position: -208px -32px; } .ui-icon-arrowstop-1-s { background-position: -224px -32px; } .ui-icon-arrowstop-1-w { background-position: -240px -32px; } .ui-icon-arrowthick-1-n { background-position: 0 -48px; } .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } .ui-icon-arrowthick-1-e { background-position: -32px -48px; } .ui-icon-arrowthick-1-se { background-position: -48px -48px; } .ui-icon-arrowthick-1-s { background-position: -64px -48px; } .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } .ui-icon-arrowthick-1-w { background-position: -96px -48px; } .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } .ui-icon-arrow-4 { background-position: 0 -80px; } .ui-icon-arrow-4-diag { background-position: -16px -80px; } .ui-icon-extlink { background-position: -32px -80px; } .ui-icon-newwin { background-position: -48px -80px; } .ui-icon-refresh { background-position: -64px -80px; } .ui-icon-shuffle { background-position: -80px -80px; } .ui-icon-transfer-e-w { background-position: -96px -80px; } .ui-icon-transferthick-e-w { background-position: -112px -80px; } .ui-icon-folder-collapsed { background-position: 0 -96px; } .ui-icon-folder-open { background-position: -16px -96px; } .ui-icon-document { background-position: -32px -96px; } .ui-icon-document-b { background-position: -48px -96px; } .ui-icon-note { background-position: -64px -96px; } .ui-icon-mail-closed { background-position: -80px -96px; } .ui-icon-mail-open { background-position: -96px -96px; } .ui-icon-suitcase { background-position: -112px -96px; } .ui-icon-comment { background-position: -128px -96px; } .ui-icon-person { background-position: -144px -96px; } .ui-icon-print { background-position: -160px -96px; } .ui-icon-trash { background-position: -176px -96px; } .ui-icon-locked { background-position: -192px -96px; } .ui-icon-unlocked { background-position: -208px -96px; } .ui-icon-bookmark { background-position: -224px -96px; } .ui-icon-tag { background-position: -240px -96px; } .ui-icon-home { background-position: 0 -112px; } .ui-icon-flag { background-position: -16px -112px; } .ui-icon-calendar { background-position: -32px -112px; } .ui-icon-cart { background-position: -48px -112px; } .ui-icon-pencil { background-position: -64px -112px; } .ui-icon-clock { background-position: -80px -112px; } .ui-icon-disk { background-position: -96px -112px; } .ui-icon-calculator { background-position: -112px -112px; } .ui-icon-zoomin { background-position: -128px -112px; } .ui-icon-zoomout { background-position: -144px -112px; } .ui-icon-search { background-position: -160px -112px; } .ui-icon-wrench { background-position: -176px -112px; } .ui-icon-gear { background-position: -192px -112px; } .ui-icon-heart { background-position: -208px -112px; } .ui-icon-star { background-position: -224px -112px; } .ui-icon-link { background-position: -240px -112px; } .ui-icon-cancel { background-position: 0 -128px; } .ui-icon-plus { background-position: -16px -128px; } .ui-icon-plusthick { background-position: -32px -128px; } .ui-icon-minus { background-position: -48px -128px; } .ui-icon-minusthick { background-position: -64px -128px; } .ui-icon-close { background-position: -80px -128px; } .ui-icon-closethick { background-position: -96px -128px; } .ui-icon-key { background-position: -112px -128px; } .ui-icon-lightbulb { background-position: -128px -128px; } .ui-icon-scissors { background-position: -144px -128px; } .ui-icon-clipboard { background-position: -160px -128px; } .ui-icon-copy { background-position: -176px -128px; } .ui-icon-contact { background-position: -192px -128px; } .ui-icon-image { background-position: -208px -128px; } .ui-icon-video { background-position: -224px -128px; } .ui-icon-script { background-position: -240px -128px; } .ui-icon-alert { background-position: 0 -144px; } .ui-icon-info { background-position: -16px -144px; } .ui-icon-notice { background-position: -32px -144px; } .ui-icon-help { background-position: -48px -144px; } .ui-icon-check { background-position: -64px -144px; } .ui-icon-bullet { background-position: -80px -144px; } .ui-icon-radio-off { background-position: -96px -144px; } .ui-icon-radio-on { background-position: -112px -144px; } .ui-icon-pin-w { background-position: -128px -144px; } .ui-icon-pin-s { background-position: -144px -144px; } .ui-icon-play { background-position: 0 -160px; } .ui-icon-pause { background-position: -16px -160px; } .ui-icon-seek-next { background-position: -32px -160px; } .ui-icon-seek-prev { background-position: -48px -160px; } .ui-icon-seek-end { background-position: -64px -160px; } .ui-icon-seek-start { background-position: -80px -160px; } /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ .ui-icon-seek-first { background-position: -80px -160px; } .ui-icon-stop { background-position: -96px -160px; } .ui-icon-eject { background-position: -112px -160px; } .ui-icon-volume-off { background-position: -128px -160px; } .ui-icon-volume-on { background-position: -144px -160px; } .ui-icon-power { background-position: 0 -176px; } .ui-icon-signal-diag { background-position: -16px -176px; } .ui-icon-signal { background-position: -32px -176px; } .ui-icon-battery-0 { background-position: -48px -176px; } .ui-icon-battery-1 { background-position: -64px -176px; } .ui-icon-battery-2 { background-position: -80px -176px; } .ui-icon-battery-3 { background-position: -96px -176px; } .ui-icon-circle-plus { background-position: 0 -192px; } .ui-icon-circle-minus { background-position: -16px -192px; } .ui-icon-circle-close { background-position: -32px -192px; } .ui-icon-circle-triangle-e { background-position: -48px -192px; } .ui-icon-circle-triangle-s { background-position: -64px -192px; } .ui-icon-circle-triangle-w { background-position: -80px -192px; } .ui-icon-circle-triangle-n { background-position: -96px -192px; } .ui-icon-circle-arrow-e { background-position: -112px -192px; } .ui-icon-circle-arrow-s { background-position: -128px -192px; } .ui-icon-circle-arrow-w { background-position: -144px -192px; } .ui-icon-circle-arrow-n { background-position: -160px -192px; } .ui-icon-circle-zoomin { background-position: -176px -192px; } .ui-icon-circle-zoomout { background-position: -192px -192px; } .ui-icon-circle-check { background-position: -208px -192px; } .ui-icon-circlesmall-plus { background-position: 0 -208px; } .ui-icon-circlesmall-minus { background-position: -16px -208px; } .ui-icon-circlesmall-close { background-position: -32px -208px; } .ui-icon-squaresmall-plus { background-position: -48px -208px; } .ui-icon-squaresmall-minus { background-position: -64px -208px; } .ui-icon-squaresmall-close { background-position: -80px -208px; } .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } .ui-icon-grip-solid-vertical { background-position: -32px -224px; } .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } .ui-icon-grip-diagonal-se { background-position: -80px -224px; } /* Misc visuals ----------------------------------*/ /* Corner radius */ .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; } .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } .ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } .ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } .ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } .ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } .ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } /* Overlays */ .ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } .ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* * jQuery UI Resizable @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Resizable#theming */ .ui-resizable { position: relative;} .ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* * jQuery UI Selectable @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Selectable#theming */ .ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } /* * jQuery UI Accordion @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Accordion#theming */ /* IE/Win - Fix animation bug - #4615 */ .ui-accordion { width: 100%; } .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } .ui-accordion .ui-accordion-li-fix { display: inline; } .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } .ui-accordion .ui-accordion-content-active { display: block; }/* * jQuery UI Autocomplete @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Autocomplete#theming */ .ui-autocomplete { position: absolute; cursor: default; } /* workarounds */ * html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ /* * jQuery UI Menu @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Menu#theming */ .ui-menu { list-style:none; padding: 2px; margin: 0; display:block; float: left; } .ui-menu .ui-menu { margin-top: -3px; } .ui-menu .ui-menu-item { margin:0; padding: 0; zoom: 1; float: left; clear: left; width: 100%; } .ui-menu .ui-menu-item a { text-decoration:none; display:block; padding:.2em .4em; line-height:1.5; zoom:1; } .ui-menu .ui-menu-item a.ui-state-hover, .ui-menu .ui-menu-item a.ui-state-active { font-weight: normal; margin: -1px; } /* * jQuery UI Button @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Button#theming */ .ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ .ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ .ui-button-icons-only { width: 3.4em; } button.ui-button-icons-only { width: 3.7em; } /*button text element */ .ui-button .ui-button-text { display: block; line-height: 1.4; } .ui-button-text-only .ui-button-text { padding: .4em 1em; } .ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } .ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } .ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } .ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } /* no icon support for input elements, provide padding by default */ input.ui-button { padding: .4em 1em; } /*button icon element(s) */ .ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } .ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } .ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } .ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } /*button sets*/ .ui-buttonset { margin-right: 7px; } .ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } /* workarounds */ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ /* * jQuery UI Dialog @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Dialog#theming */ .ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } .ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; } .ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } .ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } .ui-draggable .ui-dialog-titlebar { cursor: move; } /* * jQuery UI Slider @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Slider#theming */ .ui-slider { position: relative; text-align: left; } .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } .ui-slider-horizontal { height: .8em; } .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } .ui-slider-horizontal .ui-slider-range-min { left: 0; } .ui-slider-horizontal .ui-slider-range-max { right: 0; } .ui-slider-vertical { width: .8em; height: 100px; } .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } .ui-slider-vertical .ui-slider-range-min { bottom: 0; } .ui-slider-vertical .ui-slider-range-max { top: 0; }/* * jQuery UI Tabs @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Tabs#theming */ .ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ .ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } .ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } .ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ .ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } .ui-tabs .ui-tabs-hide { display: none !important; } /* * jQuery UI Datepicker @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Datepicker#theming */ .ui-datepicker { width: 17em; padding: .2em .2em 0; } .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } .ui-datepicker .ui-datepicker-prev { left:2px; } .ui-datepicker .ui-datepicker-next { right:2px; } .ui-datepicker .ui-datepicker-prev-hover { left:1px; } .ui-datepicker .ui-datepicker-next-hover { right:1px; } .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } .ui-datepicker select.ui-datepicker-month-year {width: 100%;} .ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year { width: 49%;} .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } .ui-datepicker td { border: 0; padding: 1px; } .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } /* with multiple calendars */ .ui-datepicker.ui-datepicker-multi { width:auto; } .ui-datepicker-multi .ui-datepicker-group { float:left; } .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } .ui-datepicker-row-break { clear:both; width:100%; } /* RTL support */ .ui-datepicker-rtl { direction: rtl; } .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } .ui-datepicker-rtl .ui-datepicker-group { float:right; } .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ .ui-datepicker-cover { display: none; /*sorry for IE5*/ display/**/: block; /*sorry for IE5*/ position: absolute; /*must have*/ z-index: -1; /*must have*/ filter: mask(); /*must have*/ top: -4px; /*must have*/ left: -4px; /*must have*/ width: 200px; /*must have*/ height: 200px; /*must have*/ }/* * jQuery UI Progressbar @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Progressbar#theming */ .ui-progressbar { height:2em; text-align: left; } .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }examples/examples_support/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png000064400000007262152510440440032241 0ustar00assets/plugins/DataTablesPNG  IHDRdp}yIDATx[@ɱH֙$YVb&3̇qOlXC#bQ%hyu(@A :P6t l`(@A :P6t l`(@A :P6upޡl`(c޿]I1)G!n${Ax5{2&w݋]˃5k Vؤ=k39Ʀhkxcdgu51k~aIkYyLa+8-;3c:3k%;Ȋ):W\Zʧ3OQA_񗸺SG@A :,U^N1et]L޲>2z+v5'yڝ_}uE+zW變uř6jKQ{km| "s?b|dljvg}Tv粭GFޓħ]u=>fKvfTTgLnfCfڷڪll>grd͜?c8 󿳌ġjxx>oL^|5֌̘=-.+_QܙQYlklZ1Eyzr}+7o\^>q_?7^Jg6ॵ~8YR&+26bƚkl[c)eCKfHe[Bk~͎~<2E5hoxv8=qZ ˷ϊ17Ѽff/gŜynœ?qEVx2ؒCk|YkXȳdYWlErX͛ՙSyu1F2kό/=ٜ{2ZÓWCd>21UZGtTG5ϙk6t 8;7m~MFYkVgρdײy Q{Ư+bzg-Fku5$y>5hZ<3saݫ{6ZC\af΢X^_ˑWKdKTw*gKMqՋ\{Uj3/ٹr%g^{PW̉fCyy]m3qnگr_Ya#jYf_Ϝ3{/-Y8cGvm xtoombU֮,'5v,K)_ڻ`E~k#xMNx޲rA)r2bZo?Zw, :cnz;Ε֟%UAxhLスǕ ǿԎ3kUqߝ1FkC1ayA~kw Xxmv|,τsmWT?Jˏc`r_x7Qp[koYV~*=(]W_EwBʇXX\s՚}yw. 'U6x.Cܺ?wԆqKoO+z{[zxAS,ɢ[o^ovGg3ɯVtV~؀wpi:`-}َpF9x2 eX3c;3!ϲ"Hֲ 2VdZ9lgof]{ݟ1TsPjV~uol*{Fik}]9dzgyw%7w,z%yE7Ő_ԗGvHVTAӛѹJWbڽ[>ҿ{UR597s=kc>rn؀_`(@A :5 :? >r>r~)`x5tOKYHDzٟ=GpؓW֞g]oY{Q~yc/UMv"_^?ӍkzwWKSѽ mxzoQU㋢\GYL`{w+z+_;pS5 :<?]7Ə覹Mu}͇v2c,+m+~+ު\f<^yi1ZqD1fl֏|U[#XqHm]ZGchfoh#_3Z79=gD͞wecS/٦Ř|~K[^fG8 ;q WFgߓq&/HE:\ܲc+Uו6*sjl:͵o̷%ci$gf糲򐱣 4m%ّs4l~26|[] ïj/g+qE}+gٸkmKEݳe*6gSu2]Wm6kE6}__;o&9S_Y_œ2%'mJ]-VͯOWzMKO&嵹rl[xrZNX9b֗mTŧA+~͟oMWdHho5Ūu/>oI'ʃ7Yў8ۭ]g;^"hͯQ=s1e`Cy|!3qFv65/f%v_dw_L ~#+dev݊z>+YwnnvϞjߌ3l}s9KUgU}q7>WzqGc⹚YX|su~;ΟdS6+{SYw+΃=q?l'?co~WDXYy]1WYAiVz*T݊`ev+<#/z]n/z*2]1yϺ(n-_h,e?Gv*kWϳ=y[5Mty-Q.2k"dbgr=YU*{3sX2{`eu/kG1TuWĔ,E=ckڋd*e݋zQE= E=k+ؗm.\n[= IENDB`plugins/DataTables/examples/examples_support/themes/ui-lightness/images/ui-icons_ffffff_256x240.png000064400000010421152510440440030617 0ustar00assetsPNG  IHDRIJPLTENtRNS2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?sn~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?sn~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?sn~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?sn~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?sMr6jY+IFJM2S6ɕ2MV6$^rzQqIENDB`DataTables/examples/examples_support/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png000064400000000151152510440440031420 0ustar00assets/pluginsPNG  IHDRoX 0IDAT8! + ̼JHR)[lk=O_(<` H"IENDB`examples/examples_support/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png000064400000000404152510440440032752 0ustar00assets/plugins/DataTablesPNG  IHDR((mIDATXA 0,}Mi o _ mH|K?9_={=r *`22Hkgx 8(Up*  *`2~=eGMl@*8M⛤$[|YMRo8Io&) p{R@IENDB`examples/examples_support/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png000064400000000132152510440440033263 0ustar00assets/plugins/DataTablesPNG  IHDRdG,Z`!IDATc&!D;~D"IENDB`assets/plugins/DataTables/examples/examples_support/themes/smoothness/jquery-ui-1.8.4.custom.css000064400000102247152510440440027102 0ustar00/* * jQuery UI CSS Framework @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Theming/API */ /* Layout helpers ----------------------------------*/ .ui-helper-hidden { display: none; } .ui-helper-hidden-accessible { position: absolute; left: -99999999px; } .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .ui-helper-clearfix { display: inline-block; } /* required comment for clearfix to work in Opera \*/ * html .ui-helper-clearfix { height:1%; } .ui-helper-clearfix { display:block; } /* end clearfix */ .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } /* Interaction Cues ----------------------------------*/ .ui-state-disabled { cursor: default !important; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } /* Misc visuals ----------------------------------*/ /* Overlays */ .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } /* * jQuery UI CSS Framework @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Theming/API * * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px */ /* Component containers ----------------------------------*/ .ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; } .ui-widget .ui-widget { font-size: 1em; } .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; } .ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; } .ui-widget-content a { color: #222222; } .ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; } .ui-widget-header a { color: #222222; } /* Interaction states ----------------------------------*/ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; } .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; } .ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; } .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; } .ui-widget :active { outline: none; } /* Interaction Cues ----------------------------------*/ .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; } .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; } .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; } .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; } .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } .ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } .ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } .ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); } .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } .ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); } .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); } /* positioning */ .ui-icon-carat-1-n { background-position: 0 0; } .ui-icon-carat-1-ne { background-position: -16px 0; } .ui-icon-carat-1-e { background-position: -32px 0; } .ui-icon-carat-1-se { background-position: -48px 0; } .ui-icon-carat-1-s { background-position: -64px 0; } .ui-icon-carat-1-sw { background-position: -80px 0; } .ui-icon-carat-1-w { background-position: -96px 0; } .ui-icon-carat-1-nw { background-position: -112px 0; } .ui-icon-carat-2-n-s { background-position: -128px 0; } .ui-icon-carat-2-e-w { background-position: -144px 0; } .ui-icon-triangle-1-n { background-position: 0 -16px; } .ui-icon-triangle-1-ne { background-position: -16px -16px; } .ui-icon-triangle-1-e { background-position: -32px -16px; } .ui-icon-triangle-1-se { background-position: -48px -16px; } .ui-icon-triangle-1-s { background-position: -64px -16px; } .ui-icon-triangle-1-sw { background-position: -80px -16px; } .ui-icon-triangle-1-w { background-position: -96px -16px; } .ui-icon-triangle-1-nw { background-position: -112px -16px; } .ui-icon-triangle-2-n-s { background-position: -128px -16px; } .ui-icon-triangle-2-e-w { background-position: -144px -16px; } .ui-icon-arrow-1-n { background-position: 0 -32px; } .ui-icon-arrow-1-ne { background-position: -16px -32px; } .ui-icon-arrow-1-e { background-position: -32px -32px; } .ui-icon-arrow-1-se { background-position: -48px -32px; } .ui-icon-arrow-1-s { background-position: -64px -32px; } .ui-icon-arrow-1-sw { background-position: -80px -32px; } .ui-icon-arrow-1-w { background-position: -96px -32px; } .ui-icon-arrow-1-nw { background-position: -112px -32px; } .ui-icon-arrow-2-n-s { background-position: -128px -32px; } .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } .ui-icon-arrow-2-e-w { background-position: -160px -32px; } .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } .ui-icon-arrowstop-1-n { background-position: -192px -32px; } .ui-icon-arrowstop-1-e { background-position: -208px -32px; } .ui-icon-arrowstop-1-s { background-position: -224px -32px; } .ui-icon-arrowstop-1-w { background-position: -240px -32px; } .ui-icon-arrowthick-1-n { background-position: 0 -48px; } .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } .ui-icon-arrowthick-1-e { background-position: -32px -48px; } .ui-icon-arrowthick-1-se { background-position: -48px -48px; } .ui-icon-arrowthick-1-s { background-position: -64px -48px; } .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } .ui-icon-arrowthick-1-w { background-position: -96px -48px; } .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } .ui-icon-arrow-4 { background-position: 0 -80px; } .ui-icon-arrow-4-diag { background-position: -16px -80px; } .ui-icon-extlink { background-position: -32px -80px; } .ui-icon-newwin { background-position: -48px -80px; } .ui-icon-refresh { background-position: -64px -80px; } .ui-icon-shuffle { background-position: -80px -80px; } .ui-icon-transfer-e-w { background-position: -96px -80px; } .ui-icon-transferthick-e-w { background-position: -112px -80px; } .ui-icon-folder-collapsed { background-position: 0 -96px; } .ui-icon-folder-open { background-position: -16px -96px; } .ui-icon-document { background-position: -32px -96px; } .ui-icon-document-b { background-position: -48px -96px; } .ui-icon-note { background-position: -64px -96px; } .ui-icon-mail-closed { background-position: -80px -96px; } .ui-icon-mail-open { background-position: -96px -96px; } .ui-icon-suitcase { background-position: -112px -96px; } .ui-icon-comment { background-position: -128px -96px; } .ui-icon-person { background-position: -144px -96px; } .ui-icon-print { background-position: -160px -96px; } .ui-icon-trash { background-position: -176px -96px; } .ui-icon-locked { background-position: -192px -96px; } .ui-icon-unlocked { background-position: -208px -96px; } .ui-icon-bookmark { background-position: -224px -96px; } .ui-icon-tag { background-position: -240px -96px; } .ui-icon-home { background-position: 0 -112px; } .ui-icon-flag { background-position: -16px -112px; } .ui-icon-calendar { background-position: -32px -112px; } .ui-icon-cart { background-position: -48px -112px; } .ui-icon-pencil { background-position: -64px -112px; } .ui-icon-clock { background-position: -80px -112px; } .ui-icon-disk { background-position: -96px -112px; } .ui-icon-calculator { background-position: -112px -112px; } .ui-icon-zoomin { background-position: -128px -112px; } .ui-icon-zoomout { background-position: -144px -112px; } .ui-icon-search { background-position: -160px -112px; } .ui-icon-wrench { background-position: -176px -112px; } .ui-icon-gear { background-position: -192px -112px; } .ui-icon-heart { background-position: -208px -112px; } .ui-icon-star { background-position: -224px -112px; } .ui-icon-link { background-position: -240px -112px; } .ui-icon-cancel { background-position: 0 -128px; } .ui-icon-plus { background-position: -16px -128px; } .ui-icon-plusthick { background-position: -32px -128px; } .ui-icon-minus { background-position: -48px -128px; } .ui-icon-minusthick { background-position: -64px -128px; } .ui-icon-close { background-position: -80px -128px; } .ui-icon-closethick { background-position: -96px -128px; } .ui-icon-key { background-position: -112px -128px; } .ui-icon-lightbulb { background-position: -128px -128px; } .ui-icon-scissors { background-position: -144px -128px; } .ui-icon-clipboard { background-position: -160px -128px; } .ui-icon-copy { background-position: -176px -128px; } .ui-icon-contact { background-position: -192px -128px; } .ui-icon-image { background-position: -208px -128px; } .ui-icon-video { background-position: -224px -128px; } .ui-icon-script { background-position: -240px -128px; } .ui-icon-alert { background-position: 0 -144px; } .ui-icon-info { background-position: -16px -144px; } .ui-icon-notice { background-position: -32px -144px; } .ui-icon-help { background-position: -48px -144px; } .ui-icon-check { background-position: -64px -144px; } .ui-icon-bullet { background-position: -80px -144px; } .ui-icon-radio-off { background-position: -96px -144px; } .ui-icon-radio-on { background-position: -112px -144px; } .ui-icon-pin-w { background-position: -128px -144px; } .ui-icon-pin-s { background-position: -144px -144px; } .ui-icon-play { background-position: 0 -160px; } .ui-icon-pause { background-position: -16px -160px; } .ui-icon-seek-next { background-position: -32px -160px; } .ui-icon-seek-prev { background-position: -48px -160px; } .ui-icon-seek-end { background-position: -64px -160px; } .ui-icon-seek-start { background-position: -80px -160px; } /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ .ui-icon-seek-first { background-position: -80px -160px; } .ui-icon-stop { background-position: -96px -160px; } .ui-icon-eject { background-position: -112px -160px; } .ui-icon-volume-off { background-position: -128px -160px; } .ui-icon-volume-on { background-position: -144px -160px; } .ui-icon-power { background-position: 0 -176px; } .ui-icon-signal-diag { background-position: -16px -176px; } .ui-icon-signal { background-position: -32px -176px; } .ui-icon-battery-0 { background-position: -48px -176px; } .ui-icon-battery-1 { background-position: -64px -176px; } .ui-icon-battery-2 { background-position: -80px -176px; } .ui-icon-battery-3 { background-position: -96px -176px; } .ui-icon-circle-plus { background-position: 0 -192px; } .ui-icon-circle-minus { background-position: -16px -192px; } .ui-icon-circle-close { background-position: -32px -192px; } .ui-icon-circle-triangle-e { background-position: -48px -192px; } .ui-icon-circle-triangle-s { background-position: -64px -192px; } .ui-icon-circle-triangle-w { background-position: -80px -192px; } .ui-icon-circle-triangle-n { background-position: -96px -192px; } .ui-icon-circle-arrow-e { background-position: -112px -192px; } .ui-icon-circle-arrow-s { background-position: -128px -192px; } .ui-icon-circle-arrow-w { background-position: -144px -192px; } .ui-icon-circle-arrow-n { background-position: -160px -192px; } .ui-icon-circle-zoomin { background-position: -176px -192px; } .ui-icon-circle-zoomout { background-position: -192px -192px; } .ui-icon-circle-check { background-position: -208px -192px; } .ui-icon-circlesmall-plus { background-position: 0 -208px; } .ui-icon-circlesmall-minus { background-position: -16px -208px; } .ui-icon-circlesmall-close { background-position: -32px -208px; } .ui-icon-squaresmall-plus { background-position: -48px -208px; } .ui-icon-squaresmall-minus { background-position: -64px -208px; } .ui-icon-squaresmall-close { background-position: -80px -208px; } .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } .ui-icon-grip-solid-vertical { background-position: -32px -224px; } .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } .ui-icon-grip-diagonal-se { background-position: -80px -224px; } /* Misc visuals ----------------------------------*/ /* Corner radius */ .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; } .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } .ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } .ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } .ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } .ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } .ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } /* Overlays */ .ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } .ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* * jQuery UI Resizable @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Resizable#theming */ .ui-resizable { position: relative;} .ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* * jQuery UI Selectable @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Selectable#theming */ .ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } /* * jQuery UI Accordion @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Accordion#theming */ /* IE/Win - Fix animation bug - #4615 */ .ui-accordion { width: 100%; } .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } .ui-accordion .ui-accordion-li-fix { display: inline; } .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } .ui-accordion .ui-accordion-content-active { display: block; }/* * jQuery UI Autocomplete @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Autocomplete#theming */ .ui-autocomplete { position: absolute; cursor: default; } /* workarounds */ * html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ /* * jQuery UI Menu @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Menu#theming */ .ui-menu { list-style:none; padding: 2px; margin: 0; display:block; float: left; } .ui-menu .ui-menu { margin-top: -3px; } .ui-menu .ui-menu-item { margin:0; padding: 0; zoom: 1; float: left; clear: left; width: 100%; } .ui-menu .ui-menu-item a { text-decoration:none; display:block; padding:.2em .4em; line-height:1.5; zoom:1; } .ui-menu .ui-menu-item a.ui-state-hover, .ui-menu .ui-menu-item a.ui-state-active { font-weight: normal; margin: -1px; } /* * jQuery UI Button @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Button#theming */ .ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ .ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ .ui-button-icons-only { width: 3.4em; } button.ui-button-icons-only { width: 3.7em; } /*button text element */ .ui-button .ui-button-text { display: block; line-height: 1.4; } .ui-button-text-only .ui-button-text { padding: .4em 1em; } .ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } .ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } .ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } .ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } /* no icon support for input elements, provide padding by default */ input.ui-button { padding: .4em 1em; } /*button icon element(s) */ .ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } .ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } .ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } .ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } /*button sets*/ .ui-buttonset { margin-right: 7px; } .ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } /* workarounds */ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ /* * jQuery UI Dialog @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Dialog#theming */ .ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } .ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; } .ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } .ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } .ui-draggable .ui-dialog-titlebar { cursor: move; } /* * jQuery UI Slider @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Slider#theming */ .ui-slider { position: relative; text-align: left; } .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } .ui-slider-horizontal { height: .8em; } .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } .ui-slider-horizontal .ui-slider-range-min { left: 0; } .ui-slider-horizontal .ui-slider-range-max { right: 0; } .ui-slider-vertical { width: .8em; height: 100px; } .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } .ui-slider-vertical .ui-slider-range-min { bottom: 0; } .ui-slider-vertical .ui-slider-range-max { top: 0; }/* * jQuery UI Tabs @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Tabs#theming */ .ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ .ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } .ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } .ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ .ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } .ui-tabs .ui-tabs-hide { display: none !important; } /* * jQuery UI Datepicker @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Datepicker#theming */ .ui-datepicker { width: 17em; padding: .2em .2em 0; } .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } .ui-datepicker .ui-datepicker-prev { left:2px; } .ui-datepicker .ui-datepicker-next { right:2px; } .ui-datepicker .ui-datepicker-prev-hover { left:1px; } .ui-datepicker .ui-datepicker-next-hover { right:1px; } .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } .ui-datepicker select.ui-datepicker-month-year {width: 100%;} .ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year { width: 49%;} .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } .ui-datepicker td { border: 0; padding: 1px; } .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } /* with multiple calendars */ .ui-datepicker.ui-datepicker-multi { width:auto; } .ui-datepicker-multi .ui-datepicker-group { float:left; } .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } .ui-datepicker-row-break { clear:both; width:100%; } /* RTL support */ .ui-datepicker-rtl { direction: rtl; } .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } .ui-datepicker-rtl .ui-datepicker-group { float:right; } .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ .ui-datepicker-cover { display: none; /*sorry for IE5*/ display/**/: block; /*sorry for IE5*/ position: absolute; /*must have*/ z-index: -1; /*must have*/ filter: mask(); /*must have*/ top: -4px; /*must have*/ left: -4px; /*must have*/ width: 200px; /*must have*/ height: 200px; /*must have*/ }/* * jQuery UI Progressbar @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Progressbar#theming */ .ui-progressbar { height:2em; text-align: left; } .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }examples/examples_support/themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png000064400000000145152510440440032775 0ustar00assets/plugins/DataTablesPNG  IHDRdG,Z`,IDATcx&!DJqш/Cc ;:*COIENDB`plugins/DataTables/examples/examples_support/themes/smoothness/images/ui-icons_2e83ff_256x240.png000064400000010421152510440440030160 0ustar00assetsPNG  IHDRIJPLTE...............................................................................%̘NtRNS2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?sn~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?sn~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?sn~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?sn~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?sIDAT81 0Cџ $CB}1@)e_ƅ`I8-%cM0 )" LIENDB`DataTables/examples/examples_support/themes/smoothness/images/ui-bg_glass_65_ffffff_1x400.png000064400000000151152510440440031207 0ustar00assets/pluginsPNG  IHDRoX 0IDAT8! + ̼JHR)[lk=O_(<` H"IENDB`DataTables/examples/examples_support/themes/smoothness/images/ui-bg_flat_75_ffffff_40x100.png000064400000000262152510440440031110 0ustar00assets/pluginsPNG  IHDR(ddrzyIDATh1 R 7(ȚV`%X V`%X V`%X V`%X V`%X V`%X V`%X V`%X V`%X V`%X V`%X V`%X Vj)2NIENDB`assets/plugins/DataTables/examples/examples_support/jquery-ui-tabs.js000064400000041654152510440440022213 0ustar00/*! * jQuery UI 1.8.2 * * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT (MIT-LICENSE.txt) * and GPL (GPL-LICENSE.txt) licenses. * * http://docs.jquery.com/UI */ (function(c){c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.2",plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a=0)&&c(a).is(":focusable")}})}})(jQuery); ;/*! * jQuery UI Widget 1.8.2 * * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT (MIT-LICENSE.txt) * and GPL (GPL-LICENSE.txt) licenses. * * http://docs.jquery.com/UI/Widget */ (function(b){var j=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add(this).each(function(){b(this).triggerHandler("remove")});return j.call(b(this),a,c)})};b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend({},c.options);b[e][a].prototype= b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.substring(0,1)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==undefined){h=i;return false}}):this.each(function(){var g= b.data(this,a);if(g){d&&g.option(d);g._init()}else b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){this.element=b(c).data(this.widgetName,this);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(c)[this.widgetName],a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create(); this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a,e=this;if(arguments.length===0)return b.extend({},e.options);if(typeof a==="string"){if(c===undefined)return this.options[a];d={};d[a]=c}b.each(d,function(f, h){e._setOption(f,h)});return e},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a= b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery); ;/* * jQuery UI Tabs 1.8.2 * * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT (MIT-LICENSE.txt) * and GPL (GPL-LICENSE.txt) licenses. * * http://docs.jquery.com/UI/Tabs * * Depends: * jquery.ui.core.js * jquery.ui.widget.js */ (function(d){function s(){return++u}function v(){return++w}var u=0,w=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"
      ",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:'
    • #{label}
    • '},_create:function(){this._tabify(true)},_setOption:function(c,e){if(c=="selected")this.options.collapsible&& e==this.options.selected||this.select(e);else{this.options[c]=e;this._tabify()}},_tabId:function(c){return c.title&&c.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+s()},_sanitizeSelector:function(c){return c.replace(/:/g,"\\:")},_cookie:function(){var c=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+v());return d.cookie.apply(null,[c].concat(d.makeArray(arguments)))},_ui:function(c,e){return{tab:c,panel:e,index:this.anchors.index(c)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var c= d(this);c.html(c.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function e(g,f){g.css({display:""});!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}this.list=this.element.find("ol,ul").eq(0);this.lis=d("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);var a=this,b=this.options,h=/^#.+/;this.anchors.each(function(g,f){var j=d(f).attr("href"),l=j.split("#")[0],p;if(l&&(l===location.toString().split("#")[0]|| (p=d("base")[0])&&l===p.href)){j=f.hash;f.href=j}if(h.test(j))a.panels=a.panels.add(a._sanitizeSelector(j));else if(j!="#"){d.data(f,"href.tabs",j);d.data(f,"load.tabs",j.replace(/#.*$/,""));j=a._tabId(f);f.href="#"+j;f=d("#"+j);if(!f.length){f=d(b.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else b.disabled.push(g)});if(c){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"); this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(b.selected===undefined){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){b.selected=g;return false}});if(typeof b.selected!="number"&&b.cookie)b.selected=parseInt(a._cookie(),10);if(typeof b.selected!="number"&&this.lis.filter(".ui-tabs-selected").length)b.selected= this.lis.index(this.lis.filter(".ui-tabs-selected"));b.selected=b.selected||(this.lis.length?0:-1)}else if(b.selected===null)b.selected=-1;b.selected=b.selected>=0&&this.anchors[b.selected]||b.selected<0?b.selected:0;b.disabled=d.unique(b.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(b.selected,b.disabled)!=-1&&b.disabled.splice(d.inArray(b.selected,b.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); if(b.selected>=0&&this.anchors.length){this.panels.eq(b.selected).removeClass("ui-tabs-hide");this.lis.eq(b.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[b.selected],a.panels[b.selected]))});this.load(b.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else b.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));this.element[b.collapsible?"addClass": "removeClass"]("ui-tabs-collapsible");b.cookie&&this._cookie(b.selected,b.cookie);c=0;for(var i;i=this.lis[c];c++)d(i)[d.inArray(c,b.disabled)!=-1&&!d(i).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");b.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(b.event!="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+g)};this.lis.bind("mouseover.tabs", function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(b.fx)if(d.isArray(b.fx)){m=b.fx[0];o=b.fx[1]}else m=o=b.fx;var q=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",function(){e(f,o);a._trigger("show", null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},r=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};this.anchors.bind(b.event+".tabs", function(){var g=this,f=d(this).closest("li"),j=a.panels.filter(":not(.ui-tabs-hide)"),l=d(a._sanitizeSelector(this.hash));if(f.hasClass("ui-tabs-selected")&&!b.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}b.selected=a.anchors.index(this);a.abort();if(b.collapsible)if(f.hasClass("ui-tabs-selected")){b.selected=-1;b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){r(g, j)}).dequeue("tabs");this.blur();return false}else if(!j.length){b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this));this.blur();return false}b.cookie&&a._cookie(b.selected,b.cookie);if(l.length){j.length&&a.element.queue("tabs",function(){r(g,j)});a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";d.browser.msie&&this.blur()});this.anchors.bind("click.tabs", function(){return false})},destroy:function(){var c=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(b,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this, "destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});c.cookie&&this._cookie(null,c.cookie);return this},add:function(c,e,a){if(a===undefined)a=this.anchors.length;var b=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,e));c=!c.indexOf("#")?c.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs", true);var i=d("#"+c);i.length||(i=d(h.panelTemplate).attr("id",c).data("destroy.tabs",true));i.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);i.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);i.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");i.removeClass("ui-tabs-hide"); this.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[0],b.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(c){var e=this.options,a=this.lis.eq(c).remove(),b=this.panels.eq(c).remove();if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(c+(c+1=c?--h:h});this._tabify();this._trigger("remove", null,this._ui(a.find("a")[0],b[0]));return this},enable:function(c){var e=this.options;if(d.inArray(c,e.disabled)!=-1){this.lis.eq(c).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=c});this._trigger("enable",null,this._ui(this.anchors[c],this.panels[c]));return this}},disable:function(c){var e=this.options;if(c!=e.selected){this.lis.eq(c).addClass("ui-state-disabled");e.disabled.push(c);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}return this}, select:function(c){if(typeof c=="string")c=this.anchors.index(this.anchors.filter("[href$="+c+"]"));else if(c===null)c=-1;if(c==-1&&this.options.collapsible)c=this.options.selected;this.anchors.eq(c).trigger(this.options.event+".tabs");return this},load:function(c){var e=this,a=this.options,b=this.anchors.eq(c)[0],h=d.data(b,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(b,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(c).addClass("ui-state-processing"); if(a.spinner){var i=d("span",b);i.data("label.tabs",i.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){d(e._sanitizeSelector(b.hash)).html(k);e._cleanup();a.cache&&d.data(b,"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.error(k,n,c,b)}catch(m){}}}));e.element.dequeue("tabs");return this}}, abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},url:function(c,e){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.2"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(c,e){var a=this,b=this.options,h=a._rotate||(a._rotate= function(i){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=b.selected;a.select(++kassets/plugins/DataTables/examples/examples_support/details_open.png000064400000001561152510440440022141 0ustar00PNG  IHDR gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxڬUKQ޹ٖVɔa4HěB> ¼ð5ئVvd,sV:Cߏ[sJzit!6X{3" aA  Rd DH"TKu*"DETvtt\h4:F5HG663NUp?Ue2HG6d+|JJ,D")%76Ȯf-9ĺ';٫,&81ْ$@*wGӲ >7KC<8dĤHT{^<y3W#N 4N6 dž:] D"pH=bYJIjmm$Iݒ|1hRk*޺!=fTԍvYlfzAULWAQYUd\ {y|)fQV5S)tP\-=ϫ_lXFŌNUSy֕2k:Nxf˓3d[)=5p-؋CANOEIZ8 +/'!֍r#OOO 21Wzzz,fVq"t
      "},{type:"html",id:"Content",label:"spellContent",html:"",setup:function(b){var b=a.iframeNumber+"_"+b._.currentTabId,c=document.getElementById(b); a.targetFromFrame[b]=c.contentWindow}},{type:"hbox",id:"bottomGroup",style:"width:560px; margin: 0 auto;",widths:["50%","50%"],children:[{type:"hbox",id:"leftCol",align:"left",width:"50%",children:[{type:"vbox",id:"rightCol1",widths:["50%","50%"],children:[{type:"text",id:"text",label:a.LocalizationLabel.ChangeTo.text+":",labelLayout:"horizontal",labelStyle:"font: 12px/25px arial, sans-serif;",width:"140px","default":"",onShow:function(){a.textNode.SpellTab=this;a.LocalizationLabel.ChangeTo.instance= this},onHide:function(){this.reset()}},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"text",id:"labelSuggestions",label:a.LocalizationLabel.Suggestions.text+":",onShow:function(){a.LocalizationLabel.Suggestions.instance=this;this.getInputElement().hide()}},{type:"html",id:"logo",html:'WebSpellChecker.net',setup:function(){this.getElement().$.src= a.logotype;this.getElement().getParent().setStyles({"text-align":"left"})}}]},{type:"select",id:"list_of_suggestions",labelStyle:"font: 12px/25px arial, sans-serif;",size:"6",inputStyle:"width: 140px; height: auto;",items:[["loading..."]],onShow:function(){n=this},onHide:function(){this.clear()},onChange:function(){a.textNode.SpellTab.setValue(this.getValue())}}]}]}]},{type:"hbox",id:"rightCol",align:"right",width:"50%",children:[{type:"vbox",id:"rightCol_col__left",widths:["50%","50%","50%","50%"], children:[{type:"button",id:"ChangeTo",label:a.LocalizationButton.ChangeTo.text,title:"Change to",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.ChangeTo.instance=this},onClick:c},{type:"button",id:"ChangeAll",label:a.LocalizationButton.ChangeAll.text,title:"Change All",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.ChangeAll.instance=this},onClick:c},{type:"button",id:"AddWord", label:a.LocalizationButton.AddWord.text,title:"Add word",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.AddWord.instance=this},onClick:c},{type:"button",id:"FinishChecking",label:a.LocalizationButton.FinishChecking.text,title:"Finish Checking",style:"width: 100%;margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.FinishChecking.instance=this},onClick:c}]},{type:"vbox",id:"rightCol_col__right", widths:["50%","50%","50%"],children:[{type:"button",id:"IgnoreWord",label:a.LocalizationButton.IgnoreWord.text,title:"Ignore word",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.IgnoreWord.instance=this},onClick:c},{type:"button",id:"IgnoreAllWords",label:a.LocalizationButton.IgnoreAllWords.text,title:"Ignore all words",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.IgnoreAllWords.instance= this},onClick:c},{type:"button",id:"option",label:a.LocalizationButton.Options.text,title:"Option",style:"width: 100%;",onLoad:function(){a.LocalizationButton.Options.instance=this;"file:"==document.location.protocol&&this.disable()},onClick:function(){"file:"==document.location.protocol?alert("WSC: Options functionality is disabled when runing from file system"):b.openDialog("options")}}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;",widths:["70%","30%"],onShow:function(){this.getElement().hide()}, onHide:l,children:[{type:"hbox",id:"leftCol",align:"left",width:"70%",children:[{type:"vbox",id:"rightCol1",setup:function(){this.getChild()[0].getElement().$.src=a.logotype;this.getChild()[0].getElement().getParent().setStyles({"text-align":"center"})},children:[{type:"html",id:"logo",html:'WebSpellChecker.net'}]}]},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox", id:"rightCol_col__left",children:[{type:"button",id:"Option_button",label:a.LocalizationButton.Options.text,title:"Option",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);"file:"==document.location.protocol&&this.disable()},onClick:function(){"file:"==document.location.protocol?alert("WSC: Options functionality is disabled when runing from file system"):b.openDialog("options")}},{type:"button",id:"FinishChecking",label:a.LocalizationButton.FinishChecking.text, title:"Finish Checking",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]}]},{id:"GrammTab",label:"Grammar",accessKey:"G",elements:[{type:"html",id:"banner",label:"banner",style:"",html:"
      "},{type:"html",id:"Content",label:"GrammarContent",html:"",setup:function(){var b=a.iframeNumber+"_"+a.dialog._.currentTabId,c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"vbox",id:"bottomGroup",style:"width:560px; margin: 0 auto;", children:[{type:"hbox",id:"leftCol",widths:["66%","34%"],children:[{type:"vbox",children:[{type:"text",id:"text",label:"Change to:",labelLayout:"horizontal",labelStyle:"font: 12px/25px arial, sans-serif;",inputStyle:"float: right; width: 200px;","default":"",onShow:function(){a.textNode.GrammTab=this},onHide:function(){this.reset()}},{type:"html",id:"html_text",html:"
      ", onShow:function(){a.textNodeInfo.GrammTab=this}},{type:"html",id:"radio",html:"",onShow:function(){a.grammerSuggest=this}}]},{type:"vbox",children:[{type:"button",id:"ChangeTo",label:"Change to",title:"Change to",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c},{type:"button",id:"IgnoreWord",label:"Ignore word",title:"Ignore word",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)}, onClick:c},{type:"button",id:"IgnoreAllWords",label:"Ignore Problem",title:"Ignore Problem",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c},{type:"button",id:"FinishChecking",label:"Finish Checking",title:"Finish Checking",style:"width: 133px; float: right; margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;", widths:["70%","30%"],onShow:function(){this.getElement().hide()},onHide:l,children:[{type:"hbox",id:"leftCol",align:"left",width:"70%",children:[{type:"vbox",id:"rightCol1",children:[{type:"html",id:"logo",html:'WebSpellChecker.net',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}}]}]},{type:"hbox",id:"rightCol",align:"right", width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"button",id:"FinishChecking",label:"Finish Checking",title:"Finish Checking",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]}]},{id:"Thesaurus",label:"Thesaurus",accessKey:"T",elements:[{type:"html",id:"banner",label:"banner",style:"",html:"
      "},{type:"html",id:"Content",label:"spellContent",html:"",setup:function(){var b=a.iframeNumber+"_"+a.dialog._.currentTabId, c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"vbox",id:"bottomGroup",style:"width:560px; margin: -10px auto; overflow: hidden;",children:[{type:"hbox",widths:["75%","25%"],children:[{type:"vbox",children:[{type:"hbox",widths:["65%","35%"],children:[{type:"text",id:"ChangeTo",label:"Change to:",labelLayout:"horizontal",inputStyle:"width: 160px;",labelStyle:"font: 12px/25px arial, sans-serif;","default":"",onShow:function(){a.textNode.Thesaurus=this},onHide:function(){this.reset()}}, {type:"button",id:"ChangeTo",label:"Change to",title:"Change to",style:"width: 121px; margin-top: 1px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]},{type:"hbox",children:[{type:"select",id:"categories",label:"Categories:",labelStyle:"font: 12px/25px arial, sans-serif;",size:"5",inputStyle:"width: 180px; height: auto;",items:[],onShow:function(){a.selectNode.categories=this},onHide:function(){this.clear()},onChange:function(){a.buildOptionSynonyms(this.getValue())}}, {type:"select",id:"synonyms",label:"Synonyms:",labelStyle:"font: 12px/25px arial, sans-serif;",size:"5",inputStyle:"width: 180px; height: auto;",items:[],onShow:function(){a.selectNode.synonyms=this;a.textNode.Thesaurus.setValue(this.getValue())},onHide:function(){this.clear()},onChange:function(){a.textNode.Thesaurus.setValue(this.getValue())}}]}]},{type:"vbox",width:"120px",style:"margin-top:46px;",children:[{type:"html",id:"logotype",label:"WebSpellChecker.net",html:'WebSpellChecker.net', setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}},{type:"button",id:"FinishChecking",label:"Finish Checking",title:"Finish Checking",style:"width: 121px; float: right; margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;",widths:["70%","30%"],onShow:function(){this.getElement().hide()},children:[{type:"hbox", id:"leftCol",align:"left",width:"70%",children:[{type:"vbox",id:"rightCol1",children:[{type:"html",id:"logo",html:'WebSpellChecker.net',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}}]}]},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"button",id:"FinishChecking", label:"Finish Checking",title:"Finish Checking",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]}]}]}});CKEDITOR.dialog.add("options",function(){var b=null,c={},d={},f=null,g=null;e.cookie.get("udn");e.cookie.get("osp");var h=function(){g=this.getElement().getAttribute("title-cmd");var a=[];a[0]=d.IgnoreAllCapsWords;a[1]=d.IgnoreWordsNumbers;a[2]=d.IgnoreMixedCaseWords;a[3]=d.IgnoreDomainNames;a=a.toString().replace(/,/g,"");e.cookie.set("osp", a);e.cookie.set("udnCmd",g?g:"ignore");"delete"!=g&&(a="",""!==j.getValue()&&(a=j.getValue()),e.cookie.set("udn",a));e.postMessage.send({id:"options_dic_send"})},i=function(){f.getElement().setHtml(a.LocalizationComing.error);f.getElement().show()};return{title:a.LocalizationComing.Options,minWidth:430,minHeight:130,resizable:CKEDITOR.DIALOG_RESIZE_NONE,contents:[{id:"OptionsTab",label:"Options",accessKey:"O",elements:[{type:"hbox",id:"options_error",children:[{type:"html",style:"display: block;text-align: center;white-space: normal!important; font-size: 12px;color:red", html:"
      ",onShow:function(){f=this}}]},{type:"vbox",id:"Options_content",children:[{type:"hbox",id:"Options_manager",widths:["52%","48%"],children:[{type:"fieldset",label:"Spell Checking Options",style:"border: none;margin-top: 13px;padding: 10px 0 10px 10px",onShow:function(){this.getInputElement().$.children[0].innerHTML=a.LocalizationComing.SpellCheckingOptions},children:[{type:"vbox",id:"Options_checkbox",children:[{type:"checkbox",id:"IgnoreAllCapsWords",label:"Ignore All-Caps Words", labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=!this.getValue()?0:1}},{type:"checkbox",id:"IgnoreWordsNumbers",label:"Ignore Words with Numbers",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=!this.getValue()?0:1}},{type:"checkbox", id:"IgnoreMixedCaseWords",label:"Ignore Mixed-Case Words",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=!this.getValue()?0:1}},{type:"checkbox",id:"IgnoreDomainNames",label:"Ignore Domain Names",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]= !this.getValue()?0:1}}]}]},{type:"vbox",id:"Options_DictionaryName",children:[{type:"text",id:"DictionaryName",style:"margin-bottom: 10px",label:"Dictionary Name:",labelLayout:"vertical",labelStyle:"font: 12px/25px arial, sans-serif;","default":"",onLoad:function(){j=this;this.setValue(a.userDictionaryName?a.userDictionaryName:(e.cookie.get("udn"),this.getValue()))},onShow:function(){j=this;this.setValue(!e.cookie.get("udn")?this.getValue():e.cookie.get("udn"));this.setLabel(a.LocalizationComing.DictionaryName)}, onHide:function(){this.reset()}},{type:"hbox",id:"Options_buttons",children:[{type:"vbox",id:"Options_leftCol_col",widths:["50%","50%"],children:[{type:"button",id:"create",label:"Create",title:"Create",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onShow:function(){this.getElement().setText(a.LocalizationComing.Create)},onClick:h},{type:"button",id:"restore",label:"Restore",title:"Restore",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd", this.id)},onShow:function(){this.getElement().setText(a.LocalizationComing.Restore)},onClick:h}]},{type:"vbox",id:"Options_rightCol_col",widths:["50%","50%"],children:[{type:"button",id:"rename",label:"Rename",title:"Rename",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onShow:function(){this.getElement().setText(a.LocalizationComing.Rename)},onClick:h},{type:"button",id:"delete",label:"Remove",title:"Remove",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd", this.id)},onShow:function(){this.getElement().setText(a.LocalizationComing.Remove)},onClick:h}]}]}]}]},{type:"hbox",id:"Options_text",children:[{type:"html",style:"text-align: justify;margin-top: 15px;white-space: normal!important; font-size: 12px;color:#777;",html:"
      "+a.LocalizationComing.OptionsTextIntro+"
      ",onShow:function(){this.getElement().setText(a.LocalizationComing.OptionsTextIntro)}}]}]}]}],buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton],onOk:function(){var a=[]; a[0]=d.IgnoreAllCapsWords;a[1]=d.IgnoreWordsNumbers;a[2]=d.IgnoreMixedCaseWords;a[3]=d.IgnoreDomainNames;a=a.toString().replace(/,/g,"");e.cookie.set("osp",a);e.cookie.set("udn",j.getValue());e.postMessage.send({id:"options_checkbox_send"});f.getElement().hide();f.getElement().setHtml(" ")},onLoad:function(){b=this;e.postMessage.init(i);c.IgnoreAllCapsWords=b.getContentElement("OptionsTab","IgnoreAllCapsWords");c.IgnoreWordsNumbers=b.getContentElement("OptionsTab","IgnoreWordsNumbers");c.IgnoreMixedCaseWords= b.getContentElement("OptionsTab","IgnoreMixedCaseWords");c.IgnoreDomainNames=b.getContentElement("OptionsTab","IgnoreDomainNames")},onShow:function(){var b=e.cookie.get("osp").split("");d.IgnoreAllCapsWords=b[0];d.IgnoreWordsNumbers=b[1];d.IgnoreMixedCaseWords=b[2];d.IgnoreDomainNames=b[3];!parseInt(d.IgnoreAllCapsWords,10)?c.IgnoreAllCapsWords.setValue("",!1):c.IgnoreAllCapsWords.setValue("checked",!1);!parseInt(d.IgnoreWordsNumbers,10)?c.IgnoreWordsNumbers.setValue("",!1):c.IgnoreWordsNumbers.setValue("checked", !1);!parseInt(d.IgnoreMixedCaseWords,10)?c.IgnoreMixedCaseWords.setValue("",!1):c.IgnoreMixedCaseWords.setValue("checked",!1);!parseInt(d.IgnoreDomainNames,10)?c.IgnoreDomainNames.setValue("",!1):c.IgnoreDomainNames.setValue("checked",!1);d.IgnoreAllCapsWords=!c.IgnoreAllCapsWords.getValue()?0:1;d.IgnoreWordsNumbers=!c.IgnoreWordsNumbers.getValue()?0:1;d.IgnoreMixedCaseWords=!c.IgnoreMixedCaseWords.getValue()?0:1;d.IgnoreDomainNames=!c.IgnoreDomainNames.getValue()?0:1;c.IgnoreAllCapsWords.getElement().$.lastChild.innerHTML= a.LocalizationComing.IgnoreAllCapsWords;c.IgnoreWordsNumbers.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreWordsWithNumbers;c.IgnoreMixedCaseWords.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreMixedCaseWords;c.IgnoreDomainNames.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreDomainNames}}});CKEDITOR.dialog.on("resize",function(b){var b=b.data,c=b.dialog,d=CKEDITOR.document.getById(a.iframeNumber+"_"+c._.currentTabId);"checkspell"==c._.name&&(a.bnr?d&& d.setSize("height",b.height-310):d&&d.setSize("height",b.height-220))});CKEDITOR.on("dialogDefinition",function(b){var c=b.data.definition;a.onLoadOverlay=new o({opacity:"1",background:"#fff",target:c.dialog.parts.tabs.getParent().$});a.onLoadOverlay.setEnable();c.dialog.on("show",function(){});c.dialog.on("cancel",function(){c.dialog.getParentEditor().config.wsc_onClose.call(this.document.getWindow().getFrame());a.div_overlay.setDisable();return!1},this,null,-1)})})();assets/plugins/ckeditor/plugins/wsc/dialogs/ciframe.html000064400000003130152510440610017521 0ustar00

      assets/plugins/ckeditor/plugins/wsc/dialogs/wsc.css000064400000002176152510440610016544 0ustar00/* Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ html, body { background-color: transparent; margin: 0px; padding: 0px; } body { padding: 10px; } body, td, input, select, textarea { font-size: 11px; font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; } .midtext { padding:0px; margin:10px; } .midtext p { padding:0px; margin:10px; } .Button { border: #737357 1px solid; color: #3b3b1f; background-color: #c7c78f; } .PopupTabArea { color: #737357; background-color: #e3e3c7; } .PopupTitleBorder { border-bottom: #d5d59d 1px solid; } .PopupTabEmptyArea { padding-left: 10px; border-bottom: #d5d59d 1px solid; } .PopupTab, .PopupTabSelected { border-right: #d5d59d 1px solid; border-top: #d5d59d 1px solid; border-left: #d5d59d 1px solid; padding: 3px 5px 3px 5px; color: #737357; } .PopupTab { margin-top: 1px; border-bottom: #d5d59d 1px solid; cursor: pointer; } .PopupTabSelected { font-weight: bold; cursor: default; padding-top: 4px; border-bottom: #f1f1e3 1px solid; background-color: #f1f1e3; } assets/plugins/ckeditor/plugins/image/images/noimage.png000064400000004103152510440610017464 0ustar00PNG  IHDR(( H_PLTEVV\\TT⟟XX⠠▖bbIIff``CCFFMMZZ㮮㳳SSᆆ቉⚚wwWWxx~~⑑ጌ㭭㣣DD㻻nn⨨ᐐⓓ^^XXᗗNNooKKAAllttUU└JJᎎ㵵㱱㽽uvee㲲⥥㼼PPፍ㪪[[㺺㶶mm㾾qq}}yyPPQQ㰰㷷⛛☘ss❝rrss㯯✜ᄄኊ㫫ዋ⭭ለ]]||㝝GG♙㘘ddiikk潽ppzzHH➞NN䟞㴴⣣^^??;;aa⦦ᕕSS>>||ᇇᅅ⸸ⱱ⪪㢢⬬ႂ人QQ㸸䱱㿿hh㧧RR⎎jj㜜ab毮䥥⽽⮮⫫洴⢢㬬汱䵵䷷⧧㦦庹绺䨨ᄃRRᓓ㹹䠟UU99@@JJ77䪪SSPPff躹似䲲᜜Ⲳ❞ᘘ⋋纹⍍㚚ⷷrszzYp IDATx^=H6m۶mo۶m۶͵WS[IʯPPرc?BQQ`4 M<b%:m V ă^jWlKLrtq9F=ayyjSypFQУZ yxŘ19|#9fǎиLBp4f JM}m݊]S7ZřpΙ(;\Y Ѐ^  ###CR(VS3Ե%0F)\0 ]/ }MR\xۧ[?[S~yp]qzCȂ* oj!*jnkA]YW|ecc)###E"P`k1%j]AOMuh:AmQ(F lxmrƖWNP6>GˆSPZ;vv$EkXಹҥfSY%B9k@-:fA;4rD9)z@U^Ni̲\˻j+Iʲr$MWh|i]o i ^ HI:s]R@/͵k"LJ["ew3VJ뛒0JB1$mHV׵`>c{]j*iI筮+|}x)/b uec 1 Qe=޻1Uw]4ƻxgpzݜ_j]uYJgvh0`Zx'T/Z;JyׯM͛/*1G*+2ݽ^Xnv:>/0*AuqK`C^\ߢgz+KQ 6.\:~l;zĨq{Y=̣K||gg3Chf = C(kAgOv|I&#`r4hӷE&X%!!a v-}|ꕋ{qN)d2Q;͍g-@LTmt6>-,wy3:;;<(9,oTWbZZr8K.w|!"Bt6 }r9iX=9W`Ȇ݆;& j,sp ? 騷-EwfzSb,Y2=s&ûy<{'+c.lang.image.lockRatio+''+c.lang.image.resetSize+"
      "}]},{type:"vbox",padding:1,children:[{type:"text",id:"txtBorder",requiredContent:"img{border-width}",width:"60px",label:c.lang.image.border,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateBorder),setup:function(a,b){if(a==f){var d;d= (d=(d=b.getStyle("border-width"))&&d.match(/^(\d+px)(?: \1 \1 \1)?$/))&&parseInt(d[1],10);isNaN(parseInt(d,10))&&(d=b.getAttribute("border"));this.setValue(d)}},commit:function(a,b,d){var c=parseInt(this.getValue(),10);a==f||4==a?(isNaN(c)?!c&&this.isChanged()&&b.removeStyle("border"):(b.setStyle("border-width",CKEDITOR.tools.cssLength(c)),b.setStyle("border-style","solid")),!d&&a==f&&b.removeAttribute("border")):8==a&&(b.removeAttribute("border"),b.removeStyle("border-width"),b.removeStyle("border-style"), b.removeStyle("border-color"))}},{type:"text",id:"txtHSpace",requiredContent:"img{margin-left,margin-right}",width:"60px",label:c.lang.image.hSpace,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateHSpace),setup:function(a,b){if(a==f){var d,c;d=b.getStyle("margin-left");c=b.getStyle("margin-right");d=d&&d.match(o);c=c&&c.match(o);d=parseInt(d,10);c=parseInt(c,10);d=d==c&&d; isNaN(parseInt(d,10))&&(d=b.getAttribute("hspace"));this.setValue(d)}},commit:function(a,b,c){var e=parseInt(this.getValue(),10);a==f||4==a?(isNaN(e)?!e&&this.isChanged()&&(b.removeStyle("margin-left"),b.removeStyle("margin-right")):(b.setStyle("margin-left",CKEDITOR.tools.cssLength(e)),b.setStyle("margin-right",CKEDITOR.tools.cssLength(e))),!c&&a==f&&b.removeAttribute("hspace")):8==a&&(b.removeAttribute("hspace"),b.removeStyle("margin-left"),b.removeStyle("margin-right"))}},{type:"text",id:"txtVSpace", requiredContent:"img{margin-top,margin-bottom}",width:"60px",label:c.lang.image.vSpace,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateVSpace),setup:function(a,b){if(a==f){var c,e;c=b.getStyle("margin-top");e=b.getStyle("margin-bottom");c=c&&c.match(o);e=e&&e.match(o);c=parseInt(c,10);e=parseInt(e,10);c=c==e&&c;isNaN(parseInt(c,10))&&(c=b.getAttribute("vspace"));this.setValue(c)}}, commit:function(a,b,c){var e=parseInt(this.getValue(),10);a==f||4==a?(isNaN(e)?!e&&this.isChanged()&&(b.removeStyle("margin-top"),b.removeStyle("margin-bottom")):(b.setStyle("margin-top",CKEDITOR.tools.cssLength(e)),b.setStyle("margin-bottom",CKEDITOR.tools.cssLength(e))),!c&&a==f&&b.removeAttribute("vspace")):8==a&&(b.removeAttribute("vspace"),b.removeStyle("margin-top"),b.removeStyle("margin-bottom"))}},{id:"cmbAlign",requiredContent:"img{float}",type:"select",widths:["35%","65%"],style:"width:90px", label:c.lang.common.align,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.alignLeft,"left"],[c.lang.common.alignRight,"right"]],onChange:function(){g(this.getDialog());i.call(this,"advanced:txtdlgGenStyle")},setup:function(a,b){if(a==f){var c=b.getStyle("float");switch(c){case "inherit":case "none":c=""}!c&&(c=(b.getAttribute("align")||"").toLowerCase());this.setValue(c)}},commit:function(a,b,c){var e=this.getValue();if(a==f||4==a){if(e?b.setStyle("float",e):b.removeStyle("float"),!c&& a==f)switch(e=(b.getAttribute("align")||"").toLowerCase(),e){case "left":case "right":b.removeAttribute("align")}}else 8==a&&b.removeStyle("float")}}]}]},{type:"vbox",height:"250px",children:[{type:"html",id:"htmlPreview",style:"width:95%;",html:"
      "+CKEDITOR.tools.htmlEncode(c.lang.common.preview)+'
      '+(c.config.image_previewText||"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus a, commodo non, facilisis vitae, nulla. Aenean dictum lacinia tortor. Nunc iaculis, nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper nec, enim. Sed tortor. Curabitur molestie. Duis velit augue, condimentum at, ultrices a, luctus ut, orci. Donec pellentesque egestas eros. Integer cursus, augue in cursus faucibus, eros pede bibendum sem, in tempus tellus justo quis ligula. Etiam eget tortor. Vestibulum rutrum, est ut placerat elementum, lectus nisl aliquam velit, tempor aliquam eros nunc nonummy metus. In eros metus, gravida a, gravida sed, lobortis id, turpis. Ut ultrices, ipsum at venenatis fringilla, sem nulla lacinia tellus, eget aliquet turpis mauris non enim. Nam turpis. Suspendisse lacinia. Curabitur ac tortor ut ipsum egestas elementum. Nunc imperdiet gravida mauris.")+ "
      "}]}]}]},{id:"Link",requiredContent:"a[href]",label:c.lang.image.linkTab,padding:0,elements:[{id:"txtUrl",type:"text",label:c.lang.common.url,style:"width: 100%","default":"",setup:function(a,b){if(2==a){var c=b.data("cke-saved-href");c||(c=b.getAttribute("href"));this.setValue(c)}},commit:function(a,b){if(2==a&&(this.getValue()||this.isChanged())){var d=decodeURI(this.getValue());b.data("cke-saved-href",d);b.setAttribute("href",d);if(this.getValue()||!c.config.image_removeLinkByEmptyURL)this.getDialog().addLink= !0}}},{type:"button",id:"browse",filebrowser:{action:"Browse",target:"Link:txtUrl",url:c.config.filebrowserImageBrowseLinkUrl},style:"float:right",hidden:!0,label:c.lang.common.browseServer},{id:"cmbTarget",type:"select",requiredContent:"a[target]",label:c.lang.common.target,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.targetNew,"_blank"],[c.lang.common.targetTop,"_top"],[c.lang.common.targetSelf,"_self"],[c.lang.common.targetParent,"_parent"]],setup:function(a,b){2==a&&this.setValue(b.getAttribute("target")|| "")},commit:function(a,b){2==a&&(this.getValue()||this.isChanged())&&b.setAttribute("target",this.getValue())}}]},{id:"Upload",hidden:!0,filebrowser:"uploadButton",label:c.lang.image.upload,elements:[{type:"file",id:"upload",label:c.lang.image.btnUpload,style:"height:40px",size:38},{type:"fileButton",id:"uploadButton",filebrowser:"info:txtUrl",label:c.lang.image.btnUpload,"for":["Upload","upload"]}]},{id:"advanced",label:c.lang.common.advancedTab,elements:[{type:"hbox",widths:["50%","25%","25%"], children:[{type:"text",id:"linkId",requiredContent:"img[id]",label:c.lang.common.id,setup:function(a,b){a==f&&this.setValue(b.getAttribute("id"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("id",this.getValue())}},{id:"cmbLangDir",type:"select",requiredContent:"img[dir]",style:"width : 100px;",label:c.lang.common.langDir,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.langDirLtr,"ltr"],[c.lang.common.langDirRtl,"rtl"]],setup:function(a,b){a==f&&this.setValue(b.getAttribute("dir"))}, commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("dir",this.getValue())}},{type:"text",id:"txtLangCode",requiredContent:"img[lang]",label:c.lang.common.langCode,"default":"",setup:function(a,b){a==f&&this.setValue(b.getAttribute("lang"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("lang",this.getValue())}}]},{type:"text",id:"txtGenLongDescr",requiredContent:"img[longdesc]",label:c.lang.common.longDescr,setup:function(a,b){a==f&&this.setValue(b.getAttribute("longDesc"))}, commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("longDesc",this.getValue())}},{type:"hbox",widths:["50%","50%"],children:[{type:"text",id:"txtGenClass",requiredContent:"img(cke-xyz)",label:c.lang.common.cssClass,"default":"",setup:function(a,b){a==f&&this.setValue(b.getAttribute("class"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("class",this.getValue())}},{type:"text",id:"txtGenTitle",requiredContent:"img[title]",label:c.lang.common.advisoryTitle, "default":"",onChange:function(){g(this.getDialog())},setup:function(a,b){a==f&&this.setValue(b.getAttribute("title"))},commit:function(a,b){a==f?(this.getValue()||this.isChanged())&&b.setAttribute("title",this.getValue()):4==a?b.setAttribute("title",this.getValue()):8==a&&b.removeAttribute("title")}}]},{type:"text",id:"txtdlgGenStyle",requiredContent:"img{cke-xyz}",label:c.lang.common.cssStyle,validate:CKEDITOR.dialog.validate.inlineStyle(c.lang.common.invalidInlineStyle),"default":"",setup:function(a, b){if(a==f){var c=b.getAttribute("style");!c&&b.$.style.cssText&&(c=b.$.style.cssText);this.setValue(c);var e=b.$.style.height,c=b.$.style.width,e=(e?e:"").match(k),c=(c?c:"").match(k);this.attributesInStyle={height:!!e,width:!!c}}},onChange:function(){i.call(this,"info:cmbFloat info:cmbAlign info:txtVSpace info:txtHSpace info:txtBorder info:txtWidth info:txtHeight".split(" "));g(this)},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("style",this.getValue())}}]}]}}; CKEDITOR.dialog.add("image",function(c){return r(c,"image")});CKEDITOR.dialog.add("imagebutton",function(c){return r(c,"imagebutton")})})();assets/plugins/ckeditor/plugins/icons.png000064400000023456152510440610014645 0ustar00PNG  IHDR  IDATx}{tՙQn=nIÒ7l B lvp89 B!,flL016~aOY-jZUyHι{oU}߽w/ < =ZF\* x<8y$&4} ##n*5kGFF~1v+c3ƾ[QQEaaaV_( *ծ.*..>4)/cPU?tct+&***kD2h7ox˙3gF,KcL3`5H.yj>+X233,^+`dd^pؾ} |*,v}ɒ%>ݾ`{|΂ @a0c…/{."B x~)|>[]]]s hpHy~Mgg'hm!܄p8 kd766neee&q@DHMM XyZZZ[uu5z{{D4*`ccc0|8rJ}cl<^8E cVȤ$LnRf7̻nA088áoODQﭷJ(jo1 xHVV֓c"\j}qGs~?O clH+O<.ǃyw#=s7Ryy2ū  b06ApWfŊ8x֬YB#`^f5W6m%)) p$?hz( @k^#_1֤` lt*|! # … ͵ڵkL999v-\8 o'%k777233Q]]-7ǟGGGoCl-*X,2LʸmI,V\ڵKNNq/34c1cQ@+z뭷.gb׮]rZr(ua52׋3gFƘTTTdB?\po]s5WسgOpA t"///gΜ1V"Vn":CD":JDQnA DA?L Q Q%IK;㝝 5##I<۷owh޼yu999oϝ;qܹ#HDTOD+ϟ_6m:Gր1롇za||266)yzjnjjrv{Ν;G|.="2NUUUQNN%߿sttt{VV`ee%AdTTiq/^IDsԩSlI$O ыUQ7='RQ35I $׀NSxM%eYpdD&Tc71`JpUWh+Xc%866vVqRR\\"'XHOO?>Uxe߾};`ppPP0ERZ 1aJ1&0ƥ D_`GUUUUe˖gPKK/\m"rD fwDH9"ꓚ܀/\0 C.r v$M^&yr[n)>}:| @į![9rTZZZd@mfO>.++EUnujtKiӕ2(j&*aW5k郦&ȫ1fAJD;eV&DŽ3gAAD4X5I `ȅ0!`ND>G}v;8]""ax^<_JUC=D NnHO'ѱF>0, o/ =i@Dp@.={ 2ˏY"ZhܰI5 Eܩzqqq &9JEM?1WLQ.bI)TTTPիW;"/hMxfڤ .n!;aSxjkS,2w\!D!7NBb* I[/"p {lJA… >V-F܎HSa@Gn0|!##|"A7D7nV oDjo /+SRR' 4eT ߩ;Ř/0uG*mX&]P7+2ab8P*dGfre b_P4%>D*z5?&;_Pc7>P4eCK:Mv}+7 ݡ\ƔFĘ) ڪ~f/ ###\TVV+@W0+//Çȷt:1k,HNN! E`MMM_~>V Od鐈 #eeZ#$OTeP(hcl4`$yTnFFF0::P( l^I AHW`{233/n***nYt&}"qUO~~fHNNѼ.S$C$RET"z1ŕݥR\C4#& BAvv . up8gϦ2yQc Q^(>, cơCp9@jjjƾ}XODs8p`eӧ(xd L8ZQ~0 1P$J.ȿPIIIdvχ`0ERRRPxl >z$9p.-]tSnn"KWE@Jt]*ɇDE"C7yIM6.KP| b`hZ: ;qQLDtBҌ3HGD' KD"=66'w*HQ wI "Ƃߣc$)(( "jTlÌp~~<*W26m;[Hܒ'"JJJD;lʈ _lf(GڻdɒK,yG/[l3&ݖIAW+/)|h3Tm8 |k Vu|GDԘtt1Sc****c7<_.c "5Г ˖-۸iӦ.\\) lh?&9 ۤm83cƌ}-UГ ^vvQg"ʯg6g̘WWW_hց@ϴi`uu}O)ʕ+S?}g~[;;;]4m58%Àoڬ NL Ł" Ђ H"`Hspu6ffdggGk0ڵk_1c3f_vKjZ,Q DFDЖx~UjcCC544D=F٘mO|8dWLQCu^2fu}_1D ?٧Dd} g0>cub#"|d25Dd}7 z QƱ@p:,MDuG""L8PH^ ~PLqjBFe'<SzuJJJ7+`Q:+c,à~/HL1 8Q< 0y //@y=QsD&P2U#$ +ԈDLP=c*QO1j>?xoW:2IlOfZ 33yyy`p}wcQD?N"c Obɓ'aX B'cշg ʼD 먪*V:#”'o:΍$z^Z[[Ir0())V[BKtnT9= "~Xc"cIB$񋤸'sE&&he2ܹsQ\& dRwcl&Ϊ*qn^Q~p> vD y)zP3&rR&N4Y 1g5$zւ Y Nl&ZcV3]CL@}P:]ꈸJ#(;Q/j@QQQܳ ;(f8ko\0噪S1UjsB׉˓hQt<,Cސ ttr%Xt744  Tf&rzM&G ‘#G1TBr:_jrACRj-˚/haJ' 6Mc޼Bs! C>A: JGTSSWuDQ$ccU=v:ZZZ)PAqȅ|, (//7 z Qs) dH<S/h4!!Y[De.DeE{2Y!wd"B@, dE <5_dd> YaݗB:kW0s].y陙%>Nݶ6(.E!"jP kjjZv6l;chր17|sǥKX`4TolHII&vAxյ[P<755nf%.5hw:8L&J׋!gK!$D718SXXH.8DKSJrN=4lHqDp+**[{!bi ;`dㆪMǍ>۪&$v7ܔy ]RVVVjvv={l!q_._mfTY|zc 赭H+ZU8%%%na%@L (;)E6QF^̘1yyyAp:V3gj7A9{RRR{bيLrG}}M6mOkkkXNER3gNRҚqwѝE~~䛀KOo8^27)h5 [$_ɀqʉL 5><)=^ODEDԓ$zRRR)>S,x $Y"/@9$YI6^[,kMMM~/JǽWλjkk}:44oxf 2ADX#%=gΜq#OIDAT_LeA$&I$7OY&/m_4`P `>ē'QQӣZg͚E]]];W O<c,nڽxbMC| CXnZhQx[nn!8>>;уP06łϬV:M|&99P0DGGG 3gf*  ӦMc:!("ݛ 0<4W^y/ ?)v0gΜ0&Q/MKfg4x755т vj-/^<#mCIJZ[[?&'S<k/O;`ksn())ic|w{?RRRc=|pDy~ӟH I@rhZ/0k$ؿJ u2/2r@_i¤l PYYKG%@mmDI 0c4"m ^7J_ve@zxkѲ4z')NRS󷴴 /IY&ʋ*rVJe1dn+zkjjMDnGhlp8@HD/ hqj;qPXX<޻{1OjLEb[[ҥKmt:{1V\s^a |a`ڔ7 <c0C YeL&LCCC"j2_~. `p>8<?~^ $@{{a!rh0@FFQXX5<<}{H H<"3fsrr`2 Žϧu:iiiرcǨ `~ꨴH9HD>eee;Umruwwlgd_Rn"w~MXM?X,[t~G^% e Wx QF\$pJ~E.k C~u,_9l6;ww `,W\Qv#2l6oD+%-YYYΙ3#2| rss֯_m%)))ߏG87}Ԙ A0<<gΜt3"~PTT8{UV@hYYRRR088{w׮]w2Ǝ)۾駟$ (ff;ݽDQGy5"\|X,[cwA<ODQna |u0! `௩G#5WUUz$Cd" {$IIG `#?}U6IENDB`assets/plugins/ckeditor/plugins/table/dialogs/table.js000064400000021160152510440620017151 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ (function(){function r(a){for(var e=0,l=0,k=0,m,g=a.$.rows.length;kl&&(l=e)}return l}function o(a){return function(){var e=this.getValue(),e=!!(CKEDITOR.dialog.validate.integer()(e)&&0n.getSize("width")?"100%":500:0,getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.width)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");a&& a.updateStyle("width",this.getValue())},setup:function(a){this.setValue(a.getStyle("width"))},commit:k}]},{type:"hbox",widths:["5em"],children:[{type:"text",id:"txtHeight",requiredContent:"table{height}",controlStyle:"width:5em",label:a.lang.common.height,title:a.lang.common.cssLengthTooltip,"default":"",getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.height)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles"); a&&a.updateStyle("height",this.getValue())},setup:function(a){(a=a.getStyle("height"))&&this.setValue(a)},commit:k}]},{type:"html",html:" "},{type:"text",id:"txtCellSpace",requiredContent:"table[cellspacing]",controlStyle:"width:3em",label:a.lang.table.cellSpace,"default":a.filter.check("table[cellspacing]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellSpacing),setup:function(a){this.setValue(a.getAttribute("cellSpacing")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellSpacing", this.getValue()):d.removeAttribute("cellSpacing")}},{type:"text",id:"txtCellPad",requiredContent:"table[cellpadding]",controlStyle:"width:3em",label:a.lang.table.cellPad,"default":a.filter.check("table[cellpadding]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellPadding),setup:function(a){this.setValue(a.getAttribute("cellPadding")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellPadding",this.getValue()):d.removeAttribute("cellPadding")}}]}]},{type:"html",align:"right", html:""},{type:"vbox",padding:0,children:[{type:"text",id:"txtCaption",requiredContent:"caption",label:a.lang.table.caption,setup:function(a){this.enable();a=a.getElementsByTag("caption");if(0H[MB*X*! Kj|JNIѽ x߲jJmY0ɶr$j,߁욐߀xomMz֠&`n|ioN IENDB`assets/plugins/ckeditor/plugins/magicline/images/icon.png000064400000000254152510440620017647 0ustar00PNG  IHDR ftbKGDC pHYs  LIDATӅ10UڬBzb8 Qv X 0bܴI Punm줁vcB7/'ܸIENDB`assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js000064400000005545152510440620017774 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","sq",{title:"Udhëzimet e Qasjes",contents:"Përmbajtja ndihmëse. Për ta mbyllur dialogun shtyp ESC.",legend:[{name:"Të përgjithshme",items:[{name:"Shiriti i Redaktuesit",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Dialogu i Redaktuesit",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Komandat",items:[{name:"Rikthe komandën",legend:"Shtyp ${undo}"},{name:"Ribëj komandën",legend:"Shtyp ${redo}"},{name:"Komanda e trashjes së tekstit",legend:"Shtyp ${bold}"},{name:"Komanda kursive",legend:"Shtyp ${italic}"}, {name:"Komanda e nënvijëzimit",legend:"Shtyp ${underline}"},{name:"Komanda e Nyjes",legend:"Shtyp ${link}"},{name:" Toolbar Collapse command",legend:"Shtyp ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:"Ndihmë Qasjeje",legend:"Shtyp ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/de.js000064400000006436152510440620017741 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","de",{title:"Barrierefreiheitinformationen",contents:"Hilfeinhalt. Um den Dialog zu schliessen die Taste 'ESC' drücken.",legend:[{name:"Allgemein",items:[{name:"Editor Symbolleiste",legend:"Drücken Sie ${toolbarFocus} auf der Symbolleiste. Gehen Sie zur nächsten oder vorherigen Symbolleistengruppe mit TAB und SHIFT-TAB. Gehen Sie zur nächsten oder vorherigen Symbolleiste auf die Schaltfläche mit dem RECHTS- oder LINKS-Pfeil. Drücken Sie die Leertaste oder Eingabetaste, um die Schaltfläche in der Symbolleiste aktivieren."}, {name:"Editor Dialog",legend:"Innerhalb des Dialogs drücken Sie TAB um zum nächsten Dialogfeld zu gelangen, drücken Sie SHIFT-TAG um zum vorherigen Feld zu wechseln, drücken Sie ENTER um den Dialog abzusenden und ESC um den Dialog zu abzubrechen. Um zwischen den Reitern innerhalb eines Dialogs zu wechseln drücken sie ALT-F10. Um zum nächsten Reiter zu gelangen können Sie TAB oder die rechte Pfeiltaste. Zurück gelangt man mit SHIFT-TAB oder der linken Pfeiltaste. Mit der Leertaste oder Enter kann man den Reiter auswählen."}, {name:"Editor Kontextmenü",legend:"Dürcken Sie ${contextMenu} oder die Anwendungstaste um das Kontextmenü zu öffnen. Man kann die Pfeiltasten zum Wechsel benutzen. Mit der Leertaste oder der Enter-Taste kann man den Menüpunkt aufrufen. Schliessen Sie das Kontextmenü mit der ESC-Taste."},{name:"Editor Listen",legend:"Innerhalb einer Listenbox kann man mit der TAB-Taste oder den Pfeilrunter-Taste den nächsten Menüeintrag wählen. Mit der Shift-TAB Tastenkombination oder der Pfeilhoch-Taste gelangt man zum vorherigen Menüpunkt. Mit der Leertaste oder Enter kann man den Menüpunkt auswählen. Drücken Sie ESC zum Verlassen des Menüs."}, {name:"Editor Elementpfadleiste",legend:"Drücken Sie ${elementsPathFocus} um sich durch die Pfadleiste zu bewegen. Um zum nächsten Element zu gelangen drücken Sie TAB oder die Pfeilrechts-Taste. Zum vorherigen Element gelangen Sie mit der SHIFT-TAB oder der Pfeillinks-Taste. Drücken Sie die Leertaste oder Enter um das Element auszuwählen."}]},{name:"Befehle",items:[{name:"Wiederholen Befehl",legend:"Drücken Sie ${undo}"},{name:"Rückgängig Befehl",legend:"Drücken Sie ${redo}"},{name:"Fettschrift Befehl", legend:"Drücken Sie ${bold}"},{name:"Italic Befehl",legend:"Drücken Sie ${italic}"},{name:"Unterstreichung Befehl",legend:"Drücken Sie ${underline}"},{name:"Link Befehl",legend:"Drücken Sie ${link}"},{name:"Symbolleiste zuammenklappen Befehl",legend:"Drücken Sie ${toolbarCollapse}"},{name:"Zugang bisheriger Fokussierung Raumbefehl ",legend:"Drücken Sie ${accessPreviousSpace} auf den am nächsten nicht erreichbar Fokus-Abstand vor die Einfügemarke zugreifen: zwei benachbarte HR-Elemente. Wiederholen Sie die Tastenkombination um entfernte Fokusräume zu erreichen. "}, {name:"Zugang nächster Schwerpunkt Raumbefehl ",legend:"Drücken Sie $ { accessNextSpace }, um den nächsten unerreichbar Fokus Leerzeichen nach dem Cursor zum Beispiel auf: zwei benachbarten HR Elemente. Wiederholen Sie die Tastenkombination zum fernen Fokus Bereiche zu erreichen. "},{name:"Eingabehilfen",legend:"Drücken Sie ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js000064400000006512152510440620017762 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","sl",{title:"Navodila Dostopnosti",contents:"Vsebina Pomoči. Če želite zapreti to pogovorno okno pritisnite ESC.",legend:[{name:"Splošno",items:[{name:"Urejevalna Orodna Vrstica",legend:"Pritisnite ${toolbarFocus} za pomik v orodno vrstico. Z TAB in SHIFT-TAB se pomikate na naslednjo in prejšnjo skupino orodne vrstice. Z DESNO PUŠČICO ali LEVO PUŠČICO se pomikate na naslednji in prejšnji gumb orodne vrstice. Pritisnite SPACE ali ENTER, da aktivirate gumb orodne vrstice."}, {name:"Urejevalno Pogovorno Okno",legend:"Znotraj pogovornega okna, pritisnite tipko TAB za pomik na naslednjo pogovorno polje, pritisnite SHIFT + TAB za pomik v prejšnje polje, pritisnite tipko ENTER za predložitev pogovornega okna, pritisnite tipko ESC, da prekličete okno. Za okna, ki imajo več zavihkov, pritisnite ALT + F10, da pojdete na seznam zavihkov. Na naslednji zavihek se premaknete s tipko TAB ali DESNO PUŠČICO. Z SHIFT + TAB ali LEVO PUŠČICO pa se premaknete na prejšnji zavihek. Pritisnite tipko SPACE ali ENTER za izbiro zavihka."}, {name:"Urejevalni Kontekstni Meni",legend:"Pritisnite ${contextMenu} ali APPLICATION KEY, da odprete kontekstni meni. Nato se premaknite na naslednjo možnost menija s tipko TAB ali PUŠČICA DOL. Premakniti se na prejšnjo možnost z SHIFT + TAB ali PUŠČICA GOR. Pritisnite SPACE ali ENTER za izbiro možnosti menija. Odprite podmeni trenutne možnosti menija s tipko SPACE ali ENTER ali DESNA PUŠČICA. Vrnite se na matični element menija s tipko ESC ali LEVA PUŠČICA. Zaprite kontekstni meni z ESC."},{name:"Urejevalno Seznamsko Polje", legend:"Znotraj seznama, se premaknete na naslednji element seznama s tipko TAB ali PUŠČICO DOL. Z SHIFT + TAB ali PUŠČICO GOR se premaknete na prejšnji element seznama. Pritisnite tipko SPACE ali ENTER za izbiro elementa. Pritisnite tipko ESC, da zaprete seznam."},{name:"Urejevalna vrstica poti elementa",legend:"Pritisnite ${elementsPathFocus} za pomikanje po vrstici elementnih poti. S TAB ali DESNA PUŠČICA se premaknete na naslednji gumb elementa. Z SHIFT + TAB ali LEVO PUŠČICO se premaknete na prejšnji gumb elementa. Pritisnite SPACE ali ENTER za izbiro elementa v urejevalniku."}]}, {name:"Ukazi",items:[{name:"Razveljavi ukaz",legend:"Pritisnite ${undo}"},{name:"Ponovi ukaz",legend:"Pritisnite ${redo}"},{name:"Krepki ukaz",legend:"Pritisnite ${bold}"},{name:"Ležeči ukaz",legend:"Pritisnite ${italic}"},{name:"Poudarni ukaz",legend:"Pritisnite ${underline}"},{name:"Ukaz povezave",legend:"Pritisnite ${link}"},{name:"Skrči Orodno Vrstico Ukaz",legend:"Pritisnite ${toolbarCollapse}"},{name:"Dostop do prejšnjega ukaza ostrenja",legend:"Pritisnite ${accessPreviousSpace} za dostop do najbližjega nedosegljivega osredotočenega prostora pred strešico, npr.: dva sosednja HR elementa. Ponovite kombinacijo tipk, da dosežete oddaljene osredotočene prostore."}, {name:"Dostop do naslednjega ukaza ostrenja",legend:"Pritisnite ${accessNextSpace} za dostop do najbližjega nedosegljivega osredotočenega prostora po strešici, npr.: dva sosednja HR elementa. Ponovite kombinacijo tipk, da dosežete oddaljene osredotočene prostore."},{name:"Pomoč Dostopnosti",legend:"Pritisnite ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js000064400000005455152510440620017741 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","bg",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Общо",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/si.js000064400000012440152510440620017754 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","si",{title:"ළඟා වියහැකි ",contents:"උදව් සඳහා අන්තර්ගතය.නික්මයෙමට ESC බොත්තම ඔබන්න",legend:[{name:"පොදු කරුණු",items:[{name:"සංස්කරණ මෙවලම් ",legend:"ඔබන්න ${මෙවලම් තීරු අවධානය} මෙවලම් තීරුවේ එහා මෙහා යෑමට.ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරුකාණ්ඩය හා TAB හා SHIFT-TAB .ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW හෝ LEFT ARROW.මෙවලම් තීරු බොත්තම සක්‍රිය කර ගැනීමට SPACE හෝ ENTER බොත්තම ඔබන්න."},{name:"සංස්කරණ ",legend:"දෙබසක් තුළ, ඊළඟ දෙබස් පෙදෙසට යෑමට TAB බොත්තම ඔබන්න, කලින් පෙදෙසට යෑමට SHIFT + TAB බොත්තම ද, දෙබස් ඉදිරිපත් කිරීමට ENTER බොත්තම ද, දෙබස් නැවතීමට ESCබොත්තම ද, දෙබස් සහිත ගොනු, පිටු වැඩි සංක්‍යයාවක් ලබා ගෙනිමට,ගොනු තුළ එහාමෙහා යෑමට ALT + F10 බොත්තම් ද, ඊළඟ ගොනුවට යෑමට TAB හෝ RIGTH ARROW බොත්තම ඔබන්න. පෙර ගොනුවට යෑමට SHIFT + TAB හෝ LEFT ARROW බොත්තම් ද ,ගොනු පිටු තේරීමට SPACE හෝ ENTER බොත්තම් ද ඔබන්න."}, {name:"සංස්කරණ අඩංගුවට ",legend:"ඔබන්න ${අන්තර්ගත මෙනුව} හෝ APPLICATION KEY අන්තර්ගත-මෙනුව විවුරතකිරීමට. ඊළඟ මෙනුව-ව්කල්පයන්ට යෑමට TAB හෝ DOWN ARROW බොත්තම ද, පෙර විකල්පයන්ටයෑමට SHIFT+TAB හෝ UP ARROW බොත්තම ද, මෙනුව-ව්කල්පයන් තේරීමට SPACE හෝ ENTER බොත්තම ද, දැනට විවුර්තව ඇති උප-මෙනුවක වීකල්ප තේරීමට SPACE හෝ ENTER හෝ RIGHT ARROW ද, නැවත පෙර ප්‍රධාන මෙනුවට යෑමට ESC හෝ LEFT ARROW බොත්තම ද. අන්තර්ගත-මෙනුව වැසීමට ESC බොත්තම ද ඔබන්න."},{name:"සංස්කරණ තේරුම් ",legend:"තේරුම් කොටුව තුළ , ඊළඟ අයිතමයට යෑමට TAB හෝ DOWN ARROW , පෙර අයිතමයට යෑමට SHIFT + TAB හෝ UP ARROW . අයිතම විකල්පයන් තේරීමට SPACE හෝ ENTER ,තේරුම් කොටුව වැසීමට ESC බොත්තම් ද ඔබන්න."}, {name:"සංස්කරණ අංග සහිත ",legend:"ඔබන්න ${මෙවලම් තීරු අවධානය} මෙවලම් තීරුවේ එහා මෙහා යෑමට.ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරුකාණ්ඩය හා TAB හා SHIFT-TAB .ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW හෝ LEFT ARROW.මෙවලම් තීරු බොත්තම සක්‍රිය කර ගැනීමට SPACE හෝ ENTER බොත්තම ඔබන්න."}]},{name:"විධාන",items:[{name:"විධානය වෙනස් ",legend:"ඔබන්න ${වෙනස් කිරීම}"},{name:"විධාන නැවත් පෙර පරිදිම වෙනස්කර ගැනීම.",legend:"ඔබන්න ${නැවත් පෙර පරිදිම වෙනස්කර ගැනීම}"},{name:"තද අකුරින් විධාන",legend:"ඔබන්න ${තද }"}, {name:"බැධී අකුරු විධාන",legend:"ඔබන්න ${බැධී අකුරු }"},{name:"යටින් ඉරි ඇද ඇති විධාන.",legend:"ඔබන්න ${යටින් ඉරි ඇද ඇති}"},{name:"සම්බන්ධිත විධාන",legend:"ඔබන්න ${සම්බන්ධ }"},{name:"මෙවලම් තීරු හැකුලුම් විධාන",legend:"ඔබන්න ${මෙවලම් තීරු හැකුලුම් }"},{name:"යොමුවීමට පෙර වැදගත් විධාන",legend:"ඔබන්න ${යොමුවීමට ඊළඟ }"},{name:"යොමුවීමට ඊළග වැදගත් විධාන",legend:"ඔබන්න ${යොමුවීමට ඊළඟ }"},{name:"ප්‍රවේශ ",legend:"ඔබන්න ${a11y }"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/he.js000064400000007560152510440620017744 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","he",{title:"הוראות נגישות",contents:"הוראות נגישות. לסגירה לחץ אסקייפ (ESC).",legend:[{name:"כללי",items:[{name:"סרגל הכלים",legend:"לחץ על ${toolbarFocus} כדי לנווט לסרגל הכלים. עבור לכפתור הבא עם מקש הטאב (TAB) או חץ שמאלי. עבור לכפתור הקודם עם מקש השיפט (SHIFT) + טאב (TAB) או חץ ימני. לחץ רווח או אנטר (ENTER) כדי להפעיל את הכפתור הנבחר."},{name:"דיאלוגים (חלונות תשאול)",legend:"בתוך דיאלוג, לחץ טאב (TAB) כדי לנווט לשדה הבא, לחץ שיפט (SHIFT) + טאב (TAB) כדי לנווט לשדה הקודם, לחץ אנטר (ENTER) כדי לשלוח את הדיאלוג, לחץ אסקייפ (ESC) כדי לבטל. בתוך דיאלוגים בעלי מספר טאבים (לשוניות), לחץ אלט (ALT) + F10 כדי לנווט לשורת הטאבים. נווט לטאב הבא עם טאב (TAB) או חץ שמאלי. עבור לטאב הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. לחץ רווח או אנטר (ENTER) כדי להיכנס לטאב."}, {name:"תפריט ההקשר (Context Menu)",legend:"לחץ ${contextMenu} או APPLICATION KEYכדי לפתוח את תפריט ההקשר. עבור לאפשרות הבאה עם טאב (TAB) או חץ למטה. עבור לאפשרות הקודמת עם שיפט (SHIFT) + טאב (TAB) או חץ למעלה. לחץ רווח או אנטר (ENTER) כדי לבחור את האפשרות. פתח את תת התפריט (Sub-menu) של האפשרות הנוכחית עם רווח או אנטר (ENTER) או חץ שמאלי. חזור לתפריט האב עם אסקייפ (ESC) או חץ שמאלי. סגור את תפריט ההקשר עם אסקייפ (ESC)."},{name:"תפריטים צפים (List boxes)",legend:"בתוך תפריט צף, עבור לפריט הבא עם טאב (TAB) או חץ למטה. עבור לתפריט הקודם עם שיפט (SHIFT) + טאב (TAB) or חץ עליון. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"עץ אלמנטים (Elements Path)",legend:"לחץ ${elementsPathFocus} כדי לנווט לעץ האלמנטים. עבור לפריט הבא עם טאב (TAB) או חץ ימני. עבור לפריט הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. לחץ רווח או אנטר (ENTER) כדי לבחור את האלמנט בעורך."}]},{name:"פקודות",items:[{name:" ביטול צעד אחרון",legend:"לחץ ${undo}"},{name:" חזרה על צעד אחרון",legend:"לחץ ${redo}"},{name:" הדגשה",legend:"לחץ ${bold}"},{name:" הטייה",legend:"לחץ ${italic}"},{name:" הוספת קו תחתון",legend:"לחץ ${underline}"},{name:" הוספת לינק", legend:"לחץ ${link}"},{name:" כיווץ סרגל הכלים",legend:"לחץ ${toolbarCollapse}"},{name:"גישה למיקום המיקוד הקודם",legend:"לחץ ${accessPreviousSpace} כדי לגשת למיקום המיקוד הלא-נגיש הקרוב לפני הסמן, למשל בין שני אלמנטים סמוכים מסוג HR. חזור על צירוף מקשים זה כדי להגיע למקומות מיקוד רחוקים יותר."},{name:"גישה למיקום המיקוד הבא",legend:"לחץ ${accessNextSpace} כדי לגשת למיקום המיקוד הלא-נגיש הקרוב אחרי הסמן, למשל בין שני אלמנטים סמוכים מסוג HR. חזור על צירוף מקשים זה כדי להגיע למקומות מיקוד רחוקים יותר."}, {name:" הוראות נגישות",legend:"לחץ ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js000064400000011540152510440620017767 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","ru",{title:"Горячие клавиши",contents:"Помощь. Для закрытия этого окна нажмите ESC.",legend:[{name:"Основное",items:[{name:"Панель инструментов",legend:"Нажмите ${toolbarFocus} для перехода к панели инструментов. Для перемещения между группами панели инструментов используйте TAB и SHIFT-TAB. Для перемещения между кнопками панели иструментов используйте кнопки ВПРАВО или ВЛЕВО. Нажмите ПРОБЕЛ или ENTER для запуска кнопки панели инструментов."},{name:"Диалоги",legend:"В диалоговом окне, нажмите клавишу TAB для перехода к следующему диалоговому полю, нажмите клавиши SHIFT + TAB, чтобы перейти к предыдущему полю, нажмите ENTER, чтобы отправить данные, нажмите клавишу ESC, для отмены. Для окон, которые имеют несколько вкладок, нажмите ALT + F10 для перехода к списку вкладок. Переход к следующей вкладке TAB ИЛИ ПРАВУЮ СТРЕЛКУ. Переход к предыдущей вкладке с помощью SHIFT + TAB или ЛЕВАЯ СТРЕЛКА. Нажмите ПРОБЕЛ или ENTER, чтобы выбрать вкладку."}, {name:"Контекстное меню",legend:'Нажмите ${contextMenu} или клавишу APPLICATION, чтобы открыть контекстное меню. Затем перейдите к следующему пункту меню с помощью TAB или стрелкой "ВНИЗ". Переход к предыдущей опции - SHIFT+TAB или стрелкой "ВВЕРХ". Нажмите SPACE, или ENTER, чтобы задействовать опцию меню. Открыть подменю текущей опции - SPACE или ENTER или стрелкой "ВПРАВО". Возврат к родительскому пункту меню - ESC или стрелкой "ВЛЕВО". Закрытие контекстного меню - ESC.'},{name:"Редактор списка", legend:'Внутри окна списка, переход к следующему пункту списка - TAB или стрелкой "ВНИЗ". Переход к предыдущему пункту списка - SHIFT + TAB или стрелкой "ВВЕРХ". Нажмите SPACE, или ENTER, чтобы задействовать опцию списка. Нажмите ESC, чтобы закрыть окно списка.'},{name:"Путь к элементу",legend:'Нажмите ${elementsPathFocus}, чтобы перейти к панели пути элементов. Переход к следующей кнопке элемента - TAB или стрелкой "ВПРАВО". Переход к предыдущей кнопку - SHIFT+TAB или стрелкой "ВЛЕВО". Нажмите SPACE, или ENTER, чтобы выбрать элемент в редакторе.'}]}, {name:"Команды",items:[{name:"Отменить",legend:"Нажмите ${undo}"},{name:"Повторить",legend:"Нажмите ${redo}"},{name:"Полужирный",legend:"Нажмите ${bold}"},{name:"Курсив",legend:"Нажмите ${italic}"},{name:"Подчеркнутый",legend:"Нажмите ${underline}"},{name:"Гиперссылка",legend:"Нажмите ${link}"},{name:"Свернуть панель инструментов",legend:"Нажмите ${toolbarCollapse}"},{name:"Команды доступа к предыдущему фокусному пространству",legend:'Нажмите ${accessPreviousSpace}, чтобы обратиться к ближайшему недостижимому фокусному пространству перед символом "^", например: два смежных HR элемента. Повторите комбинацию клавиш, чтобы достичь отдаленных фокусных пространств.'}, {name:"Команды доступа к следующему фокусному пространству",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Справка по горячим клавишам",legend:"Нажмите ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js000064400000006427152510440620017753 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","gl",{title:"Instrucións de accesibilidade",contents:"Axuda. Para pechar este diálogo prema ESC.",legend:[{name:"Xeral",items:[{name:"Barra de ferramentas do editor",legend:"Prema ${toolbarFocus} para navegar pola barra de ferramentas. Para moverse polos distintos grupos de ferramentas use as teclas TAB e MAIÚS+TAB. Para moverse polas distintas ferramentas use FRECHA DEREITA ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para activar o botón da barra de ferramentas."}, {name:"Editor de diálogo",legend:"Dentro dun cadro de diálogo, prema a tecla TAB para desprazarse ao campo seguinte do cadro de diálogo, prema MAIÚS + TAB para desprazarse ao campo anterior, prema INTRO para presentar o cadro de diálogo, prema a tecla ESC para cancelar o diálogo. Para os diálogos que teñen varias páxinas, prema ALT + F10 para navegar á lapela da lista. Despois pasar á seguinte lapela con TAB ou FRECHA DEREITA. Para ir á lapela anterior con SHIFT + TAB ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para seleccionar a lapela da páxina."}, {name:"Editor do menú contextual",legend:"Prema ${contextMenu} ou a TECLA MENÚ para abrir o menú contextual. A seguir móvase á seguinte opción do menú con TAB ou FRECHA ABAIXO. Móvase á opción anterior con MAIÚS + TAB ou FRECHA ARRIBA. Prema ESPAZO ou INTRO para seleccionar a opción do menú. Abra o submenú da opción actual con ESPAZO ou INTRO ou FRECHA DEREITA. Regrese ao elemento principal do menú con ESC ou FRECHA ESQUERDA. Peche o menú contextual con ESC."},{name:"Lista do editor",legend:"Dentro dunha lista, móvase ao seguinte elemento da lista con TAB ou FRECHA ABAIXO. Móvase ao elemento anterior da lista con MAIÚS + TAB ou FRECHA ARRIBA. Prema ESPAZO ou INTRO para escoller a opción da lista. Prema ESC para pechar a lista."}, {name:"Barra da ruta ao elemento no editor",legend:"Prema ${elementsPathFocus} para navegar ata os elementos da barra de ruta. Móvase ao seguinte elemento botón con TAB ou FRECHA DEREITA. Móvase ao botón anterior con MAIÚS + TAB ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para seleccionar o elemento no editor."}]},{name:"Ordes",items:[{name:"Orde «desfacer»",legend:"Prema ${undo}"},{name:"Orde «refacer»",legend:"Prema ${redo}"},{name:"Orde «negra»",legend:"Prema ${bold}"},{name:"Orde «cursiva»",legend:"Prema ${italic}"}, {name:"Orde «subliñar»",legend:"Prema ${underline}"},{name:"Orde «ligazón»",legend:"Prema ${link}"},{name:"Orde «contraer a barra de ferramentas»",legend:"Prema ${toolbarCollapse}"},{name:"Orde «acceder ao anterior espazo en foco»",legend:"Prema ${accessPreviousSpace} para acceder ao espazo máis próximo de foco inalcanzábel anterior ao cursor, por exemplo: dous elementos HR adxacentes. Repita a combinación de teclas para chegar a espazos de foco distantes."},{name:"Orde «acceder ao seguinte espazo en foco»", legend:"Prema ${accessNextSpace} para acceder ao espazo máis próximo de foco inalcanzábel posterior ao cursor, por exemplo: dous elementos HR adxacentes. Repita a combinación de teclas para chegar a espazos de foco distantes."},{name:"Axuda da accesibilidade",legend:"Prema ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/km.js000064400000005461152510440620017755 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","km",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"ទូទៅ",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt000064400000001514152510440620023505 0ustar00Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license cs.js Found: 30 Missing: 0 cy.js Found: 30 Missing: 0 da.js Found: 12 Missing: 18 de.js Found: 30 Missing: 0 el.js Found: 25 Missing: 5 eo.js Found: 30 Missing: 0 fa.js Found: 30 Missing: 0 fi.js Found: 30 Missing: 0 fr.js Found: 30 Missing: 0 gu.js Found: 12 Missing: 18 he.js Found: 30 Missing: 0 it.js Found: 30 Missing: 0 mk.js Found: 5 Missing: 25 nb.js Found: 30 Missing: 0 nl.js Found: 30 Missing: 0 no.js Found: 30 Missing: 0 pt-br.js Found: 30 Missing: 0 ro.js Found: 6 Missing: 24 tr.js Found: 30 Missing: 0 ug.js Found: 27 Missing: 3 vi.js Found: 6 Missing: 24 zh-cn.js Found: 30 Missing: 0 assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js000064400000006421152510440620017741 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","fi",{title:"Saavutettavuus ohjeet",contents:"Ohjeen sisällöt. Sulkeaksesi tämän dialogin paina ESC.",legend:[{name:"Yleinen",items:[{name:"Editorin työkalupalkki",legend:"Paina ${toolbarFocus} siirtyäksesi työkalupalkkiin. Siirry seuraavaan ja edelliseen työkalupalkin ryhmään TAB ja SHIFT-TAB näppäimillä. Siirry seuraavaan ja edelliseen työkalupainikkeeseen käyttämällä NUOLI OIKEALLE tai NUOLI VASEMMALLE näppäimillä. Paina VÄLILYÖNTI tai ENTER näppäintä aktivoidaksesi työkalupainikkeen."}, {name:"Editorin dialogi",legend:"Dialogin sisällä, painamalla TAB siirryt seuraavaan dialogin kenttään, painamalla SHIFT+TAB siirryt aiempaan kenttään, painamalla ENTER lähetät dialogin, painamalla ESC peruutat dialogin. Dialogeille joissa on useita välilehtiä, paina ALT+F10 siirtyäksesi välillehtilistaan. Siirtyäksesi seuraavaan välilehteen paina TAB tai NUOLI OIKEALLE. Siirry edelliseen välilehteen painamalla SHIFT+TAB tai nuoli vasemmalle. Paina VÄLILYÖNTI tai ENTER valitaksesi välilehden."},{name:"Editorin oheisvalikko", legend:"Paina ${contextMenu} tai SOVELLUSPAINIKETTA avataksesi oheisvalikon. Liiku seuraavaan valikon vaihtoehtoon TAB tai NUOLI ALAS näppäimillä. Siirry edelliseen vaihtoehtoon SHIFT+TAB tai NUOLI YLÖS näppäimillä. Paina VÄLILYÖNTI tai ENTER valitaksesi valikon kohdan. Avataksesi nykyisen kohdan alivalikon paina VÄLILYÖNTI tai ENTER tai NUOLI OIKEALLE painiketta. Siirtyäksesi takaisin valikon ylemmälle tasolle paina ESC tai NUOLI vasemmalle. Oheisvalikko suljetaan ESC painikkeella."},{name:"Editorin listalaatikko", legend:"Listalaatikon sisällä siirry seuraavaan listan kohtaan TAB tai NUOLI ALAS painikkeilla. Siirry edelliseen listan kohtaan SHIFT+TAB tai NUOLI YLÖS painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi listan vaihtoehdon. Paina ESC sulkeaksesi listalaatikon."},{name:"Editorin elementtipolun palkki",legend:"Paina ${elementsPathFocus} siirtyäksesi elementtipolun palkkiin. Siirry seuraavaan elementtipainikkeeseen TAB tai NUOLI OIKEALLE painikkeilla. Siirry aiempaan painikkeeseen SHIFT+TAB tai NUOLI VASEMMALLE painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi elementin editorissa."}]}, {name:"Komennot",items:[{name:"Peruuta komento",legend:"Paina ${undo}"},{name:"Tee uudelleen komento",legend:"Paina ${redo}"},{name:"Lihavoi komento",legend:"Paina ${bold}"},{name:"Kursivoi komento",legend:"Paina ${italic}"},{name:"Alleviivaa komento",legend:"Paina ${underline}"},{name:"Linkki komento",legend:"Paina ${link}"},{name:"Pienennä työkalupalkki komento",legend:"Paina ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Saavutettavuus ohjeet",legend:"Paina ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js000064400000006332152510440620017774 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","sv",{title:"Hjälpmedelsinstruktioner",contents:"Hjälpinnehåll. För att stänga denna dialogruta trycker du på ESC.",legend:[{name:"Allmänt",items:[{name:"Editor verktygsfält",legend:"Tryck på ${toolbarFocus} för att navigera till verktygsfältet. Flytta till nästa och föregående verktygsfältsgrupp med TAB och SHIFT-TAB. Flytta till nästa och föregående knapp i verktygsfältet med HÖGERPIL eller VÄNSTERPIL. Tryck Space eller ENTER för att aktivera knappen i verktygsfältet."}, {name:"Dialogeditor",legend:"Inuti en dialogruta, tryck TAB för att navigera till nästa fält i dialogrutan. Du trycker SKIFT + TAB för att flytta till föregående fält. Tryck ENTER för att skicka. Du avbryter och stänger dialogen med ESC. För dialogrutor som har flera flikar, tryck ALT + F10 navigera till fliklistan. Flytta sedan till nästa flik med HÖGERPIL. Flytta till föregående flik med SHIFT + TAB eller VÄNSTERPIL. Tryck Space eller ENTER för att välja fliken."},{name:"Editor för innehållsmeny", legend:"Tryck på $ {contextMenu} eller PROGRAMTANGENTEN för att öppna snabbmenyn. Flytta sedan till nästa menyalternativ med TAB eller NEDPIL. Flytta till föregående alternativ med SHIFT + TABB eller UPPIL. Tryck Space eller ENTER för att välja menyalternativ. Öppna undermeny av nuvarande alternativ med SPACE eller ENTER eller HÖGERPIL. Gå tillbaka till överordnade menyalternativ med ESC eller VÄNSTERPIL. Stäng snabbmenyn med ESC."},{name:"Editor för List Box",legend:"Inuti en list-box, gå till nästa listobjekt med TAB eller NEDPIL. Flytta till föregående listobjekt med SHIFT + TAB eller UPPIL. Tryck Space eller ENTER för att välja listan alternativet. Tryck ESC för att stänga listan-boxen."}, {name:"Editor för elementens sökväg",legend:"Tryck på $ {elementsPathFocus} för att navigera till verktygsfältet för elementens sökvägar. Flytta till nästa elementknapp med TAB eller HÖGERPIL. Flytta till föregående knapp med SKIFT + TAB eller VÄNSTERPIL. Tryck Space eller ENTER för att välja element i redigeraren."}]},{name:"Kommandon",items:[{name:"Kommandot ångra",legend:"Tryck på ${undo}"},{name:"Kommandot gör om",legend:"Tryck på ${redo}"},{name:"Kommandot fet stil",legend:"Tryck på ${bold}"}, {name:"Kommandot kursiv",legend:"Tryck på ${italic}"},{name:"Kommandot understruken",legend:"Tryck på ${underline}"},{name:"kommandot länk",legend:"Tryck på ${link}"},{name:"Verktygsfält Dölj kommandot",legend:"Tryck på ${toolbarCollapse}"},{name:"Gå till föregående fokus plats",legend:"Tryck på ${accessPreviousSpace} för att gå till närmast onåbara utrymme före markören, exempel: två intilliggande HR element. Repetera tangentkombinationen för att gå till nästa."},{name:"Tillgå nästa fokuskommandots utrymme", legend:"Tryck ${accessNextSpace} på för att komma åt den närmaste onåbar fokus utrymme efter cirkumflex, till exempel: två intilliggande HR element. Upprepa tangentkombinationen för att nå avlägsna fokus utrymmen."},{name:"Hjälp om tillgänglighet",legend:"Tryck ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js000064400000007232152510440620017765 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","lv",{title:"Pieejamības instrukcija",contents:"Palīdzības saturs. Lai aizvērtu ciet šo dialogu nospiediet ESC.",legend:[{name:"Galvenais",items:[{name:"Redaktora rīkjosla",legend:"Nospiediet ${toolbarFocus} lai pārvietotos uz rīkjoslu. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas grupu izmantojiet pogu TAB un SHIFT+TAB. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas pogu izmantojiet Kreiso vai Labo bultiņu. Nospiediet Atstarpi vai ENTER lai aktivizētu rīkjosla pogu."}, {name:"Redaktora dialoga logs",legend:"Dialoga logā nospiediet pogu TAB lai pārvietotos uz nākošo dialoga loga lauku, nospiediet SHIFT+TAB lai atgrieztos iepriekšējā laukā, nospiediet ENTER lai apstiprinātu dialoga datus, nospiediet ESC lai aizvērtu šo dialogu. Dialogam kuram ir vairākas cilnes, nospiediet ALT+F10 lai pārvietotos uz nepieciešamo cilni. Lai pārvietotos uz nākošo cilni izmantojiet pogu TAB vai Labo bultiņu. Lai pārvietotos uz iepriekšējo cilni nospiediet SHIFT+TAB vai kreiso bultiņu. Nospiediet SPACE vai ENTER lai izvēlētos lapas cilni."}, {name:"Redaktora satura izvēle",legend:"Nospiediet ${contextMenu} vai APPLICATION KEY lai atvērtu satura izvēlni. Lai pārvietotos uz nākošo izvēlnes opciju izmantojiet pogu TAB vai pogu Bultiņu uz leju. Lai pārvietotos uz iepriekšējo opciju izmantojiet SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvelētos izvēlnes opciju. Atveriet tekošajā opcija apakšizvēlni ar SAPCE vai ENTER ka ari to var izdarīt ar Labo bultiņu. Lai atgrieztos atpakaļ uz sakuma izvēlni nospiediet ESC vai Kreiso bultiņu. Lai aizvērtu ciet izvēlnes saturu nospiediet ESC."}, {name:"Redaktora saraksta lauks",legend:"Saraksta laukā, lai pārvietotos uz nākošo saraksta elementu nospiediet TAB vai pogu Bultiņa uz leju. Lai pārvietotos uz iepriekšējo saraksta elementu nospiediet SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvēlētos saraksta opcijas. Nospiediet ESC lai aizvērtu saraksta lauku. "},{name:"Redaktora elementa ceļa josla",legend:"Nospiediet ${elementsPathFocus} lai pārvietotos uz elementa ceļa joslu. Lai pārvietotos uz nākošo elementa pogu izmantojiet TAB vai Labo bultiņu. Lai pārvietotos uz iepriekšējo elementa pogu izmantojiet SHIFT + TAB vai Kreiso bultiņu. Nospiediet SPACE vai ENTER lai izvēlētos elementu redaktorā."}]}, {name:"Komandas",items:[{name:"Komanda atcelt darbību",legend:"Nospiediet ${undo}"},{name:"Komanda atkārtot darbību",legend:"Nospiediet ${redo}"},{name:"Treknraksta komanda",legend:"Nospiediet ${bold}"},{name:"Kursīva komanda",legend:"Nospiediet ${italic}"},{name:"Apakšsvītras komanda ",legend:"Nospiediet ${underline}"},{name:"Hipersaites komanda",legend:"Nospiediet ${link}"},{name:"Rīkjoslas aizvēršanas komanda",legend:"Nospiediet ${toolbarCollapse}"},{name:"Piekļūt iepriekšējai fokusa vietas komandai", legend:"Nospiediet ${accessPreviousSpace} lai piekļūtu tuvākajai nepieejamajai fokusa vietai pirms kursora. Piemēram: diviem blakus esošiem līnijas HR elementiem. Atkārtojiet taustiņu kombināciju lai piekļūtu pie tālākām vietām."},{name:"Piekļūt nākošā fokusa apgabala komandai",legend:"Nospiediet ${accessNextSpace} lai piekļūtu tuvākajai nepieejamajai fokusa vietai pēc kursora. Piemēram: diviem blakus esošiem līnijas HR elementiem. Atkārtojiet taustiņu kombināciju lai piekļūtu pie tālākām vietām."}, {name:"Pieejamības palīdzība",legend:"Nospiediet ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js000064400000010035152510440620017746 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","fr",{title:"Instructions d'accessibilité",contents:"Contenu de l'aide. Pour fermer ce dialogue, appuyez sur la touche Ech (Echappement).",legend:[{name:"Général",items:[{name:"Barre d'outils de l'éditeur",legend:"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers les groupes suivant ou précédent de la barre d'outil avec les touches TAB et SHIFT-TAB. Se déplacer vers les boutons suivant ou précédent de la barre d'outils avec les touches FLECHE DROITE et FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour activer le bouton de barre d'outils."}, {name:"Dialogue de l'éditeur",legend:"A l'intérieur d'un dialogue, appuyer sur la touche TAB pour naviguer jusqu'au champ de dalogue suivant, appuyez sur les touches SHIFT + TAB pour revenir au champ précédent, appuyez sur la touche ENTRER pour soumettre le dialogue, appuyer sur la touche ESC pour annuler le dialogue. Pour les dialogues avec plusieurs pages d'onglets, appuyer sur ALT + F10 pour naviguer jusqu'à la liste des onglets. Puis se déplacer vers l'onglet suivant avec la touche TAB ou FLECHE DROITE. Se déplacer vers l'onglet précédent avec les touches SHIFT + TAB ou FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour sélectionner la page de l'onglet."}, {name:"Menu contextuel de l'éditeur",legend:"Appuyer sur ${contextMenu} ou entrer le RACCOURCI CLAVIER pour ouvrir le menu contextuel. Puis se déplacer vers l'option suivante du menu avec les touches TAB ou FLECHE BAS. Se déplacer vers l'option précédente avec les touches SHIFT+TAB ou FLECHE HAUT. appuyer sur la BARRE D'ESPACE ou la touche ENTREE pour sélectionner l'option du menu. Oovrir le sous-menu de l'option courante avec la BARRE D'ESPACE ou les touches ENTREE ou FLECHE DROITE. Revenir à l'élément de menu parent avec les touches Ech ou FLECHE GAUCHE. Fermer le menu contextuel avec Ech."}, {name:"Zone de liste de l'éditeur",legend:"Dans la liste en menu déroulant, se déplacer vers l'élément suivant de la liste avec les touches TAB ou FLECHE BAS. Se déplacer vers l'élément précédent de la liste avec les touches MAJ + TAB ou FLECHE HAUT. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'option dans la liste. Appuyer sur ESC pour fermer le menu déroulant."},{name:"Barre d'emplacement des éléments de l'éditeur",legend:"Appuyer sur ${elementsPathFocus} pour naviguer vers la barre d'emplacement des éléments de l'éditeur. Se déplacer vers le bouton d'élément suivant avec les touches TAB ou FLECHE DROITE. Se déplacer vers le bouton d'élément précédent avec les touches MAJ+TAB ou FLECHE GAUCHE. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'élément dans l'éditeur."}]}, {name:"Commandes",items:[{name:" Annuler la commande",legend:"Appuyer sur ${undo}"},{name:"Refaire la commande",legend:"Appuyer sur ${redo}"},{name:" Commande gras",legend:"Appuyer sur ${bold}"},{name:" Commande italique",legend:"Appuyer sur ${italic}"},{name:" Commande souligné",legend:"Appuyer sur ${underline}"},{name:" Commande lien",legend:"Appuyer sur ${link}"},{name:" Commande enrouler la barre d'outils",legend:"Appuyer sur ${toolbarCollapse}"},{name:"Accéder à la précédente commande d'espace de mise au point", legend:"Appuyez sur ${accessPreviousSpace} pour accéder à l'espace hors d'atteinte le plus proche avant le caret, par exemple: deux éléments HR adjacents. Répétez la combinaison de touches pour atteindre les espaces de mise au point distants."},{name:"Accès à la prochaine commande de l'espace de mise au point",legend:"Appuyez sur ${accessNextSpace} pour accéder au plus proche espace de mise au point hors d'atteinte après le caret, par exemple: deux éléments HR adjacents. répétez la combinaison de touches pour atteindre les espace de mise au point distants."}, {name:" Aide Accessibilité",legend:"Appuyer sur ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js000064400000012051152510440620017756 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","uk",{title:"Спеціальні Інструкції",contents:"Довідка. Натисніть ESC і вона зникне.",legend:[{name:"Основне",items:[{name:"Панель Редактора",legend:"Натисніть ${toolbarFocus} для переходу до панелі інструментів. Для переміщення між групами панелі інструментів використовуйте TAB і SHIFT-TAB. Для переміщення між кнопками панелі іструментів використовуйте кнопки СТРІЛКА ВПРАВО або ВЛІВО. Натисніть ПРОПУСК або ENTER для запуску кнопки панелі інструментів"},{name:"Діалог Редактора", legend:"У діалозі натисніть клавішу TAB для переходу до наступного поля, натисніть SHIFT + TAB, щоб перейти до попереднього поля, натисніть ENTER, щоб відправити дані, натисніть ESC, щоб скасувати. Для вікон, які мають кілька вкладок, натисніть ALT + F10 для переходу до списку вкладок. Перехід до наступної вкладки TAB АБО СТРІЛКА ВПРАВО. Перехід до попередньої вкладки за допомогою SHIFT + TAB або СТРІЛКА ВЛІВО. Натисніть ПРОПУСК або ENTER, щоб вибрати вкладку."},{name:"Контекстне Меню Редактора", legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Потім перейдіть до наступного пункту меню за допомогою TAB або СТРІЛКИ ВНИЗ. Натисніть ПРОПУСК або ENTER для вибору параметру меню. Відкрийте підменю поточного параметру, натиснувши ПРОПУСК або ENTER або СТРІЛКУ ВПРАВО. Перейдіть до батьківського елемента меню, натиснувши ESC або СТРІЛКУ ВЛІВО. Закрийте контекстне меню, натиснувши ESC."},{name:"Скринька Списків Редактора",legend:"Всередині списку переходимо до наступного пункту списку клавішею TAB або СТРІЛКА ВНИЗ. Перейти до попереднього елемента списку можна SHIFT + TAB або СТРІЛКА ВГОРУ. Натисніть ПРОПУСК або ENTER, щоб вибрати параметр списку. Натисніть клавішу ESC, щоб закрити список."}, {name:"Шлях до елемента редактора",legend:"Натисніть ${elementsPathFocus} для навігації між елементами панелі. Перейдіть до наступного елемента кнопкою TAB або СТРІЛКА ВПРАВО. Перейдіть до попереднього елемента кнопкою SHIFT+TAB або СТРІЛКА ВЛІВО. Натисніть ПРОПУСК або ENTER для вибору елемента в редакторі."}]},{name:"Команди",items:[{name:"Відмінити команду",legend:"Натисніть ${undo}"},{name:"Повторити",legend:"Натисніть ${redo}"},{name:"Жирний",legend:"Натисніть ${bold}"},{name:"Курсив",legend:"Натисніть ${italic}"}, {name:"Підкреслений",legend:"Натисніть ${underline}"},{name:"Посилання",legend:"Натисніть ${link}"},{name:"Згорнути панель інструментів",legend:"Натисніть ${toolbarCollapse}"},{name:"Доступ до попереднього місця фокусування",legend:"Натисніть ${accessNextSpace} для доступу до найближчої недосяжної області фокусування перед кареткою, наприклад: два сусідні елементи HR. Повторіть комбінацію клавіш для досягнення віддалених областей фокусування."},{name:"Доступ до наступного місця фокусування",legend:"Натисніть ${accessNextSpace} для доступу до найближчої недосяжної області фокусування після каретки, наприклад: два сусідні елементи HR. Повторіть комбінацію клавіш для досягнення віддалених областей фокусування."}, {name:"Допомога з доступності",legend:"Натисніть ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js000064400000012377152510440620017765 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","ug",{title:"قوشۇمچە چۈشەندۈرۈش",contents:"ياردەم مەزمۇنى. بۇ سۆزلەشكۈنى ياپماقچى بولسىڭىز ESC نى بېسىڭ.",legend:[{name:"ئادەتتىكى",items:[{name:"قورال بالداق تەھرىر",legend:"${toolbarFocus} بېسىلسا قورال بالداققا يېتەكلەيدۇ، TAB ياكى SHIFT+TAB ئارقىلىق قورال بالداق گۇرۇپپىسى تاللىنىدۇ، ئوڭ سول يا ئوقتا توپچا تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تاللانغان توپچىنى قوللىنىدۇ."},{name:"تەھرىرلىگۈچ سۆزلەشكۈسى",legend:"سۆزلەشكۈدە TAB كۇنۇپكىسىدا كېيىنكى سۆز بۆلىكىگە يۆتكىلىدۇ، SHIFT + TAB بىرىكمە كۇنۇپكىسىدا ئالدىنقى سۆز بۆلىكىگە يۆتكىلىدۇ، ENTER كۇنۇپكىسىدا سۆزلەشكۈنى تاپشۇرىدۇ، ESC كۇنۇپكىسى سۆزلەشكۈدىن ۋاز كېچىدۇ. كۆپ بەتكۈچلۈك سۆزلەشكۈگە نىسبەتەن، ALT + F10 دا بەتكۈچ تىزىمىغا يۆتكەيدۇ. ئاندىن TAB كۇنۇپكىسى ياكى ئوڭ يا ئوق كۇنۇپكىسى كېيىنكى بەتكۈچكە يۆتكەيدۇ؛ SHIFT + TAB كۇنۇپكىسى ياكى سول يا ئوق كۇنۇپكىسى ئالدىنقى بەتكۈچكە يۆتكەيدۇ. بوشلۇق كۇنۇپكىسى ياكى ENTER كۇنۇپكىسى بەتكۈچنى تاللايدۇ."}, {name:"تەھرىرلىگۈچ تىل مۇھىت تىزىملىكى",legend:"${contextMenu} ياكى ئەپ كۇنۇپكىسىدا تىل مۇھىت تىزىملىكىنى ئاچىدۇ. ئاندىن TAB ياكى ئاستى يا ئوق كۇنۇپكىسىدا كېيىنكى تىزىملىك تۈرىگە يۆتكەيدۇ؛ SHIFT+TAB ياكى ئۈستى يا ئوق كۇنۇپكىسىدا ئالدىنقى تىزىملىك تۈرىگە يۆتكەيدۇ. بوشلۇق ياكى ENTER كۇنۇپكىسىدا تىزىملىك تۈرىنى تاللايدۇ. بوشلۇق، ENTER ياكى ئوڭ يا ئوق كۇنۇپكىسىدا تارماق تىزىملىكنى ئاچىدۇ. قايتىش تىزىملىكىگە ESC ياكى سول يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. ESC كۇنۇپكىسىدا تىل مۇھىت تىزىملىكى تاقىلىدۇ."},{name:"تەھرىرلىگۈچ تىزىمى", legend:"تىزىم قۇتىسىدا، كېيىنكى تىزىم تۈرىگە يۆتكەشتە TAB ياكى ئاستى يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. ئالدىنقى تىزىم تۈرىگە يۆتكەشتە SHIFT + TAB ياكى ئۈستى يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. بوشلۇق ياكى ENTER كۇنۇپكىسىدا تىزىم تۈرىنى تاللايدۇ.ESC كۇنۇپكىسىدا تىزىم قۇتىسىنى يىغىدۇ."},{name:"تەھرىرلىگۈچ ئېلېمېنت يول بالداق",legend:"${elementsPathFocus} بېسىلسا ئېلېمېنت يول بالداققا يېتەكلەيدۇ، TAB ياكى ئوڭ يا ئوقتا كېيىنكى ئېلېمېنت تاللىنىدۇ، SHIFT+TAB ياكى سول يا ئوقتا ئالدىنقى ئېلېمېنت تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تەھرىرلىگۈچتىكى ئېلېمېنت تاللىنىدۇ."}]}, {name:"بۇيرۇق",items:[{name:"بۇيرۇقتىن يېنىۋال",legend:"${undo} نى بېسىڭ"},{name:"قايتىلاش بۇيرۇقى",legend:"${redo} نى بېسىڭ"},{name:"توملىتىش بۇيرۇقى",legend:"${bold} نى بېسىڭ"},{name:"يانتۇ بۇيرۇقى",legend:"${italic} نى بېسىڭ"},{name:"ئاستى سىزىق بۇيرۇقى",legend:"${underline} نى بېسىڭ"},{name:"ئۇلانما بۇيرۇقى",legend:"${link} نى بېسىڭ"},{name:"قورال بالداق قاتلاش بۇيرۇقى",legend:"${toolbarCollapse} نى بېسىڭ"},{name:"ئالدىنقى فوكۇس نۇقتىسىنى زىيارەت قىلىدىغان بۇيرۇق",legend:"${accessPreviousSpace} بېسىپ ^ بەلگىسىگە ئەڭ يېقىن زىيارەت قىلغىلى بولمايدىغان فوكۇس نۇقتا رايونىنىڭ ئالدىنى زىيارەت قىلىدۇ، مەسىلەن: ئۆز ئارا قوشنا ئىككى HR ئېلېمېنت. بۇ بىرىكمە كۇنۇپكا تەكرارلانسا يىراقتىكى فوكۇس نۇقتا رايونىغا يەتكىلى بولىدۇ."}, {name:"كېيىنكى فوكۇس نۇقتىسىنى زىيارەت قىلىدىغان بۇيرۇق",legend:"${accessNextSpace} بېسىپ ^ بەلگىسىگە ئەڭ يېقىن زىيارەت قىلغىلى بولمايدىغان فوكۇس نۇقتا رايونىنىڭ كەينىنى زىيارەت قىلىدۇ، مەسىلەن: ئۆز ئارا قوشنا ئىككى HR ئېلېمېنت. بۇ بىرىكمە كۇنۇپكا تەكرارلانسا يىراقتىكى فوكۇس نۇقتا رايونىغا يەتكىلى بولىدۇ."},{name:"توسالغۇسىز لايىھە چۈشەندۈرۈشى",legend:"${a11yHelp} نى بېسىڭ"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js000064400000005472152510440620017750 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","hi",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"सामान्य",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js000064400000006367152510440620020400 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","pt-br",{title:"Instruções de Acessibilidade",contents:"Conteúdo da Ajuda. Para fechar este diálogo pressione ESC.",legend:[{name:"Geral",items:[{name:"Barra de Ferramentas do Editor",legend:"Pressione ${toolbarFocus} para navegar para a barra de ferramentas. Mova para o anterior ou próximo grupo de ferramentas com TAB e SHIFT-TAB. Mova para o anterior ou próximo botão com SETA PARA DIREITA or SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas."}, {name:"Diálogo do Editor",legend:"Dentro de um diálogo, pressione TAB para navegar para o próximo campo, pressione SHIFT + TAB para mover para o campo anterior, pressione ENTER para enviar o diálogo, pressione ESC para cancelar o diálogo. Para diálogos que tem múltiplas abas, pressione ALT + F10 para navegar para a lista de abas, então mova para a próxima aba com SHIFT + TAB ou SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar a aba."},{name:"Menu de Contexto do Editor",legend:"Pressione ${contextMenu} ou TECLA DE MENU para abrir o menu de contexto, então mova para a próxima opção com TAB ou SETA PARA BAIXO. Mova para a anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu. Abra o submenu da opção atual com ESPAÇO ou ENTER ou SETA PARA DIREITA. Volte para o menu pai com ESC ou SETA PARA ESQUERDA. Feche o menu de contexto com ESC."}, {name:"Caixa de Lista do Editor",legend:"Dentro de uma caixa de lista, mova para o próximo item com TAB ou SETA PARA BAIXO. Mova para o item anterior com SHIFT + TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar uma opção na lista. Pressione ESC para fechar a caixa de lista."},{name:"Barra de Caminho do Elementos do Editor",legend:"Pressione ${elementsPathFocus} para a barra de caminho dos elementos. Mova para o próximo botão de elemento com TAB ou SETA PARA DIREITA. Mova para o botão anterior com SHIFT+TAB ou SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o elemento no editor."}]}, {name:"Comandos",items:[{name:" Comando Desfazer",legend:"Pressione ${undo}"},{name:" Comando Refazer",legend:"Pressione ${redo}"},{name:" Comando Negrito",legend:"Pressione ${bold}"},{name:" Comando Itálico",legend:"Pressione ${italic}"},{name:" Comando Sublinhado",legend:"Pressione ${underline}"},{name:" Comando Link",legend:"Pressione ${link}"},{name:" Comando Fechar Barra de Ferramentas",legend:"Pressione ${toolbarCollapse}"},{name:"Acessar o comando anterior de spaço de foco",legend:"Pressione ${accessNextSpace} para acessar o espaço de foco não alcançável mais próximo antes do cursor, por exemplo: dois elementos HR adjacentes. Repita a combinação de teclas para alcançar espaços de foco distantes."}, {name:"Acessar próximo fomando de spaço de foco",legend:"Pressione ${accessNextSpace} para acessar o espaço de foco não alcançável mais próximo após o cursor, por exemplo: dois elementos HR adjacentes. Repita a combinação de teclas para alcançar espaços de foco distantes."},{name:" Ajuda de Acessibilidade",legend:"Pressione ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js000064400000005463152510440620017762 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","mn",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Ерөнхий",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js000064400000006222152510440620017741 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","nb",{title:"Instruksjoner for tilgjengelighet",contents:"Innhold for hjelp. Trykk ESC for å lukke denne dialogen.",legend:[{name:"Generelt",items:[{name:"Verktøylinje for editor",legend:"Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT-TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen."},{name:"Dialog for editor", legend:"Mens du er i en dialog, trykk TAB for å navigere til neste dialogfelt, press SHIFT + TAB for å flytte til forrige felt, trykk ENTER for å akseptere dialogen, trykk ESC for å avbryte dialogen. For dialoger med flere faner, trykk ALT + F10 for å navigere til listen over faner. Gå til neste fane med TAB eller HØYRE PILTAST. Gå til forrige fane med SHIFT + TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge fanen."},{name:"Kontekstmeny for editor",legend:"Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC."}, {name:"Listeboks for editor",legend:"I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT + TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen."},{name:"Verktøylinje for elementsti",legend:"Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren."}]}, {name:"Hurtigtaster",items:[{name:"Angre",legend:"Trykk ${undo}"},{name:"Gjør om",legend:"Trykk ${redo}"},{name:"Fet tekst",legend:"Trykk ${bold}"},{name:"Kursiv tekst",legend:"Trykk ${italic}"},{name:"Understreking",legend:"Trykk ${underline}"},{name:"Lenke",legend:"Trykk ${link}"},{name:"Skjul verktøylinje",legend:"Trykk ${toolbarCollapse}"},{name:"Gå til forrige fokusområde",legend:"Trykk ${accessPreviousSpace} for å komme til nærmeste fokusområde før skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."}, {name:"Gå til neste fokusområde",legend:"Trykk ${accessNextSpace} for å komme til nærmeste fokusområde etter skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."},{name:"Hjelp for tilgjengelighet",legend:"Trykk ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/en.js000064400000005454152510440620017752 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","en",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js000064400000005505152510440620017765 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","ro",{title:"Instrucțiuni de accesibilitate",contents:"Cuprins. Pentru a închide acest dialog, apăsați tasta ESC.",legend:[{name:"General",items:[{name:"Editează bara.",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Dialog editor",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, {name:"Editor meniu contextual",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js000064400000010135152510440620017756 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","vi",{title:"Hướng dẫn trợ năng",contents:"Nội dung Hỗ trợ. Nhấn ESC để đóng hộp thoại.",legend:[{name:"Chung",items:[{name:"Thanh công cụ soạn thảo",legend:"Nhấn ${toolbarFocus} để điều hướng đến thanh công cụ. Nhấn TAB và SHIFT-TAB để chuyển đến nhóm thanh công cụ khác. Nhấn MŨI TÊN PHẢI hoặc MŨI TÊN TRÁI để chuyển sang nút khác trên thanh công cụ. Nhấn PHÍM CÁCH hoặc ENTER để kích hoạt nút trên thanh công cụ."},{name:"Hộp thoại Biên t",legend:"Bên trong một hộp thoại, nhấn TAB để chuyển sang trường tiếp theo, nhấn SHIFT + TAB để quay lại trường phía trước, nhấn ENTER để chấp nhận, nhấn ESC để đóng hộp thoại. Đối với các hộp thoại có nhiều tab, nhấn ALT + F10 để chuyển đến danh sách các tab. Sau đó nhấn TAB hoặc MŨI TÊN SANG PHẢI để chuyển sang tab tiếp theo. Nhấn SHIFT + TAB hoặc MŨI TÊN SANG TRÁI để chuyển sang tab trước đó. Nhấn DẤU CÁCH hoặc ENTER để chọn tab."}, {name:"Trình đơn Ngữ cảnh cBộ soạn thảo",legend:"Nhấn ${contextMenu} hoặc PHÍM ỨNG DỤNG để mở thực đơn ngữ cảnh. Sau đó nhấn TAB hoặc MŨI TÊN XUỐNG để di chuyển đến tuỳ chọn tiếp theo của thực đơn. Nhấn SHIFT+TAB hoặc MŨI TÊN LÊN để quay lại tuỳ chọn trước. Nhấn DẤU CÁCH hoặc ENTER để chọn tuỳ chọn của thực đơn. Nhấn DẤU CÁCH hoặc ENTER hoặc MŨI TÊN SANG PHẢI để mở thực đơn con của tuỳ chọn hiện tại. Nhấn ESC hoặc MŨI TÊN SANG TRÁI để quay trở lại thực đơn gốc. Nhấn ESC để đóng thực đơn ngữ cảnh."}, {name:"Hộp danh sách trình biên tập",legend:"Trong một danh sách chọn, di chuyển đối tượng tiếp theo với phím Tab hoặc phím mũi tên hướng xuống. Di chuyển đến đối tượng trước đó bằng cách nhấn tổ hợp phím Shift+Tab hoặc mũi tên hướng lên. Phím khoảng cách hoặc phím Enter để chọn các tùy chọn trong danh sách. Nhấn phím Esc để đóng lại danh sách chọn."},{name:"Thanh đường dẫn các đối tượng",legend:"Nhấn ${elementsPathFocus} để điều hướng các đối tượng trong thanh đường dẫn. Di chuyển đến đối tượng tiếp theo bằng phím Tab hoặc phím mũi tên bên phải. Di chuyển đến đối tượng trước đó bằng tổ hợp phím Shift+Tab hoặc phím mũi tên bên trái. Nhấn phím khoảng cách hoặc Enter để chọn đối tượng trong trình soạn thảo."}]}, {name:"Lệnh",items:[{name:"Làm lại lện",legend:"Ấn ${undo}"},{name:"Làm lại lệnh",legend:"Ấn ${redo}"},{name:"Lệnh in đậm",legend:"Ấn ${bold}"},{name:"Lệnh in nghiêng",legend:"Ấn ${italic}"},{name:"Lệnh gạch dưới",legend:"Ấn ${underline}"},{name:"Lệnh liên kết",legend:"Nhấn ${link}"},{name:"Lệnh hiển thị thanh công cụ",legend:"Nhấn${toolbarCollapse}"},{name:"Truy cập đến lệnh tập trung vào khoảng cách trước đó",legend:"Ấn ${accessPreviousSpace} để truy cập đến phần tập trung khoảng cách sau phần còn sót lại của khoảng cách gần nhất vốn không tác động đến được , thí dụ: hai yếu tố điều chỉnh HR. Lặp lại các phím kết họep này để vươn đến phần khoảng cách."}, {name:"Truy cập phần đối tượng lệnh khoảng trống",legend:"Ấn ${accessNextSpace} để truy cập đến phần tập trung khoảng cách sau phần còn sót lại của khoảng cách gần nhất vốn không tác động đến được , thí dụ: hai yếu tố điều chỉnh HR. Lặp lại các phím kết họep này để vươn đến phần khoảng cách."},{name:"Trợ giúp liên quan",legend:"Nhấn ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js000064400000006651152510440620017755 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","cs",{title:"Instrukce pro přístupnost",contents:"Obsah nápovědy. Pro uzavření tohoto dialogu stiskněte klávesu ESC.",legend:[{name:"Obecné",items:[{name:"Panel nástrojů editoru",legend:"Stiskněte${toolbarFocus} k procházení panelu nástrojů. Přejděte na další a předchozí skupiny pomocí TAB a SHIFT-TAB. Přechod na další a předchozí tlačítko panelu nástrojů je pomocí ŠIPKA VPRAVO nebo ŠIPKA VLEVO. Stisknutím mezerníku nebo klávesy ENTER tlačítko aktivujete."},{name:"Dialogové okno editoru", legend:"Uvnitř dialogového okna stiskněte TAB pro přesunutí na další pole, stiskněte SHIFT + TAB pro přesun na předchozí pole, stiskněte ENTER pro odeslání dialogu, stiskněte ESC pro jeho zrušení. Pro dialogová okna, která mají mnoho karet stiskněte ALT + F10 pr oprocházení seznamu karet. Pak se přesuňte na další kartu pomocí TAB nebo ŠIPKA VPRAVO. Pro přesun na předchozí stiskněte SHIFT + TAB nebo ŠIPKA VLEVO. Stiskněte MEZERNÍK nebo ENTER pro vybrání stránky karet."},{name:"Kontextové menu editoru", legend:"Stiskněte ${contextMenu} nebo klávesu APPLICATION k otevření kontextového menu. Pak se přesuňte na další možnost menu pomocí TAB nebo ŠIPKY DOLŮ. Přesuňte se na předchozí možnost pomocí SHIFT+TAB nebo ŠIPKY NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti menu. Podmenu současné možnosti otevřete pomocí MEZERNÍKU nebo ENTER či ŠIPKY DOLEVA. Kontextové menu uzavřete stiskem ESC."},{name:"Rámeček seznamu editoru",legend:"Uvnitř rámečku seznamu se přesunete na další položku menu pomocí TAB nebo ŠIPKA DOLŮ. Na předchozí položku se přesunete SHIFT + TAB nebo ŠIPKA NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti seznamu. Stiskněte ESC pro uzavření seznamu."}, {name:"Lišta cesty prvku v editoru",legend:"Stiskněte ${elementsPathFocus} pro procházení lišty cesty prvku. Na další tlačítko prvku se přesunete pomocí TAB nebo ŠIPKA VPRAVO. Na předchozí položku se přesunete pomocí SHIFT + TAB nebo ŠIPKA VLEVO. Stiskněte MEZERNÍK nebo ENTER pro vybrání prvku v editoru."}]},{name:"Příkazy",items:[{name:" Příkaz Zpět",legend:"Stiskněte ${undo}"},{name:" Příkaz Znovu",legend:"Stiskněte ${redo}"},{name:" Příkaz Tučné",legend:"Stiskněte ${bold}"},{name:" Příkaz Kurzíva", legend:"Stiskněte ${italic}"},{name:" Příkaz Podtržení",legend:"Stiskněte ${underline}"},{name:" Příkaz Odkaz",legend:"Stiskněte ${link}"},{name:" Příkaz Skrýt panel nástrojů",legend:"Stiskněte ${toolbarCollapse}"},{name:"Příkaz pro přístup k předchozímu prostoru zaměření",legend:"Stiskněte ${accessPreviousSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření před stříškou, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte."},{name:"Příkaz pro přístup k dalšímu prostoru zaměření", legend:"Stiskněte ${accessNextSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření po stříšce, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte."},{name:" Nápověda přístupnosti",legend:"Stiskněte ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/et.js000064400000005465152510440620017762 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","et",{title:"Accessibility Instructions",contents:"Abi sisu. Selle dialoogi sulgemiseks vajuta ESC klahvi.",legend:[{name:"Üldine",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js000064400000011120152510440620017721 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","fa",{title:"دستورالعمل‌های دسترسی",contents:"راهنمای فهرست مطالب. برای بستن این کادر محاوره‌ای ESC را فشار دهید.",legend:[{name:"عمومی",items:[{name:"نوار ابزار ویرایشگر",legend:"${toolbarFocus} را برای باز کردن نوار ابزار بفشارید. با کلید Tab و Shif-Tab در مجموعه نوار ابزار بعدی و قبلی حرکت کنید. برای حرکت در کلید نوار ابزار قبلی و بعدی با کلید جهت‌نمای راست و چپ جابجا شوید. کلید Space یا Enter را برای فعال کردن کلید نوار ابزار بفشارید."},{name:"پنجره محاورهای ویرایشگر", legend:"در داخل یک پنجره محاورهای، کلید Tab را بفشارید تا به پنجرهی بعدی بروید، Shift+Tab برای حرکت به فیلد قبلی، فشردن Enter برای ثبت اطلاعات پنجره، فشردن Esc برای لغو پنجره محاورهای و برای پنجرههایی که چندین برگه دارند، فشردن Alt+F10 جهت رفتن به Tab-List. در نهایت حرکت به برگه بعدی با Tab یا کلید جهتنمای راست. حرکت به برگه قبلی با Shift+Tab یا کلید جهتنمای چپ. فشردن Space یا Enter برای انتخاب یک برگه."},{name:"منوی متنی ویرایشگر",legend:"${contextMenu} یا کلید برنامههای کاربردی را برای باز کردن منوی متن را بفشارید. سپس میتوانید برای حرکت به گزینه بعدی منو با کلید Tab و یا کلید جهتنمای پایین جابجا شوید. حرکت به گزینه قبلی با Shift+Tab یا کلید جهتنمای بالا. فشردن Space یا Enter برای انتخاب یک گزینه از منو. باز کردن زیر شاخه گزینه منو جاری با کلید Space یا Enter و یا کلید جهتنمای راست و چپ. بازگشت به منوی والد با کلید Esc یا کلید جهتنمای چپ. بستن منوی متن با Esc."}, {name:"جعبه فهرست ویرایشگر",legend:"در داخل جعبه لیست، قلم دوم از اقلام لیست بعدی را با TAB و یا Arrow Down حرکت دهید. انتقال به قلم دوم از اقلام لیست قبلی را با SHIFT + TAB یا UP ARROW. کلید Space یا ENTER را برای انتخاب گزینه لیست بفشارید. کلید ESC را برای بستن جعبه لیست بفشارید."},{name:"ویرایشگر عنصر نوار راه",legend:"برای رفتن به مسیر عناصر ${elementsPathFocus} را بفشارید. حرکت به کلید عنصر بعدی با کلید Tab یا کلید جهت‌نمای راست. برگشت به کلید قبلی با Shift+Tab یا کلید جهت‌نمای چپ. فشردن Space یا Enter برای انتخاب یک عنصر در ویرایشگر."}]}, {name:"فرمان‌ها",items:[{name:"بازگشت به آخرین فرمان",legend:"فشردن ${undo}"},{name:"انجام مجدد فرمان",legend:"فشردن ${redo}"},{name:"فرمان درشت کردن متن",legend:"فشردن ${bold}"},{name:"فرمان کج کردن متن",legend:"فشردن ${italic}"},{name:"فرمان زیرخطدار کردن متن",legend:"فشردن ${underline}"},{name:"فرمان پیوند دادن",legend:"فشردن ${link}"},{name:"بستن نوار ابزار فرمان",legend:"فشردن ${toolbarCollapse}"},{name:"دسترسی به فرمان محل تمرکز قبلی",legend:"فشردن ${accessPreviousSpace} برای دسترسی به نزدیک‌ترین فضای قابل دسترسی تمرکز قبل از هشتک، برای مثال: دو عنصر مجاور HR -خط افقی-. تکرار کلید ترکیبی برای رسیدن به فضاهای تمرکز از راه دور."}, {name:"دسترسی به فضای دستور بعدی",legend:"برای دسترسی به نزدیک‌ترین فضای تمرکز غیر قابل دسترس، ${accessNextSpace} را پس از علامت هشتک بفشارید، برای مثال: دو عنصر مجاور HR -خط افقی-. کلید ترکیبی را برای رسیدن به فضای تمرکز تکرار کنید."},{name:"راهنمای دسترسی",legend:"فشردن ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js000064400000005703152510440620017754 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","mk",{title:"Инструкции за пристапност",contents:"Содржина на делот за помош. За да го затворите овој дијалот притиснете ESC.",legend:[{name:"Општо",items:[{name:"Мени за едиторот",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Дијалот за едиторот", legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."}, {name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]}, {name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/da.js000064400000005474152510440620017736 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","da",{title:"Tilgængelighedsinstrukser",contents:"Onlinehjælp. For at lukke dette vindue klik ESC",legend:[{name:"Generelt",items:[{name:"Editor værktøjslinje",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Kommandoer",items:[{name:"Fortryd kommando",legend:"Klik på ${undo}"},{name:"Gentag kommando",legend:"Klik ${redo}"},{name:" Bold command",legend:"Klik ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Klik ${underline}"},{name:" Link command",legend:"Klik ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Kilk ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js000064400000005511152510440620020361 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","zh-cn",{title:"辅助功能说明",contents:"帮助内容。要关闭此对话框请按 ESC 键。",legend:[{name:"常规",items:[{name:"编辑器工具栏",legend:"按 ${toolbarFocus} 导航到工具栏,使用 TAB 键和 SHIFT+TAB 组合键移动到上一个和下一个工具栏组。使用左右箭头键移动到上一个和下一个工具栏按钮。按空格键或回车键以选中工具栏按钮。"},{name:"编辑器对话框",legend:"在对话框内,TAB 键移动到下一个字段,SHIFT + TAB 组合键移动到上一个字段,ENTER 键提交对话框,ESC 键取消对话框。对于有多选项卡的对话框,用ALT + F10来移到选项卡列表。然后用 TAB 键或者向右箭头来移动到下一个选项卡;SHIFT + TAB 组合键或者向左箭头移动到上一个选项卡。用 SPACE 键或者 ENTER 键选择选项卡。"},{name:"编辑器上下文菜单",legend:"用 ${contextMenu} 或者“应用程序键”打开上下文菜单。然后用 TAB 键或者下箭头键来移动到下一个菜单项;SHIFT + TAB 组合键或者上箭头键移动到上一个菜单项。用 SPACE 键或者 ENTER 键选择菜单项。用 SPACE 键,ENTER 键或者右箭头键打开子菜单。返回菜单用 ESC 键或者左箭头键。用 ESC 键关闭上下文菜单。"}, {name:"编辑器列表框",legend:"在列表框中,移到下一列表项用 TAB 键或者下箭头键。移到上一列表项用SHIFT + TAB 组合键或者上箭头键,用 SPACE 键或者 ENTER 键选择列表项。用 ESC 键收起列表框。"},{name:"编辑器元素路径栏",legend:"按 ${elementsPathFocus} 以导航到元素路径栏,使用 TAB 键或右箭头键选择下一个元素,使用 SHIFT+TAB 组合键或左箭头键选择上一个元素,按空格键或回车键以选定编辑器里的元素。"}]},{name:"命令",items:[{name:" 撤消命令",legend:"按 ${undo}"},{name:" 重做命令",legend:"按 ${redo}"},{name:" 加粗命令",legend:"按 ${bold}"},{name:" 倾斜命令",legend:"按 ${italic}"},{name:" 下划线命令",legend:"按 ${underline}"},{name:" 链接命令",legend:"按 ${link}"},{name:" 工具栏折叠命令",legend:"按 ${toolbarCollapse}"}, {name:"访问前一个焦点区域的命令",legend:"按 ${accessPreviousSpace} 访问^符号前最近的不可访问的焦点区域,例如:两个相邻的 HR元素。重复此组合按键可以到达远处的焦点区域。"},{name:"访问下一个焦点区域命令",legend:"按 ${accessNextSpace} 以访问^符号后最近的不可访问的焦点区域。例如:两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。"},{name:"辅助功能帮助",legend:"按 ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js000064400000005737152510440630017766 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","hr",{title:"Upute dostupnosti",contents:"Sadržaj pomoći. Za zatvaranje pritisnite ESC.",legend:[{name:"Općenito",items:[{name:"Alatna traka",legend:"Pritisni ${toolbarFocus} za navigaciju do alatne trake. Pomicanje do prethodne ili sljedeće alatne grupe vrši se pomoću SHIFT-TAB i TAB. Pomicanje do prethodnog ili sljedećeg gumba u alatnoj traci vrši se pomoću lijeve i desne strelice kursora. Pritisnite SPACE ili ENTER za aktivaciju alatne trake."},{name:"Dijalog", legend:"Unutar dijaloga, pritisnite TAB za navigaciju do sljedećeg polja, pritisnite SHIFT + TAB za vraćanje na prethodno polje, pritisnite ENTER za slanje dijaloga ili ESC za zatvaranje dijaloga. Za dijaloge koji imaju višestruke kartice, pritisnite ALT + F10 za na navigaciju i zatim TAB ili lijeva strelica kursora ili SHIFT + TAB i desna strelica kursora. SPACE ili ENTER odabiru karticu."},{name:"Kontekstni izbornik",legend:"Pritisnite ${contextMenu} ili APPLICATION tipku za otvaranje kontekstnog izbornika. Pomicanje se vrši TAB ili strelicom kursora prema dolje ili SHIFT+TAB ili strelica kursora prema gore. SPACE ili ENTER odabiru opciju izbornika. Otvorite podizbornik trenutne opcije sa SPACE, ENTER ili desna strelica kursora. Povratak na prethodni izbornik vrši se sa ESC ili lijevom strelicom kursora. Zatvaranje se vrši pritiskom na tipku ESC."}, {name:"Lista",legend:"Unutar list-boxa, pomicanje na sljedeću stavku vrši se sa TAB ili strelica kursora prema dolje. Na prethodnu sa SHIFT + TAB ili strelica prema gore. Pritiskom na SPACE ili ENTER odabire se stavka ili ESC za zatvaranje."},{name:"Traka putanje elemenata",legend:"Pritisnite ${elementsPathFocus} za navigaciju po putanji elemenata. Pritisnite TAB ili desnu strelicu kursora za pomicanje na sljedeći element ili SHIFT + TAB ili lijeva strelica kursora za pomicanje na prethodni element. Pritiskom na SPACE ili ENTER vrši se odabir elementa."}]}, {name:"Naredbe",items:[{name:"Vrati naredbu",legend:"Pritisni ${undo}"},{name:"Ponovi naredbu",legend:"Pritisni ${redo}"},{name:"Bold naredba",legend:"Pritisni ${bold}"},{name:"Italic naredba",legend:"Pritisni ${italic}"},{name:"Underline naredba",legend:"Pritisni ${underline}"},{name:"Link naredba",legend:"Pritisni ${link}"},{name:"Smanji alatnu traku naredba",legend:"Pritisni ${toolbarCollapse}"},{name:"Access previous focus space naredba",legend:"Pritisni ${accessPreviousSpace} za pristup najbližem nedostupnom razmaku prije kursora, npr.: dva spojena HR elementa. Ponovnim pritiskom dohvatiti će se sljedeći nedostupni razmak."}, {name:"Access next focus space naredba",legend:"Pritisni ${accessNextSpace} za pristup najbližem nedostupnom razmaku nakon kursora, npr.: dva spojena HR elementa. Ponovnim pritiskom dohvatiti će se sljedeći nedostupni razmak."},{name:"Pomoć za dostupnost",legend:"Pritisni ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js000064400000006505152510440630017732 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","ca",{title:"Instruccions d'Accessibilitat",contents:"Continguts de l'Ajuda. Per tancar aquest quadre de diàleg premi ESC.",legend:[{name:"General",items:[{name:"Editor de barra d'eines",legend:"Premi ${toolbarFocus} per desplaçar-se per la barra d'eines. Vagi en el següent i anterior grup de barra d'eines amb TAB i SHIFT-TAB. Vagi en el següent i anterior botó de la barra d'eines amb RIGHT ARROW i LEFT ARROW. Premi SPACE o ENTER per activar el botó de la barra d'eines."}, {name:"Editor de quadre de diàleg",legend:"Dins d'un quadre de diàleg, premi la tecla TAB per desplaçar-se al següent camp del quadre de diàleg, premi SHIFT + TAB per desplaçar-se a l'anterior camp, premi ENTER per acceptar el quadre de diàleg, premi ESC per cancel·lar el quadre de diàleg. Per els quadres de diàleg que tenen diverses pestanyes, premi ALT + F10 per anar a la llista de pestanyes. Després podrà desplaçar-se a la següent pestanya amb TAB o RIGHT ARROW. Anar a la pestanya anterior amb SHIFT + TAB o LEFT ARROW. Premi SPACE o ENTER per seleccionar la pestanya."}, {name:"Editor de menú contextual",legend:"Premi ${contextMenu} o APPLICATION KEY per obrir el menú contextual. Després desplacis a la següent opció del menú amb TAB o DOWN ARROW. Desplacis a l'anterior opció amb SHIFT+TAB o UP ARROW. Premi SPACE o ENTER per seleccionar l'opció del menú. Obri el submenú de l'actual opció utilitzant SPACE o ENTER o RIGHT ARROW. Pot tornar a l'opció del menú pare amb ESC o LEFT ARROW. Tanqui el menú contextual amb ESC."},{name:"Editor de caixa de llista",legend:"Dins d'un quadre de llista, desplacis al següent element de la llista amb TAB o DOWN ARROW. Desplacis a l'anterior element de la llista amb SHIFT + TAB o UP ARROW. Premi SPACE o ENTER per seleccionar l'opció de la llista. Premi ESC per tancar el quadre de llista."}, {name:"Editor de barra de ruta de l'element",legend:"Premi ${elementsPathFocus} per anar als elements de la barra de ruta. Desplacis al botó de l'element següent amb TAB o RIGHT ARROW. Desplacis a l'anterior botó amb SHIFT+TAB o LEFT ARROW. Premi SPACE o ENTER per seleccionar l'element a l'editor."}]},{name:"Ordres",items:[{name:"Desfer ordre",legend:"Premi ${undo}"},{name:"Refer ordre",legend:"Premi ${redo}"},{name:"Ordre negreta",legend:"Premi ${bold}"},{name:"Ordre cursiva",legend:"Premi ${italic}"}, {name:"Ordre subratllat",legend:"Premi ${underline}"},{name:"Ordre enllaç",legend:"Premi ${link}"},{name:"Ordre amagar barra d'eines",legend:"Premi ${toolbarCollapse}"},{name:"Ordre per accedir a l'anterior espai enfocat",legend:"Premi ${accessPreviousSpace} per accedir a l'enfocament d'espai més proper inabastable abans del símbol d'intercalació, per exemple: dos elements HR adjacents. Repetiu la combinació de tecles per arribar a enfocaments d'espais distants."},{name:"Ordre per accedir al següent espai enfocat", legend:"Premi ${accessNextSpace} per accedir a l'enfocament d'espai més proper inabastable després del símbol d'intercalació, per exemple: dos elements HR adjacents. Repetiu la combinació de tecles per arribar a enfocaments d'espais distants."},{name:"Ajuda d'accessibilitat",legend:"Premi ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js000064400000006736152510440630017771 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","hu",{title:"Kisegítő utasítások",contents:"Súgó tartalmak. A párbeszédablak bezárásához nyomjon ESC-et.",legend:[{name:"Általános",items:[{name:"Szerkesztő Eszköztár",legend:"Nyomjon ${toolbarFocus} hogy kijelölje az eszköztárat. A következő és előző eszköztár csoporthoz a TAB és SHIFT TAB-al juthat el. A következő és előző eszköztár gombhoz a BAL NYÍL vagy JOBB NYÍL gombbal juthat el. Nyomjon SPACE-t vagy ENTER-t hogy aktiválja az eszköztár gombot."},{name:"Szerkesző párbeszéd ablak", legend:"Párbeszédablakban nyomjon TAB-ot a következő párbeszédmezőhöz ugráshoz, nyomjon SHIFT + TAB-ot az előző mezőhöz ugráshoz, nyomjon ENTER-t a párbeszédablak elfogadásához, nyomjon ESC-et a párbeszédablak elvetéséhez. Azokhoz a párbeszédablakokhoz, amik több fület tartalmaznak, nyomjon ALT + F10-et hogy a fülekre ugorjon. Ezután a TAB-al vagy a JOBB NYÍLLAL a következő fülre ugorhat. Az előző fülre ugráshoz használja a SHIFT + TAB-ot vagy a BAL NYILAT. Nyomjon SPACE-t vagy ENTER-t hogy kijelölje a fület."}, {name:"Szerkesztő helyi menü",legend:"Nyomjon ${contextMenu}-t vagy ALKALMAZÁS BILLENTYŰT a helyi menü megnyitásához. Ezután a következő menüpontra léphet a TAB vagy LEFELÉ NYÍLLAL. Az előző opciót a SHIFT+TAB vagy FELFELÉ NYÍLLAL érheti el. Nyomjon SPACE-t vagy ENTER-t a menüpont kiválasztásához. A jelenlegi menüpont almenüjének megnyitásához nyomjon SPACE-t vagy ENTER-t, vagy JOBB NYILAT. A főmenühöz való visszatéréshez nyomjon ESC-et vagy BAL NYILAT. A helyi menü bezárása az ESC billentyűvel lehetséges."}, {name:"Szerkesztő lista",legend:"A listán belül a következő elemre a TAB vagy LEFELÉ NYÍLLAL mozoghat. Az előző elem kiválasztásához nyomjon SHIFT+TAB-ot vagy FELFELÉ NYILAT. Nyomjon SPACE-t vagy ENTER-t az elem kiválasztásához. Az ESC billentyű megnyomásával bezárhatja a listát."},{name:"Szerkesztő elem utak sáv",legend:"Nyomj ${elementsPathFocus} hogy kijelöld a elemek út sávját. A következő elem gombhoz a TAB-al vagy a JOBB NYÍLLAL juthatsz el. Az előző gombhoz a SHIFT+TAB vagy BAL NYÍLLAL mehetsz. A SPACE vagy ENTER billentyűvel kiválaszthatod az elemet a szerkesztőben."}]}, {name:"Parancsok",items:[{name:"Parancs visszavonása",legend:"Nyomj ${undo}"},{name:"Parancs megismétlése",legend:"Nyomjon ${redo}"},{name:"Félkövér parancs",legend:"Nyomjon ${bold}"},{name:"Dőlt parancs",legend:"Nyomjon ${italic}"},{name:"Aláhúzott parancs",legend:"Nyomjon ${underline}"},{name:"Link parancs",legend:"Nyomjon ${link}"},{name:"Szerkesztősáv összecsukása parancs",legend:"Nyomjon ${toolbarCollapse}"},{name:"Hozzáférés az előző fókusz helyhez parancs",legend:"Nyomj ${accessNextSpace} hogy hozzáférj a legközelebbi elérhetetlen fókusz helyhez a hiányjel előtt, például: két szomszédos HR elemhez. Ismételd meg a billentyűkombinációt hogy megtaláld a távolabbi fókusz helyeket."}, {name:"Hozzáférés a következő fókusz helyhez parancs",legend:"Nyomj ${accessNextSpace} hogy hozzáférj a legközelebbi elérhetetlen fókusz helyhez a hiányjel után, például: két szomszédos HR elemhez. Ismételd meg a billentyűkombinációt hogy megtaláld a távolabbi fókusz helyeket."},{name:"Kisegítő súgó",legend:"Nyomjon ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/no.js000064400000006217152510440630017763 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","no",{title:"Instruksjoner for tilgjengelighet",contents:"Innhold for hjelp. Trykk ESC for å lukke denne dialogen.",legend:[{name:"Generelt",items:[{name:"Verktøylinje for editor",legend:"Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT-TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen."},{name:"Dialog for editor", legend:"Mens du er i en dialog, trykk TAB for å navigere til neste dialogfelt, press SHIFT + TAB for å flytte til forrige felt, trykk ENTER for å akseptere dialogen, trykk ESC for å avbryte dialogen. For dialoger med flere faner, trykk ALT + F10 for å navigere til listen over faner. Gå til neste fane med TAB eller HØYRE PILTAST. Gå til forrige fane med SHIFT + TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge fanen."},{name:"Kontekstmeny for editor",legend:"Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC."}, {name:"Listeboks for editor",legend:"I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT + TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen."},{name:"Verktøylinje for elementsti",legend:"Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren."}]}, {name:"Kommandoer",items:[{name:"Angre",legend:"Trykk ${undo}"},{name:"Gjør om",legend:"Trykk ${redo}"},{name:"Fet tekst",legend:"Trykk ${bold}"},{name:"Kursiv tekst",legend:"Trykk ${italic}"},{name:"Understreking",legend:"Trykk ${underline}"},{name:"Link",legend:"Trykk ${link}"},{name:"Skjul verktøylinje",legend:"Trykk ${toolbarCollapse}"},{name:"Gå til forrige fokusområde",legend:"Trykk ${accessPreviousSpace} for å komme til nærmeste fokusområde før skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."}, {name:"Gå til neste fokusområde",legend:"Trykk ${accessNextSpace} for å komme til nærmeste fokusområde etter skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."},{name:"Hjelp for tilgjengelighet",legend:"Trykk ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js000064400000011644152510440630017766 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","ku",{title:"ڕێنمای لەبەردەستدابوون",contents:"پێکهاتەی یارمەتی. کلیك ESC بۆ داخستنی ئەم دیالۆگه.",legend:[{name:"گشتی",items:[{name:"تووڵامرازی دەستكاریكەر",legend:"کلیك ${toolbarFocus} بۆ ڕابەری تووڵامراز. بۆ گواستنەوەی پێشوو داهاتووی گرووپی تووڵامرازی داگرتنی کلیلی TAB لەگەڵ‌ SHIFT-TAB. بۆ گواستنەوەی پێشوو داهاتووی دووگمەی تووڵامرازی لەڕێی کلیلی تیری دەستی ڕاست یان کلیلی تیری دەستی چەپ. کلیکی کلیلی SPACE یان ENTER بۆ چالاککردنی دووگمەی تووڵامراز."},{name:"دیالۆگی دەستكاریكەر", legend:"لەهەمانکاتدا کە تۆ لەدیالۆگی, کلیکی کلیلی TAB بۆ ڕابەری خانەی دیالۆگێکی تر, داگرتنی کلیلی SHIFT + TAB بۆ گواستنەوەی بۆ خانەی پێشووتر, کلیكی کلیلی ENTER بۆ ڕازیکردنی دیالۆگەکە, کلیكی کلیلی ESC بۆ هەڵوەشاندنەوەی دیالۆگەکە. بۆ دیالۆگی لەبازدەری (تابی) زیاتر, کلیكی کلیلی ALT + F10 بۆ ڕابەری لیستی بازدەرەکان. بۆ چوونە بازدەری تابی داهاتوو کلیكی کلیلی TAB یان کلیلی تیری دەستی ڕاست. بۆچوونە بازدەری تابی پێشوو داگرتنی کلیلی SHIFT + TAB یان کلیلی تیری دەستی چەپ. کلیی کلیلی SPACE یان ENTER بۆ هه‌ڵبژاردنی بازدەر (تاب)."}, {name:"پێڕستی سەرنووسەر",legend:"کلیك ${contextMenu} یان دوگمەی لیسته‌(Menu) بۆ کردنەوەی لیستەی دەق. بۆ چوونە هەڵبژاردەیەکی تر له‌ لیسته‌ کلیکی کلیلی TAB یان کلیلی تیری ڕوو لەخوارەوه‌ بۆ چوون بۆ هەڵبژاردەی پێشوو کلیکی کلیلی SHIFT+TAB یان کلیلی تیری ڕوو له‌ سەرەوە. داگرتنی کلیلی SPACE یان ENTER بۆ هەڵبژاردنی هەڵبژاردەی لیسته‌. بۆ کردنەوەی لقی ژێر لیسته‌ لەهەڵبژاردەی لیستە کلیکی کلیلی SPACE یان ENTER یان کلیلی تیری دەستی ڕاست. بۆ گەڕانەوه بۆ سەرەوەی لیسته‌ کلیکی کلیلی ESC یان کلیلی تیری دەستی چەپ. بۆ داخستنی لیستە کلیكی کلیلی ESC بکە."}, {name:"لیستی سنووقی سەرنووسەر",legend:"لەناو سنوقی لیست, چۆن بۆ هەڵنبژاردەی لیستێکی تر کلیکی کلیلی TAB یان کلیلی تیری ڕوو لەخوار. چوون بۆ هەڵبژاردەی لیستی پێشوو کلیکی کلیلی SHIFT + TAB یان کلیلی تیری ڕوو لەسەرەوه‌. کلیکی کلیلی SPACE یان ENTER بۆ دیاریکردنی ‌هەڵبژاردەی لیست. کلیکی کلیلی ESC بۆ داخستنی سنوقی لیست."},{name:"تووڵامرازی توخم",legend:"کلیك ${elementsPathFocus} بۆ ڕابەری تووڵامرازی توخمەکان. چوون بۆ دوگمەی توخمێکی تر کلیکی کلیلی TAB یان کلیلی تیری دەستی ڕاست. چوون بۆ دوگمەی توخمی پێشوو کلیلی SHIFT+TAB یان کلیکی کلیلی تیری دەستی چەپ. داگرتنی کلیلی SPACE یان ENTER بۆ دیاریکردنی توخمەکه‌ لەسەرنووسه."}]}, {name:"فەرمانەکان",items:[{name:"پووچکردنەوەی فەرمان",legend:"کلیك ${undo}"},{name:"هەڵگەڕانەوەی فەرمان",legend:"کلیك ${redo}"},{name:"فەرمانی دەقی قەڵەو",legend:"کلیك ${bold}"},{name:"فەرمانی دەقی لار",legend:"کلیك ${italic}"},{name:"فەرمانی ژێرهێڵ",legend:"کلیك ${underline}"},{name:"فەرمانی به‌ستەر",legend:"کلیك ${link}"},{name:"شاردەنەوەی تووڵامراز",legend:"کلیك ${toolbarCollapse}"},{name:"چوونەناو سەرنجدانی پێشوی فەرمانی بۆشایی",legend:"کلیک ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:"چوونەناو سەرنجدانی داهاتووی فەرمانی بۆشایی",legend:"کلیک ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"دەستپێگەیشتنی یارمەتی",legend:"کلیك ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js000064400000006320152510440630017755 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","cy",{title:"Canllawiau Hygyrchedd",contents:"Cynnwys Cymorth. I gau y deialog hwn, pwyswch ESC.",legend:[{name:"Cyffredinol",items:[{name:"Bar Offer y Golygydd",legend:"Pwyswch $ {toolbarFocus} i fynd at y bar offer. Symudwch i'r grŵp bar offer nesaf a blaenorol gyda TAB a SHIFT-TAB. Symudwch i'r botwm bar offer nesaf a blaenorol gyda SAETH DDE neu SAETH CHWITH. Pwyswch SPACE neu ENTER i wneud botwm y bar offer yn weithredol."},{name:"Deialog y Golygydd",legend:"Tu mewn i'r deialog, pwyswch TAB i fynd i'r maes nesaf ar y deialog, pwyswch SHIFT + TAB i symud i faes blaenorol, pwyswch ENTER i gyflwyno'r deialog, pwyswch ESC i ddiddymu'r deialog. Ar gyfer deialogau sydd â thudalennau aml-tab, pwyswch ALT + F10 i lywio'r tab-restr. Yna symudwch i'r tab nesaf gyda TAB neu SAETH DDE. Symudwch i dab blaenorol gyda SHIFT + TAB neu'r SAETH CHWITH. Pwyswch SPACE neu ENTER i ddewis y dudalen tab."}, {name:"Dewislen Cyd-destun y Golygydd",legend:"Pwyswch $ {contextMenu} neu'r ALLWEDD 'APPLICATION' i agor y ddewislen cyd-destun. Yna symudwch i'r opsiwn ddewislen nesaf gyda'r TAB neu'r SAETH I LAWR. Symudwch i'r opsiwn blaenorol gyda SHIFT + TAB neu'r SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn ddewislen. Agorwch is-dewislen yr opsiwn cyfredol gyda SPACE neu ENTER neu SAETH DDE. Ewch yn ôl i'r eitem ar y ddewislen uwch gydag ESC neu SAETH CHWITH. Ceuwch y ddewislen cyd-destun gydag ESC."}, {name:"Blwch Rhestr y Golygydd",legend:"Tu mewn y blwch rhestr, ewch i'r eitem rhestr nesaf gyda TAB neu'r SAETH I LAWR. Symudwch i restr eitem flaenorol gyda SHIFT + TAB neu SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn o'r rhestr. Pwyswch ESC i gau'r rhestr."},{name:"Bar Llwybr Elfen y Golygydd",legend:"Pwyswch $ {elementsPathFocus} i fynd i'r elfennau llwybr bar. Symudwch i fotwm yr elfen nesaf gyda TAB neu SAETH DDE. Symudwch i fotwm blaenorol gyda SHIFT + TAB neu SAETH CHWITH. Pwyswch SPACE neu ENTER i ddewis yr elfen yn y golygydd."}]}, {name:"Gorchmynion",items:[{name:"Gorchymyn dadwneud",legend:"Pwyswch ${undo}"},{name:"Gorchymyn ailadrodd",legend:"Pwyswch ${redo}"},{name:"Gorchymyn Bras",legend:"Pwyswch ${bold}"},{name:"Gorchymyn italig",legend:"Pwyswch ${italig}"},{name:"Gorchymyn tanlinellu",legend:"Pwyso ${underline}"},{name:"Gorchymyn dolen",legend:"Pwyswch ${link}"},{name:"Gorchymyn Cwympo'r Dewislen",legend:"Pwyswch ${toolbarCollapse}"},{name:"Myned i orchymyn bwlch ffocws blaenorol",legend:"Pwyswch ${accessPreviousSpace} i myned i'r \"blwch ffocws sydd methu ei gyrraedd\" cyn y caret, er enghraifft: dwy elfen HR drws nesaf i'w gilydd. AIladroddwch y cyfuniad allwedd i gyrraedd bylchau ffocws pell."}, {name:"Ewch i'r gorchymyn blwch ffocws nesaf",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.ôl y lleolnod, er enghraifft: dwy elfen HR drws nesaf i'w gilydd. Ailadroddwch y cyfuniad allwedd i gyrraedd blychau ffocws pell."},{name:"Cymorth Hygyrchedd",legend:"Pwyswch ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js000064400000005453152510440630017752 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","ar",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"عام",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/id.js000064400000005447152510440630017747 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","id",{title:"Accessibility Instructions",contents:"Bantuan. Tekan ESC untuk menutup dialog ini.",legend:[{name:"Umum",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/th.js000064400000006246152510440630017764 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","th",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"ทั่วไป",items:[{name:"แถบเครื่องมือสำหรับเครื่องมือช่วยพิมพ์",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"คำสั่ง",items:[{name:"เลิกทำคำสั่ง",legend:"วาง ${undo}"},{name:"คำสั่งสำหรับทำซ้ำ",legend:"วาง ${redo}"},{name:"คำสั่งสำหรับตัวหนา",legend:"วาง ${bold}"},{name:"คำสั่งสำหรับตัวเอียง",legend:"วาง ${italic}"},{name:"คำสั่งสำหรับขีดเส้นใต้", legend:"วาง ${underline}"},{name:"คำสั่งสำหรับลิงก์",legend:"วาง ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js000064400000005460152510440630020726 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","sr-latn",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Opšte",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/el.js000064400000013150152510440630017741 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","el",{title:"Οδηγίες Προσβασιμότητας",contents:"Περιεχόμενα Βοήθειας. Πατήστε ESC για κλείσιμο.",legend:[{name:"Γενικά",items:[{name:"Εργαλειοθήκη Επεξεργαστή",legend:"Πατήστε ${toolbarFocus} για να περιηγηθείτε στην γραμμή εργαλείων. Μετακινηθείτε ανάμεσα στις ομάδες της γραμμής εργαλείων με TAB και Shift-TAB. Μετακινηθείτε ανάμεσα στα κουμπία εργαλείων με ΔΕΞΙ και ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΚΕΝΟ ή ENTER για να ενεργοποιήσετε το ενεργό κουμπί εργαλείου."},{name:"Παράθυρο Διαλόγου Επεξεργαστή", legend:"Μέσα σε ένα παράθυρο διαλόγου, πατήστε TAB για να μεταβείτε στο επόμενο πεδίο ή SHIFT + TAB για να μεταβείτε στο προηγούμενο. Πατήστε ENTER για να υποβάλετε την φόρμα. Πατήστε ESC για να ακυρώσετε την διαδικασία της φόρμας. Για παράθυρα διαλόγων που έχουν πολλές σελίδες σε καρτέλες πατήστε ALT + F10 για να μεταβείτε στην λίστα των καρτέλων. Στην συνέχεια μπορείτε να μεταβείτε στην επόμενη καρτέλα πατώντας TAB ή RIGHT ARROW. Μπορείτε να μεταβείτε στην προηγούμενη καρτέλα πατώντας SHIFT + TAB ή LEFT ARROW. Πατήστε SPACE ή ENTER για να επιλέξετε την καρτέλα για προβολή."}, {name:"Αναδυόμενο Μενού Επεξεργαστή",legend:"Πατήστε ${contextMenu} ή APPLICATION KEY για να ανοίξετε το αναδυόμενο μενού. Μετά μετακινηθείτε στην επόμενη επιλογή του μενού με TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στην προηγούμενη επιλογή με SHIFT+TAB ή ΠΑΝΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε το τρέχων στοιχείο. Ανοίξτε το αναδυόμενο μενού της τρέχουσας επιλογής με ΔΙΑΣΤΗΜΑ ή ENTER ή ΔΕΞΙ ΒΕΛΑΚΙ. Μεταβείτε πίσω στο αρχικό στοιχείο μενού με ESC ή ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Κλείστε το αναδυόμενο μενού με ESC."}, {name:"Κουτί Λίστας Επεξεργαστών",legend:"Μέσα σε ένα κουτί λίστας, μετακινηθείτε στο επόμενο στοιχείο με TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στο προηγούμενο στοιχείο με SHIFT + TAB ή ΠΑΝΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε ένα στοιχείο. Πατήστε ESC για να κλείσετε το κουτί της λίστας."},{name:"Μπάρα Διαδρομών Στοιχείων Επεξεργαστή",legend:"Πατήστε ${elementsPathFocus} για να περιηγηθείτε στην μπάρα διαδρομών στοιχείων του επεξεργαστή. Μετακινηθείτε στο κουμπί του επόμενου στοιχείου με το TAB ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μετακινηθείτε στο κουμπί του προηγούμενου στοιχείου με το SHIFT+TAB ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε το στοιχείο στον επεξεργαστή."}]}, {name:"Εντολές",items:[{name:" Εντολή αναίρεσης",legend:"Πατήστε ${undo}"},{name:" Εντολή επανάληψης",legend:"Πατήστε ${redo}"},{name:" Εντολή έντονης γραφής",legend:"Πατήστε ${bold}"},{name:" Εντολή πλάγιας γραφής",legend:"Πατήστε ${italic}"},{name:" Εντολή υπογράμμισης",legend:"Πατήστε ${underline}"},{name:" Εντολή συνδέσμου",legend:"Πατήστε ${link}"},{name:" Εντολή Σύμπτηξης Εργαλειοθήκης",legend:"Πατήστε ${toolbarCollapse}"},{name:"Πρόσβαση προηγούμενης εντολής χώρου εστίασης ",legend:"Πατήστε ${accessPreviousSpace} για να έχετε πρόσβαση στον πιο κοντινό χώρο εστίασης πριν το δρομέα, για παράδειγμα: δύο παρακείμενα στοιχεία ΥΕ. Επαναλάβετε το συνδυασμό πλήκτρων για να φθάσετε στους χώρους μακρινής εστίασης. "}, {name:"Πρόσβαση επόμενηw εντολήw χώροz εστίασης",legend:"Πατήστε ${accessNextSpace} για να έχete πρόσβαση στον πιο κοντινό χώρο εστίασης μετά το δρομέα, για παράδειγμα: δύο παρακείμενα στοιχεία ΥΕ. Επαναλάβετε το συνδυασμό πλήκτρων για τους χώρους μακρινής εστίασης. "},{name:" Βοήθεια Προσβασιμότητας",legend:"Πατήστε ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/it.js000064400000006736152510440630017771 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","it",{title:"Istruzioni di Accessibilità",contents:"Contenuti di Aiuto. Per chiudere questa finestra premi ESC.",legend:[{name:"Generale",items:[{name:"Barra degli strumenti Editor",legend:"Premi ${toolbarFocus} per navigare fino alla barra degli strumenti. Muoviti tra i gruppi della barra degli strumenti con i tasti Tab e Maiusc-Tab. Spostati tra il successivo ed il precedente pulsante della barra degli strumenti usando le frecce direzionali Destra e Sinistra. Premi Spazio o Invio per attivare il pulsante della barra degli strumenti."}, {name:"Finestra Editor",legend:"All'interno di una finestra di dialogo, premi Tab per navigare fino al campo successivo della finestra di dialogo, premi Maiusc-Tab per tornare al campo precedente, premi Invio per inviare la finestra di dialogo, premi Esc per uscire. Per le finestre che hanno schede multiple, premi Alt+F10 per navigare nella lista delle schede. Quindi spostati alla scheda successiva con il tasto Tab oppure con la Freccia Destra. Torna alla scheda precedente con Maiusc+Tab oppure con la Freccia Sinistra. Premi Spazio o Invio per scegliere la scheda."}, {name:"Menù contestuale Editor",legend:"Premi ${contextMenu} o TASTO APPLICAZIONE per aprire il menu contestuale. Dunque muoviti all'opzione successiva del menu con il tasto TAB o con la Freccia Sotto. Muoviti all'opzione precedente con MAIUSC+TAB o con Freccia Sopra. Premi SPAZIO o INVIO per scegliere l'opzione di menu. Apri il sottomenu dell'opzione corrente con SPAZIO o INVIO oppure con la Freccia Destra. Torna indietro al menu superiore con ESC oppure Freccia Sinistra. Chiudi il menu contestuale con ESC."}, {name:"Box Lista Editor",legend:"Dentro un box-lista, muoviti al prossimo elemento della lista con TAB o con la Freccia direzionale giù. Spostati all'elemento precedente con MAIUSC+TAB oppure con Freccia direzionale sopra. Premi SPAZIO o INVIO per scegliere l'opzione della lista. Premi ESC per chiudere il box-lista."},{name:"Barra percorso elementi editor",legend:"Premi ${elementsPathFocus} per navigare tra gli elementi della barra percorso. Muoviti al prossimo pulsante di elemento con TAB o la Freccia direzionale destra. Muoviti al pulsante precedente con MAIUSC+TAB o la Freccia Direzionale Sinistra. Premi SPAZIO o INVIO per scegliere l'elemento nell'editor."}]}, {name:"Comandi",items:[{name:" Annulla comando",legend:"Premi ${undo}"},{name:" Ripeti comando",legend:"Premi ${redo}"},{name:" Comando Grassetto",legend:"Premi ${bold}"},{name:" Comando Corsivo",legend:"Premi ${italic}"},{name:" Comando Sottolineato",legend:"Premi ${underline}"},{name:" Comando Link",legend:"Premi ${link}"},{name:" Comando riduci barra degli strumenti",legend:"Premi ${toolbarCollapse}"},{name:"Comando di accesso al precedente spazio di focus",legend:"Premi ${accessPreviousSpace} per accedere il più vicino spazio di focus non raggiungibile prima del simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti."}, {name:"Comando di accesso al prossimo spazio di focus",legend:"Premi ${accessNextSpace} per accedere il più vicino spazio di focus non raggiungibile dopo il simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti."},{name:" Aiuto Accessibilità",legend:"Premi ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/es.js000064400000006554152510440630017762 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","es",{title:"Instrucciones de accesibilidad",contents:"Ayuda. Para cerrar presione ESC.",legend:[{name:"General",items:[{name:"Barra de herramientas del editor",legend:'Presiona ${toolbarFocus} para navegar por la barra de herramientas. Para moverse por los distintos grupos de herramientas usa las teclas TAB y MAY-TAB. Para moverse por las distintas herramientas usa FLECHA DERECHA o FECHA IZQUIERDA. Presiona "espacio" o "intro" para activar la herramienta.'},{name:"Editor de diálogo", legend:"Dentro de un cuadro de diálogo, presione la tecla TAB para desplazarse al campo siguiente del cuadro de diálogo, pulse SHIFT + TAB para desplazarse al campo anterior, pulse ENTER para presentar cuadro de diálogo, pulse la tecla ESC para cancelar el diálogo. Para los diálogos que tienen varias páginas, presione ALT + F10 para navegar a la pestaña de la lista. Luego pasar a la siguiente pestaña con TAB o FLECHA DERECHA. Para ir a la ficha anterior con SHIFT + TAB o FLECHA IZQUIERDA. Presione ESPACIO o ENTRAR para seleccionar la página de ficha."}, {name:"Editor del menú contextual",legend:"Presiona ${contextMenu} o TECLA MENÚ para abrir el menú contextual. Entonces muévete a la siguiente opción del menú con TAB o FLECHA ABAJO. Muévete a la opción previa con SHIFT + TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para seleccionar la opción del menú. Abre el submenú de la opción actual con ESPACIO o ENTER o FLECHA DERECHA. Regresa al elemento padre del menú con ESC o FLECHA IZQUIERDA. Cierra el menú contextual con ESC."},{name:"Lista del Editor", legend:"Dentro de una lista, te mueves al siguiente elemento de la lista con TAB o FLECHA ABAJO. Te mueves al elemento previo de la lista con SHIFT + TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para elegir la opción de la lista. Presiona ESC para cerrar la lista."},{name:"Barra de Ruta del Elemento en el Editor",legend:"Presiona ${elementsPathFocus} para navegar a los elementos de la barra de ruta. Te mueves al siguiente elemento botón con TAB o FLECHA DERECHA. Te mueves al botón previo con SHIFT + TAB o FLECHA IZQUIERDA. Presiona ESPACIO o ENTER para seleccionar el elemento en el editor."}]}, {name:"Comandos",items:[{name:"Comando deshacer",legend:"Presiona ${undo}"},{name:"Comando rehacer",legend:"Presiona ${redo}"},{name:"Comando negrita",legend:"Presiona ${bold}"},{name:"Comando itálica",legend:"Presiona ${italic}"},{name:"Comando subrayar",legend:"Presiona ${underline}"},{name:"Comando liga",legend:"Presiona ${liga}"},{name:"Comando colapsar barra de herramientas",legend:"Presiona ${toolbarCollapse}"},{name:"Comando accesar el anterior espacio de foco",legend:"Presiona ${accessPreviousSpace} para accesar el espacio de foco no disponible más cercano anterior al cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes."}, {name:"Comando accesar el siguiente spacio de foco",legend:"Presiona ${accessNextSpace} para accesar el espacio de foco no disponible más cercano después del cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes."},{name:"Ayuda de Accesibilidad",legend:"Presiona ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js000064400000006703152510440630017762 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","pl",{title:"Instrukcje dotyczące dostępności",contents:"Zawartość pomocy. Wciśnij ESC, aby zamknąć to okno.",legend:[{name:"Informacje ogólne",items:[{name:"Pasek narzędzi edytora",legend:"Wciśnij ${toolbarFocus} aby przejść do paska narzędzi. Przejdź do następnej i poprzedniej grupy narzędzi używając TAB oraz SHIFT-TAB. Przejdź do następnego i poprzedniego narzędzia używając STRZAŁKI W PRAWO lub STRZAŁKI W LEWO. Wciśnij SPACJĘ lub ENTER, aby aktywować zaznaczone narzędzie."}, {name:"Okno dialogowe edytora",legend:"Będąc w oknie dialogowym wciśnij TAB aby przejść do następnego pola dialogowego, wciśnij SHIFT + TAB aby przejść do poprzedniego pola, wciśnij ENTER aby wysłać dialog, wciśnij ESC aby anulować dialog. Dla okien dialogowych z wieloma zakładkami, wciśnij ALT + F10 aby przejść do listy zakładek. Gdy to zrobisz przejdź do następnej zakładki wciskając TAB lub STRZAŁKĘ W PRAWO. Przejdź do poprzedniej zakładki wciskając SHIFT + TAB lub STRZAŁKĘ W LEWO. Wciśnij SPACJĘ lub ENTER aby wybrać zakładkę."}, {name:"Menu kontekstowe edytora",legend:"Wciśnij ${contextMenu} lub PRZYCISK APLIKACJI aby otworzyć menu kontekstowe. Przejdź do następnej pozycji menu wciskając TAB lub STRZAŁKĘ W DÓŁ. Przejdź do poprzedniej pozycji menu wciskając SHIFT + TAB lub STRZAŁKĘ W GÓRĘ. Wciśnij SPACJĘ lub ENTER aby wygrać pozycję menu. Otwórz pod-menu obecnej pozycji wciskając SPACJĘ lub ENTER lub STRZAŁKĘ W PRAWO. Wróć do pozycji nadrzędnego menu wciskając ESC lub STRZAŁKĘ W LEWO. Zamknij menu wciskając ESC."},{name:"Lista w edytorze", legend:"W polu listy możesz przechodzić do następnego elementu za pomocą klawisza TAB lub STRZAŁKI W DÓŁ. Poprzedni element osiągniesz za pomocą SHIFT+TAB lub STRZAŁKI W GÓRĘ. Za pomocą SPACJI lub ENTERA wybierzesz daną opcję z listy, a za pomocą klawisza ESC opuścisz listę."},{name:"Pasek ścieżki elementów edytora",legend:"Naciśnij ${elementsPathFocus} w celu przejścia do paska ścieżki elementów edytora. W celu przejścia do kolejnego elementu naciśnij klawisz Tab lub Strzałki w prawo. W celu przejścia do poprzedniego elementu naciśnij klawisze Shift+Tab lub Strzałki w lewo. By wybrać element w edytorze, użyj klawisza Spacji lub Enter."}]}, {name:"Polecenia",items:[{name:"Polecenie Cofnij",legend:"Naciśnij ${undo}"},{name:"Polecenie Ponów",legend:"Naciśnij ${redo}"},{name:"Polecenie Pogrubienie",legend:"Naciśnij ${bold}"},{name:"Polecenie Kursywa",legend:"Naciśnij ${italic}"},{name:"Polecenie Podkreślenie",legend:"Naciśnij ${underline}"},{name:"Polecenie Wstaw/ edytuj odnośnik",legend:"Naciśnij ${link}"},{name:"Polecenie schowaj pasek narzędzi",legend:"Naciśnij ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Pomoc dotycząca dostępności",legend:"Naciśnij ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js000064400000010024152510440630017730 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","ja",{title:"ユーザー補助の説明",contents:"ヘルプ このダイアログを閉じるには ESCを押してください。",legend:[{name:"全般",items:[{name:"エディターツールバー",legend:"${toolbarFocus} を押すとツールバーのオン/オフ操作ができます。カーソルをツールバーのグループで移動させるにはTabかSHIFT+Tabを押します。グループ内でカーソルを移動させるには、右カーソルか左カーソルを押します。スペースキーやエンターを押すとボタンを有効/無効にすることができます。"},{name:"編集ダイアログ",legend:"ダイヤログ内では、ダイアログの次の選択肢に移動するにはTabを押します。前の選択肢に移動するには、SHIFT+Tabを押します。ダイアログを決定するには、ENTERを押します。ESCでダイアログをキャンセルできます。複数のタブがあるダイアログではタブリストを操作するにはALT+F10を押します。次のタブに移動するにはTabか右カーソル、前のタブに戻るにはSHIFT+Tabか左カーソルです。タブページを決定するにはスペースもしくは、ENTERキーを押してください。"}, {name:"エディターのメニュー",legend:"${contextMenu} キーかAPPLICATION KEYを押すとコンテキストメニューが開きます。Tabか下カーソルでメニューのオプション選択が下に移動します。戻るには、SHIFT+Tabか上カーソルです。スペースもしくはENTERキーでメニューオプションを決定できます。現在選んでいるオプションのサブメニューを開くには、スペース、もしくは右カーソルを押します。サブメニューから親メニューに戻るには、ESCか左カーソルを押してください。ESCでコンテキストメニュー自体をキャンセルできます。"},{name:"エディターリストボックス",legend:"リストボックス内で移動するには、Tabか下カーソルで次のアイテムへ移動します。SHIFT+Tabで前のアイテムに戻ります。リストのオプションを選択するには、スペースもしくは、ENTERを押してください。リストボックスを閉じるには、ESCを押してください。"},{name:"エディター要素パスバー",legend:"${elementsPathFocus} を押すとエレメントパスバーを操作出来ます。Tabか右カーソルで次のエレメントを選択できます。前のエレメントを選択するには、SHIFT+Tabか左カーソルです。スペースもしくは、ENTERでエディタ内の対象エレメントを選択出来ます。"}]}, {name:"コマンド",items:[{name:"元に戻す",legend:"${undo} をクリック"},{name:"やり直し",legend:"${redo} をクリック"},{name:"太字",legend:"${bold} をクリック"},{name:"斜体 ",legend:"${italic} をクリック"},{name:"下線",legend:"${underline} をクリック"},{name:"リンク",legend:"${link} をクリック"},{name:"ツールバーを縮める",legend:"${toolbarCollapse} をクリック"},{name:"前のカーソル移動のできないポイントへ",legend:"${accessPreviousSpace} を押すとカーソルより前にあるカーソルキーで入り込めないスペースへ移動できます。例えば、HRエレメントが2つ接している場合などです。離れた場所へは、複数回キーを押します。"},{name:"次のカーソル移動のできないポイントへ",legend:"${accessNextSpace} を押すとカーソルより後ろにあるカーソルキーで入り込めないスペースへ移動できます。例えば、HRエレメントが2つ接している場合などです。離れた場所へは、複数回キーを押します。"}, {name:"ユーザー補助ヘルプ",legend:"${a11yHelp} をクリック"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js000064400000007533152510440630020341 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","fr-ca",{title:"Instructions d'accessibilité",contents:"Contenu de l'aide. Pour fermer cette fenêtre, appuyez sur ESC.",legend:[{name:"Général",items:[{name:"Barre d'outil de l'éditeur",legend:"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers les groupes suivant ou précédent de la barre d'outil avec les touches TAB et SHIFT-TAB. Se déplacer vers les boutons suivant ou précédent de la barre d'outils avec les touches FLECHE DROITE et FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour activer le bouton de barre d'outils."}, {name:"Dialogue de l'éditeur",legend:"A l'intérieur d'un dialogue, appuyer sur la touche TAB pour naviguer jusqu'au champ de dalogue suivant, appuyez sur les touches SHIFT + TAB pour revenir au champ précédent, appuyez sur la touche ENTRER pour soumettre le dialogue, appuyer sur la touche ESC pour annuler le dialogue. Pour les dialogues avec plusieurs pages d'onglets, appuyer sur ALT + F10 pour naviguer jusqu'à la liste des onglets. Puis se déplacer vers l'onglet suivant avec la touche TAB ou FLECHE DROITE. Se déplacer vers l'onglet précédent avec les touches SHIFT + TAB ou FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour sélectionner la page de l'onglet."}, {name:"Menu contextuel de l'éditeur",legend:"Appuyer sur ${contextMenu} ou entrer le RACCOURCI CLAVIER pour ouvrir le menu contextuel. Puis se déplacer vers l'option suivante du menu avec les touches TAB ou FLECHE BAS. Se déplacer vers l'option précédente avec les touches SHIFT+TAB ou FLECHE HAUT. appuyer sur la BARRE D'ESPACE ou la touche ENTREE pour sélectionner l'option du menu. Oovrir le sous-menu de l'option courante avec la BARRE D'ESPACE ou les touches ENTREE ou FLECHE DROITE. Revenir à l'élément de menu parent avec les touches ESC ou FLECHE GAUCHE. Fermer le menu contextuel avec ESC."}, {name:"Menu déroulant de l'éditeur",legend:"A l'intérieur d'une liste en menu déroulant, se déplacer vers l'élément suivant de la liste avec les touches TAB ou FLECHE BAS. Se déplacer vers l'élément précédent de la liste avec les touches SHIFT + TAB ou FLECHE HAUT. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'option dans la liste. Appuyer sur ESC pour fermer le menu déroulant."},{name:"Barre d'emplacement des éléments de l'éditeur",legend:"Appuyer sur ${elementsPathFocus} pour naviguer vers la barre d'emplacement des éléments de léditeur. Se déplacer vers le bouton d'élément suivant avec les touches TAB ou FLECHE DROITE. Se déplacer vers le bouton d'élément précédent avec les touches SHIFT+TAB ou FLECHE GAUCHE. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'élément dans l'éditeur."}]}, {name:"Commandes",items:[{name:"Annuler",legend:"Appuyer sur ${undo}"},{name:"Refaire",legend:"Appuyer sur ${redo}"},{name:"Gras",legend:"Appuyer sur ${bold}"},{name:"Italique",legend:"Appuyer sur ${italic}"},{name:"Souligné",legend:"Appuyer sur ${underline}"},{name:"Lien",legend:"Appuyer sur ${link}"},{name:"Enrouler la barre d'outils",legend:"Appuyer sur ${toolbarCollapse}"},{name:"Accéder à l'objet de focus précédent",legend:"Appuyer ${accessPreviousSpace} pour accéder au prochain espace disponible avant le curseur, par exemple: deux éléments HR adjacents. Répéter la combinaison pour joindre les éléments d'espaces distantes."}, {name:"Accéder au prochain objet de focus",legend:"Appuyer ${accessNextSpace} pour accéder au prochain espace disponible après le curseur, par exemple: deux éléments HR adjacents. Répéter la combinaison pour joindre les éléments d'espaces distantes."},{name:"Aide d'accessibilité",legend:"Appuyer sur ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js000064400000005465152510440630017772 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","lt",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Bendros savybės",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js000064400000007026152510440630017763 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","sk",{title:"Inštrukcie prístupnosti",contents:"Pomocný obsah. Pre zatvorenie tohto okna, stlačte ESC.",legend:[{name:"Všeobecne",items:[{name:"Lišta nástrojov editora",legend:"Stlačte ${toolbarFocus} pre navigáciu na lištu nástrojov. Medzi ďalšou a predchádzajúcou lištou nástrojov sa pohybujete s TAB a SHIFT-TAB. Medzi ďalším a predchádzajúcim tlačidlom na lište nástrojov sa pohybujete s pravou šípkou a ľavou šípkou. Stlačte medzerník alebo ENTER pre aktiváciu tlačidla lišty nástrojov."}, {name:"Editorový dialóg",legend:"V dialogu, stlačte TAB pre navigáciu na ďalšie dialógové pole, stlačte STIFT + TAB pre presun na predchádzajúce pole, stlačte ENTER pre odoslanie dialógu, stlačte ESC pre zrušenie dialógu. Pre dialógy, ktoré majú viac záložiek, stlačte ALT + F10 pre navigácou do zoznamu záložiek. Potom sa posúvajte k ďalšej žáložke pomocou TAB alebo pravou šípkou. Pre presun k predchádzajúcej záložke, stlačte SHIFT + TAB alebo ľavú šípku. Stlačte medzerník alebo ENTER pre vybranie záložky."}, {name:"Editorové kontextové menu",legend:"Stlačte ${contextMenu} alebo APPLICATION KEY pre otvorenie kontextového menu. Potom sa presúvajte na ďalšie možnosti menu s TAB alebo dolnou šípkou. Presunte sa k predchádzajúcej možnosti s SHIFT + TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti menu. Otvorte pod-menu danej možnosti s medzerníkom, alebo ENTER, alebo pravou šípkou. Vráťte sa späť do položky rodičovského menu s ESC alebo ľavou šípkou. Zatvorte kontextové menu s ESC."}, {name:"Editorov box zoznamu",legend:"V boxe zoznamu, presuňte sa na ďalšiu položku v zozname s TAB alebo dolnou šípkou. Presuňte sa k predchádzajúcej položke v zozname so SHIFT + TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti zoznamu. Stlačte ESC pre zatvorenie boxu zoznamu."},{name:"Editorove pásmo cesty prvku",legend:"Stlačte ${elementsPathFocus} pre navigovanie na pásmo cesty elementu. Presuňte sa na tlačidlo ďalšieho prvku s TAB alebo pravou šípkou. Presuňte sa k predchádzajúcemu tlačidlu s SHIFT + TAB alebo ľavou šípkou. Stlačte medzerník alebo ENTER pre výber prvku v editore."}]}, {name:"Príkazy",items:[{name:"Vrátiť príkazy",legend:"Stlačte ${undo}"},{name:"Nanovo vrátiť príkaz",legend:"Stlačte ${redo}"},{name:"Príkaz na stučnenie",legend:"Stlačte ${bold}"},{name:"Príkaz na kurzívu",legend:"Stlačte ${italic}"},{name:"Príkaz na podčiarknutie",legend:"Stlačte ${underline}"},{name:"Príkaz na odkaz",legend:"Stlačte ${link}"},{name:"Príkaz na zbalenie lišty nástrojov",legend:"Stlačte ${toolbarCollapse}"},{name:"Prejsť na predchádzajúcu zamerateľnú medzeru príkazu",legend:"Stlačte ${accessPreviousSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery pred vsuvkuo. Napríklad: dve za sebou idúce horizontálne čiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier."}, {name:"Prejsť na ďalší ",legend:"Stlačte ${accessNextSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery po vsuvke. Napríklad: dve za sebou idúce horizontálne čiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier."},{name:"Pomoc prístupnosti",legend:"Stlačte ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js000064400000005457152510440630020000 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","sr",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Опште",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js000064400000005776152510440630017773 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","gu",{title:"એક્ક્ષેબિલિટી ની વિગતો",contents:"હેલ્પ. આ બંધ કરવા ESC દબાવો.",legend:[{name:"જનરલ",items:[{name:"એડિટર ટૂલબાર",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"એડિટર ડાયલોગ",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"કમાંડસ",items:[{name:"અન્ડું કમાંડ",legend:"$ દબાવો {undo}"},{name:"ફરી કરો કમાંડ",legend:"$ દબાવો {redo}"},{name:"બોલ્દનો કમાંડ",legend:"$ દબાવો {bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js000064400000006414152510440630017757 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","nl",{title:"Toegankelijkheidsinstructies",contents:"Help inhoud. Druk op ESC om dit dialoog te sluiten.",legend:[{name:"Algemeen",items:[{name:"Werkbalk tekstverwerker",legend:"Druk op ${toolbarFocus} om naar de werkbalk te navigeren. Om te schakelen naar de volgende en vorige werkbalkgroep, gebruik TAB en SHIFT+TAB. Om te schakelen naar de volgende en vorige werkbalkknop, gebruik de PIJL RECHTS en PIJL LINKS. Druk op SPATIE of ENTER om een werkbalkknop te activeren."}, {name:"Dialoog tekstverwerker",legend:"In een dialoogvenster, druk op TAB om te navigeren naar het volgende veld. Druk op SHIFT+TAB om naar het vorige veld te navigeren. Druk op ENTER om het dialoogvenster te verzenden. Druk op ESC om het dialoogvenster te sluiten. Voor dialoogvensters met meerdere tabbladen, druk op ALT+F10 om naar de tabset te navigeren. Schakel naar het volgende tabblad met TAB of PIJL RECHTS. Schakel naar het vorige tabblad met SHIFT+TAB of PIJL LINKS. Druk op SPATIE of ENTER om het tabblad te selecteren."}, {name:"Contextmenu tekstverwerker",legend:"Druk op ${contextMenu} of APPLICATION KEY om het contextmenu te openen. Schakel naar de volgende menuoptie met TAB of PIJL OMLAAG. Schakel naar de vorige menuoptie met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om een menuoptie te selecteren. Op een submenu van de huidige optie met SPATIE, ENTER of PIJL RECHTS. Ga terug naar de bovenliggende menuoptie met ESC of PIJL LINKS. Sluit het contextmenu met ESC."},{name:"Keuzelijst tekstverwerker",legend:"In een keuzelijst, schakel naar het volgende item met TAB of PIJL OMLAAG. Schakel naar het vorige item met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om het item te selecteren. Druk op ESC om de keuzelijst te sluiten."}, {name:"Elementenpad werkbalk tekstverwerker",legend:"Druk op ${elementsPathFocus} om naar het elementenpad te navigeren. Om te schakelen naar het volgende element, gebruik TAB of PIJL RECHTS. Om te schakelen naar het vorige element, gebruik SHIFT+TAB or PIJL LINKS. Druk op SPATIE of ENTER om een element te selecteren in de tekstverwerker."}]},{name:"Opdrachten",items:[{name:"Ongedaan maken opdracht",legend:"Druk op ${undo}"},{name:"Opnieuw uitvoeren opdracht",legend:"Druk op ${redo}"},{name:"Vetgedrukt opdracht", legend:"Druk up ${bold}"},{name:"Cursief opdracht",legend:"Druk op ${italic}"},{name:"Onderstrepen opdracht",legend:"Druk op ${underline}"},{name:"Link opdracht",legend:"Druk op ${link}"},{name:"Werkbalk inklappen opdracht",legend:"Druk op ${toolbarCollapse}"},{name:"Ga naar vorige focus spatie commando",legend:"Druk ${accessPreviousSpace} om toegang te verkrijgen tot de dichtsbijzijnde onbereikbare focus spatie voor de caret, bijvoorbeeld: twee aangrenzende HR elementen. Herhaal de toetscombinatie om de verste focus spatie te bereiken."}, {name:"Ga naar volgende focus spatie commando",legend:"Druk ${accessNextSpace} om toegang te verkrijgen tot de meest dichtbijzijnde onbereikbare focus spatie na de caret, bijvoorbeeld: twee aangrenzende HR elementen. Herhaal de toetscombinatie om de verste focus spatie te bereiken."},{name:"Toegankelijkheidshulp",legend:"Druk op ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js000064400000006461152510440630017775 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","tr",{title:"Erişilebilirlik Talimatları",contents:"Yardım içeriği. Bu pencereyi kapatmak için ESC tuşuna basın.",legend:[{name:"Genel",items:[{name:"Düzenleyici Araç Çubuğu",legend:"Araç çubuğunda gezinmek için ${toolbarFocus} basın. TAB ve SHIFT-TAB ile önceki ve sonraki araç çubuğu grubuna taşıyın. SAĞ OK veya SOL OK ile önceki ve sonraki bir araç çubuğu düğmesini hareket ettirin. SPACE tuşuna basın veya araç çubuğu düğmesini etkinleştirmek için ENTER tuşna basın."}, {name:"Diyalog Düzenleyici",legend:"Dialog penceresi içinde, sonraki iletişim alanına gitmek için SEKME tuşuna basın, önceki alana geçmek için SHIFT + TAB tuşuna basın, pencereyi göndermek için ENTER tuşuna basın, dialog penceresini iptal etmek için ESC tuşuna basın. Birden çok sekme sayfaları olan diyalogların, sekme listesine gitmek için ALT + F10 tuşlarına basın. Sonra TAB veya SAĞ OK sonraki sekmeye taşıyın. SHIFT + TAB veya SOL OK ile önceki sekmeye geçin. Sekme sayfayı seçmek için SPACE veya ENTER tuşuna basın."}, {name:"İçerik Menü Editörü",legend:"İçerik menüsünü açmak için ${contextMenu} veya UYGULAMA TUŞU'na basın. Daha sonra SEKME veya AŞAĞI OK ile bir sonraki menü seçeneği taşıyın. SHIFT + TAB veya YUKARI OK ile önceki seçeneğe gider. Menü seçeneğini seçmek için SPACE veya ENTER tuşuna basın. Seçili seçeneğin alt menüsünü SPACE ya da ENTER veya SAĞ OK açın. Üst menü öğesini geçmek için ESC veya SOL OK ile geri dönün. ESC ile bağlam menüsünü kapatın."},{name:"Liste Kutusu Editörü",legend:"Liste kutusu içinde, bir sonraki liste öğesine SEKME VEYA AŞAĞI OK ile taşıyın. SHIFT + TAB veya YUKARI önceki liste öğesi taşıyın. Liste seçeneği seçmek için SPACE veya ENTER tuşuna basın. Liste kutusunu kapatmak için ESC tuşuna basın."}, {name:"Element Yol Çubuğu Editörü",legend:"Elementlerin yol çubuğunda gezinmek için ${ElementsPathFocus} basın. SEKME veya SAĞ OK ile sonraki element düğmesine taşıyın. SHIFT + TAB veya SOL OK önceki düğmeye hareket ettirin. Editör içindeki elementi seçmek için ENTER veya SPACE tuşuna basın."}]},{name:"Komutlar",items:[{name:"Komutu geri al",legend:"$(undo)'ya basın"},{name:"Komutu geri al",legend:"${redo} basın"},{name:" Kalın komut",legend:"${bold} basın"},{name:" İtalik komutu",legend:"${italic} basın"}, {name:" Alttan çizgi komutu",legend:"${underline} basın"},{name:" Bağlantı komutu",legend:"${link} basın"},{name:" Araç çubuğu Toplama komutu",legend:"${toolbarCollapse} basın"},{name:"Önceki komut alanına odaklan",legend:"Düzeltme imleçinden önce, en yakın uzaktaki alana erişmek için ${accessPreviousSpace} basın, örneğin: iki birleşik HR elementleri. Aynı tuş kombinasyonu tekrarıyla diğer alanlarada ulaşın."},{name:"Sonraki komut alanına odaklan",legend:"Düzeltme imleçinden sonra, en yakın uzaktaki alana erişmek için ${accessNextSpace} basın, örneğin: iki birleşik HR elementleri. Aynı tuş kombinasyonu tekrarıyla diğer alanlarada ulaşın."}, {name:"Erişilebilirlik Yardımı",legend:"${a11yHelp}'e basın"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js000064400000006732152510440630017754 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","eo",{title:"Uzindikoj pri atingeblo",contents:"Helpilenhavo. Por fermi tiun dialogon, premu la ESKAPAN klavon.",legend:[{name:"Ĝeneralaĵoj",items:[{name:"Ilbreto de la redaktilo",legend:"Premu ${toolbarFocus} por atingi la ilbreton. Moviĝu al la sekva aŭ antaŭa grupoj de la ilbreto per la klavoj TABA kaj MAJUSKLIGA-TABA. Moviĝu al la sekva aŭ antaŭa butonoj de la ilbreto per la klavoj SAGO DEKSTREN kaj SAGO MALDEKSTREN. Premu la SPACETklavon aŭ la ENENklavon por aktivigi la ilbretbutonon."}, {name:"Redaktildialogo",legend:"En dialogo, premu la TABAN klavon por navigi al la sekva dialogkampo, premu la MAJUSKLIGAN + TABAN klavojn por reveni al la antaŭa kampo, premu la ENENklavon por sendi la dialogon, premu la ESKAPAN klavon por nuligi la dialogon. Por dialogoj kun pluraj retpaĝoj sub langetoj, premu ALT + F10 por navigi al la langetlisto. Poste moviĝu al la sekva langeto per la klavo TABA aŭ SAGO DEKSTREN. Moviĝu al la antaŭa langeto per la klavoj MAJUSKLIGA + TABA aŭ SAGO MALDEKSTREN. Premu la SPACETklavon aŭ la ENENklavon por selekti la langetretpaĝon."}, {name:"Kunteksta menuo de la redaktilo",legend:"Premu ${contextMenu} aŭ entajpu la KLAVKOMBINAĴON por malfermi la kuntekstan menuon. Poste moviĝu al la sekva opcio de la menuo per la klavoj TABA aŭ SAGO SUBEN. Moviĝu al la antaŭa opcio per la klavoj MAJUSKLGA + TABA aŭ SAGO SUPREN. Premu la SPACETklavon aŭ ENENklavon por selekti la menuopcion. Malfermu la submenuon de la kuranta opcio per la SPACETklavo aŭ la ENENklavo aŭ la SAGO DEKSTREN. Revenu al la elemento de la patra menuo per la klavoj ESKAPA aŭ SAGO MALDEKSTREN. Fermu la kuntekstan menuon per la ESKAPA klavo."}, {name:"Fallisto de la redaktilo",legend:"En fallisto, moviĝu al la sekva listelemento per la klavoj TABA aŭ SAGO SUBEN. Moviĝu al la antaŭa listelemento per la klavoj MAJUSKLIGA + TABA aŭ SAGO SUPREN. Premu la SPACETklavon aŭ ENENklavon por selekti la opcion en la listo. Premu la ESKAPAN klavon por fermi la falmenuon."},{name:"Breto indikanta la vojon al la redaktilelementoj",legend:"Premu ${elementsPathFocus} por navigi al la breto indikanta la vojon al la redaktilelementoj. Moviĝu al la butono de la sekva elemento per la klavoj TABA aŭ SAGO DEKSTREN. Moviĝu al la butono de la antaŭa elemento per la klavoj MAJUSKLIGA + TABA aŭ SAGO MALDEKSTREN. Premu la SPACETklavon aŭ ENENklavon por selekti la elementon en la redaktilo."}]}, {name:"Komandoj",items:[{name:"Komando malfari",legend:"Premu ${undo}"},{name:"Komando refari",legend:"Premu ${redo}"},{name:"Komando grasa",legend:"Premu ${bold}"},{name:"Komando kursiva",legend:"Premu ${italic}"},{name:"Komando substreki",legend:"Premu ${underline}"},{name:"Komando ligilo",legend:"Premu ${link}"},{name:"Komando faldi la ilbreton",legend:"Premu ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Helpilo pri atingeblo",legend:"Premu ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js000064400000006647152510440630020001 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","pt",{title:"Instruções de Acessibilidade",contents:"Conteúdos da Ajuda. Pressione em 'ESC' para fechar esta janela.",legend:[{name:"Geral",items:[{name:"Barra de Ferramentas do Editor",legend:"Clique em ${toolbarFocus} para navegar para a barra de ferramentas. Vá para o grupo da barra de ferramentas anterior e seguinte com TAB e SHIFT+TAB. Vá para o botão da barra de ferramentas anterior com a SETA DIREITA ou ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas."}, {name:"Janela do Editor",legend:"Dentro de uma janela, pressione TAB para navigar para o campo da janela seguinte, pressione SHIFT + TAB para mover para o campo anterior, pressione ENTER para submeter a janela, pressione ESC para cancelar a janela. Para as janelas que têm múltiplos páginas com separadores, pressione ALT + F10 para navegar para a lista do separador. Depois mova para o seguinte separador com TAB ou SETA DIREITA. Mover para o separador anterior com SHIFT + TAB ou SETA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o separador da página."}, {name:"Menu de Contexto do Editor",legend:"Clique em ${contextMenu} ou TECLA APLICAÇÃO para abrir o menu de contexto. Depois vá para a opção do menu seguinte com TAB ou SETA PARA BAIXO. Vá para a opção anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu. Abra o submenu da opção atual com ESPAÇO, ENTER ou SETA DIREITA. GVá para o item do menu parente com ESC ou SETA ESQUERDA. Feche o menu de contexto com ESC."},{name:"Caixa Lista Editor",legend:"Dentro da caixa da lista, vá para o itemda lista seguinte com TAB ou SETA PARA BAIXO. Move Vá parao item da lista anterior com SHIFT+TAB ou SETA PARA BAIXO. Pressione ESPAÇO ou ENTER para selecionar a opção da lista. Pressione ESC para fechar a caisa da lista."}, {name:"Caminho Barra Elemento Editor",legend:"Clique em ${elementsPathFocus} para navegar para a barra do caminho dos elementos. Vá para o botão do elemento seguinte com TAB ou SETA DIREITA. Vá para o botão anterior com SHIFT+TAB ou SETA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o elemento no editor."}]},{name:"Comandos",items:[{name:"Comando de Anular",legend:"Pressione ${undo}"},{name:"Comando de Refazer",legend:"Pressione ${redo}"},{name:"Comando de Negrito",legend:"Pressione ${bold}"}, {name:"Comando de Itálico",legend:"Pressione ${italic}"},{name:"Comando de Sublinhado",legend:"Pressione ${underline}"},{name:"Comando de Hiperligação",legend:"Pressione ${link}"},{name:"Comando de Ocultar Barra de Ferramentas",legend:"Pressione ${toolbarCollapse}"},{name:"Acesso comando do espaço focus anterior",legend:"Clique em ${accessPreviousSpace} para aceder ao espaço do focos inalcançável mais perto antes do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes."}, {name:"Acesso comando do espaço focus seguinte",legend:"Pressione ${accessNextSpace} para aceder ao espaço do focos inalcançável mais perto depois do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes."},{name:"Ajuda de Acessibilidade",legend:"Pressione ${a11yHelp}"}]}]});assets/plugins/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js000064400000005443152510440630020052 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.dialog.add("a11yHelp",function(j){var l=j.lang.a11yhelp,m=CKEDITOR.tools.getNextId(),d={8:"BACKSPACE",9:"TAB",13:"ENTER",16:"SHIFT",17:"CTRL",18:"ALT",19:"PAUSE",20:"CAPSLOCK",27:"ESCAPE",33:"PAGE UP",34:"PAGE DOWN",35:"END",36:"HOME",37:"LEFT ARROW",38:"UP ARROW",39:"RIGHT ARROW",40:"DOWN ARROW",45:"INSERT",46:"DELETE",91:"LEFT WINDOW KEY",92:"RIGHT WINDOW KEY",93:"SELECT KEY",96:"NUMPAD 0",97:"NUMPAD 1",98:"NUMPAD 2",99:"NUMPAD 3",100:"NUMPAD 4",101:"NUMPAD 5",102:"NUMPAD 6",103:"NUMPAD 7", 104:"NUMPAD 8",105:"NUMPAD 9",106:"MULTIPLY",107:"ADD",109:"SUBTRACT",110:"DECIMAL POINT",111:"DIVIDE",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NUM LOCK",145:"SCROLL LOCK",186:"SEMI-COLON",187:"EQUAL SIGN",188:"COMMA",189:"DASH",190:"PERIOD",191:"FORWARD SLASH",192:"GRAVE ACCENT",219:"OPEN BRACKET",220:"BACK SLASH",221:"CLOSE BRAKET",222:"SINGLE QUOTE"};d[CKEDITOR.ALT]="ALT";d[CKEDITOR.SHIFT]="SHIFT";d[CKEDITOR.CTRL]="CTRL"; var e=[CKEDITOR.ALT,CKEDITOR.SHIFT,CKEDITOR.CTRL],n=/\$\{(.*?)\}/g,q=function(){var o=j.keystrokeHandler.keystrokes,f={},b;for(b in o)f[o[b]]=b;return function(b,g){var a;if(f[g]){a=f[g];for(var h,i,k=[],c=0;c=h&&(a-=i,k.push(d[i]));k.push(d[a]||String.fromCharCode(a));a=k.join("+")}else a=b;return a}}();return{title:l.title,minWidth:600,minHeight:400,contents:[{id:"info",label:j.lang.common.generalTab,expand:!0,elements:[{type:"html",id:"legends",style:"white-space:normal;", focus:function(){this.getElement().focus()},html:function(){for(var d='
      %1
      '+l.contents+" ",f=[],b=l.legend,j=b.length,g=0;g%1
      %2
      ".replace("%1",e.name).replace("%2",p))}f.push("

      %1

      %2
      ".replace("%1", a.name).replace("%2",h.join("")))}return d.replace("%1",f.join(""))}()+''}]}], buttons:[CKEDITOR.dialog.cancelButton]}});assets/plugins/ckeditor/plugins/link/images/anchor.png000064400000001373152510440630017202 0ustar00PNG  IHDRabKGD pHYs B(xIDAT8ujSAgnڊMc))(Zԝ>@O+.]tSX*Rk)4HT"1DIf>w60s7s>˲ s_XvkQ=`H MS$VMIoZ$Hz*FIF= 2$ $:hjwwv“[sJf,S''ܪT8t$kf uG!KJqM{gfw2>XB$SS|=:b4Wp%P0c`F9lb 'r~ XHHpf8b9paG7WDŽcf$Α޶ZfCJͣv*@۽-QFe3*j4F3N^C#A-fDRIcI/%VW%LsI4y' Č'8904POӟc+B(rҸ!,] FtOWfW 2C@Xʿ%tEXtdate:create2013-07-04T17:03:03+02:00Mx%tEXtdate:modify2013-07-04T17:03:03+02:00<tEXtSoftwarewww.inkscape.org<IENDB`assets/plugins/ckeditor/plugins/link/images/hidpi/anchor.png000064400000003075152510440630020300 0ustar00PNG  IHDR szzbKGD pHYs B(xVIDATXõ[UUk}I،M)l`8ABAJB/Addo011/>H%Ơtat@sNst}YaˌswY[ܡCE B%D(0 ú(eX,㠴F)JUD"25^[>ADa@ytܩg1 ;Cg2SBRxQ32qP_|O3@Б# 1='ݧl8؎@X.LNUC 9sp?Ȑ眈D1߷C`9b?v~@D6HӉ.Ntu!"ynp~p?bm3qxԭ8y3C}}%KE<ИHm("4вhime…JQ}(BpaҵD*Bbҍd&1"##Ja쵙3,ʲfOw/w57tr(" OLN\4й)˺MVij™;+SF[`.C( Ed8Ӷ֩͜KϬPTmo<)q#3Ԣ> kN94 <)umyRmQH6{ Of`{ؿ?(/?X@.%tEXtdate:create2013-06-20T10:33:39+02:00T%ߔ%tEXtdate:modify2013-06-20T10:33:39+02:00%xg(tEXtSoftwarewww.inkscape.org<IENDB`assets/plugins/ckeditor/plugins/link/dialogs/link.js000064400000040262152510440630016672 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.dialog.add("link",function(n){var p,q;function r(a){return a.replace(/'/g,"\\$&")}function t(a){var g,c=p,d,e;g=[q,"("];for(var b=0;b0?this.getElement().show():this.getElement().hide()},children:[{type:"hbox",id:"selectAnchor",children:[{type:"select",id:"anchorName","default":"",label:b.anchorName,style:"width: 100%;",items:[[""]],setup:function(a){this.clear();this.add("");for(var b=0;b0?this.getElement().show():this.getElement().hide()}}]},{type:"html",id:"noAnchors",style:"text-align: center;",html:'
      '+CKEDITOR.tools.htmlEncode(b.noAnchors)+"
      ",focus:!0,setup:function(a){a.anchors.length<1?this.getElement().show():this.getElement().hide()}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().hide()}},{type:"vbox",id:"emailOptions",padding:1,children:[{type:"text", id:"emailAddress",label:b.emailAddress,required:!0,validate:function(){var a=this.getDialog();return!a.getContentElement("info","linkType")||a.getValueOf("info","linkType")!="email"?true:CKEDITOR.dialog.validate.notEmpty(b.noEmail).apply(this)},setup:function(a){a.email&&this.setValue(a.email.address);(a=this.getDialog().getContentElement("info","linkType"))&&a.getValue()=="email"&&this.select()},commit:function(a){if(!a.email)a.email={};a.email.address=this.getValue()}},{type:"text",id:"emailSubject", label:b.emailSubject,setup:function(a){a.email&&this.setValue(a.email.subject)},commit:function(a){if(!a.email)a.email={};a.email.subject=this.getValue()}},{type:"textarea",id:"emailBody",label:b.emailBody,rows:3,"default":"",setup:function(a){a.email&&this.setValue(a.email.body)},commit:function(a){if(!a.email)a.email={};a.email.body=this.getValue()}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().hide()}}]},{id:"target",requiredContent:"a[target]",label:b.target, title:b.target,elements:[{type:"hbox",widths:["50%","50%"],children:[{type:"select",id:"linkTargetType",label:i.target,"default":"notSet",style:"width : 100%;",items:[[i.notSet,"notSet"],[b.targetFrame,"frame"],[b.targetPopup,"popup"],[i.targetNew,"_blank"],[i.targetTop,"_top"],[i.targetSelf,"_self"],[i.targetParent,"_parent"]],onChange:s,setup:function(a){a.target&&this.setValue(a.target.type||"notSet");s.call(this)},commit:function(a){if(!a.target)a.target={};a.target.type=this.getValue()}},{type:"text", id:"linkTargetName",label:b.targetFrameName,"default":"",setup:function(a){a.target&&this.setValue(a.target.name)},commit:function(a){if(!a.target)a.target={};a.target.name=this.getValue().replace(/\W/gi,"")}}]},{type:"vbox",width:"100%",align:"center",padding:2,id:"popupFeatures",children:[{type:"fieldset",label:b.popupFeatures,children:[{type:"hbox",children:[{type:"checkbox",id:"resizable",label:b.popupResizable,setup:j,commit:l},{type:"checkbox",id:"status",label:b.popupStatusBar,setup:j,commit:l}]}, {type:"hbox",children:[{type:"checkbox",id:"location",label:b.popupLocationBar,setup:j,commit:l},{type:"checkbox",id:"toolbar",label:b.popupToolbar,setup:j,commit:l}]},{type:"hbox",children:[{type:"checkbox",id:"menubar",label:b.popupMenuBar,setup:j,commit:l},{type:"checkbox",id:"fullscreen",label:b.popupFullScreen,setup:j,commit:l}]},{type:"hbox",children:[{type:"checkbox",id:"scrollbars",label:b.popupScrollBars,setup:j,commit:l},{type:"checkbox",id:"dependent",label:b.popupDependent,setup:j,commit:l}]}, {type:"hbox",children:[{type:"text",widths:["50%","50%"],labelLayout:"horizontal",label:i.width,id:"width",setup:j,commit:l},{type:"text",labelLayout:"horizontal",widths:["50%","50%"],label:b.popupLeft,id:"left",setup:j,commit:l}]},{type:"hbox",children:[{type:"text",labelLayout:"horizontal",widths:["50%","50%"],label:i.height,id:"height",setup:j,commit:l},{type:"text",labelLayout:"horizontal",label:b.popupTop,widths:["50%","50%"],id:"top",setup:j,commit:l}]}]}]}]},{id:"upload",label:b.upload,title:b.upload, hidden:!0,filebrowser:"uploadButton",elements:[{type:"file",id:"upload",label:i.upload,style:"height:40px",size:29},{type:"fileButton",id:"uploadButton",label:i.uploadSubmit,filebrowser:"info:url","for":["upload","upload"]}]},{id:"advanced",label:b.advanced,title:b.advanced,elements:[{type:"vbox",padding:1,children:[{type:"hbox",widths:["45%","35%","20%"],children:[{type:"text",id:"advId",requiredContent:"a[id]",label:b.id,setup:k,commit:m},{type:"select",id:"advLangDir",requiredContent:"a[dir]", label:b.langDir,"default":"",style:"width:110px",items:[[i.notSet,""],[b.langDirLTR,"ltr"],[b.langDirRTL,"rtl"]],setup:k,commit:m},{type:"text",id:"advAccessKey",requiredContent:"a[accesskey]",width:"80px",label:b.acccessKey,maxLength:1,setup:k,commit:m}]},{type:"hbox",widths:["45%","35%","20%"],children:[{type:"text",label:b.name,id:"advName",requiredContent:"a[name]",setup:k,commit:m},{type:"text",label:b.langCode,id:"advLangCode",requiredContent:"a[lang]",width:"110px","default":"",setup:k,commit:m}, {type:"text",label:b.tabIndex,id:"advTabIndex",requiredContent:"a[tabindex]",width:"80px",maxLength:5,setup:k,commit:m}]}]},{type:"vbox",padding:1,children:[{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.advisoryTitle,requiredContent:"a[title]","default":"",id:"advTitle",setup:k,commit:m},{type:"text",label:b.advisoryContentType,requiredContent:"a[type]","default":"",id:"advContentType",setup:k,commit:m}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.cssClasses, requiredContent:"a(cke-xyz)","default":"",id:"advCSSClasses",setup:k,commit:m},{type:"text",label:b.charset,requiredContent:"a[charset]","default":"",id:"advCharset",setup:k,commit:m}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.rel,requiredContent:"a[rel]","default":"",id:"advRel",setup:k,commit:m},{type:"text",label:b.styles,requiredContent:"a{cke-xyz}","default":"",id:"advStyles",validate:CKEDITOR.dialog.validate.inlineStyle(n.lang.common.invalidInlineStyle),setup:k,commit:m}]}]}]}], onShow:function(){var a=this.getParentEditor(),b=a.getSelection(),c=null;(c=w.getSelectedLink(a))&&c.hasAttribute("href")?b.selectElement(c):c=null;this.setupContent(I.apply(this,[a,c]))},onOk:function(){var a={},b=[],c={},d=this.getParentEditor();this.commitContent(c);switch(c.type||"url"){case "url":var e=c.url&&c.url.protocol!=void 0?c.url.protocol:"http://",i=c.url&&CKEDITOR.tools.trim(c.url.url)||"";a["data-cke-saved-href"]=i.indexOf("/")===0?i:e+i;break;case "anchor":e=c.anchor&&c.anchor.id; a["data-cke-saved-href"]="#"+(c.anchor&&c.anchor.name||e||"");break;case "email":var f=c.email,e=f.address;switch(o){case "":case "encode":var i=encodeURIComponent(f.subject||""),h=encodeURIComponent(f.body||""),f=[];i&&f.push("subject="+i);h&&f.push("body="+h);f=f.length?"?"+f.join("&"):"";if(o=="encode"){e=["javascript:void(location.href='mailto:'+",u(e)];f&&e.push("+'",r(f),"'");e.push(")")}else e=["mailto:",e,f];break;default:e=e.split("@",2);f.name=e[0];f.domain=e[1];e=["javascript:",t(f)]}a["data-cke-saved-href"]= e.join("")}if(c.target)if(c.target.type=="popup"){for(var e=["window.open(this.href, '",c.target.name||"","', '"],j=["resizable","status","location","toolbar","menubar","fullscreen","scrollbars","dependent"],i=j.length,f=function(a){c.target[a]&&j.push(a+"="+c.target[a])},h=0;hCKEDITOR.env.version&&(a["class"]="cke_anchor"),a=new CKEDITOR.style({element:"a", attributes:a}),a.type=CKEDITOR.STYLE_INLINE,c.applyStyle(a))}},onHide:function(){delete this._.selectedElement},onShow:function(){var a=c.getSelection(),b=a.getSelectedElement();if(b)CKEDITOR.plugins.link.fakeAnchor?((a=CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,b))&&d.call(this,a),this._.selectedElement=b):b.is("a")&&b.hasAttribute("name")&&d.call(this,b);else if(b=CKEDITOR.plugins.link.getSelectedLink(c))d.call(this,b),a.selectElement(b);this.getContentElement("info","txtName").focus()},contents:[{id:"info", label:c.lang.link.anchor.title,accessKey:"I",elements:[{type:"text",id:"txtName",label:c.lang.link.anchor.name,required:!0,validate:function(){return!this.getValue()?(alert(c.lang.link.anchor.errorName),!1):!0}}]}]}});assets/plugins/ckeditor/lang/sq.js000064400000031530152510440630013237 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.lang['sq']={"editor":"Redaktues i Pasur Teksti","common":{"editorHelp":"Shtyp ALT 0 për ndihmë","browseServer":"Shfleto në Server","url":"URL","protocol":"Protokolli","upload":"Ngarko","uploadSubmit":"Dërgo në server","image":"Imazh","flash":"Objekt flash","form":"Formular","checkbox":"Checkbox","radio":"Buton radio","textField":"Fushë tekst","textarea":"Hapësirë tekst","hiddenField":"Fushë e fshehur","button":"Buton","select":"Menu zgjedhjeje","imageButton":"Buton imazhi","notSet":"","id":"Id","name":"Emër","langDir":"Kod gjuhe","langDirLtr":"Nga e majta në të djathtë (LTR)","langDirRtl":"Nga e djathta në të majtë (RTL)","langCode":"Kod gjuhe","longDescr":"Përshkrim i hollësishëm","cssClass":"Klasa stili CSS","advisoryTitle":"Titull","cssStyle":"Stil","ok":"OK","cancel":"Anulo","close":"Mbyll","preview":"Parashiko","resize":"Ripërmaso","generalTab":"Të përgjithshme","advancedTab":"Të përparuara","validateNumberFailed":"Vlera e futur nuk është një numër","confirmNewPage":"Çdo ndryshim që nuk është ruajtur do humbasë. Je i sigurtë që dëshiron të krijosh një faqe të re?","confirmCancel":"Disa opsione kanë ndryshuar. Je i sigurtë që dëshiron ta mbyllësh dritaren?","options":"Opsione","target":"Objektivi","targetNew":"Dritare e re (_blank)","targetTop":"Dritare në plan të parë (_top)","targetSelf":"E njëjta dritare (_self)","targetParent":"Dritarja prind (_parent)","langDirLTR":"Nga e majta në të djathë (LTR)","langDirRTL":"Nga e djathta në të majtë (RTL)","styles":"Stil","cssClasses":"Klasa Stili CSS","width":"Gjerësi","height":"Lartësi","align":"Rreshtim","alignLeft":"Majtas","alignRight":"Djathtas","alignCenter":"Qendër","alignTop":"Lart","alignMiddle":"Në mes","alignBottom":"Poshtë","invalidValue":"Vlerë e pavlefshme","invalidHeight":"Lartësia duhet të jetë një numër","invalidWidth":"Gjerësia duhet të jetë një numër","invalidCssLength":"Vlera e fushës \"%1\" duhet të jetë një numër pozitiv me apo pa njësi matëse të vlefshme CSS (px, %, in, cm, mm, em, ex, pt ose pc).","invalidHtmlLength":"Vlera e fushës \"%1\" duhet të jetë një numër pozitiv me apo pa njësi matëse të vlefshme HTML (px ose %)","invalidInlineStyle":"Stili inline duhet të jetë një apo disa vlera të formatit \"emër: vlerë\", ndarë nga pikëpresje.","cssLengthTooltip":"Fut një numër për vlerën në pixel apo një numër me një njësi të vlefshme CSS (px, %, in, cm, mm, ex, pt, ose pc).","unavailable":"%1, i padisponueshëm"},"about":{"copy":"Të drejtat e kopjimit © $1. Të gjitha të drejtat e rezervuara.","dlgTitle":"Rreth CKEditor","help":"Kontrollo $1 për ndihmë.","moreInfo":"Për informacione rreth licencave shih faqen tonë:","title":"Rreth CKEditor","userGuide":"Udhëzuesi i Shfrytëzuesit të CKEditor"},"basicstyles":{"bold":"Trash","italic":"Pjerrët","strike":"Nëpërmes","subscript":"Nën-skriptë","superscript":"Super-skriptë","underline":"Nënvijëzuar"},"blockquote":{"toolbar":"Citatet"},"clipboard":{"copy":"Kopjo","copyError":"Të dhënat e sigurisë së shfletuesit tuaj nuk lejojnë që redaktuesi automatikisht të kryej veprimin e kopjimit. Ju lutemi shfrytëzoni tastierën për këtë veprim (Ctrl/Cmd+C).","cut":"Preje","cutError":"Të dhënat e sigurisë së shfletuesit tuaj nuk lejojnë që redaktuesi automatikisht të kryej veprimin e prerjes. Ju lutemi shfrytëzoni tastierën për këtë veprim (Ctrl/Cmd+X).","paste":"Hidhe","pasteArea":"Hapësira Hedhëse","pasteMsg":"Ju lutemi hidhni brenda kutizës në vijim duke shfrytëzuar tastierën (Ctrl/Cmd+V) dhe shtypni Mirë.","securityMsg":"Për shkak të dhënave të sigurisë së shfletuesit tuaj, redaktuesi nuk është në gjendje të i qaset drejtpërdrejtë të dhanve të tabelës suaj të punës. Ju duhet të hidhni atë përsëri në këtë dritare.","title":"Hidhe"},"contextmenu":{"options":"Mundësitë e Menysë së Kontekstit"},"toolbar":{"toolbarCollapse":"Zvogëlo Shiritin","toolbarExpand":"Zgjero Shiritin","toolbarGroups":{"document":"Dokument","clipboard":"Tabela Punës/Ribëje","editing":"Duke Redaktuar","forms":"Formular","basicstyles":"Stili Bazë","paragraph":"Paragraf","links":"Nyjet","insert":"Shto","styles":"Stil","colors":"Ngjyrat","tools":"Mjetet"},"toolbars":"Shiritet e Redaktuesit"},"elementspath":{"eleLabel":"Rruga e elementeve","eleTitle":"%1 element"},"format":{"label":"Formati","panelTitle":"Formati i Paragrafit","tag_address":"Adresa","tag_div":"Normal (DIV)","tag_h1":"Titulli 1","tag_h2":"Titulli 2","tag_h3":"Titulli 3","tag_h4":"Titulli 4","tag_h5":"Titulli 5","tag_h6":"Titulli 6","tag_p":"Normal","tag_pre":"Formatuar"},"horizontalrule":{"toolbar":"Vendos Vijë Horizontale"},"image":{"alertUrl":"Ju lutemi shkruani URL-në e fotos","alt":"Tekst Alternativ","border":"Korniza","btnUpload":"Dërgo në server","button2Img":"Dëshironi të e ndërroni pullën e fotos së selektuar në një foto të thjeshtë?","hSpace":"HSpace","img2Button":"Dëshironi të ndryshoni foton e përzgjedhur në pullë?","infoTab":"Informacione mbi Fotografinë","linkTab":"Nyja","lockRatio":"Mbyll Racionin","menu":"Karakteristikat e Fotografisë","resetSize":"Rikthe Madhësinë","title":"Karakteristikat e Fotografisë","titleButton":"Karakteristikat e Pullës së Fotografisë","upload":"Ngarko","urlMissing":"Mungon URL e burimit të fotografisë.","vSpace":"Hapësira Vertikale","validateBorder":"Korniza duhet të jetë numër i plotë.","validateHSpace":"Hapësira horizontale duhet të jetë numër i plotë.","validateVSpace":"Hapësira vertikale duhet të jetë numër i plotë."},"indent":{"indent":"Rrite Identin","outdent":"Zvogëlo Identin"},"fakeobjects":{"anchor":"Spirancë","flash":"Objekt flash","hiddenfield":"Fushë e fshehur","iframe":"IFrame","unknown":"Objekt i Panjohur"},"link":{"acccessKey":"Sipas ID-së së Elementit","advanced":"Të përparuara","advisoryContentType":"Lloji i Përmbajtjes Këshillimore","advisoryTitle":"Titull","anchor":{"toolbar":"Spirancë","menu":"Redakto Spirancën","title":"Anchor Properties","name":"Emri i Spirancës","errorName":"Ju lutemi shkruani emrin e spirancës","remove":"Largo Spirancën"},"anchorId":"Sipas ID-së së Elementit","anchorName":"Sipas Emrit të Spirancës","charset":"Seti i Karaktereve të Burimeve të Nëdlidhura","cssClasses":"Klasa stili CSS","emailAddress":"Posta Elektronike","emailBody":"Trupi i Porosisë","emailSubject":"Titulli i Porosisë","id":"Id","info":"Informacione të Nyjes","langCode":"Kod gjuhe","langDir":"Drejtim teksti","langDirLTR":"Nga e majta në të djathë (LTR)","langDirRTL":"Nga e djathta në të majtë (RTL)","menu":"Redakto Nyjen","name":"Emër","noAnchors":"(Nuk ka asnjë spirancë në dokument)","noEmail":"Ju lutemi shkruani postën elektronike","noUrl":"Ju lutemi shkruani URL-në e nyjes","other":"","popupDependent":"E Varur (Netscape)","popupFeatures":"Karakteristikat e Dritares së Dialogut","popupFullScreen":"Ekran i Plotë (IE)","popupLeft":"Pozita Majtas","popupLocationBar":"Shiriti i Lokacionit","popupMenuBar":"Shiriti i Menysë","popupResizable":"I ndryshueshëm","popupScrollBars":"Scroll Bars","popupStatusBar":"Shiriti i Statutit","popupToolbar":"Shiriti i Mejteve","popupTop":"Top Pozita","rel":"Marrëdhëniet","selectAnchor":"Përzgjidh një Spirancë","styles":"Stil","tabIndex":"Tab Index","target":"Objektivi","targetFrame":"","targetFrameName":"Emri i Kornizës së Synuar","targetPopup":"","targetPopupName":"Emri i Dritares së Dialogut","title":"Nyja","toAnchor":"Lidhu me spirancën në tekst","toEmail":"Posta Elektronike","toUrl":"URL","toolbar":"Nyja","type":"Lloji i Nyjes","unlink":"Largo Nyjen","upload":"Ngarko"},"list":{"bulletedlist":"Vendos/Largo Listën me Pika","numberedlist":"Vendos/Largo Listën me Numra"},"magicline":{"title":"Vendos paragraf këtu"},"maximize":{"maximize":"Zmadho","minimize":"Zvogëlo"},"pastetext":{"button":"Hidhe si tekst të thjeshtë","title":"Hidhe si Tekst të Thjeshtë"},"pastefromword":{"confirmCleanup":"Teksti që dëshironi të e hidhni siç duket është kopjuar nga Word-i. Dëshironi të e pastroni para se të e hidhni?","error":"Nuk ishte e mundur të fshiheshin të dhënat e hedhura për shkak të një gabimi të brendshëm","title":"Hidhe nga Word-i","toolbar":"Hidhe nga Word-i"},"removeformat":{"toolbar":"Largo Formatin"},"sourcearea":{"toolbar":"Burimi"},"specialchar":{"options":"Mundësitë për Karaktere Speciale","title":"Përzgjidh Karakter Special","toolbar":"Vendos Karakter Special"},"scayt":{"about":"About SCAYT","aboutTab":"About","addWord":"Add Word","allCaps":"Ignore All-Caps Words","dic_create":"Create","dic_delete":"Delete","dic_field_name":"Dictionary name","dic_info":"Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.","dic_rename":"Rename","dic_restore":"Restore","dictionariesTab":"Dictionaries","disable":"Disable SCAYT","emptyDic":"Dictionary name should not be empty.","enable":"Enable SCAYT","ignore":"Ignore","ignoreAll":"Ignore All","ignoreDomainNames":"Ignore Domain Names","langs":"Languages","languagesTab":"Languages","mixedCase":"Ignore Words with Mixed Case","mixedWithDigits":"Ignore Words with Numbers","moreSuggestions":"More suggestions","opera_title":"Not supported by Opera","options":"Options","optionsTab":"Options","title":"Spell Check As You Type","toggle":"Toggle SCAYT","noSuggestions":"No suggestion"},"stylescombo":{"label":"Stil","panelTitle":"Stilet e Formatimit","panelTitle1":"Stilet e Bllokut","panelTitle2":"Stili i Brendshëm","panelTitle3":"Stilet e Objektit"},"table":{"border":"Madhësia e kornizave","caption":"Titull","cell":{"menu":"Qeli","insertBefore":"Shto Qeli Para","insertAfter":"Shto Qeli Prapa","deleteCell":"Gris Qelitë","merge":"Bashko Qelitë","mergeRight":"Bashko Djathtas","mergeDown":"Bashko Poshtë","splitHorizontal":"Ndaj Qelinë Horizontalisht","splitVertical":"Ndaj Qelinë Vertikalisht","title":"Rekuizitat e Qelisë","cellType":"Lloji i Qelisë","rowSpan":"Bashko Rreshtat","colSpan":"Bashko Kolonat","wordWrap":"Fund i Fjalës","hAlign":"Bashkimi Horizontal","vAlign":"Bashkimi Vertikal","alignBaseline":"Baza","bgColor":"Ngjyra e Prapavijës","borderColor":"Ngjyra e Kornizave","data":"Të dhënat","header":"Koka","yes":"Po","no":"Jo","invalidWidth":"Gjerësia e qelisë duhet të jetë numër.","invalidHeight":"Lartësia e qelisë duhet të jetë numër.","invalidRowSpan":"Hapësira e rreshtave duhet të jetë numër i plotë.","invalidColSpan":"Hapësira e kolonave duhet të jetë numër i plotë.","chooseColor":"Përzgjidh"},"cellPad":"Mbushja e qelisë","cellSpace":"Hapësira e qelisë","column":{"menu":"Kolona","insertBefore":"Vendos Kolonë Para","insertAfter":"Vendos Kolonë Pas","deleteColumn":"Gris Kolonat"},"columns":"Kolonat","deleteTable":"Gris Tabelën","headers":"Kokat","headersBoth":"Së bashku","headersColumn":"Kolona e parë","headersNone":"Asnjë","headersRow":"Rreshti i Parë","invalidBorder":"Madhësia e kufinjve duhet të jetë numër.","invalidCellPadding":"Mbushja e qelisë duhet të jetë numër pozitiv.","invalidCellSpacing":"Hapësira e qelisë duhet të jetë numër pozitiv.","invalidCols":"Numri i kolonave duhet të jetë numër më i madh se 0.","invalidHeight":"Lartësia e tabelës duhet të jetë numër.","invalidRows":"Numri i rreshtave duhet të jetë numër më i madh se 0.","invalidWidth":"Gjerësia e tabelës duhet të jetë numër.","menu":"Karakteristikat e Tabelës","row":{"menu":"Rreshti","insertBefore":"Shto Rresht Para","insertAfter":"Shto Rresht Prapa","deleteRow":"Gris Rreshtat"},"rows":"Rreshtat","summary":"Përmbledhje","title":"Karakteristikat e Tabelës","toolbar":"Tabela","widthPc":"përqind","widthPx":"piksell","widthUnit":"njësia e gjerësisë"},"undo":{"redo":"Ribëje","undo":"Rizhbëje"},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"}};assets/plugins/ckeditor/lang/de.js000064400000031665152510440630013215 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.lang['de']={"editor":"WYSIWYG-Editor","common":{"editorHelp":"Drücken Sie ALT 0 für Hilfe","browseServer":"Server durchsuchen","url":"URL","protocol":"Protokoll","upload":"Hochladen","uploadSubmit":"Zum Server senden","image":"Bild","flash":"Flash","form":"Formular","checkbox":"Checkbox","radio":"Radiobutton","textField":"Textfeld einzeilig","textarea":"Textfeld mehrzeilig","hiddenField":"Verstecktes Feld","button":"Klickbutton","select":"Auswahlfeld","imageButton":"Bildbutton","notSet":"","id":"ID","name":"Name","langDir":"Schreibrichtung","langDirLtr":"Links nach Rechts (LTR)","langDirRtl":"Rechts nach Links (RTL)","langCode":"Sprachenkürzel","longDescr":"Langform URL","cssClass":"Stylesheet Klasse","advisoryTitle":"Titel Beschreibung","cssStyle":"Style","ok":"OK","cancel":"Abbrechen","close":"Schließen","preview":"Vorschau","resize":"Zum Vergrößern ziehen","generalTab":"Allgemein","advancedTab":"Erweitert","validateNumberFailed":"Dieser Wert ist keine Nummer.","confirmNewPage":"Alle nicht gespeicherten Änderungen gehen verlohren. Sind Sie sicher die neue Seite zu laden?","confirmCancel":"Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schließen?","options":"Optionen","target":"Zielseite","targetNew":"Neues Fenster (_blank)","targetTop":"Oberstes Fenster (_top)","targetSelf":"Gleiches Fenster (_self)","targetParent":"Oberes Fenster (_parent)","langDirLTR":"Links nach Rechts (LNR)","langDirRTL":"Rechts nach Links (RNL)","styles":"Style","cssClasses":"Stylesheet Klasse","width":"Breite","height":"Höhe","align":"Ausrichtung","alignLeft":"Links","alignRight":"Rechts","alignCenter":"Zentriert","alignTop":"Oben","alignMiddle":"Mitte","alignBottom":"Unten","invalidValue":"Ungültiger Wert.","invalidHeight":"Höhe muss eine Zahl sein.","invalidWidth":"Breite muss eine Zahl sein.","invalidCssLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","invalidHtmlLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte HTML Messeinheit (px oder %).","invalidInlineStyle":"Wert spezifiziert für inline Stilart muss enthalten ein oder mehr Tupels mit dem Format \"Name : Wert\" getrennt mit Semikolons.","cssLengthTooltip":"Gebe eine Zahl ein für ein Wert in pixels oder eine Zahl mit einer korrekten CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","unavailable":"%1, nicht verfügbar"},"about":{"copy":"Copyright © $1. Alle Rechte vorbehalten.","dlgTitle":"Über CKEditor","help":"Prüfe $1 für Hilfe.","moreInfo":"Für Informationen über unsere Lizenzbestimmungen besuchen sie bitte unsere Webseite:","title":"Über CKEditor","userGuide":"CKEditor Benutzerhandbuch"},"basicstyles":{"bold":"Fett","italic":"Kursiv","strike":"Durchgestrichen","subscript":"Tiefgestellt","superscript":"Hochgestellt","underline":"Unterstrichen"},"blockquote":{"toolbar":"Zitatblock"},"clipboard":{"copy":"Kopieren","copyError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).","cut":"Ausschneiden","cutError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).","paste":"Einfügen","pasteArea":"Einfügebereich","pasteMsg":"Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit Strg+V) ein und bestätigen Sie mit OK.","securityMsg":"Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.","title":"Einfügen"},"contextmenu":{"options":"Kontextmenü Optionen"},"toolbar":{"toolbarCollapse":"Symbolleiste einklappen","toolbarExpand":"Symbolleiste ausklappen","toolbarGroups":{"document":"Dokument","clipboard":"Zwischenablage/Rückgängig","editing":"Editieren","forms":"Formularen","basicstyles":"Grundstile","paragraph":"Absatz","links":"Links","insert":"Einfügen","styles":"Stile","colors":"Farben","tools":"Werkzeuge"},"toolbars":"Editor Symbolleisten"},"elementspath":{"eleLabel":"Elements Pfad","eleTitle":"%1 Element"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Addresse","tag_div":"Normal (DIV)","tag_h1":"Überschrift 1","tag_h2":"Überschrift 2","tag_h3":"Überschrift 3","tag_h4":"Überschrift 4","tag_h5":"Überschrift 5","tag_h6":"Überschrift 6","tag_p":"Normal","tag_pre":"Formatiert"},"horizontalrule":{"toolbar":"Horizontale Linie einfügen"},"image":{"alertUrl":"Bitte geben Sie die Bild-URL an","alt":"Alternativer Text","border":"Rahmen","btnUpload":"Zum Server senden","button2Img":"Möchten Sie den gewählten Bild-Button in ein einfaches Bild umwandeln?","hSpace":"Horizontal-Abstand","img2Button":"Möchten Sie das gewählten Bild in einen Bild-Button umwandeln?","infoTab":"Bild-Info","linkTab":"Link","lockRatio":"Größenverhältnis beibehalten","menu":"Bild-Eigenschaften","resetSize":"Größe zurücksetzen","title":"Bild-Eigenschaften","titleButton":"Bildbutton-Eigenschaften","upload":"Hochladen","urlMissing":"Imagequelle URL fehlt.","vSpace":"Vertikal-Abstand","validateBorder":"Rahmen muß eine ganze Zahl sein.","validateHSpace":"Horizontal-Abstand muß eine ganze Zahl sein.","validateVSpace":"Vertikal-Abstand muß eine ganze Zahl sein."},"indent":{"indent":"Einzug erhöhen","outdent":"Einzug verringern"},"fakeobjects":{"anchor":"Anker","flash":"Flash Animation","hiddenfield":"Verstecktes Feld","iframe":"IFrame","unknown":"Unbekanntes Objekt"},"link":{"acccessKey":"Zugriffstaste","advanced":"Erweitert","advisoryContentType":"Inhaltstyp","advisoryTitle":"Titel Beschreibung","anchor":{"toolbar":"Anker einfügen/editieren","menu":"Anker-Eigenschaften","title":"Anker-Eigenschaften","name":"Anker Name","errorName":"Bitte geben Sie den Namen des Ankers ein","remove":"Anker entfernen"},"anchorId":"nach Element Id","anchorName":"nach Anker Name","charset":"Ziel-Zeichensatz","cssClasses":"Stylesheet Klasse","emailAddress":"E-Mail Adresse","emailBody":"Nachrichtentext","emailSubject":"Betreffzeile","id":"Id","info":"Link-Info","langCode":"Sprachenkürzel","langDir":"Schreibrichtung","langDirLTR":"Links nach Rechts (LTR)","langDirRTL":"Rechts nach Links (RTL)","menu":"Link editieren","name":"Name","noAnchors":"(keine Anker im Dokument vorhanden)","noEmail":"Bitte geben Sie e-Mail Adresse an","noUrl":"Bitte geben Sie die Link-URL an","other":"","popupDependent":"Abhängig (Netscape)","popupFeatures":"Pop-up Fenster-Eigenschaften","popupFullScreen":"Vollbild (IE)","popupLeft":"Linke Position","popupLocationBar":"Adress-Leiste","popupMenuBar":"Menü-Leiste","popupResizable":"Größe änderbar","popupScrollBars":"Rollbalken","popupStatusBar":"Statusleiste","popupToolbar":"Symbolleiste","popupTop":"Obere Position","rel":"Beziehung","selectAnchor":"Anker auswählen","styles":"Style","tabIndex":"Tab-Index","target":"Zielseite","targetFrame":"","targetFrameName":"Ziel-Fenster-Name","targetPopup":"","targetPopupName":"Pop-up Fenster-Name","title":"Link","toAnchor":"Anker in dieser Seite","toEmail":"E-Mail","toUrl":"URL","toolbar":"Link einfügen/editieren","type":"Link-Typ","unlink":"Link entfernen","upload":"Hochladen"},"list":{"bulletedlist":"Liste","numberedlist":"Nummerierte Liste"},"magicline":{"title":"Absatz hier einfügen"},"maximize":{"maximize":"Maximieren","minimize":"Minimieren"},"pastetext":{"button":"Als Text einfügen","title":"Als Text einfügen"},"pastefromword":{"confirmCleanup":"Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?","error":"Aufgrund eines internen Fehlers war es nicht möglich die eingefügten Daten zu bereinigen","title":"Aus MS-Word einfügen","toolbar":"Aus MS-Word einfügen"},"removeformat":{"toolbar":"Formatierungen entfernen"},"sourcearea":{"toolbar":"Quellcode"},"specialchar":{"options":"Sonderzeichen Optionen","title":"Sonderzeichen auswählen","toolbar":"Sonderzeichen einfügen/editieren"},"scayt":{"about":"Über SCAYT","aboutTab":"Über","addWord":"Wort hinzufügen","allCaps":"Groß geschriebenen Wörter ignorieren","dic_create":"Erzeugen","dic_delete":"Löschen","dic_field_name":"Wörterbuchname","dic_info":"Anfangs wird das Benutzerwörterbuch in einem Cookie gespeichert. Allerdings sind Cookies in der Größe begrenzt. Wenn das Benutzerwörterbuch bis zu einem Punkt wächst, wo es nicht mehr in einem Cookie gespeichert werden kann, wird das Benutzerwörterbuch auf dem Server gespeichert. Um Ihr persönliches Wörterbuch auf dem Server zu speichern, müssen Sie einen Namen für das Wörterbuch angeben. Falls Sie schon ein gespeicherte Wörterbuch haben, geben Sie bitte dessen Namen ein und klicken Sie auf die Schaltfläche Wiederherstellen.","dic_rename":"Umbenennen","dic_restore":"Wiederherstellen","dictionariesTab":"Wörterbücher","disable":"SCAYT ausschalten","emptyDic":"Wörterbuchname sollte leer sein.","enable":"SCAYT einschalten","ignore":"Ignorieren","ignoreAll":"Alle ignorieren","ignoreDomainNames":"Domain-Namen ignorieren","langs":"Sprachen","languagesTab":"Sprachen","mixedCase":"Wörter mit gemischte Setzkasten ignorieren","mixedWithDigits":"Wörter mit Zahlen ignorieren","moreSuggestions":"Mehr Vorschläge","opera_title":"Nicht von Opera unterstützt","options":"Optionen","optionsTab":"Optionen","title":"Rechtschreibprüfung während der Texteingabe (SCAYT)","toggle":"SCAYT umschalten","noSuggestions":"No suggestion"},"stylescombo":{"label":"Stil","panelTitle":"Formatierungenstil","panelTitle1":"Block Stilart","panelTitle2":"Inline Stilart","panelTitle3":"Objekt Stilart"},"table":{"border":"Rahmen","caption":"Überschrift","cell":{"menu":"Zelle","insertBefore":"Zelle davor einfügen","insertAfter":"Zelle danach einfügen","deleteCell":"Zelle löschen","merge":"Zellen verbinden","mergeRight":"Nach rechts verbinden","mergeDown":"Nach unten verbinden","splitHorizontal":"Zelle horizontal teilen","splitVertical":"Zelle vertikal teilen","title":"Zellen-Eigenschaften","cellType":"Zellart","rowSpan":"Anzahl Zeilen verbinden","colSpan":"Anzahl Spalten verbinden","wordWrap":"Zeilenumbruch","hAlign":"Horizontale Ausrichtung","vAlign":"Vertikale Ausrichtung","alignBaseline":"Grundlinie","bgColor":"Hintergrundfarbe","borderColor":"Rahmenfarbe","data":"Daten","header":"Überschrift","yes":"Ja","no":"Nein","invalidWidth":"Zellenbreite muß eine Zahl sein.","invalidHeight":"Zellenhöhe muß eine Zahl sein.","invalidRowSpan":"\"Anzahl Zeilen verbinden\" muss eine Ganzzahl sein.","invalidColSpan":"\"Anzahl Spalten verbinden\" muss eine Ganzzahl sein.","chooseColor":"Wählen"},"cellPad":"Zellenabstand innen","cellSpace":"Zellenabstand außen","column":{"menu":"Spalte","insertBefore":"Spalte links davor einfügen","insertAfter":"Spalte rechts danach einfügen","deleteColumn":"Spalte löschen"},"columns":"Spalte","deleteTable":"Tabelle löschen","headers":"Kopfzeile","headersBoth":"Beide","headersColumn":"Erste Spalte","headersNone":"Keine","headersRow":"Erste Zeile","invalidBorder":"Die Rahmenbreite muß eine Zahl sein.","invalidCellPadding":"Der Zellenabstand innen muß eine positive Zahl sein.","invalidCellSpacing":"Der Zellenabstand außen muß eine positive Zahl sein.","invalidCols":"Die Anzahl der Spalten muß größer als 0 sein..","invalidHeight":"Die Tabellenbreite muß eine Zahl sein.","invalidRows":"Die Anzahl der Zeilen muß größer als 0 sein.","invalidWidth":"Die Tabellenbreite muss eine Zahl sein.","menu":"Tabellen-Eigenschaften","row":{"menu":"Zeile","insertBefore":"Zeile oberhalb einfügen","insertAfter":"Zeile unterhalb einfügen","deleteRow":"Zeile entfernen"},"rows":"Zeile","summary":"Inhaltsübersicht","title":"Tabellen-Eigenschaften","toolbar":"Tabelle","widthPc":"%","widthPx":"Pixel","widthUnit":"Breite Einheit"},"undo":{"redo":"Wiederherstellen","undo":"Rückgängig"},"wsc":{"btnIgnore":"Ignorieren","btnIgnoreAll":"Alle Ignorieren","btnReplace":"Ersetzen","btnReplaceAll":"Alle Ersetzen","btnUndo":"Rückgängig","changeTo":"Ändern in","errorLoading":"Fehler beim laden des Dienstanbieters: %s.","ieSpellDownload":"Rechtschreibprüfung nicht installiert. Möchten Sie sie jetzt herunterladen?","manyChanges":"Rechtschreibprüfung abgeschlossen - %1 Wörter geändert","noChanges":"Rechtschreibprüfung abgeschlossen - keine Worte geändert","noMispell":"Rechtschreibprüfung abgeschlossen - keine Fehler gefunden","noSuggestions":" - keine Vorschläge - ","notAvailable":"Entschuldigung, aber dieser Dienst steht im Moment nicht zur Verfügung.","notInDic":"Nicht im Wörterbuch","oneChange":"Rechtschreibprüfung abgeschlossen - ein Wort geändert","progress":"Rechtschreibprüfung läuft...","title":"Rechtschreibprüfung","toolbar":"Rechtschreibprüfung"}};assets/plugins/ckeditor/lang/sl.js000064400000030106152510440630013230 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.lang['sl']={"editor":"Bogat Urejevalnik Besedila","common":{"editorHelp":"Pritisnite ALT 0 za pomoč","browseServer":"Prebrskaj na strežniku","url":"URL","protocol":"Protokol","upload":"Naloži","uploadSubmit":"Pošlji na strežnik","image":"Slika","flash":"Flash","form":"Obrazec","checkbox":"Potrditveno polje","radio":"Izbirno polje","textField":"Vnosno polje","textarea":"Vnosno območje","hiddenField":"Skrito polje","button":"Gumb","select":"Spustno Polje","imageButton":"Slikovni Gumb","notSet":"","id":"Id","name":"Ime","langDir":"Smer jezika","langDirLtr":"Od leve proti desni (LTR)","langDirRtl":"Od desne proti levi (RTL)","langCode":"Koda Jezika","longDescr":"Dolg opis URL-ja","cssClass":"Razred stilne predloge","advisoryTitle":"Predlagani naslov","cssStyle":"Slog","ok":"V redu","cancel":"Prekliči","close":"Zapri","preview":"Predogled","resize":"Potegni za spremembo velikosti","generalTab":"Splošno","advancedTab":"Napredno","validateNumberFailed":"Ta vrednost ni število.","confirmNewPage":"Vse neshranjene spremembe te vsebine bodo izgubljene. Ali res želite naložiti novo stran?","confirmCancel":"Nekaj možnosti je bilo spremenjenih. Ali res želite zapreti okno?","options":"Možnosti","target":"Cilj","targetNew":"Novo Okno (_blank)","targetTop":"Vrhovno Okno (_top)","targetSelf":"Enako Okno (_self)","targetParent":"Matično Okno (_parent)","langDirLTR":"Od leve proti desni (LTR)","langDirRTL":"Od desne proti levi (RTL)","styles":"Slog","cssClasses":"Razred stilne predloge","width":"Širina","height":"Višina","align":"Poravnava","alignLeft":"Levo","alignRight":"Desno","alignCenter":"Sredinsko","alignTop":"Na vrh","alignMiddle":"V sredino","alignBottom":"Na dno","invalidValue":"Neveljavna vrednost.","invalidHeight":"Višina mora biti število.","invalidWidth":"Širina mora biti število.","invalidCssLength":"Vrednost določena za \"%1\" polje mora biti pozitivna številka z ali brez veljavne CSS enote za merjenje (px, %, in, cm, mm, em, ex, pt, ali pc).","invalidHtmlLength":"Vrednost določena za \"%1\" polje mora biti pozitivna številka z ali brez veljavne HTML enote za merjenje (px ali %).","invalidInlineStyle":"Vrednost določena za inline slog mora biti sestavljena iz ene ali več tork (tuples) z obliko \"ime : vrednost\", ločenih z podpičji.","cssLengthTooltip":"Vnesite številko za vrednost v slikovnih pikah (pixels) ali številko z veljavno CSS enoto (px, %, in, cm, mm, em, ex, pt, ali pc).","unavailable":"%1, nedosegljiv"},"about":{"copy":"Copyright © $1. Vse pravice pridržane.","dlgTitle":"O programu CKEditor","help":"Preverite $1 za pomoč.","moreInfo":"Za informacijo o licenci prosim obiščite našo spletno stran:","title":"O programu CKEditor","userGuide":"CKEditor Navodila za Uporabo"},"basicstyles":{"bold":"Krepko","italic":"Ležeče","strike":"Prečrtano","subscript":"Podpisano","superscript":"Nadpisano","underline":"Podčrtano"},"blockquote":{"toolbar":"Citat"},"clipboard":{"copy":"Kopiraj","copyError":"Varnostne nastavitve brskalnika ne dopuščajo samodejnega kopiranja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Varnostne nastavitve brskalnika ne dopuščajo samodejnega izrezovanja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+X).","paste":"Prilepi","pasteArea":"Prilepi Prostor","pasteMsg":"Prosim prilepite v sleči okvir s pomočjo tipkovnice (Ctrl/Cmd+V) in pritisnite V redu.","securityMsg":"Zaradi varnostnih nastavitev vašega brskalnika urejevalnik ne more neposredno dostopati do odložišča. Vsebino odložišča ponovno prilepite v to okno.","title":"Prilepi"},"contextmenu":{"options":"Možnosti Kontekstnega Menija"},"toolbar":{"toolbarCollapse":"Skrči Orodno Vrstico","toolbarExpand":"Razširi Orodno Vrstico","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Urejevalnik orodne vrstice"},"elementspath":{"eleLabel":"Pot elementov","eleTitle":"%1 element"},"format":{"label":"Oblika","panelTitle":"Oblika","tag_address":"Napis","tag_div":"Navaden (DIV)","tag_h1":"Naslov 1","tag_h2":"Naslov 2","tag_h3":"Naslov 3","tag_h4":"Naslov 4","tag_h5":"Naslov 5","tag_h6":"Naslov 6","tag_p":"Navaden","tag_pre":"Oblikovan"},"horizontalrule":{"toolbar":"Vstavi vodoravno črto"},"image":{"alertUrl":"Vnesite URL slike","alt":"Nadomestno besedilo","border":"Obroba","btnUpload":"Pošlji na strežnik","button2Img":"Želiš pretvoriti izbrani gumb s sliko v preprosto sliko?","hSpace":"Vodoravni razmik","img2Button":"Želiš pretvoriti izbrano sliko v gumb s sliko?","infoTab":"Podatki o sliki","linkTab":"Povezava","lockRatio":"Zakleni razmerje","menu":"Lastnosti slike","resetSize":"Ponastavi velikost","title":"Lastnosti slike","titleButton":"Lastnosti gumba s sliko","upload":"Pošlji","urlMissing":"Manjka vir (URL) slike.","vSpace":"Navpični razmik","validateBorder":"Meja mora biti celo število.","validateHSpace":"HSpace mora biti celo število.","validateVSpace":"VSpace mora biti celo število."},"indent":{"indent":"Povečaj zamik","outdent":"Zmanjšaj zamik"},"fakeobjects":{"anchor":"Sidro","flash":"Flash animacija","hiddenfield":"Skrito polje","iframe":"IFrame","unknown":"Neznan objekt"},"link":{"acccessKey":"Dostopno Geslo","advanced":"Napredno","advisoryContentType":"Predlagani tip vsebine (content-type)","advisoryTitle":"Predlagani naslov","anchor":{"toolbar":"Vstavi/uredi zaznamek","menu":"Lastnosti zaznamka","title":"Lastnosti zaznamka","name":"Ime zaznamka","errorName":"Prosim vnesite ime zaznamka","remove":"Remove Anchor"},"anchorId":"Po ID-ju elementa","anchorName":"Po imenu zaznamka","charset":"Kodna tabela povezanega vira","cssClasses":"Razred stilne predloge","emailAddress":"Elektronski naslov","emailBody":"Vsebina sporočila","emailSubject":"Predmet sporočila","id":"Id","info":"Podatki o povezavi","langCode":"Smer jezika","langDir":"Smer jezika","langDirLTR":"Od leve proti desni (LTR)","langDirRTL":"Od desne proti levi (RTL)","menu":"Uredi povezavo","name":"Ime","noAnchors":"(V tem dokumentu ni zaznamkov)","noEmail":"Vnesite elektronski naslov","noUrl":"Vnesite URL povezave","other":"","popupDependent":"Podokno (Netscape)","popupFeatures":"Značilnosti pojavnega okna","popupFullScreen":"Celozaslonska slika (IE)","popupLeft":"Lega levo","popupLocationBar":"Naslovna vrstica","popupMenuBar":"Menijska vrstica","popupResizable":"Spremenljive velikosti","popupScrollBars":"Drsniki","popupStatusBar":"Vrstica stanja","popupToolbar":"Orodna vrstica","popupTop":"Lega na vrhu","rel":"Odnos","selectAnchor":"Izberi zaznamek","styles":"Slog","tabIndex":"Številka tabulatorja","target":"Cilj","targetFrame":"","targetFrameName":"Ime ciljnega okvirja","targetPopup":"","targetPopupName":"Ime pojavnega okna","title":"Povezava","toAnchor":"Zaznamek na tej strani","toEmail":"Elektronski naslov","toUrl":"URL","toolbar":"Vstavi/uredi povezavo","type":"Vrsta povezave","unlink":"Odstrani povezavo","upload":"Prenesi"},"list":{"bulletedlist":"Označen seznam","numberedlist":"Oštevilčen seznam"},"magicline":{"title":"Vstavite odstavek tukaj"},"maximize":{"maximize":"Maksimiraj","minimize":"Minimiraj"},"pastetext":{"button":"Prilepi kot golo besedilo","title":"Prilepi kot golo besedilo"},"pastefromword":{"confirmCleanup":"Besedilo, ki ga želite prilepiti je kopirano iz Word-a. Ali ga želite očistiti, preden ga prilepite?","error":"Ni bilo mogoče očistiti prilepljenih podatkov zaradi notranje napake","title":"Prilepi iz Worda","toolbar":"Prilepi iz Worda"},"removeformat":{"toolbar":"Odstrani oblikovanje"},"sourcearea":{"toolbar":"Izvorna koda"},"specialchar":{"options":"Možnosti Posebnega Znaka","title":"Izberi Posebni Znak","toolbar":"Vstavi posebni znak"},"scayt":{"about":"O storitvi SCAYT","aboutTab":"O storitvi","addWord":"Dodaj besedo","allCaps":"Ignore All-Caps Words","dic_create":"Create","dic_delete":"Delete","dic_field_name":"Dictionary name","dic_info":"Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.","dic_rename":"Rename","dic_restore":"Restore","dictionariesTab":"Slovarji","disable":"Onemogoči SCAYT","emptyDic":"Ime slovarja ne more biti prazno.","enable":"Omogoči SCAYT","ignore":"Prezri","ignoreAll":"Prezri vse","ignoreDomainNames":"Ignore Domain Names","langs":"Jeziki","languagesTab":"Jeziki","mixedCase":"Ignore Words with Mixed Case","mixedWithDigits":"Ignore Words with Numbers","moreSuggestions":"Več predlogov","opera_title":"Not supported by Opera","options":"Možnosti","optionsTab":"Možnosti","title":"Črkovanje med tipkanjem","toggle":"Preklopi SCAYT","noSuggestions":"No suggestion"},"stylescombo":{"label":"Slog","panelTitle":"Oblikovalni Stili","panelTitle1":"Slogi odstavkov","panelTitle2":"Slogi besedila","panelTitle3":"Slogi objektov"},"table":{"border":"Velikost obrobe","caption":"Naslov","cell":{"menu":"Celica","insertBefore":"Vstavi celico pred","insertAfter":"Vstavi celico za","deleteCell":"Izbriši celice","merge":"Združi celice","mergeRight":"Združi desno","mergeDown":"Druži navzdol","splitHorizontal":"Razdeli celico vodoravno","splitVertical":"Razdeli celico navpično","title":"Lastnosti celice","cellType":"Vrsta celice","rowSpan":"Razpon vrstic","colSpan":"Razpon stolpcev","wordWrap":"Prelom besedila","hAlign":"Vodoravna poravnava","vAlign":"Navpična poravnava","alignBaseline":"Osnovnica","bgColor":"Barva ozadja","borderColor":"Barva obrobe","data":"Podatki","header":"Glava","yes":"Da","no":"Ne","invalidWidth":"Širina celice mora biti število.","invalidHeight":"Višina celice mora biti število.","invalidRowSpan":"Razpon vrstic mora biti celo število.","invalidColSpan":"Razpon stolpcev mora biti celo število.","chooseColor":"Izberi"},"cellPad":"Polnilo med celicami","cellSpace":"Razmik med celicami","column":{"menu":"Stolpec","insertBefore":"Vstavi stolpec pred","insertAfter":"Vstavi stolpec za","deleteColumn":"Izbriši stolpce"},"columns":"Stolpci","deleteTable":"Izbriši tabelo","headers":"Glave","headersBoth":"Oboje","headersColumn":"Prvi stolpec","headersNone":"Brez","headersRow":"Prva vrstica","invalidBorder":"Širina obrobe mora biti število.","invalidCellPadding":"Zamik celic mora biti število","invalidCellSpacing":"Razmik med celicami mora biti število.","invalidCols":"Število stolpcev mora biti večje od 0.","invalidHeight":"Višina tabele mora biti število.","invalidRows":"Število vrstic mora biti večje od 0.","invalidWidth":"Širina tabele mora biti število.","menu":"Lastnosti tabele","row":{"menu":"Vrstica","insertBefore":"Vstavi vrstico pred","insertAfter":"Vstavi vrstico za","deleteRow":"Izbriši vrstice"},"rows":"Vrstice","summary":"Povzetek","title":"Lastnosti tabele","toolbar":"Tabela","widthPc":"procentov","widthPx":"pik","widthUnit":"enota širine"},"undo":{"redo":"Ponovi","undo":"Razveljavi"},"wsc":{"btnIgnore":"Prezri","btnIgnoreAll":"Prezri vse","btnReplace":"Zamenjaj","btnReplaceAll":"Zamenjaj vse","btnUndo":"Razveljavi","changeTo":"Spremeni v","errorLoading":"Napaka pri nalaganju storitve programa na naslovu %s.","ieSpellDownload":"Črkovalnik ni nameščen. Ali ga želite prenesti sedaj?","manyChanges":"Črkovanje je končano: Spremenjenih je bilo %1 besed","noChanges":"Črkovanje je končano: Nobena beseda ni bila spremenjena","noMispell":"Črkovanje je končano: Brez napak","noSuggestions":"- Ni predlogov -","notAvailable":"Oprostite, storitev trenutno ni dosegljiva.","notInDic":"Ni v slovarju","oneChange":"Črkovanje je končano: Spremenjena je bila ena beseda","progress":"Preverjanje črkovanja se izvaja...","title":"Črkovalnik","toolbar":"Preveri črkovanje"}};assets/plugins/ckeditor/lang/bg.js000064400000041006152510440630013203 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.lang['bg']={"editor":"Текстов редактор за форматиран текст","common":{"editorHelp":"натиснете ALT 0 за помощ","browseServer":"Избор от сървъра","url":"URL","protocol":"Протокол","upload":"Качване","uploadSubmit":"Изпращане към сървъра","image":"Снимка","flash":"Флаш","form":"Форма","checkbox":"Поле за избор","radio":"Радио бутон","textField":"Текстово поле","textarea":"Текстова зона","hiddenField":"Скрито поле","button":"Бутон","select":"Поле за избор","imageButton":"Бутон за снимка","notSet":"<не е избрано>","id":"ID","name":"Име","langDir":"Посока на езика","langDirLtr":"Ляво на дясно (ЛнД)","langDirRtl":"Дясно на ляво (ДнЛ)","langCode":"Код на езика","longDescr":"Уеб адрес за дълго описание","cssClass":"Класове за CSS","advisoryTitle":"Препоръчително заглавие","cssStyle":"Стил","ok":"ОК","cancel":"Отказ","close":"Затвори","preview":"Преглед","resize":"Влачете за да оразмерите","generalTab":"Общи","advancedTab":"Разширено","validateNumberFailed":"Тази стойност не е число","confirmNewPage":"Всички незапазени промени ще бъдат изгубени. Сигурни ли сте, че желаете да заредите нова страница?","confirmCancel":"Някои от опциите са променени. Сигурни ли сте, че желаете да затворите прозореца?","options":"Опции","target":"Цел","targetNew":"Нов прозорец (_blank)","targetTop":"Горна позиция (_top)","targetSelf":"Текущия прозорец (_self)","targetParent":"Основен прозорец (_parent)","langDirLTR":"Ляво на дясно (ЛнД)","langDirRTL":"Дясно на ляво (ДнЛ)","styles":"Стил","cssClasses":"Класове за CSS","width":"Ширина","height":"Височина","align":"Подравняване","alignLeft":"Ляво","alignRight":"Дясно","alignCenter":"Център","alignTop":"Горе","alignMiddle":"По средата","alignBottom":"Долу","invalidValue":"Невалидна стойност.","invalidHeight":"Височината трябва да е число.","invalidWidth":"Ширина требе да е число.","invalidCssLength":"Стойността на полето \"%1\" трябва да бъде положително число с или без валидна CSS измервателна единица (px, %, in, cm, mm, em, ex, pt, или pc).","invalidHtmlLength":"Стойността на полето \"%1\" трябва да бъде положително число с или без валидна HTML измервателна единица (px или %).","invalidInlineStyle":"Стойността на стилa трябва да съдържат една или повече двойки във формат \"name : value\", разделени с двоеточие.","cssLengthTooltip":"Въведете числена стойност в пиксели или друга валидна CSS единица (px, %, in, cm, mm, em, ex, pt, или pc).","unavailable":"%1, недостъпно"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"Относно CKEditor","help":"Проверете $1 за помощ.","moreInfo":"За лицензионна информация моля посетете сайта ни:","title":"Относно CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Удебелен","italic":"Наклонен","strike":"Зачертан текст","subscript":"Индексиран текст","superscript":"Суперскрипт","underline":"Подчертан"},"blockquote":{"toolbar":"Блок за цитат"},"clipboard":{"copy":"Копирай","copyError":"Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни запаметяването. За целта използвайте клавиатурата (Ctrl/Cmd+C).","cut":"Отрежи","cutError":"Настройките за сигурност на Вашия браузър не позволяват на редактора автоматично да изъплни действията за отрязване. Моля ползвайте клавиатурните команди за целта (ctrl+x).","paste":"Вмъкни","pasteArea":"Зона за вмъкване","pasteMsg":"Вмъкнете тук съдъжанието с клавиатуарата (Ctrl/Cmd+V) и натиснете OK.","securityMsg":"Заради настройките за сигурност на Вашия браузър, редакторът не може да прочете данните от клипборда коректно.","title":"Вмъкни"},"contextmenu":{"options":"Опции на контекстното меню"},"toolbar":{"toolbarCollapse":"Свиване на лентата с инструменти","toolbarExpand":"Разширяване на лентата с инструменти","toolbarGroups":{"document":"Документ","clipboard":"Clipboard/Undo","editing":"Промяна","forms":"Форми","basicstyles":"Базови стилове","paragraph":"Параграф","links":"Връзки","insert":"Вмъкване","styles":"Стилове","colors":"Цветове","tools":"Инструменти"},"toolbars":"Ленти с инструменти"},"elementspath":{"eleLabel":"Път за елементите","eleTitle":"%1 елемент"},"format":{"label":"Формат","panelTitle":"Формат","tag_address":"Адрес","tag_div":"Параграф (DIV)","tag_h1":"Заглавие 1","tag_h2":"Заглавие 2","tag_h3":"Заглавие 3","tag_h4":"Заглавие 4","tag_h5":"Заглавие 5","tag_h6":"Заглавие 6","tag_p":"Нормален","tag_pre":"Форматиран"},"horizontalrule":{"toolbar":"Вмъкване на хоризонтална линия"},"image":{"alertUrl":"Моля, въведете пълния път до изображението","alt":"Алтернативен текст","border":"Рамка","btnUpload":"Изпрати я на сървъра","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Хоризонтален отстъп","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Инфо за снимка","linkTab":"Връзка","lockRatio":"Заключване на съотношението","menu":"Настройки за снимка","resetSize":"Нулиране на размер","title":"Настройки за снимка","titleButton":"Настойки за бутон за снимка","upload":"Качване","urlMissing":"Image source URL is missing.","vSpace":"Вертикален отстъп","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Увеличаване на отстъпа","outdent":"Намаляване на отстъпа"},"fakeobjects":{"anchor":"Кука","flash":"Флаш анимация","hiddenfield":"Скрито поле","iframe":"IFrame","unknown":"Неизвестен обект"},"link":{"acccessKey":"Ключ за достъп","advanced":"Разширено","advisoryContentType":"Препоръчителен тип на съдържанието","advisoryTitle":"Препоръчително заглавие","anchor":{"toolbar":"Котва","menu":"Промяна на котва","title":"Настройки на котва","name":"Име на котва","errorName":"Моля въведете име на котвата","remove":"Премахване на котва"},"anchorId":"По ID на елемент","anchorName":"По име на котва","charset":"Тип на свързания ресурс","cssClasses":"Класове за CSS","emailAddress":"E-mail aдрес","emailBody":"Съдържание","emailSubject":"Тема","id":"ID","info":"Инфо за връзката","langCode":"Код за езика","langDir":"Посока на езика","langDirLTR":"Ляво на Дясно (ЛнД)","langDirRTL":"Дясно на Ляво (ДнЛ)","menu":"Промяна на връзка","name":"Име","noAnchors":"(Няма котви в текущия документ)","noEmail":"Моля въведете e-mail aдрес","noUrl":"Моля въведете URL адреса","other":"<друго>","popupDependent":"Зависимост (Netscape)","popupFeatures":"Функции на изкачащ прозорец","popupFullScreen":"Цял екран (IE)","popupLeft":"Лява позиция","popupLocationBar":"Лента с локацията","popupMenuBar":"Лента за меню","popupResizable":"Оразмеряем","popupScrollBars":"Скролери","popupStatusBar":"Статусна лента","popupToolbar":"Лента с инструменти","popupTop":"Горна позиция","rel":"Връзка","selectAnchor":"Изберете котва","styles":"Стил","tabIndex":"Ред на достъп","target":"Цел","targetFrame":"","targetFrameName":"Име на целевият прозорец","targetPopup":"<изкачащ прозорец>","targetPopupName":"Име на изкачащ прозорец","title":"Връзка","toAnchor":"Връзка към котва в текста","toEmail":"E-mail","toUrl":"Уеб адрес","toolbar":"Връзка","type":"Тип на връзката","unlink":"Премахни връзката","upload":"Качване"},"list":{"bulletedlist":"Вмъкване/Премахване на точков списък","numberedlist":"Вмъкване/Премахване на номериран списък"},"magicline":{"title":"Вмъкнете параграф тук"},"maximize":{"maximize":"Максимизиране","minimize":"Минимизиране"},"pastetext":{"button":"Вмъкни като чист текст","title":"Вмъкни като чист текст"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Вмъкни от MS Word","toolbar":"Вмъкни от MS Word"},"removeformat":{"toolbar":"Премахване на форматирането"},"sourcearea":{"toolbar":"Източник"},"specialchar":{"options":"Опции за специален знак","title":"Избор на специален знак","toolbar":"Вмъкване на специален знак"},"scayt":{"about":"About SCAYT","aboutTab":"Относно","addWord":"Add Word","allCaps":"Ignore All-Caps Words","dic_create":"Нов","dic_delete":"Изтриване","dic_field_name":"Име на речнк","dic_info":"Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.","dic_rename":"Преименуване","dic_restore":"Възтановяване","dictionariesTab":"Речници","disable":"Disable SCAYT","emptyDic":"Dictionary name should not be empty.","enable":"Enable SCAYT","ignore":"Ignore","ignoreAll":"Ignore All","ignoreDomainNames":"Ignore Domain Names","langs":"Languages","languagesTab":"Езици","mixedCase":"Ignore Words with Mixed Case","mixedWithDigits":"Игнорирани думи и цифри","moreSuggestions":"More suggestions","opera_title":"Not supported by Opera","options":"Options","optionsTab":"Options","title":"Spell Check As You Type","toggle":"Toggle SCAYT","noSuggestions":"No suggestion"},"stylescombo":{"label":"Стилове","panelTitle":"Стилове за форматиране","panelTitle1":"Блокови стилове","panelTitle2":"Вътрешни стилове","panelTitle3":"Обектни стилове"},"table":{"border":"Размер на рамката","caption":"Заглавие","cell":{"menu":"Клетка","insertBefore":"Вмъкване на клетка преди","insertAfter":"Вмъкване на клетка след","deleteCell":"Изтриване на клетки","merge":"Сливане на клетки","mergeRight":"Сливане в дясно","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Настройки на клетката","cellType":"Тип на клетката","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Авто. пренос","hAlign":"Хоризонтално подравняване","vAlign":"Вертикално подравняване","alignBaseline":"Базова линия","bgColor":"Фон","borderColor":"Цвят на рамката","data":"Данни","header":"Хедър","yes":"Да","no":"Не","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Изберете"},"cellPad":"Отделяне на клетките","cellSpace":"Разтояние между клетките","column":{"menu":"Колона","insertBefore":"Вмъкване на колона преди","insertAfter":"Вмъкване на колона след","deleteColumn":"Изтриване на колони"},"columns":"Колони","deleteTable":"Изтриване на таблица","headers":"Хедъри","headersBoth":"Заедно","headersColumn":"Първа колона","headersNone":"Няма","headersRow":"Първи ред","invalidBorder":"Размерът на рамката трябва да е число.","invalidCellPadding":"Отстоянието на клетките трябва да е позитивно число.","invalidCellSpacing":"Интервала в клетките трябва да е позитивно число.","invalidCols":"Броят колони трябва да е по-голям от 0.","invalidHeight":"Височината на таблицата трябва да е число.","invalidRows":"Броят редове трябва да е по-голям от 0.","invalidWidth":"Ширината на таблицата трябва да е число.","menu":"Настройки на таблицата","row":{"menu":"Ред","insertBefore":"Вмъкване на ред преди","insertAfter":"Вмъкване на ред след","deleteRow":"Изтриване на редове"},"rows":"Редове","summary":"Обща информация","title":"Настройки на таблицата","toolbar":"Таблица","widthPc":"процент","widthPx":"пиксела","widthUnit":"единица за ширина"},"undo":{"redo":"Връщане на предишен статус","undo":"Възтанови"},"wsc":{"btnIgnore":"Игнорирай","btnIgnoreAll":"Игнорирай всичко","btnReplace":"Препокриване","btnReplaceAll":"Препокрий всичко","btnUndo":"Възтанови","changeTo":"Промени на","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- Няма препоръчани -","notAvailable":"Съжаляваме, но услугата не е достъпна за момента","notInDic":"Не е в речника","oneChange":"Spell check complete: One word changed","progress":"Проверява се правописа...","title":"Проверка на правопис","toolbar":"Проверка на правопис"}};assets/plugins/ckeditor/lang/si.js000064400000041111152510440640013224 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.lang['si']={"editor":"පොහොසත් වචන සංස්කරණ","common":{"editorHelp":"උදව් ලබා ගැනීමට ALT බොත්තම ඔබන්න","browseServer":"සෙවුම් සේවාදායකය","url":"URL","protocol":"මුලාපත්රය","upload":"උඩුගතකිරීම","uploadSubmit":"සේවාදායකය වෙත යොමුකිරිම","image":"රුපය","flash":"දීප්තිය","form":"පෝරමය","checkbox":"ලකුණුකිරීමේ කොටුව","radio":"තේරීම් ","textField":"ලියන ප්රදේශය","textarea":"අකුරු ","hiddenField":"සැඟවුණු ප්රදේශය","button":"බොත්තම","select":"තෝරන්න ","imageButton":"රුප ","notSet":"<යොදා >","id":"අංකය","name":"නම","langDir":"භාෂා දිශාව","langDirLtr":"වමේසිට දකුණුට","langDirRtl":"දකුණේ සිට වමට","langCode":"භාෂා කේතය","longDescr":"සම්පුර්න පැහැදිලි කිරීම","cssClass":"විලාශ පත්ර පන්තිය","advisoryTitle":"උපදෙස් ","cssStyle":"විලාසය","ok":"නිරදි","cancel":"අවලංගු කිරීම","close":"වැසීම","preview":"නැවත ","resize":"විශාලත්වය නැවත වෙනස් කිරීම","generalTab":"පොදු කරුණු.","advancedTab":"දීය","validateNumberFailed":"මෙම වටිනාකම අංකයක් නොවේ","confirmNewPage":"ආරක්ෂා නොකළ සියලුම දත්තයන් මැකියනුලැබේ. ඔබට නව පිටුවක් ලබා ගැනීමට අවශ්යද?","confirmCancel":"ඇතම් විකල්පයන් වෙනස් කර ඇත. ඔබට මින් නික්මීමට අවශ්යද?","options":" විකල්ප","target":"අරමුණ","targetNew":"නව කව්ළුව","targetTop":"වැදගත් කව්ළුව","targetSelf":"එම කව්ළුව(_තම\\\\)","targetParent":"මව් කව්ළුව(_)","langDirLTR":"වමේසිට දකුණුට","langDirRTL":"දකුණේ සිට වමට","styles":"විලාසය","cssClasses":"විලාසපත්ර පන්තිය","width":"පළල","height":"උස","align":"ගැලපුම","alignLeft":"වම","alignRight":"දකුණ","alignCenter":"මධ්ය","alignTop":"ඉ","alignMiddle":"මැද","alignBottom":"පහල","invalidValue":"වැරදී වටිනාකමකි","invalidHeight":"උස අංකයක් විය යුතුය","invalidWidth":"පළල අංකයක් විය යුතුය","invalidCssLength":"වටිනාකමක් නිරූපණය කිරීම \"%1\" ප්රදේශය ධන සංක්යාත්මක වටිනාකමක් හෝ නිවරදි නොවන CSS මිනුම් එකක(px, %, in, cm, mm, em, ex, pt, pc)","invalidHtmlLength":"වටිනාකමක් නිරූපණය කිරීම \"%1\" ප්රදේශය ධන සංක්යාත්මක වටිනාකමක් හෝ නිවරදි නොවන HTML මිනුම් එකක (px හෝ %).","invalidInlineStyle":"වටිනාකමක් නිරූපණය කිරීම පේළි විලාසයයට ආකෘතිය අනතර්ග විය යුතය \"නම : වටිනාකම\", තිත් කොමාවකින් වෙන් වෙන ලද.","cssLengthTooltip":"සංක්යා ඇතුලත් කිරීමේදී වටිනාකම තිත් ප්රමාණය නිවරදි CSS ඒකක(තිත්, %, අඟල්,සෙමි, mm, em, ex, pt, pc)","unavailable":"%1, නොමැතිනම්"},"about":{"copy":"පිටපත් අයිතිය සහ පිටපත් කිරීම;$1 .සියලුම හිමිකම් ඇවිරිණි.","dlgTitle":"CKEditor ගැන විස්තර","help":"උදව් සඳහා $1 ","moreInfo":"බලපත්ර තොරතුරු සදහා කරුණාකර අපගේ විද්යුත් ලිපිනයට පිවිසෙන්න:","title":"CKEditor ගැන විස්තර","userGuide":"CKEditor භාවිතා කිරීම පිළිබඳ "},"basicstyles":{"bold":"තද අකුරින් ලියනලද","italic":"බැධීඅකුරින් ලියන ලද","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"යටින් ඉරි අදින ලද"},"blockquote":{"toolbar":"උද්ධෘත කොටස"},"clipboard":{"copy":"පිටපත් කරන්න","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"කපාගන්න","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"අලවන්න","pasteArea":"අලවන ප්රදේශ","pasteMsg":"Please paste inside the following box using the keyboard (Ctrl/Cmd+V) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"අලවන්න"},"contextmenu":{"options":"අනතර්ග ලේඛණ විකල්ප"},"toolbar":{"toolbarCollapse":"මෙවලම් තීරුව හැකුලුම.","toolbarExpand":"මෙවලම් තීරුව දීගහැරුම","toolbarGroups":{"document":"ලිපිය","clipboard":"ඇමිණුම වෙනස් කිරීම","editing":"සංස්කරණය","forms":"පෝරමය","basicstyles":"මුලික විලාසය","paragraph":"චේදය","links":"සබැඳිය","insert":"ඇතුලත් කිරීම","styles":"විලාසය","colors":"වර්ණය","tools":"මෙවලම්"},"toolbars":"සංස්කරණ මෙවලම් තීරුව"},"elementspath":{"eleLabel":"මුලද්රව්ය මාර්ගය","eleTitle":"%1 මුල"},"format":{"label":"ආකෘතිය","panelTitle":"චේදයේ ","tag_address":"ලිපිනය","tag_div":"සාමාන්ය(DIV)","tag_h1":"ශීර්ෂය 1","tag_h2":"ශීර්ෂය 2","tag_h3":"ශීර්ෂය 3","tag_h4":"ශීර්ෂය 4","tag_h5":"ශීර්ෂය 5","tag_h6":"ශීර්ෂය 6","tag_p":"සාමාන්ය","tag_pre":"ආකෘතියන්"},"horizontalrule":{"toolbar":"තිරස් රේඛාවක් ඇතුලත් කරන්න"},"image":{"alertUrl":"කරුණාකර රුපයේ URL ලියන්න","alt":"විකල්ප ","border":"සීමාවවල ","btnUpload":"සේවාදායකය වෙත යොමුකිරිම","button2Img":"ඔබට තෝරන ලද රුපය පරිවර්තනය කිරීමට අවශ්යද?","hSpace":"HSpace","img2Button":"ඔබට තෝරන ලද රුපය පරිවර්තනය කිරීමට අවශ්යද?","infoTab":"රුපයේ තොරතුරු","linkTab":"සබැඳිය","lockRatio":"නවතන අනුපාතය ","menu":"රුපයේ ගුණ","resetSize":"නැවතත් විශාලත්වය වෙනස් කිරීම","title":"රුපයේ ","titleButton":"රුප බොත්තමේ ගුණ","upload":"උඩුගතකිරීම","urlMissing":"රුප මුලාශ්ර URL නැත.","vSpace":"VSpace","validateBorder":"මාඉම් සම්පුර්ණ සංක්යාවක් විය යුතුය.","validateHSpace":"HSpace සම්පුර්ණ සංක්යාවක් විය යුතුය","validateVSpace":"VSpace සම්පුර්ණ සංක්යාවක් විය යුතුය."},"indent":{"indent":"අතර පරතරය වැඩිකරන්න","outdent":"අතර පරතරය අඩුකරන්න"},"fakeobjects":{"anchor":"ආධාරය","flash":"Flash Animation","hiddenfield":"සැඟවුණු ප්රදේශය","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"ප්රවේශ යතුර","advanced":"දීය","advisoryContentType":"උපදේශාත්මක අන්තර්ගත ආකාරය","advisoryTitle":"උපදේශාත්මක නාමය","anchor":{"toolbar":"ආධාරය","menu":"ආධාරය වෙනස් කිරීම","title":"ආධාරක ","name":"ආධාරකයේ නාමය","errorName":"කරුණාකර ආධාරකයේ නාමය ඇතුල් කරන්න","remove":"ආධාරකය ඉවත් කිරීම"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"විලාසපත්ර පන්තිය","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"අංකය","info":"Link Info","langCode":"භාෂා කේතය","langDir":"භාෂා දිශාව","langDirLTR":"වමේසිට දකුණුට","langDirRTL":"දකුණේ සිට වමට","menu":"Edit Link","name":"නම","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"විලාසය","tabIndex":"Tab Index","target":"අරමුණ","targetFrame":"","targetFrameName":"Target Frame Name","targetPopup":"","targetPopupName":"Popup Window Name","title":"සබැඳිය","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"සබැඳිය","type":"Link Type","unlink":"Unlink","upload":"උඩුගතකිරීම"},"list":{"bulletedlist":"ඇතුලත් / ඉවත් කිරීම ලඉස්තුව","numberedlist":"ඇතුලත් / ඉවත් කිරීම අන්න්කිත ලඉස්තුව"},"magicline":{"title":"චේදය ඇතුලත් කරන්න"},"maximize":{"maximize":"විශාල කිරීම","minimize":"කුඩා කිරීම"},"pastetext":{"button":"සාමාන්ය අක්ෂර ලෙස අලවන්න","title":"සාමාන්ය අක්ෂර ලෙස අලවන්න"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"වචන වලින් අලවන්න","toolbar":"වචන වලින් අලවන්න"},"removeformat":{"toolbar":"සැකසීම වෙනස් කරන්න"},"sourcearea":{"toolbar":"මුලාශ්රය"},"specialchar":{"options":"විශේෂ ගුණාංග වීකල්ප","title":"විශේෂ ගුණාංග ","toolbar":"විශේෂ ගුණාංග ඇතුලත් "},"scayt":{"about":"About SCAYT","aboutTab":"About","addWord":"Add Word","allCaps":"Ignore All-Caps Words","dic_create":"Create","dic_delete":"Delete","dic_field_name":"Dictionary name","dic_info":"Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.","dic_rename":"Rename","dic_restore":"Restore","dictionariesTab":"Dictionaries","disable":"Disable SCAYT","emptyDic":"Dictionary name should not be empty.","enable":"Enable SCAYT","ignore":"Ignore","ignoreAll":"Ignore All","ignoreDomainNames":"Ignore Domain Names","langs":"Languages","languagesTab":"Languages","mixedCase":"Ignore Words with Mixed Case","mixedWithDigits":"Ignore Words with Numbers","moreSuggestions":"More suggestions","opera_title":"Not supported by Opera","options":"Options","optionsTab":"Options","title":"Spell Check As You Type","toggle":"Toggle SCAYT","noSuggestions":"No suggestion"},"stylescombo":{"label":"විලාසය","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"සීමාවවල විශාලත්වය","caption":"Caption","cell":{"menu":"කොටුව","insertBefore":"පෙර කොටුවක් ඇතුල්කිරිම","insertAfter":"පසුව කොටුවක් ඇතුලත් ","deleteCell":"කොටුව මැකීම","merge":"කොටු එකට යාකිරිම","mergeRight":"දකුණට ","mergeDown":"පහලට ","splitHorizontal":"තිරස්ව කොටු පැතිරීම","splitVertical":"සිරස්ව කොටු පැතිරීම","title":"කොටු ","cellType":"කොටු වර්ගය","rowSpan":"පේළි පළල","colSpan":"සිරස් පළල","wordWrap":"වචන ගැලපුම","hAlign":"තිරස්ව ","vAlign":"සිරස්ව ","alignBaseline":"පාද රේඛාව","bgColor":"පසුබිම් වර්ණය","borderColor":"මායිම් ","data":"Data","header":"ශීර්ෂක","yes":"ඔව්","no":"නැත","invalidWidth":"කොටු පළල සංඛ්ය්ත්මක වටිනාකමක් විය යුතුය","invalidHeight":"කොටු උස සංඛ්ය්ත්මක වටිනාකමක් විය යුතුය","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"තෝරන්න"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"සිරස් ","deleteTable":"වගුව මකන්න","headers":"ශීර්ෂක","headersBoth":"දෙකම","headersColumn":"පළමූ සිරස් තීරුව","headersNone":"කිසිවක්ම නොවේ","headersRow":"පළමූ පේළිය","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"නැවත කිරීම","undo":"වෙනස් කිරීම"},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"}};assets/plugins/ckeditor/lang/he.js000064400000035300152510440640013210 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.lang['he']={"editor":"עורך טקסט עשיר","common":{"editorHelp":"לחץ אלט ALT + 0 לעזרה","browseServer":"סייר השרת","url":"כתובת (URL)","protocol":"פרוטוקול","upload":"העלאה","uploadSubmit":"שליחה לשרת","image":"תמונה","flash":"פלאש","form":"טופס","checkbox":"תיבת סימון","radio":"לחצן אפשרויות","textField":"שדה טקסט","textarea":"איזור טקסט","hiddenField":"שדה חבוי","button":"כפתור","select":"שדה בחירה","imageButton":"כפתור תמונה","notSet":"<לא נקבע>","id":"זיהוי (ID)","name":"שם","langDir":"כיוון שפה","langDirLtr":"שמאל לימין (LTR)","langDirRtl":"ימין לשמאל (RTL)","langCode":"קוד שפה","longDescr":"קישור לתיאור מפורט","cssClass":"מחלקת עיצוב (CSS Class)","advisoryTitle":"כותרת מוצעת","cssStyle":"סגנון","ok":"אישור","cancel":"ביטול","close":"סגירה","preview":"תצוגה מקדימה","resize":"יש לגרור בכדי לשנות את הגודל","generalTab":"כללי","advancedTab":"אפשרויות מתקדמות","validateNumberFailed":"הערך חייב להיות מספרי.","confirmNewPage":"כל השינויים שלא נשמרו יאבדו. האם להעלות דף חדש?","confirmCancel":"חלק מהאפשרויות שונו, האם לסגור את הדיאלוג?","options":"אפשרויות","target":"מטרה","targetNew":"חלון חדש (_blank)","targetTop":"החלון העליון ביותר (_top)","targetSelf":"אותו חלון (_self)","targetParent":"חלון האב (_parent)","langDirLTR":"שמאל לימין (LTR)","langDirRTL":"ימין לשמאל (RTL)","styles":"סגנון","cssClasses":"מחלקות גליונות סגנון","width":"רוחב","height":"גובה","align":"יישור","alignLeft":"לשמאל","alignRight":"לימין","alignCenter":"מרכז","alignTop":"למעלה","alignMiddle":"לאמצע","alignBottom":"לתחתית","invalidValue":"ערך לא חוקי.","invalidHeight":"הגובה חייב להיות מספר.","invalidWidth":"הרוחב חייב להיות מספר.","invalidCssLength":"הערך שצוין לשדה \"%1\" חייב להיות מספר חיובי עם או ללא יחידת מידה חוקית של CSS (px, %, in, cm, mm, em, ex, pt, או pc).","invalidHtmlLength":"הערך שצוין לשדה \"%1\" חייב להיות מספר חיובי עם או ללא יחידת מידה חוקית של HTML (px או %).","invalidInlineStyle":"הערך שצויין לשדה הסגנון חייב להכיל זוג ערכים אחד או יותר בפורמט \"שם : ערך\", מופרדים על ידי נקודה-פסיק.","cssLengthTooltip":"יש להכניס מספר המייצג פיקסלים או מספר עם יחידת גליונות סגנון תקינה (px, %, in, cm, mm, em, ex, pt, או pc).","unavailable":"%1, לא זמין"},"about":{"copy":"Copyright © $1. כל הזכויות שמורות.","dlgTitle":"אודות CKEditor","help":"היכנסו ל$1 לעזרה.","moreInfo":"למידע נוסף בקרו באתרנו:","title":"אודות CKEditor","userGuide":"מדריך המשתמש של CKEditor"},"basicstyles":{"bold":"מודגש","italic":"נטוי","strike":"כתיב מחוק","subscript":"כתיב תחתון","superscript":"כתיב עליון","underline":"קו תחתון"},"blockquote":{"toolbar":"בלוק ציטוט"},"clipboard":{"copy":"העתקה","copyError":"הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות העתקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+C).","cut":"גזירה","cutError":"הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות גזירה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+X).","paste":"הדבקה","pasteArea":"איזור הדבקה","pasteMsg":"נא להדביק בתוך הקופסה באמצעות (Ctrl/Cmd+V) וללחוץ על אישור.","securityMsg":"עקב הגדרות אבטחה בדפדפן, לא ניתן לגשת אל לוח הגזירים (Clipboard) בצורה ישירה. נא להדביק שוב בחלון זה.","title":"הדבקה"},"contextmenu":{"options":"אפשרויות תפריט ההקשר"},"toolbar":{"toolbarCollapse":"מזעור סרגל כלים","toolbarExpand":"הרחבת סרגל כלים","toolbarGroups":{"document":"מסמך","clipboard":"לוח הגזירים (Clipboard)/צעד אחרון","editing":"עריכה","forms":"טפסים","basicstyles":"עיצוב בסיסי","paragraph":"פסקה","links":"קישורים","insert":"הכנסה","styles":"עיצוב","colors":"צבעים","tools":"כלים"},"toolbars":"סרגלי כלים של העורך"},"elementspath":{"eleLabel":"עץ האלמנטים","eleTitle":"%1 אלמנט"},"format":{"label":"עיצוב","panelTitle":"עיצוב","tag_address":"כתובת","tag_div":"נורמלי (DIV)","tag_h1":"כותרת","tag_h2":"כותרת 2","tag_h3":"כותרת 3","tag_h4":"כותרת 4","tag_h5":"כותרת 5","tag_h6":"כותרת 6","tag_p":"נורמלי","tag_pre":"קוד"},"horizontalrule":{"toolbar":"הוספת קו אופקי"},"image":{"alertUrl":"יש להקליד את כתובת התמונה","alt":"טקסט חלופי","border":"מסגרת","btnUpload":"שליחה לשרת","button2Img":"האם להפוך את תמונת הכפתור לתמונה פשוטה?","hSpace":"מרווח אופקי","img2Button":"האם להפוך את התמונה לכפתור תמונה?","infoTab":"מידע על התמונה","linkTab":"קישור","lockRatio":"נעילת היחס","menu":"תכונות התמונה","resetSize":"איפוס הגודל","title":"מאפייני התמונה","titleButton":"מאפיני כפתור תמונה","upload":"העלאה","urlMissing":"כתובת התמונה חסרה.","vSpace":"מרווח אנכי","validateBorder":"שדה המסגרת חייב להיות מספר שלם.","validateHSpace":"שדה המרווח האופקי חייב להיות מספר שלם.","validateVSpace":"שדה המרווח האנכי חייב להיות מספר שלם."},"indent":{"indent":"הגדלת הזחה","outdent":"הקטנת הזחה"},"fakeobjects":{"anchor":"עוגן","flash":"סרטון פלאש","hiddenfield":"שדה חבוי","iframe":"חלון פנימי (iframe)","unknown":"אובייקט לא ידוע"},"link":{"acccessKey":"מקש גישה","advanced":"אפשרויות מתקדמות","advisoryContentType":"Content Type מוצע","advisoryTitle":"כותרת מוצעת","anchor":{"toolbar":"הוספת/עריכת נקודת עיגון","menu":"מאפייני נקודת עיגון","title":"מאפייני נקודת עיגון","name":"שם לנקודת עיגון","errorName":"יש להקליד שם לנקודת עיגון","remove":"מחיקת נקודת עיגון"},"anchorId":"עפ\"י זיהוי (ID) האלמנט","anchorName":"עפ\"י שם העוגן","charset":"קידוד המשאב המקושר","cssClasses":"גיליונות עיצוב קבוצות","emailAddress":"כתובת הדוא\"ל","emailBody":"גוף ההודעה","emailSubject":"נושא ההודעה","id":"זיהוי (ID)","info":"מידע על הקישור","langCode":"קוד שפה","langDir":"כיוון שפה","langDirLTR":"שמאל לימין (LTR)","langDirRTL":"ימין לשמאל (RTL)","menu":"מאפייני קישור","name":"שם","noAnchors":"(אין עוגנים זמינים בדף)","noEmail":"יש להקליד את כתובת הדוא\"ל","noUrl":"יש להקליד את כתובת הקישור (URL)","other":"<אחר>","popupDependent":"תלוי (Netscape)","popupFeatures":"תכונות החלון הקופץ","popupFullScreen":"מסך מלא (IE)","popupLeft":"מיקום צד שמאל","popupLocationBar":"סרגל כתובת","popupMenuBar":"סרגל תפריט","popupResizable":"שינוי גודל","popupScrollBars":"ניתן לגלילה","popupStatusBar":"סרגל חיווי","popupToolbar":"סרגל הכלים","popupTop":"מיקום צד עליון","rel":"קשר גומלין","selectAnchor":"בחירת עוגן","styles":"סגנון","tabIndex":"מספר טאב","target":"מטרה","targetFrame":"<מסגרת>","targetFrameName":"שם מסגרת היעד","targetPopup":"<חלון קופץ>","targetPopupName":"שם החלון הקופץ","title":"קישור","toAnchor":"עוגן בעמוד זה","toEmail":"דוא\"ל","toUrl":"כתובת (URL)","toolbar":"הוספת/עריכת קישור","type":"סוג קישור","unlink":"הסרת הקישור","upload":"העלאה"},"list":{"bulletedlist":"רשימת נקודות","numberedlist":"רשימה ממוספרת"},"magicline":{"title":"הכנס פסקה כאן"},"maximize":{"maximize":"הגדלה למקסימום","minimize":"הקטנה למינימום"},"pastetext":{"button":"הדבקה כטקסט פשוט","title":"הדבקה כטקסט פשוט"},"pastefromword":{"confirmCleanup":"נראה הטקסט שבכוונתך להדביק מקורו בקובץ וורד. האם ברצונך לנקות אותו טרם ההדבקה?","error":"לא ניתן היה לנקות את המידע בשל תקלה פנימית.","title":"הדבקה מ-Word","toolbar":"הדבקה מ-Word"},"removeformat":{"toolbar":"הסרת העיצוב"},"sourcearea":{"toolbar":"מקור"},"specialchar":{"options":"אפשרויות תווים מיוחדים","title":"בחירת תו מיוחד","toolbar":"הוספת תו מיוחד"},"scayt":{"about":"אודות SCAYT","aboutTab":"אודות","addWord":"הוספת מילה","allCaps":"התעלם ממילים שכל אותיותיהן גדולות","dic_create":"יצירה","dic_delete":"מחיקה","dic_field_name":"שם המילון","dic_info":"בהתחלה מילון המשתמש מאוחסן בעוגיה, אך עוגיות מוגבלות במקום. כאשר המילון מגיע לגודל בו הוא אינו יכול להתאכסן בעוגיה, המילון צריך להתאכסן בשרתנו. לשם כך עליך לתת שם למילון. אם כבר יש לך מילון מאוחסן, יש להכניס את שמו וללחוץ על כפתור השחזור.","dic_rename":"שינוי שם","dic_restore":"שחזור","dictionariesTab":"מילון","disable":"בטל SCAYT","emptyDic":"יש לבחור מילון.","enable":"אפשר SCAYT","ignore":"התעלמות","ignoreAll":"התעלמות מהכל","ignoreDomainNames":"התעלם משמות מתחם","langs":"שפות","languagesTab":"שפות","mixedCase":"התעלם ממילים עם אותיות גדולות וקטנות ביחד","mixedWithDigits":"התעלם ממילים עם מספרים","moreSuggestions":"הצעות נוספות","opera_title":"לא זמין בדפדפן אופרה","options":"אפשרויות","optionsTab":"אפשרויות","title":"בדיקת איות בזמן כתיבה (SCAYT)","toggle":"שינוי SCAYT","noSuggestions":"No suggestion"},"stylescombo":{"label":"סגנון","panelTitle":"סגנונות פורמט","panelTitle1":"סגנונות בלוק","panelTitle2":"סגנונות רצף","panelTitle3":"סגנונות אובייקט"},"table":{"border":"גודל מסגרת","caption":"כיתוב","cell":{"menu":"מאפייני תא","insertBefore":"הוספת תא לפני","insertAfter":"הוספת תא אחרי","deleteCell":"מחיקת תאים","merge":"מיזוג תאים","mergeRight":"מזג ימינה","mergeDown":"מזג למטה","splitHorizontal":"פיצול תא אופקית","splitVertical":"פיצול תא אנכית","title":"תכונות התא","cellType":"סוג התא","rowSpan":"מתיחת השורות","colSpan":"מתיחת התאים","wordWrap":"מניעת גלישת שורות","hAlign":"יישור אופקי","vAlign":"יישור אנכי","alignBaseline":"שורת בסיס","bgColor":"צבע רקע","borderColor":"צבע מסגרת","data":"מידע","header":"כותרת","yes":"כן","no":"לא","invalidWidth":"שדה רוחב התא חייב להיות מספר.","invalidHeight":"שדה גובה התא חייב להיות מספר.","invalidRowSpan":"שדה מתיחת השורות חייב להיות מספר שלם.","invalidColSpan":"שדה מתיחת העמודות חייב להיות מספר שלם.","chooseColor":"בחר"},"cellPad":"ריפוד תא","cellSpace":"מרווח תא","column":{"menu":"עמודה","insertBefore":"הוספת עמודה לפני","insertAfter":"הוספת עמודה אחרי","deleteColumn":"מחיקת עמודות"},"columns":"עמודות","deleteTable":"מחק טבלה","headers":"כותרות","headersBoth":"שניהם","headersColumn":"עמודה ראשונה","headersNone":"אין","headersRow":"שורה ראשונה","invalidBorder":"שדה גודל המסגרת חייב להיות מספר.","invalidCellPadding":"שדה ריפוד התאים חייב להיות מספר חיובי.","invalidCellSpacing":"שדה ריווח התאים חייב להיות מספר חיובי.","invalidCols":"שדה מספר העמודות חייב להיות מספר גדול מ 0.","invalidHeight":"שדה גובה הטבלה חייב להיות מספר.","invalidRows":"שדה מספר השורות חייב להיות מספר גדול מ 0.","invalidWidth":"שדה רוחב הטבלה חייב להיות מספר.","menu":"מאפייני טבלה","row":{"menu":"שורה","insertBefore":"הוספת שורה לפני","insertAfter":"הוספת שורה אחרי","deleteRow":"מחיקת שורות"},"rows":"שורות","summary":"תקציר","title":"מאפייני טבלה","toolbar":"טבלה","widthPc":"אחוז","widthPx":"פיקסלים","widthUnit":"יחידת רוחב"},"undo":{"redo":"חזרה על צעד אחרון","undo":"ביטול צעד אחרון"},"wsc":{"btnIgnore":"התעלמות","btnIgnoreAll":"התעלמות מהכל","btnReplace":"החלפה","btnReplaceAll":"החלפת הכל","btnUndo":"החזרה","changeTo":"שינוי ל","errorLoading":"שגיאה בהעלאת השירות: %s.","ieSpellDownload":"בודק האיות לא מותקן, האם להורידו?","manyChanges":"בדיקות איות הסתיימה: %1 מילים שונו","noChanges":"בדיקות איות הסתיימה: לא שונתה אף מילה","noMispell":"בדיקות איות הסתיימה: לא נמצאו שגיאות כתיב","noSuggestions":"- אין הצעות -","notAvailable":"לא נמצא שירות זמין.","notInDic":"לא נמצא במילון","oneChange":"בדיקות איות הסתיימה: שונתה מילה אחת","progress":"בודק האיות בתהליך בדיקה....","title":"בדיקת איות","toolbar":"בדיקת איות"}};assets/plugins/ckeditor/lang/ru.js000064400000046011152510440640013243 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.lang['ru']={"editor":"Визуальный текстовый редактор","common":{"editorHelp":"Нажмите ALT-0 для открытия справки","browseServer":"Выбор на сервере","url":"Ссылка","protocol":"Протокол","upload":"Загрузка файла","uploadSubmit":"Загрузить на сервер","image":"Изображение","flash":"Flash","form":"Форма","checkbox":"Чекбокс","radio":"Радиокнопка","textField":"Текстовое поле","textarea":"Многострочное текстовое поле","hiddenField":"Скрытое поле","button":"Кнопка","select":"Выпадающий список","imageButton":"Кнопка-изображение","notSet":"<не указано>","id":"Идентификатор","name":"Имя","langDir":"Направление текста","langDirLtr":"Слева направо (LTR)","langDirRtl":"Справа налево (RTL)","langCode":"Код языка","longDescr":"Длинное описание ссылки","cssClass":"Класс CSS","advisoryTitle":"Заголовок","cssStyle":"Стиль","ok":"ОК","cancel":"Отмена","close":"Закрыть","preview":"Предпросмотр","resize":"Перетащите для изменения размера","generalTab":"Основное","advancedTab":"Дополнительно","validateNumberFailed":"Это значение не является числом.","confirmNewPage":"Несохранённые изменения будут потеряны! Вы действительно желаете перейти на другую страницу?","confirmCancel":"Некоторые параметры были изменены. Вы уверены, что желаете закрыть без сохранения?","options":"Параметры","target":"Цель","targetNew":"Новое окно (_blank)","targetTop":"Главное окно (_top)","targetSelf":"Текущее окно (_self)","targetParent":"Родительское окно (_parent)","langDirLTR":"Слева направо (LTR)","langDirRTL":"Справа налево (RTL)","styles":"Стиль","cssClasses":"CSS классы","width":"Ширина","height":"Высота","align":"Выравнивание","alignLeft":"По левому краю","alignRight":"По правому краю","alignCenter":"По центру","alignTop":"Поверху","alignMiddle":"Посередине","alignBottom":"Понизу","invalidValue":"Недопустимое значение.","invalidHeight":"Высота задается числом.","invalidWidth":"Ширина задается числом.","invalidCssLength":"Значение, указанное в поле \"%1\", должно быть положительным целым числом. Допускается указание единиц меры CSS (px, %, in, cm, mm, em, ex, pt или pc).","invalidHtmlLength":"Значение, указанное в поле \"%1\", должно быть положительным целым числом. Допускается указание единиц меры HTML (px или %).","invalidInlineStyle":"Значение, указанное для стиля элемента, должно состоять из одной или нескольких пар данных в формате \"параметр : значение\", разделённых точкой с запятой.","cssLengthTooltip":"Введите значение в пикселях, либо число с корректной единицей меры CSS (px, %, in, cm, mm, em, ex, pt или pc).","unavailable":"%1, недоступно"},"about":{"copy":"Copyright © $1. Все права защищены.","dlgTitle":"О CKEditor","help":"$1 содержит подробную справку по использованию.","moreInfo":"Для получения информации о лицензии, пожалуйста, перейдите на наш сайт:","title":"О CKEditor","userGuide":"Руководство пользователя CKEditor"},"basicstyles":{"bold":"Полужирный","italic":"Курсив","strike":"Зачеркнутый","subscript":"Подстрочный индекс","superscript":"Надстрочный индекс","underline":"Подчеркнутый"},"blockquote":{"toolbar":"Цитата"},"clipboard":{"copy":"Копировать","copyError":"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по копированию текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+C).","cut":"Вырезать","cutError":"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по вырезке текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+X).","paste":"Вставить","pasteArea":"Зона для вставки","pasteMsg":"Пожалуйста, вставьте текст в зону ниже, используя клавиатуру (Ctrl/Cmd+V) и нажмите кнопку \"OK\".","securityMsg":"Настройки безопасности вашего браузера не разрешают редактору напрямую обращаться к буферу обмена. Вы должны вставить текст снова в это окно.","title":"Вставить"},"contextmenu":{"options":"Параметры контекстного меню"},"toolbar":{"toolbarCollapse":"Свернуть панель инструментов","toolbarExpand":"Развернуть панель инструментов","toolbarGroups":{"document":"Документ","clipboard":"Буфер обмена / Отмена действий","editing":"Корректировка","forms":"Формы","basicstyles":"Простые стили","paragraph":"Абзац","links":"Ссылки","insert":"Вставка","styles":"Стили","colors":"Цвета","tools":"Инструменты"},"toolbars":"Панели инструментов редактора"},"elementspath":{"eleLabel":"Путь элементов","eleTitle":"Элемент %1"},"format":{"label":"Форматирование","panelTitle":"Форматирование","tag_address":"Адрес","tag_div":"Обычное (div)","tag_h1":"Заголовок 1","tag_h2":"Заголовок 2","tag_h3":"Заголовок 3","tag_h4":"Заголовок 4","tag_h5":"Заголовок 5","tag_h6":"Заголовок 6","tag_p":"Обычное","tag_pre":"Моноширинное"},"horizontalrule":{"toolbar":"Вставить горизонтальную линию"},"image":{"alertUrl":"Пожалуйста, введите ссылку на изображение","alt":"Альтернативный текст","border":"Граница","btnUpload":"Загрузить на сервер","button2Img":"Вы желаете преобразовать это изображение-кнопку в обычное изображение?","hSpace":"Гориз. отступ","img2Button":"Вы желаете преобразовать это обычное изображение в изображение-кнопку?","infoTab":"Данные об изображении","linkTab":"Ссылка","lockRatio":"Сохранять пропорции","menu":"Свойства изображения","resetSize":"Вернуть обычные размеры","title":"Свойства изображения","titleButton":"Свойства изображения-кнопки","upload":"Загрузить","urlMissing":"Не указана ссылка на изображение.","vSpace":"Вертик. отступ","validateBorder":"Размер границ должен быть задан числом.","validateHSpace":"Горизонтальный отступ должен быть задан числом.","validateVSpace":"Вертикальный отступ должен быть задан числом."},"indent":{"indent":"Увеличить отступ","outdent":"Уменьшить отступ"},"fakeobjects":{"anchor":"Якорь","flash":"Flash анимация","hiddenfield":"Скрытое поле","iframe":"iFrame","unknown":"Неизвестный объект"},"link":{"acccessKey":"Клавиша доступа","advanced":"Дополнительно","advisoryContentType":"Тип содержимого","advisoryTitle":"Заголовок","anchor":{"toolbar":"Вставить / редактировать якорь","menu":"Изменить якорь","title":"Свойства якоря","name":"Имя якоря","errorName":"Пожалуйста, введите имя якоря","remove":"Удалить якорь"},"anchorId":"По идентификатору","anchorName":"По имени","charset":"Кодировка ресурса","cssClasses":"Классы CSS","emailAddress":"Email адрес","emailBody":"Текст сообщения","emailSubject":"Тема сообщения","id":"Идентификатор","info":"Информация о ссылке","langCode":"Код языка","langDir":"Направление текста","langDirLTR":"Слева направо (LTR)","langDirRTL":"Справа налево (RTL)","menu":"Редактировать ссылку","name":"Имя","noAnchors":"(В документе нет ни одного якоря)","noEmail":"Пожалуйста, введите email адрес","noUrl":"Пожалуйста, введите ссылку","other":"<другой>","popupDependent":"Зависимое (Netscape)","popupFeatures":"Параметры всплывающего окна","popupFullScreen":"Полноэкранное (IE)","popupLeft":"Отступ слева","popupLocationBar":"Панель адреса","popupMenuBar":"Панель меню","popupResizable":"Изменяемый размер","popupScrollBars":"Полосы прокрутки","popupStatusBar":"Строка состояния","popupToolbar":"Панель инструментов","popupTop":"Отступ сверху","rel":"Отношение","selectAnchor":"Выберите якорь","styles":"Стиль","tabIndex":"Последовательность перехода","target":"Цель","targetFrame":"<фрейм>","targetFrameName":"Имя целевого фрейма","targetPopup":"<всплывающее окно>","targetPopupName":"Имя всплывающего окна","title":"Ссылка","toAnchor":"Ссылка на якорь в тексте","toEmail":"Email","toUrl":"Ссылка","toolbar":"Вставить/Редактировать ссылку","type":"Тип ссылки","unlink":"Убрать ссылку","upload":"Загрузка"},"list":{"bulletedlist":"Вставить / удалить маркированный список","numberedlist":"Вставить / удалить нумерованный список"},"magicline":{"title":"Вставить здесь параграф"},"maximize":{"maximize":"Развернуть","minimize":"Свернуть"},"pastetext":{"button":"Вставить только текст","title":"Вставить только текст"},"pastefromword":{"confirmCleanup":"Текст, который вы желаете вставить, по всей видимости, был скопирован из Word. Следует ли очистить его перед вставкой?","error":"Невозможно очистить вставленные данные из-за внутренней ошибки","title":"Вставить из Word","toolbar":"Вставить из Word"},"removeformat":{"toolbar":"Убрать форматирование"},"sourcearea":{"toolbar":"Источник"},"specialchar":{"options":"Выбор специального символа","title":"Выберите специальный символ","toolbar":"Вставить специальный символ"},"scayt":{"about":"О SCAYT","aboutTab":"О SCAYT","addWord":"Добавить слово","allCaps":"Игнорировать слова из заглавных букв","dic_create":"Создать","dic_delete":"Удалить","dic_field_name":"Название словаря","dic_info":"Изначально, пользовательский словарь хранится в cookie, которые ограничены в размере. Когда словарь пользователя вырастает до размеров, что его невозможно хранить в cookie, он переносится на хранение на наш сервер. Чтобы сохранить ваш словарь на нашем сервере, вам следует указать название вашего словаря. Если у вас уже был словарь, который вы сохраняли на нашем сервере, то укажите здесь его название и нажмите кнопку Восстановить.","dic_rename":"Переименовать","dic_restore":"Восстановить","dictionariesTab":"Словари","disable":"Отключить SCAYT","emptyDic":"Вы должны указать название словаря.","enable":"Включить SCAYT","ignore":"Пропустить","ignoreAll":"Пропустить всё","ignoreDomainNames":"Игнорировать доменные имена","langs":"Языки","languagesTab":"Языки","mixedCase":"Игнорировать слова из букв в разном регистре","mixedWithDigits":"Игнорировать слова, содержащие цифры","moreSuggestions":"Ещё варианты","opera_title":"Не поддерживается Opera","options":"Настройки","optionsTab":"Параметры","title":"Проверка орфографии по мере ввода (SCAYT)","toggle":"Переключить SCAYT","noSuggestions":"Нет вариантов"},"stylescombo":{"label":"Стили","panelTitle":"Стили форматирования","panelTitle1":"Стили блока","panelTitle2":"Стили элемента","panelTitle3":"Стили объекта"},"table":{"border":"Размер границ","caption":"Заголовок","cell":{"menu":"Ячейка","insertBefore":"Вставить ячейку слева","insertAfter":"Вставить ячейку справа","deleteCell":"Удалить ячейки","merge":"Объединить ячейки","mergeRight":"Объединить с правой","mergeDown":"Объединить с нижней","splitHorizontal":"Разделить ячейку по горизонтали","splitVertical":"Разделить ячейку по вертикали","title":"Свойства ячейки","cellType":"Тип ячейки","rowSpan":"Объединяет строк","colSpan":"Объединяет колонок","wordWrap":"Перенос по словам","hAlign":"Горизонтальное выравнивание","vAlign":"Вертикальное выравнивание","alignBaseline":"По базовой линии","bgColor":"Цвет фона","borderColor":"Цвет границ","data":"Данные","header":"Заголовок","yes":"Да","no":"Нет","invalidWidth":"Ширина ячейки должна быть числом.","invalidHeight":"Высота ячейки должна быть числом.","invalidRowSpan":"Количество объединяемых строк должно быть задано числом.","invalidColSpan":"Количество объединяемых колонок должно быть задано числом.","chooseColor":"Выберите"},"cellPad":"Внутренний отступ ячеек","cellSpace":"Внешний отступ ячеек","column":{"menu":"Колонка","insertBefore":"Вставить колонку слева","insertAfter":"Вставить колонку справа","deleteColumn":"Удалить колонки"},"columns":"Колонки","deleteTable":"Удалить таблицу","headers":"Заголовки","headersBoth":"Сверху и слева","headersColumn":"Левая колонка","headersNone":"Без заголовков","headersRow":"Верхняя строка","invalidBorder":"Размер границ должен быть числом.","invalidCellPadding":"Внутренний отступ ячеек (cellpadding) должен быть числом.","invalidCellSpacing":"Внешний отступ ячеек (cellspacing) должен быть числом.","invalidCols":"Количество столбцов должно быть больше 0.","invalidHeight":"Высота таблицы должна быть числом.","invalidRows":"Количество строк должно быть больше 0.","invalidWidth":"Ширина таблицы должна быть числом.","menu":"Свойства таблицы","row":{"menu":"Строка","insertBefore":"Вставить строку сверху","insertAfter":"Вставить строку снизу","deleteRow":"Удалить строки"},"rows":"Строки","summary":"Итоги","title":"Свойства таблицы","toolbar":"Таблица","widthPc":"процентов","widthPx":"пикселей","widthUnit":"единица измерения"},"undo":{"redo":"Повторить","undo":"Отменить"},"wsc":{"btnIgnore":"Пропустить","btnIgnoreAll":"Пропустить всё","btnReplace":"Заменить","btnReplaceAll":"Заменить всё","btnUndo":"Отменить","changeTo":"Изменить на","errorLoading":"Произошла ошибка при подключении к серверу проверки орфографии: %s.","ieSpellDownload":"Модуль проверки орфографии не установлен. Хотите скачать его?","manyChanges":"Проверка орфографии завершена. Изменено слов: %1","noChanges":"Проверка орфографии завершена. Не изменено ни одного слова","noMispell":"Проверка орфографии завершена. Ошибок не найдено","noSuggestions":"- Варианты отсутствуют -","notAvailable":"Извините, но в данный момент сервис недоступен.","notInDic":"Отсутствует в словаре","oneChange":"Проверка орфографии завершена. Изменено одно слово","progress":"Орфография проверяется...","title":"Проверка орфографии","toolbar":"Проверить орфографию"}};assets/plugins/ckeditor/lang/gl.js000064400000031365152510440640013225 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.lang['gl']={"editor":"Editor de texto mellorado","common":{"editorHelp":"Prema ALT 0 para obter axuda","browseServer":"Examinar o servidor","url":"URL","protocol":"Protocolo","upload":"Enviar","uploadSubmit":"Enviar ao servidor","image":"Imaxe","flash":"Flash","form":"Formulario","checkbox":"Caixa de selección","radio":"Botón de opción","textField":"Campo de texto","textarea":"Área de texto","hiddenField":"Campo agochado","button":"Botón","select":"Campo de selección","imageButton":"Botón de imaxe","notSet":"","id":"ID","name":"Nome","langDir":"Dirección de escritura do idioma","langDirLtr":"Esquerda a dereita (LTR)","langDirRtl":"Dereita a esquerda (RTL)","langCode":"Código do idioma","longDescr":"Descrición completa do URL","cssClass":"Clases da folla de estilos","advisoryTitle":"Título","cssStyle":"Estilo","ok":"Aceptar","cancel":"Cancelar","close":"Pechar","preview":"Vista previa","resize":"Redimensionar","generalTab":"Xeral","advancedTab":"Avanzado","validateNumberFailed":"Este valor non é un número.","confirmNewPage":"Calquera cambio que non gardara neste contido perderase.\r\nConfirma que quere cargar unha páxina nova?","confirmCancel":"Algunhas das opcións foron cambiadas.\r\nConfirma que quere pechar o diálogo?","options":"Opcións","target":"Destino","targetNew":"Nova xanela (_blank)","targetTop":"Xanela principal (_top)","targetSelf":"Mesma xanela (_self)","targetParent":"Xanela superior (_parent)","langDirLTR":"Esquerda a dereita (LTR)","langDirRTL":"Dereita a esquerda (RTL)","styles":"Estilo","cssClasses":"Clases da folla de estilos","width":"Largo","height":"Alto","align":"Aliñamento","alignLeft":"Esquerda","alignRight":"Dereita","alignCenter":"Centro","alignTop":"Arriba","alignMiddle":"Centro","alignBottom":"Abaixo","invalidValue":"Valor incorrecto.","invalidHeight":"O alto debe ser un número.","invalidWidth":"O largo debe ser un número.","invalidCssLength":"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida CSS correcta (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida HTML correcta (px ou %).","invalidInlineStyle":"O valor especificado no estilo en liña debe consistir nunha ou máis tuplas co formato «nome : valor», separadas por punto e coma.","cssLengthTooltip":"Escriba un número para o valor en píxeles ou un número cunha unidade CSS correcta (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1, non dispoñíbel"},"about":{"copy":"Copyright © $1. Todos os dereitos reservados.","dlgTitle":"Sobre o CKEditor","help":"Consulte $1 para obter axuda.","moreInfo":"Para obter información sobre a licenza, visite o noso sitio web:","title":"Sobre o CKEditor","userGuide":"Guía do usuario do CKEditor"},"basicstyles":{"bold":"Negra","italic":"Cursiva","strike":"Riscado","subscript":"Subíndice","superscript":"Superíndice","underline":"Subliñado"},"blockquote":{"toolbar":"Cita"},"clipboard":{"copy":"Copiar","copyError":"Os axustes de seguranza do seu navegador non permiten que o editor realice automaticamente as tarefas de copia. Use o teclado para iso (Ctrl/Cmd+C).","cut":"Cortar","cutError":"Os axustes de seguranza do seu navegador non permiten que o editor realice automaticamente as tarefas de corte. Use o teclado para iso (Ctrl/Cmd+X).","paste":"Pegar","pasteArea":"Zona de pegado","pasteMsg":"Pegue dentro do seguinte cadro usando o teclado (Ctrl/Cmd+V) e prema en Aceptar","securityMsg":"Por mor da configuración de seguranza do seu navegador, o editor non ten acceso ao portapapeis. É necesario pegalo novamente nesta xanela.","title":"Pegar"},"contextmenu":{"options":"Opcións do menú contextual"},"toolbar":{"toolbarCollapse":"Contraer a barra de ferramentas","toolbarExpand":"Expandir a barra de ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeis/desfacer","editing":"Edición","forms":"Formularios","basicstyles":"Estilos básicos","paragraph":"Paragrafo","links":"Ligazóns","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Barras de ferramentas do editor"},"elementspath":{"eleLabel":"Ruta dos elementos","eleTitle":"Elemento %1"},"format":{"label":"Formato","panelTitle":"Formato do parágrafo","tag_address":"Enderezo","tag_div":"Normal (DIV)","tag_h1":"Enacabezado 1","tag_h2":"Encabezado 2","tag_h3":"Encabezado 3","tag_h4":"Encabezado 4","tag_h5":"Encabezado 5","tag_h6":"Encabezado 6","tag_p":"Normal","tag_pre":"Formatado"},"horizontalrule":{"toolbar":"Inserir unha liña horizontal"},"image":{"alertUrl":"Escriba o URL da imaxe","alt":"Texto alternativo","border":"Bordo","btnUpload":"Enviar ao servidor","button2Img":"Quere converter o botón da imaxe seleccionada nunha imaxe sinxela?","hSpace":"Esp.Horiz.","img2Button":"Quere converter a imaxe seleccionada nun botón de imaxe?","infoTab":"Información da imaxe","linkTab":"Ligazón","lockRatio":"Proporcional","menu":"Propiedades da imaxe","resetSize":"Tamaño orixinal","title":"Propiedades da imaxe","titleButton":"Propiedades do botón de imaxe","upload":"Cargar","urlMissing":"Non se atopa o URL da imaxe.","vSpace":"Esp.Vert.","validateBorder":"O bordo debe ser un número.","validateHSpace":"O espazado horizontal debe ser un número.","validateVSpace":"O espazado vertical debe ser un número."},"indent":{"indent":"Aumentar a sangría","outdent":"Reducir a sangría"},"fakeobjects":{"anchor":"Ancoraxe","flash":"Animación «Flash»","hiddenfield":"Campo agochado","iframe":"IFrame","unknown":"Obxecto descoñecido"},"link":{"acccessKey":"Chave de acceso","advanced":"Avanzado","advisoryContentType":"Tipo de contido informativo","advisoryTitle":"Título","anchor":{"toolbar":"Ancoraxe","menu":"Editar a ancoraxe","title":"Propiedades da ancoraxe","name":"Nome da ancoraxe","errorName":"Escriba o nome da ancoraxe","remove":"Retirar a ancoraxe"},"anchorId":"Polo ID do elemento","anchorName":"Polo nome da ancoraxe","charset":"Codificación do recurso ligado","cssClasses":"Clases da folla de estilos","emailAddress":"Enderezo de correo","emailBody":"Corpo da mensaxe","emailSubject":"Asunto da mensaxe","id":"ID","info":"Información da ligazón","langCode":"Código do idioma","langDir":"Dirección de escritura do idioma","langDirLTR":"Esquerda a dereita (LTR)","langDirRTL":"Dereita a esquerda (RTL)","menu":"Editar a ligazón","name":"Nome","noAnchors":"(Non hai ancoraxes dispoñíbeis no documento)","noEmail":"Escriba o enderezo de correo","noUrl":"Escriba a ligazón URL","other":"","popupDependent":"Dependente (Netscape)","popupFeatures":"Características da xanela emerxente","popupFullScreen":"Pantalla completa (IE)","popupLeft":"Posición esquerda","popupLocationBar":"Barra de localización","popupMenuBar":"Barra do menú","popupResizable":"Redimensionábel","popupScrollBars":"Barras de desprazamento","popupStatusBar":"Barra de estado","popupToolbar":"Barra de ferramentas","popupTop":"Posición superior","rel":"Relación","selectAnchor":"Seleccionar unha ancoraxe","styles":"Estilo","tabIndex":"Índice de tabulación","target":"Destino","targetFrame":"","targetFrameName":"Nome do marco de destino","targetPopup":"","targetPopupName":"Nome da xanela emerxente","title":"Ligazón","toAnchor":"Ligar coa ancoraxe no testo","toEmail":"Correo","toUrl":"URL","toolbar":"Ligazón","type":"Tipo de ligazón","unlink":"Eliminar a ligazón","upload":"Enviar"},"list":{"bulletedlist":"Inserir/retirar lista viñeteada","numberedlist":"Inserir/retirar lista numerada"},"magicline":{"title":"Inserir aquí o parágrafo"},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"pastetext":{"button":"Pegar como texto simple","title":"Pegar como texto simple"},"pastefromword":{"confirmCleanup":"O texto que quere pegar semella ser copiado desde o Word. Quere depuralo antes de pegalo?","error":"Non foi posíbel depurar os datos pegados por mor dun erro interno","title":"Pegar desde Word","toolbar":"Pegar desde Word"},"removeformat":{"toolbar":"Retirar o formato"},"sourcearea":{"toolbar":"Orixe"},"specialchar":{"options":"Opcións de caracteres especiais","title":"Seleccione un carácter especial","toolbar":"Inserir un carácter especial"},"scayt":{"about":"About SCAYT","aboutTab":"About","addWord":"Add Word","allCaps":"Ignore All-Caps Words","dic_create":"Create","dic_delete":"Delete","dic_field_name":"Dictionary name","dic_info":"Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.","dic_rename":"Rename","dic_restore":"Restore","dictionariesTab":"Dictionaries","disable":"Disable SCAYT","emptyDic":"Dictionary name should not be empty.","enable":"Enable SCAYT","ignore":"Ignore","ignoreAll":"Ignore All","ignoreDomainNames":"Ignore Domain Names","langs":"Languages","languagesTab":"Languages","mixedCase":"Ignore Words with Mixed Case","mixedWithDigits":"Ignore Words with Numbers","moreSuggestions":"More suggestions","opera_title":"Not supported by Opera","options":"Options","optionsTab":"Options","title":"Spell Check As You Type","toggle":"Toggle SCAYT","noSuggestions":"No suggestion"},"stylescombo":{"label":"Estilos","panelTitle":"Estilos de formatando","panelTitle1":"Estilos de bloque","panelTitle2":"Estilos de carácter","panelTitle3":"Estilos de obxecto"},"table":{"border":"Tamaño do bordo","caption":"Título","cell":{"menu":"Cela","insertBefore":"Inserir a cela á esquerda","insertAfter":"Inserir a cela á dereita","deleteCell":"Eliminar celas","merge":"Combinar celas","mergeRight":"Combinar á dereita","mergeDown":"Combinar cara abaixo","splitHorizontal":"Dividir a cela en horizontal","splitVertical":"Dividir a cela en vertical","title":"Propiedades da cela","cellType":"Tipo de cela","rowSpan":"Expandir filas","colSpan":"Expandir columnas","wordWrap":"Axustar ao contido","hAlign":"Aliñación horizontal","vAlign":"Aliñación vertical","alignBaseline":"Liña de base","bgColor":"Cor do fondo","borderColor":"Cor do bordo","data":"Datos","header":"Cabeceira","yes":"Si","no":"Non","invalidWidth":"O largo da cela debe ser un número.","invalidHeight":"O alto da cela debe ser un número.","invalidRowSpan":"A expansión de filas debe ser un número enteiro.","invalidColSpan":"A expansión de columnas debe ser un número enteiro.","chooseColor":"Escoller"},"cellPad":"Marxe interior da cela","cellSpace":"Marxe entre celas","column":{"menu":"Columna","insertBefore":"Inserir a columna á esquerda","insertAfter":"Inserir a columna á dereita","deleteColumn":"Borrar Columnas"},"columns":"Columnas","deleteTable":"Borrar Táboa","headers":"Cabeceiras","headersBoth":"Ambas","headersColumn":"Primeira columna","headersNone":"Ningún","headersRow":"Primeira fila","invalidBorder":"O tamaño do bordo debe ser un número.","invalidCellPadding":"A marxe interior debe ser un número positivo.","invalidCellSpacing":"A marxe entre celas debe ser un número positivo.","invalidCols":"O número de columnas debe ser un número maior que 0.","invalidHeight":"O alto da táboa debe ser un número.","invalidRows":"O número de filas debe ser un número maior que 0","invalidWidth":"O largo da táboa debe ser un número.","menu":"Propiedades da táboa","row":{"menu":"Fila","insertBefore":"Inserir a fila por riba","insertAfter":"Inserir a fila por baixo","deleteRow":"Eliminar filas"},"rows":"Filas","summary":"Resumo","title":"Propiedades da táboa","toolbar":"Taboa","widthPc":"porcentaxe","widthPx":"píxeles","widthUnit":"unidade do largo"},"undo":{"redo":"Refacer","undo":"Desfacer"},"wsc":{"btnIgnore":"Ignorar","btnIgnoreAll":"Ignorar Todas","btnReplace":"Substituir","btnReplaceAll":"Substituir Todas","btnUndo":"Desfacer","changeTo":"Cambiar a","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"O corrector ortográfico non está instalado. ¿Quere descargalo agora?","manyChanges":"Corrección ortográfica rematada: %1 verbas substituidas","noChanges":"Corrección ortográfica rematada: Non se substituiu nengunha verba","noMispell":"Corrección ortográfica rematada: Non se atoparon erros","noSuggestions":"- Sen candidatos -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Non está no diccionario","oneChange":"Corrección ortográfica rematada: Unha verba substituida","progress":"Corrección ortográfica en progreso...","title":"Spell Check","toolbar":"Corrección Ortográfica"}};assets/plugins/ckeditor/lang/af.js000064400000027137152510440640013213 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.lang['af']={"editor":"Teksverwerker","common":{"editorHelp":"Druk op ALT 0 vir hulp","browseServer":"Blaai op bediener","url":"URL","protocol":"Protokol","upload":"Oplaai","uploadSubmit":"Stuur na bediener","image":"Afbeelding","flash":"Flash","form":"Vorm","checkbox":"Merkhokkie","radio":"Radioknoppie","textField":"Teksveld","textarea":"Teks-area","hiddenField":"Blinde veld","button":"Knop","select":"Keuseveld","imageButton":"Afbeeldingsknop","notSet":"","id":"Id","name":"Naam","langDir":"Skryfrigting","langDirLtr":"Links na regs (LTR)","langDirRtl":"Regs na links (RTL)","langCode":"Taalkode","longDescr":"Lang beskrywing URL","cssClass":"CSS klasse","advisoryTitle":"Aanbevole titel","cssStyle":"Styl","ok":"OK","cancel":"Kanselleer","close":"Sluit","preview":"Voorbeeld","resize":"Sleep om te herskaal","generalTab":"Algemeen","advancedTab":"Gevorderd","validateNumberFailed":"Hierdie waarde is nie 'n getal nie.","confirmNewPage":"Alle wysiginge sal verlore gaan. Is u seker dat u 'n nuwe bladsy wil laai?","confirmCancel":"Sommige opsies is gewysig. Is u seker dat u hierdie dialoogvenster wil sluit?","options":"Opsies","target":"Doel","targetNew":"Nuwe venster (_blank)","targetTop":"Boonste venster (_top)","targetSelf":"Selfde venster (_self)","targetParent":"Oorspronklike venster (_parent)","langDirLTR":"Links na Regs (LTR)","langDirRTL":"Regs na Links (RTL)","styles":"Styl","cssClasses":"CSS klasse","width":"Breedte","height":"Hoogte","align":"Oplyn","alignLeft":"Links","alignRight":"Regs","alignCenter":"Sentreer","alignTop":"Bo","alignMiddle":"Middel","alignBottom":"Onder","invalidValue":"Invalid value.","invalidHeight":"Hoogte moet 'n getal wees","invalidWidth":"Breedte moet 'n getal wees.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1, nie beskikbaar nie"},"about":{"copy":"Kopiereg © $1. Alle regte voorbehou.","dlgTitle":"Info oor CKEditor","help":"Check $1 for help.","moreInfo":"Vir lisensie-informasie, besoek asb. ons webwerf:","title":"Info oor CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Vet","italic":"Skuins","strike":"Deurstreep","subscript":"Onderskrif","superscript":"Bo-skrif","underline":"Onderstreep"},"blockquote":{"toolbar":"Sitaatblok"},"clipboard":{"copy":"Kopiëer","copyError":"U blaaier se sekuriteitsinstelling belet die kopiëringsaksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+C).","cut":"Knip","cutError":"U blaaier se sekuriteitsinstelling belet die outomatiese knip-aksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+X).","paste":"Plak","pasteArea":"Plak-area","pasteMsg":"Plak die teks in die volgende teks-area met die sleutelbordkombinasie (Ctrl/Cmd+V) en druk OK.","securityMsg":"Weens u blaaier se sekuriteitsinstelling is data op die knipbord nie toeganklik nie. U kan dit eers weer in hierdie venster plak.","title":"Byvoeg"},"contextmenu":{"options":"Konteks Spyskaart-opsies"},"toolbar":{"toolbarCollapse":"Verklein werkbalk","toolbarExpand":"Vergroot werkbalk","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elemente-pad","eleTitle":"%1 element"},"format":{"label":"Opmaak","panelTitle":"Opmaak","tag_address":"Adres","tag_div":"Normaal (DIV)","tag_h1":"Opskrif 1","tag_h2":"Opskrif 2","tag_h3":"Opskrif 3","tag_h4":"Opskrif 4","tag_h5":"Opskrif 5","tag_h6":"Opskrif 6","tag_p":"Normaal","tag_pre":"Opgemaak"},"horizontalrule":{"toolbar":"Horisontale lyn invoeg"},"image":{"alertUrl":"Gee URL van afbeelding.","alt":"Alternatiewe teks","border":"Rand","btnUpload":"Stuur na bediener","button2Img":"Wil u die geselekteerde afbeeldingsknop vervang met 'n eenvoudige afbeelding?","hSpace":"HSpasie","img2Button":"Wil u die geselekteerde afbeelding vervang met 'n afbeeldingsknop?","infoTab":"Afbeelding informasie","linkTab":"Skakel","lockRatio":"Vaste proporsie","menu":"Afbeelding eienskappe","resetSize":"Herstel grootte","title":"Afbeelding eienskappe","titleButton":"Afbeeldingsknop eienskappe","upload":"Oplaai","urlMissing":"Die URL na die afbeelding ontbreek.","vSpace":"VSpasie","validateBorder":"Rand moet 'n heelgetal wees.","validateHSpace":"HSpasie moet 'n heelgetal wees.","validateVSpace":"VSpasie moet 'n heelgetal wees."},"indent":{"indent":"Vergroot inspring","outdent":"Verklein inspring"},"fakeobjects":{"anchor":"Anker","flash":"Flash animasie","hiddenfield":"Verborge veld","iframe":"IFrame","unknown":"Onbekende objek"},"link":{"acccessKey":"Toegangsleutel","advanced":"Gevorderd","advisoryContentType":"Aanbevole inhoudstipe","advisoryTitle":"Aanbevole titel","anchor":{"toolbar":"Anker byvoeg/verander","menu":"Anker-eienskappe","title":"Anker-eienskappe","name":"Ankernaam","errorName":"Voltooi die ankernaam asseblief","remove":"Remove Anchor"},"anchorId":"Op element Id","anchorName":"Op ankernaam","charset":"Karakterstel van geskakelde bron","cssClasses":"CSS klasse","emailAddress":"E-posadres","emailBody":"Berig-inhoud","emailSubject":"Berig-onderwerp","id":"Id","info":"Skakel informasie","langCode":"Taalkode","langDir":"Skryfrigting","langDirLTR":"Links na regs (LTR)","langDirRTL":"Regs na links (RTL)","menu":"Wysig skakel","name":"Naam","noAnchors":"(Geen ankers beskikbaar in dokument)","noEmail":"Gee die e-posadres","noUrl":"Gee die skakel se URL","other":"","popupDependent":"Afhanklik (Netscape)","popupFeatures":"Eienskappe van opspringvenster","popupFullScreen":"Volskerm (IE)","popupLeft":"Posisie links","popupLocationBar":"Adresbalk","popupMenuBar":"Spyskaartbalk","popupResizable":"Herskaalbaar","popupScrollBars":"Skuifbalke","popupStatusBar":"Statusbalk","popupToolbar":"Werkbalk","popupTop":"Posisie bo","rel":"Relationship","selectAnchor":"Kies 'n anker","styles":"Styl","tabIndex":"Tab indeks","target":"Doel","targetFrame":"","targetFrameName":"Naam van doelraam","targetPopup":"","targetPopupName":"Naam van opspringvenster","title":"Skakel","toAnchor":"Anker in bladsy","toEmail":"E-pos","toUrl":"URL","toolbar":"Skakel invoeg/wysig","type":"Skakelsoort","unlink":"Verwyder skakel","upload":"Oplaai"},"list":{"bulletedlist":"Ongenommerde lys","numberedlist":"Genommerde lys"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maksimaliseer","minimize":"Minimaliseer"},"pastetext":{"button":"Plak as eenvoudige teks","title":"Plak as eenvoudige teks"},"pastefromword":{"confirmCleanup":"Die teks wat u wil plak lyk asof dit uit Word gekopiëer is. Wil u dit eers skoonmaak voordat dit geplak word?","error":"Die geplakte teks kon nie skoongemaak word nie, weens 'n interne fout","title":"Plak vanuit Word","toolbar":"Plak vanuit Word"},"removeformat":{"toolbar":"Verwyder opmaak"},"sourcearea":{"toolbar":"Bron"},"specialchar":{"options":"Spesiale karakter-opsies","title":"Kies spesiale karakter","toolbar":"Voeg spesiaale karakter in"},"scayt":{"about":"SCAYT info","aboutTab":"Info","addWord":"Voeg woord by","allCaps":"Ignoreer woorde in hoofletters","dic_create":"Skep","dic_delete":"Verwijder","dic_field_name":"Naam van woordeboek","dic_info":"Aanvanklik word die gebruikerswoordeboek in 'n koekie gestoor. Koekies is egter beperk in grootte. Wanneer die gebruikerswoordeboek te groot vir 'n koekie geword het, kan dit op ons bediener gestoor word. Om u persoonlike woordeboek op ons bediener te stoor, gee asb. 'n naam vir u woordeboek. Indien u alreeds 'n gestoorde woordeboek het, tik die naam en kliek op die Herstel knop.","dic_rename":"Hernoem","dic_restore":"Herstel","dictionariesTab":"Woordeboeke","disable":"SCAYT af","emptyDic":"Woordeboeknaam mag nie leeg wees nie.","enable":"SCAYT aan","ignore":"Ignoreer","ignoreAll":"Ignoreer alles","ignoreDomainNames":"Ignoreer domeinname","langs":"Tale","languagesTab":"Tale","mixedCase":"Ignoreer woorde met hoof- en kleinletters","mixedWithDigits":"Ignoreer woorde met syfers","moreSuggestions":"Meer voorstelle","opera_title":"Nie ondersteun deur Opera nie","options":"Opsies","optionsTab":"Opsies","title":"Speltoets terwyl u tik","toggle":"SCAYT wissel aan/af","noSuggestions":"No suggestion"},"stylescombo":{"label":"Styl","panelTitle":"Opmaak style","panelTitle1":"Blok style","panelTitle2":"Inlyn style","panelTitle3":"Objek style"},"table":{"border":"Randbreedte","caption":"Naam","cell":{"menu":"Sel","insertBefore":"Voeg sel in voor","insertAfter":"Voeg sel in na","deleteCell":"Verwyder sel","merge":"Voeg selle saam","mergeRight":"Voeg saam na regs","mergeDown":"Voeg saam ondertoe","splitHorizontal":"Splits sel horisontaal","splitVertical":"Splits sel vertikaal","title":"Sel eienskappe","cellType":"Sel tipe","rowSpan":"Omspan rye","colSpan":"Omspan kolomme","wordWrap":"Woord terugloop","hAlign":"Horisontale oplyning","vAlign":"Vertikale oplyning","alignBaseline":"Basislyn","bgColor":"Agtergrondkleur","borderColor":"Randkleur","data":"Inhoud","header":"Opskrif","yes":"Ja","no":"Nee","invalidWidth":"Selbreedte moet 'n getal wees.","invalidHeight":"Selhoogte moet 'n getal wees.","invalidRowSpan":"Omspan rye moet 'n heelgetal wees.","invalidColSpan":"Omspan kolomme moet 'n heelgetal wees.","chooseColor":"Kies"},"cellPad":"Sel-spasie","cellSpace":"Sel-afstand","column":{"menu":"Kolom","insertBefore":"Voeg kolom in voor","insertAfter":"Voeg kolom in na","deleteColumn":"Verwyder kolom"},"columns":"Kolomme","deleteTable":"Verwyder tabel","headers":"Opskrifte","headersBoth":"Beide ","headersColumn":"Eerste kolom","headersNone":"Geen","headersRow":"Eerste ry","invalidBorder":"Randbreedte moet 'n getal wees.","invalidCellPadding":"Sel-spasie moet 'n getal wees.","invalidCellSpacing":"Sel-afstand moet 'n getal wees.","invalidCols":"Aantal kolomme moet 'n getal groter as 0 wees.","invalidHeight":"Tabelhoogte moet 'n getal wees.","invalidRows":"Aantal rye moet 'n getal groter as 0 wees.","invalidWidth":"Tabelbreedte moet 'n getal wees.","menu":"Tabel eienskappe","row":{"menu":"Ry","insertBefore":"Voeg ry in voor","insertAfter":"Voeg ry in na","deleteRow":"Verwyder ry"},"rows":"Rye","summary":"Opsomming","title":"Tabel eienskappe","toolbar":"Tabel","widthPc":"persent","widthPx":"piksels","widthUnit":"breedte-eenheid"},"undo":{"redo":"Oordoen","undo":"Ontdoen"},"wsc":{"btnIgnore":"Ignoreer","btnIgnoreAll":"Ignoreer alles","btnReplace":"Vervang","btnReplaceAll":"vervang alles","btnUndo":"Ontdoen","changeTo":"Verander na","errorLoading":"Fout by inlaai van diens: %s.","ieSpellDownload":"Speltoetser is nie geïnstalleer nie. Wil u dit nou aflaai?","manyChanges":"Klaar met speltoets: %1 woorde verander","noChanges":"Klaar met speltoets: Geen woorde verander nie","noMispell":"Klaar met speltoets: Geen foute nie","noSuggestions":"- Geen voorstel -","notAvailable":"Jammer, hierdie diens is nie nou beskikbaar nie.","notInDic":"Nie in woordeboek nie","oneChange":"Klaar met speltoets: Een woord verander","progress":"Spelling word getoets...","title":"Speltoetser","toolbar":"Speltoets"}};assets/plugins/ckeditor/lang/en-ca.js000064400000027035152510440640013605 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.lang['en-ca']={"editor":"Rich Text Editor","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"Some of the options have been changed. Are you sure to close the dialog?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Align","alignLeft":"Left","alignRight":"Right","alignCenter":"Centre","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1, unavailable"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (Ctrl/Cmd+V) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"","targetFrameName":"Target Frame Name","targetPopup":"","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"removeformat":{"toolbar":"Remove Format"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"scayt":{"about":"About SCAYT","aboutTab":"About","addWord":"Add Word","allCaps":"Ignore All-Caps Words","dic_create":"Create","dic_delete":"Delete","dic_field_name":"Dictionary name","dic_info":"Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.","dic_rename":"Rename","dic_restore":"Restore","dictionariesTab":"Dictionaries","disable":"Disable SCAYT","emptyDic":"Dictionary name should not be empty.","enable":"Enable SCAYT","ignore":"Ignore","ignoreAll":"Ignore All","ignoreDomainNames":"Ignore Domain Names","langs":"Languages","languagesTab":"Languages","mixedCase":"Ignore Words with Mixed Case","mixedWithDigits":"Ignore Words with Numbers","moreSuggestions":"More suggestions","opera_title":"Not supported by Opera","options":"Options","optionsTab":"Options","title":"Spell Check As You Type","toggle":"Toggle SCAYT","noSuggestions":"No suggestion"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a number.","invalidCellSpacing":"Cell spacing must be a number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"Redo","undo":"Undo"},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"}};assets/plugins/ckeditor/lang/zh.js000064400000026541152510440640013244 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.lang['zh']={"editor":"富文本編輯器","common":{"editorHelp":"按 ALT+0 以獲得幫助","browseServer":"瀏覽伺服器端","url":"URL","protocol":"通訊協定","upload":"上傳","uploadSubmit":"上傳至伺服器","image":"影像","flash":"Flash","form":"表單","checkbox":"核取方塊","radio":"選項按鈕","textField":"文字方塊","textarea":"文字區域","hiddenField":"隱藏欄位","button":"按鈕","select":"清單/選單","imageButton":"影像按鈕","notSet":"<尚未設定>","id":"ID","name":"名稱","langDir":"語言方向","langDirLtr":"由左而右 (LTR)","langDirRtl":"由右而左 (RTL)","langCode":"語言代碼","longDescr":"詳細 URL","cssClass":"樣式表類別","advisoryTitle":"標題","cssStyle":"樣式","ok":"確定","cancel":"取消","close":"关闭","preview":"预览","resize":"拖拽改變大小","generalTab":"一般","advancedTab":"進階","validateNumberFailed":"需要輸入數字格式","confirmNewPage":"現存的修改尚未儲存,要開新檔案?","confirmCancel":"部份選項尚未儲存,要關閉對話盒?","options":"选项","target":"目标","targetNew":"新窗口(_blank)","targetTop":"整页(_top)","targetSelf":"本窗口(_self)","targetParent":"父窗口(_parent)","langDirLTR":"由左而右 (LTR)","langDirRTL":"由右而左 (RTL)","styles":"樣式","cssClasses":"樣式表類別","width":"寬度","height":"高度","align":"對齊","alignLeft":"靠左對齊","alignRight":"靠右對齊","alignCenter":"置中","alignTop":"靠上對齊","alignMiddle":"置中對齊","alignBottom":"靠下對齊","invalidValue":"Invalid value.","invalidHeight":"高度必須為數字格式","invalidWidth":"寬度必須為數字格式","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1, 已關閉"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"關於 CKEditor","help":"Check $1 for help.","moreInfo":"訪問我們的網站以獲取更多關於協議的信息","title":"關於 CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"粗體","italic":"斜體","strike":"刪除線","subscript":"下標","superscript":"上標","underline":"底線"},"blockquote":{"toolbar":"引用文字"},"clipboard":{"copy":"複製","copyError":"瀏覽器的安全性設定不允許編輯器自動執行複製動作。請使用快捷鍵 (Ctrl/Cmd+C) 複製。","cut":"剪下","cutError":"瀏覽器的安全性設定不允許編輯器自動執行剪下動作。請使用快捷鍵 (Ctrl/Cmd+X) 剪下。","paste":"貼上","pasteArea":"Paste Area","pasteMsg":"請使用快捷鍵 (Ctrl/Cmd+V) 貼到下方區域中並按下 確定","securityMsg":"因為瀏覽器的安全性設定,本編輯器無法直接存取您的剪貼簿資料,請您自行在本視窗進行貼上動作。","title":"貼上"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"折叠工具栏","toolbarExpand":"展开工具栏","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"編輯器工具欄"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 元素"},"format":{"label":"格式","panelTitle":"格式","tag_address":"位址","tag_div":"一般 (DIV)","tag_h1":"標題 1","tag_h2":"標題 2","tag_h3":"標題 3","tag_h4":"標題 4","tag_h5":"標題 5","tag_h6":"標題 6","tag_p":"一般","tag_pre":"已格式化"},"horizontalrule":{"toolbar":"插入水平線"},"image":{"alertUrl":"請輸入影像 URL","alt":"替代文字","border":"邊框","btnUpload":"上傳至伺服器","button2Img":"要把影像按鈕改成影像嗎?","hSpace":"水平距離","img2Button":"要把影像改成影像按鈕嗎?","infoTab":"影像資訊","linkTab":"超連結","lockRatio":"等比例","menu":"影像屬性","resetSize":"重設為原大小","title":"影像屬性","titleButton":"影像按鈕屬性","upload":"上傳","urlMissing":"Image source URL is missing.","vSpace":"垂直距離","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"增加縮排","outdent":"減少縮排"},"fakeobjects":{"anchor":"錨點","flash":"Flash 動畫","hiddenfield":"隱藏欄位","iframe":"IFrame","unknown":"不明物件"},"link":{"acccessKey":"存取鍵","advanced":"進階","advisoryContentType":"內容類型","advisoryTitle":"標題","anchor":{"toolbar":"插入/編輯錨點","menu":"錨點屬性","title":"錨點屬性","name":"錨點名稱","errorName":"請輸入錨點名稱","remove":"Remove Anchor"},"anchorId":"依元件 ID","anchorName":"依錨點名稱","charset":"連結資源之編碼","cssClasses":"樣式表類別","emailAddress":"電子郵件","emailBody":"郵件內容","emailSubject":"郵件主旨","id":"ID","info":"超連結資訊","langCode":"語言方向","langDir":"語言方向","langDirLTR":"由左而右 (LTR)","langDirRTL":"由右而左 (RTL)","menu":"編輯超連結","name":"名稱","noAnchors":"(本文件尚無可用之錨點)","noEmail":"請輸入電子郵件位址","noUrl":"請輸入欲連結的 URL","other":"<其他>","popupDependent":"從屬 (NS)","popupFeatures":"快顯視窗屬性","popupFullScreen":"全螢幕 (IE)","popupLeft":"左","popupLocationBar":"網址列","popupMenuBar":"選單列","popupResizable":"可縮放","popupScrollBars":"捲軸","popupStatusBar":"狀態列","popupToolbar":"工具列","popupTop":"右","rel":"Relationship","selectAnchor":"請選擇錨點","styles":"樣式","tabIndex":"定位順序","target":"目標","targetFrame":"<框架>","targetFrameName":"目標框架名稱","targetPopup":"<快顯視窗>","targetPopupName":"快顯視窗名稱","title":"超連結","toAnchor":"本頁錨點","toEmail":"電子郵件","toUrl":"URL","toolbar":"插入/編輯超連結","type":"超連接類型","unlink":"移除超連結","upload":"上傳"},"list":{"bulletedlist":"項目清單","numberedlist":"編號清單"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"最大化","minimize":"最小化"},"pastetext":{"button":"貼為純文字格式","title":"貼為純文字格式"},"pastefromword":{"confirmCleanup":"您想貼上的文字似乎是自 Word 複製而來,請問您是否要先清除 Word 的格式後再行貼上?","error":"It was not possible to clean up the pasted data due to an internal error","title":"自 Word 貼上","toolbar":"自 Word 貼上"},"removeformat":{"toolbar":"清除格式"},"sourcearea":{"toolbar":"原始碼"},"specialchar":{"options":"Special Character Options","title":"請選擇特殊符號","toolbar":"插入特殊符號"},"scayt":{"about":"關於即時拼寫檢查","aboutTab":"關於","addWord":"添加單詞","allCaps":"Ignore All-Caps Words","dic_create":"Create","dic_delete":"Delete","dic_field_name":"Dictionary name","dic_info":"Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.","dic_rename":"Rename","dic_restore":"Restore","dictionariesTab":"字典","disable":"關閉即時拼寫檢查","emptyDic":"字典名不應為空.","enable":"啟用即時拼寫檢查","ignore":"忽略","ignoreAll":"全部忽略","ignoreDomainNames":"Ignore Domain Names","langs":"語言","languagesTab":"語言","mixedCase":"Ignore Words with Mixed Case","mixedWithDigits":"Ignore Words with Numbers","moreSuggestions":"更多拼寫建議","opera_title":"Not supported by Opera","options":"選項","optionsTab":"選項","title":"即時拼寫檢查","toggle":"啟用/關閉即時拼寫檢查","noSuggestions":"No suggestion"},"stylescombo":{"label":"樣式","panelTitle":"Formatting Styles","panelTitle1":"塊級元素樣式","panelTitle2":"內聯元素樣式","panelTitle3":"物件元素樣式"},"table":{"border":"邊框","caption":"標題","cell":{"menu":"儲存格","insertBefore":"向左插入儲存格","insertAfter":"向右插入儲存格","deleteCell":"刪除儲存格","merge":"合併儲存格","mergeRight":"向右合併儲存格","mergeDown":"向下合併儲存格","splitHorizontal":"橫向分割儲存格","splitVertical":"縱向分割儲存格","title":"儲存格屬性","cellType":"儲存格類別","rowSpan":"儲存格列數","colSpan":"儲存格欄數","wordWrap":"自動換行","hAlign":"水平對齊","vAlign":"垂直對齊","alignBaseline":"基線對齊","bgColor":"背景顏色","borderColor":"邊框顏色","data":"數據","header":"標題","yes":"是","no":"否","invalidWidth":"儲存格寬度必須為數字格式","invalidHeight":"儲存格高度必須為數字格式","invalidRowSpan":"儲存格列數必須為整數格式","invalidColSpan":"儲存格欄數度必須為整數格式","chooseColor":"Choose"},"cellPad":"內距","cellSpace":"間距","column":{"menu":"欄","insertBefore":"向左插入欄","insertAfter":"向右插入欄","deleteColumn":"刪除欄"},"columns":"欄數","deleteTable":"刪除表格","headers":"標題","headersBoth":"第一欄和第一列","headersColumn":"第一欄","headersNone":"無標題","headersRow":"第一列","invalidBorder":"邊框大小必須為數字格式","invalidCellPadding":"儲存格內距必須為數字格式","invalidCellSpacing":"儲存格間距必須為數字格式","invalidCols":"必須有一或更多的欄","invalidHeight":"表格高度必須為數字格式","invalidRows":"必須有一或更多的列","invalidWidth":"表格寬度必須為數字格式","menu":"表格屬性","row":{"menu":"列","insertBefore":"向上插入列","insertAfter":"向下插入列","deleteRow":"刪除列"},"rows":"列數","summary":"摘要","title":"表格屬性","toolbar":"表格","widthPc":"百分比","widthPx":"像素","widthUnit":"width unit"},"undo":{"redo":"重複","undo":"復原"},"wsc":{"btnIgnore":"忽略","btnIgnoreAll":"全部忽略","btnReplace":"取代","btnReplaceAll":"全部取代","btnUndo":"復原","changeTo":"更改為","errorLoading":"無法聯系侍服器: %s.","ieSpellDownload":"尚未安裝拼字檢查元件。您是否想要現在下載?","manyChanges":"拼字檢查完成:更改了 %1 個單字","noChanges":"拼字檢查完成:未更改任何單字","noMispell":"拼字檢查完成:未發現拼字錯誤","noSuggestions":"- 無建議值 -","notAvailable":"抱歉,服務目前暫不可用","notInDic":"不在字典中","oneChange":"拼字檢查完成:更改了 1 個單字","progress":"進行拼字檢查中…","title":"拼字檢查","toolbar":"拼字檢查"}};assets/plugins/ckeditor/lang/km.js000064400000047704152510440640013236 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.lang['km']={"editor":"ឧបករណ៍សរសេរអត្ថបទសម្បូរបែប","common":{"editorHelp":"ចុច ALT 0 សម្រាប់ជំនួយ","browseServer":"រកមើលក្នុងម៉ាស៊ីនបម្រើ","url":"URL","protocol":"ពិធីការ","upload":"ផ្ទុកឡើង","uploadSubmit":"បញ្ជូនទៅកាន់ម៉ាស៊ីនបម្រើ","image":"រូបភាព","flash":"Flash","form":"បែបបទ","checkbox":"ប្រអប់ធីក","radio":"ប៊ូតុងមូល","textField":"វាលអត្ថបទ","textarea":"Textarea","hiddenField":"វាលកំបាំង","button":"ប៊ូតុង","select":"វាលជម្រើស","imageButton":"ប៊ូតុងរូបភាព","notSet":"<មិនកំណត់>","id":"Id","name":"ឈ្មោះ","langDir":"ទិសដៅភាសា","langDirLtr":"ពីឆ្វេងទៅស្តាំ (LTR)","langDirRtl":"ពីស្តាំទៅឆ្វេង (RTL)","langCode":"លេខកូដភាសា","longDescr":"URL អធិប្បាយវែង","cssClass":"Stylesheet Classes","advisoryTitle":"ចំណងជើងណែនាំ","cssStyle":"រចនាបថ","ok":"ព្រម","cancel":"បោះបង់","close":"បិទ","preview":"មើលជាមុន","resize":"ប្ដូរទំហំ","generalTab":"ទូទៅ","advancedTab":"កម្រិតខ្ពស់","validateNumberFailed":"តម្លៃនេះពុំមែនជាលេខទេ។","confirmNewPage":"រាល់បន្លាស់ប្ដូរនានាដែលមិនទាន់រក្សាទុកក្នុងមាតិកានេះ នឹងត្រូវបាត់បង់។ តើអ្នកពិតជាចង់ផ្ទុកទំព័រថ្មីមែនទេ?","confirmCancel":"ការកំណត់មួយចំនួនត្រូវបានផ្លាស់ប្ដូរ។ តើអ្នកពិតជាចង់បិទប្រអប់នេះមែនទេ?","options":"ការកំណត់","target":"គោលដៅ","targetNew":"វីនដូថ្មី (_blank)","targetTop":"វីនដូលើគេ (_top)","targetSelf":"វីនដូដូចគ្នា (_self)","targetParent":"វីនដូមេ (_parent)","langDirLTR":"ពីឆ្វេងទៅស្តាំ(LTR)","langDirRTL":"ពីស្តាំទៅឆ្វេង(RTL)","styles":"រចនាបថ","cssClasses":"Stylesheet Classes","width":"ទទឹង","height":"កំពស់","align":"កំណត់ទីតាំង","alignLeft":"ខាងឆ្វង","alignRight":"ខាងស្តាំ","alignCenter":"កណ្តាល","alignTop":"ខាងលើ","alignMiddle":"កណ្តាល","alignBottom":"ខាងក្រោម","invalidValue":"តម្លៃមិនត្រឹមត្រូវ។","invalidHeight":"តម្លៃកំពស់ត្រូវតែជាលេខ។","invalidWidth":"តម្លៃទទឹងត្រូវតែជាលេខ។","invalidCssLength":"តម្លៃកំណត់សម្រាប់វាល \"%1\" ត្រូវតែជាលេខវិជ្ជមាន ដោយភ្ជាប់ឬមិនភ្ជាប់ជាមួយនឹងឯកតារង្វាស់របស់ CSS (px, %, in, cm, mm, em, ex, pt ឬ pc) ។","invalidHtmlLength":"តម្លៃកំណត់សម្រាប់វាល \"%1\" ត្រូវតែជាលេខវិជ្ជមាន ដោយភ្ជាប់ឬមិនភ្ជាប់ជាមួយនឹងឯកតារង្វាស់របស់ HTML (px ឬ %) ។","invalidInlineStyle":"តម្លៃកំណត់សម្រាប់រចនាបថក្នុងតួ ត្រូវតែមានមួយឬធាតុច្រើនដោយមានទ្រង់ទ្រាយជា \"ឈ្មោះ : តម្លៃ\" ហើយញែកចេញពីគ្នាដោយចុចក្បៀស។","cssLengthTooltip":"បញ្ចូលលេខសម្រាប់តម្លៃជាភិចសែល ឬលេខដែលមានឯកតាត្រឹមត្រូវរបស់ CSS (px, %, in, cm, mm, em, ex, pt ឬ pc) ។","unavailable":"%1, មិនមាន"},"about":{"copy":"រក្សាសិទ្ធិ © $1។ រក្សាសិទ្ធិគ្រប់បែបយ៉ាង។","dlgTitle":"អំពី CKEditor","help":"ពិនិត្យ $1 សម្រាប់ជំនួយ។","moreInfo":"សម្រាប់ព័ត៌មានអំពីអាជ្ញាបណញណ សូមមើលក្នុងគេហទំព័ររបស់យើង៖","title":"អំពី CKEditor","userGuide":"វិធីប្រើប្រាស់ CKEditor"},"basicstyles":{"bold":"ក្រាស់","italic":"ទ្រេត","strike":"គូសបន្ទាត់ចំកណ្ដាល","subscript":"អក្សរតូចក្រោម","superscript":"អក្សរតូចលើ","underline":"គូសបន្ទាត់ក្រោម"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"ចំលងយក","copyError":"ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះមិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ ចំលងអត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl/Cmd+C)។","cut":"កាត់យក","cutError":"ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះមិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ កាត់អត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl/Cmd+X) ។","paste":"ចំលងដាក់","pasteArea":"Paste Area","pasteMsg":"សូមចំលងអត្ថបទទៅដាក់ក្នុងប្រអប់ដូចខាងក្រោមដោយប្រើប្រាស់ ឃី (Ctrl/Cmd+V) ហើយចុច OK ។","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"ចំលងដាក់"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"បង្រួមរបារឧបករណ៍","toolbarExpand":"ពង្រីករបារឧបករណ៍","toolbarGroups":{"document":"ឯកសារ","clipboard":"Clipboard/មិនធ្វើវិញ","editing":"ការកែសម្រួល","forms":"បែបបទ","basicstyles":"រចនាបថមូលដ្ឋាន","paragraph":"កថាខណ្ឌ","links":"តំណ","insert":"បញ្ចូល","styles":"រចនាបថ","colors":"ពណ៌","tools":"ឧបករណ៍"},"toolbars":"របារឧបករណ៍កែសម្រួល"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"format":{"label":"រចនា","panelTitle":"រចនា","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"បន្ថែមបន្ទាត់ផ្តេក"},"image":{"alertUrl":"សូមសរសេរងាស័យដ្ឋានរបស់រូបភាព","alt":"អត្ថបទជំនួស","border":"ស៊ុម","btnUpload":"បញ្ជូនទៅកាន់ម៉ាស៊ីនផ្តល់សេវា","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"គំលាតទទឹង","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"ពត៌មានអំពីរូបភាព","linkTab":"ឈ្នាប់","lockRatio":"អត្រាឡុក","menu":"ការកំណត់រូបភាព","resetSize":"កំណត់ទំហំឡើងវិញ","title":"ការកំណត់រូបភាព","titleButton":"ការកំណត់ប៉ូតុនរូបភាព","upload":"ទាញយក","urlMissing":"Image source URL is missing.","vSpace":"គំលាតបណ្តោយ","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"បន្ថែមការចូលបន្ទាត់","outdent":"បន្ថយការចូលបន្ទាត់"},"fakeobjects":{"anchor":"បន្ថែម/កែប្រែ យុថ្កា","flash":"Flash Animation","hiddenfield":"ជួរលាក់","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"ឃី សំរាប់ចូល","advanced":"កំរិតខ្ពស់","advisoryContentType":"ប្រភេទអត្ថបទ ប្រឹក្សា","advisoryTitle":"ចំណងជើង ប្រឹក្សា","anchor":{"toolbar":"បន្ថែម/កែប្រែ យុថ្កា","menu":"ការកំណត់យុថ្កា","title":"ការកំណត់យុថ្កា","name":"ឈ្មោះយុទ្ធថ្កា","errorName":"សូមសរសេរ ឈ្មោះយុទ្ធថ្កា","remove":"Remove Anchor"},"anchorId":"តាម Id","anchorName":"តាមឈ្មោះរបស់យុថ្កា","charset":"លេខកូតអក្សររបស់ឈ្នាប់","cssClasses":"Stylesheet Classes","emailAddress":"អ៊ីមែល","emailBody":"អត្ថបទ","emailSubject":"ចំណងជើងអត្ថបទ","id":"Id","info":"ពត៌មានអំពីឈ្នាប់","langCode":"ទិសដៅភាសា","langDir":"ទិសដៅភាសា","langDirLTR":"ពីឆ្វេងទៅស្តាំ(LTR)","langDirRTL":"ពីស្តាំទៅឆ្វេង(RTL)","menu":"កែប្រែឈ្នាប់","name":"ឈ្មោះ","noAnchors":"(No anchors available in the document)","noEmail":"សូមសរសេរ អាស័យដ្ឋាន អ៊ីមែល","noUrl":"សូមសរសេរ អាស័យដ្ឋាន URL","other":"","popupDependent":"អាស្រ័យលើ (Netscape)","popupFeatures":"លក្ខណះរបស់វីនដូលលោត","popupFullScreen":"អេក្រុងពេញ(IE)","popupLeft":"ទីតាំងខាងឆ្វេង","popupLocationBar":"របា ទីតាំង","popupMenuBar":"របា មឺនុយ","popupResizable":"Resizable","popupScrollBars":"របា ទាញ","popupStatusBar":"របា ពត៌មាន","popupToolbar":"របា ឩបករណ៍","popupTop":"ទីតាំងខាងលើ","rel":"Relationship","selectAnchor":"ជ្រើសរើសយុថ្កា","styles":"ម៉ូត","tabIndex":"លេខ Tab","target":"គោលដៅ","targetFrame":"<ហ្វ្រេម>","targetFrameName":"ឈ្មោះហ្រ្វេមដែលជាគោលដៅ","targetPopup":"<វីនដូវ លោត>","targetPopupName":"ឈ្មោះវីនដូវលោត","title":"ឈ្នាប់","toAnchor":"យុថ្កានៅក្នុងទំព័រនេះ","toEmail":"អ៊ីមែល","toUrl":"URL","toolbar":"បន្ថែម/កែប្រែ ឈ្នាប់","type":"ប្រភេទឈ្នាប់","unlink":"លប់ឈ្នាប់","upload":"ទាញយក"},"list":{"bulletedlist":"បញ្ជីជារង្វង់មូល","numberedlist":"បញ្ជីជាអក្សរ"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"ពង្រីកអតិបរមា","minimize":"បង្រួមអប្បបរមា"},"pastetext":{"button":"បិទភ្ជាប់ជាអត្ថបទធម្មតា","title":"បិទភ្ជាប់ជាអត្ថបទធម្មតា"},"pastefromword":{"confirmCleanup":"អត្ថបទដែលអ្នកចង់បិទភ្ជាប់នេះ ទំនងដូចជាចម្លងមកពី Word។ តើអ្នកចង់សម្អាតវាមុនបិទភ្ជាប់ទេ?","error":"ដោយសារមានបញ្ហាផ្នែកក្នុងធ្វើឲ្យមិនអាចសម្អាតទិន្នន័យដែលបានបិទភ្ជាប់","title":"បិទភ្ជាប់ពី Word","toolbar":"បិទភ្ជាប់ពី Word"},"removeformat":{"toolbar":"ជម្រះទ្រង់ទ្រាយ"},"sourcearea":{"toolbar":"អក្សរកូដ"},"specialchar":{"options":"ជម្រើសតួអក្សរពិសេស","title":"រើសតួអក្សរពិសេស","toolbar":"បន្ថែមអក្សរពិសេស"},"scayt":{"about":"About SCAYT","aboutTab":"About","addWord":"Add Word","allCaps":"Ignore All-Caps Words","dic_create":"Create","dic_delete":"Delete","dic_field_name":"Dictionary name","dic_info":"Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.","dic_rename":"Rename","dic_restore":"Restore","dictionariesTab":"Dictionaries","disable":"Disable SCAYT","emptyDic":"Dictionary name should not be empty.","enable":"Enable SCAYT","ignore":"Ignore","ignoreAll":"Ignore All","ignoreDomainNames":"Ignore Domain Names","langs":"Languages","languagesTab":"Languages","mixedCase":"Ignore Words with Mixed Case","mixedWithDigits":"Ignore Words with Numbers","moreSuggestions":"More suggestions","opera_title":"Not supported by Opera","options":"Options","optionsTab":"Options","title":"Spell Check As You Type","toggle":"Toggle SCAYT","noSuggestions":"No suggestion"},"stylescombo":{"label":"រចនាបថ","panelTitle":"ទ្រង់ទ្រាយរចនាបថ","panelTitle1":"រចនាបថប្លក់","panelTitle2":"រចនាបថក្នុងជួរ","panelTitle3":"រចនាបថវត្ថុ"},"table":{"border":"ទំហំបន្ទាត់ស៊ុម","caption":"ចំណងជើង","cell":{"menu":"ក្រឡា","insertBefore":"បញ្ចូលក្រឡាពីមុខ","insertAfter":"បញ្ចូលក្រឡាពីក្រោយ","deleteCell":"លុបក្រឡា","merge":"បញ្ចូលក្រឡាចូលគ្នា","mergeRight":"បញ្ចូលគ្នាខាងស្ដាំ","mergeDown":"បញ្ចូលគ្នាចុះក្រោម","splitHorizontal":"ពុះក្រឡាផ្ដេក","splitVertical":"ពុះក្រឡាបញ្ឈរ","title":"លក្ខណៈក្រឡា","cellType":"ប្រភេទក្រឡា","rowSpan":"ចំនួនជួរដេកលាយចូលគ្នា","colSpan":"ចំនួនជួរឈរលាយចូលគ្នា","wordWrap":"រុំពាក្យ","hAlign":"ការតម្រឹមផ្ដេក","vAlign":"ការតម្រឹមបញ្ឈរ","alignBaseline":"ខ្សែបន្ទាត់គោល","bgColor":"ពណ៌ផ្ទៃក្រោយ","borderColor":"ពណ៌បន្ទាត់ស៊ុម","data":"ទិន្នន័យ","header":"ក្បាល","yes":"ព្រម","no":"ទេ","invalidWidth":"ទទឹងក្រឡាត្រូវតែជាលេខ។","invalidHeight":"កម្ពស់ក្រឡាត្រូវតែជាលេខ។","invalidRowSpan":"ចំនួនជួរដេកលាយចូលគ្នាត្រូវតែជាលេខទាំងអស់។","invalidColSpan":"ចំនួនជួរឈរលាយចូលគ្នាត្រូវតែជាលេខទាំងអស់។","chooseColor":"រើស"},"cellPad":"ចន្លោះក្រឡា","cellSpace":"គម្លាតក្រឡា","column":{"menu":"ជួរឈរ","insertBefore":"បញ្ចូលជួរឈរពីមុខ","insertAfter":"បញ្ចូលជួរឈរពីក្រោយ","deleteColumn":"លុបជួរឈរ"},"columns":"ជួរឈរ","deleteTable":"លុបតារាង","headers":"ក្បាល","headersBoth":"ទាំងពីរ","headersColumn":"ជួរឈរដំបូង","headersNone":"មិនមាន","headersRow":"ជួរដេកដំបូង","invalidBorder":"ទំហំបន្ទាត់ស៊ុមត្រូវតែជាលេខ។","invalidCellPadding":"ចន្លោះក្រឡាត្រូវតែជាលេខវិជ្ជមាន។","invalidCellSpacing":"គម្លាតក្រឡាត្រូវតែជាលេខវិជ្ជមាន។","invalidCols":"ចំនួនជួរឈរត្រូវតែជាលេខធំជាង 0។","invalidHeight":"កម្ពស់តារាងត្រូវតែជាលេខ","invalidRows":"ចំនួនជួរដេកត្រូវតែជាលេខធំជាង 0។","invalidWidth":"ទទឹងតារាងត្រូវតែជាលេខ។","menu":"លក្ខណៈតារាង","row":{"menu":"ជួរដេក","insertBefore":"បញ្ចូលជួរដេកពីមុខ","insertAfter":"បញ្ចូលជួរដេកពីក្រោយ","deleteRow":"លុបជួរដេក"},"rows":"ជួរដេក","summary":"សេចក្តីសង្ខេប","title":"លក្ខណៈតារាង","toolbar":"តារាង","widthPc":"ភាគរយ","widthPx":"ភីកសែល","widthUnit":"ឯកតាទទឹង"},"undo":{"redo":"ធ្វើឡើងវិញ","undo":"មិនធ្វើវិញ"},"wsc":{"btnIgnore":"មិនផ្លាស់ប្តូរ","btnIgnoreAll":"មិនផ្លាស់ប្តូរ ទាំងអស់","btnReplace":"ជំនួស","btnReplaceAll":"ជំនួសទាំងអស់","btnUndo":"សារឡើងវិញ","changeTo":"ផ្លាស់ប្តូរទៅ","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"ពុំមានកម្មវិធីពិនិត្យអក្ខរាវិរុទ្ធ ។ តើចង់ទាញយកពីណា?","manyChanges":"ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: %1 ពាក្យបានផ្លាស់ប្តូរ","noChanges":"ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពុំមានផ្លាស់ប្តូរ","noMispell":"ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: គ្មានកំហុស","noSuggestions":"- គ្មានសំណើរ -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"គ្មានក្នុងវចនានុក្រម","oneChange":"ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពាក្យមួយត្រូចបានផ្លាស់ប្តូរ","progress":"កំពុងពិនិត្យអក្ខរាវិរុទ្ធ...","title":"Spell Check","toolbar":"ពិនិត្យអក្ខរាវិរុទ្ធ"}};assets/plugins/ckeditor/lang/fi.js000064400000030520152510440640013211 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.lang['fi']={"editor":"Rikastekstieditori","common":{"editorHelp":"Paina ALT 0 nähdäksesi ohjeen","browseServer":"Selaa palvelinta","url":"Osoite","protocol":"Protokolla","upload":"Lisää tiedosto","uploadSubmit":"Lähetä palvelimelle","image":"Kuva","flash":"Flash-animaatio","form":"Lomake","checkbox":"Valintaruutu","radio":"Radiopainike","textField":"Tekstikenttä","textarea":"Tekstilaatikko","hiddenField":"Piilokenttä","button":"Painike","select":"Valintakenttä","imageButton":"Kuvapainike","notSet":"","id":"Tunniste","name":"Nimi","langDir":"Kielen suunta","langDirLtr":"Vasemmalta oikealle (LTR)","langDirRtl":"Oikealta vasemmalle (RTL)","langCode":"Kielikoodi","longDescr":"Pitkän kuvauksen URL","cssClass":"Tyyliluokat","advisoryTitle":"Avustava otsikko","cssStyle":"Tyyli","ok":"OK","cancel":"Peruuta","close":"Sulje","preview":"Esikatselu","resize":"Raahaa muuttaaksesi kokoa","generalTab":"Yleinen","advancedTab":"Lisäominaisuudet","validateNumberFailed":"Arvon pitää olla numero.","confirmNewPage":"Kaikki tallentamattomat muutokset tähän sisältöön menetetään. Oletko varma, että haluat ladata uuden sivun?","confirmCancel":"Jotkut asetuksista on muuttuneet. Oletko varma, että haluat sulkea valintaikkunan?","options":"Asetukset","target":"Kohde","targetNew":"Uusi ikkuna (_blank)","targetTop":"Päällimmäinen ikkuna (_top)","targetSelf":"Sama ikkuna (_self)","targetParent":"Ylemmän tason ikkuna (_parent)","langDirLTR":"Vasemmalta oikealle (LTR)","langDirRTL":"Oikealta vasemmalle (RTL)","styles":"Tyyli","cssClasses":"Tyylitiedoston luokat","width":"Leveys","height":"Korkeus","align":"Kohdistus","alignLeft":"Vasemmalle","alignRight":"Oikealle","alignCenter":"Keskelle","alignTop":"Ylös","alignMiddle":"Keskelle","alignBottom":"Alas","invalidValue":"Virheellinen arvo.","invalidHeight":"Korkeuden täytyy olla numero.","invalidWidth":"Leveyden täytyy olla numero.","invalidCssLength":"Kentän \"%1\" arvon täytyy olla positiivinen luku CSS mittayksikön (px, %, in, cm, mm, em, ex, pt tai pc) kanssa tai ilman.","invalidHtmlLength":"Kentän \"%1\" arvon täytyy olla positiivinen luku HTML mittayksikön (px tai %) kanssa tai ilman.","invalidInlineStyle":"Tyylille annetun arvon täytyy koostua yhdestä tai useammasta \"nimi : arvo\" parista, jotka ovat eroteltuna toisistaan puolipisteillä.","cssLengthTooltip":"Anna numeroarvo pikseleinä tai numeroarvo CSS mittayksikön kanssa (px, %, in, cm, mm, em, ex, pt, tai pc).","unavailable":"%1, ei saatavissa"},"about":{"copy":"Copyright © $1. Kaikki oikeuden pidätetään.","dlgTitle":"Tietoa CKEditorista","help":"Katso ohjeet: $1.","moreInfo":"Lisenssitiedot löytyvät kotisivuiltamme:","title":"Tietoa CKEditorista","userGuide":"CKEditorin käyttäjäopas"},"basicstyles":{"bold":"Lihavoitu","italic":"Kursivoitu","strike":"Yliviivattu","subscript":"Alaindeksi","superscript":"Yläindeksi","underline":"Alleviivattu"},"blockquote":{"toolbar":"Lainaus"},"clipboard":{"copy":"Kopioi","copyError":"Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).","cut":"Leikkaa","cutError":"Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).","paste":"Liitä","pasteArea":"Leikealue","pasteMsg":"Liitä painamalla (Ctrl+V) ja painamalla OK.","securityMsg":"Selaimesi turva-asetukset eivät salli editorin käyttää leikepöytää suoraan. Sinun pitää suorittaa liittäminen tässä ikkunassa.","title":"Liitä"},"contextmenu":{"options":"Pikavalikon ominaisuudet"},"toolbar":{"toolbarCollapse":"Kutista työkalupalkki","toolbarExpand":"Laajenna työkalupalkki","toolbarGroups":{"document":"Dokumentti","clipboard":"Leikepöytä/Kumoa","editing":"Muokkaus","forms":"Lomakkeet","basicstyles":"Perustyylit","paragraph":"Kappale","links":"Linkit","insert":"Lisää","styles":"Tyylit","colors":"Värit","tools":"Työkalut"},"toolbars":"Editorin työkalupalkit"},"elementspath":{"eleLabel":"Elementin polku","eleTitle":"%1 elementti"},"format":{"label":"Muotoilu","panelTitle":"Muotoilu","tag_address":"Osoite","tag_div":"Normaali (DIV)","tag_h1":"Otsikko 1","tag_h2":"Otsikko 2","tag_h3":"Otsikko 3","tag_h4":"Otsikko 4","tag_h5":"Otsikko 5","tag_h6":"Otsikko 6","tag_p":"Normaali","tag_pre":"Muotoiltu"},"horizontalrule":{"toolbar":"Lisää murtoviiva"},"image":{"alertUrl":"Kirjoita kuvan osoite (URL)","alt":"Vaihtoehtoinen teksti","border":"Kehys","btnUpload":"Lähetä palvelimelle","button2Img":"Haluatko muuntaa valitun kuvanäppäimen kuvaksi?","hSpace":"Vaakatila","img2Button":"Haluatko muuntaa valitun kuvan kuvanäppäimeksi?","infoTab":"Kuvan tiedot","linkTab":"Linkki","lockRatio":"Lukitse suhteet","menu":"Kuvan ominaisuudet","resetSize":"Alkuperäinen koko","title":"Kuvan ominaisuudet","titleButton":"Kuvapainikkeen ominaisuudet","upload":"Lisää kuva","urlMissing":"Kuvan lähdeosoite puuttuu.","vSpace":"Pystytila","validateBorder":"Kehyksen täytyy olla kokonaisluku.","validateHSpace":"HSpace-määrityksen täytyy olla kokonaisluku.","validateVSpace":"VSpace-määrityksen täytyy olla kokonaisluku."},"indent":{"indent":"Suurenna sisennystä","outdent":"Pienennä sisennystä"},"fakeobjects":{"anchor":"Ankkuri","flash":"Flash animaatio","hiddenfield":"Piilokenttä","iframe":"IFrame-kehys","unknown":"Tuntematon objekti"},"link":{"acccessKey":"Pikanäppäin","advanced":"Lisäominaisuudet","advisoryContentType":"Avustava sisällön tyyppi","advisoryTitle":"Avustava otsikko","anchor":{"toolbar":"Lisää ankkuri/muokkaa ankkuria","menu":"Ankkurin ominaisuudet","title":"Ankkurin ominaisuudet","name":"Nimi","errorName":"Ankkurille on kirjoitettava nimi","remove":"Poista ankkuri"},"anchorId":"Ankkurin ID:n mukaan","anchorName":"Ankkurin nimen mukaan","charset":"Linkitetty kirjaimisto","cssClasses":"Tyyliluokat","emailAddress":"Sähköpostiosoite","emailBody":"Viesti","emailSubject":"Aihe","id":"Tunniste","info":"Linkin tiedot","langCode":"Kielen suunta","langDir":"Kielen suunta","langDirLTR":"Vasemmalta oikealle (LTR)","langDirRTL":"Oikealta vasemmalle (RTL)","menu":"Muokkaa linkkiä","name":"Nimi","noAnchors":"(Ei ankkureita tässä dokumentissa)","noEmail":"Kirjoita sähköpostiosoite","noUrl":"Linkille on kirjoitettava URL","other":"","popupDependent":"Riippuva (Netscape)","popupFeatures":"Popup ikkunan ominaisuudet","popupFullScreen":"Täysi ikkuna (IE)","popupLeft":"Vasemmalta (px)","popupLocationBar":"Osoiterivi","popupMenuBar":"Valikkorivi","popupResizable":"Venytettävä","popupScrollBars":"Vierityspalkit","popupStatusBar":"Tilarivi","popupToolbar":"Vakiopainikkeet","popupTop":"Ylhäältä (px)","rel":"Suhde","selectAnchor":"Valitse ankkuri","styles":"Tyyli","tabIndex":"Tabulaattori indeksi","target":"Kohde","targetFrame":"","targetFrameName":"Kohdekehyksen nimi","targetPopup":"","targetPopupName":"Popup ikkunan nimi","title":"Linkki","toAnchor":"Ankkuri tässä sivussa","toEmail":"Sähköposti","toUrl":"Osoite","toolbar":"Lisää linkki/muokkaa linkkiä","type":"Linkkityyppi","unlink":"Poista linkki","upload":"Lisää tiedosto"},"list":{"bulletedlist":"Luettelomerkit","numberedlist":"Numerointi"},"magicline":{"title":"Lisää kappale tähän."},"maximize":{"maximize":"Suurenna","minimize":"Pienennä"},"pastetext":{"button":"Liitä tekstinä","title":"Liitä tekstinä"},"pastefromword":{"confirmCleanup":"Liittämäsi teksti näyttäisi olevan Word-dokumentista. Haluatko siivota sen ennen liittämistä? (Suositus: Kyllä)","error":"Liitetyn tiedon siivoaminen ei onnistunut sisäisen virheen takia","title":"Liitä Word-dokumentista","toolbar":"Liitä Word-dokumentista"},"removeformat":{"toolbar":"Poista muotoilu"},"sourcearea":{"toolbar":"Koodi"},"specialchar":{"options":"Erikoismerkin ominaisuudet","title":"Valitse erikoismerkki","toolbar":"Lisää erikoismerkki"},"scayt":{"about":"Tietoja oikoluvusta kirjoitetaessa","aboutTab":"Tietoa","addWord":"Lisää sana","allCaps":"Ohita sanat, jotka on kirjoitettu kokonaan isoilla kirjaimilla","dic_create":"Luo","dic_delete":"Poista","dic_field_name":"Sanakirjan nimi","dic_info":"Oletuksena sanakirjat tallennetaan evästeeseen, mutta evästeiden koko on kuitenkin rajallinen. Sanakirjan kasvaessa niin suureksi, ettei se enää mahdu evästeeseen, sanakirja täytyy tallentaa palvelimellemme. Tallentaaksesi sanakirjasi palvelimellemme tulee sinun antaa sille nimi. Jos olet jo tallentanut sanakirjan, anna sen nimi ja klikkaa Palauta-painiketta","dic_rename":"Nimeä uudelleen","dic_restore":"Palauta","dictionariesTab":"Sanakirjat","disable":"Poista käytöstä oikoluku kirjoitetaessa","emptyDic":"Sanakirjan nimi on annettava.","enable":"Ota käyttöön oikoluku kirjoitettaessa","ignore":"Ohita","ignoreAll":"Ohita kaikki","ignoreDomainNames":"Ohita verkkotunnukset","langs":"Kielet","languagesTab":"Kielet","mixedCase":"Ohita sanat, joissa on sekoitettu isoja ja pieniä kirjaimia","mixedWithDigits":"Ohita sanat, joissa on numeroita","moreSuggestions":"Lisää ehdotuksia","opera_title":"Opera ei tue tätä ominaisuutta","options":"Asetukset","optionsTab":"Asetukset","title":"Oikolue kirjoitettaessa","toggle":"Vaihda oikoluku kirjoittaessa tilaa","noSuggestions":"No suggestion"},"stylescombo":{"label":"Tyyli","panelTitle":"Muotoilujen tyylit","panelTitle1":"Lohkojen tyylit","panelTitle2":"Rivinsisäiset tyylit","panelTitle3":"Objektien tyylit"},"table":{"border":"Rajan paksuus","caption":"Otsikko","cell":{"menu":"Solu","insertBefore":"Lisää solu eteen","insertAfter":"Lisää solu perään","deleteCell":"Poista solut","merge":"Yhdistä solut","mergeRight":"Yhdistä oikealla olevan kanssa","mergeDown":"Yhdistä alla olevan kanssa","splitHorizontal":"Jaa solu vaakasuunnassa","splitVertical":"Jaa solu pystysuunnassa","title":"Solun ominaisuudet","cellType":"Solun tyyppi","rowSpan":"Rivin jatkuvuus","colSpan":"Solun jatkuvuus","wordWrap":"Rivitys","hAlign":"Horisontaali kohdistus","vAlign":"Vertikaali kohdistus","alignBaseline":"Alas (teksti)","bgColor":"Taustan väri","borderColor":"Reunan väri","data":"Data","header":"Ylätunniste","yes":"Kyllä","no":"Ei","invalidWidth":"Solun leveyden täytyy olla numero.","invalidHeight":"Solun korkeuden täytyy olla numero.","invalidRowSpan":"Rivin jatkuvuuden täytyy olla kokonaisluku.","invalidColSpan":"Solun jatkuvuuden täytyy olla kokonaisluku.","chooseColor":"Valitse"},"cellPad":"Solujen sisennys","cellSpace":"Solujen väli","column":{"menu":"Sarake","insertBefore":"Lisää sarake vasemmalle","insertAfter":"Lisää sarake oikealle","deleteColumn":"Poista sarakkeet"},"columns":"Sarakkeet","deleteTable":"Poista taulu","headers":"Ylätunnisteet","headersBoth":"Molemmat","headersColumn":"Ensimmäinen sarake","headersNone":"Ei","headersRow":"Ensimmäinen rivi","invalidBorder":"Reunan koon täytyy olla numero.","invalidCellPadding":"Solujen sisennyksen täytyy olla numero.","invalidCellSpacing":"Solujen välin täytyy olla numero.","invalidCols":"Sarakkeiden määrän täytyy olla suurempi kuin 0.","invalidHeight":"Taulun korkeuden täytyy olla numero.","invalidRows":"Rivien määrän täytyy olla suurempi kuin 0.","invalidWidth":"Taulun leveyden täytyy olla numero.","menu":"Taulun ominaisuudet","row":{"menu":"Rivi","insertBefore":"Lisää rivi yläpuolelle","insertAfter":"Lisää rivi alapuolelle","deleteRow":"Poista rivit"},"rows":"Rivit","summary":"Yhteenveto","title":"Taulun ominaisuudet","toolbar":"Taulu","widthPc":"prosenttia","widthPx":"pikseliä","widthUnit":"leveysyksikkö"},"undo":{"redo":"Toista","undo":"Kumoa"},"wsc":{"btnIgnore":"Jätä huomioimatta","btnIgnoreAll":"Jätä kaikki huomioimatta","btnReplace":"Korvaa","btnReplaceAll":"Korvaa kaikki","btnUndo":"Kumoa","changeTo":"Vaihda","errorLoading":"Virhe ladattaessa oikolukupalvelua isännältä: %s.","ieSpellDownload":"Oikeinkirjoituksen tarkistusta ei ole asennettu. Haluatko ladata sen nyt?","manyChanges":"Tarkistus valmis: %1 sanaa muutettiin","noChanges":"Tarkistus valmis: Yhtään sanaa ei muutettu","noMispell":"Tarkistus valmis: Ei virheitä","noSuggestions":"Ei ehdotuksia","notAvailable":"Valitettavasti oikoluku ei ole käytössä tällä hetkellä.","notInDic":"Ei sanakirjassa","oneChange":"Tarkistus valmis: Yksi sana muutettiin","progress":"Tarkistus käynnissä...","title":"Oikoluku","toolbar":"Tarkista oikeinkirjoitus"}};assets/plugins/ckeditor/lang/sv.js000064400000027544152510440640013257 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.lang['sv']={"editor":"Rich Text Editor","common":{"editorHelp":"Tryck ALT 0 för hjälp","browseServer":"Bläddra på server","url":"URL","protocol":"Protokoll","upload":"Ladda upp","uploadSubmit":"Skicka till server","image":"Bild","flash":"Flash","form":"Formulär","checkbox":"Kryssruta","radio":"Alternativknapp","textField":"Textfält","textarea":"Textruta","hiddenField":"Dolt fält","button":"Knapp","select":"Flervalslista","imageButton":"Bildknapp","notSet":"","id":"Id","name":"Namn","langDir":"Språkriktning","langDirLtr":"Vänster till Höger (VTH)","langDirRtl":"Höger till Vänster (HTV)","langCode":"Språkkod","longDescr":"URL-beskrivning","cssClass":"Stilmall","advisoryTitle":"Titel","cssStyle":"Stilmall","ok":"OK","cancel":"Avbryt","close":"Stäng","preview":"Förhandsgranska","resize":"Dra för att ändra storlek","generalTab":"Allmänt","advancedTab":"Avancerad","validateNumberFailed":"Värdet är inte ett nummer.","confirmNewPage":"Alla ändringar i innehållet kommer att förloras. Är du säker på att du vill ladda en ny sida?","confirmCancel":"Några av alternativen har ändrats. Är du säker på att du vill stänga dialogrutan?","options":"Alternativ","target":"Mål","targetNew":"Nytt fönster (_blank)","targetTop":"Översta fönstret (_top)","targetSelf":"Samma fönster (_self)","targetParent":"Föregående fönster (_parent)","langDirLTR":"Vänster till höger (LTR)","langDirRTL":"Höger till vänster (RTL)","styles":"Stil","cssClasses":"Stilmallar","width":"Bredd","height":"Höjd","align":"Justering","alignLeft":"Vänster","alignRight":"Höger","alignCenter":"Centrerad","alignTop":"Överkant","alignMiddle":"Mitten","alignBottom":"Nederkant","invalidValue":"Felaktigt värde.","invalidHeight":"Höjd måste vara ett nummer.","invalidWidth":"Bredd måste vara ett nummer.","invalidCssLength":"Värdet för fältet \"%1\" måste vara ett positivt nummer med eller utan CSS-mätenheter (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Värdet för fältet \"%1\" måste vara ett positivt nummer med eller utan godkända HTML-mätenheter (px eller %).","invalidInlineStyle":"Det angivna värdet för style måste innehålla en eller flera tupler separerade med semikolon i följande format: \"name : value\"","cssLengthTooltip":"Ange ett nummer i pixlar eller ett nummer men godkänd CSS-mätenhet (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1, Ej tillgänglig"},"about":{"copy":"Copyright © $1. Alla rättigheter reserverade.","dlgTitle":"Om CKEditor","help":"Se $1 för hjälp.","moreInfo":"För information av licensiering besök vår hemsida:","title":"Om CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Genomstruken","subscript":"Nedsänkta tecken","superscript":"Upphöjda tecken","underline":"Understruken"},"blockquote":{"toolbar":"Blockcitat"},"clipboard":{"copy":"Kopiera","copyError":"Säkerhetsinställningar i Er webbläsare tillåter inte åtgärden kopiera. Använd (Ctrl/Cmd+C) istället.","cut":"Klipp ut","cutError":"Säkerhetsinställningar i Er webbläsare tillåter inte åtgärden klipp ut. Använd (Ctrl/Cmd+X) istället.","paste":"Klistra in","pasteArea":"Paste Area","pasteMsg":"Var god och klistra in Er text i rutan nedan genom att använda (Ctrl/Cmd+V) klicka sen på OK.","securityMsg":"På grund av din webbläsares säkerhetsinställningar kan verktyget inte få åtkomst till urklippsdatan. Var god och använd detta fönster istället.","title":"Klistra in"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Dölj verktygsfält","toolbarExpand":"Visa verktygsfält","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Redigera verktygsfält"},"elementspath":{"eleLabel":"Elementets sökväg","eleTitle":"%1 element"},"format":{"label":"Teckenformat","panelTitle":"Teckenformat","tag_address":"Adress","tag_div":"Normal (DIV)","tag_h1":"Rubrik 1","tag_h2":"Rubrik 2","tag_h3":"Rubrik 3","tag_h4":"Rubrik 4","tag_h5":"Rubrik 5","tag_h6":"Rubrik 6","tag_p":"Normal","tag_pre":"Formaterad"},"horizontalrule":{"toolbar":"Infoga horisontal linje"},"image":{"alertUrl":"Var god och ange bildens URL","alt":"Alternativ text","border":"Kant","btnUpload":"Skicka till server","button2Img":"Vill du omvandla den valda bildknappen på en enkel bild?","hSpace":"Horis. marginal","img2Button":"Vill du omvandla den valda bildknappen på en enkel bild?","infoTab":"Bildinformation","linkTab":"Länk","lockRatio":"Lås höjd/bredd förhållanden","menu":"Bildegenskaper","resetSize":"Återställ storlek","title":"Bildegenskaper","titleButton":"Egenskaper för bildknapp","upload":"Ladda upp","urlMissing":"Bildkällans URL saknas.","vSpace":"Vert. marginal","validateBorder":"Kantlinje måste vara ett heltal.","validateHSpace":"HSpace måste vara ett heltal.","validateVSpace":"VSpace måste vara ett heltal."},"indent":{"indent":"Öka indrag","outdent":"Minska indrag"},"fakeobjects":{"anchor":"Ankare","flash":"Flashanimation","hiddenfield":"Gömt fält","iframe":"iFrame","unknown":"Okänt objekt"},"link":{"acccessKey":"Behörighetsnyckel","advanced":"Avancerad","advisoryContentType":"Innehållstyp","advisoryTitle":"Titel","anchor":{"toolbar":"Infoga/Redigera ankarlänk","menu":"Egenskaper för ankarlänk","title":"Egenskaper för ankarlänk","name":"Ankarnamn","errorName":"Var god ange ett ankarnamn","remove":"Radera ankare"},"anchorId":"efter objektid","anchorName":"efter ankarnamn","charset":"Teckenuppställning","cssClasses":"Stilmall","emailAddress":"E-postadress","emailBody":"Innehåll","emailSubject":"Ämne","id":"Id","info":"Länkinformation","langCode":"Språkriktning","langDir":"Språkriktning","langDirLTR":"Vänster till höger (VTH)","langDirRTL":"Höger till vänster (HTV)","menu":"Redigera länk","name":"Namn","noAnchors":"(Inga ankare kunde hittas)","noEmail":"Var god ange E-postadress","noUrl":"Var god ange länkens URL","other":"","popupDependent":"Beroende (endast Netscape)","popupFeatures":"Popup-fönstrets egenskaper","popupFullScreen":"Helskärm (endast IE)","popupLeft":"Position från vänster","popupLocationBar":"Adressfält","popupMenuBar":"Menyfält","popupResizable":"Resizable","popupScrollBars":"Scrolllista","popupStatusBar":"Statusfält","popupToolbar":"Verktygsfält","popupTop":"Position från sidans topp","rel":"Förhållande","selectAnchor":"Välj ett ankare","styles":"Stilmall","tabIndex":"Tabindex","target":"Mål","targetFrame":"","targetFrameName":"Målets ramnamn","targetPopup":"","targetPopupName":"Popup-fönstrets namn","title":"Länk","toAnchor":"Länk till ankare i texten","toEmail":"E-post","toUrl":"URL","toolbar":"Infoga/Redigera länk","type":"Länktyp","unlink":"Radera länk","upload":"Ladda upp"},"list":{"bulletedlist":"Punktlista","numberedlist":"Numrerad lista"},"magicline":{"title":"Infoga paragraf här"},"maximize":{"maximize":"Maximera","minimize":"Minimera"},"pastetext":{"button":"Klistra in som vanlig text","title":"Klistra in som vanlig text"},"pastefromword":{"confirmCleanup":"Texten du vill klistra in verkar vara kopierad från Word. Vill du rensa den innan du klistrar in den?","error":"Det var inte möjligt att städa upp den inklistrade data på grund av ett internt fel","title":"Klistra in från Word","toolbar":"Klistra in från Word"},"removeformat":{"toolbar":"Radera formatering"},"sourcearea":{"toolbar":"Källa"},"specialchar":{"options":"Alternativ för utökade tecken","title":"Välj utökat tecken","toolbar":"Klistra in utökat tecken"},"scayt":{"about":"Om SCAYT","aboutTab":"Om","addWord":"Lägg till ord","allCaps":"Ignorera alla ord med enbart versaler","dic_create":"Skapa","dic_delete":"Ta bort","dic_field_name":"Ordlistans namn","dic_info":"Inledningsvis lagras ordlistan i en cookie. När ordlista växer till en punkt där det inte kan lagras i en cookie, lagras den på vår server. För att lagra din personliga ordlista på vår server du ska ange ett namn för din ordbok. Om du redan har en lagrad ordbok, skriv namnet och klicka på knappen Återställ.","dic_rename":"Byt namn","dic_restore":"Återställ","dictionariesTab":"Ordlistor","disable":"Inaktivera SCAYT","emptyDic":"Ordlistans namn får ej vara tomt.","enable":"Aktivera SCAYT","ignore":"Ignorera","ignoreAll":"Ignorera alla","ignoreDomainNames":"Ignorera domännamn","langs":"Språk","languagesTab":"Språk","mixedCase":"Ignorera ord med blandat shiftläge","mixedWithDigits":"Ignorera ord med nummer","moreSuggestions":"Fler förslag","opera_title":"Stöds ej av Opera","options":"Inställningar","optionsTab":"Inställningar","title":"Stavningskontroll medan du skriver","toggle":"Växla SCAYT","noSuggestions":"No suggestion"},"stylescombo":{"label":"Anpassad stil","panelTitle":"Formatmallar","panelTitle1":"Blockstil","panelTitle2":"Inbäddad stil","panelTitle3":"Objektets stil"},"table":{"border":"Kantstorlek","caption":"Rubrik","cell":{"menu":"Cell","insertBefore":"Lägg till cell före","insertAfter":"Lägg till cell efter","deleteCell":"Radera celler","merge":"Sammanfoga celler","mergeRight":"Sammanfoga höger","mergeDown":"Sammanfoga ner","splitHorizontal":"Dela cell horisontellt","splitVertical":"Dela cell vertikalt","title":"Egenskaper för cell","cellType":"Celltyp","rowSpan":"Rad spann","colSpan":"Kolumnen spann","wordWrap":"Radbrytning","hAlign":"Horisontell justering","vAlign":"Vertikal justering","alignBaseline":"Baslinje","bgColor":"Bakgrundsfärg","borderColor":"Ramfärg","data":"Data","header":"Rubrik","yes":"Ja","no":"Nej","invalidWidth":"Cellens bredd måste vara ett nummer.","invalidHeight":"Cellens höjd måste vara ett nummer.","invalidRowSpan":"Radutvidgning måste vara ett heltal.","invalidColSpan":"Kolumn måste vara ett heltal.","chooseColor":"Välj"},"cellPad":"Cellutfyllnad","cellSpace":"Cellavstånd","column":{"menu":"Kolumn","insertBefore":"Lägg till kolumn före","insertAfter":"Lägg till kolumn efter","deleteColumn":"Radera kolumn"},"columns":"Kolumner","deleteTable":"Radera tabell","headers":"Rubriker","headersBoth":"Båda","headersColumn":"Första kolumnen","headersNone":"Ingen","headersRow":"Första raden","invalidBorder":"Ram måste vara ett nummer.","invalidCellPadding":"Luft i cell måste vara ett nummer.","invalidCellSpacing":"Luft i cell måste vara ett nummer.","invalidCols":"Antal kolumner måste vara ett nummer större än 0.","invalidHeight":"Tabellens höjd måste vara ett nummer.","invalidRows":"Antal rader måste vara större än 0.","invalidWidth":"Tabell måste vara ett nummer.","menu":"Tabellegenskaper","row":{"menu":"Rad","insertBefore":"Lägg till rad före","insertAfter":"Lägg till rad efter","deleteRow":"Radera rad"},"rows":"Rader","summary":"Sammanfattning","title":"Tabellegenskaper","toolbar":"Tabell","widthPc":"procent","widthPx":"pixlar","widthUnit":"enhet bredd"},"undo":{"redo":"Gör om","undo":"Ångra"},"wsc":{"btnIgnore":"Ignorera","btnIgnoreAll":"Ignorera alla","btnReplace":"Ersätt","btnReplaceAll":"Ersätt alla","btnUndo":"Ångra","changeTo":"Ändra till","errorLoading":"Tjänsten är ej tillgänglig: %s.","ieSpellDownload":"Stavningskontrollen är ej installerad. Vill du göra det nu?","manyChanges":"Stavningskontroll slutförd: %1 ord rättades.","noChanges":"Stavningskontroll slutförd: Inga ord rättades.","noMispell":"Stavningskontroll slutförd: Inga stavfel påträffades.","noSuggestions":"- Förslag saknas -","notAvailable":"Tyvärr är tjänsten ej tillgänglig nu","notInDic":"Saknas i ordlistan","oneChange":"Stavningskontroll slutförd: Ett ord rättades.","progress":"Stavningskontroll pågår...","title":"Kontrollera stavning","toolbar":"Stavningskontroll"}};assets/plugins/ckeditor/lang/ms.js000064400000027423152510440640013242 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.lang['ms']={"editor":"Rich Text Editor","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protokol","upload":"Muat Naik","uploadSubmit":"Hantar ke Server","image":"Gambar","flash":"Flash","form":"Borang","checkbox":"Checkbox","radio":"Butang Radio","textField":"Text Field","textarea":"Textarea","hiddenField":"Field Tersembunyi","button":"Butang","select":"Field Pilihan","imageButton":"Butang Bergambar","notSet":"","id":"Id","name":"Nama","langDir":"Arah Tulisan","langDirLtr":"Kiri ke Kanan (LTR)","langDirRtl":"Kanan ke Kiri (RTL)","langCode":"Kod Bahasa","longDescr":"Butiran Panjang URL","cssClass":"Kelas-kelas Stylesheet","advisoryTitle":"Tajuk Makluman","cssStyle":"Stail","ok":"OK","cancel":"Batal","close":"Close","preview":"Prebiu","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"Some of the options have been changed. Are you sure to close the dialog?","options":"Options","target":"Sasaran","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","styles":"Stail","cssClasses":"Kelas-kelas Stylesheet","width":"Lebar","height":"Tinggi","align":"Jajaran","alignLeft":"Kiri","alignRight":"Kanan","alignCenter":"Tengah","alignTop":"Atas","alignMiddle":"Pertengahan","alignBottom":"Bawah","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1, unavailable"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Salin","copyError":"Keselamatan perisian browser anda tidak membenarkan operasi salinan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+C).","cut":"Potong","cutError":"Keselamatan perisian browser anda tidak membenarkan operasi suntingan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+X).","paste":"Tampal","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (Ctrl/Cmd+V) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Tampal"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Alamat","tag_div":"Perenggan (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Telah Diformat"},"horizontalrule":{"toolbar":"Masukkan Garisan Membujur"},"image":{"alertUrl":"Sila taip URL untuk fail gambar","alt":"Text Alternatif","border":"Border","btnUpload":"Hantar ke Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Ruang Melintang","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Info Imej","linkTab":"Sambungan","lockRatio":"Tetapkan Nisbah","menu":"Ciri-ciri Imej","resetSize":"Saiz Set Semula","title":"Ciri-ciri Imej","titleButton":"Ciri-ciri Butang Bergambar","upload":"Muat Naik","urlMissing":"Image source URL is missing.","vSpace":"Ruang Menegak","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Tambahkan Inden","outdent":"Kurangkan Inden"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Kunci Akses","advanced":"Advanced","advisoryContentType":"Jenis Kandungan Makluman","advisoryTitle":"Tajuk Makluman","anchor":{"toolbar":"Masukkan/Sunting Pautan","menu":"Ciri-ciri Pautan","title":"Ciri-ciri Pautan","name":"Nama Pautan","errorName":"Sila taip nama pautan","remove":"Remove Anchor"},"anchorId":"dengan menggunakan ID elemen","anchorName":"dengan menggunakan nama pautan","charset":"Linked Resource Charset","cssClasses":"Kelas-kelas Stylesheet","emailAddress":"Alamat E-Mail","emailBody":"Isi Kandungan Mesej","emailSubject":"Subjek Mesej","id":"Id","info":"Butiran Sambungan","langCode":"Arah Tulisan","langDir":"Arah Tulisan","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","menu":"Sunting Sambungan","name":"Nama","noAnchors":"(Tiada pautan terdapat dalam dokumen ini)","noEmail":"Sila taip alamat e-mail","noUrl":"Sila taip sambungan URL","other":"","popupDependent":"Bergantungan (Netscape)","popupFeatures":"Ciri Tetingkap Popup","popupFullScreen":"Skrin Penuh (IE)","popupLeft":"Posisi Kiri","popupLocationBar":"Bar Lokasi","popupMenuBar":"Bar Menu","popupResizable":"Resizable","popupScrollBars":"Bar-bar skrol","popupStatusBar":"Bar Status","popupToolbar":"Toolbar","popupTop":"Posisi Atas","rel":"Relationship","selectAnchor":"Sila pilih pautan","styles":"Stail","tabIndex":"Indeks Tab ","target":"Sasaran","targetFrame":"","targetFrameName":"Nama Bingkai Sasaran","targetPopup":"","targetPopupName":"Nama Tetingkap Popup","title":"Sambungan","toAnchor":"Pautan dalam muka surat ini","toEmail":"E-Mail","toUrl":"URL","toolbar":"Masukkan/Sunting Sambungan","type":"Jenis Sambungan","unlink":"Buang Sambungan","upload":"Muat Naik"},"list":{"bulletedlist":"Senarai tidak bernombor","numberedlist":"Senarai bernombor"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastetext":{"button":"Tampal sebagai text biasa","title":"Tampal sebagai text biasa"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Tampal dari Word","toolbar":"Tampal dari Word"},"removeformat":{"toolbar":"Buang Format"},"sourcearea":{"toolbar":"Sumber"},"specialchar":{"options":"Special Character Options","title":"Sila pilih huruf istimewa","toolbar":"Masukkan Huruf Istimewa"},"scayt":{"about":"About SCAYT","aboutTab":"About","addWord":"Add Word","allCaps":"Ignore All-Caps Words","dic_create":"Create","dic_delete":"Delete","dic_field_name":"Dictionary name","dic_info":"Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.","dic_rename":"Rename","dic_restore":"Restore","dictionariesTab":"Dictionaries","disable":"Disable SCAYT","emptyDic":"Dictionary name should not be empty.","enable":"Enable SCAYT","ignore":"Ignore","ignoreAll":"Ignore All","ignoreDomainNames":"Ignore Domain Names","langs":"Languages","languagesTab":"Languages","mixedCase":"Ignore Words with Mixed Case","mixedWithDigits":"Ignore Words with Numbers","moreSuggestions":"More suggestions","opera_title":"Not supported by Opera","options":"Options","optionsTab":"Options","title":"Spell Check As You Type","toggle":"Toggle SCAYT","noSuggestions":"No suggestion"},"stylescombo":{"label":"Stail","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Saiz Border","caption":"Keterangan","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Buangkan Sel-sel","merge":"Cantumkan Sel-sel","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Tambahan Ruang Sel","cellSpace":"Ruangan Antara Sel","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Buangkan Lajur"},"columns":"Jaluran","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Ciri-ciri Jadual","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Buangkan Baris"},"rows":"Barisan","summary":"Summary","title":"Ciri-ciri Jadual","toolbar":"Jadual","widthPc":"peratus","widthPx":"piksel-piksel","widthUnit":"width unit"},"undo":{"redo":"Ulangkan","undo":"Batalkan"},"wsc":{"btnIgnore":"Biar","btnIgnoreAll":"Biarkan semua","btnReplace":"Ganti","btnReplaceAll":"Gantikan Semua","btnUndo":"Batalkan","changeTo":"Tukarkan kepada","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Pemeriksa ejaan tidak dipasang. Adakah anda mahu muat turun sekarang?","manyChanges":"Pemeriksaan ejaan siap: %1 perkataan diubah","noChanges":"Pemeriksaan ejaan siap: Tiada perkataan diubah","noMispell":"Pemeriksaan ejaan siap: Tiada salah ejaan","noSuggestions":"- Tiada cadangan -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Tidak terdapat didalam kamus","oneChange":"Pemeriksaan ejaan siap: Satu perkataan telah diubah","progress":"Pemeriksaan ejaan sedang diproses...","title":"Spell Check","toolbar":"Semak Ejaan"}};assets/plugins/ckeditor/lang/lv.js000064400000031700152510440640013235 0ustar00/* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.lang['lv']={"editor":"Bagātinātā teksta redaktors","common":{"editorHelp":"Palīdzībai, nospiediet ALT 0 ","browseServer":"Skatīt servera saturu","url":"URL","protocol":"Protokols","upload":"Augšupielādēt","uploadSubmit":"Nosūtīt serverim","image":"Attēls","flash":"Flash","form":"Forma","checkbox":"Atzīmēšanas kastīte","radio":"Izvēles poga","textField":"Teksta rinda","textarea":"Teksta laukums","hiddenField":"Paslēpta teksta rinda","button":"Poga","select":"Iezīmēšanas lauks","imageButton":"Attēlpoga","notSet":"
      ');var r=e.ui.ie6?1:0,i=e.ui.ie6?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+i,height:this.element.outerHeight()+i,position:"absolute",left:this.elementOffset.left-r+"px",top:this.elementOffset.top-r+"px",zIndex:++n.zIndex}),this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(e,t,n){return{width:this.originalSize.width+t}},w:function(e,t,n){var r=this.options,i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,n){var r=this.options,i=this.originalSize,s=this.originalPosition;return{top:s.top+n,height:i.height-n}},s:function(e,t,n){return{height:this.originalSize.height+n}},se:function(t,n,r){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,n,r]))},sw:function(t,n,r){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,n,r]))},ne:function(t,n,r){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,n,r]))},nw:function(t,n,r){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,n,r]))}},_propagate:function(t,n){e.ui.plugin.call(this,t,[n,this.ui()]),t!="resize"&&this._trigger(t,n,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","alsoResize",{start:function(t,n){var r=e(this).data("resizable"),i=r.options,s=function(t){e(t).each(function(){var t=e(this);t.data("resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};typeof i.alsoResize=="object"&&!i.alsoResize.parentNode?i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)}):s(i.alsoResize)},resize:function(t,n){var r=e(this).data("resizable"),i=r.options,s=r.originalSize,o=r.originalPosition,u={height:r.size.height-s.height||0,width:r.size.width-s.width||0,top:r.position.top-o.top||0,left:r.position.left-o.left||0},a=function(t,r){e(t).each(function(){var t=e(this),i=e(this).data("resizable-alsoresize"),s={},o=r&&r.length?r:t.parents(n.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var n=(i[t]||0)+(u[t]||0);n&&n>=0&&(s[t]=n||null)}),t.css(s)})};typeof i.alsoResize=="object"&&!i.alsoResize.nodeType?e.each(i.alsoResize,function(e,t){a(e,t)}):a(i.alsoResize)},stop:function(t,n){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","animate",{stop:function(t,n){var r=e(this).data("resizable"),i=r.options,s=r._proportionallyResizeElements,o=s.length&&/textarea/i.test(s[0].nodeName),u=o&&e.ui.hasScroll(s[0],"left")?0:r.sizeDiff.height,a=o?0:r.sizeDiff.width,f={width:r.size.width-a,height:r.size.height-u},l=parseInt(r.element.css("left"),10)+(r.position.left-r.originalPosition.left)||null,c=parseInt(r.element.css("top"),10)+(r.position.top-r.originalPosition.top)||null;r.element.animate(e.extend(f,c&&l?{top:c,left:l}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var n={width:parseInt(r.element.css("width"),10),height:parseInt(r.element.css("height"),10),top:parseInt(r.element.css("top"),10),left:parseInt(r.element.css("left"),10)};s&&s.length&&e(s[0]).css({width:n.width,height:n.height}),r._updateCache(n),r._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(t,r){var i=e(this).data("resizable"),s=i.options,o=i.element,u=s.containment,a=u instanceof e?u.get(0):/parent/.test(u)?o.parent().get(0):u;if(!a)return;i.containerElement=e(a);if(/document/.test(u)||u==document)i.containerOffset={left:0,top:0},i.containerPosition={left:0,top:0},i.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight};else{var f=e(a),l=[];e(["Top","Right","Left","Bottom"]).each(function(e,t){l[e]=n(f.css("padding"+t))}),i.containerOffset=f.offset(),i.containerPosition=f.position(),i.containerSize={height:f.innerHeight()-l[3],width:f.innerWidth()-l[1]};var c=i.containerOffset,h=i.containerSize.height,p=i.containerSize.width,d=e.ui.hasScroll(a,"left")?a.scrollWidth:p,v=e.ui.hasScroll(a)?a.scrollHeight:h;i.parentData={element:a,left:c.left,top:c.top,width:d,height:v}}},resize:function(t,n){var r=e(this).data("resizable"),i=r.options,s=r.containerSize,o=r.containerOffset,u=r.size,a=r.position,f=r._aspectRatio||t.shiftKey,l={top:0,left:0},c=r.containerElement;c[0]!=document&&/static/.test(c.css("position"))&&(l=o),a.left<(r._helper?o.left:0)&&(r.size.width=r.size.width+(r._helper?r.position.left-o.left:r.position.left-l.left),f&&(r.size.height=r.size.width/r.aspectRatio),r.position.left=i.helper?o.left:0),a.top<(r._helper?o.top:0)&&(r.size.height=r.size.height+(r._helper?r.position.top-o.top:r.position.top),f&&(r.size.width=r.size.height*r.aspectRatio),r.position.top=r._helper?o.top:0),r.offset.left=r.parentData.left+r.position.left,r.offset.top=r.parentData.top+r.position.top;var h=Math.abs((r._helper?r.offset.left-l.left:r.offset.left-l.left)+r.sizeDiff.width),p=Math.abs((r._helper?r.offset.top-l.top:r.offset.top-o.top)+r.sizeDiff.height),d=r.containerElement.get(0)==r.element.parent().get(0),v=/relative|absolute/.test(r.containerElement.css("position"));d&&v&&(h-=r.parentData.left),h+r.size.width>=r.parentData.width&&(r.size.width=r.parentData.width-h,f&&(r.size.height=r.size.width/r.aspectRatio)),p+r.size.height>=r.parentData.height&&(r.size.height=r.parentData.height-p,f&&(r.size.width=r.size.height*r.aspectRatio))},stop:function(t,n){var r=e(this).data("resizable"),i=r.options,s=r.position,o=r.containerOffset,u=r.containerPosition,a=r.containerElement,f=e(r.helper),l=f.offset(),c=f.outerWidth()-r.sizeDiff.width,h=f.outerHeight()-r.sizeDiff.height;r._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:l.left-u.left-o.left,width:c,height:h}),r._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:l.left-u.left-o.left,width:c,height:h})}}),e.ui.plugin.add("resizable","ghost",{start:function(t,n){var r=e(this).data("resizable"),i=r.options,s=r.size;r.ghost=r.originalElement.clone(),r.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:""),r.ghost.appendTo(r.helper)},resize:function(t,n){var r=e(this).data("resizable"),i=r.options;r.ghost&&r.ghost.css({position:"relative",height:r.size.height,width:r.size.width})},stop:function(t,n){var r=e(this).data("resizable"),i=r.options;r.ghost&&r.helper&&r.helper.get(0).removeChild(r.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(t,n){var r=e(this).data("resizable"),i=r.options,s=r.size,o=r.originalSize,u=r.originalPosition,a=r.axis,f=i._aspectRatio||t.shiftKey;i.grid=typeof i.grid=="number"?[i.grid,i.grid]:i.grid;var l=Math.round((s.width-o.width)/(i.grid[0]||1))*(i.grid[0]||1),c=Math.round((s.height-o.height)/(i.grid[1]||1))*(i.grid[1]||1);/^(se|s|e)$/.test(a)?(r.size.width=o.width+l,r.size.height=o.height+c):/^(ne)$/.test(a)?(r.size.width=o.width+l,r.size.height=o.height+c,r.position.top=u.top-c):/^(sw)$/.test(a)?(r.size.width=o.width+l,r.size.height=o.height+c,r.position.left=u.left-l):(r.size.width=o.width+l,r.size.height=o.height+c,r.position.top=u.top-c,r.position.left=u.left-l)}});var n=function(e){return parseInt(e,10)||0},r=function(e){return!isNaN(parseInt(e,10))}})(jQuery);(function(e,t){e.widget("ui.selectable",e.ui.mouse,{version:"1.9.2",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch"},_create:function(){var t=this;this.element.addClass("ui-selectable"),this.dragged=!1;var n;this.refresh=function(){n=e(t.options.filter,t.element[0]),n.addClass("ui-selectee"),n.each(function(){var t=e(this),n=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:n.left,top:n.top,right:n.left+t.outerWidth(),bottom:n.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=n.addClass("ui-selectee"),this._mouseInit(),this.helper=e("
      ")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var n=this;this.opos=[t.pageX,t.pageY];if(this.options.disabled)return;var r=this.options;this.selectees=e(r.filter,this.element[0]),this._trigger("start",t),e(r.appendTo).append(this.helper),this.helper.css({left:t.clientX,top:t.clientY,width:0,height:0}),r.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var r=e.data(this,"selectable-item");r.startselected=!0,!t.metaKey&&!t.ctrlKey&&(r.$element.removeClass("ui-selected"),r.selected=!1,r.$element.addClass("ui-unselecting"),r.unselecting=!0,n._trigger("unselecting",t,{unselecting:r.element}))}),e(t.target).parents().andSelf().each(function(){var r=e.data(this,"selectable-item");if(r){var i=!t.metaKey&&!t.ctrlKey||!r.$element.hasClass("ui-selected");return r.$element.removeClass(i?"ui-unselecting":"ui-selected").addClass(i?"ui-selecting":"ui-unselecting"),r.unselecting=!i,r.selecting=i,r.selected=i,i?n._trigger("selecting",t,{selecting:r.element}):n._trigger("unselecting",t,{unselecting:r.element}),!1}})},_mouseDrag:function(t){var n=this;this.dragged=!0;if(this.options.disabled)return;var r=this.options,i=this.opos[0],s=this.opos[1],o=t.pageX,u=t.pageY;if(i>o){var a=o;o=i,i=a}if(s>u){var a=u;u=s,s=a}return this.helper.css({left:i,top:s,width:o-i,height:u-s}),this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!a||a.element==n.element[0])return;var f=!1;r.tolerance=="touch"?f=!(a.left>o||a.rightu||a.bottomi&&a.rights&&a.bottom *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3},_create:function(){var e=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?e.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_setOption:function(t,n){t==="disabled"?(this.options[t]=n,this.widget().toggleClass("ui-sortable-disabled",!!n)):e.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(t,n){var r=this;if(this.reverting)return!1;if(this.options.disabled||this.options.type=="static")return!1;this._refreshItems(t);var i=null,s=e(t.target).parents().each(function(){if(e.data(this,r.widgetName+"-item")==r)return i=e(this),!1});e.data(t.target,r.widgetName+"-item")==r&&(i=e(t.target));if(!i)return!1;if(this.options.handle&&!n){var o=!1;e(this.options.handle,i).find("*").andSelf().each(function(){this==t.target&&(o=!0)});if(!o)return!1}return this.currentItem=i,this._removeCurrentsFromItems(),!0},_mouseStart:function(t,n,r){var i=this.options;this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!=this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),i.containment&&this._setContainment(),i.cursor&&(e("body").css("cursor")&&(this._storedCursor=e("body").css("cursor")),e("body").css("cursor",i.cursor)),i.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",i.opacity)),i.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",i.zIndex)),this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions();if(!r)for(var s=this.containers.length-1;s>=0;s--)this.containers[s]._trigger("activate",t,this._uiHash(this));return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs);if(this.options.scroll){var n=this.options,r=!1;this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY=0;i--){var s=this.items[i],o=s.item[0],u=this._intersectsWithPointer(s);if(!u)continue;if(s.instance!==this.currentContainer)continue;if(o!=this.currentItem[0]&&this.placeholder[u==1?"next":"prev"]()[0]!=o&&!e.contains(this.placeholder[0],o)&&(this.options.type=="semi-dynamic"?!e.contains(this.element[0],o):!0)){this.direction=u==1?"down":"up";if(this.options.tolerance!="pointer"&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger("change",t,this._uiHash());break}}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,n){if(!t)return;e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t);if(this.options.revert){var r=this,i=this.placeholder.offset();this.reverting=!0,e(this.helper).animate({left:i.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:i.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){r._clear(t)})}else this._clear(t,n);return!1},cancel:function(){if(this.dragging){this._mouseUp({target:null}),this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var n=this._getItemsAsjQuery(t&&t.connected),r=[];return t=t||{},e(n).each(function(){var n=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[-=_](.+)/);n&&r.push((t.key||n[1]+"[]")+"="+(t.key&&t.expression?n[1]:n[2]))}),!r.length&&t.key&&r.push(t.key+"="),r.join("&")},toArray:function(t){var n=this._getItemsAsjQuery(t&&t.connected),r=[];return t=t||{},n.each(function(){r.push(e(t.item||this).attr(t.attribute||"id")||"")}),r},_intersectsWith:function(e){var t=this.positionAbs.left,n=t+this.helperProportions.width,r=this.positionAbs.top,i=r+this.helperProportions.height,s=e.left,o=s+e.width,u=e.top,a=u+e.height,f=this.offset.click.top,l=this.offset.click.left,c=r+f>u&&r+fs&&t+le[this.floating?"width":"height"]?c:s0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return e!=0&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor==String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){var n=[],r=[],i=this._connectWith();if(i&&t)for(var s=i.length-1;s>=0;s--){var o=e(i[s]);for(var u=o.length-1;u>=0;u--){var a=e.data(o[u],this.widgetName);a&&a!=this&&!a.options.disabled&&r.push([e.isFunction(a.options.items)?a.options.items.call(a.element):e(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a])}}r.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(var s=r.length-1;s>=0;s--)r[s][0].each(function(){n.push(this)});return e(n)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var n=0;n=0;s--){var o=e(i[s]);for(var u=o.length-1;u>=0;u--){var a=e.data(o[u],this.widgetName);a&&a!=this&&!a.options.disabled&&(r.push([e.isFunction(a.options.items)?a.options.items.call(a.element[0],t,{item:this.currentItem}):e(a.options.items,a.element),a]),this.containers.push(a))}}for(var s=r.length-1;s>=0;s--){var f=r[s][1],l=r[s][0];for(var u=0,c=l.length;u=0;n--){var r=this.items[n];if(r.instance!=this.currentContainer&&this.currentContainer&&r.item[0]!=this.currentItem[0])continue;var i=this.options.toleranceElement?e(this.options.toleranceElement,r.item):r.item;t||(r.width=i.outerWidth(),r.height=i.outerHeight());var s=i.offset();r.left=s.left,r.top=s.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(var n=this.containers.length-1;n>=0;n--){var s=this.containers[n].element.offset();this.containers[n].containerCache.left=s.left,this.containers[n].containerCache.top=s.top,this.containers[n].containerCache.width=this.containers[n].element.outerWidth(),this.containers[n].containerCache.height=this.containers[n].element.outerHeight()}return this},_createPlaceholder:function(t){t=t||this;var n=t.options;if(!n.placeholder||n.placeholder.constructor==String){var r=n.placeholder;n.placeholder={element:function(){var n=e(document.createElement(t.currentItem[0].nodeName)).addClass(r||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];return r||(n.style.visibility="hidden"),n},update:function(e,i){if(r&&!n.forcePlaceholderSize)return;i.height()||i.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),i.width()||i.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10))}}}t.placeholder=e(n.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),n.placeholder.update(t,t.placeholder)},_contactContainers:function(t){var n=null,r=null;for(var i=this.containers.length-1;i>=0;i--){if(e.contains(this.currentItem[0],this.containers[i].element[0]))continue;if(this._intersectsWith(this.containers[i].containerCache)){if(n&&e.contains(this.containers[i].element[0],n.element[0]))continue;n=this.containers[i],r=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",t,this._uiHash(this)),this.containers[i].containerCache.over=0)}if(!n)return;if(this.containers.length===1)this.containers[r]._trigger("over",t,this._uiHash(this)),this.containers[r].containerCache.over=1;else{var s=1e4,o=null,u=this.containers[r].floating?"left":"top",a=this.containers[r].floating?"width":"height",f=this.positionAbs[u]+this.offset.click[u];for(var l=this.items.length-1;l>=0;l--){if(!e.contains(this.containers[r].element[0],this.items[l].item[0]))continue;if(this.items[l].item[0]==this.currentItem[0])continue;var c=this.items[l].item.offset()[u],h=!1;Math.abs(c-f)>Math.abs(c+this.items[l][a]-f)&&(h=!0,c+=this.items[l][a]),Math.abs(c-f)this.containment[2]&&(s=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top));if(n.grid){var u=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1];o=this.containment?u-this.offset.click.topthis.containment[3]?u-this.offset.click.topthis.containment[2]?a-this.offset.click.left=0;i--)n||r.push(function(e){return function(t){e._trigger("deactivate",t,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over&&(r.push(function(e){return function(t){e._trigger("out",t,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over=0);this._storedCursor&&e("body").css("cursor",this._storedCursor),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex),this.dragging=!1;if(this.cancelHelperRemoval){if(!n){this._trigger("beforeStop",t,this._uiHash());for(var i=0;i li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},_create:function(){var t=this.accordionId="ui-accordion-"+(this.element.attr("id")||++n),r=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset"),this.headers=this.element.find(r.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"),this._hoverable(this.headers),this._focusable(this.headers),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").hide(),!r.collapsible&&(r.active===!1||r.active==null)&&(r.active=0),r.active<0&&(r.active+=this.headers.length),this.active=this._findActive(r.active).addClass("ui-accordion-header-active ui-state-active").toggleClass("ui-corner-all ui-corner-top"),this.active.next().addClass("ui-accordion-content-active").show(),this._createIcons(),this.refresh(),this.element.attr("role","tablist"),this.headers.attr("role","tab").each(function(n){var r=e(this),i=r.attr("id"),s=r.next(),o=s.attr("id");i||(i=t+"-header-"+n,r.attr("id",i)),o||(o=t+"-panel-"+n,s.attr("id",o)),r.attr("aria-controls",o),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false",tabIndex:-1}).next().attr({"aria-expanded":"false","aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true",tabIndex:0}).next().attr({"aria-expanded":"true","aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._on(this.headers,{keydown:"_keydown"}),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._setupEvents(r.event)},_getCreateEventData:function(){return{header:this.active,content:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this._destroyIcons(),e=this.headers.next().css("display","").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this.options.heightStyle!=="content"&&e.css("height","")},_setOption:function(e,t){if(e==="active"){this._activate(t);return}e==="event"&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),e==="collapsible"&&!t&&this.options.active===!1&&this._activate(0),e==="icons"&&(this._destroyIcons(),t&&this._createIcons()),e==="disabled"&&this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t)},_keydown:function(t){if(t.altKey||t.ctrlKey)return;var n=e.ui.keyCode,r=this.headers.length,i=this.headers.index(t.target),s=!1;switch(t.keyCode){case n.RIGHT:case n.DOWN:s=this.headers[(i+1)%r];break;case n.LEFT:case n.UP:s=this.headers[(i-1+r)%r];break;case n.SPACE:case n.ENTER:this._eventHandler(t);break;case n.HOME:s=this.headers[0];break;case n.END:s=this.headers[r-1]}s&&(e(t.target).attr("tabIndex",-1),e(s).attr("tabIndex",0),s.focus(),t.preventDefault())},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t,n,r=this.options.heightStyle,i=this.element.parent();r==="fill"?(e.support.minHeight||(n=i.css("overflow"),i.css("overflow","hidden")),t=i.height(),this.element.siblings(":visible").each(function(){var n=e(this),r=n.css("position");if(r==="absolute"||r==="fixed")return;t-=n.outerHeight(!0)}),n&&i.css("overflow",n),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):r==="auto"&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css("height","").height())}).height(t))},_activate:function(t){var n=this._findActive(t)[0];if(n===this.active[0])return;n=n||this.active[0],this._eventHandler({target:n,currentTarget:n,preventDefault:e.noop})},_findActive:function(t){return typeof t=="number"?this.headers.eq(t):e()},_setupEvents:function(t){var n={};if(!t)return;e.each(t.split(" "),function(e,t){n[t]="_eventHandler"}),this._on(this.headers,n)},_eventHandler:function(t){var n=this.options,r=this.active,i=e(t.currentTarget),s=i[0]===r[0],o=s&&n.collapsible,u=o?e():i.next(),a=r.next(),f={oldHeader:r,oldPanel:a,newHeader:o?e():i,newPanel:u};t.preventDefault();if(s&&!n.collapsible||this._trigger("beforeActivate",t,f)===!1)return;n.active=o?!1:this.headers.index(i),this.active=s?e():i,this._toggle(f),r.removeClass("ui-accordion-header-active ui-state-active"),n.icons&&r.children(".ui-accordion-header-icon").removeClass(n.icons.activeHeader).addClass(n.icons.header),s||(i.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),n.icons&&i.children(".ui-accordion-header-icon").removeClass(n.icons.header).addClass(n.icons.activeHeader),i.next().addClass("ui-accordion-content-active"))},_toggle:function(t){var n=t.newPanel,r=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=n,this.prevHide=r,this.options.animate?this._animate(n,r,t):(r.hide(),n.show(),this._toggleComplete(t)),r.attr({"aria-expanded":"false","aria-hidden":"true"}),r.prev().attr("aria-selected","false"),n.length&&r.length?r.prev().attr("tabIndex",-1):n.length&&this.headers.filter(function(){return e(this).attr("tabIndex")===0}).attr("tabIndex",-1),n.attr({"aria-expanded":"true","aria-hidden":"false"}).prev().attr({"aria-selected":"true",tabIndex:0})},_animate:function(e,t,n){var s,o,u,a=this,f=0,l=e.length&&(!t.length||e.index()",options:{appendTo:"body",autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},pending:0,_create:function(){var t,n,r;this.isMultiLine=this._isMultiLine(),this.valueMethod=this.element[this.element.is("input,textarea")?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(i){if(this.element.prop("readOnly")){t=!0,r=!0,n=!0;return}t=!1,r=!1,n=!1;var s=e.ui.keyCode;switch(i.keyCode){case s.PAGE_UP:t=!0,this._move("previousPage",i);break;case s.PAGE_DOWN:t=!0,this._move("nextPage",i);break;case s.UP:t=!0,this._keyEvent("previous",i);break;case s.DOWN:t=!0,this._keyEvent("next",i);break;case s.ENTER:case s.NUMPAD_ENTER:this.menu.active&&(t=!0,i.preventDefault(),this.menu.select(i));break;case s.TAB:this.menu.active&&this.menu.select(i);break;case s.ESCAPE:this.menu.element.is(":visible")&&(this._value(this.term),this.close(i),i.preventDefault());break;default:n=!0,this._searchTimeout(i)}},keypress:function(r){if(t){t=!1,r.preventDefault();return}if(n)return;var i=e.ui.keyCode;switch(r.keyCode){case i.PAGE_UP:this._move("previousPage",r);break;case i.PAGE_DOWN:this._move("nextPage",r);break;case i.UP:this._keyEvent("previous",r);break;case i.DOWN:this._keyEvent("next",r)}},input:function(e){if(r){r=!1,e.preventDefault();return}this._searchTimeout(e)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){if(this.cancelBlur){delete this.cancelBlur;return}clearTimeout(this.searching),this.close(e),this._change(e)}}),this._initSource(),this.menu=e("
      "+(o[0]>0&&I==o[1]-1?'
      ':""):""),F+=U}B+=F}return B+=x+($.ui.ie6&&!e.inline?'':""),e._keyEvent=!1,B},_generateMonthYearHeader:function(e,t,n,r,i,s,o,u){var a=this._get(e,"changeMonth"),f=this._get(e,"changeYear"),l=this._get(e,"showMonthAfterYear"),c='
      ',h="";if(s||!a)h+=''+o[t]+"";else{var p=r&&r.getFullYear()==n,d=i&&i.getFullYear()==n;h+='"}l||(c+=h+(s||!a||!f?" ":""));if(!e.yearshtml){e.yearshtml="";if(s||!f)c+=''+n+"";else{var m=this._get(e,"yearRange").split(":"),g=(new Date).getFullYear(),y=function(e){var t=e.match(/c[+-].*/)?n+parseInt(e.substring(1),10):e.match(/[+-].*/)?g+parseInt(e,10):parseInt(e,10);return isNaN(t)?g:t},b=y(m[0]),w=Math.max(b,y(m[1]||""));b=r?Math.max(b,r.getFullYear()):b,w=i?Math.min(w,i.getFullYear()):w,e.yearshtml+='",c+=e.yearshtml,e.yearshtml=null}}return c+=this._get(e,"yearSuffix"),l&&(c+=(s||!a||!f?" ":"")+h),c+="
      ",c},_adjustInstDate:function(e,t,n){var r=e.drawYear+(n=="Y"?t:0),i=e.drawMonth+(n=="M"?t:0),s=Math.min(e.selectedDay,this._getDaysInMonth(r,i))+(n=="D"?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(r,i,s)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),(n=="M"||n=="Y")&&this._notifyChange(e)},_restrictMinMax:function(e,t){var n=this._getMinMaxDate(e,"min"),r=this._getMinMaxDate(e,"max"),i=n&&tr?r:i,i},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return t==null?[1,1]:typeof t=="number"?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return(new Date(e,t,1)).getDay()},_canAdjustMonth:function(e,t,n,r){var i=this._getNumberOfMonths(e),s=this._daylightSavingAdjust(new Date(n,r+(t<0?t:i[0]*i[1]),1));return t<0&&s.setDate(this._getDaysInMonth(s.getFullYear(),s.getMonth())),this._isInRange(e,s)},_isInRange:function(e,t){var n=this._getMinMaxDate(e,"min"),r=this._getMinMaxDate(e,"max");return(!n||t.getTime()>=n.getTime())&&(!r||t.getTime()<=r.getTime())},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t=typeof t!="string"?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,n,r){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var i=t?typeof t=="object"?t:this._daylightSavingAdjust(new Date(r,n,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),i,this._getFormatConfig(e))}}),$.fn.datepicker=function(e){if(!this.length)return this;$.datepicker.initialized||($(document).mousedown($.datepicker._checkExternalClick).find(document.body).append($.datepicker.dpDiv),$.datepicker.initialized=!0);var t=Array.prototype.slice.call(arguments,1);return typeof e!="string"||e!="isDisabled"&&e!="getDate"&&e!="widget"?e=="option"&&arguments.length==2&&typeof arguments[1]=="string"?$.datepicker["_"+e+"Datepicker"].apply($.datepicker,[this[0]].concat(t)):this.each(function(){typeof e=="string"?$.datepicker["_"+e+"Datepicker"].apply($.datepicker,[this].concat(t)):$.datepicker._attachDatepicker(this,e)}):$.datepicker["_"+e+"Datepicker"].apply($.datepicker,[this[0]].concat(t))},$.datepicker=new Datepicker,$.datepicker.initialized=!1,$.datepicker.uuid=(new Date).getTime(),$.datepicker.version="1.9.2",window["DP_jQuery_"+dpuuid]=$})(jQuery);(function(e,t){var n="ui-dialog ui-widget ui-widget-content ui-corner-all ",r={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},i={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0};e.widget("ui.dialog",{version:"1.9.2",options:{autoOpen:!0,buttons:{},closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:!1,maxWidth:!1,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var n=e(this).css(t).offset().top;n<0&&e(this).css("top",t.top-n)}},resizable:!0,show:null,stack:!0,title:"",width:300,zIndex:1e3},_create:function(){this.originalTitle=this.element.attr("title"),typeof this.originalTitle!="string"&&(this.originalTitle=""),this.oldPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.options.title=this.options.title||this.originalTitle;var t=this,r=this.options,i=r.title||" ",s,o,u,a,f;s=(this.uiDialog=e("
      ")).addClass(n+r.dialogClass).css({display:"none",outline:0,zIndex:r.zIndex}).attr("tabIndex",-1).keydown(function(n){r.closeOnEscape&&!n.isDefaultPrevented()&&n.keyCode&&n.keyCode===e.ui.keyCode.ESCAPE&&(t.close(n),n.preventDefault())}).mousedown(function(e){t.moveToTop(!1,e)}).appendTo("body"),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(s),o=(this.uiDialogTitlebar=e("
      ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").bind("mousedown",function(){s.focus()}).prependTo(s),u=e("").addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").click(function(e){e.preventDefault(),t.close(e)}).appendTo(o),(this.uiDialogTitlebarCloseText=e("")).addClass("ui-icon ui-icon-closethick").text(r.closeText).appendTo(u),a=e("").uniqueId().addClass("ui-dialog-title").html(i).prependTo(o),f=(this.uiDialogButtonPane=e("
      ")).addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),(this.uiButtonSet=e("
      ")).addClass("ui-dialog-buttonset").appendTo(f),s.attr({role:"dialog","aria-labelledby":a.attr("id")}),o.find("*").add(o).disableSelection(),this._hoverable(u),this._focusable(u),r.draggable&&e.fn.draggable&&this._makeDraggable(),r.resizable&&e.fn.resizable&&this._makeResizable(),this._createButtons(r.buttons),this._isOpen=!1,e.fn.bgiframe&&s.bgiframe(),this._on(s,{keydown:function(t){if(!r.modal||t.keyCode!==e.ui.keyCode.TAB)return;var n=e(":tabbable",s),i=n.filter(":first"),o=n.filter(":last");if(t.target===o[0]&&!t.shiftKey)return i.focus(1),!1;if(t.target===i[0]&&t.shiftKey)return o.focus(1),!1}})},_init:function(){this.options.autoOpen&&this.open()},_destroy:function(){var e,t=this.oldPosition;this.overlay&&this.overlay.destroy(),this.uiDialog.hide(),this.element.removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},close:function(t){var n=this,r,i;if(!this._isOpen)return;if(!1===this._trigger("beforeClose",t))return;return this._isOpen=!1,this.overlay&&this.overlay.destroy(),this.options.hide?this._hide(this.uiDialog,this.options.hide,function(){n._trigger("close",t)}):(this.uiDialog.hide(),this._trigger("close",t)),e.ui.dialog.overlay.resize(),this.options.modal&&(r=0,e(".ui-dialog").each(function(){this!==n.uiDialog[0]&&(i=e(this).css("z-index"),isNaN(i)||(r=Math.max(r,i)))}),e.ui.dialog.maxZ=r),this},isOpen:function(){return this._isOpen},moveToTop:function(t,n){var r=this.options,i;return r.modal&&!t||!r.stack&&!r.modal?this._trigger("focus",n):(r.zIndex>e.ui.dialog.maxZ&&(e.ui.dialog.maxZ=r.zIndex),this.overlay&&(e.ui.dialog.maxZ+=1,e.ui.dialog.overlay.maxZ=e.ui.dialog.maxZ,this.overlay.$el.css("z-index",e.ui.dialog.overlay.maxZ)),i={scrollTop:this.element.scrollTop(),scrollLeft:this.element.scrollLeft()},e.ui.dialog.maxZ+=1,this.uiDialog.css("z-index",e.ui.dialog.maxZ),this.element.attr(i),this._trigger("focus",n),this)},open:function(){if(this._isOpen)return;var t,n=this.options,r=this.uiDialog;return this._size(),this._position(n.position),r.show(n.show),this.overlay=n.modal?new e.ui.dialog.overlay(this):null,this.moveToTop(!0),t=this.element.find(":tabbable"),t.length||(t=this.uiDialogButtonPane.find(":tabbable"),t.length||(t=r)),t.eq(0).focus(),this._isOpen=!0,this._trigger("open"),this},_createButtons:function(t){var n=this,r=!1;this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),typeof t=="object"&&t!==null&&e.each(t,function(){return!(r=!0)}),r?(e.each(t,function(t,r){var i,s;r=e.isFunction(r)?{click:r,text:t}:r,r=e.extend({type:"button"},r),s=r.click,r.click=function(){s.apply(n.element[0],arguments)},i=e("",r).appendTo(n.uiButtonSet),e.fn.button&&i.button()}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog)):this.uiDialog.removeClass("ui-dialog-buttons")},_makeDraggable:function(){function r(e){return{position:e.position,offset:e.offset}}var t=this,n=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(n,i){e(this).addClass("ui-dialog-dragging"),t._trigger("dragStart",n,r(i))},drag:function(e,n){t._trigger("drag",e,r(n))},stop:function(i,s){n.position=[s.position.left-t.document.scrollLeft(),s.position.top-t.document.scrollTop()],e(this).removeClass("ui-dialog-dragging"),t._trigger("dragStop",i,r(s)),e.ui.dialog.overlay.resize()}})},_makeResizable:function(n){function u(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}n=n===t?this.options.resizable:n;var r=this,i=this.options,s=this.uiDialog.css("position"),o=typeof n=="string"?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:i.maxWidth,maxHeight:i.maxHeight,minWidth:i.minWidth,minHeight:this._minHeight(),handles:o,start:function(t,n){e(this).addClass("ui-dialog-resizing"),r._trigger("resizeStart",t,u(n))},resize:function(e,t){r._trigger("resize",e,u(t))},stop:function(t,n){e(this).removeClass("ui-dialog-resizing"),i.height=e(this).height(),i.width=e(this).width(),r._trigger("resizeStop",t,u(n)),e.ui.dialog.overlay.resize()}}).css("position",s).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var e=this.options;return e.height==="auto"?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(t){var n=[],r=[0,0],i;if(t){if(typeof t=="string"||typeof t=="object"&&"0"in t)n=t.split?t.split(" "):[t[0],t[1]],n.length===1&&(n[1]=n[0]),e.each(["left","top"],function(e,t){+n[e]===n[e]&&(r[e]=n[e],n[e]=t)}),t={my:n[0]+(r[0]<0?r[0]:"+"+r[0])+" "+n[1]+(r[1]<0?r[1]:"+"+r[1]),at:n.join(" ")};t=e.extend({},e.ui.dialog.prototype.options.position,t)}else t=e.ui.dialog.prototype.options.position;i=this.uiDialog.is(":visible"),i||this.uiDialog.show(),this.uiDialog.position(t),i||this.uiDialog.hide()},_setOptions:function(t){var n=this,s={},o=!1;e.each(t,function(e,t){n._setOption(e,t),e in r&&(o=!0),e in i&&(s[e]=t)}),o&&this._size(),this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",s)},_setOption:function(t,r){var i,s,o=this.uiDialog;switch(t){case"buttons":this._createButtons(r);break;case"closeText":this.uiDialogTitlebarCloseText.text(""+r);break;case"dialogClass":o.removeClass(this.options.dialogClass).addClass(n+r);break;case"disabled":r?o.addClass("ui-dialog-disabled"):o.removeClass("ui-dialog-disabled");break;case"draggable":i=o.is(":data(draggable)"),i&&!r&&o.draggable("destroy"),!i&&r&&this._makeDraggable();break;case"position":this._position(r);break;case"resizable":s=o.is(":data(resizable)"),s&&!r&&o.resizable("destroy"),s&&typeof r=="string"&&o.resizable("option","handles",r),!s&&r!==!1&&this._makeResizable(r);break;case"title":e(".ui-dialog-title",this.uiDialogTitlebar).html(""+(r||" "))}this._super(t,r)},_size:function(){var t,n,r,i=this.options,s=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0}),i.minWidth>i.width&&(i.width=i.minWidth),t=this.uiDialog.css({height:"auto",width:i.width}).outerHeight(),n=Math.max(0,i.minHeight-t),i.height==="auto"?e.support.minHeight?this.element.css({minHeight:n,height:"auto"}):(this.uiDialog.show(),r=this.element.css("height","auto").height(),s||this.uiDialog.hide(),this.element.height(Math.max(r,n))):this.element.height(Math.max(i.height-t,0)),this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}}),e.extend(e.ui.dialog,{uuid:0,maxZ:0,getTitleId:function(e){var t=e.attr("id");return t||(this.uuid+=1,t=this.uuid),"ui-dialog-title-"+t},overlay:function(t){this.$el=e.ui.dialog.overlay.create(t)}}),e.extend(e.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:e.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(e){return e+".dialog-overlay"}).join(" "),create:function(t){this.instances.length===0&&(setTimeout(function(){e.ui.dialog.overlay.instances.length&&e(document).bind(e.ui.dialog.overlay.events,function(t){if(e(t.target).zIndex()").addClass("ui-widget-overlay");return e(document).bind("keydown.dialog-overlay",function(r){var i=e.ui.dialog.overlay.instances;i.length!==0&&i[i.length-1]===n&&t.options.closeOnEscape&&!r.isDefaultPrevented()&&r.keyCode&&r.keyCode===e.ui.keyCode.ESCAPE&&(t.close(r),r.preventDefault())}),n.appendTo(document.body).css({width:this.width(),height:this.height()}),e.fn.bgiframe&&n.bgiframe(),this.instances.push(n),n},destroy:function(t){var n=e.inArray(t,this.instances),r=0;n!==-1&&this.oldInstances.push(this.instances.splice(n,1)[0]),this.instances.length===0&&e([document,window]).unbind(".dialog-overlay"),t.height(0).width(0).remove(),e.each(this.instances,function(){r=Math.max(r,this.css("z-index"))}),this.maxZ=r},height:function(){var t,n;return e.ui.ie?(t=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),n=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight),t",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content ui-corner-all").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}).bind("click"+this.eventNamespace,e.proxy(function(e){this.options.disabled&&e.preventDefault()},this)),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item > a":function(e){e.preventDefault()},"click .ui-state-disabled > a":function(e){e.preventDefault()},"click .ui-menu-item:has(a)":function(t){var r=e(t.target).closest(".ui-menu-item");!n&&r.not(".ui-state-disabled").length&&(n=!0,this.select(t),r.has(".ui-menu").length?this.expand(t):this.element.is(":focus")||(this.element.trigger("focus",[!0]),this.active&&this.active.parents(".ui-menu").length===1&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){var n=e(t.currentTarget);n.siblings().children(".ui-state-active").removeClass("ui-state-active"),this.focus(t,n)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var n=this.active||this.element.children(".ui-menu-item").eq(0);t||this.focus(e,n)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){e(t.target).closest(".ui-menu").length||this.collapseAll(t),n=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").andSelf().removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").children("a").removeUniqueId().removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){function a(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}var n,r,i,s,o,u=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:u=!1,r=this.previousFilter||"",i=String.fromCharCode(t.keyCode),s=!1,clearTimeout(this.filterTimer),i===r?s=!0:i=r+i,o=new RegExp("^"+a(i),"i"),n=this.activeMenu.children(".ui-menu-item").filter(function(){return o.test(e(this).children("a").text())}),n=s&&n.index(this.active.next())!==-1?this.active.nextAll(".ui-menu-item"):n,n.length||(i=String.fromCharCode(t.keyCode),o=new RegExp("^"+a(i),"i"),n=this.activeMenu.children(".ui-menu-item").filter(function(){return o.test(e(this).children("a").text())})),n.length?(this.focus(t,n),n.length>1?(this.previousFilter=i,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter):delete this.previousFilter}u&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.children("a[aria-haspopup='true']").length?this.expand(e):this.select(e))},refresh:function(){var t,n=this.options.icons.submenu,r=this.element.find(this.options.menus);r.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=e(this),r=t.prev("a"),i=e("").addClass("ui-menu-icon ui-icon "+n).data("ui-menu-submenu-carat",!0);r.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",r.attr("id"))}),t=r.add(this.element),t.children(":not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","presentation").children("a").uniqueId().addClass("ui-corner-all").attr({tabIndex:-1,role:this._itemRole()}),t.children(":not(.ui-menu-item)").each(function(){var t=e(this);/[^\-—–\s]/.test(t.text())||t.addClass("ui-widget-content ui-menu-divider")}),t.children(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},focus:function(e,t){var n,r;this.blur(e,e&&e.type==="focus"),this._scrollIntoView(t),this.active=t.first(),r=this.active.children("a").addClass("ui-state-focus"),this.options.role&&this.element.attr("aria-activedescendant",r.attr("id")),this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"),e&&e.type==="keydown"?this._close():this.timer=this._delay(function(){this._close()},this.delay),n=t.children(".ui-menu"),n.length&&/^mouse/.test(e.type)&&this._startOpening(n),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var n,r,i,s,o,u;this._hasScroll()&&(n=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,r=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,i=t.offset().top-this.activeMenu.offset().top-n-r,s=this.activeMenu.scrollTop(),o=this.activeMenu.height(),u=t.height(),i<0?this.activeMenu.scrollTop(s+i):i+u>o&&this.activeMenu.scrollTop(s+i-o+u))},blur:function(e,t){t||clearTimeout(this.timer);if(!this.active)return;this.active.children("a").removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active})},_startOpening:function(e){clearTimeout(this.timer);if(e.attr("aria-hidden")!=="true")return;this.timer=this._delay(function(){this._close(),this._open(e)},this.delay)},_open:function(t){var n=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(n)},collapseAll:function(t,n){clearTimeout(this.timer),this.timer=this._delay(function(){var r=n?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));r.length||(r=this.element),this._close(r),this.blur(t),this.activeMenu=r},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find("a.ui-state-active").removeClass("ui-state-active")},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").children(".ui-menu-item").first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,n){var r;this.active&&(e==="first"||e==="last"?r=this.active[e==="first"?"prevAll":"nextAll"](".ui-menu-item").eq(-1):r=this.active[e+"All"](".ui-menu-item").eq(0));if(!r||!r.length||!this.active)r=this.activeMenu.children(".ui-menu-item")[t]();this.focus(n,r)},nextPage:function(t){var n,r,i;if(!this.active){this.next(t);return}if(this.isLastItem())return;this._hasScroll()?(r=this.active.offset().top,i=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return n=e(this),n.offset().top-r-i<0}),this.focus(t,n)):this.focus(t,this.activeMenu.children(".ui-menu-item")[this.active?"last":"first"]())},previousPage:function(t){var n,r,i;if(!this.active){this.next(t);return}if(this.isFirstItem())return;this._hasScroll()?(r=this.active.offset().top,i=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return n=e(this),n.offset().top-r+i>0}),this.focus(t,n)):this.focus(t,this.activeMenu.children(".ui-menu-item").first())},_hasScroll:function(){return this.element.outerHeight()
      ").appendTo(this.element),this.oldValue=this._value(),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(e){return e===t?this._value():(this._setOption("value",e),this)},_setOption:function(e,t){e==="value"&&(this.options.value=t,this._refreshValue(),this._value()===this.options.max&&this._trigger("complete")),this._super(e,t)},_value:function(){var e=this.options.value;return typeof e!="number"&&(e=0),Math.min(this.options.max,Math.max(this.min,e))},_percentage:function(){return 100*this._value()/this.options.max},_refreshValue:function(){var e=this.value(),t=this._percentage();this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),this.valueDiv.toggle(e>this.min).toggleClass("ui-corner-right",e===this.options.max).width(t.toFixed(0)+"%"),this.element.attr("aria-valuenow",e)}})})(jQuery);(function(e,t){var n=5;e.widget("ui.slider",e.ui.mouse,{version:"1.9.2",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var t,r,i=this.options,s=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),o="",u=[];this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"+(i.disabled?" ui-slider-disabled ui-disabled":"")),this.range=e([]),i.range&&(i.range===!0&&(i.values||(i.values=[this._valueMin(),this._valueMin()]),i.values.length&&i.values.length!==2&&(i.values=[i.values[0],i.values[0]])),this.range=e("
      ").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(i.range==="min"||i.range==="max"?" ui-slider-range-"+i.range:""))),r=i.values&&i.values.length||1;for(t=s.length;tn&&(i=n,s=e(this),o=t)}),c.range===!0&&this.values(1)===c.min&&(o+=1,s=e(this.handles[o])),u=this._start(t,o),u===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,s.addClass("ui-state-active").focus(),a=s.offset(),f=!e(t.target).parents().andSelf().is(".ui-slider-handle"),this._clickOffset=f?{left:0,top:0}:{left:t.pageX-a.left-s.width()/2,top:t.pageY-a.top-s.height()/2-(parseInt(s.css("borderTopWidth"),10)||0)-(parseInt(s.css("borderBottomWidth"),10)||0)+(parseInt(s.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,r),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},n=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,n),!1},_mouseStop:function(e){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(e){var t,n,r,i,s;return this.orientation==="horizontal"?(t=this.elementSize.width,n=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,n=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),r=n/t,r>1&&(r=1),r<0&&(r=0),this.orientation==="vertical"&&(r=1-r),i=this._valueMax()-this._valueMin(),s=this._valueMin()+r*i,this._trimAlignValue(s)},_start:function(e,t){var n={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(n.value=this.values(t),n.values=this.values()),this._trigger("start",e,n)},_slide:function(e,t,n){var r,i,s;this.options.values&&this.options.values.length?(r=this.values(t?0:1),this.options.values.length===2&&this.options.range===!0&&(t===0&&n>r||t===1&&n1){this.options.values[t]=this._trimAlignValue(n),this._refreshValue(),this._change(null,t);return}if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();r=this.options.values,i=arguments[0];for(s=0;s=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,n=(e-this._valueMin())%t,r=e-n;return Math.abs(n)*2>=t&&(r+=n>0?t:-t),parseFloat(r.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var t,n,r,i,s,o=this.options.range,u=this.options,a=this,f=this._animateOff?!1:u.animate,l={};this.options.values&&this.options.values.length?this.handles.each(function(r){n=(a.values(r)-a._valueMin())/(a._valueMax()-a._valueMin())*100,l[a.orientation==="horizontal"?"left":"bottom"]=n+"%",e(this).stop(1,1)[f?"animate":"css"](l,u.animate),a.options.range===!0&&(a.orientation==="horizontal"?(r===0&&a.range.stop(1,1)[f?"animate":"css"]({left:n+"%"},u.animate),r===1&&a.range[f?"animate":"css"]({width:n-t+"%"},{queue:!1,duration:u.animate})):(r===0&&a.range.stop(1,1)[f?"animate":"css"]({bottom:n+"%"},u.animate),r===1&&a.range[f?"animate":"css"]({height:n-t+"%"},{queue:!1,duration:u.animate}))),t=n}):(r=this.value(),i=this._valueMin(),s=this._valueMax(),n=s!==i?(r-i)/(s-i)*100:0,l[this.orientation==="horizontal"?"left":"bottom"]=n+"%",this.handle.stop(1,1)[f?"animate":"css"](l,u.animate),o==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[f?"animate":"css"]({width:n+"%"},u.animate),o==="max"&&this.orientation==="horizontal"&&this.range[f?"animate":"css"]({width:100-n+"%"},{queue:!1,duration:u.animate}),o==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[f?"animate":"css"]({height:n+"%"},u.animate),o==="max"&&this.orientation==="vertical"&&this.range[f?"animate":"css"]({height:100-n+"%"},{queue:!1,duration:u.animate}))}})})(jQuery);(function(e){function t(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}e.widget("ui.spinner",{version:"1.9.2",defaultElement:"",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},n=this.element;return e.each(["min","max","step"],function(e,r){var i=n.attr(r);i!==undefined&&i.length&&(t[r]=i)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(e){if(this.cancelBlur){delete this.cancelBlur;return}this._refresh(),this.previous!==this.element.val()&&this._trigger("change",e)},mousewheel:function(e,t){if(!t)return;if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()},"mousedown .ui-spinner-button":function(t){function r(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=n,this._delay(function(){this.previous=n}))}var n;n=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),r.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,r.call(this)});if(this._start(t)===!1)return;this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){if(!e(t.currentTarget).hasClass("ui-state-active"))return;if(this._start(t)===!1)return!1;this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(e.height()*.5)&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var n=this.options,r=e.ui.keyCode;switch(t.keyCode){case r.UP:return this._repeat(null,1,t),!0;case r.DOWN:return this._repeat(null,-1,t),!0;case r.PAGE_UP:return this._repeat(null,n.page,t),!0;case r.PAGE_DOWN:return this._repeat(null,-n.page,t),!0}return!1},_uiSpinnerHtml:function(){return""},_buttonHtml:function(){return""+""+""+""+""},_start:function(e){return!this.spinning&&this._trigger("start",e)===!1?!1:(this.counter||(this.counter=1),this.spinning=!0,!0)},_repeat:function(e,t,n){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,n)},e),this._spin(t*this.options.step,n)},_spin:function(e,t){var n=this.value()||0;this.counter||(this.counter=1),n=this._adjustValue(n+e*this._increment(this.counter));if(!this.spinning||this._trigger("spin",t,{value:n})!==!1)this._value(n),this.counter++},_increment:function(t){var n=this.options.incremental;return n?e.isFunction(n)?n(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return this.options.min!==null&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=e.toString(),n=t.indexOf(".");return n===-1?0:t.length-n-1},_adjustValue:function(e){var t,n,r=this.options;return t=r.min!==null?r.min:0,n=e-t,n=Math.round(n/r.step)*r.step,e=t+n,e=parseFloat(e.toFixed(this._precision())),r.max!==null&&e>r.max?r.max:r.min!==null&&e1&&e.href.replace(r,"")===location.href.replace(r,"").replace(/\s/g,"%20")}var n=0,r=/#.*$/;e.widget("ui.tabs",{version:"1.9.2",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_create:function(){var t=this,n=this.options,r=n.active,i=location.hash.substring(1);this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",n.collapsible).delegate(".ui-tabs-nav > li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this._processTabs();if(r===null){i&&this.tabs.each(function(t,n){if(e(n).attr("aria-controls")===i)return r=t,!1}),r===null&&(r=this.tabs.index(this.tabs.filter(".ui-tabs-active")));if(r===null||r===-1)r=this.tabs.length?0:!1}r!==!1&&(r=this.tabs.index(this.tabs.eq(r)),r===-1&&(r=n.collapsible?!1:0)),n.active=r,!n.collapsible&&n.active===!1&&this.anchors.length&&(n.active=0),e.isArray(n.disabled)&&(n.disabled=e.unique(n.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.options.active!==!1&&this.anchors.length?this.active=this._findActive(this.options.active):this.active=e(),this._refresh(),this.active.length&&this.load(n.active)},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var n=e(this.document[0].activeElement).closest("li"),r=this.tabs.index(n),i=!0;if(this._handlePageNav(t))return;switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:r++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:i=!1,r--;break;case e.ui.keyCode.END:r=this.anchors.length-1;break;case e.ui.keyCode.HOME:r=0;break;case e.ui.keyCode.SPACE:t.preventDefault(),clearTimeout(this.activating),this._activate(r);return;case e.ui.keyCode.ENTER:t.preventDefault(),clearTimeout(this.activating),this._activate(r===this.options.active?!1:r);return;default:return}t.preventDefault(),clearTimeout(this.activating),r=this._focusNextTab(r,i),t.ctrlKey||(n.attr("aria-selected","false"),this.tabs.eq(r).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",r)},this.delay))},_panelKeydown:function(t){if(this._handlePageNav(t))return;t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){if(t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP)return this._activate(this._focusNextTab(this.options.active-1,!1)),!0;if(t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN)return this._activate(this._focusNextTab(this.options.active+1,!0)),!0},_findNextTab:function(t,n){function i(){return t>r&&(t=0),t<0&&(t=r),t}var r=this.tabs.length-1;while(e.inArray(i(),this.options.disabled)!==-1)t=n?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){if(e==="active"){this._activate(t);return}if(e==="disabled"){this._setupDisabled(t);return}this._super(e,t),e==="collapsible"&&(this.element.toggleClass("ui-tabs-collapsible",t),!t&&this.options.active===!1&&this._activate(0)),e==="event"&&this._setupEvents(t),e==="heightStyle"&&this._setupHeightStyle(t)},_tabId:function(e){return e.attr("aria-controls")||"ui-tabs-"+i()},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,n=this.tablist.children(":has(a[href])");t.disabled=e.map(n.filter(".ui-state-disabled"),function(e){return n.index(e)}),this._processTabs(),t.active===!1||!this.anchors.length?(t.active=!1,this.active=e()):this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-expanded":"false","aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-expanded":"true","aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist"),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(n,r){var i,o,u,a=e(r).uniqueId().attr("id"),f=e(r).closest("li"),l=f.attr("aria-controls");s(r)?(i=r.hash,o=t.element.find(t._sanitizeSelector(i))):(u=t._tabId(f),i="#"+u,o=t.element.find(i),o.length||(o=t._createPanel(u),o.insertAfter(t.panels[n-1]||t.tablist)),o.attr("aria-live","polite")),o.length&&(t.panels=t.panels.add(o)),l&&f.data("ui-tabs-aria-controls",l),f.attr({"aria-controls":i.substring(1),"aria-labelledby":a}),o.attr("aria-labelledby",a)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel")},_getList:function(){return this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("
      ").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var n=0,r;r=this.tabs[n];n++)t===!0||e.inArray(n,t)!==-1?e(r).addClass("ui-state-disabled").attr("aria-disabled","true"):e(r).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var n={click:function(e){e.preventDefault()}};t&&e.each(t.split(" "),function(e,t){n[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(this.anchors,n),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var n,r,i=this.element.parent();t==="fill"?(e.support.minHeight||(r=i.css("overflow"),i.css("overflow","hidden")),n=i.height(),this.element.siblings(":visible").each(function(){var t=e(this),r=t.css("position");if(r==="absolute"||r==="fixed")return;n-=t.outerHeight(!0)}),r&&i.css("overflow",r),this.element.children().not(this.panels).each(function(){n-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,n-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):t==="auto"&&(n=0,this.panels.each(function(){n=Math.max(n,e(this).height("").height())}).height(n))},_eventHandler:function(t){var n=this.options,r=this.active,i=e(t.currentTarget),s=i.closest("li"),o=s[0]===r[0],u=o&&n.collapsible,a=u?e():this._getPanelForTab(s),f=r.length?this._getPanelForTab(r):e(),l={oldTab:r,oldPanel:f,newTab:u?e():s,newPanel:a};t.preventDefault();if(s.hasClass("ui-state-disabled")||s.hasClass("ui-tabs-loading")||this.running||o&&!n.collapsible||this._trigger("beforeActivate",t,l)===!1)return;n.active=u?!1:this.tabs.index(s),this.active=o?e():s,this.xhr&&this.xhr.abort(),!f.length&&!a.length&&e.error("jQuery UI Tabs: Mismatching fragment identifier."),a.length&&this.load(this.tabs.index(s),t),this._toggle(t,l)},_toggle:function(t,n){function o(){r.running=!1,r._trigger("activate",t,n)}function u(){n.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),i.length&&r.options.show?r._show(i,r.options.show,o):(i.show(),o())}var r=this,i=n.newPanel,s=n.oldPanel;this.running=!0,s.length&&this.options.hide?this._hide(s,this.options.hide,function(){n.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),u()}):(n.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),s.hide(),u()),s.attr({"aria-expanded":"false","aria-hidden":"true"}),n.oldTab.attr("aria-selected","false"),i.length&&s.length?n.oldTab.attr("tabIndex",-1):i.length&&this.tabs.filter(function(){return e(this).attr("tabIndex")===0}).attr("tabIndex",-1),i.attr({"aria-expanded":"true","aria-hidden":"false"}),n.newTab.attr({"aria-selected":"true",tabIndex:0})},_activate:function(t){var n,r=this._findActive(t);if(r[0]===this.active[0])return;r.length||(r=this.active),n=r.find(".ui-tabs-anchor")[0],this._eventHandler({target:n,currentTarget:n,preventDefault:e.noop})},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return typeof e=="string"&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeData("href.tabs").removeData("load.tabs").removeUniqueId(),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),n=t.data("ui-tabs-aria-controls");n?t.attr("aria-controls",n):t.removeAttr("aria-controls")}),this.panels.show(),this.options.heightStyle!=="content"&&this.panels.css("height","")},enable:function(n){var r=this.options.disabled;if(r===!1)return;n===t?r=!1:(n=this._getIndex(n),e.isArray(r)?r=e.map(r,function(e){return e!==n?e:null}):r=e.map(this.tabs,function(e,t){return t!==n?t:null})),this._setupDisabled(r)},disable:function(n){var r=this.options.disabled;if(r===!0)return;if(n===t)r=!0;else{n=this._getIndex(n);if(e.inArray(n,r)!==-1)return;e.isArray(r)?r=e.merge([n],r).sort():r=[n]}this._setupDisabled(r)},load:function(t,n){t=this._getIndex(t);var r=this,i=this.tabs.eq(t),o=i.find(".ui-tabs-anchor"),u=this._getPanelForTab(i),a={tab:i,panel:u};if(s(o[0]))return;this.xhr=e.ajax(this._ajaxSettings(o,n,a)),this.xhr&&this.xhr.statusText!=="canceled"&&(i.addClass("ui-tabs-loading"),u.attr("aria-busy","true"),this.xhr.success(function(e){setTimeout(function(){u.html(e),r._trigger("load",n,a)},1)}).complete(function(e,t){setTimeout(function(){t==="abort"&&r.panels.stop(!1,!0),i.removeClass("ui-tabs-loading"),u.removeAttr("aria-busy"),e===r.xhr&&delete r.xhr},1)}))},_ajaxSettings:function(t,n,r){var i=this;return{url:t.attr("href"),beforeSend:function(t,s){return i._trigger("beforeLoad",n,e.extend({jqXHR:t,ajaxSettings:s},r))}}},_getPanelForTab:function(t){var n=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+n))}}),e.uiBackCompat!==!1&&(e.ui.tabs.prototype._ui=function(e,t){return{tab:e,panel:t,index:this.anchors.index(e)}},e.widget("ui.tabs",e.ui.tabs,{url:function(e,t){this.anchors.eq(e).attr("href",t)}}),e.widget("ui.tabs",e.ui.tabs,{options:{ajaxOptions:null,cache:!1},_create:function(){this._super();var t=this;this._on({tabsbeforeload:function(n,r){if(e.data(r.tab[0],"cache.tabs")){n.preventDefault();return}r.jqXHR.success(function(){t.options.cache&&e.data(r.tab[0],"cache.tabs",!0)})}})},_ajaxSettings:function(t,n,r){var i=this.options.ajaxOptions;return e.extend({},i,{error:function(e,t){try{i.error(e,t,r.tab.closest("li").index(),r.tab[0])}catch(n){}}},this._superApply(arguments))},_setOption:function(e,t){e==="cache"&&t===!1&&this.anchors.removeData("cache.tabs"),this._super(e,t)},_destroy:function(){this.anchors.removeData("cache.tabs"),this._super()},url:function(e){this.anchors.eq(e).removeData("cache.tabs"),this._superApply(arguments)}}),e.widget("ui.tabs",e.ui.tabs,{abort:function(){this.xhr&&this.xhr.abort()}}),e.widget("ui.tabs",e.ui.tabs,{options:{spinner:"Loading…"},_create:function(){this._super(),this._on({tabsbeforeload:function(e,t){if(e.target!==this.element[0]||!this.options.spinner)return;var n=t.tab.find("span"),r=n.html();n.html(this.options.spinner),t.jqXHR.complete(function(){n.html(r)})}})}}),e.widget("ui.tabs",e.ui.tabs,{options:{enable:null,disable:null},enable:function(t){var n=this.options,r;if(t&&n.disabled===!0||e.isArray(n.disabled)&&e.inArray(t,n.disabled)!==-1)r=!0;this._superApply(arguments),r&&this._trigger("enable",null,this._ui(this.anchors[t],this.panels[t]))},disable:function(t){var n=this.options,r;if(t&&n.disabled===!1||e.isArray(n.disabled)&&e.inArray(t,n.disabled)===-1)r=!0;this._superApply(arguments),r&&this._trigger("disable",null,this._ui(this.anchors[t],this.panels[t]))}}),e.widget("ui.tabs",e.ui.tabs,{options:{add:null,remove:null,tabTemplate:"
    • #{label}
    • "},add:function(n,r,i){i===t&&(i=this.anchors.length);var s,o,u=this.options,a=e(u.tabTemplate.replace(/#\{href\}/g,n).replace(/#\{label\}/g,r)),f=n.indexOf("#")?this._tabId(a):n.replace("#","");return a.addClass("ui-state-default ui-corner-top").data("ui-tabs-destroy",!0),a.attr("aria-controls",f),s=i>=this.tabs.length,o=this.element.find("#"+f),o.length||(o=this._createPanel(f),s?i>0?o.insertAfter(this.panels.eq(-1)):o.appendTo(this.element):o.insertBefore(this.panels[i])),o.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").hide(),s?a.appendTo(this.tablist):a.insertBefore(this.tabs[i]),u.disabled=e.map(u.disabled,function(e){return e>=i?++e:e}),this.refresh(),this.tabs.length===1&&u.active===!1&&this.option("active",0),this._trigger("add",null,this._ui(this.anchors[i],this.panels[i])),this},remove:function(t){t=this._getIndex(t);var n=this.options,r=this.tabs.eq(t).remove(),i=this._getPanelForTab(r).remove();return r.hasClass("ui-tabs-active")&&this.anchors.length>2&&this._activate(t+(t+1=t?--e:e}),this.refresh(),this._trigger("remove",null,this._ui(r.find("a")[0],i[0])),this}}),e.widget("ui.tabs",e.ui.tabs,{length:function(){return this.anchors.length}}),e.widget("ui.tabs",e.ui.tabs,{options:{idPrefix:"ui-tabs-"},_tabId:function(t){var n=t.is("li")?t.find("a[href]"):t;return n=n[0],e(n).closest("li").attr("aria-controls")||n.title&&n.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF\-]/g,"")||this.options.idPrefix+i()}}),e.widget("ui.tabs",e.ui.tabs,{options:{panelTemplate:"
      "},_createPanel:function(t){return e(this.options.panelTemplate).attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)}}),e.widget("ui.tabs",e.ui.tabs,{_create:function(){var e=this.options;e.active===null&&e.selected!==t&&(e.active=e.selected===-1?!1:e.selected),this._super(),e.selected=e.active,e.selected===!1&&(e.selected=-1)},_setOption:function(e,t){if(e!=="selected")return this._super(e,t);var n=this.options;this._super("active",t===-1?!1:t),n.selected=n.active,n.selected===!1&&(n.selected=-1)},_eventHandler:function(){this._superApply(arguments),this.options.selected=this.options.active,this.options.selected===!1&&(this.options.selected=-1)}}),e.widget("ui.tabs",e.ui.tabs,{options:{show:null,select:null},_create:function(){this._super(),this.options.active!==!1&&this._trigger("show",null,this._ui(this.active.find(".ui-tabs-anchor")[0],this._getPanelForTab(this.active)[0]))},_trigger:function(e,t,n){var r,i,s=this._superApply(arguments);return s?(e==="beforeActivate"?(r=n.newTab.length?n.newTab:n.oldTab,i=n.newPanel.length?n.newPanel:n.oldPanel,s=this._super("select",t,{tab:r.find(".ui-tabs-anchor")[0],panel:i[0],index:r.closest("li").index()})):e==="activate"&&n.newTab.length&&(s=this._super("show",t,{tab:n.newTab.find(".ui-tabs-anchor")[0],panel:n.newPanel[0],index:n.newTab.closest("li").index()})),s):!1}}),e.widget("ui.tabs",e.ui.tabs,{select:function(e){e=this._getIndex(e);if(e===-1){if(!this.options.collapsible||this.options.selected===-1)return;e=this.options.selected}this.anchors.eq(e).trigger(this.options.event+this.eventNamespace)}}),function(){var t=0;e.widget("ui.tabs",e.ui.tabs,{options:{cookie:null},_create:function(){var e=this.options,t;e.active==null&&e.cookie&&(t=parseInt(this._cookie(),10),t===-1&&(t=!1),e.active=t),this._super()},_cookie:function(n){var r=[this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+ ++t)];return arguments.length&&(r.push(n===!1?-1:n),r.push(this.options.cookie)),e.cookie.apply(null,r)},_refresh:function(){this._super(),this.options.cookie&&this._cookie(this.options.active,this.options.cookie)},_eventHandler:function(){this._superApply(arguments),this.options.cookie&&this._cookie(this.options.active,this.options.cookie)},_destroy:function(){this._super(),this.options.cookie&&this._cookie(null,this.options.cookie)}})}(),e.widget("ui.tabs",e.ui.tabs,{_trigger:function(t,n,r){var i=e.extend({},r);return t==="load"&&(i.panel=i.panel[0],i.tab=i.tab.find(".ui-tabs-anchor")[0]),this._super(t,n,i)}}),e.widget("ui.tabs",e.ui.tabs,{options:{fx:null},_getFx:function(){var t,n,r=this.options.fx;return r&&(e.isArray(r)?(t=r[0],n=r[1]):t=n=r),r?{show:n,hide:t}:null},_toggle:function(e,t){function o(){n.running=!1,n._trigger("activate",e,t)}function u(){t.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),r.length&&s.show?r.animate(s.show,s.show.duration,function(){o()}):(r.show(),o())}var n=this,r=t.newPanel,i=t.oldPanel,s=this._getFx();if(!s)return this._super(e,t);n.running=!0,i.length&&s.hide?i.animate(s.hide,s.hide.duration,function(){t.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),u()}):(t.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),i.hide(),u())}}))})(jQuery);(function(e){function n(t,n){var r=(t.attr("aria-describedby")||"").split(/\s+/);r.push(n),t.data("ui-tooltip-id",n).attr("aria-describedby",e.trim(r.join(" ")))}function r(t){var n=t.data("ui-tooltip-id"),r=(t.attr("aria-describedby")||"").split(/\s+/),i=e.inArray(n,r);i!==-1&&r.splice(i,1),t.removeData("ui-tooltip-id"),r=e.trim(r.join(" ")),r?t.attr("aria-describedby",r):t.removeAttr("aria-describedby")}var t=0;e.widget("ui.tooltip",{version:"1.9.2",options:{content:function(){return e(this).attr("title")},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable()},_setOption:function(t,n){var r=this;if(t==="disabled"){this[n?"_disable":"_enable"](),this.options[t]=n;return}this._super(t,n),t==="content"&&e.each(this.tooltips,function(e,t){r._updateContent(t)})},_disable:function(){var t=this;e.each(this.tooltips,function(n,r){var i=e.Event("blur");i.target=i.currentTarget=r[0],t.close(i,!0)}),this.element.find(this.options.items).andSelf().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).attr("title","")})},_enable:function(){this.element.find(this.options.items).andSelf().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var n=this,r=e(t?t.target:this.element).closest(this.options.items);if(!r.length||r.data("ui-tooltip-id"))return;r.attr("title")&&r.data("ui-tooltip-title",r.attr("title")),r.data("ui-tooltip-open",!0),t&&t.type==="mouseover"&&r.parents().each(function(){var t=e(this),r;t.data("ui-tooltip-open")&&(r=e.Event("blur"),r.target=r.currentTarget=this,n.close(r,!0)),t.attr("title")&&(t.uniqueId(),n.parents[this.id]={element:this,title:t.attr("title")},t.attr("title",""))}),this._updateContent(r,t)},_updateContent:function(e,t){var n,r=this.options.content,i=this,s=t?t.type:null;if(typeof r=="string")return this._open(t,e,r);n=r.call(e[0],function(n){if(!e.data("ui-tooltip-open"))return;i._delay(function(){t&&(t.type=s),this._open(t,e,n)})}),n&&this._open(t,e,n)},_open:function(t,r,i){function f(e){a.of=e;if(s.is(":hidden"))return;s.position(a)}var s,o,u,a=e.extend({},this.options.position);if(!i)return;s=this._find(r);if(s.length){s.find(".ui-tooltip-content").html(i);return}r.is("[title]")&&(t&&t.type==="mouseover"?r.attr("title",""):r.removeAttr("title")),s=this._tooltip(r),n(r,s.attr("id")),s.find(".ui-tooltip-content").html(i),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:f}),f(t)):s.position(e.extend({of:r},this.options.position)),s.hide(),this._show(s,this.options.show),this.options.show&&this.options.show.delay&&(u=setInterval(function(){s.is(":visible")&&(f(a.of),clearInterval(u))},e.fx.interval)),this._trigger("open",t,{tooltip:s}),o={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var n=e.Event(t);n.currentTarget=r[0],this.close(n,!0)}},remove:function(){this._removeTooltip(s)}};if(!t||t.type==="mouseover")o.mouseleave="close";if(!t||t.type==="focusin")o.focusout="close";this._on(!0,r,o)},close:function(t){var n=this,i=e(t?t.currentTarget:this.element),s=this._find(i);if(this.closing)return;i.data("ui-tooltip-title")&&i.attr("title",i.data("ui-tooltip-title")),r(i),s.stop(!0),this._hide(s,this.options.hide,function(){n._removeTooltip(e(this))}),i.removeData("ui-tooltip-open"),this._off(i,"mouseleave focusout keyup"),i[0]!==this.element[0]&&this._off(i,"remove"),this._off(this.document,"mousemove"),t&&t.type==="mouseleave"&&e.each(this.parents,function(t,r){e(r.element).attr("title",r.title),delete n.parents[t]}),this.closing=!0,this._trigger("close",t,{tooltip:s}),this.closing=!1},_tooltip:function(n){var r="ui-tooltip-"+t++,i=e("
      ").attr({id:r,role:"tooltip"}).addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||""));return e("
      ").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),e.fn.bgiframe&&i.bgiframe(),this.tooltips[r]=n,i},_find:function(t){var n=t.data("ui-tooltip-id");return n?e("#"+n):e()},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(n,r){var i=e.Event("blur");i.target=i.currentTarget=r[0],t.close(i,!0),e("#"+n).remove(),r.data("ui-tooltip-title")&&(r.attr("title",r.data("ui-tooltip-title")),r.removeData("ui-tooltip-title"))})}})})(jQuery);jQuery.effects||function(e,t){var n=e.uiBackCompat!==!1,r="ui-effects-";e.effects={effect:{}},function(t,n){function p(e,t,n){var r=a[t.type]||{};return e==null?n||!t.def?null:t.def:(e=r.floor?~~e:parseFloat(e),isNaN(e)?t.def:r.mod?(e+r.mod)%r.mod:0>e?0:r.max")[0],c,h=t.each;l.style.cssText="background-color:rgba(1,1,1,.5)",f.rgba=l.style.backgroundColor.indexOf("rgba")>-1,h(u,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),o.fn=t.extend(o.prototype,{parse:function(r,i,s,a){if(r===n)return this._rgba=[null,null,null,null],this;if(r.jquery||r.nodeType)r=t(r).css(i),i=n;var f=this,l=t.type(r),v=this._rgba=[];i!==n&&(r=[r,i,s,a],l="array");if(l==="string")return this.parse(d(r)||c._default);if(l==="array")return h(u.rgba.props,function(e,t){v[t.idx]=p(r[t.idx],t)}),this;if(l==="object")return r instanceof o?h(u,function(e,t){r[t.cache]&&(f[t.cache]=r[t.cache].slice())}):h(u,function(t,n){var i=n.cache;h(n.props,function(e,t){if(!f[i]&&n.to){if(e==="alpha"||r[e]==null)return;f[i]=n.to(f._rgba)}f[i][t.idx]=p(r[e],t,!0)}),f[i]&&e.inArray(null,f[i].slice(0,3))<0&&(f[i][3]=1,n.from&&(f._rgba=n.from(f[i])))}),this},is:function(e){var t=o(e),n=!0,r=this;return h(u,function(e,i){var s,o=t[i.cache];return o&&(s=r[i.cache]||i.to&&i.to(r._rgba)||[],h(i.props,function(e,t){if(o[t.idx]!=null)return n=o[t.idx]===s[t.idx],n})),n}),n},_space:function(){var e=[],t=this;return h(u,function(n,r){t[r.cache]&&e.push(n)}),e.pop()},transition:function(e,t){var n=o(e),r=n._space(),i=u[r],s=this.alpha()===0?o("transparent"):this,f=s[i.cache]||i.to(s._rgba),l=f.slice();return n=n[i.cache],h(i.props,function(e,r){var i=r.idx,s=f[i],o=n[i],u=a[r.type]||{};if(o===null)return;s===null?l[i]=o:(u.mod&&(o-s>u.mod/2?s+=u.mod:s-o>u.mod/2&&(s-=u.mod)),l[i]=p((o-s)*t+s,r))}),this[r](l)},blend:function(e){if(this._rgba[3]===1)return this;var n=this._rgba.slice(),r=n.pop(),i=o(e)._rgba;return o(t.map(n,function(e,t){return(1-r)*i[t]+r*e}))},toRgbaString:function(){var e="rgba(",n=t.map(this._rgba,function(e,t){return e==null?t>2?1:0:e});return n[3]===1&&(n.pop(),e="rgb("),e+n.join()+")"},toHslaString:function(){var e="hsla(",n=t.map(this.hsla(),function(e,t){return e==null&&(e=t>2?1:0),t&&t<3&&(e=Math.round(e*100)+"%"),e});return n[3]===1&&(n.pop(),e="hsl("),e+n.join()+")"},toHexString:function(e){var n=this._rgba.slice(),r=n.pop();return e&&n.push(~~(r*255)),"#"+t.map(n,function(e){return e=(e||0).toString(16),e.length===1?"0"+e:e}).join("")},toString:function(){return this._rgba[3]===0?"transparent":this.toRgbaString()}}),o.fn.parse.prototype=o.fn,u.hsla.to=function(e){if(e[0]==null||e[1]==null||e[2]==null)return[null,null,null,e[3]];var t=e[0]/255,n=e[1]/255,r=e[2]/255,i=e[3],s=Math.max(t,n,r),o=Math.min(t,n,r),u=s-o,a=s+o,f=a*.5,l,c;return o===s?l=0:t===s?l=60*(n-r)/u+360:n===s?l=60*(r-t)/u+120:l=60*(t-n)/u+240,f===0||f===1?c=f:f<=.5?c=u/a:c=u/(2-a),[Math.round(l)%360,c,f,i==null?1:i]},u.hsla.from=function(e){if(e[0]==null||e[1]==null||e[2]==null)return[null,null,null,e[3]];var t=e[0]/360,n=e[1],r=e[2],i=e[3],s=r<=.5?r*(1+n):r+n-r*n,o=2*r-s;return[Math.round(v(o,s,t+1/3)*255),Math.round(v(o,s,t)*255),Math.round(v(o,s,t-1/3)*255),i]},h(u,function(e,r){var s=r.props,u=r.cache,a=r.to,f=r.from;o.fn[e]=function(e){a&&!this[u]&&(this[u]=a(this._rgba));if(e===n)return this[u].slice();var r,i=t.type(e),l=i==="array"||i==="object"?e:arguments,c=this[u].slice();return h(s,function(e,t){var n=l[i==="object"?e:t.idx];n==null&&(n=c[t.idx]),c[t.idx]=p(n,t)}),f?(r=o(f(c)),r[u]=c,r):o(c)},h(s,function(n,r){if(o.fn[n])return;o.fn[n]=function(s){var o=t.type(s),u=n==="alpha"?this._hsla?"hsla":"rgba":e,a=this[u](),f=a[r.idx],l;return o==="undefined"?f:(o==="function"&&(s=s.call(this,f),o=t.type(s)),s==null&&r.empty?this:(o==="string"&&(l=i.exec(s),l&&(s=f+parseFloat(l[2])*(l[1]==="+"?1:-1))),a[r.idx]=s,this[u](a)))}})}),h(r,function(e,n){t.cssHooks[n]={set:function(e,r){var i,s,u="";if(t.type(r)!=="string"||(i=d(r))){r=o(i||r);if(!f.rgba&&r._rgba[3]!==1){s=n==="backgroundColor"?e.parentNode:e;while((u===""||u==="transparent")&&s&&s.style)try{u=t.css(s,"backgroundColor"),s=s.parentNode}catch(a){}r=r.blend(u&&u!=="transparent"?u:"_default")}r=r.toRgbaString()}try{e.style[n]=r}catch(l){}}},t.fx.step[n]=function(e){e.colorInit||(e.start=o(e.elem,n),e.end=o(e.end),e.colorInit=!0),t.cssHooks[n].set(e.elem,e.start.transition(e.end,e.pos))}}),t.cssHooks.borderColor={expand:function(e){var t={};return h(["Top","Right","Bottom","Left"],function(n,r){t["border"+r+"Color"]=e}),t}},c=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(jQuery),function(){function i(){var t=this.ownerDocument.defaultView?this.ownerDocument.defaultView.getComputedStyle(this,null):this.currentStyle,n={},r,i;if(t&&t.length&&t[0]&&t[t[0]]){i=t.length;while(i--)r=t[i],typeof t[r]=="string"&&(n[e.camelCase(r)]=t[r])}else for(r in t)typeof t[r]=="string"&&(n[r]=t[r]);return n}function s(t,n){var i={},s,o;for(s in n)o=n[s],t[s]!==o&&!r[s]&&(e.fx.step[s]||!isNaN(parseFloat(o)))&&(i[s]=o);return i}var n=["add","remove","toggle"],r={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,n){e.fx.step[n]=function(e){if(e.end!=="none"&&!e.setAttr||e.pos===1&&!e.setAttr)jQuery.style(e.elem,n,e.end),e.setAttr=!0}}),e.effects.animateClass=function(t,r,o,u){var a=e.speed(r,o,u);return this.queue(function(){var r=e(this),o=r.attr("class")||"",u,f=a.children?r.find("*").andSelf():r;f=f.map(function(){var t=e(this);return{el:t,start:i.call(this)}}),u=function(){e.each(n,function(e,n){t[n]&&r[n+"Class"](t[n])})},u(),f=f.map(function(){return this.end=i.call(this.el[0]),this.diff=s(this.start,this.end),this}),r.attr("class",o),f=f.map(function(){var t=this,n=e.Deferred(),r=jQuery.extend({},a,{queue:!1,complete:function(){n.resolve(t)}});return this.el.animate(this.diff,r),n.promise()}),e.when.apply(e,f.get()).done(function(){u(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),a.complete.call(r[0])})})},e.fn.extend({_addClass:e.fn.addClass,addClass:function(t,n,r,i){return n?e.effects.animateClass.call(this,{add:t},n,r,i):this._addClass(t)},_removeClass:e.fn.removeClass,removeClass:function(t,n,r,i){return n?e.effects.animateClass.call(this,{remove:t},n,r,i):this._removeClass(t)},_toggleClass:e.fn.toggleClass,toggleClass:function(n,r,i,s,o){return typeof r=="boolean"||r===t?i?e.effects.animateClass.call(this,r?{add:n}:{remove:n},i,s,o):this._toggleClass(n,r):e.effects.animateClass.call(this,{toggle:n},r,i,s)},switchClass:function(t,n,r,i,s){return e.effects.animateClass.call(this,{add:n,remove:t},r,i,s)}})}(),function(){function i(t,n,r,i){e.isPlainObject(t)&&(n=t,t=t.effect),t={effect:t},n==null&&(n={}),e.isFunction(n)&&(i=n,r=null,n={});if(typeof n=="number"||e.fx.speeds[n])i=r,r=n,n={};return e.isFunction(r)&&(i=r,r=null),n&&e.extend(t,n),r=r||n.duration,t.duration=e.fx.off?0:typeof r=="number"?r:r in e.fx.speeds?e.fx.speeds[r]:e.fx.speeds._default,t.complete=i||n.complete,t}function s(t){return!t||typeof t=="number"||e.fx.speeds[t]?!0:typeof t=="string"&&!e.effects.effect[t]?n&&e.effects[t]?!1:!0:!1}e.extend(e.effects,{version:"1.9.2",save:function(e,t){for(var n=0;n
      ").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),i={width:t.width(),height:t.height()},s=document.activeElement;try{s.id}catch(o){s=document.body}return t.wrap(r),(t[0]===s||e.contains(t[0],s))&&e(s).focus(),r=t.parent(),t.css("position")==="static"?(r.css({position:"relative"}),t.css({position:"relative"})):(e.extend(n,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,r){n[r]=t.css(r),isNaN(parseInt(n[r],10))&&(n[r]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(i),r.css(n).show()},removeWrapper:function(t){var n=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===n||e.contains(t[0],n))&&e(n).focus()),t},setTransition:function(t,n,r,i){return i=i||{},e.each(n,function(e,n){var s=t.cssUnit(n);s[0]>0&&(i[n]=s[0]*r+s[1])}),i}}),e.fn.extend({effect:function(){function a(n){function u(){e.isFunction(i)&&i.call(r[0]),e.isFunction(n)&&n()}var r=e(this),i=t.complete,s=t.mode;(r.is(":hidden")?s==="hide":s==="show")?u():o.call(r[0],t,u)}var t=i.apply(this,arguments),r=t.mode,s=t.queue,o=e.effects.effect[t.effect],u=!o&&n&&e.effects[t.effect];return e.fx.off||!o&&!u?r?this[r](t.duration,t.complete):this.each(function(){t.complete&&t.complete.call(this)}):o?s===!1?this.each(a):this.queue(s||"fx",a):u.call(this,{options:t,duration:t.duration,callback:t.complete,mode:t.mode})},_show:e.fn.show,show:function(e){if(s(e))return this._show.apply(this,arguments);var t=i.apply(this,arguments);return t.mode="show",this.effect.call(this,t)},_hide:e.fn.hide,hide:function(e){if(s(e))return this._hide.apply(this,arguments);var t=i.apply(this,arguments);return t.mode="hide",this.effect.call(this,t)},__toggle:e.fn.toggle,toggle:function(t){if(s(t)||typeof t=="boolean"||e.isFunction(t))return this.__toggle.apply(this,arguments);var n=i.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)},cssUnit:function(t){var n=this.css(t),r=[];return e.each(["em","px","%","pt"],function(e,t){n.indexOf(t)>0&&(r=[parseFloat(n),t])}),r}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,n){t[n]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return e===0||e===1?e:-Math.pow(2,8*(e-1))*Math.sin(((e-1)*80-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){var t,n=4;while(e<((t=Math.pow(2,--n))-1)/11);return 1/Math.pow(4,3-n)-7.5625*Math.pow((t*3-2)/22-e,2)}}),e.each(t,function(t,n){e.easing["easeIn"+t]=n,e.easing["easeOut"+t]=function(e){return 1-n(1-e)},e.easing["easeInOut"+t]=function(e){return e<.5?n(e*2)/2:1-n(e*-2+2)/2}})}()}(jQuery);(function(e,t){var n=/up|down|vertical/,r=/up|left|vertical|horizontal/;e.effects.effect.blind=function(t,i){var s=e(this),o=["position","top","bottom","left","right","height","width"],u=e.effects.setMode(s,t.mode||"hide"),a=t.direction||"up",f=n.test(a),l=f?"height":"width",c=f?"top":"left",h=r.test(a),p={},d=u==="show",v,m,g;s.parent().is(".ui-effects-wrapper")?e.effects.save(s.parent(),o):e.effects.save(s,o),s.show(),v=e.effects.createWrapper(s).css({overflow:"hidden"}),m=v[l](),g=parseFloat(v.css(c))||0,p[l]=d?m:0,h||(s.css(f?"bottom":"right",0).css(f?"top":"left","auto").css({position:"absolute"}),p[c]=d?g:m+g),d&&(v.css(l,0),h||v.css(c,g+m)),v.animate(p,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){u==="hide"&&s.hide(),e.effects.restore(s,o),e.effects.removeWrapper(s),i()}})}})(jQuery);(function(e,t){e.effects.effect.bounce=function(t,n){var r=e(this),i=["position","top","bottom","left","right","height","width"],s=e.effects.setMode(r,t.mode||"effect"),o=s==="hide",u=s==="show",a=t.direction||"up",f=t.distance,l=t.times||5,c=l*2+(u||o?1:0),h=t.duration/c,p=t.easing,d=a==="up"||a==="down"?"top":"left",v=a==="up"||a==="left",m,g,y,b=r.queue(),w=b.length;(u||o)&&i.push("opacity"),e.effects.save(r,i),r.show(),e.effects.createWrapper(r),f||(f=r[d==="top"?"outerHeight":"outerWidth"]()/3),u&&(y={opacity:1},y[d]=0,r.css("opacity",0).css(d,v?-f*2:f*2).animate(y,h,p)),o&&(f/=Math.pow(2,l-1)),y={},y[d]=0;for(m=0;m1&&b.splice.apply(b,[1,0].concat(b.splice(w,c+1))),r.dequeue()}})(jQuery);(function(e,t){e.effects.effect.clip=function(t,n){var r=e(this),i=["position","top","bottom","left","right","height","width"],s=e.effects.setMode(r,t.mode||"hide"),o=s==="show",u=t.direction||"vertical",a=u==="vertical",f=a?"height":"width",l=a?"top":"left",c={},h,p,d;e.effects.save(r,i),r.show(),h=e.effects.createWrapper(r).css({overflow:"hidden"}),p=r[0].tagName==="IMG"?h:r,d=p[f](),o&&(p.css(f,0),p.css(l,d/2)),c[f]=o?d:0,c[l]=o?0:d/2,p.animate(c,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){o||r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()}})}})(jQuery);(function(e,t){e.effects.effect.drop=function(t,n){var r=e(this),i=["position","top","bottom","left","right","opacity","height","width"],s=e.effects.setMode(r,t.mode||"hide"),o=s==="show",u=t.direction||"left",a=u==="up"||u==="down"?"top":"left",f=u==="up"||u==="left"?"pos":"neg",l={opacity:o?1:0},c;e.effects.save(r,i),r.show(),e.effects.createWrapper(r),c=t.distance||r[a==="top"?"outerHeight":"outerWidth"](!0)/2,o&&r.css("opacity",0).css(a,f==="pos"?-c:c),l[a]=(o?f==="pos"?"+=":"-=":f==="pos"?"-=":"+=")+c,r.animate(l,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){s==="hide"&&r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()}})}})(jQuery);(function(e,t){e.effects.effect.explode=function(t,n){function y(){c.push(this),c.length===r*i&&b()}function b(){s.css({visibility:"visible"}),e(c).remove(),u||s.hide(),n()}var r=t.pieces?Math.round(Math.sqrt(t.pieces)):3,i=r,s=e(this),o=e.effects.setMode(s,t.mode||"hide"),u=o==="show",a=s.show().css("visibility","hidden").offset(),f=Math.ceil(s.outerWidth()/i),l=Math.ceil(s.outerHeight()/r),c=[],h,p,d,v,m,g;for(h=0;h
      ").css({position:"absolute",visibility:"visible",left:-p*f,top:-h*l}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:f,height:l,left:d+(u?m*f:0),top:v+(u?g*l:0),opacity:u?0:1}).animate({left:d+(u?0:m*f),top:v+(u?0:g*l),opacity:u?1:0},t.duration||500,t.easing,y)}}})(jQuery);(function(e,t){e.effects.effect.fade=function(t,n){var r=e(this),i=e.effects.setMode(r,t.mode||"toggle");r.animate({opacity:i},{queue:!1,duration:t.duration,easing:t.easing,complete:n})}})(jQuery);(function(e,t){e.effects.effect.fold=function(t,n){var r=e(this),i=["position","top","bottom","left","right","height","width"],s=e.effects.setMode(r,t.mode||"hide"),o=s==="show",u=s==="hide",a=t.size||15,f=/([0-9]+)%/.exec(a),l=!!t.horizFirst,c=o!==l,h=c?["width","height"]:["height","width"],p=t.duration/2,d,v,m={},g={};e.effects.save(r,i),r.show(),d=e.effects.createWrapper(r).css({overflow:"hidden"}),v=c?[d.width(),d.height()]:[d.height(),d.width()],f&&(a=parseInt(f[1],10)/100*v[u?0:1]),o&&d.css(l?{height:0,width:a}:{height:a,width:0}),m[h[0]]=o?v[0]:a,g[h[1]]=o?v[1]:0,d.animate(m,p,t.easing).animate(g,p,t.easing,function(){u&&r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()})}})(jQuery);(function(e,t){e.effects.effect.highlight=function(t,n){var r=e(this),i=["backgroundImage","backgroundColor","opacity"],s=e.effects.setMode(r,t.mode||"show"),o={backgroundColor:r.css("backgroundColor")};s==="hide"&&(o.opacity=0),e.effects.save(r,i),r.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){s==="hide"&&r.hide(),e.effects.restore(r,i),n()}})}})(jQuery);(function(e,t){e.effects.effect.pulsate=function(t,n){var r=e(this),i=e.effects.setMode(r,t.mode||"show"),s=i==="show",o=i==="hide",u=s||i==="hide",a=(t.times||5)*2+(u?1:0),f=t.duration/a,l=0,c=r.queue(),h=c.length,p;if(s||!r.is(":visible"))r.css("opacity",0).show(),l=1;for(p=1;p1&&c.splice.apply(c,[1,0].concat(c.splice(h,a+1))),r.dequeue()}})(jQuery);(function(e,t){e.effects.effect.puff=function(t,n){var r=e(this),i=e.effects.setMode(r,t.mode||"hide"),s=i==="hide",o=parseInt(t.percent,10)||150,u=o/100,a={height:r.height(),width:r.width(),outerHeight:r.outerHeight(),outerWidth:r.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:i,complete:n,percent:s?o:100,from:s?a:{height:a.height*u,width:a.width*u,outerHeight:a.outerHeight*u,outerWidth:a.outerWidth*u}}),r.effect(t)},e.effects.effect.scale=function(t,n){var r=e(this),i=e.extend(!0,{},t),s=e.effects.setMode(r,t.mode||"effect"),o=parseInt(t.percent,10)||(parseInt(t.percent,10)===0?0:s==="hide"?0:100),u=t.direction||"both",a=t.origin,f={height:r.height(),width:r.width(),outerHeight:r.outerHeight(),outerWidth:r.outerWidth()},l={y:u!=="horizontal"?o/100:1,x:u!=="vertical"?o/100:1};i.effect="size",i.queue=!1,i.complete=n,s!=="effect"&&(i.origin=a||["middle","center"],i.restore=!0),i.from=t.from||(s==="show"?{height:0,width:0,outerHeight:0,outerWidth:0}:f),i.to={height:f.height*l.y,width:f.width*l.x,outerHeight:f.outerHeight*l.y,outerWidth:f.outerWidth*l.x},i.fade&&(s==="show"&&(i.from.opacity=0,i.to.opacity=1),s==="hide"&&(i.from.opacity=1,i.to.opacity=0)),r.effect(i)},e.effects.effect.size=function(t,n){var r,i,s,o=e(this),u=["position","top","bottom","left","right","width","height","overflow","opacity"],a=["position","top","bottom","left","right","overflow","opacity"],f=["width","height","overflow"],l=["fontSize"],c=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],h=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=e.effects.setMode(o,t.mode||"effect"),d=t.restore||p!=="effect",v=t.scale||"both",m=t.origin||["middle","center"],g=o.css("position"),y=d?u:a,b={height:0,width:0,outerHeight:0,outerWidth:0};p==="show"&&o.show(),r={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},t.mode==="toggle"&&p==="show"?(o.from=t.to||b,o.to=t.from||r):(o.from=t.from||(p==="show"?b:r),o.to=t.to||(p==="hide"?b:r)),s={from:{y:o.from.height/r.height,x:o.from.width/r.width},to:{y:o.to.height/r.height,x:o.to.width/r.width}};if(v==="box"||v==="both")s.from.y!==s.to.y&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,s.from.y,o.from),o.to=e.effects.setTransition(o,c,s.to.y,o.to)),s.from.x!==s.to.x&&(y=y.concat(h),o.from=e.effects.setTransition(o,h,s.from.x,o.from),o.to=e.effects.setTransition(o,h,s.to.x,o.to));(v==="content"||v==="both")&&s.from.y!==s.to.y&&(y=y.concat(l).concat(f),o.from=e.effects.setTransition(o,l,s.from.y,o.from),o.to=e.effects.setTransition(o,l,s.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),m&&(i=e.effects.getBaseline(m,r),o.from.top=(r.outerHeight-o.outerHeight())*i.y,o.from.left=(r.outerWidth-o.outerWidth())*i.x,o.to.top=(r.outerHeight-o.to.outerHeight)*i.y,o.to.left=(r.outerWidth-o.to.outerWidth)*i.x),o.css(o.from);if(v==="content"||v==="both")c=c.concat(["marginTop","marginBottom"]).concat(l),h=h.concat(["marginLeft","marginRight"]),f=u.concat(c).concat(h),o.find("*[width]").each(function(){var n=e(this),r={height:n.height(),width:n.width(),outerHeight:n.outerHeight(),outerWidth:n.outerWidth()};d&&e.effects.save(n,f),n.from={height:r.height*s.from.y,width:r.width*s.from.x,outerHeight:r.outerHeight*s.from.y,outerWidth:r.outerWidth*s.from.x},n.to={height:r.height*s.to.y,width:r.width*s.to.x,outerHeight:r.height*s.to.y,outerWidth:r.width*s.to.x},s.from.y!==s.to.y&&(n.from=e.effects.setTransition(n,c,s.from.y,n.from),n.to=e.effects.setTransition(n,c,s.to.y,n.to)),s.from.x!==s.to.x&&(n.from=e.effects.setTransition(n,h,s.from.x,n.from),n.to=e.effects.setTransition(n,h,s.to.x,n.to)),n.css(n.from),n.animate(n.to,t.duration,t.easing,function(){d&&e.effects.restore(n,f)})});o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){o.to.opacity===0&&o.css("opacity",o.from.opacity),p==="hide"&&o.hide(),e.effects.restore(o,y),d||(g==="static"?o.css({position:"relative",top:o.to.top,left:o.to.left}):e.each(["top","left"],function(e,t){o.css(t,function(t,n){var r=parseInt(n,10),i=e?o.to.left:o.to.top;return n==="auto"?i+"px":r+i+"px"})})),e.effects.removeWrapper(o),n()}})}})(jQuery);(function(e,t){e.effects.effect.shake=function(t,n){var r=e(this),i=["position","top","bottom","left","right","height","width"],s=e.effects.setMode(r,t.mode||"effect"),o=t.direction||"left",u=t.distance||20,a=t.times||3,f=a*2+1,l=Math.round(t.duration/f),c=o==="up"||o==="down"?"top":"left",h=o==="up"||o==="left",p={},d={},v={},m,g=r.queue(),y=g.length;e.effects.save(r,i),r.show(),e.effects.createWrapper(r),p[c]=(h?"-=":"+=")+u,d[c]=(h?"+=":"-=")+u*2,v[c]=(h?"-=":"+=")+u*2,r.animate(p,l,t.easing);for(m=1;m1&&g.splice.apply(g,[1,0].concat(g.splice(y,f+1))),r.dequeue()}})(jQuery);(function(e,t){e.effects.effect.slide=function(t,n){var r=e(this),i=["position","top","bottom","left","right","width","height"],s=e.effects.setMode(r,t.mode||"show"),o=s==="show",u=t.direction||"left",a=u==="up"||u==="down"?"top":"left",f=u==="up"||u==="left",l,c={};e.effects.save(r,i),r.show(),l=t.distance||r[a==="top"?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(r).css({overflow:"hidden"}),o&&r.css(a,f?isNaN(l)?"-"+l:-l:l),c[a]=(o?f?"+=":"-=":f?"-=":"+=")+l,r.animate(c,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){s==="hide"&&r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()}})}})(jQuery);(function(e,t){e.effects.effect.transfer=function(t,n){var r=e(this),i=e(t.to),s=i.css("position")==="fixed",o=e("body"),u=s?o.scrollTop():0,a=s?o.scrollLeft():0,f=i.offset(),l={top:f.top-u,left:f.left-a,height:i.innerHeight(),width:i.innerWidth()},c=r.offset(),h=e('
      ').appendTo(document.body).addClass(t.className).css({top:c.top-u,left:c.left-a,height:r.innerHeight(),width:r.innerWidth(),position:s?"fixed":"absolute"}).animate(l,t.duration,t.easing,function(){h.remove(),n()})}})(jQuery);assets/plugins/jquery-ui/jquery-ui-1.10.1.custom.css000064400000076432152510440710016165 0ustar00/*! jQuery UI - v1.10.1 - 2013-03-04 * http://jqueryui.com * Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px * Copyright (c) 2013 jQuery Foundation and other contributors Licensed MIT */ /* Layout helpers ----------------------------------*/ .ui-helper-hidden { display: none; } .ui-helper-hidden-accessible { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; } .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } .ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; border-collapse: collapse; } .ui-helper-clearfix:after { clear: both; } .ui-helper-clearfix { min-height: 0; /* support: IE7 */ } .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } .ui-front { z-index: 100; } /* Interaction Cues ----------------------------------*/ .ui-state-disabled { cursor: default !important; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } /* Misc visuals ----------------------------------*/ /* Overlays */ .ui-widget-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; } .ui-resizable { position: relative; } .ui-resizable-handle { position: absolute; font-size: 0.1px; display: block; } .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px; } .ui-selectable-helper { position: absolute; z-index: 100; border: 1px dotted black; } .ui-accordion .ui-accordion-header { display: block; cursor: pointer; position: relative; margin-top: 2px; padding: .5em .5em .5em .7em; min-height: 0; /* support: IE7 */ } .ui-accordion .ui-accordion-icons { padding-left: 2.2em; } .ui-accordion .ui-accordion-noicons { padding-left: .7em; } .ui-accordion .ui-accordion-icons .ui-accordion-icons { padding-left: 2.2em; } .ui-accordion .ui-accordion-header .ui-accordion-header-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; overflow: auto; } .ui-autocomplete { position: absolute; top: 0; left: 0; cursor: default; } .ui-button { display: inline-block; position: relative; padding: 0; line-height: normal; margin-right: .1em; cursor: pointer; vertical-align: middle; text-align: center; overflow: visible; /* removes extra width in IE */ } .ui-button, .ui-button:link, .ui-button:visited, .ui-button:hover, .ui-button:active { text-decoration: none; } /* to make room for the icon, a width needs to be set here */ .ui-button-icon-only { width: 2.2em; } /* button elements seem to need a little more width */ button.ui-button-icon-only { width: 2.4em; } .ui-button-icons-only { width: 3.4em; } button.ui-button-icons-only { width: 3.7em; } /* button text element */ .ui-button .ui-button-text { display: block; line-height: normal; } .ui-button-text-only .ui-button-text { padding: .4em 1em; } .ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } .ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } .ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } .ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } /* no icon support for input elements, provide padding by default */ input.ui-button { padding: .4em 1em; } /* button icon element(s) */ .ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } .ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } .ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } .ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } /* button sets */ .ui-buttonset { margin-right: 7px; } .ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } /* workarounds */ /* reset extra padding in Firefox, see h5bp.com/l */ input.ui-button::-moz-focus-inner, button.ui-button::-moz-focus-inner { border: 0; padding: 0; } .ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } .ui-datepicker .ui-datepicker-header { position: relative; padding: .2em 0; } .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position: absolute; top: 2px; width: 1.8em; height: 1.8em; } .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } .ui-datepicker .ui-datepicker-prev { left: 2px; } .ui-datepicker .ui-datepicker-next { right: 2px; } .ui-datepicker .ui-datepicker-prev-hover { left: 1px; } .ui-datepicker .ui-datepicker-next-hover { right: 1px; } .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } .ui-datepicker .ui-datepicker-title select { font-size: 1em; margin: 1px 0; } .ui-datepicker select.ui-datepicker-month-year { width: 100%; } .ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year { width: 49%; } .ui-datepicker table { width: 100%; font-size: .9em; border-collapse: collapse; margin: 0 0 .4em; } .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } .ui-datepicker td { border: 0; padding: 1px; } .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding: 0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width: auto; overflow: visible; } .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float: left; } /* with multiple calendars */ .ui-datepicker.ui-datepicker-multi { width: auto; } .ui-datepicker-multi .ui-datepicker-group { float: left; } .ui-datepicker-multi .ui-datepicker-group table { width: 95%; margin: 0 auto .4em; } .ui-datepicker-multi-2 .ui-datepicker-group { width: 50%; } .ui-datepicker-multi-3 .ui-datepicker-group { width: 33.3%; } .ui-datepicker-multi-4 .ui-datepicker-group { width: 25%; } .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width: 0; } .ui-datepicker-multi .ui-datepicker-buttonpane { clear: left; } .ui-datepicker-row-break { clear: both; width: 100%; font-size: 0; } /* RTL support */ .ui-datepicker-rtl { direction: rtl; } .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } .ui-datepicker-rtl .ui-datepicker-buttonpane { clear: right; } .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, .ui-datepicker-rtl .ui-datepicker-group { float: right; } .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width: 0; border-left-width: 1px; } .ui-dialog { position: absolute; top: 0; left: 0; padding: .2em; outline: 0; } .ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } .ui-dialog .ui-dialog-title { float: left; margin: .1em 0; white-space: nowrap; width: 90%; overflow: hidden; text-overflow: ellipsis; } .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 21px; margin: -10px 0 0 0; padding: 1px; height: 20px; } .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; } .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin-top: .5em; padding: .3em 1em .5em .4em; } .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } .ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } .ui-dialog .ui-resizable-se { width: 12px; height: 12px; right: -5px; bottom: -5px; background-position: 16px 16px; } .ui-draggable .ui-dialog-titlebar { cursor: move; } .ui-menu { list-style: none; padding: 2px; margin: 0; display: block; outline: none; } .ui-menu .ui-menu { margin-top: -3px; position: absolute; } .ui-menu .ui-menu-item { margin: 0; padding: 0; width: 100%; } .ui-menu .ui-menu-divider { margin: 5px -2px 5px -2px; height: 0; font-size: 0; line-height: 0; border-width: 1px 0 0 0; } .ui-menu .ui-menu-item a { text-decoration: none; display: block; padding: 2px .4em; line-height: 1.5; min-height: 0; /* support: IE7 */ font-weight: normal; } .ui-menu .ui-menu-item a.ui-state-focus, .ui-menu .ui-menu-item a.ui-state-active { font-weight: normal; margin: -1px; } .ui-menu .ui-state-disabled { font-weight: normal; margin: .4em 0 .2em; line-height: 1.5; } .ui-menu .ui-state-disabled a { cursor: default; } /* icon support */ .ui-menu-icons { position: relative; } .ui-menu-icons .ui-menu-item a { position: relative; padding-left: 2em; } /* left-aligned */ .ui-menu .ui-icon { position: absolute; top: .2em; left: .2em; } /* right-aligned */ .ui-menu .ui-menu-icon { position: static; float: right; } .ui-progressbar { height: 2em; text-align: left; overflow: hidden; } .ui-progressbar .ui-progressbar-value { margin: -1px; height: 100%; } .ui-progressbar .ui-progressbar-overlay { background: url("images/animated-overlay.gif"); height: 100%; filter: alpha(opacity=25); opacity: 0.25; } .ui-progressbar-indeterminate .ui-progressbar-value { background-image: none; } .ui-slider { position: relative; text-align: left; } .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } /* For IE8 - See #6727 */ .ui-slider.ui-state-disabled .ui-slider-handle, .ui-slider.ui-state-disabled .ui-slider-range { filter: inherit; } .ui-slider-horizontal { height: .8em; } .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } .ui-slider-horizontal .ui-slider-range-min { left: 0; } .ui-slider-horizontal .ui-slider-range-max { right: 0; } .ui-slider-vertical { width: .8em; height: 100px; } .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } .ui-slider-vertical .ui-slider-range-min { bottom: 0; } .ui-slider-vertical .ui-slider-range-max { top: 0; } .ui-spinner { position: relative; display: inline-block; overflow: hidden; padding: 0; vertical-align: middle; } .ui-spinner-input { border: none; background: none; color: inherit; padding: 0; margin: .2em 0; vertical-align: middle; margin-left: .4em; margin-right: 22px; } .ui-spinner-button { width: 16px; height: 50%; font-size: .5em; padding: 0; margin: 0; text-align: center; position: absolute; cursor: default; display: block; overflow: hidden; right: 0; } /* more specificity required here to overide default borders */ .ui-spinner a.ui-spinner-button { border-top: none; border-bottom: none; border-right: none; } /* vertical centre icon */ .ui-spinner .ui-icon { position: absolute; margin-top: -8px; top: 50%; left: 0; } .ui-spinner-up { top: 0; } .ui-spinner-down { bottom: 0; } /* TR overrides */ .ui-spinner .ui-icon-triangle-1-s { /* need to fix icons sprite */ background-position: -65px -16px; } .ui-tabs { position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ padding: .2em; } .ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 0; margin: 1px .2em 0 0; border-bottom: 0; padding: 0; white-space: nowrap; } .ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } .ui-tabs .ui-tabs-nav li.ui-tabs-active { margin-bottom: -1px; padding-bottom: 1px; } .ui-tabs .ui-tabs-nav li.ui-tabs-active a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-tabs-loading a { cursor: text; } .ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { cursor: pointer; } .ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } .ui-tooltip { padding: 8px; position: absolute; z-index: 9999; max-width: 300px; -webkit-box-shadow: 0 0 5px #aaa; box-shadow: 0 0 5px #aaa; } body .ui-tooltip { border-width: 2px; } /* Component containers ----------------------------------*/ .ui-widget { font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif; font-size: 1.1em; } .ui-widget .ui-widget { font-size: 1em; } .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif; font-size: 1em; } .ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } .ui-widget-content a { color: #333333; } .ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } .ui-widget-header a { color: #ffffff; } /* Interaction states ----------------------------------*/ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; } .ui-state-hover a, .ui-state-hover a:hover, .ui-state-hover a:link, .ui-state-hover a:visited { color: #c77405; text-decoration: none; } .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } /* Interaction Cues ----------------------------------*/ .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight { border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; } .ui-state-highlight a, .ui-widget-content .ui-state-highlight a, .ui-widget-header .ui-state-highlight a { color: #363636; } .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error { border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } .ui-state-disabled .ui-icon { filter:Alpha(Opacity=35); /* For IE8 - See #6059 */ } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { width: 16px; height: 16px; background-position: 16px 16px; } .ui-icon, .ui-widget-content .ui-icon { background-image: url(images/ui-icons_222222_256x240.png); } .ui-widget-header .ui-icon { background-image: url(images/ui-icons_ffffff_256x240.png); } .ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } .ui-state-hover .ui-icon, .ui-state-focus .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } .ui-state-active .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } .ui-state-highlight .ui-icon { background-image: url(images/ui-icons_228ef1_256x240.png); } .ui-state-error .ui-icon, .ui-state-error-text .ui-icon { background-image: url(images/ui-icons_ffd27a_256x240.png); } /* positioning */ .ui-icon-carat-1-n { background-position: 0 0; } .ui-icon-carat-1-ne { background-position: -16px 0; } .ui-icon-carat-1-e { background-position: -32px 0; } .ui-icon-carat-1-se { background-position: -48px 0; } .ui-icon-carat-1-s { background-position: -64px 0; } .ui-icon-carat-1-sw { background-position: -80px 0; } .ui-icon-carat-1-w { background-position: -96px 0; } .ui-icon-carat-1-nw { background-position: -112px 0; } .ui-icon-carat-2-n-s { background-position: -128px 0; } .ui-icon-carat-2-e-w { background-position: -144px 0; } .ui-icon-triangle-1-n { background-position: 0 -16px; } .ui-icon-triangle-1-ne { background-position: -16px -16px; } .ui-icon-triangle-1-e { background-position: -32px -16px; } .ui-icon-triangle-1-se { background-position: -48px -16px; } .ui-icon-triangle-1-s { background-position: -64px -16px; } .ui-icon-triangle-1-sw { background-position: -80px -16px; } .ui-icon-triangle-1-w { background-position: -96px -16px; } .ui-icon-triangle-1-nw { background-position: -112px -16px; } .ui-icon-triangle-2-n-s { background-position: -128px -16px; } .ui-icon-triangle-2-e-w { background-position: -144px -16px; } .ui-icon-arrow-1-n { background-position: 0 -32px; } .ui-icon-arrow-1-ne { background-position: -16px -32px; } .ui-icon-arrow-1-e { background-position: -32px -32px; } .ui-icon-arrow-1-se { background-position: -48px -32px; } .ui-icon-arrow-1-s { background-position: -64px -32px; } .ui-icon-arrow-1-sw { background-position: -80px -32px; } .ui-icon-arrow-1-w { background-position: -96px -32px; } .ui-icon-arrow-1-nw { background-position: -112px -32px; } .ui-icon-arrow-2-n-s { background-position: -128px -32px; } .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } .ui-icon-arrow-2-e-w { background-position: -160px -32px; } .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } .ui-icon-arrowstop-1-n { background-position: -192px -32px; } .ui-icon-arrowstop-1-e { background-position: -208px -32px; } .ui-icon-arrowstop-1-s { background-position: -224px -32px; } .ui-icon-arrowstop-1-w { background-position: -240px -32px; } .ui-icon-arrowthick-1-n { background-position: 0 -48px; } .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } .ui-icon-arrowthick-1-e { background-position: -32px -48px; } .ui-icon-arrowthick-1-se { background-position: -48px -48px; } .ui-icon-arrowthick-1-s { background-position: -64px -48px; } .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } .ui-icon-arrowthick-1-w { background-position: -96px -48px; } .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } .ui-icon-arrow-4 { background-position: 0 -80px; } .ui-icon-arrow-4-diag { background-position: -16px -80px; } .ui-icon-extlink { background-position: -32px -80px; } .ui-icon-newwin { background-position: -48px -80px; } .ui-icon-refresh { background-position: -64px -80px; } .ui-icon-shuffle { background-position: -80px -80px; } .ui-icon-transfer-e-w { background-position: -96px -80px; } .ui-icon-transferthick-e-w { background-position: -112px -80px; } .ui-icon-folder-collapsed { background-position: 0 -96px; } .ui-icon-folder-open { background-position: -16px -96px; } .ui-icon-document { background-position: -32px -96px; } .ui-icon-document-b { background-position: -48px -96px; } .ui-icon-note { background-position: -64px -96px; } .ui-icon-mail-closed { background-position: -80px -96px; } .ui-icon-mail-open { background-position: -96px -96px; } .ui-icon-suitcase { background-position: -112px -96px; } .ui-icon-comment { background-position: -128px -96px; } .ui-icon-person { background-position: -144px -96px; } .ui-icon-print { background-position: -160px -96px; } .ui-icon-trash { background-position: -176px -96px; } .ui-icon-locked { background-position: -192px -96px; } .ui-icon-unlocked { background-position: -208px -96px; } .ui-icon-bookmark { background-position: -224px -96px; } .ui-icon-tag { background-position: -240px -96px; } .ui-icon-home { background-position: 0 -112px; } .ui-icon-flag { background-position: -16px -112px; } .ui-icon-calendar { background-position: -32px -112px; } .ui-icon-cart { background-position: -48px -112px; } .ui-icon-pencil { background-position: -64px -112px; } .ui-icon-clock { background-position: -80px -112px; } .ui-icon-disk { background-position: -96px -112px; } .ui-icon-calculator { background-position: -112px -112px; } .ui-icon-zoomin { background-position: -128px -112px; } .ui-icon-zoomout { background-position: -144px -112px; } .ui-icon-search { background-position: -160px -112px; } .ui-icon-wrench { background-position: -176px -112px; } .ui-icon-gear { background-position: -192px -112px; } .ui-icon-heart { background-position: -208px -112px; } .ui-icon-star { background-position: -224px -112px; } .ui-icon-link { background-position: -240px -112px; } .ui-icon-cancel { background-position: 0 -128px; } .ui-icon-plus { background-position: -16px -128px; } .ui-icon-plusthick { background-position: -32px -128px; } .ui-icon-minus { background-position: -48px -128px; } .ui-icon-minusthick { background-position: -64px -128px; } .ui-icon-close { background-position: -80px -128px; } .ui-icon-closethick { background-position: -96px -128px; } .ui-icon-key { background-position: -112px -128px; } .ui-icon-lightbulb { background-position: -128px -128px; } .ui-icon-scissors { background-position: -144px -128px; } .ui-icon-clipboard { background-position: -160px -128px; } .ui-icon-copy { background-position: -176px -128px; } .ui-icon-contact { background-position: -192px -128px; } .ui-icon-image { background-position: -208px -128px; } .ui-icon-video { background-position: -224px -128px; } .ui-icon-script { background-position: -240px -128px; } .ui-icon-alert { background-position: 0 -144px; } .ui-icon-info { background-position: -16px -144px; } .ui-icon-notice { background-position: -32px -144px; } .ui-icon-help { background-position: -48px -144px; } .ui-icon-check { background-position: -64px -144px; } .ui-icon-bullet { background-position: -80px -144px; } .ui-icon-radio-on { background-position: -96px -144px; } .ui-icon-radio-off { background-position: -112px -144px; } .ui-icon-pin-w { background-position: -128px -144px; } .ui-icon-pin-s { background-position: -144px -144px; } .ui-icon-play { background-position: 0 -160px; } .ui-icon-pause { background-position: -16px -160px; } .ui-icon-seek-next { background-position: -32px -160px; } .ui-icon-seek-prev { background-position: -48px -160px; } .ui-icon-seek-end { background-position: -64px -160px; } .ui-icon-seek-start { background-position: -80px -160px; } /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ .ui-icon-seek-first { background-position: -80px -160px; } .ui-icon-stop { background-position: -96px -160px; } .ui-icon-eject { background-position: -112px -160px; } .ui-icon-volume-off { background-position: -128px -160px; } .ui-icon-volume-on { background-position: -144px -160px; } .ui-icon-power { background-position: 0 -176px; } .ui-icon-signal-diag { background-position: -16px -176px; } .ui-icon-signal { background-position: -32px -176px; } .ui-icon-battery-0 { background-position: -48px -176px; } .ui-icon-battery-1 { background-position: -64px -176px; } .ui-icon-battery-2 { background-position: -80px -176px; } .ui-icon-battery-3 { background-position: -96px -176px; } .ui-icon-circle-plus { background-position: 0 -192px; } .ui-icon-circle-minus { background-position: -16px -192px; } .ui-icon-circle-close { background-position: -32px -192px; } .ui-icon-circle-triangle-e { background-position: -48px -192px; } .ui-icon-circle-triangle-s { background-position: -64px -192px; } .ui-icon-circle-triangle-w { background-position: -80px -192px; } .ui-icon-circle-triangle-n { background-position: -96px -192px; } .ui-icon-circle-arrow-e { background-position: -112px -192px; } .ui-icon-circle-arrow-s { background-position: -128px -192px; } .ui-icon-circle-arrow-w { background-position: -144px -192px; } .ui-icon-circle-arrow-n { background-position: -160px -192px; } .ui-icon-circle-zoomin { background-position: -176px -192px; } .ui-icon-circle-zoomout { background-position: -192px -192px; } .ui-icon-circle-check { background-position: -208px -192px; } .ui-icon-circlesmall-plus { background-position: 0 -208px; } .ui-icon-circlesmall-minus { background-position: -16px -208px; } .ui-icon-circlesmall-close { background-position: -32px -208px; } .ui-icon-squaresmall-plus { background-position: -48px -208px; } .ui-icon-squaresmall-minus { background-position: -64px -208px; } .ui-icon-squaresmall-close { background-position: -80px -208px; } .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } .ui-icon-grip-solid-vertical { background-position: -32px -224px; } .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } .ui-icon-grip-diagonal-se { background-position: -80px -224px; } /* Misc visuals ----------------------------------*/ /* Corner radius */ .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { border-top-left-radius: 4px; } .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { border-top-right-radius: 4px; } .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { border-bottom-left-radius: 4px; } .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { border-bottom-right-radius: 4px; } /* Overlays */ .ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .5; filter: Alpha(Opacity=50); } .ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .2; filter: Alpha(Opacity=20); border-radius: 5px; } assets/plugins/jquery-ui/jquery-ui-1.10.1.custom.min.js000064400000675463152510440710016604 0ustar00/*! jQuery UI - v1.10.1 - 2013-02-28 * http://jqueryui.com * Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js * Copyright (c) 2013 jQuery Foundation and other contributors Licensed MIT */ (function(e,t){function i(t,n){var r,i,o,u=t.nodeName.toLowerCase();return"area"===u?(r=t.parentNode,i=r.name,!t.href||!i||r.nodeName.toLowerCase()!=="map"?!1:(o=e("img[usemap=#"+i+"]")[0],!!o&&s(o))):(/input|select|textarea|button|object/.test(u)?!t.disabled:"a"===u?t.href||n:n)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return e.css(this,"visibility")==="hidden"}).length}var n=0,r=/^ui-id-\d+$/;e.ui=e.ui||{};if(e.ui.version)return;e.extend(e.ui,{version:"1.10.1",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({_focus:e.fn.focus,focus:function(t,n){return typeof t=="number"?this.each(function(){var r=this;setTimeout(function(){e(r).focus(),n&&n.call(r)},t)}):this._focus.apply(this,arguments)},scrollParent:function(){var t;return e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?t=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):t=this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(n){if(n!==t)return this.css("zIndex",n);if(this.length){var r=e(this[0]),i,s;while(r.length&&r[0]!==document){i=r.css("position");if(i==="absolute"||i==="relative"||i==="fixed"){s=parseInt(r.css("zIndex"),10);if(!isNaN(s)&&s!==0)return s}r=r.parent()}}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++n)})},removeUniqueId:function(){return this.each(function(){r.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(n){return!!e.data(n,t)}}):function(t,n,r){return!!e.data(t,r[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var n=e.attr(t,"tabindex"),r=isNaN(n);return(r||n>=0)&&i(t,!r)}}),e("").outerWidth(1).jquery||e.each(["Width","Height"],function(n,r){function u(t,n,r,s){return e.each(i,function(){n-=parseFloat(e.css(t,"padding"+this))||0,r&&(n-=parseFloat(e.css(t,"border"+this+"Width"))||0),s&&(n-=parseFloat(e.css(t,"margin"+this))||0)}),n}var i=r==="Width"?["Left","Right"]:["Top","Bottom"],s=r.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+r]=function(n){return n===t?o["inner"+r].call(this):this.each(function(){e(this).css(s,u(this,n)+"px")})},e.fn["outer"+r]=function(t,n){return typeof t!="number"?o["outer"+r].call(this,t):this.each(function(){e(this).css(s,u(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}),e("").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(n){return arguments.length?t.call(this,e.camelCase(n)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,n,r){var i,s=e.ui[t].prototype;for(i in r)s.plugins[i]=s.plugins[i]||[],s.plugins[i].push([n,r[i]])},call:function(e,t,n){var r,i=e.plugins[t];if(!i||!e.element[0].parentNode||e.element[0].parentNode.nodeType===11)return;for(r=0;r0?!0:(t[r]=1,i=t[r]>0,t[r]=0,i)}})})(jQuery);(function(e,t){var n=0,r=Array.prototype.slice,i=e.cleanData;e.cleanData=function(t){for(var n=0,r;(r=t[n])!=null;n++)try{e(r).triggerHandler("remove")}catch(s){}i(t)},e.widget=function(t,n,r){var i,s,o,u,a={},f=t.split(".")[0];t=t.split(".")[1],i=f+"-"+t,r||(r=n,n=e.Widget),e.expr[":"][i.toLowerCase()]=function(t){return!!e.data(t,i)},e[f]=e[f]||{},s=e[f][t],o=e[f][t]=function(e,t){if(!this._createWidget)return new o(e,t);arguments.length&&this._createWidget(e,t)},e.extend(o,s,{version:r.version,_proto:e.extend({},r),_childConstructors:[]}),u=new n,u.options=e.widget.extend({},u.options),e.each(r,function(t,r){if(!e.isFunction(r)){a[t]=r;return}a[t]=function(){var e=function(){return n.prototype[t].apply(this,arguments)},i=function(e){return n.prototype[t].apply(this,e)};return function(){var t=this._super,n=this._superApply,s;return this._super=e,this._superApply=i,s=r.apply(this,arguments),this._super=t,this._superApply=n,s}}()}),o.prototype=e.widget.extend(u,{widgetEventPrefix:s?u.widgetEventPrefix:t},a,{constructor:o,namespace:f,widgetName:t,widgetFullName:i}),s?(e.each(s._childConstructors,function(t,n){var r=n.prototype;e.widget(r.namespace+"."+r.widgetName,o,n._proto)}),delete s._childConstructors):n._childConstructors.push(o),e.widget.bridge(t,o)},e.widget.extend=function(n){var i=r.call(arguments,1),s=0,o=i.length,u,a;for(;s",options:{disabled:!1,create:null},_createWidget:function(t,r){r=e(r||this.defaultElement||this)[0],this.element=e(r),this.uuid=n++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),r!==this&&(e.data(r,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===r&&this.destroy()}}),this.document=e(r.style?r.ownerDocument:r.document||r),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(n,r){var i=n,s,o,u;if(arguments.length===0)return e.widget.extend({},this.options);if(typeof n=="string"){i={},s=n.split("."),n=s.shift();if(s.length){o=i[n]=e.widget.extend({},this.options[n]);for(u=0;u=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);(function(e,t){function h(e,t,n){return[parseFloat(e[0])*(l.test(e[0])?t/100:1),parseFloat(e[1])*(l.test(e[1])?n/100:1)]}function p(t,n){return parseInt(e.css(t,n),10)||0}function d(t){var n=t[0];return n.nodeType===9?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(n)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:n.preventDefault?{width:0,height:0,offset:{top:n.pageY,left:n.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,r=Math.max,i=Math.abs,s=Math.round,o=/left|center|right/,u=/top|center|bottom/,a=/[\+\-]\d+(\.[\d]+)?%?/,f=/^\w+/,l=/%$/,c=e.fn.position;e.position={scrollbarWidth:function(){if(n!==t)return n;var r,i,s=e("
      "),o=s.children()[0];return e("body").append(s),r=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,r===i&&(i=s[0].clientWidth),s.remove(),n=r-i},getScrollInfo:function(t){var n=t.isWindow?"":t.element.css("overflow-x"),r=t.isWindow?"":t.element.css("overflow-y"),i=n==="scroll"||n==="auto"&&t.width0?"right":"center",vertical:u<0?"top":o>0?"bottom":"middle"};lr(i(o),i(u))?h.important="horizontal":h.important="vertical",t.using.call(this,e,h)}),a.offset(e.extend(C,{using:u}))})},e.ui.position={fit:{left:function(e,t){var n=t.within,i=n.isWindow?n.scrollLeft:n.offset.left,s=n.width,o=e.left-t.collisionPosition.marginLeft,u=i-o,a=o+t.collisionWidth-s-i,f;t.collisionWidth>s?u>0&&a<=0?(f=e.left+u+t.collisionWidth-s-i,e.left+=u-f):a>0&&u<=0?e.left=i:u>a?e.left=i+s-t.collisionWidth:e.left=i:u>0?e.left+=u:a>0?e.left-=a:e.left=r(e.left-o,e.left)},top:function(e,t){var n=t.within,i=n.isWindow?n.scrollTop:n.offset.top,s=t.within.height,o=e.top-t.collisionPosition.marginTop,u=i-o,a=o+t.collisionHeight-s-i,f;t.collisionHeight>s?u>0&&a<=0?(f=e.top+u+t.collisionHeight-s-i,e.top+=u-f):a>0&&u<=0?e.top=i:u>a?e.top=i+s-t.collisionHeight:e.top=i:u>0?e.top+=u:a>0?e.top-=a:e.top=r(e.top-o,e.top)}},flip:{left:function(e,t){var n=t.within,r=n.offset.left+n.scrollLeft,s=n.width,o=n.isWindow?n.scrollLeft:n.offset.left,u=e.left-t.collisionPosition.marginLeft,a=u-o,f=u+t.collisionWidth-s-o,l=t.my[0]==="left"?-t.elemWidth:t.my[0]==="right"?t.elemWidth:0,c=t.at[0]==="left"?t.targetWidth:t.at[0]==="right"?-t.targetWidth:0,h=-2*t.offset[0],p,d;if(a<0){p=e.left+l+c+h+t.collisionWidth-s-r;if(p<0||p0){d=e.left-t.collisionPosition.marginLeft+l+c+h-o;if(d>0||i(d)a&&(v<0||v0&&(d=e.top-t.collisionPosition.marginTop+c+h+p-o,e.top+c+h+p>f&&(d>0||i(d)10&&i<11,t.innerHTML="",n.removeChild(t)}()})(jQuery);(function(e,t){e.widget("ui.draggable",e.ui.mouse,{version:"1.10.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){this.options.helper==="original"&&!/^(?:r|a|f)/.test(this.element.css("position"))&&(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},_destroy:function(){this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy()},_mouseCapture:function(t){var n=this.options;return this.helper||n.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(e(n.iframeFix===!0?"iframe":n.iframeFix).each(function(){e("
      ").css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(e(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(t){var n=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,n.cursorAt&&this._adjustOffsetFromHelper(n.cursorAt),n.containment&&this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!n.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_mouseDrag:function(t,n){this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute");if(!n){var r=this._uiHash();if(this._trigger("drag",t,r)===!1)return this._mouseUp({}),!1;this.position=r.position}if(!this.options.axis||this.options.axis!=="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!=="x")this.helper[0].style.top=this.position.top+"px";return e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var n,r=this,i=!1,s=!1;e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),n=this.element[0];while(n&&(n=n.parentNode))n===document&&(i=!0);return!i&&this.options.helper==="original"?!1:(this.options.revert==="invalid"&&!s||this.options.revert==="valid"&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){r._trigger("stop",t)!==!1&&r._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1)},_mouseUp:function(t){return e("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){var n=!this.options.handle||!e(this.options.handle,this.element).length?!0:!1;return e(this.options.handle,this.element).find("*").addBack().each(function(){this===t.target&&(n=!0)}),n},_createHelper:function(t){var n=this.options,r=e.isFunction(n.helper)?e(n.helper.apply(this.element[0],[t])):n.helper==="clone"?this.element.clone().removeAttr("id"):this.element;return r.parents("body").length||r.appendTo(n.appendTo==="parent"?this.element[0].parentNode:n.appendTo),r[0]!==this.element[0]&&!/(fixed|absolute)/.test(r.css("position"))&&r.css("position","absolute"),r},_adjustOffsetFromHelper:function(t){typeof t=="string"&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();this.cssPosition==="absolute"&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()==="html"&&e.ui.ie)t={top:0,left:0};return{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition==="relative"){var e=this.element.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,n,r,i=this.options;i.containment==="parent"&&(i.containment=this.helper[0].parentNode);if(i.containment==="document"||i.containment==="window")this.containment=[i.containment==="document"?0:e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,i.containment==="document"?0:e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,(i.containment==="document"?0:e(window).scrollLeft())+e(i.containment==="document"?document:window).width()-this.helperProportions.width-this.margins.left,(i.containment==="document"?0:e(window).scrollTop())+(e(i.containment==="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(i.containment)&&i.containment.constructor!==Array){n=e(i.containment),r=n[0];if(!r)return;t=e(r).css("overflow")!=="hidden",this.containment=[(parseInt(e(r).css("borderLeftWidth"),10)||0)+(parseInt(e(r).css("paddingLeft"),10)||0),(parseInt(e(r).css("borderTopWidth"),10)||0)+(parseInt(e(r).css("paddingTop"),10)||0),(t?Math.max(r.scrollWidth,r.offsetWidth):r.offsetWidth)-(parseInt(e(r).css("borderLeftWidth"),10)||0)-(parseInt(e(r).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(r.scrollHeight,r.offsetHeight):r.offsetHeight)-(parseInt(e(r).css("borderTopWidth"),10)||0)-(parseInt(e(r).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=n}else i.containment.constructor===Array&&(this.containment=i.containment)},_convertPositionTo:function(t,n){n||(n=this.position);var r=t==="absolute"?1:-1,i=this.cssPosition!=="absolute"||this.scrollParent[0]!==document&&!!e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,s=/(html|body)/i.test(i[0].tagName);return{top:n.top+this.offset.relative.top*r+this.offset.parent.top*r-(this.cssPosition==="fixed"?-this.scrollParent.scrollTop():s?0:i.scrollTop())*r,left:n.left+this.offset.relative.left*r+this.offset.parent.left*r-(this.cssPosition==="fixed"?-this.scrollParent.scrollLeft():s?0:i.scrollLeft())*r}},_generatePosition:function(t){var n,r,i,s,o=this.options,u=this.cssPosition!=="absolute"||this.scrollParent[0]!==document&&!!e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(u[0].tagName),f=t.pageX,l=t.pageY;return this.originalPosition&&(this.containment&&(this.relative_container?(r=this.relative_container.offset(),n=[this.containment[0]+r.left,this.containment[1]+r.top,this.containment[2]+r.left,this.containment[3]+r.top]):n=this.containment,t.pageX-this.offset.click.leftn[2]&&(f=n[2]+this.offset.click.left),t.pageY-this.offset.click.top>n[3]&&(l=n[3]+this.offset.click.top)),o.grid&&(i=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=n?i-this.offset.click.top>=n[1]||i-this.offset.click.top>n[3]?i:i-this.offset.click.top>=n[1]?i-o.grid[1]:i+o.grid[1]:i,s=o.grid[0]?this.originalPageX+Math.round((f-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,f=n?s-this.offset.click.left>=n[0]||s-this.offset.click.left>n[2]?s:s-this.offset.click.left>=n[0]?s-o.grid[0]:s+o.grid[0]:s)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(this.cssPosition==="fixed"?-this.scrollParent.scrollTop():a?0:u.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(this.cssPosition==="fixed"?-this.scrollParent.scrollLeft():a?0:u.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]!==this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(t,n,r){return r=r||this._uiHash(),e.ui.plugin.call(this,t,[n,r]),t==="drag"&&(this.positionAbs=this._convertPositionTo("absolute")),e.Widget.prototype._trigger.call(this,t,n,r)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,n){var r=e(this).data("ui-draggable"),i=r.options,s=e.extend({},n,{item:r.element});r.sortables=[],e(i.connectToSortable).each(function(){var n=e.data(this,"ui-sortable");n&&!n.options.disabled&&(r.sortables.push({instance:n,shouldRevert:n.options.revert}),n.refreshPositions(),n._trigger("activate",t,s))})},stop:function(t,n){var r=e(this).data("ui-draggable"),i=e.extend({},n,{item:r.element});e.each(r.sortables,function(){this.instance.isOver?(this.instance.isOver=0,r.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=!0),this.instance._mouseStop(t),this.instance.options.helper=this.instance.options._helper,r.options.helper==="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",t,i))})},drag:function(t,n){var r=e(this).data("ui-draggable"),i=this;e.each(r.sortables,function(){var s=!1,o=this;this.instance.positionAbs=r.positionAbs,this.instance.helperProportions=r.helperProportions,this.instance.offset.click=r.offset.click,this.instance._intersectsWith(this.instance.containerCache)&&(s=!0,e.each(r.sortables,function(){return this.instance.positionAbs=r.positionAbs,this.instance.helperProportions=r.helperProportions,this.instance.offset.click=r.offset.click,this!==o&&this.instance._intersectsWith(this.instance.containerCache)&&e.contains(o.instance.element[0],this.instance.element[0])&&(s=!1),s})),s?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=e(i).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return n.helper[0]},t.target=this.instance.currentItem[0],this.instance._mouseCapture(t,!0),this.instance._mouseStart(t,!0,!0),this.instance.offset.click.top=r.offset.click.top,this.instance.offset.click.left=r.offset.click.left,this.instance.offset.parent.left-=r.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=r.offset.parent.top-this.instance.offset.parent.top,r._trigger("toSortable",t),r.dropped=this.instance.element,r.currentItem=r.element,this.instance.fromOutside=r),this.instance.currentItem&&this.instance._mouseDrag(t)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",t,this.instance._uiHash(this.instance)),this.instance._mouseStop(t,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),r._trigger("fromSortable",t),r.dropped=!1)})}}),e.ui.plugin.add("draggable","cursor",{start:function(){var t=e("body"),n=e(this).data("ui-draggable").options;t.css("cursor")&&(n._cursor=t.css("cursor")),t.css("cursor",n.cursor)},stop:function(){var t=e(this).data("ui-draggable").options;t._cursor&&e("body").css("cursor",t._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,n){var r=e(n.helper),i=e(this).data("ui-draggable").options;r.css("opacity")&&(i._opacity=r.css("opacity")),r.css("opacity",i.opacity)},stop:function(t,n){var r=e(this).data("ui-draggable").options;r._opacity&&e(n.helper).css("opacity",r._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(){var t=e(this).data("ui-draggable");t.scrollParent[0]!==document&&t.scrollParent[0].tagName!=="HTML"&&(t.overflowOffset=t.scrollParent.offset())},drag:function(t){var n=e(this).data("ui-draggable"),r=n.options,i=!1;if(n.scrollParent[0]!==document&&n.scrollParent[0].tagName!=="HTML"){if(!r.axis||r.axis!=="x")n.overflowOffset.top+n.scrollParent[0].offsetHeight-t.pageY=0;c--){u=p.snapElements[c].left,a=u+p.snapElements[c].width,f=p.snapElements[c].top,l=f+p.snapElements[c].height;if(!(u-vt&&e=h&&a<=p||f>=h&&f<=p||ap)&&(o>=l&&o<=c||u>=l&&u<=c||oc);default:return!1}},e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,n){var r,i,s=e.ui.ddmanager.droppables[t.options.scope]||[],o=n?n.type:null,u=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(r=0;r
      ").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.data("ui-resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=u.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se");if(this.handles.constructor===String){this.handles==="all"&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={};for(n=0;n
      "),i.css({zIndex:u.zIndex}),"se"===r&&i.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[r]=".ui-resizable-"+r,this.element.append(i)}this._renderAxis=function(t){var n,r,i,s;t=t||this.element;for(n in this.handles){this.handles[n].constructor===String&&(this.handles[n]=e(this.handles[n],this.element).show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(r=e(this.handles[n],this.element),s=/sw|ne|nw|se|n|s/.test(n)?r.outerHeight():r.outerWidth(),i=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize());if(!e(this.handles[n]).length)continue}},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=i&&i[1]?i[1]:"se")}),u.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){if(u.disabled)return;e(this).removeClass("ui-resizable-autohide"),o._handles.show()}).mouseleave(function(){if(u.disabled)return;o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,n=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(n(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),n(this.originalElement),this},_mouseCapture:function(t){var n,r,i=!1;for(n in this.handles){r=e(this.handles[n])[0];if(r===t.target||e.contains(r,t.target))i=!0}return!this.options.disabled&&i},_mouseStart:function(t){var r,i,s,o=this.options,u=this.element.position(),a=this.element;return this.resizing=!0,/absolute/.test(a.css("position"))?a.css({position:"absolute",top:a.css("top"),left:a.css("left")}):a.is(".ui-draggable")&&a.css({position:"absolute",top:u.top,left:u.left}),this._renderProxy(),r=n(this.helper.css("left")),i=n(this.helper.css("top")),o.containment&&(r+=e(o.containment).scrollLeft()||0,i+=e(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:r,top:i},this.size=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.originalPosition={left:r,top:i},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio=typeof o.aspectRatio=="number"?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor",s==="auto"?this.axis+"-resize":s),a.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var n,r=this.helper,i={},s=this.originalMousePosition,o=this.axis,u=this.position.top,a=this.position.left,f=this.size.width,l=this.size.height,c=t.pageX-s.left||0,h=t.pageY-s.top||0,p=this._change[o];if(!p)return!1;n=p.apply(this,[t,c,h]),this._updateVirtualBoundaries(t.shiftKey);if(this._aspectRatio||t.shiftKey)n=this._updateRatio(n,t);return n=this._respectSize(n,t),this._updateCache(n),this._propagate("resize",t),this.position.top!==u&&(i.top=this.position.top+"px"),this.position.left!==a&&(i.left=this.position.left+"px"),this.size.width!==f&&(i.width=this.size.width+"px"),this.size.height!==l&&(i.height=this.size.height+"px"),r.css(i),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(i)||this._trigger("resize",t,this.ui()),!1},_mouseStop:function(t){this.resizing=!1;var n,r,i,s,o,u,a,f=this.options,l=this;return this._helper&&(n=this._proportionallyResizeElements,r=n.length&&/textarea/i.test(n[0].nodeName),i=r&&e.ui.hasScroll(n[0],"left")?0:l.sizeDiff.height,s=r?0:l.sizeDiff.width,o={width:l.helper.width()-s,height:l.helper.height()-i},u=parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left)||null,a=parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top)||null,f.animate||this.element.css(e.extend(o,{top:a,left:u})),l.helper.height(l.size.height),l.helper.width(l.size.width),this._helper&&!f.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(e){var t,n,i,s,o,u=this.options;o={minWidth:r(u.minWidth)?u.minWidth:0,maxWidth:r(u.maxWidth)?u.maxWidth:Infinity,minHeight:r(u.minHeight)?u.minHeight:0,maxHeight:r(u.maxHeight)?u.maxHeight:Infinity};if(this._aspectRatio||e)t=o.minHeight*this.aspectRatio,i=o.minWidth/this.aspectRatio,n=o.maxHeight*this.aspectRatio,s=o.maxWidth/this.aspectRatio,t>o.minWidth&&(o.minWidth=t),i>o.minHeight&&(o.minHeight=i),ne.width,u=r(e.height)&&t.minHeight&&t.minHeight>e.height,a=this.originalPosition.left+this.originalSize.width,f=this.position.top+this.size.height,l=/sw|nw|w/.test(n),c=/nw|ne|n/.test(n);return o&&(e.width=t.minWidth),u&&(e.height=t.minHeight),i&&(e.width=t.maxWidth),s&&(e.height=t.maxHeight),o&&l&&(e.left=a-t.minWidth),i&&l&&(e.left=a-t.maxWidth),u&&c&&(e.top=f-t.minHeight),s&&c&&(e.top=f-t.maxHeight),!e.width&&!e.height&&!e.left&&e.top?e.top=null:!e.width&&!e.height&&!e.top&&e.left&&(e.left=null),e},_proportionallyResize:function(){if(!this._proportionallyResizeElements.length)return;var e,t,n,r,i,s=this.helper||this.element;for(e=0;e
      "),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++n.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var n=this.originalSize,r=this.originalPosition;return{left:r.left+t,width:n.width-t}},n:function(e,t,n){var r=this.originalSize,i=this.originalPosition;return{top:i.top+n,height:r.height-n}},s:function(e,t,n){return{height:this.originalSize.height+n}},se:function(t,n,r){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,n,r]))},sw:function(t,n,r){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,n,r]))},ne:function(t,n,r){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,n,r]))},nw:function(t,n,r){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,n,r]))}},_propagate:function(t,n){e.ui.plugin.call(this,t,[n,this.ui()]),t!=="resize"&&this._trigger(t,n,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var n=e(this).data("ui-resizable"),r=n.options,i=n._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),o=s&&e.ui.hasScroll(i[0],"left")?0:n.sizeDiff.height,u=s?0:n.sizeDiff.width,a={width:n.size.width-u,height:n.size.height-o},f=parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left)||null,l=parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top)||null;n.element.animate(e.extend(a,l&&f?{top:l,left:f}:{}),{duration:r.animateDuration,easing:r.animateEasing,step:function(){var r={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};i&&i.length&&e(i[0]).css({width:r.width,height:r.height}),n._updateCache(r),n._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var t,r,i,s,o,u,a,f=e(this).data("ui-resizable"),l=f.options,c=f.element,h=l.containment,p=h instanceof e?h.get(0):/parent/.test(h)?c.parent().get(0):h;if(!p)return;f.containerElement=e(p),/document/.test(h)||h===document?(f.containerOffset={left:0,top:0},f.containerPosition={left:0,top:0},f.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(t=e(p),r=[],e(["Top","Right","Left","Bottom"]).each(function(e,i){r[e]=n(t.css("padding"+i))}),f.containerOffset=t.offset(),f.containerPosition=t.position(),f.containerSize={height:t.innerHeight()-r[3],width:t.innerWidth()-r[1]},i=f.containerOffset,s=f.containerSize.height,o=f.containerSize.width,u=e.ui.hasScroll(p,"left")?p.scrollWidth:o,a=e.ui.hasScroll(p)?p.scrollHeight:s,f.parentData={element:p,left:i.left,top:i.top,width:u,height:a})},resize:function(t){var n,r,i,s,o=e(this).data("ui-resizable"),u=o.options,a=o.containerOffset,f=o.position,l=o._aspectRatio||t.shiftKey,c={top:0,left:0},h=o.containerElement;h[0]!==document&&/static/.test(h.css("position"))&&(c=a),f.left<(o._helper?a.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-a.left:o.position.left-c.left),l&&(o.size.height=o.size.width/o.aspectRatio),o.position.left=u.helper?a.left:0),f.top<(o._helper?a.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-a.top:o.position.top),l&&(o.size.width=o.size.height*o.aspectRatio),o.position.top=o._helper?a.top:0),o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top,n=Math.abs((o._helper?o.offset.left-c.left:o.offset.left-c.left)+o.sizeDiff.width),r=Math.abs((o._helper?o.offset.top-c.top:o.offset.top-a.top)+o.sizeDiff.height),i=o.containerElement.get(0)===o.element.parent().get(0),s=/relative|absolute/.test(o.containerElement.css("position")),i&&s&&(n-=o.parentData.left),n+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-n,l&&(o.size.height=o.size.width/o.aspectRatio)),r+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-r,l&&(o.size.width=o.size.height*o.aspectRatio))},stop:function(){var t=e(this).data("ui-resizable"),n=t.options,r=t.containerOffset,i=t.containerPosition,s=t.containerElement,o=e(t.helper),u=o.offset(),a=o.outerWidth()-t.sizeDiff.width,f=o.outerHeight()-t.sizeDiff.height;t._helper&&!n.animate&&/relative/.test(s.css("position"))&&e(this).css({left:u.left-i.left-r.left,width:a,height:f}),t._helper&&!n.animate&&/static/.test(s.css("position"))&&e(this).css({left:u.left-i.left-r.left,width:a,height:f})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).data("ui-resizable"),n=t.options,r=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};typeof n.alsoResize=="object"&&!n.alsoResize.parentNode?n.alsoResize.length?(n.alsoResize=n.alsoResize[0],r(n.alsoResize)):e.each(n.alsoResize,function(e){r(e)}):r(n.alsoResize)},resize:function(t,n){var r=e(this).data("ui-resizable"),i=r.options,s=r.originalSize,o=r.originalPosition,u={height:r.size.height-s.height||0,width:r.size.width-s.width||0,top:r.position.top-o.top||0,left:r.position.left-o.left||0},a=function(t,r){e(t).each(function(){var t=e(this),i=e(this).data("ui-resizable-alsoresize"),s={},o=r&&r.length?r:t.parents(n.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var n=(i[t]||0)+(u[t]||0);n&&n>=0&&(s[t]=n||null)}),t.css(s)})};typeof i.alsoResize=="object"&&!i.alsoResize.nodeType?e.each(i.alsoResize,function(e,t){a(e,t)}):a(i.alsoResize)},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).data("ui-resizable"),n=t.options,r=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:r.height,width:r.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof n.ghost=="string"?n.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).data("ui-resizable");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).data("ui-resizable");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t=e(this).data("ui-resizable"),n=t.options,r=t.size,i=t.originalSize,s=t.originalPosition,o=t.axis,u=typeof n.grid=="number"?[n.grid,n.grid]:n.grid,a=u[0]||1,f=u[1]||1,l=Math.round((r.width-i.width)/a)*a,c=Math.round((r.height-i.height)/f)*f,h=i.width+l,p=i.height+c,d=n.maxWidth&&n.maxWidthh,g=n.minHeight&&n.minHeight>p;n.grid=u,m&&(h+=a),g&&(p+=f),d&&(h-=a),v&&(p-=f),/^(se|s|e)$/.test(o)?(t.size.width=h,t.size.height=p):/^(ne)$/.test(o)?(t.size.width=h,t.size.height=p,t.position.top=s.top-c):/^(sw)$/.test(o)?(t.size.width=h,t.size.height=p,t.position.left=s.left-l):(t.size.width=h,t.size.height=p,t.position.top=s.top-c,t.position.left=s.left-l)}})})(jQuery);(function(e,t){e.widget("ui.selectable",e.ui.mouse,{version:"1.10.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,n=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(n.options.filter,n.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),n=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:n.left,top:n.top,right:n.left+t.outerWidth(),bottom:n.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("
      ")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var n=this,r=this.options;this.opos=[t.pageX,t.pageY];if(this.options.disabled)return;this.selectees=e(r.filter,this.element[0]),this._trigger("start",t),e(r.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),r.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var r=e.data(this,"selectable-item");r.startselected=!0,!t.metaKey&&!t.ctrlKey&&(r.$element.removeClass("ui-selected"),r.selected=!1,r.$element.addClass("ui-unselecting"),r.unselecting=!0,n._trigger("unselecting",t,{unselecting:r.element}))}),e(t.target).parents().addBack().each(function(){var r,i=e.data(this,"selectable-item");if(i)return r=!t.metaKey&&!t.ctrlKey||!i.$element.hasClass("ui-selected"),i.$element.removeClass(r?"ui-unselecting":"ui-selected").addClass(r?"ui-selecting":"ui-unselecting"),i.unselecting=!r,i.selecting=r,i.selected=r,r?n._trigger("selecting",t,{selecting:i.element}):n._trigger("unselecting",t,{unselecting:i.element}),!1})},_mouseDrag:function(t){this.dragged=!0;if(this.options.disabled)return;var n,r=this,i=this.options,s=this.opos[0],o=this.opos[1],u=t.pageX,a=t.pageY;return s>u&&(n=u,u=s,s=n),o>a&&(n=a,a=o,o=n),this.helper.css({left:s,top:o,width:u-s,height:a-o}),this.selectees.each(function(){var n=e.data(this,"selectable-item"),f=!1;if(!n||n.element===r.element[0])return;i.tolerance==="touch"?f=!(n.left>u||n.righta||n.bottoms&&n.righto&&n.bottomt&&e *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_create:function(){var e=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?e.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_setOption:function(t,n){t==="disabled"?(this.options[t]=n,this.widget().toggleClass("ui-sortable-disabled",!!n)):e.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(t,n){var r=null,i=!1,s=this;if(this.reverting)return!1;if(this.options.disabled||this.options.type==="static")return!1;this._refreshItems(t),e(t.target).parents().each(function(){if(e.data(this,s.widgetName+"-item")===s)return r=e(this),!1}),e.data(t.target,s.widgetName+"-item")===s&&(r=e(t.target));if(!r)return!1;if(this.options.handle&&!n){e(this.options.handle,r).find("*").addBack().each(function(){this===t.target&&(i=!0)});if(!i)return!1}return this.currentItem=r,this._removeCurrentsFromItems(),!0},_mouseStart:function(t,n,r){var i,s=this.options;this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,s.cursorAt&&this._adjustOffsetFromHelper(s.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),s.containment&&this._setContainment(),s.cursor&&(e("body").css("cursor")&&(this._storedCursor=e("body").css("cursor")),e("body").css("cursor",s.cursor)),s.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",s.opacity)),s.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",s.zIndex)),this.scrollParent[0]!==document&&this.scrollParent[0].tagName!=="HTML"&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions();if(!r)for(i=this.containers.length-1;i>=0;i--)this.containers[i]._trigger("activate",t,this._uiHash(this));return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!s.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var n,r,i,s,o=this.options,u=!1;this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&this.scrollParent[0].tagName!=="HTML"?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY=0;n--){r=this.items[n],i=r.item[0],s=this._intersectsWithPointer(r);if(!s)continue;if(r.instance!==this.currentContainer)continue;if(i!==this.currentItem[0]&&this.placeholder[s===1?"next":"prev"]()[0]!==i&&!e.contains(this.placeholder[0],i)&&(this.options.type==="semi-dynamic"?!e.contains(this.element[0],i):!0)){this.direction=s===1?"down":"up";if(this.options.tolerance!=="pointer"&&!this._intersectsWithSides(r))break;this._rearrange(t,r),this._trigger("change",t,this._uiHash());break}}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,n){if(!t)return;e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t);if(this.options.revert){var r=this,i=this.placeholder.offset();this.reverting=!0,e(this.helper).animate({left:i.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft),top:i.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){r._clear(t)})}else this._clear(t,n);return!1},cancel:function(){if(this.dragging){this._mouseUp({target:null}),this.options.helper==="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.options.helper!=="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var n=this._getItemsAsjQuery(t&&t.connected),r=[];return t=t||{},e(n).each(function(){var n=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[\-=_](.+)/);n&&r.push((t.key||n[1]+"[]")+"="+(t.key&&t.expression?n[1]:n[2]))}),!r.length&&t.key&&r.push(t.key+"="),r.join("&")},toArray:function(t){var n=this._getItemsAsjQuery(t&&t.connected),r=[];return t=t||{},n.each(function(){r.push(e(t.item||this).attr(t.attribute||"id")||"")}),r},_intersectsWith:function(e){var t=this.positionAbs.left,n=t+this.helperProportions.width,r=this.positionAbs.top,i=r+this.helperProportions.height,s=e.left,o=s+e.width,u=e.top,a=u+e.height,f=this.offset.click.top,l=this.offset.click.left,c=r+f>u&&r+fs&&t+le[this.floating?"width":"height"]?c:s0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return e!==0&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){var n,r,i,s,o=[],u=[],a=this._connectWith();if(a&&t)for(n=a.length-1;n>=0;n--){i=e(a[n]);for(r=i.length-1;r>=0;r--)s=e.data(i[r],this.widgetFullName),s&&s!==this&&!s.options.disabled&&u.push([e.isFunction(s.options.items)?s.options.items.call(s.element):e(s.options.items,s.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),s])}u.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(n=u.length-1;n>=0;n--)u[n][0].each(function(){o.push(this)});return e(o)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var n=0;n=0;n--){i=e(h[n]);for(r=i.length-1;r>=0;r--)s=e.data(i[r],this.widgetFullName),s&&s!==this&&!s.options.disabled&&(c.push([e.isFunction(s.options.items)?s.options.items.call(s.element[0],t,{item:this.currentItem}):e(s.options.items,s.element),s]),this.containers.push(s))}for(n=c.length-1;n>=0;n--){o=c[n][1],u=c[n][0];for(r=0,f=u.length;r=0;n--){r=this.items[n];if(r.instance!==this.currentContainer&&this.currentContainer&&r.item[0]!==this.currentItem[0])continue;i=this.options.toleranceElement?e(this.options.toleranceElement,r.item):r.item,t||(r.width=i.outerWidth(),r.height=i.outerHeight()),s=i.offset(),r.left=s.left,r.top=s.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(n=this.containers.length-1;n>=0;n--)s=this.containers[n].element.offset(),this.containers[n].containerCache.left=s.left,this.containers[n].containerCache.top=s.top,this.containers[n].containerCache.width=this.containers[n].element.outerWidth(),this.containers[n].containerCache.height=this.containers[n].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var n,r=t.options;if(!r.placeholder||r.placeholder.constructor===String)n=r.placeholder,r.placeholder={element:function(){var r=e(document.createElement(t.currentItem[0].nodeName)).addClass(n||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];return n||(r.style.visibility="hidden"),r},update:function(e,i){if(n&&!r.forcePlaceholderSize)return;i.height()||i.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),i.width()||i.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10))}};t.placeholder=e(r.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),r.placeholder.update(t,t.placeholder)},_contactContainers:function(t){var n,r,i,s,o,u,a,f,l,c=null,h=null;for(n=this.containers.length-1;n>=0;n--){if(e.contains(this.currentItem[0],this.containers[n].element[0]))continue;if(this._intersectsWith(this.containers[n].containerCache)){if(c&&e.contains(this.containers[n].element[0],c.element[0]))continue;c=this.containers[n],h=n}else this.containers[n].containerCache.over&&(this.containers[n]._trigger("out",t,this._uiHash(this)),this.containers[n].containerCache.over=0)}if(!c)return;if(this.containers.length===1)this.containers[h]._trigger("over",t,this._uiHash(this)),this.containers[h].containerCache.over=1;else{i=1e4,s=null,o=this.containers[h].floating?"left":"top",u=this.containers[h].floating?"width":"height",a=this.positionAbs[o]+this.offset.click[o];for(r=this.items.length-1;r>=0;r--){if(!e.contains(this.containers[h].element[0],this.items[r].item[0]))continue;if(this.items[r].item[0]===this.currentItem[0])continue;f=this.items[r].item.offset()[o],l=!1,Math.abs(f-a)>Math.abs(f+this.items[r][u]-a)&&(l=!0,f+=this.items[r][u]),Math.abs(f-a)this.containment[2]&&(s=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),i.grid&&(n=this.originalPageY+Math.round((o-this.originalPageY)/i.grid[1])*i.grid[1],o=this.containment?n-this.offset.click.top>=this.containment[1]&&n-this.offset.click.top<=this.containment[3]?n:n-this.offset.click.top>=this.containment[1]?n-i.grid[1]:n+i.grid[1]:n,r=this.originalPageX+Math.round((s-this.originalPageX)/i.grid[0])*i.grid[0],s=this.containment?r-this.offset.click.left>=this.containment[0]&&r-this.offset.click.left<=this.containment[2]?r:r-this.offset.click.left>=this.containment[0]?r-i.grid[0]:r+i.grid[0]:r)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(this.cssPosition==="fixed"?-this.scrollParent.scrollTop():a?0:u.scrollTop()),left:s-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(this.cssPosition==="fixed"?-this.scrollParent.scrollLeft():a?0:u.scrollLeft())}},_rearrange:function(e,t,n,r){n?n[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],this.direction==="down"?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var i=this.counter;this._delay(function(){i===this.counter&&this.refreshPositions(!r)})},_clear:function(t,n){this.reverting=!1;var r,i=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null;if(this.helper[0]===this.currentItem[0]){for(r in this._storedCSS)if(this._storedCSS[r]==="auto"||this._storedCSS[r]==="static")this._storedCSS[r]="";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!n&&i.push(function(e){this._trigger("receive",e,this._uiHash(this.fromOutside))}),(this.fromOutside||this.domPosition.prev!==this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!==this.currentItem.parent()[0])&&!n&&i.push(function(e){this._trigger("update",e,this._uiHash())}),this!==this.currentContainer&&(n||(i.push(function(e){this._trigger("remove",e,this._uiHash())}),i.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),i.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer))));for(r=this.containers.length-1;r>=0;r--)n||i.push(function(e){return function(t){e._trigger("deactivate",t,this._uiHash(this))}}.call(this,this.containers[r])),this.containers[r].containerCache.over&&(i.push(function(e){return function(t){e._trigger("out",t,this._uiHash(this))}}.call(this,this.containers[r])),this.containers[r].containerCache.over=0);this._storedCursor&&e("body").css("cursor",this._storedCursor),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex",this._storedZIndex==="auto"?"":this._storedZIndex),this.dragging=!1;if(this.cancelHelperRemoval){if(!n){this._trigger("beforeStop",t,this._uiHash());for(r=0;r li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),!t.collapsible&&(t.active===!1||t.active==null)&&(t.active=0),this._processPanels(),t.active<0&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e(),content:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this._destroyIcons(),e=this.headers.next().css("display","").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this.options.heightStyle!=="content"&&e.css("height","")},_setOption:function(e,t){if(e==="active"){this._activate(t);return}e==="event"&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),e==="collapsible"&&!t&&this.options.active===!1&&this._activate(0),e==="icons"&&(this._destroyIcons(),t&&this._createIcons()),e==="disabled"&&this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t)},_keydown:function(t){if(t.altKey||t.ctrlKey)return;var n=e.ui.keyCode,r=this.headers.length,i=this.headers.index(t.target),s=!1;switch(t.keyCode){case n.RIGHT:case n.DOWN:s=this.headers[(i+1)%r];break;case n.LEFT:case n.UP:s=this.headers[(i-1+r)%r];break;case n.SPACE:case n.ENTER:this._eventHandler(t);break;case n.HOME:s=this.headers[0];break;case n.END:s=this.headers[r-1]}s&&(e(t.target).attr("tabIndex",-1),e(s).attr("tabIndex",0),s.focus(),t.preventDefault())},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels();if(t.active===!1&&t.collapsible===!0||!this.headers.length)t.active=!1,this.active=e();t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()},_refresh:function(){var t,r=this.options,i=r.heightStyle,s=this.element.parent(),o=this.accordionId="ui-accordion-"+(this.element.attr("id")||++n);this.active=this._findActive(r.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(t){var n=e(this),r=n.attr("id"),i=n.next(),s=i.attr("id");r||(r=o+"-header-"+t,n.attr("id",r)),s||(s=o+"-panel-"+t,i.attr("id",s)),n.attr("aria-controls",s),i.attr("aria-labelledby",r)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false",tabIndex:-1}).next().attr({"aria-expanded":"false","aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true",tabIndex:0}).next().attr({"aria-expanded":"true","aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(r.event),i==="fill"?(t=s.height(),this.element.siblings(":visible").each(function(){var n=e(this),r=n.css("position");if(r==="absolute"||r==="fixed")return;t-=n.outerHeight(!0)}),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):i==="auto"&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css("height","").height())}).height(t))},_activate:function(t){var n=this._findActive(t)[0];if(n===this.active[0])return;n=n||this.active[0],this._eventHandler({target:n,currentTarget:n,preventDefault:e.noop})},_findActive:function(t){return typeof t=="number"?this.headers.eq(t):e()},_setupEvents:function(t){var n={keydown:"_keydown"};t&&e.each(t.split(" "),function(e,t){n[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,n),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var n=this.options,r=this.active,i=e(t.currentTarget),s=i[0]===r[0],o=s&&n.collapsible,u=o?e():i.next(),a=r.next(),f={oldHeader:r,oldPanel:a,newHeader:o?e():i,newPanel:u};t.preventDefault();if(s&&!n.collapsible||this._trigger("beforeActivate",t,f)===!1)return;n.active=o?!1:this.headers.index(i),this.active=s?e():i,this._toggle(f),r.removeClass("ui-accordion-header-active ui-state-active"),n.icons&&r.children(".ui-accordion-header-icon").removeClass(n.icons.activeHeader).addClass(n.icons.header),s||(i.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),n.icons&&i.children(".ui-accordion-header-icon").removeClass(n.icons.header).addClass(n.icons.activeHeader),i.next().addClass("ui-accordion-content-active"))},_toggle:function(t){var n=t.newPanel,r=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=n,this.prevHide=r,this.options.animate?this._animate(n,r,t):(r.hide(),n.show(),this._toggleComplete(t)),r.attr({"aria-expanded":"false","aria-hidden":"true"}),r.prev().attr("aria-selected","false"),n.length&&r.length?r.prev().attr("tabIndex",-1):n.length&&this.headers.filter(function(){return e(this).attr("tabIndex")===0}).attr("tabIndex",-1),n.attr({"aria-expanded":"true","aria-hidden":"false"}).prev().attr({"aria-selected":"true",tabIndex:0})},_animate:function(e,t,n){var s,o,u,a=this,f=0,l=e.length&&(!t.length||e.index()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},pending:0,_create:function(){var t,n,r,i=this.element[0].nodeName.toLowerCase(),s=i==="textarea",o=i==="input";this.isMultiLine=s?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[s||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(i){if(this.element.prop("readOnly")){t=!0,r=!0,n=!0;return}t=!1,r=!1,n=!1;var s=e.ui.keyCode;switch(i.keyCode){case s.PAGE_UP:t=!0,this._move("previousPage",i);break;case s.PAGE_DOWN:t=!0,this._move("nextPage",i);break;case s.UP:t=!0,this._keyEvent("previous",i);break;case s.DOWN:t=!0,this._keyEvent("next",i);break;case s.ENTER:case s.NUMPAD_ENTER:this.menu.active&&(t=!0,i.preventDefault(),this.menu.select(i));break;case s.TAB:this.menu.active&&this.menu.select(i);break;case s.ESCAPE:this.menu.element.is(":visible")&&(this._value(this.term),this.close(i),i.preventDefault());break;default:n=!0,this._searchTimeout(i)}},keypress:function(r){if(t){t=!1,r.preventDefault();return}if(n)return;var i=e.ui.keyCode;switch(r.keyCode){case i.PAGE_UP:this._move("previousPage",r);break;case i.PAGE_DOWN:this._move("nextPage",r);break;case i.UP:this._keyEvent("previous",r);break;case i.DOWN:this._keyEvent("next",r)}},input:function(e){if(r){r=!1,e.preventDefault();return}this._searchTimeout(e)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){if(this.cancelBlur){delete this.cancelBlur;return}clearTimeout(this.searching),this.close(e),this._change(e)}}),this._initSource(),this.menu=e("
      "+(V[0]>0&&T===V[1]-1?"
      ":""):""),x+=k}w+=x}return w+=f,e._keyEvent=!1,w},_generateMonthYearHeader:function(e,t,n,r,i,s,o,u){var a,f,l,c,h,p,d,v,m=this._get(e,"changeMonth"),g=this._get(e,"changeYear"),y=this._get(e,"showMonthAfterYear"),b="
      ",w="";if(s||!m)w+=""+o[t]+"";else{a=r&&r.getFullYear()===n,f=i&&i.getFullYear()===n,w+=""}y||(b+=w+(s||!m||!g?" ":""));if(!e.yearshtml){e.yearshtml="";if(s||!g)b+=""+n+"";else{c=this._get(e,"yearRange").split(":"),h=(new Date).getFullYear(),p=function(e){var t=e.match(/c[+\-].*/)?n+parseInt(e.substring(1),10):e.match(/[+\-].*/)?h+parseInt(e,10):parseInt(e,10);return isNaN(t)?h:t},d=p(c[0]),v=Math.max(d,p(c[1]||"")),d=r?Math.max(d,r.getFullYear()):d,v=i?Math.min(v,i.getFullYear()):v,e.yearshtml+="",b+=e.yearshtml,e.yearshtml=null}}return b+=this._get(e,"yearSuffix"),y&&(b+=(s||!m||!g?" ":"")+w),b+="
      ",b},_adjustInstDate:function(e,t,n){var r=e.drawYear+(n==="Y"?t:0),i=e.drawMonth+(n==="M"?t:0),s=Math.min(e.selectedDay,this._getDaysInMonth(r,i))+(n==="D"?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(r,i,s)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),(n==="M"||n==="Y")&&this._notifyChange(e)},_restrictMinMax:function(e,t){var n=this._getMinMaxDate(e,"min"),r=this._getMinMaxDate(e,"max"),i=n&&tr?r:i},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return t==null?[1,1]:typeof t=="number"?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return(new Date(e,t,1)).getDay()},_canAdjustMonth:function(e,t,n,r){var i=this._getNumberOfMonths(e),s=this._daylightSavingAdjust(new Date(n,r+(t<0?t:i[0]*i[1]),1));return t<0&&s.setDate(this._getDaysInMonth(s.getFullYear(),s.getMonth())),this._isInRange(e,s)},_isInRange:function(e,t){var n,r,i=this._getMinMaxDate(e,"min"),s=this._getMinMaxDate(e,"max"),o=null,u=null,a=this._get(e,"yearRange");return a&&(n=a.split(":"),r=(new Date).getFullYear(),o=parseInt(n[0],10),u=parseInt(n[1],10),n[0].match(/[+\-].*/)&&(o+=r),n[1].match(/[+\-].*/)&&(u+=r)),(!i||t.getTime()>=i.getTime())&&(!s||t.getTime()<=s.getTime())&&(!o||t.getFullYear()>=o)&&(!u||t.getFullYear()<=u)},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t=typeof t!="string"?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,n,r){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var i=t?typeof t=="object"?t:this._daylightSavingAdjust(new Date(r,n,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),i,this._getFormatConfig(e))}}),e.fn.datepicker=function(t){if(!this.length)return this;e.datepicker.initialized||(e(document).mousedown(e.datepicker._checkExternalClick),e.datepicker.initialized=!0),e("#"+e.datepicker._mainDivId).length===0&&e("body").append(e.datepicker.dpDiv);var n=Array.prototype.slice.call(arguments,1);return typeof t!="string"||t!=="isDisabled"&&t!=="getDate"&&t!=="widget"?t==="option"&&arguments.length===2&&typeof arguments[1]=="string"?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(n)):this.each(function(){typeof t=="string"?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this].concat(n)):e.datepicker._attachDatepicker(this,t)}):e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(n))},e.datepicker=new s,e.datepicker.initialized=!1,e.datepicker.uuid=(new Date).getTime(),e.datepicker.version="1.10.1",window["DP_jQuery_"+r]=e})(jQuery);(function(e,t){var n={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},r={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0};e.widget("ui.dialog",{version:"1.10.1",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var n=e(this).css(t).offset().top;n<0&&e(this).css("top",t.top-n)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&e.fn.draggable&&this._makeDraggable(),this.options.resizable&&e.fn.resizable&&this._makeResizable(),this._isOpen=!1},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?e(t):this.document.find(t||"body").eq(0)},_destroy:function(){var e,t=this.originalPosition;this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},disable:e.noop,enable:e.noop,close:function(t){var n=this;if(!this._isOpen||this._trigger("beforeClose",t)===!1)return;this._isOpen=!1,this._destroyOverlay(),this.opener.filter(":focusable").focus().length||e(this.document[0].activeElement).blur(),this._hide(this.uiDialog,this.options.hide,function(){n._trigger("close",t)})},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,t){var n=!!this.uiDialog.nextAll(":visible").insertBefore(this.uiDialog).length;return n&&!t&&this._trigger("focus",e),n},open:function(){var t=this;if(this._isOpen){this._moveToTop()&&this._focusTabbable();return}this._isOpen=!0,this.opener=e(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._trigger("open")},_focusTabbable:function(){var e=this.element.find("[autofocus]");e.length||(e=this.element.find(":tabbable")),e.length||(e=this.uiDialogButtonPane.find(":tabbable")),e.length||(e=this.uiDialogTitlebarClose.filter(":tabbable")),e.length||(e=this.uiDialog),e.eq(0).focus()},_keepFocus:function(t){function n(){var t=this.document[0].activeElement,n=this.uiDialog[0]===t||e.contains(this.uiDialog[0],t);n||this._focusTabbable()}t.preventDefault(),n.call(this),this._delay(n)},_createWrapper:function(){this.uiDialog=e("
      ").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===e.ui.keyCode.ESCAPE){t.preventDefault(),this.close(t);return}if(t.keyCode!==e.ui.keyCode.TAB)return;var n=this.uiDialog.find(":tabbable"),r=n.filter(":first"),i=n.filter(":last");t.target!==i[0]&&t.target!==this.uiDialog[0]||!!t.shiftKey?(t.target===r[0]||t.target===this.uiDialog[0])&&t.shiftKey&&(i.focus(1),t.preventDefault()):(r.focus(1),t.preventDefault())},mousedown:function(e){this._moveToTop(e)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=e("
      ").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(t){e(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=e("").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(e){e.preventDefault(),this.close(e)}}),t=e("").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(t),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(e){this.options.title||e.html(" "),e.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=e("
      ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=e("
      ").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var t=this,n=this.options.buttons;this.uiDialogButtonPane.remove(),this.uiButtonSet.empty();if(e.isEmptyObject(n)||e.isArray(n)&&!n.length){this.uiDialog.removeClass("ui-dialog-buttons");return}e.each(n,function(n,r){var i,s;r=e.isFunction(r)?{click:r,text:n}:r,r=e.extend({type:"button"},r),i=r.click,r.click=function(){i.apply(t.element[0],arguments)},s={icons:r.icons,text:r.showText},delete r.icons,delete r.showText,e("",r).button(s).appendTo(t.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog)},_makeDraggable:function(){function r(e){return{position:e.position,offset:e.offset}}var t=this,n=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(n,i){e(this).addClass("ui-dialog-dragging"),t._blockFrames(),t._trigger("dragStart",n,r(i))},drag:function(e,n){t._trigger("drag",e,r(n))},stop:function(i,s){n.position=[s.position.left-t.document.scrollLeft(),s.position.top-t.document.scrollTop()],e(this).removeClass("ui-dialog-dragging"),t._unblockFrames(),t._trigger("dragStop",i,r(s))}})},_makeResizable:function(){function o(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}var t=this,n=this.options,r=n.resizable,i=this.uiDialog.css("position"),s=typeof r=="string"?r:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:n.maxWidth,maxHeight:n.maxHeight,minWidth:n.minWidth,minHeight:this._minHeight(),handles:s,start:function(n,r){e(this).addClass("ui-dialog-resizing"),t._blockFrames(),t._trigger("resizeStart",n,o(r))},resize:function(e,n){t._trigger("resize",e,o(n))},stop:function(r,i){n.height=e(this).height(),n.width=e(this).width(),e(this).removeClass("ui-dialog-resizing"),t._unblockFrames(),t._trigger("resizeStop",r,o(i))}}).css("position",i)},_minHeight:function(){var e=this.options;return e.height==="auto"?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(){var e=this.uiDialog.is(":visible");e||this.uiDialog.show(),this.uiDialog.position(this.options.position),e||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,o={};e.each(t,function(e,t){i._setOption(e,t),e in n&&(s=!0),e in r&&(o[e]=t)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",o)},_setOption:function(e,t){var n,r,i=this.uiDialog;e==="dialogClass"&&i.removeClass(this.options.dialogClass).addClass(t);if(e==="disabled")return;this._super(e,t),e==="appendTo"&&this.uiDialog.appendTo(this._appendTo()),e==="buttons"&&this._createButtons(),e==="closeText"&&this.uiDialogTitlebarClose.button({label:""+t}),e==="draggable"&&(n=i.is(":data(ui-draggable)"),n&&!t&&i.draggable("destroy"),!n&&t&&this._makeDraggable()),e==="position"&&this._position(),e==="resizable"&&(r=i.is(":data(ui-resizable)"),r&&!t&&i.resizable("destroy"),r&&typeof t=="string"&&i.resizable("option","handles",t),!r&&t!==!1&&this._makeResizable()),e==="title"&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title"))},_size:function(){var e,t,n,r=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),r.minWidth>r.width&&(r.width=r.minWidth),e=this.uiDialog.css({height:"auto",width:r.width}).outerHeight(),t=Math.max(0,r.minHeight-e),n=typeof r.maxHeight=="number"?Math.max(0,r.maxHeight-e):"none",r.height==="auto"?this.element.css({minHeight:t,maxHeight:n,height:"auto"}):this.element.height(Math.max(0,r.height-e)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=e(this);return e("
      ").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_createOverlay:function(){if(!this.options.modal)return;e.ui.dialog.overlayInstances||this._delay(function(){e.ui.dialog.overlayInstances&&this.document.bind("focusin.dialog",function(t){!e(t.target).closest(".ui-dialog").length&&!e(t.target).closest(".ui-datepicker").length&&(t.preventDefault(),e(".ui-dialog:visible:last .ui-dialog-content").data("ui-dialog")._focusTabbable())})}),this.overlay=e("
      ").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),e.ui.dialog.overlayInstances++},_destroyOverlay:function(){if(!this.options.modal)return;this.overlay&&(e.ui.dialog.overlayInstances--,e.ui.dialog.overlayInstances||this.document.unbind("focusin.dialog"),this.overlay.remove(),this.overlay=null)}}),e.ui.dialog.overlayInstances=0,e.uiBackCompat!==!1&&e.widget("ui.dialog",e.ui.dialog,{_position:function(){var t=this.options.position,n=[],r=[0,0],i;if(t){if(typeof t=="string"||typeof t=="object"&&"0"in t)n=t.split?t.split(" "):[t[0],t[1]],n.length===1&&(n[1]=n[0]),e.each(["left","top"],function(e,t){+n[e]===n[e]&&(r[e]=n[e],n[e]=t)}),t={my:n[0]+(r[0]<0?r[0]:"+"+r[0])+" "+n[1]+(r[1]<0?r[1]:"+"+r[1]),at:n.join(" ")};t=e.extend({},e.ui.dialog.prototype.options.position,t)}else t=e.ui.dialog.prototype.options.position;i=this.uiDialog.is(":visible"),i||this.uiDialog.show(),this.uiDialog.position(t),i||this.uiDialog.hide()}})})(jQuery);(function(e,t){e.widget("ui.menu",{version:"1.10.1",defaultElement:"
        ",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content ui-corner-all").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}).bind("click"+this.eventNamespace,e.proxy(function(e){this.options.disabled&&e.preventDefault()},this)),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item > a":function(e){e.preventDefault()},"click .ui-state-disabled > a":function(e){e.preventDefault()},"click .ui-menu-item:has(a)":function(t){var n=e(t.target).closest(".ui-menu-item");!this.mouseHandled&&n.not(".ui-state-disabled").length&&(this.mouseHandled=!0,this.select(t),n.has(".ui-menu").length?this.expand(t):this.element.is(":focus")||(this.element.trigger("focus",[!0]),this.active&&this.active.parents(".ui-menu").length===1&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){var n=e(t.currentTarget);n.siblings().children(".ui-state-active").removeClass("ui-state-active"),this.focus(t,n)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var n=this.active||this.element.children(".ui-menu-item").eq(0);t||this.focus(e,n)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){e(t.target).closest(".ui-menu").length||this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").children("a").removeUniqueId().removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){function a(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}var n,r,i,s,o,u=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:u=!1,r=this.previousFilter||"",i=String.fromCharCode(t.keyCode),s=!1,clearTimeout(this.filterTimer),i===r?s=!0:i=r+i,o=new RegExp("^"+a(i),"i"),n=this.activeMenu.children(".ui-menu-item").filter(function(){return o.test(e(this).children("a").text())}),n=s&&n.index(this.active.next())!==-1?this.active.nextAll(".ui-menu-item"):n,n.length||(i=String.fromCharCode(t.keyCode),o=new RegExp("^"+a(i),"i"),n=this.activeMenu.children(".ui-menu-item").filter(function(){return o.test(e(this).children("a").text())})),n.length?(this.focus(t,n),n.length>1?(this.previousFilter=i,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter):delete this.previousFilter}u&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.children("a[aria-haspopup='true']").length?this.expand(e):this.select(e))},refresh:function(){var t,n=this.options.icons.submenu,r=this.element.find(this.options.menus);r.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=e(this),r=t.prev("a"),i=e("").addClass("ui-menu-icon ui-icon "+n).data("ui-menu-submenu-carat",!0);r.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",r.attr("id"))}),t=r.add(this.element),t.children(":not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","presentation").children("a").uniqueId().addClass("ui-corner-all").attr({tabIndex:-1,role:this._itemRole()}),t.children(":not(.ui-menu-item)").each(function(){var t=e(this);/[^\-\u2014\u2013\s]/.test(t.text())||t.addClass("ui-widget-content ui-menu-divider")}),t.children(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(e,t){e==="icons"&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(t.submenu),this._super(e,t)},focus:function(e,t){var n,r;this.blur(e,e&&e.type==="focus"),this._scrollIntoView(t),this.active=t.first(),r=this.active.children("a").addClass("ui-state-focus"),this.options.role&&this.element.attr("aria-activedescendant",r.attr("id")),this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"),e&&e.type==="keydown"?this._close():this.timer=this._delay(function(){this._close()},this.delay),n=t.children(".ui-menu"),n.length&&/^mouse/.test(e.type)&&this._startOpening(n),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var n,r,i,s,o,u;this._hasScroll()&&(n=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,r=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,i=t.offset().top-this.activeMenu.offset().top-n-r,s=this.activeMenu.scrollTop(),o=this.activeMenu.height(),u=t.height(),i<0?this.activeMenu.scrollTop(s+i):i+u>o&&this.activeMenu.scrollTop(s+i-o+u))},blur:function(e,t){t||clearTimeout(this.timer);if(!this.active)return;this.active.children("a").removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active})},_startOpening:function(e){clearTimeout(this.timer);if(e.attr("aria-hidden")!=="true")return;this.timer=this._delay(function(){this._close(),this._open(e)},this.delay)},_open:function(t){var n=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(n)},collapseAll:function(t,n){clearTimeout(this.timer),this.timer=this._delay(function(){var r=n?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));r.length||(r=this.element),this._close(r),this.blur(t),this.activeMenu=r},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find("a.ui-state-active").removeClass("ui-state-active")},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").children(".ui-menu-item").first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,n){var r;this.active&&(e==="first"||e==="last"?r=this.active[e==="first"?"prevAll":"nextAll"](".ui-menu-item").eq(-1):r=this.active[e+"All"](".ui-menu-item").eq(0));if(!r||!r.length||!this.active)r=this.activeMenu.children(".ui-menu-item")[t]();this.focus(n,r)},nextPage:function(t){var n,r,i;if(!this.active){this.next(t);return}if(this.isLastItem())return;this._hasScroll()?(r=this.active.offset().top,i=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return n=e(this),n.offset().top-r-i<0}),this.focus(t,n)):this.focus(t,this.activeMenu.children(".ui-menu-item")[this.active?"last":"first"]())},previousPage:function(t){var n,r,i;if(!this.active){this.next(t);return}if(this.isFirstItem())return;this._hasScroll()?(r=this.active.offset().top,i=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return n=e(this),n.offset().top-r+i>0}),this.focus(t,n)):this.focus(t,this.activeMenu.children(".ui-menu-item").first())},_hasScroll:function(){return this.element.outerHeight()
      ").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(e){if(e===t)return this.options.value;this.options.value=this._constrainedValue(e),this._refreshValue()},_constrainedValue:function(e){return e===t&&(e=this.options.value),this.indeterminate=e===!1,typeof e!="number"&&(e=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,e))},_setOptions:function(e){var t=e.value;delete e.value,this._super(e),this.options.value=this._constrainedValue(t),this._refreshValue()},_setOption:function(e,t){e==="max"&&(t=Math.max(this.min,t)),this._super(e,t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,n=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).toggleClass("ui-corner-right",t===this.options.max).width(n.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=e("
      ").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}})})(jQuery);(function(e,t){var n=5;e.widget("ui.slider",e.ui.mouse,{version:"1.10.1",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,n,r=this.options,i=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),s="",o=[];n=r.values&&r.values.length||1,i.length>n&&(i.slice(n).remove(),i=i.slice(0,n));for(t=i.length;t
      ").appendTo(this.element),n="ui-slider-range ui-widget-header ui-corner-all"):this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}),this.range.addClass(n+(t.range==="min"||t.range==="max"?" ui-slider-range-"+t.range:""))):this.range=e([])},_setupEvents:function(){var e=this.handles.add(this.range).filter("a");this._off(e),this._on(e,this._handleEvents),this._hoverable(e),this._focusable(e)},_destroy:function(){this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(t){var n,r,i,s,o,u,a,f,l=this,c=this.options;return c.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),n={x:t.pageX,y:t.pageY},r=this._normValueFromMouse(n),i=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var n=Math.abs(r-l.values(t));if(i>n||i===n&&(t===l._lastChangedValue||l.values(t)===c.min))i=n,s=e(this),o=t}),u=this._start(t,o),u===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,s.addClass("ui-state-active").focus(),a=s.offset(),f=!e(t.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=f?{left:0,top:0}:{left:t.pageX-a.left-s.width()/2,top:t.pageY-a.top-s.height()/2-(parseInt(s.css("borderTopWidth"),10)||0)-(parseInt(s.css("borderBottomWidth"),10)||0)+(parseInt(s.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,r),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},n=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,n),!1},_mouseStop:function(e){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(e){var t,n,r,i,s;return this.orientation==="horizontal"?(t=this.elementSize.width,n=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,n=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),r=n/t,r>1&&(r=1),r<0&&(r=0),this.orientation==="vertical"&&(r=1-r),i=this._valueMax()-this._valueMin(),s=this._valueMin()+r*i,this._trimAlignValue(s)},_start:function(e,t){var n={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(n.value=this.values(t),n.values=this.values()),this._trigger("start",e,n)},_slide:function(e,t,n){var r,i,s;this.options.values&&this.options.values.length?(r=this.values(t?0:1),this.options.values.length===2&&this.options.range===!0&&(t===0&&n>r||t===1&&n1){this.options.values[t]=this._trimAlignValue(n),this._refreshValue(),this._change(null,t);return}if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();r=this.options.values,i=arguments[0];for(s=0;s=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,n=(e-this._valueMin())%t,r=e-n;return Math.abs(n)*2>=t&&(r+=n>0?t:-t),parseFloat(r.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var t,n,r,i,s,o=this.options.range,u=this.options,a=this,f=this._animateOff?!1:u.animate,l={};this.options.values&&this.options.values.length?this.handles.each(function(r){n=(a.values(r)-a._valueMin())/(a._valueMax()-a._valueMin())*100,l[a.orientation==="horizontal"?"left":"bottom"]=n+"%",e(this).stop(1,1)[f?"animate":"css"](l,u.animate),a.options.range===!0&&(a.orientation==="horizontal"?(r===0&&a.range.stop(1,1)[f?"animate":"css"]({left:n+"%"},u.animate),r===1&&a.range[f?"animate":"css"]({width:n-t+"%"},{queue:!1,duration:u.animate})):(r===0&&a.range.stop(1,1)[f?"animate":"css"]({bottom:n+"%"},u.animate),r===1&&a.range[f?"animate":"css"]({height:n-t+"%"},{queue:!1,duration:u.animate}))),t=n}):(r=this.value(),i=this._valueMin(),s=this._valueMax(),n=s!==i?(r-i)/(s-i)*100:0,l[this.orientation==="horizontal"?"left":"bottom"]=n+"%",this.handle.stop(1,1)[f?"animate":"css"](l,u.animate),o==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[f?"animate":"css"]({width:n+"%"},u.animate),o==="max"&&this.orientation==="horizontal"&&this.range[f?"animate":"css"]({width:100-n+"%"},{queue:!1,duration:u.animate}),o==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[f?"animate":"css"]({height:n+"%"},u.animate),o==="max"&&this.orientation==="vertical"&&this.range[f?"animate":"css"]({height:100-n+"%"},{queue:!1,duration:u.animate}))},_handleEvents:{keydown:function(t){var r,i,s,o,u=e(t.target).data("ui-slider-handle-index");switch(t.keyCode){case e.ui.keyCode.HOME:case e.ui.keyCode.END:case e.ui.keyCode.PAGE_UP:case e.ui.keyCode.PAGE_DOWN:case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:t.preventDefault();if(!this._keySliding){this._keySliding=!0,e(t.target).addClass("ui-state-active"),r=this._start(t,u);if(r===!1)return}}o=this.options.step,this.options.values&&this.options.values.length?i=s=this.values(u):i=s=this.value();switch(t.keyCode){case e.ui.keyCode.HOME:s=this._valueMin();break;case e.ui.keyCode.END:s=this._valueMax();break;case e.ui.keyCode.PAGE_UP:s=this._trimAlignValue(i+(this._valueMax()-this._valueMin())/n);break;case e.ui.keyCode.PAGE_DOWN:s=this._trimAlignValue(i-(this._valueMax()-this._valueMin())/n);break;case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:if(i===this._valueMax())return;s=this._trimAlignValue(i+o);break;case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(i===this._valueMin())return;s=this._trimAlignValue(i-o)}this._slide(t,u,s)},click:function(e){e.preventDefault()},keyup:function(t){var n=e(t.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(t,n),this._change(t,n),e(t.target).removeClass("ui-state-active"))}}})})(jQuery);(function(e){function t(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}e.widget("ui.spinner",{version:"1.10.1",defaultElement:"",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},n=this.element;return e.each(["min","max","step"],function(e,r){var i=n.attr(r);i!==undefined&&i.length&&(t[r]=i)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(e){if(this.cancelBlur){delete this.cancelBlur;return}this._refresh(),this.previous!==this.element.val()&&this._trigger("change",e)},mousewheel:function(e,t){if(!t)return;if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()},"mousedown .ui-spinner-button":function(t){function r(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=n,this._delay(function(){this.previous=n}))}var n;n=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),r.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,r.call(this)});if(this._start(t)===!1)return;this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){if(!e(t.currentTarget).hasClass("ui-state-active"))return;if(this._start(t)===!1)return!1;this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(e.height()*.5)&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var n=this.options,r=e.ui.keyCode;switch(t.keyCode){case r.UP:return this._repeat(null,1,t),!0;case r.DOWN:return this._repeat(null,-1,t),!0;case r.PAGE_UP:return this._repeat(null,n.page,t),!0;case r.PAGE_DOWN:return this._repeat(null,-n.page,t),!0}return!1},_uiSpinnerHtml:function(){return""},_buttonHtml:function(){return""+""+""+""+""},_start:function(e){return!this.spinning&&this._trigger("start",e)===!1?!1:(this.counter||(this.counter=1),this.spinning=!0,!0)},_repeat:function(e,t,n){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,n)},e),this._spin(t*this.options.step,n)},_spin:function(e,t){var n=this.value()||0;this.counter||(this.counter=1),n=this._adjustValue(n+e*this._increment(this.counter));if(!this.spinning||this._trigger("spin",t,{value:n})!==!1)this._value(n),this.counter++},_increment:function(t){var n=this.options.incremental;return n?e.isFunction(n)?n(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return this.options.min!==null&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=e.toString(),n=t.indexOf(".");return n===-1?0:t.length-n-1},_adjustValue:function(e){var t,n,r=this.options;return t=r.min!==null?r.min:0,n=e-t,n=Math.round(n/r.step)*r.step,e=t+n,e=parseFloat(e.toFixed(this._precision())),r.max!==null&&e>r.max?r.max:r.min!==null&&e1&&decodeURIComponent(e.href.replace(r,""))===decodeURIComponent(location.href.replace(r,""))}var n=0,r=/#.*$/;e.widget("ui.tabs",{version:"1.10.1",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_create:function(){var t=this,n=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",n.collapsible).delegate(".ui-tabs-nav > li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this._processTabs(),n.active=this._initialActive(),e.isArray(n.disabled)&&(n.disabled=e.unique(n.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.options.active!==!1&&this.anchors.length?this.active=this._findActive(n.active):this.active=e(),this._refresh(),this.active.length&&this.load(n.active)},_initialActive:function(){var t=this.options.active,n=this.options.collapsible,r=location.hash.substring(1);if(t===null){r&&this.tabs.each(function(n,i){if(e(i).attr("aria-controls")===r)return t=n,!1}),t===null&&(t=this.tabs.index(this.tabs.filter(".ui-tabs-active")));if(t===null||t===-1)t=this.tabs.length?0:!1}return t!==!1&&(t=this.tabs.index(this.tabs.eq(t)),t===-1&&(t=n?!1:0)),!n&&t===!1&&this.anchors.length&&(t=0),t},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var n=e(this.document[0].activeElement).closest("li"),r=this.tabs.index(n),i=!0;if(this._handlePageNav(t))return;switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:r++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:i=!1,r--;break;case e.ui.keyCode.END:r=this.anchors.length-1;break;case e.ui.keyCode.HOME:r=0;break;case e.ui.keyCode.SPACE:t.preventDefault(),clearTimeout(this.activating),this._activate(r);return;case e.ui.keyCode.ENTER:t.preventDefault(),clearTimeout(this.activating),this._activate(r===this.options.active?!1:r);return;default:return}t.preventDefault(),clearTimeout(this.activating),r=this._focusNextTab(r,i),t.ctrlKey||(n.attr("aria-selected","false"),this.tabs.eq(r).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",r)},this.delay))},_panelKeydown:function(t){if(this._handlePageNav(t))return;t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){if(t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP)return this._activate(this._focusNextTab(this.options.active-1,!1)),!0;if(t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN)return this._activate(this._focusNextTab(this.options.active+1,!0)),!0},_findNextTab:function(t,n){function i(){return t>r&&(t=0),t<0&&(t=r),t}var r=this.tabs.length-1;while(e.inArray(i(),this.options.disabled)!==-1)t=n?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){if(e==="active"){this._activate(t);return}if(e==="disabled"){this._setupDisabled(t);return}this._super(e,t),e==="collapsible"&&(this.element.toggleClass("ui-tabs-collapsible",t),!t&&this.options.active===!1&&this._activate(0)),e==="event"&&this._setupEvents(t),e==="heightStyle"&&this._setupHeightStyle(t)},_tabId:function(e){return e.attr("aria-controls")||"ui-tabs-"+i()},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,n=this.tablist.children(":has(a[href])");t.disabled=e.map(n.filter(".ui-state-disabled"),function(e){return n.index(e)}),this._processTabs(),t.active===!1||!this.anchors.length?(t.active=!1,this.active=e()):this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-expanded":"false","aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-expanded":"true","aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist"),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(n,r){var i,o,u,a=e(r).uniqueId().attr("id"),f=e(r).closest("li"),l=f.attr("aria-controls");s(r)?(i=r.hash,o=t.element.find(t._sanitizeSelector(i))):(u=t._tabId(f),i="#"+u,o=t.element.find(i),o.length||(o=t._createPanel(u),o.insertAfter(t.panels[n-1]||t.tablist)),o.attr("aria-live","polite")),o.length&&(t.panels=t.panels.add(o)),l&&f.data("ui-tabs-aria-controls",l),f.attr({"aria-controls":i.substring(1),"aria-labelledby":a}),o.attr("aria-labelledby",a)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel")},_getList:function(){return this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("
      ").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var n=0,r;r=this.tabs[n];n++)t===!0||e.inArray(n,t)!==-1?e(r).addClass("ui-state-disabled").attr("aria-disabled","true"):e(r).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var n={click:function(e){e.preventDefault()}};t&&e.each(t.split(" "),function(e,t){n[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(this.anchors,n),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var n,r=this.element.parent();t==="fill"?(n=r.height(),n-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=e(this),r=t.css("position");if(r==="absolute"||r==="fixed")return;n-=t.outerHeight(!0)}),this.element.children().not(this.panels).each(function(){n-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,n-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):t==="auto"&&(n=0,this.panels.each(function(){n=Math.max(n,e(this).height("").height())}).height(n))},_eventHandler:function(t){var n=this.options,r=this.active,i=e(t.currentTarget),s=i.closest("li"),o=s[0]===r[0],u=o&&n.collapsible,a=u?e():this._getPanelForTab(s),f=r.length?this._getPanelForTab(r):e(),l={oldTab:r,oldPanel:f,newTab:u?e():s,newPanel:a};t.preventDefault();if(s.hasClass("ui-state-disabled")||s.hasClass("ui-tabs-loading")||this.running||o&&!n.collapsible||this._trigger("beforeActivate",t,l)===!1)return;n.active=u?!1:this.tabs.index(s),this.active=o?e():s,this.xhr&&this.xhr.abort(),!f.length&&!a.length&&e.error("jQuery UI Tabs: Mismatching fragment identifier."),a.length&&this.load(this.tabs.index(s),t),this._toggle(t,l)},_toggle:function(t,n){function o(){r.running=!1,r._trigger("activate",t,n)}function u(){n.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),i.length&&r.options.show?r._show(i,r.options.show,o):(i.show(),o())}var r=this,i=n.newPanel,s=n.oldPanel;this.running=!0,s.length&&this.options.hide?this._hide(s,this.options.hide,function(){n.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),u()}):(n.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),s.hide(),u()),s.attr({"aria-expanded":"false","aria-hidden":"true"}),n.oldTab.attr("aria-selected","false"),i.length&&s.length?n.oldTab.attr("tabIndex",-1):i.length&&this.tabs.filter(function(){return e(this).attr("tabIndex")===0}).attr("tabIndex",-1),i.attr({"aria-expanded":"true","aria-hidden":"false"}),n.newTab.attr({"aria-selected":"true",tabIndex:0})},_activate:function(t){var n,r=this._findActive(t);if(r[0]===this.active[0])return;r.length||(r=this.active),n=r.find(".ui-tabs-anchor")[0],this._eventHandler({target:n,currentTarget:n,preventDefault:e.noop})},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return typeof e=="string"&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),n=t.data("ui-tabs-aria-controls");n?t.attr("aria-controls",n).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),this.options.heightStyle!=="content"&&this.panels.css("height","")},enable:function(n){var r=this.options.disabled;if(r===!1)return;n===t?r=!1:(n=this._getIndex(n),e.isArray(r)?r=e.map(r,function(e){return e!==n?e:null}):r=e.map(this.tabs,function(e,t){return t!==n?t:null})),this._setupDisabled(r)},disable:function(n){var r=this.options.disabled;if(r===!0)return;if(n===t)r=!0;else{n=this._getIndex(n);if(e.inArray(n,r)!==-1)return;e.isArray(r)?r=e.merge([n],r).sort():r=[n]}this._setupDisabled(r)},load:function(t,n){t=this._getIndex(t);var r=this,i=this.tabs.eq(t),o=i.find(".ui-tabs-anchor"),u=this._getPanelForTab(i),a={tab:i,panel:u};if(s(o[0]))return;this.xhr=e.ajax(this._ajaxSettings(o,n,a)),this.xhr&&this.xhr.statusText!=="canceled"&&(i.addClass("ui-tabs-loading"),u.attr("aria-busy","true"),this.xhr.success(function(e){setTimeout(function(){u.html(e),r._trigger("load",n,a)},1)}).complete(function(e,t){setTimeout(function(){t==="abort"&&r.panels.stop(!1,!0),i.removeClass("ui-tabs-loading"),u.removeAttr("aria-busy"),e===r.xhr&&delete r.xhr},1)}))},_ajaxSettings:function(t,n,r){var i=this;return{url:t.attr("href"),beforeSend:function(t,s){return i._trigger("beforeLoad",n,e.extend({jqXHR:t,ajaxSettings:s},r))}}},_getPanelForTab:function(t){var n=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+n))}})})(jQuery);(function(e){function n(t,n){var r=(t.attr("aria-describedby")||"").split(/\s+/);r.push(n),t.data("ui-tooltip-id",n).attr("aria-describedby",e.trim(r.join(" ")))}function r(t){var n=t.data("ui-tooltip-id"),r=(t.attr("aria-describedby")||"").split(/\s+/),i=e.inArray(n,r);i!==-1&&r.splice(i,1),t.removeData("ui-tooltip-id"),r=e.trim(r.join(" ")),r?t.attr("aria-describedby",r):t.removeAttr("aria-describedby")}var t=0;e.widget("ui.tooltip",{version:"1.10.1",options:{content:function(){var t=e(this).attr("title")||"";return e("").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable()},_setOption:function(t,n){var r=this;if(t==="disabled"){this[n?"_disable":"_enable"](),this.options[t]=n;return}this._super(t,n),t==="content"&&e.each(this.tooltips,function(e,t){r._updateContent(t)})},_disable:function(){var t=this;e.each(this.tooltips,function(n,r){var i=e.Event("blur");i.target=i.currentTarget=r[0],t.close(i,!0)}),this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).attr("title","")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var n=this,r=e(t?t.target:this.element).closest(this.options.items);if(!r.length||r.data("ui-tooltip-id"))return;r.attr("title")&&r.data("ui-tooltip-title",r.attr("title")),r.data("ui-tooltip-open",!0),t&&t.type==="mouseover"&&r.parents().each(function(){var t=e(this),r;t.data("ui-tooltip-open")&&(r=e.Event("blur"),r.target=r.currentTarget=this,n.close(r,!0)),t.attr("title")&&(t.uniqueId(),n.parents[this.id]={element:this,title:t.attr("title")},t.attr("title",""))}),this._updateContent(r,t)},_updateContent:function(e,t){var n,r=this.options.content,i=this,s=t?t.type:null;if(typeof r=="string")return this._open(t,e,r);n=r.call(e[0],function(n){if(!e.data("ui-tooltip-open"))return;i._delay(function(){t&&(t.type=s),this._open(t,e,n)})}),n&&this._open(t,e,n)},_open:function(t,r,i){function f(e){a.of=e;if(s.is(":hidden"))return;s.position(a)}var s,o,u,a=e.extend({},this.options.position);if(!i)return;s=this._find(r);if(s.length){s.find(".ui-tooltip-content").html(i);return}r.is("[title]")&&(t&&t.type==="mouseover"?r.attr("title",""):r.removeAttr("title")),s=this._tooltip(r),n(r,s.attr("id")),s.find(".ui-tooltip-content").html(i),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:f}),f(t)):s.position(e.extend({of:r},this.options.position)),s.hide(),this._show(s,this.options.show),this.options.show&&this.options.show.delay&&(u=this.delayedShow=setInterval(function(){s.is(":visible")&&(f(a.of),clearInterval(u))},e.fx.interval)),this._trigger("open",t,{tooltip:s}),o={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var n=e.Event(t);n.currentTarget=r[0],this.close(n,!0)}},remove:function(){this._removeTooltip(s)}};if(!t||t.type==="mouseover")o.mouseleave="close";if(!t||t.type==="focusin")o.focusout="close";this._on(!0,r,o)},close:function(t){var n=this,i=e(t?t.currentTarget:this.element),s=this._find(i);if(this.closing)return;clearInterval(this.delayedShow),i.data("ui-tooltip-title")&&i.attr("title",i.data("ui-tooltip-title")),r(i),s.stop(!0),this._hide(s,this.options.hide,function(){n._removeTooltip(e(this))}),i.removeData("ui-tooltip-open"),this._off(i,"mouseleave focusout keyup"),i[0]!==this.element[0]&&this._off(i,"remove"),this._off(this.document,"mousemove"),t&&t.type==="mouseleave"&&e.each(this.parents,function(t,r){e(r.element).attr("title",r.title),delete n.parents[t]}),this.closing=!0,this._trigger("close",t,{tooltip:s}),this.closing=!1},_tooltip:function(n){var r="ui-tooltip-"+t++,i=e("
      ").attr({id:r,role:"tooltip"}).addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||""));return e("
      ").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),this.tooltips[r]=n,i},_find:function(t){var n=t.data("ui-tooltip-id");return n?e("#"+n):e()},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(n,r){var i=e.Event("blur");i.target=i.currentTarget=r[0],t.close(i,!0),e("#"+n).remove(),r.data("ui-tooltip-title")&&(r.attr("title",r.data("ui-tooltip-title")),r.removeData("ui-tooltip-title"))})}})})(jQuery);jQuery.effects||function(e,t){var n="ui-effects-";e.effects={effect:{}},function(e,t){function h(e,t,n){var r=u[t.type]||{};return e==null?n||!t.def?null:t.def:(e=r.floor?~~e:parseFloat(e),isNaN(e)?t.def:r.mod?(e+r.mod)%r.mod:0>e?0:r.max")[0],l,c=e.each;f.style.cssText="background-color:rgba(1,1,1,.5)",a.rgba=f.style.backgroundColor.indexOf("rgba")>-1,c(o,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),s.fn=e.extend(s.prototype,{parse:function(n,r,i,u){if(n===t)return this._rgba=[null,null,null,null],this;if(n.jquery||n.nodeType)n=e(n).css(r),r=t;var a=this,f=e.type(n),d=this._rgba=[];r!==t&&(n=[n,r,i,u],f="array");if(f==="string")return this.parse(p(n)||l._default);if(f==="array")return c(o.rgba.props,function(e,t){d[t.idx]=h(n[t.idx],t)}),this;if(f==="object")return n instanceof s?c(o,function(e,t){n[t.cache]&&(a[t.cache]=n[t.cache].slice())}):c(o,function(t,r){var i=r.cache;c(r.props,function(e,t){if(!a[i]&&r.to){if(e==="alpha"||n[e]==null)return;a[i]=r.to(a._rgba)}a[i][t.idx]=h(n[e],t,!0)}),a[i]&&e.inArray(null,a[i].slice(0,3))<0&&(a[i][3]=1,r.from&&(a._rgba=r.from(a[i])))}),this},is:function(e){var t=s(e),n=!0,r=this;return c(o,function(e,i){var s,o=t[i.cache];return o&&(s=r[i.cache]||i.to&&i.to(r._rgba)||[],c(i.props,function(e,t){if(o[t.idx]!=null)return n=o[t.idx]===s[t.idx],n})),n}),n},_space:function(){var e=[],t=this;return c(o,function(n,r){t[r.cache]&&e.push(n)}),e.pop()},transition:function(e,t){var n=s(e),r=n._space(),i=o[r],a=this.alpha()===0?s("transparent"):this,f=a[i.cache]||i.to(a._rgba),l=f.slice();return n=n[i.cache],c(i.props,function(e,r){var i=r.idx,s=f[i],o=n[i],a=u[r.type]||{};if(o===null)return;s===null?l[i]=o:(a.mod&&(o-s>a.mod/2?s+=a.mod:s-o>a.mod/2&&(s-=a.mod)),l[i]=h((o-s)*t+s,r))}),this[r](l)},blend:function(t){if(this._rgba[3]===1)return this;var n=this._rgba.slice(),r=n.pop(),i=s(t)._rgba;return s(e.map(n,function(e,t){return(1-r)*i[t]+r*e}))},toRgbaString:function(){var t="rgba(",n=e.map(this._rgba,function(e,t){return e==null?t>2?1:0:e});return n[3]===1&&(n.pop(),t="rgb("),t+n.join()+")"},toHslaString:function(){var t="hsla(",n=e.map(this.hsla(),function(e,t){return e==null&&(e=t>2?1:0),t&&t<3&&(e=Math.round(e*100)+"%"),e});return n[3]===1&&(n.pop(),t="hsl("),t+n.join()+")"},toHexString:function(t){var n=this._rgba.slice(),r=n.pop();return t&&n.push(~~(r*255)),"#"+e.map(n,function(e){return e=(e||0).toString(16),e.length===1?"0"+e:e}).join("")},toString:function(){return this._rgba[3]===0?"transparent":this.toRgbaString()}}),s.fn.parse.prototype=s.fn,o.hsla.to=function(e){if(e[0]==null||e[1]==null||e[2]==null)return[null,null,null,e[3]];var t=e[0]/255,n=e[1]/255,r=e[2]/255,i=e[3],s=Math.max(t,n,r),o=Math.min(t,n,r),u=s-o,a=s+o,f=a*.5,l,c;return o===s?l=0:t===s?l=60*(n-r)/u+360:n===s?l=60*(r-t)/u+120:l=60*(t-n)/u+240,u===0?c=0:f<=.5?c=u/a:c=u/(2-a),[Math.round(l)%360,c,f,i==null?1:i]},o.hsla.from=function(e){if(e[0]==null||e[1]==null||e[2]==null)return[null,null,null,e[3]];var t=e[0]/360,n=e[1],r=e[2],i=e[3],s=r<=.5?r*(1+n):r+n-r*n,o=2*r-s;return[Math.round(d(o,s,t+1/3)*255),Math.round(d(o,s,t)*255),Math.round(d(o,s,t-1/3)*255),i]},c(o,function(n,i){var o=i.props,u=i.cache,a=i.to,f=i.from;s.fn[n]=function(n){a&&!this[u]&&(this[u]=a(this._rgba));if(n===t)return this[u].slice();var r,i=e.type(n),l=i==="array"||i==="object"?n:arguments,p=this[u].slice();return c(o,function(e,t){var n=l[i==="object"?e:t.idx];n==null&&(n=p[t.idx]),p[t.idx]=h(n,t)}),f?(r=s(f(p)),r[u]=p,r):s(p)},c(o,function(t,i){if(s.fn[t])return;s.fn[t]=function(s){var o=e.type(s),u=t==="alpha"?this._hsla?"hsla":"rgba":n,a=this[u](),f=a[i.idx],l;return o==="undefined"?f:(o==="function"&&(s=s.call(this,f),o=e.type(s)),s==null&&i.empty?this:(o==="string"&&(l=r.exec(s),l&&(s=f+parseFloat(l[2])*(l[1]==="+"?1:-1))),a[i.idx]=s,this[u](a)))}})}),s.hook=function(t){var n=t.split(" ");c(n,function(t,n){e.cssHooks[n]={set:function(t,r){var i,o,u="";if(r!=="transparent"&&(e.type(r)!=="string"||(i=p(r)))){r=s(i||r);if(!a.rgba&&r._rgba[3]!==1){o=n==="backgroundColor"?t.parentNode:t;while((u===""||u==="transparent")&&o&&o.style)try{u=e.css(o,"backgroundColor"),o=o.parentNode}catch(f){}r=r.blend(u&&u!=="transparent"?u:"_default")}r=r.toRgbaString()}try{t.style[n]=r}catch(f){}}},e.fx.step[n]=function(t){t.colorInit||(t.start=s(t.elem,n),t.end=s(t.end),t.colorInit=!0),e.cssHooks[n].set(t.elem,t.start.transition(t.end,t.pos))}})},s.hook(n),e.cssHooks.borderColor={expand:function(e){var t={};return c(["Top","Right","Bottom","Left"],function(n,r){t["border"+r+"Color"]=e}),t}},l=e.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(jQuery),function(){function i(t){var n,r,i=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,s={};if(i&&i.length&&i[0]&&i[i[0]]){r=i.length;while(r--)n=i[r],typeof i[n]=="string"&&(s[e.camelCase(n)]=i[n])}else for(n in i)typeof i[n]=="string"&&(s[n]=i[n]);return s}function s(t,n){var i={},s,o;for(s in n)o=n[s],t[s]!==o&&!r[s]&&(e.fx.step[s]||!isNaN(parseFloat(o)))&&(i[s]=o);return i}var n=["add","remove","toggle"],r={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,n){e.fx.step[n]=function(e){if(e.end!=="none"&&!e.setAttr||e.pos===1&&!e.setAttr)jQuery.style(e.elem,n,e.end),e.setAttr=!0}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(t,r,o,u){var a=e.speed(r,o,u);return this.queue(function(){var r=e(this),o=r.attr("class")||"",u,f=a.children?r.find("*").addBack():r;f=f.map(function(){var t=e(this);return{el:t,start:i(this)}}),u=function(){e.each(n,function(e,n){t[n]&&r[n+"Class"](t[n])})},u(),f=f.map(function(){return this.end=i(this.el[0]),this.diff=s(this.start,this.end),this}),r.attr("class",o),f=f.map(function(){var t=this,n=e.Deferred(),r=e.extend({},a,{queue:!1,complete:function(){n.resolve(t)}});return this.el.animate(this.diff,r),n.promise()}),e.when.apply(e,f.get()).done(function(){u(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),a.complete.call(r[0])})})},e.fn.extend({_addClass:e.fn.addClass,addClass:function(t,n,r,i){return n?e.effects.animateClass.call(this,{add:t},n,r,i):this._addClass(t)},_removeClass:e.fn.removeClass,removeClass:function(t,n,r,i){return arguments.length>1?e.effects.animateClass.call(this,{remove:t},n,r,i):this._removeClass.apply(this,arguments)},_toggleClass:e.fn.toggleClass,toggleClass:function(n,r,i,s,o){return typeof r=="boolean"||r===t?i?e.effects.animateClass.call(this,r?{add:n}:{remove:n},i,s,o):this._toggleClass(n,r):e.effects.animateClass.call(this,{toggle:n},r,i,s)},switchClass:function(t,n,r,i,s){return e.effects.animateClass.call(this,{add:n,remove:t},r,i,s)}})}(),function(){function r(t,n,r,i){e.isPlainObject(t)&&(n=t,t=t.effect),t={effect:t},n==null&&(n={}),e.isFunction(n)&&(i=n,r=null,n={});if(typeof n=="number"||e.fx.speeds[n])i=r,r=n,n={};return e.isFunction(r)&&(i=r,r=null),n&&e.extend(t,n),r=r||n.duration,t.duration=e.fx.off?0:typeof r=="number"?r:r in e.fx.speeds?e.fx.speeds[r]:e.fx.speeds._default,t.complete=i||n.complete,t}function i(t){return!t||typeof t=="number"||e.fx.speeds[t]?!0:typeof t=="string"&&!e.effects.effect[t]}e.extend(e.effects,{version:"1.10.1",save:function(e,t){for(var r=0;r
      ").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),i={width:t.width(),height:t.height()},s=document.activeElement;try{s.id}catch(o){s=document.body}return t.wrap(r),(t[0]===s||e.contains(t[0],s))&&e(s).focus(),r=t.parent(),t.css("position")==="static"?(r.css({position:"relative"}),t.css({position:"relative"})):(e.extend(n,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,r){n[r]=t.css(r),isNaN(parseInt(n[r],10))&&(n[r]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(i),r.css(n).show()},removeWrapper:function(t){var n=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===n||e.contains(t[0],n))&&e(n).focus()),t},setTransition:function(t,n,r,i){return i=i||{},e.each(n,function(e,n){var s=t.cssUnit(n);s[0]>0&&(i[n]=s[0]*r+s[1])}),i}}),e.fn.extend({effect:function(){function o(n){function u(){e.isFunction(i)&&i.call(r[0]),e.isFunction(n)&&n()}var r=e(this),i=t.complete,o=t.mode;(r.is(":hidden")?o==="hide":o==="show")?u():s.call(r[0],t,u)}var t=r.apply(this,arguments),n=t.mode,i=t.queue,s=e.effects.effect[t.effect];return e.fx.off||!s?n?this[n](t.duration,t.complete):this.each(function(){t.complete&&t.complete.call(this)}):i===!1?this.each(o):this.queue(i||"fx",o)},_show:e.fn.show,show:function(e){if(i(e))return this._show.apply(this,arguments);var t=r.apply(this,arguments);return t.mode="show",this.effect.call(this,t)},_hide:e.fn.hide,hide:function(e){if(i(e))return this._hide.apply(this,arguments);var t=r.apply(this,arguments);return t.mode="hide",this.effect.call(this,t)},__toggle:e.fn.toggle,toggle:function(t){if(i(t)||typeof t=="boolean"||e.isFunction(t))return this.__toggle.apply(this,arguments);var n=r.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)},cssUnit:function(t){var n=this.css(t),r=[];return e.each(["em","px","%","pt"],function(e,t){n.indexOf(t)>0&&(r=[parseFloat(n),t])}),r}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,n){t[n]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return e===0||e===1?e:-Math.pow(2,8*(e-1))*Math.sin(((e-1)*80-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){var t,n=4;while(e<((t=Math.pow(2,--n))-1)/11);return 1/Math.pow(4,3-n)-7.5625*Math.pow((t*3-2)/22-e,2)}}),e.each(t,function(t,n){e.easing["easeIn"+t]=n,e.easing["easeOut"+t]=function(e){return 1-n(1-e)},e.easing["easeInOut"+t]=function(e){return e<.5?n(e*2)/2:1-n(e*-2+2)/2}})}()}(jQuery);(function(e,t){var n=/up|down|vertical/,r=/up|left|vertical|horizontal/;e.effects.effect.blind=function(t,i){var s=e(this),o=["position","top","bottom","left","right","height","width"],u=e.effects.setMode(s,t.mode||"hide"),a=t.direction||"up",f=n.test(a),l=f?"height":"width",c=f?"top":"left",h=r.test(a),p={},d=u==="show",v,m,g;s.parent().is(".ui-effects-wrapper")?e.effects.save(s.parent(),o):e.effects.save(s,o),s.show(),v=e.effects.createWrapper(s).css({overflow:"hidden"}),m=v[l](),g=parseFloat(v.css(c))||0,p[l]=d?m:0,h||(s.css(f?"bottom":"right",0).css(f?"top":"left","auto").css({position:"absolute"}),p[c]=d?g:m+g),d&&(v.css(l,0),h||v.css(c,g+m)),v.animate(p,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){u==="hide"&&s.hide(),e.effects.restore(s,o),e.effects.removeWrapper(s),i()}})}})(jQuery);(function(e,t){e.effects.effect.bounce=function(t,n){var r=e(this),i=["position","top","bottom","left","right","height","width"],s=e.effects.setMode(r,t.mode||"effect"),o=s==="hide",u=s==="show",a=t.direction||"up",f=t.distance,l=t.times||5,c=l*2+(u||o?1:0),h=t.duration/c,p=t.easing,d=a==="up"||a==="down"?"top":"left",v=a==="up"||a==="left",m,g,y,b=r.queue(),w=b.length;(u||o)&&i.push("opacity"),e.effects.save(r,i),r.show(),e.effects.createWrapper(r),f||(f=r[d==="top"?"outerHeight":"outerWidth"]()/3),u&&(y={opacity:1},y[d]=0,r.css("opacity",0).css(d,v?-f*2:f*2).animate(y,h,p)),o&&(f/=Math.pow(2,l-1)),y={},y[d]=0;for(m=0;m1&&b.splice.apply(b,[1,0].concat(b.splice(w,c+1))),r.dequeue()}})(jQuery);(function(e,t){e.effects.effect.clip=function(t,n){var r=e(this),i=["position","top","bottom","left","right","height","width"],s=e.effects.setMode(r,t.mode||"hide"),o=s==="show",u=t.direction||"vertical",a=u==="vertical",f=a?"height":"width",l=a?"top":"left",c={},h,p,d;e.effects.save(r,i),r.show(),h=e.effects.createWrapper(r).css({overflow:"hidden"}),p=r[0].tagName==="IMG"?h:r,d=p[f](),o&&(p.css(f,0),p.css(l,d/2)),c[f]=o?d:0,c[l]=o?0:d/2,p.animate(c,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){o||r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()}})}})(jQuery);(function(e,t){e.effects.effect.drop=function(t,n){var r=e(this),i=["position","top","bottom","left","right","opacity","height","width"],s=e.effects.setMode(r,t.mode||"hide"),o=s==="show",u=t.direction||"left",a=u==="up"||u==="down"?"top":"left",f=u==="up"||u==="left"?"pos":"neg",l={opacity:o?1:0},c;e.effects.save(r,i),r.show(),e.effects.createWrapper(r),c=t.distance||r[a==="top"?"outerHeight":"outerWidth"](!0)/2,o&&r.css("opacity",0).css(a,f==="pos"?-c:c),l[a]=(o?f==="pos"?"+=":"-=":f==="pos"?"-=":"+=")+c,r.animate(l,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){s==="hide"&&r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()}})}})(jQuery);(function(e,t){e.effects.effect.explode=function(t,n){function y(){c.push(this),c.length===r*i&&b()}function b(){s.css({visibility:"visible"}),e(c).remove(),u||s.hide(),n()}var r=t.pieces?Math.round(Math.sqrt(t.pieces)):3,i=r,s=e(this),o=e.effects.setMode(s,t.mode||"hide"),u=o==="show",a=s.show().css("visibility","hidden").offset(),f=Math.ceil(s.outerWidth()/i),l=Math.ceil(s.outerHeight()/r),c=[],h,p,d,v,m,g;for(h=0;h
      ").css({position:"absolute",visibility:"visible",left:-p*f,top:-h*l}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:f,height:l,left:d+(u?m*f:0),top:v+(u?g*l:0),opacity:u?0:1}).animate({left:d+(u?0:m*f),top:v+(u?0:g*l),opacity:u?1:0},t.duration||500,t.easing,y)}}})(jQuery);(function(e,t){e.effects.effect.fade=function(t,n){var r=e(this),i=e.effects.setMode(r,t.mode||"toggle");r.animate({opacity:i},{queue:!1,duration:t.duration,easing:t.easing,complete:n})}})(jQuery);(function(e,t){e.effects.effect.fold=function(t,n){var r=e(this),i=["position","top","bottom","left","right","height","width"],s=e.effects.setMode(r,t.mode||"hide"),o=s==="show",u=s==="hide",a=t.size||15,f=/([0-9]+)%/.exec(a),l=!!t.horizFirst,c=o!==l,h=c?["width","height"]:["height","width"],p=t.duration/2,d,v,m={},g={};e.effects.save(r,i),r.show(),d=e.effects.createWrapper(r).css({overflow:"hidden"}),v=c?[d.width(),d.height()]:[d.height(),d.width()],f&&(a=parseInt(f[1],10)/100*v[u?0:1]),o&&d.css(l?{height:0,width:a}:{height:a,width:0}),m[h[0]]=o?v[0]:a,g[h[1]]=o?v[1]:0,d.animate(m,p,t.easing).animate(g,p,t.easing,function(){u&&r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()})}})(jQuery);(function(e,t){e.effects.effect.highlight=function(t,n){var r=e(this),i=["backgroundImage","backgroundColor","opacity"],s=e.effects.setMode(r,t.mode||"show"),o={backgroundColor:r.css("backgroundColor")};s==="hide"&&(o.opacity=0),e.effects.save(r,i),r.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){s==="hide"&&r.hide(),e.effects.restore(r,i),n()}})}})(jQuery);(function(e,t){e.effects.effect.pulsate=function(t,n){var r=e(this),i=e.effects.setMode(r,t.mode||"show"),s=i==="show",o=i==="hide",u=s||i==="hide",a=(t.times||5)*2+(u?1:0),f=t.duration/a,l=0,c=r.queue(),h=c.length,p;if(s||!r.is(":visible"))r.css("opacity",0).show(),l=1;for(p=1;p1&&c.splice.apply(c,[1,0].concat(c.splice(h,a+1))),r.dequeue()}})(jQuery);(function(e,t){e.effects.effect.puff=function(t,n){var r=e(this),i=e.effects.setMode(r,t.mode||"hide"),s=i==="hide",o=parseInt(t.percent,10)||150,u=o/100,a={height:r.height(),width:r.width(),outerHeight:r.outerHeight(),outerWidth:r.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:i,complete:n,percent:s?o:100,from:s?a:{height:a.height*u,width:a.width*u,outerHeight:a.outerHeight*u,outerWidth:a.outerWidth*u}}),r.effect(t)},e.effects.effect.scale=function(t,n){var r=e(this),i=e.extend(!0,{},t),s=e.effects.setMode(r,t.mode||"effect"),o=parseInt(t.percent,10)||(parseInt(t.percent,10)===0?0:s==="hide"?0:100),u=t.direction||"both",a=t.origin,f={height:r.height(),width:r.width(),outerHeight:r.outerHeight(),outerWidth:r.outerWidth()},l={y:u!=="horizontal"?o/100:1,x:u!=="vertical"?o/100:1};i.effect="size",i.queue=!1,i.complete=n,s!=="effect"&&(i.origin=a||["middle","center"],i.restore=!0),i.from=t.from||(s==="show"?{height:0,width:0,outerHeight:0,outerWidth:0}:f),i.to={height:f.height*l.y,width:f.width*l.x,outerHeight:f.outerHeight*l.y,outerWidth:f.outerWidth*l.x},i.fade&&(s==="show"&&(i.from.opacity=0,i.to.opacity=1),s==="hide"&&(i.from.opacity=1,i.to.opacity=0)),r.effect(i)},e.effects.effect.size=function(t,n){var r,i,s,o=e(this),u=["position","top","bottom","left","right","width","height","overflow","opacity"],a=["position","top","bottom","left","right","overflow","opacity"],f=["width","height","overflow"],l=["fontSize"],c=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],h=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=e.effects.setMode(o,t.mode||"effect"),d=t.restore||p!=="effect",v=t.scale||"both",m=t.origin||["middle","center"],g=o.css("position"),y=d?u:a,b={height:0,width:0,outerHeight:0,outerWidth:0};p==="show"&&o.show(),r={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},t.mode==="toggle"&&p==="show"?(o.from=t.to||b,o.to=t.from||r):(o.from=t.from||(p==="show"?b:r),o.to=t.to||(p==="hide"?b:r)),s={from:{y:o.from.height/r.height,x:o.from.width/r.width},to:{y:o.to.height/r.height,x:o.to.width/r.width}};if(v==="box"||v==="both")s.from.y!==s.to.y&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,s.from.y,o.from),o.to=e.effects.setTransition(o,c,s.to.y,o.to)),s.from.x!==s.to.x&&(y=y.concat(h),o.from=e.effects.setTransition(o,h,s.from.x,o.from),o.to=e.effects.setTransition(o,h,s.to.x,o.to));(v==="content"||v==="both")&&s.from.y!==s.to.y&&(y=y.concat(l).concat(f),o.from=e.effects.setTransition(o,l,s.from.y,o.from),o.to=e.effects.setTransition(o,l,s.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),m&&(i=e.effects.getBaseline(m,r),o.from.top=(r.outerHeight-o.outerHeight())*i.y,o.from.left=(r.outerWidth-o.outerWidth())*i.x,o.to.top=(r.outerHeight-o.to.outerHeight)*i.y,o.to.left=(r.outerWidth-o.to.outerWidth)*i.x),o.css(o.from);if(v==="content"||v==="both")c=c.concat(["marginTop","marginBottom"]).concat(l),h=h.concat(["marginLeft","marginRight"]),f=u.concat(c).concat(h),o.find("*[width]").each(function(){var n=e(this),r={height:n.height(),width:n.width(),outerHeight:n.outerHeight(),outerWidth:n.outerWidth()};d&&e.effects.save(n,f),n.from={height:r.height*s.from.y,width:r.width*s.from.x,outerHeight:r.outerHeight*s.from.y,outerWidth:r.outerWidth*s.from.x},n.to={height:r.height*s.to.y,width:r.width*s.to.x,outerHeight:r.height*s.to.y,outerWidth:r.width*s.to.x},s.from.y!==s.to.y&&(n.from=e.effects.setTransition(n,c,s.from.y,n.from),n.to=e.effects.setTransition(n,c,s.to.y,n.to)),s.from.x!==s.to.x&&(n.from=e.effects.setTransition(n,h,s.from.x,n.from),n.to=e.effects.setTransition(n,h,s.to.x,n.to)),n.css(n.from),n.animate(n.to,t.duration,t.easing,function(){d&&e.effects.restore(n,f)})});o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){o.to.opacity===0&&o.css("opacity",o.from.opacity),p==="hide"&&o.hide(),e.effects.restore(o,y),d||(g==="static"?o.css({position:"relative",top:o.to.top,left:o.to.left}):e.each(["top","left"],function(e,t){o.css(t,function(t,n){var r=parseInt(n,10),i=e?o.to.left:o.to.top;return n==="auto"?i+"px":r+i+"px"})})),e.effects.removeWrapper(o),n()}})}})(jQuery);(function(e,t){e.effects.effect.shake=function(t,n){var r=e(this),i=["position","top","bottom","left","right","height","width"],s=e.effects.setMode(r,t.mode||"effect"),o=t.direction||"left",u=t.distance||20,a=t.times||3,f=a*2+1,l=Math.round(t.duration/f),c=o==="up"||o==="down"?"top":"left",h=o==="up"||o==="left",p={},d={},v={},m,g=r.queue(),y=g.length;e.effects.save(r,i),r.show(),e.effects.createWrapper(r),p[c]=(h?"-=":"+=")+u,d[c]=(h?"+=":"-=")+u*2,v[c]=(h?"-=":"+=")+u*2,r.animate(p,l,t.easing);for(m=1;m1&&g.splice.apply(g,[1,0].concat(g.splice(y,f+1))),r.dequeue()}})(jQuery);(function(e,t){e.effects.effect.slide=function(t,n){var r=e(this),i=["position","top","bottom","left","right","width","height"],s=e.effects.setMode(r,t.mode||"show"),o=s==="show",u=t.direction||"left",a=u==="up"||u==="down"?"top":"left",f=u==="up"||u==="left",l,c={};e.effects.save(r,i),r.show(),l=t.distance||r[a==="top"?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(r).css({overflow:"hidden"}),o&&r.css(a,f?isNaN(l)?"-"+l:-l:l),c[a]=(o?f?"+=":"-=":f?"-=":"+=")+l,r.animate(c,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){s==="hide"&&r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()}})}})(jQuery);(function(e,t){e.effects.effect.transfer=function(t,n){var r=e(this),i=e(t.to),s=i.css("position")==="fixed",o=e("body"),u=s?o.scrollTop():0,a=s?o.scrollLeft():0,f=i.offset(),l={top:f.top-u,left:f.left-a,height:i.innerHeight(),width:i.innerWidth()},c=r.offset(),h=e("
      ").appendTo(document.body).addClass(t.className).css({top:c.top-u,left:c.left-a,height:r.innerHeight(),width:r.innerWidth(),position:s?"fixed":"absolute"}).animate(l,t.duration,t.easing,function(){h.remove(),n()})}})(jQuery);assets/plugins/jquery-ui/images/ui-bg_gloss-wave_35_f6a828_500x100.png000064400000013267152510440710021120 0ustar00PNG  IHDRd5ibKGD X pHYsHHFk>IDATx_gULTT,` JI-,㭓Wz5WE3HG)veZQ{múIf^yƥ֭ٹw>%:%:3Hϸ*y{ERq Se&L6`aUfy ^Sefa;Oz }׵SˇU2f[nqw߁ IYV RWƱB-Uf'%S 6Wʎnsp Oل'ׂrҳ\˷v5S[nS~53|w9 eY\9pea'z{{,;:݂QyFGlҧ<<;z/EX %vT{œڦbѵ<*Y|+uuKհz"75n޺e^+*)sS -<-ך)ޖy xuVYW>ςmYΦwס k|iX!| 0 Sǽq{C˒S|gg?&S>0PtfMEΠRvt[z]4]me*բ%/wayc) ͻWy);C>~,^+uK_ymg[%+73U,גqjV˰v?0 ǿ?Ӧ6㟕޻%}7A>l*ǿ>,&Be^jixklM*}شe\sͼ*Mcϗ'z%wbǔ%3´|Kޭ;aGgUvS$w^?^z(fᵜꫫ蟧dyf㾺%Qm|Gɋ׾]jg[ ]1aG3vZѥtսg{ҳkWc,+ת[U爒Me%|*ϝZ+F~=EyD4p6y=~/~~pݢD|??.{W4][f :'继S `tOYp'|?zG"k3÷'2׿vvlq6'3݅[p?z0랾I{fτG³6wvol lx{p2Lwמ? bOnT~4-m.|,\ 7 ép:=;ݓsSݝ፭~[Hlt7c]ݍ?սug=.;`hKW~O ,l}ͩӍ㾭_;4f\a_Z>>o{z{y oL,^x/zbxBnW>Xw0qn tφ{ m7óݧ˳p{w&\ ߱|!\N_ ?аpbB _/-;5 J0iG+ſX ^C:=ץ?xp".t-G |f/9|>{뼣@ t،F/W›}aKz{8}Ob|yvUKz)00;[Kʯ2|-iꛚJ?SsmӪBGѼEُLcZRK]l}}[&^Sa',~-?/_`e OãqyհfbiXbEZl4dſns&w 0˰?w>&<|2S G 6x,w,)u=)]o;F)\@?mQϵk3(}֌>䭐Ʋӽݴ5'E,Ԋ&^5άueFd|5G|lW)y}t_x0 ^H~4f 3WSe`q*e`ÙeT͆S&@e_N'ۤ*x-}R*Sؚ ԭqVR+^UJ"euJfzlz}G37^^5[relѕLzz#zJEyV<ک]Z>zWJR]t=? d2G+-ݾ^>mkLYЂJSlz+Qfwezt˰v3/ٯ~gLyX}6<,l6é2vòU 2'U3tujJj|%u7MYU[Q+j( lyMϣRy}mUXlFW %>}ED֋fRZR{"x#[gGg3kPuN#?ۏ+w^q2=Q%tb}(lJ꠫Z^e?6llyU(Q(ӕO;_%/j]8޼uF^5fKE$sM;QuЭzv{hGuȦn~oY؞kmp+ަ{-ގ-t˶}2azS~֚v{G[b!/׵"^/k-*Į :GOd[{K(R}o5zs7u>]+*ܫVU %9b?Rf`%̯>[f[<F7ܪ2|+YKl&RϔڲNޟSa'\J]ۙڤ*cqOoI.tXR)TC(ʈ6z,v*֫[:Inxk>%w̋WJ$ֻ\oܗ^f]nJ|7ؾ}65J|7%5>Em_=eV /)m۵dgSWWNBʪ zYcX˫.}(Z>tUKfJz+dPS'ZڊyOXj=JW~i f<&uXRkƭE;7S刺v>xS*kGQJ"ڜo7AZ|צŨyn[j `-#GO p:X(T1%ǁU0} U=)zNz,˰vϞwVȼ^-mqJݯMmq:E7J-NQSjN𰕬unIzEf7oŶ^e5{׸~u+YJu}9dk9ϫ%g(g(} ObN(Z wMɌ0w_:_ ˰v,l˿׾p}`|7u]WJ[ɔe%hT>Cˣn珒}ExgJUFT7Fj*تz[oFVZsD NI~ujEn<c򞹵fW2n} le+a޿{GW?n7 IDATx]]%uzfV^;lY03&)]P 'M@+ȋa k`J!&~H2ք F?!0_&`>u޹?U_3sSu|U]:!D@t 8"t@M;ljH=&Omk3FB8F;@* cOy=kWڅە 3ANI*vP-ast $Hp As21E,ځ ԪGE'ihe]iSǼjvqPr /Y e-ڦt R5wgf I;&ImJmqkۦw4BsȠWM &_ /1n;z_$ 8H`# pDH 8|3h2oF)e>}Hl>LBV-}uҾo|ڵ/l| "o]}HSwǗAs!803@j~yӇ 4h >@")J_9]L;njq (pDH 8"G$@'MqXi}"03]AS(~ @@-$M6 W3'79+OqOh\O< `xTOHp/dg4 "GlՈf+)CO'u*c'TMKh^< uWhzHʇڸq풁| vAM1|B2 t3XbhW rsnZLwpO~8 pđ 8"G$@# pCR~O xDsM* |{oWC;]Հl5)^^ #šNv97> tm aϿ_ k{bW%p@ݖC>۩`ͤqǽ;~>iCZX^[HfalsX'0M _I~9'}~{.@62,hPU@U൓)UCH _\f.*@/gN*C-{g7H4ɼkor?_59]bU/_kp)m/qToLZ8D88"G$@#`ܘ*s> ʧ轎I{`>@1%,`35"G # pDH1{Hg[0 ˖\6%Hqx,Oaflxt! b[WX7wNyZ.ZuCTk qh_|kj~Q@n2=A6-kϺ"-RgZPv \͹8f/-Kp[΃:%,AL&S&D'Ms>A' FUf` JvQ8]6"?_޽C$n\Ba#¬#,5D3fq# p,'?'޷:0+n֚^vx] f 45b{=6v=NWxG8£K3kt͒] -F⛛./復Ou{~#qRyB+xۂJP1 !%3/` >\^dG/N-^ZvP#Y"ho \[LugHz~]()`+8PS~3OY((My~;HĻ}x 9 2SwG 9M\f/A1n~p SN<p-@o.-t>0-[\_g@6 nYNa .B|9>.N&hD[/3 oL59G0>*Z;"x}Œ.QٟJ| LQG5c̍ >Iէ-}{s=5}  _<Գ{ɂWZgԔ5~c|- 8"G$@X,WE Zm}p-oCCmȹA'[69~ ӎP#0*)uQDvi)FF4dAntÐ˞lO6;R,:ElPǔ K:Dۄt).kL9AOqrџWԧlJߢ\&;߈2AK9DiZyQ#5۬|{MHD#JD\8)ju9|1~=O=\Vn~'/PX(,u'0MPŃmq | J~yL1ާ{W/?o ]}uܙ F&*S\=u3~NzߤYq6DR_/MwElJCǯq!Lw]*ԐjΛ O]DCBɡB&@_fd]zva{!_nmSQnoMkn[qP3.)#{>oCz!U&6~߃JeتI]Ӻe9Qa.%sj=;x{DŽy:8"G$@ sɠ|6zCm79V ^Vzk}4*HAɿ6ZtF..2>Ot-fV;W_ٞ,O >Z|ya~萻B ki#@u"ڥ! *7! f3DckTɰCk.sPש;C<}Ra0L;7Lw5@6JCDV#NXFa곮8y>B %:dH Ar'@+2oH:͢ Ӻ]r8C`W;ErV۸ruEP;3*'JcIzkRl `OW*}Cc |NY+UOr1\LSZ5):aPlNw"Cهf9K`>3Jghe|7IqN[ʥ^c7Mq=M*3+1qKʯ3!KfŠ6|#y >_&lʶ&1_TjW`iHCڥټ ,Z7֟Ԫl;w*QwyFϜhc14R6i6h~ P6S]*r3pC۴NB;G~gj!|hϔ}vQ{z,pQGD{~9 )ߛzn&@T>51 偠0I˫\!\rrh3>]Y7PtӴDO[5nA ] alT2A_&\An4'':aOHc 0  w޺{Gg3/R1T0+ޔ0Rm柅`o*~ _g uFjǟ=sxpE)VU9vuZO=j<_>o5@HPGx#;I 0Q#zG$@# pDZK*6Aa\n6v[K(Ѯ0zLI/jnЮ|y.4qE صẄ́xjq {Y>.]!a[!i.d&~RJ4`&@Sۥ sy7wphq= lefy y_Eŵ^ըwXQ" tloޡs9eSR~ڥ|;i6\/$ʗʿx8_t+xp+ި$@'q_Ǔ.t-o\}]m&-t-o}dC>rFO|Ӗw8KCH7V'J M֝`\ W#|{B ̪$y4,}F>nk-PWEAtH=jiY'W;S'QOQL7DO=@w=KFR™?ЛΕN8#(p̯/ b,?Pw%tEXtdate:create2013-02-01T05:33:10-08:00)`%tEXtdate:modify2013-02-01T05:33:10-08:00X=x.tEXtSoftwareAdobe ImageReadyqe<IENDB`assets/plugins/jquery-ui/images/ui-icons_ffd27a_256x240.png000064400000010705152510440710017327 0ustar00PNG  IHDRIJPLTEzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzYtRNS3P/"Uq@f`2 !<BHK Z#'1S,4j8E|)Q$ bJmߜGc?oh@^bKGDH pHYsHHFk>dIDATx] c۶H阒]Kd%٫뺮lmw]|pXm-}X:+iĆQV9\e'AtOS:72YsxMہB&z>nC@r@*aӝ%MFDDDDDDTߖH,ERUn ب\f͹:}4ᦋ{)n[ ̰E K Y Dۇ- +Kl=ӃL`љ|%n a N#5 (4?EDDDD\oWFfq;\E_,W!%zE!F¶. (USHQ0dw)T 8#p,xBK *xXEe K솎%mKX~sFE~tdcaI1Af4dHcGSB`0wev`"{ .GDDDD,dO6k"qkMefS_UKŌ&g~>n H}) LF%8()r![4统qQk0m[Le_70@>1 X0AZVcEV Ltk3EJ44ZﮊN`rt>`˥  AHBLH@cUq=jcM2sJCLiR NQ0=Yi-|4V ]]B^ޞ_H$<$ a=d@ (ZAp_}~s:N{DC>m^ƒS&, ;N&B} <_AB]HuN(B0{h1IKDs j' M8.ӫ1h3df}mq nU{Lo z \=?@ ((e|=ơ麄Ci1r<|OO; `HpQyzԈuZVƲ!)5mC2Lyg;֑RjWa@@VL&Wru=Z ̥=U5} 7;b(nP&sk48ͥ01U Wvk18dqTՌE]qH8 GF K'rOrŗ6"fpT^3c"nMم-/W=tJ,X){P Rm|K>mX8v5h<_{ꘀYF|&_G;&>^W⁃&K(81EB@F&;"L'wfwE-6o&/̫'Xe,>~ee|A=) dQ`}P[KN˂/~)O[dO=3El5'Y$?7mTzզ.\.` WE"""""v)V#]L;zqJr²[\-tҽ5 @ͷϟnT@+;cQhC*TڙAVr?f? Q1T`} Hk,{VZˋTϛ?I̯uQKLMe͆~qym09 S;j5 iQ]7k0UޭGkX3#lY_Цxj޶9`# M [z KuO_z˿Dܭ*kOJ(7n\e ITƨl/U߶uw.~;#r.8 o# 5Lh>1i pVM?/u70 X@L+M+{Fkt{ŧ890`. ĀCR+\/t R; TӲ]aL|efđ >ۣG|P`P8C1K՛A̍<2ۂKrl@L L 8@E>`nPNԍ,p EƆZF lÎ; F7Ȯ; swSz)g7{rsSgȋ(߄~AWytX$NVR_<6p.O8O[OdDk>_OO}JSdmV?W(_m j~=H IԁF>T/{*]IGJ@iqamNF|Q50+ ES8:v`p~vj:Bp96oys% |@H]+@t]Wk}}7FʮrAB\m-_2PY8xՎN.h~@+7z5t_//?0S>)zi0n/B`{DW#`Bo[,gFVЁpP߾C]Bz ,XXfԃA:H k7dZ9oc}o]0vd:R]0ve]刈jу| ? +(OǍ+ #ysߍnpFru<.HȺotM3h}߆P}˗vP}mǀ?WZ@}@@FDl%tEXtdate:create2013-02-01T05:33:10-08:00)`%tEXtdate:modify2013-02-01T05:33:10-08:00X=x.tEXtSoftwareAdobe ImageReadyqe<IENDB`assets/plugins/jquery-ui/images/ui-icons_228ef1_256x240.png000064400000010705152510440710017165 0ustar00PNG  IHDRIJPLTE""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""3~YtRNS3P/"Uq@f`2 !<BHK Z#'1S,4j8E|)Q$ bJmߜGc?oh@^bKGDH pHYsHHFk>dIDATx] c۶H阒]Kd%٫뺮lmw]|pXm-}X:+iĆQV9\e'AtOS:72YsxMہB&z>nC@r@*aӝ%MFDDDDDDTߖH,ERUn ب\f͹:}4ᦋ{)n[ ̰E K Y Dۇ- +Kl=ӃL`љ|%n a N#5 (4?EDDDD\oWFfq;\E_,W!%zE!F¶. (USHQ0dw)T 8#p,xBK *xXEe K솎%mKX~sFE~tdcaI1Af4dHcGSB`0wev`"{ .GDDDD,dO6k"qkMefS_UKŌ&g~>n H}) LF%8()r![4统qQk0m[Le_70@>1 X0AZVcEV Ltk3EJ44ZﮊN`rt>`˥  AHBLH@cUq=jcM2sJCLiR NQ0=Yi-|4V ]]B^ޞ_H$<$ a=d@ (ZAp_}~s:N{DC>m^ƒS&, ;N&B} <_AB]HuN(B0{h1IKDs j' M8.ӫ1h3df}mq nU{Lo z \=?@ ((e|=ơ麄Ci1r<|OO; `HpQyzԈuZVƲ!)5mC2Lyg;֑RjWa@@VL&Wru=Z ̥=U5} 7;b(nP&sk48ͥ01U Wvk18dqTՌE]qH8 GF K'rOrŗ6"fpT^3c"nMم-/W=tJ,X){P Rm|K>mX8v5h<_{ꘀYF|&_G;&>^W⁃&K(81EB@F&;"L'wfwE-6o&/̫'Xe,>~ee|A=) dQ`}P[KN˂/~)O[dO=3El5'Y$?7mTzզ.\.` WE"""""v)V#]L;zqJr²[\-tҽ5 @ͷϟnT@+;cQhC*TڙAVr?f? Q1T`} Hk,{VZˋTϛ?I̯uQKLMe͆~qym09 S;j5 iQ]7k0UޭGkX3#lY_Цxj޶9`# M [z KuO_z˿Dܭ*kOJ(7n\e ITƨl/U߶uw.~;#r.8 o# 5Lh>1i pVM?/u70 X@L+M+{Fkt{ŧ890`. ĀCR+\/t R; TӲ]aL|efđ >ۣG|P`P8C1K՛A̍<2ۂKrl@L L 8@E>`nPNԍ,p EƆZF lÎ; F7Ȯ; swSz)g7{rsSgȋ(߄~AWytX$NVR_<6p.O8O[OdDk>_OO}JSdmV?W(_m j~=H IԁF>T/{*]IGJ@iqamNF|Q50+ ES8:v`p~vj:Bp96oys% |@H]+@t]Wk}}7FʮrAB\m-_2PY8xՎN.h~@+7z5t_//?0S>)zi0n/B`{DW#`Bo[,gFVЁpP߾C]Bz ,XXfԃA:H k7dZ9oc}o]0vd:R]0ve]刈jу| ? +(OǍ+ #ysߍnpFru<.HȺotM3h}߆P}˗vP}mǀ?WZ@}@@FDl%tEXtdate:create2013-02-01T05:33:10-08:00)`%tEXtdate:modify2013-02-01T05:33:10-08:00X=x.tEXtSoftwareAdobe ImageReadyqe<IENDB`assets/plugins/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png000064400000000430152510440710022060 0ustar00PNG  IHDRd2bKGD1 pHYsHHFk>ZIDATcx|Nhã 2dIDATx] c۶H阒]Kd%٫뺮lmw]|pXm-}X:+iĆQV9\e'AtOS:72YsxMہB&z>nC@r@*aӝ%MFDDDDDDTߖH,ERUn ب\f͹:}4ᦋ{)n[ ̰E K Y Dۇ- +Kl=ӃL`љ|%n a N#5 (4?EDDDD\oWFfq;\E_,W!%zE!F¶. (USHQ0dw)T 8#p,xBK *xXEe K솎%mKX~sFE~tdcaI1Af4dHcGSB`0wev`"{ .GDDDD,dO6k"qkMefS_UKŌ&g~>n H}) LF%8()r![4统qQk0m[Le_70@>1 X0AZVcEV Ltk3EJ44ZﮊN`rt>`˥  AHBLH@cUq=jcM2sJCLiR NQ0=Yi-|4V ]]B^ޞ_H$<$ a=d@ (ZAp_}~s:N{DC>m^ƒS&, ;N&B} <_AB]HuN(B0{h1IKDs j' M8.ӫ1h3df}mq nU{Lo z \=?@ ((e|=ơ麄Ci1r<|OO; `HpQyzԈuZVƲ!)5mC2Lyg;֑RjWa@@VL&Wru=Z ̥=U5} 7;b(nP&sk48ͥ01U Wvk18dqTՌE]qH8 GF K'rOrŗ6"fpT^3c"nMم-/W=tJ,X){P Rm|K>mX8v5h<_{ꘀYF|&_G;&>^W⁃&K(81EB@F&;"L'wfwE-6o&/̫'Xe,>~ee|A=) dQ`}P[KN˂/~)O[dO=3El5'Y$?7mTzզ.\.` WE"""""v)V#]L;zqJr²[\-tҽ5 @ͷϟnT@+;cQhC*TڙAVr?f? Q1T`} Hk,{VZˋTϛ?I̯uQKLMe͆~qym09 S;j5 iQ]7k0UޭGkX3#lY_Цxj޶9`# M [z KuO_z˿Dܭ*kOJ(7n\e ITƨl/U߶uw.~;#r.8 o# 5Lh>1i pVM?/u70 X@L+M+{Fkt{ŧ890`. ĀCR+\/t R; TӲ]aL|efđ >ۣG|P`P8C1K՛A̍<2ۂKrl@L L 8@E>`nPNԍ,p EƆZF lÎ; F7Ȯ; swSz)g7{rsSgȋ(߄~AWytX$NVR_<6p.O8O[OdDk>_OO}JSdmV?W(_m j~=H IԁF>T/{*]IGJ@iqamNF|Q50+ ES8:v`p~vj:Bp96oys% |@H]+@t]Wk}}7FʮrAB\m-_2PY8xՎN.h~@+7z5t_//?0S>)zi0n/B`{DW#`Bo[,gFVЁpP߾C]Bz ,XXfԃA:H k7dZ9oc}o]0vd:R]0ve]刈jу| ? +(OǍ+ #ysߍnpFru<.HȺotM3h}߆P}˗vP}mǀ?WZ@}@@FDl%tEXtdate:create2013-02-01T05:33:10-08:00)`%tEXtdate:modify2013-02-01T05:33:10-08:00X=x.tEXtSoftwareAdobe ImageReadyqe<IENDB`assets/plugins/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png000064400000000406152510440710020254 0ustar00PNG  IHDRDbKGD1 pHYsHHFk>HIDAT8cxa"[n{1qcpo"? 3}`xR1s?^^bxuu)뉣hW%R|%tEXtdate:create2013-03-03T18:55:48-08:00=%tEXtdate:modify2013-03-03T18:55:48-08:00LIENDB`assets/plugins/jquery-ui/images/ui-bg_flat_10_000000_40x100.png000064400000000315152510440710017456 0ustar00PNG  IHDR(dObKGD݊ pHYsHHFk>IDAT(c`Xu6w%tEXtdate:create2013-03-03T18:55:34-08:00}%tEXtdate:modify2013-03-03T18:55:34-08:00wIENDB`assets/plugins/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png000064400000000517152510440710020217 0ustar00PNG  IHDRAbKGD X pHYsHHFk>IDATH! AblA1{VY0ixxvDK_O9 aՔ}^JaȌ0bvBA$,Q"_44=SqcyEIW IDAT8cX Q(sI. I/ZW%tEXtdate:create2013-03-03T18:55:57-08:00Gn%tEXtdate:modify2013-03-03T18:55:57-08:00vmIENDB`assets/plugins/jquery-ui/images/ui-icons_454545_256x240.png000064400000015520152510440710017030 0ustar00PNG  IHDREr@bKGDE;- pHYsHHFk>mIDATx{leG}?gK$U!>T؈Ji6A"VR%;"*UP) /zRJFQP zBQHVU5sμ9^3ߕ{~7s7<.` cAb/@[VD03AX90N_B &>~> c;abDߎEQz'kMayԉ 6!:u::@RŤByDD'L-f]Sq!f SQ&S7MCr==3dJ{fZS0Ms:0K٦gʿ&HU=mc4i?UĔGU4hcQb]!hLW/  @pxh8~|AQf?ێ1f¸=uQGJHpPϠIw״m췥ԧ>2"WÓP&{nT:sfqH@.cI ~Ss+^|Bn29 dH]v-ˌ-meh>q&تg 9x#cn~!pxh84^/ o #Z@S^4 KZKPd9C@F[,a+]8vKqHlw9ק84KBץ|&#[\C`R!:F zC6)AT1wU.Iҗ!4ig3wE:q7n0uAmPy TK(5ͬlNæbTrwDV]te47 L[C0P&0++  @pxh84Y`OEZj,*-E)e{U, \uoV: `omKet_WOdW3Z Քrv|~^g`jycp*fb]M59.LNq+%ۯ0vccJEM5kk#I<x_ I#0Dw4xh84^/ ^c drDM{wQte{^`br./M:0գ*z`]|SB(e)h͎/Vܮ"aO!o ,u^Љ^=zt`WeCCM Qϱo0q%Uo?<@6HG/uAQ-_u||ִ*2lٍuG@ j !Br qL!*)h.V{3-!w$dP*/P[ t1l3hlyp0bgL} 3$%\/.)TwQ"uK7d+2! @pxh84'aY$mf6lB'.D Рx7SxtIe We}d0RW^ݢ0](U݋Tx|T|@v^Df׹Lb(2H0n8;_QO}D&3{YWw5*e˗?̖G :H iZӖ)/MP(:!/|B[i:Gf L`~:z$aa^ʭ|P- kbݞ<ەL&xJAABȼHvᑢ[ySəwNJuy %pw0_a"zx 3i1|= @%JWAm\ lXm9+()S orro*E`Z1&=ޗg!Rt<bfa?qh'y'ry#\& o+Ԫ|Y%_Hp"k1*ɫU[&x9xAsmfe<_7;y6mi :[)EB7̰8fCH`⾿h)}(%m'& ;(ݚ!{:^R@NKү"*<V敡=oh~q+`6IiI<#Z=^IE\`0]1%DA^a0f,c %[Gxh84^/rdh9M7L)-ӂ-?K(stբh-?:[ڧCr]G(YB3|C| leXW_xV8ƊbbQ7V4J]l!= D ?'a`^aq8:-OYPxۀ֝X5Q"GִW} I>ȓclpVZM_gڰCveG{<_d0՗eN%NyƍȄp~Ú/kn|(G#.s9Jۇl [6ɻ&.X{SDf†< y?O~ƅDP*~bgcos{;'Z9Z.O孁e U~?Ӆ1N3ڶD(1GxxkSHI~ی?Ok,i(ׁۈ{.h_5؋nF70QOS5:'/աJr .KNwuer>n-U$U`Iv%.AUed ;Ә:+a&XĎ y Gс "4pxh84^ @d6((Ԕ{C::[>H, ɴNVNhr.~NZ`3᝼KQ|$%t!Vn%=*7fg(m!f y"kI6Y/eZٳ+zg6W8ɦbQ%y{9Ï*ŕ#7b-tX͕8ynO{]!ټ*\ (p2.Hٙd.^Z(N &l2&k U&ף#~.7658A7}P:BlkU[8)jw0$W !s\ QFn(qRK:'X@=$ x|5:@]2Si.& $` 8tS =&[#߫U3Wҳq ^H{➇Z4"AH#U0+̱1Ɏ;O9"DE C+nU:|a ɔM|?HW1$~=kUџVVl{7 ^;<,t[T"3SU9l˾Hx^&a@)E&<I?U7xG4c *i 5)ñ>wHf5[qO.d&J_~W\`G{ |-e/Чkd E( Niv=C` ̲Z+%m )s!ī6FeiN%O*㪞v,s@%4tS/Ѓ (gX7i&X 5WJ"*V J6s{IwoO_5~YXw(R!m)^'Dɸ5=@+~jyQ`O`$D`H_BT#%].XxDѫOR2E\K"R\T|:mO x*y =2~/?J,+%q Wޛ3?ܕ? ^e +RoҎ5س~oBo l84^/  @!/ONGۮ2t]С8cݮ5z=7ˮg@/aE[y#3#z7L.| (cRcSmQ$6ץ{ Da{T_j84^/  @ñ`/_g "d`ɾ0 { Cj_9jDՋa~? dc[0*a,& 0&+ OB4!1~Ix>8c&G)jI=@5@v&J?QlÇ@Q?^%tEXtdate:create2013-02-01T05:33:10-08:00)`%tEXtdate:modify2013-02-01T05:33:10-08:00X=x.tEXtSoftwareAdobe ImageReadyqe<IENDB`assets/plugins/jquery-ui/images/ui-bg_glass_100_fdf5ce_1x400.png000064400000000534152510440710020261 0ustar00PNG  IHDRAbKGD X pHYsHHFk>IDATH? H&](v_W`5_YmFѤt?˧;=eY<#aƷAY&IRɆh`5`u8FD[9tF'pe͞zΧ=W]{EpK:_ 0~2UE\%tEXtdate:create2013-03-03T18:55:33-08:005gCE%tEXtdate:modify2013-03-03T18:55:33-08:00D:IENDB`assets/plugins/jquery-ui/images/ui-icons_ef8c08_256x240.png000064400000010705152510440710017253 0ustar00PNG  IHDRIJPLTEjYtRNS3P/"Uq@f`2 !<BHK Z#'1S,4j8E|)Q$ bJmߜGc?oh@^bKGDH pHYsHHFk>dIDATx] c۶H阒]Kd%٫뺮lmw]|pXm-}X:+iĆQV9\e'AtOS:72YsxMہB&z>nC@r@*aӝ%MFDDDDDDTߖH,ERUn ب\f͹:}4ᦋ{)n[ ̰E K Y Dۇ- +Kl=ӃL`љ|%n a N#5 (4?EDDDD\oWFfq;\E_,W!%zE!F¶. (USHQ0dw)T 8#p,xBK *xXEe K솎%mKX~sFE~tdcaI1Af4dHcGSB`0wev`"{ .GDDDD,dO6k"qkMefS_UKŌ&g~>n H}) LF%8()r![4统qQk0m[Le_70@>1 X0AZVcEV Ltk3EJ44ZﮊN`rt>`˥  AHBLH@cUq=jcM2sJCLiR NQ0=Yi-|4V ]]B^ޞ_H$<$ a=d@ (ZAp_}~s:N{DC>m^ƒS&, ;N&B} <_AB]HuN(B0{h1IKDs j' M8.ӫ1h3df}mq nU{Lo z \=?@ ((e|=ơ麄Ci1r<|OO; `HpQyzԈuZVƲ!)5mC2Lyg;֑RjWa@@VL&Wru=Z ̥=U5} 7;b(nP&sk48ͥ01U Wvk18dqTՌE]qH8 GF K'rOrŗ6"fpT^3c"nMم-/W=tJ,X){P Rm|K>mX8v5h<_{ꘀYF|&_G;&>^W⁃&K(81EB@F&;"L'wfwE-6o&/̫'Xe,>~ee|A=) dQ`}P[KN˂/~)O[dO=3El5'Y$?7mTzզ.\.` WE"""""v)V#]L;zqJr²[\-tҽ5 @ͷϟnT@+;cQhC*TڙAVr?f? Q1T`} Hk,{VZˋTϛ?I̯uQKLMe͆~qym09 S;j5 iQ]7k0UޭGkX3#lY_Цxj޶9`# M [z KuO_z˿Dܭ*kOJ(7n\e ITƨl/U߶uw.~;#r.8 o# 5Lh>1i pVM?/u70 X@L+M+{Fkt{ŧ890`. ĀCR+\/t R; TӲ]aL|efđ >ۣG|P`P8C1K՛A̍<2ۂKrl@L L 8@E>`nPNԍ,p EƆZF lÎ; F7Ȯ; swSz)g7{rsSgȋ(߄~AWytX$NVR_<6p.O8O[OdDk>_OO}JSdmV?W(_m j~=H IԁF>T/{*]IGJ@iqamNF|Q50+ ES8:v`p~vj:Bp96oys% |@H]+@t]Wk}}7FʮrAB\m-_2PY8xՎN.h~@+7z5t_//?0S>)zi0n/B`{DW#`Bo[,gFVЁpP߾C]Bz ,XXfԃA:H k7dZ9oc}o]0vd:R]0ve]刈jу| ? +(OǍ+ #ysߍnpFru<.HȺotM3h}߆P}˗vP}mǀ?WZ@}@@FDl%tEXtdate:create2013-02-01T05:33:10-08:00)`%tEXtdate:modify2013-02-01T05:33:10-08:00X=x.tEXtSoftwareAdobe ImageReadyqe<IENDB`assets/plugins/jquery-ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png000064400000000510152510440710021732 0ustar00PNG  IHDRdtbKGD X pHYsHHFk>IDAT(1 PDSZ 6M!rKJFf,>Ao`x;,,csp>҇uQ`߯i%S)~ζ rV =O・ pl:]ZO?q|%tEXtdate:create2013-03-03T18:55:33-08:005gCE%tEXtdate:modify2013-03-03T18:55:33-08:00D:IENDB`assets/plugins/jquery-ui/images/ui-icons_cd0a0a_256x240.png000064400000010705152510440710017306 0ustar00PNG  IHDRIJPLTE 4vYtRNS3P/"Uq@f`2 !<BHK Z#'1S,4j8E|)Q$ bJmߜGc?oh@^bKGDH pHYsHHFk>dIDATx] c۶H阒]Kd%٫뺮lmw]|pXm-}X:+iĆQV9\e'AtOS:72YsxMہB&z>nC@r@*aӝ%MFDDDDDDTߖH,ERUn ب\f͹:}4ᦋ{)n[ ̰E K Y Dۇ- +Kl=ӃL`љ|%n a N#5 (4?EDDDD\oWFfq;\E_,W!%zE!F¶. (USHQ0dw)T 8#p,xBK *xXEe K솎%mKX~sFE~tdcaI1Af4dHcGSB`0wev`"{ .GDDDD,dO6k"qkMefS_UKŌ&g~>n H}) LF%8()r![4统qQk0m[Le_70@>1 X0AZVcEV Ltk3EJ44ZﮊN`rt>`˥  AHBLH@cUq=jcM2sJCLiR NQ0=Yi-|4V ]]B^ޞ_H$<$ a=d@ (ZAp_}~s:N{DC>m^ƒS&, ;N&B} <_AB]HuN(B0{h1IKDs j' M8.ӫ1h3df}mq nU{Lo z \=?@ ((e|=ơ麄Ci1r<|OO; `HpQyzԈuZVƲ!)5mC2Lyg;֑RjWa@@VL&Wru=Z ̥=U5} 7;b(nP&sk48ͥ01U Wvk18dqTՌE]qH8 GF K'rOrŗ6"fpT^3c"nMم-/W=tJ,X){P Rm|K>mX8v5h<_{ꘀYF|&_G;&>^W⁃&K(81EB@F&;"L'wfwE-6o&/̫'Xe,>~ee|A=) dQ`}P[KN˂/~)O[dO=3El5'Y$?7mTzզ.\.` WE"""""v)V#]L;zqJr²[\-tҽ5 @ͷϟnT@+;cQhC*TڙAVr?f? Q1T`} Hk,{VZˋTϛ?I̯uQKLMe͆~qym09 S;j5 iQ]7k0UޭGkX3#lY_Цxj޶9`# M [z KuO_z˿Dܭ*kOJ(7n\e ITƨl/U߶uw.~;#r.8 o# 5Lh>1i pVM?/u70 X@L+M+{Fkt{ŧ890`. ĀCR+\/t R; TӲ]aL|efđ >ۣG|P`P8C1K՛A̍<2ۂKrl@L L 8@E>`nPNԍ,p EƆZF lÎ; F7Ȯ; swSz)g7{rsSgȋ(߄~AWytX$NVR_<6p.O8O[OdDk>_OO}JSdmV?W(_m j~=H IԁF>T/{*]IGJ@iqamNF|Q50+ ES8:v`p~vj:Bp96oys% |@H]+@t]Wk}}7FʮrAB\m-_2PY8xՎN.h~@+7z5t_//?0S>)zi0n/B`{DW#`Bo[,gFVЁpP߾C]Bz ,XXfԃA:H k7dZ9oc}o]0vd:R]0ve]刈jу| ? +(OǍ+ #ysߍnpFru<.HȺotM3h}߆P}˗vP}mǀ?WZ@}@@FDl%tEXtdate:create2013-02-01T05:33:10-08:00)`%tEXtdate:modify2013-02-01T05:33:10-08:00X=x.tEXtSoftwareAdobe ImageReadyqe<IENDB`assets/plugins/jquery-ui/images/ui-icons_888888_256x240.png000064400000015527152510440710017064 0ustar00PNG  IHDREr@bKGDI( pHYsHHFk>tIDATx{le}?g kuJ>DC^QMH*MU h(*$HR*j D])Ż(M6F6!6- xIi- HN8suιgf73ƣ7 x ^/2&v&v^DL l6I-o?cnD Iye#d0+03~0g'LV[RC:B~()$qvXuB@E@`HNG`TA%=]qAwJ)u)9:e9d`V0A{=BS*ڦ SgF A -(DR˷@"g'U,eSwʿj*)l[.HLyϰ9jaI6MR~~ nGٕ3  @pxh84~=@>(mE3a\`~=uQ[f3WAioK}3wէgV,jn2*ߕmM] y=xn"co.L"7]EC:dHzE@W.f+^eƦ6vռE4O`̴.)l :7){_Я~"pxh84^/ / #\@S^T0sZs1J1Pr hwVEgSTQ5[ \BO `+˾>}\6/0kg1[ KhlXʿ_Z^IA^N4vOW=%i^<9tf 2СBHg6!u\ҭZ&蒶 2s U]iT ]Uaq;]A :rG-3<Fn*ݴTݯ 4< ; @pxh84^ysh,ux$\j"Z-moSJ9{ e˹[ \fָұy2LT0K@9ԼŢ=?ХB=c"vT6 Tokza9Ts&6ոv }3':[5),xU!҃@}U kc ꈡY,]`&߬('u*^v Owu?}2&CȖr}ݾ^g[`yc*9s"f_b uuT?Mf  eۏ0evbcJEM%6PolM`n ~Esչdj|z)miO q/{کJqAGpxh84^a+ ʥ5݃F+Y&{˾I z\eXoJ}HȯiW)~nm߮ɞhl*7TP3kXJ7R""NXU}ٔއA/(qW\v6$2 -˶E zdj0u]PT{[:>>LDkZYֺ14ZCWUbd12zBY$i".~Ai=Œ ۪>EAIb\Ϋ c6OSB\ɅJ#" REȰ_'I.aluI YX^/  @=h$i37[d:Qu!ZtwUl~FŻbkK"$-c.3@,y;i-JӉR޽H!ɷjN;LdwEdp fO,jTq+ 򩸹h[@Vef6KVx\b|l}_$U+W!?o[yB(p3 r_5P2ݚla˱ *xGXG$`W~9?r+y -kd.@ <]#U\Z, W4Ig9L1s aRO^.P(>K\c6m^um Qlg"y[өD/[V*3谨Xm@[qX#r,a5 kLK"0񢐻(qAOVPU j(iJlWq li xS T!sXD@s 9ky8\aY"rv֗u- v!H 4<@(B$"PdVZ5Ɯ ߦs0kB5h$=dpϪ_@0+4@"hOtcky5vzK\1@ޒZ]B_.܋ؿ!IXdWpW0Z%y9s9jaK0hsN,lUX!hf!2.)0 6B|Iq/Ӽ0jDF[,5 !m`-$J~1wWQJD#"YO  6hVQ5Ct/7 8-*"_EUy 0x+Cxgh|+`6HiA|]Z=^JE\`20 ~]f 5X`?S0Q^?J1%[Gxh84^/{ S"rؘɛnRZԧ[v-POI'Z~ttONzqgآ4X ԃ,seq9 ,2)^Ķ/(rS?=# (9a:,وK x R. B%f6nϻ V/Σ %O+|!I 63eHWO vXIKOrZ8gg8=C29Ǫ[PB' rAmK"zʻ! m6뱾3y5ܓ"[< JsϏU9Z^8_fD!Zq_\- -`)Dg鲔iqIb.JXTbjk$M1^K6<˿9C_frEM~8]TxXu5_<t_0PA𶀆 @p4O"qGA餦vGbQprzE33U 6+$q?W 1XK<8 [sC!}E~5C~=Cn 1[xLO gUX=̪yhsl(&U'/qgv|^8Sx(o(Bxe\ӑľUs:҅ͅ2k W!BԜi VEOfX6gA5kOد2jS6ۼ[JSjQ:(Z0Ne Z]L2$4@8B,,Nj(t'8.JCLKUi5#Xx#|U:@m??d,^q5L!]MrI4pZ;>g@MFK)(}fU .{]~55>"$c +ן?Qc# mK-6)࿁_YnG+:|a "~ϯٯbq~=+,j?My 9"yDʍng6-z<,+tKxW"'l˾H[yJ&a@~/9"a%$iѣ6.S8ظ+y+*ojom p-k1 u%=-" 4wq-ՐEK |UfG -Ua]Xrx.\˅h:"LFdF5pf覊)nYͣnFh 1{'\<ϫlik)$H 䇙5%yknib /OEOjZ<,bP p+ @<[/ #/Zwp6$5DE |6w^>7{ԇNĭPwf>k7/c͗=cMﴯ߁AE`q:N*NQbUG`ʟƳCᨉ"5w5.&v;.ܱ7e$$yKYE<[y8M nm%U4@[&EC(./bC>Z1_PO^;Ф!Nwcl^]`C1L8GO{ >.|mO9QHN P{;=YJ7'[ɂ-b< Xӌ2@}޺PwaŨM lqG{R\pDxsT3Xؓ @pxh8ѱxe l TZBHaect*ZHFb52iiS[:DHS ))%_rpSeUӮ@ *I3*C 3 =&&5CB`Ê,o]~]3tحjXex0CTA3œy 5{t!k@QV+Vr 3e!̰BːۓOA԰‰ # U4VDчD*Oݕ<:XlBxh8L`pxh84y0؃Jk5#;ǮD"-鞺#tLn3ã|ÁysɩqvA2t>}XJx8c&G)jI}@5V&J? Y!\=jb<hj o%tEXtdate:create2013-02-01T05:33:10-08:00)`%tEXtdate:modify2013-02-01T05:33:10-08:00X=x.tEXtSoftwareAdobe ImageReadyqe<IENDB`assets/plugins/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png000064400000000406152510440710020056 0ustar00PNG  IHDRDbKGD1 pHYsHHFk>HIDAT8cx0Fѳg ύax1e&ë8! obަ2fx#3ǵ >QD @$.5o%tEXtdate:create2013-03-03T18:55:47-08:00nO%tEXtdate:modify2013-03-03T18:55:47-08:00IENDB`assets/plugins/jquery-ui/images/ui-icons_222222_256x240.png000064400000015412152510440710017011 0ustar00PNG  IHDREr@bKGD"b pHYsHHFk>'IDATx{he}?g{1)]K&qqU4kbiKR(HBP(IvJ_ӮIV@nB5iNiGjq& ~A#QrX'9:ܫ{3E{=yo~3g~Mp& 1Xxh8<#dlЅMx1&$5 ~V c$ױ, ƹiN:Z ߊY>"BH!-Cu8t}8!B *OF.[aͲlB&1h>M]hN4MAb̐!(hE15jձcO<6e7,eS(fo16+3y JR|{^3^{88 ~' pxh8<4 g2n6e̘{QpӀPAiۺߖfS(D'L6=T:sfq羀l.cI ǧ=iM>ڠLN{U&&{uo..4~# pxh8<4 gÛp^i/0TWcQ @)yu}`LUc%Tȥ AR@?P-`BKl bZ}Ш͢uJ%U]K2e tsY@,ee豅rjcܭsMn0 AmPy DK(5,lN&bDmrwYDVte$謷 L[C0O P&0+; g3@ pxh8<4Y`OFZ!x#~ Gk @3K@:>PRMA|e]KgF.BtlOY d!(vVX%m#I[RR`2T HwYu=bYPEcU%&@Ĺ]}qo7*GL eQX5U-³8| _ݟ5\5pVH^\ Fآaa5l14[#boP1EiswMJ'5T06B|I,b`ՈPXkB$[-EOHt |3D(id9N6@x/ؠm(#wjPt/Zobq%[:3^~a55 |E닃^E$L-_s, ߫㕔Ņ& _,# F}&.<4 gOrdh9M7L(5꓂.?M(stզ-?:[ڧCr]'YB2lC| leXSpG0KcI~u L0/yLtrI?R%-wǷh$LJV ͿӢ ,g x_7l4* uM+@x<}ãq><#`i :=*ۿ{)_8hspCWғK`B]H"}_PNtQl1YQh+&?x5: ֘aYҭ=\En.YʸJE%uTj5F'b;[vט4u6]lkw3÷, : %& [|||Yiq`:qXc2+u|~/wrz[j-I># ,9Q:#,25@@%S@@6ÅJ{6{)hW~q]t<+|'0Oa 63UHWl;'Z9Z\oO嵁eeƢ[odarEm&ʧ3m6=g^Sx Hjmi(v ۈ{.h_%8nF7y{OFS5:/աWPH+bGx/9IYy.MtTeە,ѿ- Red ;Ә:9kT5mEG|\Wuǣ@^LE 4 gy ; J'U䐎N׷< p2mӫ.ZZ5< V ,p3w=~3jǿě#ʭ|Sfyk=Cn 1]C'I_O*,J՞D\\I}E\$M(E\߮?ƫw NJEb6tz:-?Bp ?XJ $xQJ}!#Ո2Ht!VɽV\'Y366YuJOAa[5e]p9=7t_y?OS_iT<͛32N묳}jHQ RTȢ nfݮ~+ciQ < Ma=|* $@'ԌǕqUO;5~@eI29w" O~ssk{‰$m>v z^2vow` a4cM Cb>q:o=-p`_2 ng:6KXV,2Ǿ6 g3@ śsaR WWB g-N;F[ՒaAVLF<-m VbMC 7K)XPy s~=<ܒ{x!=ÃqRl]/ 0l)'}#^tX孋t8FCY$)PUBE(~ҞV2^*SLHlS'IA[ Zx-V"ȥJ+ \|5uWnLJkܟ(00JyꞄafg6 g3@Ñg[}ZQk?ҳ=zI$ Т:9FWmx:\(W+eF9,*!GhDL8[vo)AaK5S/)^c(WHNW8Tr=opp]MCO?* D΢Ob/hs0ڜb91C9-oۿԗuQFc|W%@HB29/DxD`U:Ƈgi"`%ᄽ t E`t62k)PEѿO,?k_yh(/=@u g3@v@]<]~WD`.f~oʈNVA߈եM ^yMQ|ߛ^-{o~>wЃ (gXץi&X uDU͕l  ғޥߞkPHHCJ~S@O ׋ѓy7 k {25ofϫo{'!'Z%q*)gC\#\'0 P_WL7&AlJ\ Zp, Yxjc O(6zIV u:גTDO9ׄQ<*y =2~/?J,WJQW>Wu?#G/4"K{㧏',Iҟ综E;|Rݠ~W7i86 pxh8<4 r<}8 kGo;uCPv)A<$ց;{l #`FC!f Ӆ/`7(0R!99z@%!/m]AdhvG3@ pxh8<4{P/ 3@} B&^16{. ߠaQo 2lmt!\%@X?5ճa~ ʠM65wka)TF_ 2$x5_9!VxRd1!}'`$Uԇr? Q `7`.k_VzԄp]]GOLXCk3%tEXtdate:create2013-02-01T05:33:10-08:00)`%tEXtdate:modify2013-02-01T05:33:10-08:00X=x.tEXtSoftwareAdobe ImageReadyqe<IENDB`assets/plugins/jquery-ui/images/ui-bg_glass_100_f6f6f6_1x400.png000064400000000406152510440710020126 0ustar00PNG  IHDRDbKGD1 pHYsHHFk>HIDAT8c5a"oK1|a~Ï ?~Ne%7\(1d4F1G#NP%tEXtdate:create2013-03-03T18:55:33-08:005gCE%tEXtdate:modify2013-03-03T18:55:33-08:00D:IENDB`assets/plugins/jquery-ui/images/animated-overlay.gif000064400000003312152510440710016654 0ustar00GIF89a((! NETSCAPE2.0! ,(( z KNY#7)zɭv[3ӵϰxPwEa؁FOfVYeΛ||/X\Wr݅o$m^K0>'$uf6G'Xg5Ȩ5)9):ZiYJyڪY! ,((}Q6Úa_y#ʩijK-|˱K3^Pw&KOә=7IfTzLMYhcdX\1iea }wl5CgGB)'hY9IHyȗ ʹYjZGh'j85P! ,(( mQ6,@o-`u$>Iz/ 69~[ޢՄ^Ot6Ac:vN?cUX|f&6ẍ́哲_~G(b8X%x7IXI9x(I:Y*XYvʚP! ,((oˁ;MZY|ƍ舝([99ږ1`P2!H>oQW^dsc2*Siy x[s^ݶVGWwgǸإx舙Y8IIyIZj)Xf):R! ,((CqMZYm5W(F~٩'-:Õ|ڒ1p?X1dFSLӨqne^ACjTpfԷUp|%ƌn]z~mHXx6X9)Hyi9ƈר)Z *Y! ,((˜CMZ5Yo}6-ʕz㒽h1C&'EfrtF9z&ۭ*V:&Tjeu~_}W5hbG6(iV((x:蹊JYY* P! ,((CMZՅl}'vexVZk 򮯱$bR3ƒHPGkBjymhXklvYvֻf7HXH(((9x3%txiY 9i*ZJzWP! ,((CMZՅl}'vexVZ%;ӨU{ZbQ0G͹SSRƆШ 2kYEV}v]xTpg7gvHX'㖨9)רe&) ji:hIZT;assets/plugins/jquery-ui/images/ui-bg_diagonals-thick_20_666666_40x40.png000064400000000470152510440710021563 0ustar00PNG  IHDR((;bKGD1 pHYsHHFk>zIDATH EQM6jE2 bݝ!K2g}/\)W@ -@3K,7:ׁ@k U Hrd sM u ESt.s/rڧ+%tEXtdate:create2013-03-03T18:55:33-08:005gCE%tEXtdate:modify2013-03-03T18:55:33-08:00D:IENDB`assets/plugins/jquery-ui/images/ui-bg_glass_95_fef1ec_1x400.png000064400000000514152510440710020211 0ustar00PNG  IHDRAbKGD X pHYsHHFk>IDATHϱ a\!VJ#XЋD} .f>>Pկxxqжuɚqf+6[\‡כWT4r6:]V:, (Ŵ8yG-(d H%tEXtdate:create2013-03-03T18:55:56-08:000ee%tEXtdate:modify2013-03-03T18:55:56-08:00mIENDB`assets/plugins/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png000064400000000317152510440710020301 0ustar00PNG  IHDRG#7vbKGD݊ pHYsHHFk>IDAT(ch`ph4i%tEXtdate:create2013-03-03T18:55:33-08:005gCE%tEXtdate:modify2013-03-03T18:55:33-08:00D:IENDB`assets/plugins/jquery-ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png000064400000000642152510440710021633 0ustar00PNG  IHDR((S ybKGD X pHYsHHFk>IDATh1 1F6^@-y'kZ@dyɫdLO~2z_}r9oo7[ܹ R `65@Ui]-"U qGfP$j̣`*fS3pTHTK:qnpt̠6I G5Tj̦fj촸ԱӢS$j̣`*fS3pT5vZ\iѩnpt̠hp%tEXtdate:create2013-03-03T18:55:33-08:005gCE%tEXtdate:modify2013-03-03T18:55:33-08:00D:IENDB`assets/plugins/jquery-ui/images/ui-bg_highlight-soft_100_eeeeee_1x100.png000064400000000426152510440710022146 0ustar00PNG  IHDRd2bKGD1 pHYsHHFk>XIDAT½ @@я4tU3 #U9-xy<'+w-n[bfL1&T<2GR.%tEXtdate:create2013-03-03T18:55:33-08:005gCE%tEXtdate:modify2013-03-03T18:55:33-08:00D:IENDB`assets/plugins/jquery-ui/images/ui-bg_flat_75_ffffff_40x100.png000064400000000320152510440710020171 0ustar00PNG  IHDR(dObKGD݊ pHYsHHFk>IDAT(c (IUʑ.{%tEXtdate:create2013-03-03T18:55:45-08:00\rf%tEXtdate:modify2013-03-03T18:55:45-08:00-/IENDB`assets/plugins/excanvas.min.js000064400000045562152510440710012472 0ustar00if(!document.createElement("canvas").getContext){(function(){var ab=Math;var n=ab.round;var l=ab.sin;var A=ab.cos;var H=ab.abs;var N=ab.sqrt;var d=10;var f=d/2;var z=+navigator.userAgent.match(/MSIE ([\d.]+)?/)[1];function y(){return this.context_||(this.context_=new D(this))}var t=Array.prototype.slice;function g(j,m,p){var i=t.call(arguments,2);return function(){return j.apply(m,i.concat(t.call(arguments)))}}function af(i){return String(i).replace(/&/g,"&").replace(/"/g,""")}function Y(m,j,i){if(!m.namespaces[j]){m.namespaces.add(j,i,"#default#VML")}}function R(j){Y(j,"g_vml_","urn:schemas-microsoft-com:vml");Y(j,"g_o_","urn:schemas-microsoft-com:office:office");if(!j.styleSheets.ex_canvas_){var i=j.createStyleSheet();i.owningElement.id="ex_canvas_";i.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}R(document);var e={init:function(i){var j=i||document;j.createElement("canvas");j.attachEvent("onreadystatechange",g(this.init_,this,j))},init_:function(p){var m=p.getElementsByTagName("canvas");for(var j=0;j1){m--}if(6*m<1){return j+(i-j)*6*m}else{if(2*m<1){return i}else{if(3*m<2){return j+(i-j)*(2/3-m)*6}else{return j}}}}var C={};function F(j){if(j in C){return C[j]}var ag,Z=1;j=String(j);if(j.charAt(0)=="#"){ag=j}else{if(/^rgb/.test(j)){var p=M(j);var ag="#",ah;for(var m=0;m<3;m++){if(p[m].indexOf("%")!=-1){ah=Math.floor(c(p[m])*255)}else{ah=+p[m]}ag+=k[r(ah,0,255)]}Z=+p[3]}else{if(/^hsl/.test(j)){var p=M(j);ag=I(p);Z=p[3]}else{ag=b[j]||j}}}return C[j]={color:ag,alpha:Z}}var o={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var L={};function E(i){if(L[i]){return L[i]}var p=document.createElement("div");var m=p.style;try{m.font=i}catch(j){}return L[i]={style:m.fontStyle||o.style,variant:m.fontVariant||o.variant,weight:m.fontWeight||o.weight,size:m.fontSize||o.size,family:m.fontFamily||o.family}}function u(m,j){var i={};for(var ah in m){i[ah]=m[ah]}var ag=parseFloat(j.currentStyle.fontSize),Z=parseFloat(m.size);if(typeof m.size=="number"){i.size=m.size}else{if(m.size.indexOf("px")!=-1){i.size=Z}else{if(m.size.indexOf("em")!=-1){i.size=ag*Z}else{if(m.size.indexOf("%")!=-1){i.size=(ag/100)*Z}else{if(m.size.indexOf("pt")!=-1){i.size=Z/0.75}else{i.size=ag}}}}}i.size*=0.981;return i}function ac(i){return i.style+" "+i.variant+" "+i.weight+" "+i.size+"px "+i.family}var s={butt:"flat",round:"round"};function S(i){return s[i]||"square"}function D(i){this.m_=B();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=d*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=i;var m="width:"+i.clientWidth+"px;height:"+i.clientHeight+"px;overflow:hidden;position:absolute";var j=i.ownerDocument.createElement("div");j.style.cssText=m;i.appendChild(j);var p=j.cloneNode(false);p.style.backgroundColor="red";p.style.filter="alpha(opacity=0)";i.appendChild(p);this.element_=j;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var q=D.prototype;q.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};q.beginPath=function(){this.currentPath_=[]};q.moveTo=function(j,i){var m=V(this,j,i);this.currentPath_.push({type:"moveTo",x:m.x,y:m.y});this.currentX_=m.x;this.currentY_=m.y};q.lineTo=function(j,i){var m=V(this,j,i);this.currentPath_.push({type:"lineTo",x:m.x,y:m.y});this.currentX_=m.x;this.currentY_=m.y};q.bezierCurveTo=function(m,j,ak,aj,ai,ag){var i=V(this,ai,ag);var ah=V(this,m,j);var Z=V(this,ak,aj);K(this,ah,Z,i)};function K(i,Z,m,j){i.currentPath_.push({type:"bezierCurveTo",cp1x:Z.x,cp1y:Z.y,cp2x:m.x,cp2y:m.y,x:j.x,y:j.y});i.currentX_=j.x;i.currentY_=j.y}q.quadraticCurveTo=function(ai,m,j,i){var ah=V(this,ai,m);var ag=V(this,j,i);var aj={x:this.currentX_+2/3*(ah.x-this.currentX_),y:this.currentY_+2/3*(ah.y-this.currentY_)};var Z={x:aj.x+(ag.x-this.currentX_)/3,y:aj.y+(ag.y-this.currentY_)/3};K(this,aj,Z,ag)};q.arc=function(al,aj,ak,ag,j,m){ak*=d;var ap=m?"at":"wa";var am=al+A(ag)*ak-f;var ao=aj+l(ag)*ak-f;var i=al+A(j)*ak-f;var an=aj+l(j)*ak-f;if(am==i&&!m){am+=0.125}var Z=V(this,al,aj);var ai=V(this,am,ao);var ah=V(this,i,an);this.currentPath_.push({type:ap,x:Z.x,y:Z.y,radius:ak,xStart:ai.x,yStart:ai.y,xEnd:ah.x,yEnd:ah.y})};q.rect=function(m,j,i,p){this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath()};q.strokeRect=function(m,j,i,p){var Z=this.currentPath_;this.beginPath();this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath();this.stroke();this.currentPath_=Z};q.fillRect=function(m,j,i,p){var Z=this.currentPath_;this.beginPath();this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath();this.fill();this.currentPath_=Z};q.createLinearGradient=function(j,p,i,m){var Z=new U("gradient");Z.x0_=j;Z.y0_=p;Z.x1_=i;Z.y1_=m;return Z};q.createRadialGradient=function(p,ag,m,j,Z,i){var ah=new U("gradientradial");ah.x0_=p;ah.y0_=ag;ah.r0_=m;ah.x1_=j;ah.y1_=Z;ah.r1_=i;return ah};q.drawImage=function(aq,m){var aj,ah,al,ay,ao,am,at,aA;var ak=aq.runtimeStyle.width;var ap=aq.runtimeStyle.height;aq.runtimeStyle.width="auto";aq.runtimeStyle.height="auto";var ai=aq.width;var aw=aq.height;aq.runtimeStyle.width=ak;aq.runtimeStyle.height=ap;if(arguments.length==3){aj=arguments[1];ah=arguments[2];ao=am=0;at=al=ai;aA=ay=aw}else{if(arguments.length==5){aj=arguments[1];ah=arguments[2];al=arguments[3];ay=arguments[4];ao=am=0;at=ai;aA=aw}else{if(arguments.length==9){ao=arguments[1];am=arguments[2];at=arguments[3];aA=arguments[4];aj=arguments[5];ah=arguments[6];al=arguments[7];ay=arguments[8]}else{throw Error("Invalid number of arguments")}}}var az=V(this,aj,ah);var p=at/2;var j=aA/2;var ax=[];var i=10;var ag=10;ax.push(" ','","");this.element_.insertAdjacentHTML("BeforeEnd",ax.join(""))};q.stroke=function(ao){var Z=10;var ap=10;var ag=5000;var ai={x:null,y:null};var an={x:null,y:null};for(var aj=0;ajan.x){an.x=m.x}if(ai.y==null||m.yan.y){an.y=m.y}}}am.push(' ">');if(!ao){w(this,am)}else{G(this,am,ai,an)}am.push("");this.element_.insertAdjacentHTML("beforeEnd",am.join(""))}};function w(m,ag){var j=F(m.strokeStyle);var p=j.color;var Z=j.alpha*m.globalAlpha;var i=m.lineScale_*m.lineWidth;if(i<1){Z*=i}ag.push("')}function G(aq,ai,aK,ar){var aj=aq.fillStyle;var aB=aq.arcScaleX_;var aA=aq.arcScaleY_;var j=ar.x-aK.x;var p=ar.y-aK.y;if(aj instanceof U){var an=0;var aF={x:0,y:0};var ax=0;var am=1;if(aj.type_=="gradient"){var al=aj.x0_/aB;var m=aj.y0_/aA;var ak=aj.x1_/aB;var aM=aj.y1_/aA;var aJ=V(aq,al,m);var aI=V(aq,ak,aM);var ag=aI.x-aJ.x;var Z=aI.y-aJ.y;an=Math.atan2(ag,Z)*180/Math.PI;if(an<0){an+=360}if(an<0.000001){an=0}}else{var aJ=V(aq,aj.x0_,aj.y0_);aF={x:(aJ.x-aK.x)/j,y:(aJ.y-aK.y)/p};j/=aB*d;p/=aA*d;var aD=ab.max(j,p);ax=2*aj.r0_/aD;am=2*aj.r1_/aD-ax}var av=aj.colors_;av.sort(function(aN,i){return aN.offset-i.offset});var ap=av.length;var au=av[0].color;var at=av[ap-1].color;var az=av[0].alpha*aq.globalAlpha;var ay=av[ap-1].alpha*aq.globalAlpha;var aE=[];for(var aH=0;aH')}else{if(aj instanceof T){if(j&&p){var ah=-aK.x;var aC=-aK.y;ai.push("')}}else{var aL=F(aq.fillStyle);var aw=aL.color;var aG=aL.alpha*aq.globalAlpha;ai.push('')}}}q.fill=function(){this.stroke(true)};q.closePath=function(){this.currentPath_.push({type:"close"})};function V(j,Z,p){var i=j.m_;return{x:d*(Z*i[0][0]+p*i[1][0]+i[2][0])-f,y:d*(Z*i[0][1]+p*i[1][1]+i[2][1])-f}}q.save=function(){var i={};v(this,i);this.aStack_.push(i);this.mStack_.push(this.m_);this.m_=J(B(),this.m_)};q.restore=function(){if(this.aStack_.length){v(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function h(i){return isFinite(i[0][0])&&isFinite(i[0][1])&&isFinite(i[1][0])&&isFinite(i[1][1])&&isFinite(i[2][0])&&isFinite(i[2][1])}function aa(j,i,p){if(!h(i)){return}j.m_=i;if(p){var Z=i[0][0]*i[1][1]-i[0][1]*i[1][0];j.lineScale_=N(H(Z))}}q.translate=function(m,j){var i=[[1,0,0],[0,1,0],[m,j,1]];aa(this,J(i,this.m_),false)};q.rotate=function(j){var p=A(j);var m=l(j);var i=[[p,m,0],[-m,p,0],[0,0,1]];aa(this,J(i,this.m_),false)};q.scale=function(m,j){this.arcScaleX_*=m;this.arcScaleY_*=j;var i=[[m,0,0],[0,j,0],[0,0,1]];aa(this,J(i,this.m_),true)};q.transform=function(Z,p,ah,ag,j,i){var m=[[Z,p,0],[ah,ag,0],[j,i,1]];aa(this,J(m,this.m_),true)};q.setTransform=function(ag,Z,ai,ah,p,j){var i=[[ag,Z,0],[ai,ah,0],[p,j,1]];aa(this,i,true)};q.drawText_=function(am,ak,aj,ap,ai){var ao=this.m_,at=1000,j=0,ar=at,ah={x:0,y:0},ag=[];var i=u(E(this.font),this.element_);var p=ac(i);var au=this.element_.currentStyle;var Z=this.textAlign.toLowerCase();switch(Z){case"left":case"center":case"right":break;case"end":Z=au.direction=="ltr"?"right":"left";break;case"start":Z=au.direction=="rtl"?"right":"left";break;default:Z="left"}switch(this.textBaseline){case"hanging":case"top":ah.y=i.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":ah.y=-i.size/2.25;break}switch(Z){case"right":j=at;ar=0.05;break;case"center":j=ar=at/2;break}var aq=V(this,ak+ah.x,aj+ah.y);ag.push('');if(ai){w(this,ag)}else{G(this,ag,{x:-j,y:0},{x:ar,y:i.size})}var an=ao[0][0].toFixed(3)+","+ao[1][0].toFixed(3)+","+ao[0][1].toFixed(3)+","+ao[1][1].toFixed(3)+",0,0";var al=n(aq.x/d)+","+n(aq.y/d);ag.push('','','');this.element_.insertAdjacentHTML("beforeEnd",ag.join(""))};q.fillText=function(m,i,p,j){this.drawText_(m,i,p,j,false)};q.strokeText=function(m,i,p,j){this.drawText_(m,i,p,j,true)};q.measureText=function(m){if(!this.textMeasureEl_){var i='';this.element_.insertAdjacentHTML("beforeEnd",i);this.textMeasureEl_=this.element_.lastChild}var j=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(j.createTextNode(m));return{width:this.textMeasureEl_.offsetWidth}};q.clip=function(){};q.arcTo=function(){};q.createPattern=function(j,i){return new T(j,i)};function U(i){this.type_=i;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}U.prototype.addColorStop=function(j,i){i=F(i);this.colors_.push({offset:j,color:i.color,alpha:i.alpha})};function T(j,i){Q(j);switch(i){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=i;break;default:O("SYNTAX_ERR")}this.src_=j.src;this.width_=j.width;this.height_=j.height}function O(i){throw new P(i)}function Q(i){if(!i||i.nodeType!=1||i.tagName!="IMG"){O("TYPE_MISMATCH_ERR")}if(i.readyState!="complete"){O("INVALID_STATE_ERR")}}function P(i){this.code=this[i];this.message=i+": DOM Exception "+this.code}var X=P.prototype=new Error;X.INDEX_SIZE_ERR=1;X.DOMSTRING_SIZE_ERR=2;X.HIERARCHY_REQUEST_ERR=3;X.WRONG_DOCUMENT_ERR=4;X.INVALID_CHARACTER_ERR=5;X.NO_DATA_ALLOWED_ERR=6;X.NO_MODIFICATION_ALLOWED_ERR=7;X.NOT_FOUND_ERR=8;X.NOT_SUPPORTED_ERR=9;X.INUSE_ATTRIBUTE_ERR=10;X.INVALID_STATE_ERR=11;X.SYNTAX_ERR=12;X.INVALID_MODIFICATION_ERR=13;X.NAMESPACE_ERR=14;X.INVALID_ACCESS_ERR=15;X.VALIDATION_ERR=16;X.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=e;CanvasRenderingContext2D=D;CanvasGradient=U;CanvasPattern=T;DOMException=P})()};assets/plugins/less/less-1.5.0.min.js000064400000272116152510440710013232 0ustar00/*! * LESS - Leaner CSS v1.5.0 * http://lesscss.org * * Copyright (c) 2009-2013, Alexis Sellier * Licensed under the Apache v2 License. * * @licence */ function require(a){return window.less[a.split("/")[1]]}function log(a,b){"development"==less.env&&"undefined"!=typeof console&&less.logLevel>=b&&console.log("less: "+a)}function extractId(a){return a.replace(/^[a-z-]+:\/+?[^\/]+/,"").replace(/^\//,"").replace(/\.[a-zA-Z]+$/,"").replace(/[^\.\w-]+/g,"-").replace(/\./g,":")}function errorConsole(a,b){var c="{line} {content}",d=a.filename||b,e=[],f=(a.type||"Syntax")+"Error: "+(a.message||"There is an error in your .less file")+" in "+d+" ",g=function(a,b,d){void 0!==a.extract[b]&&e.push(c.replace(/\{line\}/,(parseInt(a.line,10)||0)+(b-1)).replace(/\{class\}/,d).replace(/\{content\}/,a.extract[b]))};a.extract?(g(a,0,""),g(a,1,"line"),g(a,2,""),f+="on line "+a.line+", column "+(a.column+1)+":\n"+e.join("\n")):a.stack&&(f+=a.stack),log(f,logLevel.errors)}function createCSS(a,b,c){var d=b.href||"",e="less:"+(b.title||extractId(d)),f=document.getElementById(e),g=!1,h=document.createElement("style");if(h.setAttribute("type","text/css"),b.media&&h.setAttribute("media",b.media),h.id=e,h.styleSheet)try{h.styleSheet.cssText=a}catch(i){throw new Error("Couldn't reassign styleSheet.cssText.")}else h.appendChild(document.createTextNode(a)),g=null!==f&&f.childNodes.length>0&&h.childNodes.length>0&&f.firstChild.nodeValue===h.firstChild.nodeValue;var j=document.getElementsByTagName("head")[0];if(null===f||g===!1){var k=b&&b.nextSibling||null;k?k.parentNode.insertBefore(h,k):j.appendChild(h)}if(f&&g===!1&&f.parentNode.removeChild(f),c&&cache){log("saving "+d+" to cache.",logLevel.info);try{cache.setItem(d,a),cache.setItem(d+":timestamp",c)}catch(i){log("failed to save",logLevel.errors)}}}function errorHTML(a,b){var c,d,e="less-error-message:"+extractId(b||""),f='
    • {content}
    • ',g=document.createElement("div"),h=[],i=a.filename||b,j=i.match(/([^\/]+(\?.*)?)$/)[1];g.id=e,g.className="less-error-message",d="

      "+(a.type||"Syntax")+"Error: "+(a.message||"There is an error in your .less file")+"

      "+'

      in '+j+" ";var k=function(a,b,c){void 0!==a.extract[b]&&h.push(f.replace(/\{line\}/,(parseInt(a.line,10)||0)+(b-1)).replace(/\{class\}/,c).replace(/\{content\}/,a.extract[b]))};a.extract?(k(a,0,""),k(a,1,"line"),k(a,2,""),d+="on line "+a.line+", column "+(a.column+1)+":

      "+"
        "+h.join("")+"
      "):a.stack&&(d+="
      "+a.stack.split("\n").slice(1).join("
      ")),g.innerHTML=d,createCSS([".less-error-message ul, .less-error-message li {","list-style-type: none;","margin-right: 15px;","padding: 4px 0;","margin: 0;","}",".less-error-message label {","font-size: 12px;","margin-right: 15px;","padding: 4px 0;","color: #cc7777;","}",".less-error-message pre {","color: #dd6666;","padding: 4px 0;","margin: 0;","display: inline-block;","}",".less-error-message pre.line {","color: #ff0000;","}",".less-error-message h3 {","font-size: 20px;","font-weight: bold;","padding: 15px 0 5px 0;","margin: 0;","}",".less-error-message a {","color: #10a","}",".less-error-message .error {","color: red;","font-weight: bold;","padding-bottom: 2px;","border-bottom: 1px dashed red;","}"].join("\n"),{title:"error-message"}),g.style.cssText=["font-family: Arial, sans-serif","border: 1px solid #e00","background-color: #eee","border-radius: 5px","-webkit-border-radius: 5px","-moz-border-radius: 5px","color: #e00","padding: 15px","margin-bottom: 15px"].join(";"),"development"==less.env&&(c=setInterval(function(){document.body&&(document.getElementById(e)?document.body.replaceChild(g,document.getElementById(e)):document.body.insertBefore(g,document.body.firstChild),clearInterval(c))},10))}function error(a,b){less.errorReporting&&"html"!==less.errorReporting?"console"===less.errorReporting?errorConsole(a,b):"function"==typeof less.errorReporting&&less.errorReporting("add",a,b):errorHTML(a,b)}function removeErrorHTML(a){var b=document.getElementById("less-error-message:"+extractId(a));b&&b.parentNode.removeChild(b)}function removeErrorConsole(){}function removeError(a){less.errorReporting&&"html"!==less.errorReporting?"console"===less.errorReporting?removeErrorConsole(a):"function"==typeof less.errorReporting&&less.errorReporting("remove",a):removeErrorHTML(a)}function loadStyles(a){for(var b,c=document.getElementsByTagName("style"),d=0;d0&&(h.splice(c-1,2),c-=2)}return g.hostPart=f[1],g.directories=h,g.path=f[1]+h.join("/"),g.fileUrl=g.path+(f[4]||""),g.url=g.fileUrl+(f[5]||""),g}function pathDiff(a,b){var c,d,e,f,g=extractUrlParts(a),h=extractUrlParts(b),i="";if(g.hostPart!==h.hostPart)return"";for(d=Math.max(h.directories.length,g.directories.length),c=0;d>c&&h.directories[c]===g.directories[c];c++);for(f=h.directories.slice(c),e=g.directories.slice(c),c=0;c=200&&b.status<300?c(b.responseText,b.getResponseHeader("Last-Modified")):"function"==typeof d&&d(b.status,a)}var f=getXMLHttpRequest(),g=isFileProtocol?less.fileAsync:less.async;"function"==typeof f.overrideMimeType&&f.overrideMimeType("text/css"),log("XHR: Getting '"+a+"'",logLevel.info),f.open("GET",a,g),f.setRequestHeader("Accept",b||"text/x-less, text/css; q=0.9, */*; q=0.5"),f.send(null),isFileProtocol&&!less.fileAsync?0===f.status||f.status>=200&&f.status<300?c(f.responseText):d(f.status,a):g?f.onreadystatechange=function(){4==f.readyState&&e(f,c,d)}:e(f,c,d)}function loadFile(a,b,c,d,e){b&&b.currentDirectory&&!/^([a-z-]+:)?\//.test(a)&&(a=b.currentDirectory+a);var f=extractUrlParts(a,window.location.href),g=f.url,h={currentDirectory:f.path,filename:g};if(b?(h.entryPath=b.entryPath,h.rootpath=b.rootpath,h.rootFilename=b.rootFilename,h.relativeUrls=b.relativeUrls):(h.entryPath=f.path,h.rootpath=less.rootpath||f.path,h.rootFilename=g,h.relativeUrls=d.relativeUrls),h.relativeUrls&&(h.rootpath=d.rootpath?extractUrlParts(d.rootpath+pathDiff(f.path,h.entryPath)).path:f.path),d.useFileCache&&fileCache[g])try{var i=fileCache[g];e&&(i+="\n"+e),c(null,i,g,h,{lastModified:new Date})}catch(j){c(j,null,g)}else doXHR(g,d.mime,function(a,b){fileCache[g]=a;try{c(null,a,g,h,{lastModified:b})}catch(d){c(d,null,g)}},function(a,b){c({type:"File",message:"'"+b+"' wasn't found ("+a+")"},null,g)})}function loadStyleSheet(a,b,c,d,e){var f=new less.tree.parseEnv(less);f.mime=a.type,e&&(f.useFileCache=!0),loadFile(a.href,null,function(e,g,h,i,j){if(j){j.remaining=d;var k=cache&&cache.getItem(h),l=cache&&cache.getItem(h+":timestamp");if(!c&&l&&j.lastModified&&new Date(j.lastModified).valueOf()===new Date(l).valueOf())return createCSS(k,a),j.local=!0,b(null,null,g,a,j,h),void 0}removeError(h),g?(f.currentFileInfo=i,new less.Parser(f).parse(g,function(c,d){if(c)return b(c,null,null,a);try{b(c,d,g,a,j,h)}catch(c){b(c,null,null,a)}})):b(e,null,null,a,j,h)},f,e)}function loadStyleSheets(a,b,c){for(var d=0;dv&&(u[q]=u[q].slice(p-v),v=p)}function e(a){var b=a.charCodeAt(0);return 32===b||10===b||9===b}function f(a){var b,c;if(a instanceof Function)return a.call(w.parsers);if("string"==typeof a)b=o.charAt(p)===a?a:null,c=1,d();else{if(d(),!(b=a.exec(u[q])))return null;c=b[0].length}return b?(g(c),"string"==typeof b?b:1===b.length?b[0]:b):void 0}function g(a){for(var b=p,c=q,d=p+u[q].length,f=p+=a;d>p&&e(o.charAt(p));)p++;return u[q]=u[q].slice(a+(p-f)),v=p,0===u[q].length&&q=0&&"\n"!==b.charAt(c);)e++;return"number"==typeof a&&(d=(b.slice(0,a).match(/\n/g)||"").length),{line:d,column:e}}function m(a,b,c){var d=c.currentFileInfo.filename;return"browser"!==less.mode&&"rhino"!==less.mode&&(d=require("path").resolve(d)),{lineNumber:l(a,b).line+1,fileName:d}}function n(a,b){var c=k(a,b),d=l(a.index,c),e=d.line,f=d.column,g=a.call&&l(a.call,c).line,h=c.split("\n");this.type=a.type||"Syntax",this.message=a.message,this.filename=a.filename||b.currentFileInfo.filename,this.index=a.index,this.line="number"==typeof e?e+1:null,this.callLine=g+1,this.callExtract=h[g],this.stack=a.stack,this.column=f,this.extract=[h[e-1],h[e],h[e+1]]}var o,p,q,r,s,t,u,v,w,x=a&&a.filename;a instanceof tree.parseEnv||(a=new tree.parseEnv(a));var y=this.imports={paths:a.paths||[],queue:[],files:a.files,contents:a.contents,mime:a.mime,error:null,push:function(b,c,d,e){var f=this;this.queue.push(b);var g=function(a,c,d){f.queue.splice(f.queue.indexOf(b),1);var g=d in f.files||d===x;f.files[d]=c,a&&!f.error&&(f.error=a),e(a,c,g,d)};less.Parser.importer?less.Parser.importer(b,c,g,a):less.Parser.fileLoader(b,c,function(b,e,f,h){if(b)return g(b),void 0;var i=new tree.parseEnv(a);i.currentFileInfo=h,i.processImports=!1,i.contents[f]=e,(c.reference||d.reference)&&(h.reference=!0),d.inline?g(null,e,f):new less.Parser(i).parse(e,function(a,b){g(a,b,f)})},a)}};return n.prototype=new Error,n.prototype.constructor=n,this.env=a=a||{},this.optimization="optimization"in this.env?this.env.optimization:1,w={imports:y,parse:function(b,c){var d,e,g,h=null;if(p=q=v=t=0,o=b.replace(/\r\n/g,"\n"),o=o.replace(/^\uFEFF/,""),w.imports.contents[a.currentFileInfo.filename]=o,u=function(b){for(var c,d,e,f,g=0,i=/(?:@\{[\w-]+\}|[^"'`\{\}\/\(\)\\])+/g,j=/\/\*(?:[^*]|\*+[^\/*])*\*+\/|\/\/.*/g,k=/"((?:[^"\\\r\n]|\\.)*)"|'((?:[^'\\\r\n]|\\.)*)'|`((?:[^`]|\\.)*)`/g,l=0,m=b[0],p=0;p0?"missing closing `}`":"missing opening `{`",filename:a.currentFileInfo.filename},a)),b.map(function(a){return a.join("")})}([[]]),h)return c(new n(h,a));try{d=new tree.Ruleset([],f(this.parsers.primary)),d.root=!0,d.firstRoot=!0}catch(i){return c(new n(i,a))}if(d.toCSS=function(b){return function(c,d){c=c||{};var e,f,g=new tree.evalEnv(c);"object"!=typeof d||Array.isArray(d)||(d=Object.keys(d).map(function(a){var b=d[a];return b instanceof tree.Value||(b instanceof tree.Expression||(b=new tree.Expression([b])),b=new tree.Value([b])),new tree.Rule("@"+a,b,!1,null,0)}),g.frames=[new tree.Ruleset(null,d)]);try{e=b.call(this,g),(new tree.joinSelectorVisitor).run(e),(new tree.processExtendsVisitor).run(e),new tree.toCSSVisitor({compress:Boolean(c.compress)}).run(e),c.sourceMap&&(e=new tree.sourceMapOutput({writeSourceMap:c.writeSourceMap,rootNode:e,contentsMap:w.imports.contents,sourceMapFilename:c.sourceMapFilename,outputFilename:c.sourceMapOutputFilename,sourceMapBasepath:c.sourceMapBasepath,sourceMapRootpath:c.sourceMapRootpath,outputSourceFiles:c.outputSourceFiles,sourceMapGenerator:c.sourceMapGenerator})),f=e.toCSS({compress:Boolean(c.compress),dumpLineNumbers:a.dumpLineNumbers,strictUnits:Boolean(c.strictUnits)})}catch(h){throw new n(h,a)}return c.cleancss&&"node"===less.mode?require("clean-css").process(f):c.compress?f.replace(/(^(\s)+)|((\s)+$)/g,""):f}}(d.eval),p57||43>b||47===b||44==b))return(a=f(/^([+-]?\d*\.?\d+)(%|[a-z]+)?/))?new tree.Dimension(a[1],a[2]):void 0},unicodeDescriptor:function(){var a;return(a=f(/^U\+[0-9a-fA-F?]+(\-[0-9a-fA-F?]+)?/))?new tree.UnicodeDescriptor(a[0]):void 0},javascript:function(){var b,c,d=p;return"~"===o.charAt(d)&&(d++,c=!0),"`"===o.charAt(d)?(void 0===a.javascriptEnabled||a.javascriptEnabled||i("You are using JavaScript, which has been disabled."),c&&f("~"),(b=f(/^`([^`]*)`/))?new tree.JavaScript(b[1],p,c):void 0):void 0}},variable:function(){var a;return"@"===o.charAt(p)&&(a=f(/^(@[\w-]+)\s*:/))?a[1]:void 0},extend:function(a){var b,c,d,e=p,g=[];if(f(a?/^&:extend\(/:/^:extend\(/)){do{for(d=null,b=[];;){if(d=f(/^(all)(?=\s*(\)|,))/))break;if(c=f(this.element),!c)break;b.push(c)}d=d&&d[1],g.push(new tree.Extend(new tree.Selector(b),d,e))}while(f(","));return h(/^\)/),a&&h(/^;/),g}},extendRule:function(){return this.extend(!0)},mixin:{call:function(){var d,e,g,i=[],k=p,l=o.charAt(p),m=!1;if("."===l||"#"===l){for(b();d=f(/^[#.](?:[\w-]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/);)i.push(new tree.Element(e,d,p,a.currentFileInfo)),e=f(">");return f("(")&&(g=this.mixin.args.call(this,!0).args,h(")")),g=g||[],f(this.important)&&(m=!0),i.length>0&&(f(";")||j("}"))?new tree.mixin.Call(i,g,k,a.currentFileInfo,m):(c(),void 0)}},args:function(a){for(var b,c,d,e,g,j,k=[],l=[],m=[],n={args:null,variadic:!1};;){if(a)j=f(this.expression);else{if(f(this.comments),"."===o.charAt(p)&&f(/^\.{3}/)){n.variadic=!0,f(";")&&!b&&(b=!0),(b?l:m).push({variadic:!0});break}j=f(this.entities.variable)||f(this.entities.literal)||f(this.entities.keyword)}if(!j)break;e=null,j.throwAwayComments&&j.throwAwayComments(),g=j;var q=null;if(a?1==j.value.length&&(q=j.value[0]):q=j,q&&q instanceof tree.Variable)if(f(":"))k.length>0&&(b&&i("Cannot mix ; and , as delimiter types"),c=!0),g=h(this.expression),e=d=q.name;else{if(!a&&f(/^\.{3}/)){n.variadic=!0,f(";")&&!b&&(b=!0),(b?l:m).push({name:j.name,variadic:!0});break}a||(d=e=q.name,g=null)}g&&k.push(g),m.push({name:e,value:g}),f(",")||(f(";")||b)&&(c&&i("Cannot mix ; and , as delimiter types"),b=!0,k.length>1&&(g=new tree.Value(k)),l.push({name:d,value:g}),d=null,k=[],c=!1)}return n.args=b?l:m,n},definition:function(){var a,d,e,g,i=[],k=!1;if(!("."!==o.charAt(p)&&"#"!==o.charAt(p)||j(/^[^{]*\}/))&&(b(),d=f(/^([#.](?:[\w-]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+)\s*\(/))){a=d[1];var l=this.mixin.args.call(this,!1);if(i=l.args,k=l.variadic,f(")")||(t=p,c()),f(this.comments),f(/^when/)&&(g=h(this.conditions,"expected condition")),e=f(this.block))return new tree.mixin.Definition(a,i,e,g,k);c()}}},entity:function(){return f(this.entities.literal)||f(this.entities.variable)||f(this.entities.url)||f(this.entities.call)||f(this.entities.keyword)||f(this.entities.javascript)||f(this.comment)},end:function(){return f(";")||j("}")},alpha:function(){var a;if(f(/^\(opacity=/i))return(a=f(/^\d+/)||f(this.entities.variable))?(h(")"),new tree.Alpha(a)):void 0},element:function(){var b,c,d;return c=f(this.combinator),b=f(/^(?:\d+\.\d+|\d+)%/)||f(/^(?:[.#]?|:*)(?:[\w-]|[^\x00-\x9f]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/)||f("*")||f("&")||f(this.attribute)||f(/^\([^()@]+\)/)||f(/^[\.#](?=@)/)||f(this.entities.variableCurly),b||f("(")&&(d=f(this.selector))&&f(")")&&(b=new tree.Paren(d)),b?new tree.Element(c,b,p,a.currentFileInfo):void 0},combinator:function(){var a=o.charAt(p);if(">"===a||"+"===a||"~"===a||"|"===a){for(p++;o.charAt(p).match(/\s/);)p++;return new tree.Combinator(a)}return o.charAt(p-1).match(/\s/)?new tree.Combinator(" "):new tree.Combinator(null)},lessSelector:function(){return this.selector(!0)},selector:function(b){for(var c,d,e,g,j,k=[],l=[];(b&&(e=f(this.extend))||b&&(g=f(/^when/))||(c=f(this.element)))&&(g?j=h(this.conditions,"expected condition"):j?i("CSS guard can only be used at the end of selector"):e?l.push.apply(l,e):(l.length&&i("Extend can only be used at the end of selector"),d=o.charAt(p),k.push(c),c=null),"{"!==d&&"}"!==d&&";"!==d&&","!==d&&")"!==d););return k.length>0?new tree.Selector(k,l,j,p,a.currentFileInfo):(l.length&&i("Extend must be used to extend a selector, it cannot be used on its own"),void 0)},attribute:function(){var a,b,c;if(f("["))return(a=f(this.entities.variableCurly))||(a=h(/^(?:[_A-Za-z0-9-\*]*\|)?(?:[_A-Za-z0-9-]|\\.)+/)),(c=f(/^[|~*$^]?=/))&&(b=f(this.entities.quoted)||f(/^[0-9]+%/)||f(/^[\w-]+/)||f(this.entities.variableCurly)),h("]"),new tree.Attribute(a,c,b)},block:function(){var a;return f("{")&&(a=f(this.primary))&&f("}")?a:void 0},ruleset:function(){var d,e,g,h=[];for(b(),a.dumpLineNumbers&&(g=m(p,o,a));(d=f(this.lessSelector))&&(h.push(d),f(this.comments),f(","));)d.condition&&i("Guards are only currently allowed on a single selector."),f(this.comments);if(h.length>0&&(e=f(this.block))){var j=new tree.Ruleset(h,e,a.strictImports);return a.dumpLineNumbers&&(j.debugInfo=g),j}t=p,c()},rule:function(d){var e,g,h,i=o.charAt(p),j=!1;if(b(),"."!==i&&"#"!==i&&"&"!==i&&(e=f(this.variable)||f(this.ruleProperty))){if(g=d||!a.compress&&"@"!==e.charAt(0)?f(this.anonymousValue)||f(this.value):f(this.value)||f(this.anonymousValue),h=f(this.important),"+"===e[e.length-1]&&(j=!0,e=e.substr(0,e.length-1)),g&&f(this.end))return new tree.Rule(e,g,h,j,s,a.currentFileInfo);if(t=p,c(),g&&!d)return this.rule(!0)}},anonymousValue:function(){var a;return(a=/^([^@+\/'"*`(;{}-]*);/.exec(u[q]))?(p+=a[0].length-1,new tree.Anonymous(a[1])):void 0},"import":function(){var d,e,g=p;b();var h=f(/^@import?\s+/),i=(h?f(this.importOptions):null)||{};return h&&(d=f(this.entities.quoted)||f(this.entities.url))&&(e=f(this.mediaFeatures),f(";"))?(e=e&&new tree.Value(e),new tree.Import(d,e,i,g,a.currentFileInfo)):(c(),void 0)},importOptions:function(){var a,b,c,d={};if(!f("("))return null;do if(a=f(this.importOption)){switch(b=a,c=!0,b){case"css":b="less",c=!1;break;case"once":b="multiple",c=!1}if(d[b]=c,!f(","))break}while(a);return h(")"),d},importOption:function(){var a=f(/^(less|css|multiple|once|inline|reference)/);return a?a[1]:void 0},mediaFeature:function(){var b,c,d=[];do if(b=f(this.entities.keyword)||f(this.entities.variable))d.push(b);else if(f("(")){if(c=f(this.property),b=f(this.value),!f(")"))return null;if(c&&b)d.push(new tree.Paren(new tree.Rule(c,b,null,null,p,a.currentFileInfo,!0)));else{if(!b)return null;d.push(new tree.Paren(b))}}while(b);return d.length>0?new tree.Expression(d):void 0},mediaFeatures:function(){var a,b=[];do if(a=f(this.mediaFeature)){if(b.push(a),!f(","))break}else if((a=f(this.entities.variable))&&(b.push(a),!f(",")))break;while(a);return b.length>0?b:null},media:function(){var b,c,d,e;return a.dumpLineNumbers&&(e=m(p,o,a)),f(/^@media/)&&(b=f(this.mediaFeatures),c=f(this.block))?(d=new tree.Media(c,b,p,a.currentFileInfo),a.dumpLineNumbers&&(d.debugInfo=e),d):void 0},directive:function(){var d,e,g,h,i,j,k,l;if("@"===o.charAt(p)){if(e=f(this["import"])||f(this.media))return e;if(b(),d=f(/^@[a-z-]+/)){switch(h=d,"-"==d.charAt(1)&&d.indexOf("-",2)>0&&(h="@"+d.slice(d.indexOf("-",2)+1)),h){case"@font-face":i=!0;break;case"@viewport":case"@top-left":case"@top-left-corner":case"@top-center":case"@top-right":case"@top-right-corner":case"@bottom-left":case"@bottom-left-corner":case"@bottom-center":case"@bottom-right":case"@bottom-right-corner":case"@left-top":case"@left-middle":case"@left-bottom":case"@right-top":case"@right-middle":case"@right-bottom":i=!0;break;case"@host":case"@page":case"@document":case"@supports":case"@keyframes":i=!0,j=!0;break;case"@namespace":k=!0}if(j&&(l=(f(/^[^{]+/)||"").trim(),l&&(d+=" "+l)),i){if(g=f(this.block))return new tree.Directive(d,g,p,a.currentFileInfo)}else if((e=k?f(this.expression):f(this.entity))&&f(";")){var n=new tree.Directive(d,e,p,a.currentFileInfo);return a.dumpLineNumbers&&(n.debugInfo=m(p,o,a)),n}c()}}},value:function(){for(var a,b=[];(a=f(this.expression))&&(b.push(a),f(",")););return b.length>0?new tree.Value(b):void 0},important:function(){return"!"===o.charAt(p)?f(/^! *important/):void 0},sub:function(){var a,b;return f("(")&&(a=f(this.addition))?(b=new tree.Expression([a]),h(")"),b.parens=!0,b):void 0},multiplication:function(){var a,b,c,d,g;if(a=f(this.operand)){for(g=e(o.charAt(p-1));!j(/^\/[*\/]/)&&(c=f("/")||f("*"))&&(b=f(this.operand));)a.parensInOp=!0,b.parensInOp=!0,d=new tree.Operation(c,[d||a,b],g),g=e(o.charAt(p-1));return d||a}},addition:function(){var a,b,c,d,g;if(a=f(this.multiplication)){for(g=e(o.charAt(p-1));(c=f(/^[-+]\s+/)||!g&&(f("+")||f("-")))&&(b=f(this.multiplication));)a.parensInOp=!0,b.parensInOp=!0,d=new tree.Operation(c,[d||a,b],g),g=e(o.charAt(p-1));return d||a}},conditions:function(){var a,b,c,d=p;if(a=f(this.condition)){for(;j(/^,\s*(not\s*)?\(/)&&f(",")&&(b=f(this.condition));)c=new tree.Condition("or",c||a,b,d);return c||a}},condition:function(){var a,b,c,d,e=p,g=!1;return f(/^not/)&&(g=!0),h("("),(a=f(this.addition)||f(this.entities.keyword)||f(this.entities.quoted))?((d=f(/^(?:>=|<=|=<|[<=>])/))?(b=f(this.addition)||f(this.entities.keyword)||f(this.entities.quoted))?c=new tree.Condition(d,a,b,e,g):i("expected expression"):c=new tree.Condition("=",a,new tree.Keyword("true"),e,g),h(")"),f(/^and/)?new tree.Condition("and",c,f(this.condition)):c):void 0},operand:function(){var a,b=o.charAt(p+1);"-"!==o.charAt(p)||"@"!==b&&"("!==b||(a=f("-"));var c=f(this.sub)||f(this.entities.dimension)||f(this.entities.color)||f(this.entities.variable)||f(this.entities.call);return a&&(c.parensInOp=!0,c=new tree.Negative(c)),c},expression:function(){for(var a,b,c=[];a=f(this.addition)||f(this.entity);)c.push(a),!j(/^\/[\/*]/)&&(b=f("/"))&&c.push(new tree.Anonymous(b));return c.length>0?new tree.Expression(c):void 0},property:function(){var a;return(a=f(/^(\*?-?[_a-zA-Z0-9-]+)\s*:/))?a[1]:void 0},ruleProperty:function(){var a;return(a=f(/^(\*?-?[_a-zA-Z0-9-]+)\s*(\+?)\s*:/))?a[1]+(a[2]||""):void 0}}}},function(a){function b(b){return a.functions.hsla(b.h,b.s,b.l,b.a)}function c(b,c){return b instanceof a.Dimension&&b.unit.is("%")?parseFloat(b.value*c/100):d(b)}function d(b){if(b instanceof a.Dimension)return parseFloat(b.unit.is("%")?b.value/100:b.value);if("number"==typeof b)return b;throw{error:"RuntimeError",message:"color functions take numbers as parameters"}}function e(a){return Math.min(1,Math.max(0,a))}a.functions={rgb:function(a,b,c){return this.rgba(a,b,c,1)},rgba:function(b,e,f,g){var h=[b,e,f].map(function(a){return c(a,256)});return g=d(g),new a.Color(h,g)},hsl:function(a,b,c){return this.hsla(a,b,c,1)},hsla:function(a,b,c,f){function g(a){return a=0>a?a+1:a>1?a-1:a,1>6*a?i+6*(h-i)*a:1>2*a?h:2>3*a?i+6*(h-i)*(2/3-a):i}a=d(a)%360/360,b=e(d(b)),c=e(d(c)),f=e(d(f));var h=.5>=c?c*(b+1):c+b-c*b,i=2*c-h;return this.rgba(255*g(a+1/3),255*g(a),255*g(a-1/3),f)},hsv:function(a,b,c){return this.hsva(a,b,c,1)},hsva:function(a,b,c,e){a=360*(d(a)%360/360),b=d(b),c=d(c),e=d(e);var f,g;f=Math.floor(a/60%6),g=a/60-f;var h=[c,c*(1-b),c*(1-g*b),c*(1-(1-g)*b)],i=[[0,3,1],[2,0,1],[1,0,3],[1,2,0],[3,1,0],[0,1,2]];return this.rgba(255*h[i[f][0]],255*h[i[f][1]],255*h[i[f][2]],e)},hue:function(b){return new a.Dimension(Math.round(b.toHSL().h))},saturation:function(b){return new a.Dimension(Math.round(100*b.toHSL().s),"%")},lightness:function(b){return new a.Dimension(Math.round(100*b.toHSL().l),"%")},hsvhue:function(b){return new a.Dimension(Math.round(b.toHSV().h))},hsvsaturation:function(b){return new a.Dimension(Math.round(100*b.toHSV().s),"%")},hsvvalue:function(b){return new a.Dimension(Math.round(100*b.toHSV().v),"%")},red:function(b){return new a.Dimension(b.rgb[0])},green:function(b){return new a.Dimension(b.rgb[1])},blue:function(b){return new a.Dimension(b.rgb[2])},alpha:function(b){return new a.Dimension(b.toHSL().a)},luma:function(b){return new a.Dimension(Math.round(100*b.luma()*b.alpha),"%")},saturate:function(a,c){if(!a.rgb)return null;var d=a.toHSL();return d.s+=c.value/100,d.s=e(d.s),b(d)},desaturate:function(a,c){var d=a.toHSL();return d.s-=c.value/100,d.s=e(d.s),b(d)},lighten:function(a,c){var d=a.toHSL();return d.l+=c.value/100,d.l=e(d.l),b(d)},darken:function(a,c){var d=a.toHSL();return d.l-=c.value/100,d.l=e(d.l),b(d)},fadein:function(a,c){var d=a.toHSL();return d.a+=c.value/100,d.a=e(d.a),b(d)},fadeout:function(a,c){var d=a.toHSL();return d.a-=c.value/100,d.a=e(d.a),b(d)},fade:function(a,c){var d=a.toHSL();return d.a=c.value/100,d.a=e(d.a),b(d)},spin:function(a,c){var d=a.toHSL(),e=(d.h+c.value)%360;return d.h=0>e?360+e:e,b(d)},mix:function(b,c,d){d||(d=new a.Dimension(50));var e=d.value/100,f=2*e-1,g=b.toHSL().a-c.toHSL().a,h=((-1==f*g?f:(f+g)/(1+f*g))+1)/2,i=1-h,j=[b.rgb[0]*h+c.rgb[0]*i,b.rgb[1]*h+c.rgb[1]*i,b.rgb[2]*h+c.rgb[2]*i],k=b.alpha*e+c.alpha*(1-e);return new a.Color(j,k)},greyscale:function(b){return this.desaturate(b,new a.Dimension(100))},contrast:function(a,b,c,e){if(!a.rgb)return null;if("undefined"==typeof c&&(c=this.rgba(255,255,255,1)),"undefined"==typeof b&&(b=this.rgba(0,0,0,1)),b.luma()>c.luma()){var f=c;c=b,b=f}return e="undefined"==typeof e?.43:d(e),a.luma()*a.alphah.value)&&(j[e]=f)):(k[i]=j.length,j.push(f))):j.push(f);return 1==j.length?j[0]:(c=j.map(function(a){return a.toCSS(this.env)}).join(this.env.compress?",":", "),new a.Anonymous((b?"min":"max")+"("+c+")"))},min:function(){return this._minmax(!0,arguments)},max:function(){return this._minmax(!1,arguments)},argb:function(b){return new a.Anonymous(b.toARGB())},percentage:function(b){return new a.Dimension(100*b.value,"%")},color:function(b){if(b instanceof a.Quoted){var c,d=b.value;if(c=a.Color.fromKeyword(d))return c;if(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})/.test(d))return new a.Color(d.slice(1));throw{type:"Argument",message:"argument must be a color keyword or 3/6 digit hex e.g. #FFF"}}throw{type:"Argument",message:"argument must be a string"}},iscolor:function(b){return this._isa(b,a.Color)},isnumber:function(b){return this._isa(b,a.Dimension)},isstring:function(b){return this._isa(b,a.Quoted)},iskeyword:function(b){return this._isa(b,a.Keyword)},isurl:function(b){return this._isa(b,a.URL) },ispixel:function(a){return this.isunit(a,"px")},ispercentage:function(a){return this.isunit(a,"%")},isem:function(a){return this.isunit(a,"em")},isunit:function(b,c){return b instanceof a.Dimension&&b.unit.is(c.value||c)?a.True:a.False},_isa:function(b,c){return b instanceof c?a.True:a.False},multiply:function(a,b){var c=a.rgb[0]*b.rgb[0]/255,d=a.rgb[1]*b.rgb[1]/255,e=a.rgb[2]*b.rgb[2]/255;return this.rgb(c,d,e)},screen:function(a,b){var c=255-(255-a.rgb[0])*(255-b.rgb[0])/255,d=255-(255-a.rgb[1])*(255-b.rgb[1])/255,e=255-(255-a.rgb[2])*(255-b.rgb[2])/255;return this.rgb(c,d,e)},overlay:function(a,b){var c=a.rgb[0]<128?2*a.rgb[0]*b.rgb[0]/255:255-2*(255-a.rgb[0])*(255-b.rgb[0])/255,d=a.rgb[1]<128?2*a.rgb[1]*b.rgb[1]/255:255-2*(255-a.rgb[1])*(255-b.rgb[1])/255,e=a.rgb[2]<128?2*a.rgb[2]*b.rgb[2]/255:255-2*(255-a.rgb[2])*(255-b.rgb[2])/255;return this.rgb(c,d,e)},softlight:function(a,b){var c=b.rgb[0]*a.rgb[0]/255,d=c+a.rgb[0]*(255-(255-a.rgb[0])*(255-b.rgb[0])/255-c)/255;c=b.rgb[1]*a.rgb[1]/255;var e=c+a.rgb[1]*(255-(255-a.rgb[1])*(255-b.rgb[1])/255-c)/255;c=b.rgb[2]*a.rgb[2]/255;var f=c+a.rgb[2]*(255-(255-a.rgb[2])*(255-b.rgb[2])/255-c)/255;return this.rgb(d,e,f)},hardlight:function(a,b){var c=b.rgb[0]<128?2*b.rgb[0]*a.rgb[0]/255:255-2*(255-b.rgb[0])*(255-a.rgb[0])/255,d=b.rgb[1]<128?2*b.rgb[1]*a.rgb[1]/255:255-2*(255-b.rgb[1])*(255-a.rgb[1])/255,e=b.rgb[2]<128?2*b.rgb[2]*a.rgb[2]/255:255-2*(255-b.rgb[2])*(255-a.rgb[2])/255;return this.rgb(c,d,e)},difference:function(a,b){var c=Math.abs(a.rgb[0]-b.rgb[0]),d=Math.abs(a.rgb[1]-b.rgb[1]),e=Math.abs(a.rgb[2]-b.rgb[2]);return this.rgb(c,d,e)},exclusion:function(a,b){var c=a.rgb[0]+b.rgb[0]*(255-a.rgb[0]-a.rgb[0])/255,d=a.rgb[1]+b.rgb[1]*(255-a.rgb[1]-a.rgb[1])/255,e=a.rgb[2]+b.rgb[2]*(255-a.rgb[2]-a.rgb[2])/255;return this.rgb(c,d,e)},average:function(a,b){var c=(a.rgb[0]+b.rgb[0])/2,d=(a.rgb[1]+b.rgb[1])/2,e=(a.rgb[2]+b.rgb[2])/2;return this.rgb(c,d,e)},negation:function(a,b){var c=255-Math.abs(255-b.rgb[0]-a.rgb[0]),d=255-Math.abs(255-b.rgb[1]-a.rgb[1]),e=255-Math.abs(255-b.rgb[2]-a.rgb[2]);return this.rgb(c,d,e)},tint:function(a,b){return this.mix(this.rgb(255,255,255),a,b)},shade:function(a,b){return this.mix(this.rgb(0,0,0),a,b)},extract:function(a,b){return b=b.value-1,Array.isArray(a.value)?a.value[b]:Array(a)[b]},length:function(b){var c=Array.isArray(b.value)?b.value.length:1;return new a.Dimension(c)},"data-uri":function(b,c){if("undefined"!=typeof window)return new a.URL(c||b,this.currentFileInfo).eval(this.env);var d=b.value,e=c&&c.value,f=require("fs"),g=require("path"),h=!1;if(arguments.length<2&&(e=d),this.env.isPathRelative(e)&&(e=this.currentFileInfo.relativeUrls?g.join(this.currentFileInfo.currentDirectory,e):g.join(this.currentFileInfo.entryPath,e)),arguments.length<2){var i;try{i=require("mime")}catch(j){i=a._mime}d=i.lookup(e);var k=i.charsets.lookup(d);h=["US-ASCII","UTF-8"].indexOf(k)<0,h&&(d+=";base64")}else h=/;base64$/.test(d);var l=f.readFileSync(e),m=32,n=parseInt(l.length/1024,10);if(n>=m&&this.env.ieCompat!==!1)return this.env.silent||console.warn("Skipped data-uri embedding of %s because its size (%dKB) exceeds IE8-safe %dKB!",e,n,m),new a.URL(c||b,this.currentFileInfo).eval(this.env);l=h?l.toString("base64"):encodeURIComponent(l);var o="'data:"+d+","+l+"'";return new a.URL(new a.Anonymous(o))},"svg-gradient":function(b){function c(){throw{type:"Argument",message:"svg-gradient expects direction, start_color [start_position], [color position,]..., end_color [end_position]"}}arguments.length<3&&c();var d,e,f,g,h,i,j,k=Array.prototype.slice.call(arguments,1),l="linear",m='x="0" y="0" width="1" height="1"',n=!0,o={compress:!1},p=b.toCSS(o);switch(p){case"to bottom":d='x1="0%" y1="0%" x2="0%" y2="100%"';break;case"to right":d='x1="0%" y1="0%" x2="100%" y2="0%"';break;case"to bottom right":d='x1="0%" y1="0%" x2="100%" y2="100%"';break;case"to top right":d='x1="0%" y1="100%" x2="100%" y2="0%"';break;case"ellipse":case"ellipse at center":l="radial",d='cx="50%" cy="50%" r="75%"',m='x="-50" y="-50" width="101" height="101"';break;default:throw{type:"Argument",message:"svg-gradient direction must be 'to bottom', 'to right', 'to bottom right', 'to top right' or 'ellipse at center'"}}for(e='<'+l+'Gradient id="gradient" gradientUnits="userSpaceOnUse" '+d+">",f=0;fj?' stop-opacity="'+j+'"':"")+"/>";if(e+=""+"',n)try{e=new Buffer(e).toString("base64")}catch(q){n=!1}return e="'data:image/svg+xml"+(n?";base64":"")+","+e+"'",new a.URL(new a.Anonymous(e))}},a._mime={_types:{".htm":"text/html",".html":"text/html",".gif":"image/gif",".jpg":"image/jpeg",".jpeg":"image/jpeg",".png":"image/png"},lookup:function(b){var c=require("path").extname(b),d=a._mime._types[c];if(void 0===d)throw new Error('Optional dependency "mime" is required for '+c);return d},charsets:{lookup:function(a){return a&&/^text\//.test(a)?"UTF-8":""}}};for(var f=[{name:"ceil"},{name:"floor"},{name:"sqrt"},{name:"abs"},{name:"tan",unit:""},{name:"sin",unit:""},{name:"cos",unit:""},{name:"atan",unit:"rad"},{name:"asin",unit:"rad"},{name:"acos",unit:"rad"}],g=function(a,b){return function(c){return null!=b&&(c=c.unify()),this._math(Math[a],b,c)}},h=0;h1?"["+a.value.map(function(a){return a.toCSS(!1)}).join(", ")+"]":a.toCSS(!1)},a.toCSS=function(a){var b=[];return this.genCSS(a,{add:function(a){b.push(a)},isEmpty:function(){return 0===b.length}}),b.join("")},a.outputRuleset=function(a,b,c){b.add(a.compress?"{":" {\n"),a.tabLevel=(a.tabLevel||0)+1;for(var d=a.compress?"":Array(a.tabLevel+1).join(" "),e=a.compress?"":Array(a.tabLevel).join(" "),f=0;fb?-1:1},genCSS:function(a,b){b.add(this.value,this.currentFileInfo,this.index,this.mapLines)},toCSS:a.toCSS}}(require("../tree")),function(a){a.Assignment=function(a,b){this.key=a,this.value=b},a.Assignment.prototype={type:"Assignment",accept:function(a){this.value=a.visit(this.value)},eval:function(b){return this.value.eval?new a.Assignment(this.key,this.value.eval(b)):this},genCSS:function(a,b){b.add(this.key+"="),this.value.genCSS?this.value.genCSS(a,b):b.add(this.value)},toCSS:a.toCSS}}(require("../tree")),function(a){a.Call=function(a,b,c,d){this.name=a,this.args=b,this.index=c,this.currentFileInfo=d},a.Call.prototype={type:"Call",accept:function(a){this.args=a.visit(this.args)},eval:function(b){var c,d,e=this.args.map(function(a){return a.eval(b)}),f=this.name.toLowerCase();if(f in a.functions)try{if(d=new a.functionCall(b,this.currentFileInfo),c=d[f].apply(d,e),null!=c)return c}catch(g){throw{type:g.type||"Runtime",message:"error evaluating function `"+this.name+"`"+(g.message?": "+g.message:""),index:this.index,filename:this.currentFileInfo.filename}}return new a.Call(this.name,e,this.index,this.currentFileInfo)},genCSS:function(a,b){b.add(this.name+"(",this.currentFileInfo,this.index);for(var c=0;cf;f++)e[f]=a.operate(b,c,this.rgb[f],d.rgb[f]);return new a.Color(e,this.alpha+d.alpha)},toRGB:function(){return"#"+this.rgb.map(function(a){return a=Math.round(a),a=(a>255?255:0>a?0:a).toString(16),1===a.length?"0"+a:a}).join("")},toHSL:function(){var a,b,c=this.rgb[0]/255,d=this.rgb[1]/255,e=this.rgb[2]/255,f=this.alpha,g=Math.max(c,d,e),h=Math.min(c,d,e),i=(g+h)/2,j=g-h;if(g===h)a=b=0;else{switch(b=i>.5?j/(2-g-h):j/(g+h),g){case c:a=(d-e)/j+(e>d?6:0);break;case d:a=(e-c)/j+2;break;case e:a=(c-d)/j+4}a/=6}return{h:360*a,s:b,l:i,a:f}},toHSV:function(){var a,b,c=this.rgb[0]/255,d=this.rgb[1]/255,e=this.rgb[2]/255,f=this.alpha,g=Math.max(c,d,e),h=Math.min(c,d,e),i=g,j=g-h;if(b=0===g?0:j/g,g===h)a=0;else{switch(g){case c:a=(d-e)/j+(e>d?6:0);break;case d:a=(e-c)/j+2;break;case e:a=(c-d)/j+4}a/=6}return{h:360*a,s:b,v:i,a:f}},toARGB:function(){var a=[Math.round(255*this.alpha)].concat(this.rgb);return"#"+a.map(function(a){return a=Math.round(a),a=(a>255?255:0>a?0:a).toString(16),1===a.length?"0"+a:a}).join("")},compare:function(a){return a.rgb?a.rgb[0]===this.rgb[0]&&a.rgb[1]===this.rgb[1]&&a.rgb[2]===this.rgb[2]&&a.alpha===this.alpha?0:-1:-1}},a.Color.fromKeyword=function(c){if(a.colors.hasOwnProperty(c))return new a.Color(a.colors[c].slice(1));if(c===b){var d=new a.Color([0,0,0],0);return d.isTransparentKeyword=!0,d}}}(require("../tree")),function(a){a.Comment=function(a,b,c,d){this.value=a,this.silent=!!b,this.currentFileInfo=d},a.Comment.prototype={type:"Comment",genCSS:function(b,c){this.debugInfo&&c.add(a.debugInfo(b,this),this.currentFileInfo,this.index),c.add(this.value.trim())},toCSS:a.toCSS,isSilent:function(a){var b=this.currentFileInfo&&this.currentFileInfo.reference&&!this.isReferenced,c=a.compress&&!this.value.match(/^\/\*!/);return this.silent||b||c},eval:function(){return this},markReferenced:function(){this.isReferenced=!0}}}(require("../tree")),function(a){a.Condition=function(a,b,c,d,e){this.op=a.trim(),this.lvalue=b,this.rvalue=c,this.index=d,this.negate=e},a.Condition.prototype={type:"Condition",accept:function(a){this.lvalue=a.visit(this.lvalue),this.rvalue=a.visit(this.rvalue)},eval:function(a){var b,c=this.lvalue.eval(a),d=this.rvalue.eval(a),e=this.index;return b=function(a){switch(a){case"and":return c&&d;case"or":return c||d;default:if(c.compare)b=c.compare(d);else{if(!d.compare)throw{type:"Type",message:"Unable to perform comparison",index:e};b=d.compare(c)}switch(b){case-1:return"<"===a||"=<"===a||"<="===a;case 0:return"="===a||">="===a||"=<"===a||"<="===a;case 1:return">"===a||">="===a}}}(this.op),this.negate?!b:b}}}(require("../tree")),function(a){a.Dimension=function(b,c){this.value=parseFloat(b),this.unit=c&&c instanceof a.Unit?c:new a.Unit(c?[c]:void 0)},a.Dimension.prototype={type:"Dimension",accept:function(a){this.unit=a.visit(this.unit)},eval:function(){return this},toColor:function(){return new a.Color([this.value,this.value,this.value])},genCSS:function(a,b){if(a&&a.strictUnits&&!this.unit.isSingular())throw new Error("Multiple units in dimension. Correct the units or use the unit function. Bad unit: "+this.unit.toString());var c=this.value,d=String(c);if(0!==c&&1e-6>c&&c>-1e-6&&(d=c.toFixed(20).replace(/0+$/,"")),a&&a.compress){if(0===c&&this.unit.isLength())return b.add(d),void 0;c>0&&1>c&&(d=d.substr(1))}b.add(d),this.unit.genCSS(a,b)},toCSS:a.toCSS,operate:function(b,c,d){var e=a.operate(b,c,this.value,d.value),f=this.unit.clone();if("+"===c||"-"===c)if(0===f.numerator.length&&0===f.denominator.length)f.numerator=d.unit.numerator.slice(0),f.denominator=d.unit.denominator.slice(0);else if(0===d.unit.numerator.length&&0===f.denominator.length);else{if(d=d.convertTo(this.unit.usedUnits()),b.strictUnits&&d.unit.toString()!==f.toString())throw new Error("Incompatible units. Change the units or use the unit function. Bad units: '"+f.toString()+"' and '"+d.unit.toString()+"'.");e=a.operate(b,c,this.value,d.value)}else"*"===c?(f.numerator=f.numerator.concat(d.unit.numerator).sort(),f.denominator=f.denominator.concat(d.unit.denominator).sort(),f.cancel()):"/"===c&&(f.numerator=f.numerator.concat(d.unit.denominator).sort(),f.denominator=f.denominator.concat(d.unit.numerator).sort(),f.cancel());return new a.Dimension(e,f)},compare:function(b){if(b instanceof a.Dimension){var c=this.unify(),d=b.unify(),e=c.value,f=d.value;return f>e?-1:e>f?1:d.unit.isEmpty()||0===c.unit.compare(d.unit)?0:-1}return-1},unify:function(){return this.convertTo({length:"m",duration:"s",angle:"rad"})},convertTo:function(b){var c,d,e,f,g,h=this.value,i=this.unit.clone(),j={};if("string"==typeof b){for(c in a.UnitConversions)a.UnitConversions[c].hasOwnProperty(b)&&(j={},j[c]=b);b=j}g=function(a,b){return e.hasOwnProperty(a)?(b?h/=e[a]/e[f]:h*=e[a]/e[f],f):a};for(d in b)b.hasOwnProperty(d)&&(f=b[d],e=a.UnitConversions[d],i.map(g));return i.cancel(),new a.Dimension(h,i)}},a.UnitConversions={length:{m:1,cm:.01,mm:.001,"in":.0254,pt:.0254/72,pc:12*(.0254/72)},duration:{s:1,ms:.001},angle:{rad:1/(2*Math.PI),deg:1/360,grad:.0025,turn:1}},a.Unit=function(a,b,c){this.numerator=a?a.slice(0).sort():[],this.denominator=b?b.slice(0).sort():[],this.backupUnit=c},a.Unit.prototype={type:"Unit",clone:function(){return new a.Unit(this.numerator.slice(0),this.denominator.slice(0),this.backupUnit)},genCSS:function(a,b){this.numerator.length>=1?b.add(this.numerator[0]):this.denominator.length>=1?b.add(this.denominator[0]):a&&a.strictUnits||!this.backupUnit||b.add(this.backupUnit)},toCSS:a.toCSS,toString:function(){var a,b=this.numerator.join("*");for(a=0;a0)for(b=0;e>b;b++)this.numerator.push(a);else if(0>e)for(b=0;-e>b;b++)this.denominator.push(a)}0===this.numerator.length&&0===this.denominator.length&&c&&(this.backupUnit=c),this.numerator.sort(),this.denominator.sort()}}}(require("../tree")),function(a){a.Directive=function(b,c,d,e){this.name=b,Array.isArray(c)?(this.rules=[new a.Ruleset([],c)],this.rules[0].allowImports=!0):this.value=c,this.currentFileInfo=e},a.Directive.prototype={type:"Directive",accept:function(a){this.rules=a.visit(this.rules),this.value=a.visit(this.value)},genCSS:function(b,c){c.add(this.name,this.currentFileInfo,this.index),this.rules?a.outputRuleset(b,c,this.rules):(c.add(" "),this.value.genCSS(b,c),c.add(";"))},toCSS:a.toCSS,eval:function(b){var c=this;return this.rules&&(b.frames.unshift(this),c=new a.Directive(this.name,null,this.index,this.currentFileInfo),c.rules=[this.rules[0].eval(b)],c.rules[0].root=!0,b.frames.shift()),c},variable:function(b){return a.Ruleset.prototype.variable.call(this.rules[0],b)},find:function(){return a.Ruleset.prototype.find.apply(this.rules[0],arguments)},rulesets:function(){return a.Ruleset.prototype.rulesets.apply(this.rules[0])},markReferenced:function(){var a,b;if(this.isReferenced=!0,this.rules)for(b=this.rules[0].rules,a=0;a":" > ","|":"|"},_outputMapCompressed:{"":""," ":" ",":":" :","+":"+","~":"~",">":">","|":"|"},genCSS:function(a,b){b.add((a.compress?this._outputMapCompressed:this._outputMap)[this.value])},toCSS:a.toCSS}}(require("../tree")),function(a){a.Expression=function(a){this.value=a},a.Expression.prototype={type:"Expression",accept:function(a){this.value=a.visit(this.value)},eval:function(b){var c,d=this.parens&&!this.parensInOp,e=!1;return d&&b.inParenthesis(),this.value.length>1?c=new a.Expression(this.value.map(function(a){return a.eval(b)})):1===this.value.length?(this.value[0].parens&&!this.value[0].parensInOp&&(e=!0),c=this.value[0].eval(b)):c=this,d&&b.outOfParenthesis(),this.parens&&this.parensInOp&&!b.isMathOn()&&!e&&(c=new a.Paren(c)),c},genCSS:function(a,b){for(var c=0;c0&&c.length&&""===c[0].combinator.value&&(c[0].combinator.value=" "),d=d.concat(a[b].elements);this.selfSelectors=[{elements:d}]}}}(require("../tree")),function(a){a.Import=function(a,b,c,d,e){if(this.options=c,this.index=d,this.path=a,this.features=b,this.currentFileInfo=e,void 0!==this.options.less||this.options.inline)this.css=!this.options.less||this.options.inline;else{var f=this.getPath();f&&/css([\?;].*)?$/.test(f)&&(this.css=!0)}},a.Import.prototype={type:"Import",accept:function(a){this.features=a.visit(this.features),this.path=a.visit(this.path),this.options.inline||(this.root=a.visit(this.root))},genCSS:function(a,b){this.css&&(b.add("@import ",this.currentFileInfo,this.index),this.path.genCSS(a,b),this.features&&(b.add(" "),this.features.genCSS(a,b)),b.add(";"))},toCSS:a.toCSS,getPath:function(){if(this.path instanceof a.Quoted){var b=this.path.value;return void 0!==this.css||/(\.[a-z]*$)|([\?;].*)$/.test(b)?b:b+".less"}return this.path instanceof a.URL?this.path.value.value:null},evalForImport:function(b){return new a.Import(this.path.eval(b),this.features,this.options,this.index,this.currentFileInfo)},evalPath:function(b){var c=this.path.eval(b),d=this.currentFileInfo&&this.currentFileInfo.rootpath;if(!(c instanceof a.URL)){if(d){var e=c.value;e&&b.isPathRelative(e)&&(c.value=d+e)}c.value=b.normalizePath(c.value)}return c},eval:function(b){var c,d=this.features&&this.features.eval(b);if(this.skip)return[];if(this.options.inline){var e=new a.Anonymous(this.root,0,{filename:this.importedFilename},!0);return this.features?new a.Media([e],this.features.value):[e]}if(this.css){var f=new a.Import(this.evalPath(b),d,this.options,this.index);if(!f.css&&this.error)throw this.error;return f}return c=new a.Ruleset([],this.root.rules.slice(0)),c.evalImports(b),this.features?new a.Media(c.rules,this.features.value):c.rules}}}(require("../tree")),function(a){a.JavaScript=function(a,b,c){this.escaped=c,this.expression=a,this.index=b},a.JavaScript.prototype={type:"JavaScript",eval:function(b){var c,d=this,e={},f=this.expression.replace(/@\{([\w-]+)\}/g,function(c,e){return a.jsify(new a.Variable("@"+e,d.index).eval(b))});try{f=new Function("return ("+f+")")}catch(g){throw{message:"JavaScript evaluation error: "+g.message+" from `"+f+"`",index:this.index}}for(var h in b.frames[0].variables())e[h.slice(1)]={value:b.frames[0].variables()[h].value,toJS:function(){return this.value.eval(b).toCSS()}};try{c=f.call(e)}catch(g){throw{message:"JavaScript evaluation error: '"+g.name+": "+g.message+"'",index:this.index}}return"string"==typeof c?new a.Quoted('"'+c+'"',c,this.escaped,this.index):Array.isArray(c)?new a.Anonymous(c.join(", ")):new a.Anonymous(c)}}}(require("../tree")),function(a){a.Keyword=function(a){this.value=a},a.Keyword.prototype={type:"Keyword",eval:function(){return this},genCSS:function(a,b){b.add(this.value)},toCSS:a.toCSS,compare:function(b){return b instanceof a.Keyword?b.value===this.value?0:1:-1}},a.True=new a.Keyword("true"),a.False=new a.Keyword("false")}(require("../tree")),function(a){a.Media=function(b,c,d,e){this.index=d,this.currentFileInfo=e;var f=this.emptySelectors();this.features=new a.Value(c),this.rules=[new a.Ruleset(f,b)],this.rules[0].allowImports=!0},a.Media.prototype={type:"Media",accept:function(a){this.features=a.visit(this.features),this.rules=a.visit(this.rules)},genCSS:function(b,c){c.add("@media ",this.currentFileInfo,this.index),this.features.genCSS(b,c),a.outputRuleset(b,c,this.rules)},toCSS:a.toCSS,eval:function(b){b.mediaBlocks||(b.mediaBlocks=[],b.mediaPath=[]);var c=new a.Media([],[],this.index,this.currentFileInfo);this.debugInfo&&(this.rules[0].debugInfo=this.debugInfo,c.debugInfo=this.debugInfo);var d=!1;b.strictMath||(d=!0,b.strictMath=!0);try{c.features=this.features.eval(b)}finally{d&&(b.strictMath=!1)}return b.mediaPath.push(c),b.mediaBlocks.push(c),b.frames.unshift(this.rules[0]),c.rules=[this.rules[0].eval(b)],b.frames.shift(),b.mediaPath.pop(),0===b.mediaPath.length?c.evalTop(b):c.evalNested(b)},variable:function(b){return a.Ruleset.prototype.variable.call(this.rules[0],b)},find:function(){return a.Ruleset.prototype.find.apply(this.rules[0],arguments)},rulesets:function(){return a.Ruleset.prototype.rulesets.apply(this.rules[0])},emptySelectors:function(){var b=new a.Element("","&",this.index,this.currentFileInfo);return[new a.Selector([b],null,null,this.index,this.currentFileInfo)]},markReferenced:function(){var a,b=this.rules[0].rules;for(this.isReferenced=!0,a=0;a1){var d=this.emptySelectors();c=new a.Ruleset(d,b.mediaBlocks),c.multiMedia=!0}return delete b.mediaBlocks,delete b.mediaPath,c},evalNested:function(b){var c,d,e=b.mediaPath.concat([this]);for(c=0;c0;c--)b.splice(c,0,new a.Anonymous("and"));return new a.Expression(b)})),new a.Ruleset([],[])},permute:function(a){if(0===a.length)return[];if(1===a.length)return a[0];for(var b=[],c=this.permute(a.slice(1)),d=0;d0){for(j=!0,g=0;gthis.params.length)return!1}c=Math.min(d,this.arity);for(var e=0;c>e;e++)if(!this.params[e].name&&!this.params[e].variadic&&a[e].value.eval(b).toCSS()!=this.params[e].value.eval(b).toCSS())return!1;return!0}}}(require("../tree")),function(a){a.Negative=function(a){this.value=a},a.Negative.prototype={type:"Negative",accept:function(a){this.value=a.visit(this.value)},genCSS:function(a,b){b.add("-"),this.value.genCSS(a,b)},toCSS:a.toCSS,eval:function(b){return b.isMathOn()?new a.Operation("*",[new a.Dimension(-1),this.value]).eval(b):new a.Negative(this.value.eval(b))}}}(require("../tree")),function(a){a.Operation=function(a,b,c){this.op=a.trim(),this.operands=b,this.isSpaced=c},a.Operation.prototype={type:"Operation",accept:function(a){this.operands=a.visit(this.operands)},eval:function(b){var c,d=this.operands[0].eval(b),e=this.operands[1].eval(b);if(b.isMathOn()){if(d instanceof a.Dimension&&e instanceof a.Color){if("*"!==this.op&&"+"!==this.op)throw{type:"Operation",message:"Can't substract or divide a color from a number"};c=e,e=d,d=c}if(!d.operate)throw{type:"Operation",message:"Operation on an invalid type"};return d.operate(b,this.op,e)}return new a.Operation(this.op,[d,e],this.isSpaced)},genCSS:function(a,b){this.operands[0].genCSS(a,b),this.isSpaced&&b.add(" "),b.add(this.op),this.isSpaced&&b.add(" "),this.operands[1].genCSS(a,b)},toCSS:a.toCSS},a.operate=function(a,b,c,d){switch(b){case"+":return c+d;case"-":return c-d;case"*":return c*d;case"/":return c/d}}}(require("../tree")),function(a){a.Paren=function(a){this.value=a},a.Paren.prototype={type:"Paren",accept:function(a){this.value=a.visit(this.value)},genCSS:function(a,b){b.add("("),this.value.genCSS(a,b),b.add(")")},toCSS:a.toCSS,eval:function(b){return new a.Paren(this.value.eval(b))}}}(require("../tree")),function(a){a.Quoted=function(a,b,c,d,e){this.escaped=c,this.value=b||"",this.quote=a.charAt(0),this.index=d,this.currentFileInfo=e},a.Quoted.prototype={type:"Quoted",genCSS:function(a,b){this.escaped||b.add(this.quote,this.currentFileInfo,this.index),b.add(this.value),this.escaped||b.add(this.quote)},toCSS:a.toCSS,eval:function(b){var c=this,d=this.value.replace(/`([^`]+)`/g,function(d,e){return new a.JavaScript(e,c.index,!0).eval(b).value}).replace(/@\{([\w-]+)\}/g,function(d,e){var f=new a.Variable("@"+e,c.index,c.currentFileInfo).eval(b,!0);return f instanceof a.Quoted?f.value:f.toCSS()});return new a.Quoted(this.quote+d+this.quote,d,this.escaped,this.index,this.currentFileInfo)},compare:function(a){if(!a.toCSS)return-1;var b=this.toCSS(),c=a.toCSS();return b===c?0:c>b?-1:1}}}(require("../tree")),function(a){a.Rule=function(b,c,d,e,f,g,h){this.name=b,this.value=c instanceof a.Value?c:new a.Value([c]),this.important=d?" "+d.trim():"",this.merge=e,this.index=f,this.currentFileInfo=g,this.inline=h||!1,this.variable="@"===b.charAt(0)},a.Rule.prototype={type:"Rule",accept:function(a){this.value=a.visit(this.value)},genCSS:function(a,b){b.add(this.name+(a.compress?":":": "),this.currentFileInfo,this.index);try{this.value.genCSS(a,b)}catch(c){throw c.index=this.index,c.filename=this.currentFileInfo.filename,c}b.add(this.important+(this.inline||a.lastRule&&a.compress?"":";"),this.currentFileInfo,this.index)},toCSS:a.toCSS,eval:function(b){var c=!1;"font"!==this.name||b.strictMath||(c=!0,b.strictMath=!0);try{return new a.Rule(this.name,this.value.eval(b),this.important,this.merge,this.index,this.currentFileInfo,this.inline)}finally{c&&(b.strictMath=!1)}},makeImportant:function(){return new a.Rule(this.name,this.value,"!important",this.merge,this.index,this.currentFileInfo,this.inline)}}}(require("../tree")),function(a){a.Ruleset=function(a,b,c){this.selectors=a,this.rules=b,this._lookups={},this.strictImports=c},a.Ruleset.prototype={type:"Ruleset",accept:function(a){if(this.paths)for(var b=0;bf.selectors[g].elements.length?Array.prototype.push.apply(e,f.find(new a.Selector(b.elements.slice(1)),c)):e.push(f);break}}),this._lookups[f]=e)},genCSS:function(b,c){var d,e,f,g,h,i=[],j=[],k=!0;b.tabLevel=b.tabLevel||0,this.root||b.tabLevel++;var l=b.compress?"":Array(b.tabLevel+1).join(" "),m=b.compress?"":Array(b.tabLevel).join(" ");for(d=0;d0&&this.mergeElementsOnToSelectors(r,i),f=0;f0&&(k[0].elements=k[0].elements.slice(0),k[0].elements.push(new a.Element(j.combinator,"",0,j.index,j.currentFileInfo))),s.push(k);else for(g=0;g0?(m=k.slice(0),q=m.pop(),o=d.createDerived(q.elements.slice(0)),p=!1):o=d.createDerived([]),l.length>1&&(n=n.concat(l.slice(1))),l.length>0&&(p=!1,o.elements.push(new a.Element(j.combinator,l[0].elements[0].value,j.index,j.currentFileInfo)),o.elements=o.elements.concat(l[0].elements.slice(1))),p||m.push(o),m=m.concat(n),s.push(m);i=s,r=[]}for(r.length>0&&this.mergeElementsOnToSelectors(r,i),e=0;e0&&b.push(i[e])}else if(c.length>0)for(e=0;e0?e[e.length-1]=e[e.length-1].createDerived(e[e.length-1].elements.concat(b)):e.push(new a.Selector(b))}}}(require("../tree")),function(a){a.Selector=function(a,b,c,d,e,f){this.elements=a,this.extendList=b||[],this.condition=c,this.currentFileInfo=e||{},this.isReferenced=f,c||(this.evaldCondition=!0)},a.Selector.prototype={type:"Selector",accept:function(a){this.elements=a.visit(this.elements),this.extendList=a.visit(this.extendList),this.condition=a.visit(this.condition)},createDerived:function(b,c,d){d=null!=d?d:this.evaldCondition;var e=new a.Selector(b,c||this.extendList,this.condition,this.index,this.currentFileInfo,this.isReferenced);return e.evaldCondition=d,e},match:function(a){var b,c,d,e,f=this.elements,g=f.length;if(b=a.elements.slice(a.elements.length&&"&"===a.elements[0].value?1:0),c=b.length,d=Math.min(g,c),0===c||c>g)return!1;for(e=0;d>e;e++)if(f[e].value!==b[e].value)return!1;return!0},eval:function(a){var b=this.condition&&this.condition.eval(a);return this.createDerived(this.elements.map(function(b){return b.eval(a)}),this.extendList.map(function(b){return b.eval(a)}),b)},genCSS:function(a,b){var c,d;if(a&&a.firstSelector||""!==this.elements[0].combinator.value||b.add(" ",this.currentFileInfo,this.index),!this._css)for(c=0;c0)&&e.splice(0,0,b);else{b.paths=b.paths.filter(function(b){var c;for(" "===b[0].elements[0].combinator.value&&(b[0].elements[0].combinator=new a.Combinator("")),c=0;c0&&b.accept(this._visitor),c.visitDeeper=!1,this._mergeRules(b.rules),this._removeDuplicateRules(b.rules),b.rules.length>0&&b.paths.length>0&&e.splice(0,0,b)}return 1===e.length?e[0]:e},_removeDuplicateRules:function(b){var c,d,e,f={};for(e=b.length-1;e>=0;e--)if(d=b[e],d instanceof a.Rule)if(f[d.name]){c=f[d.name],c instanceof a.Rule&&(c=f[d.name]=[f[d.name].toCSS(this._env)]);var g=d.toCSS(this._env);-1!==c.indexOf(g)?b.splice(e,1):c.push(g)}else f[d.name]=d},_mergeRules:function(b){for(var c,d,e,f={},g=0;g1&&(d=c[0],d.value=new a.Value(c.map(function(a){return a.value})))})}}}(require("./tree")),function(a){a.extendFinderVisitor=function(){this._visitor=new a.visitor(this),this.contexts=[],this.allExtendsStack=[[]]},a.extendFinderVisitor.prototype={run:function(a){return a=this._visitor.visit(a),a.allExtends=this.allExtendsStack[0],a},visitRule:function(a,b){b.visitDeeper=!1},visitMixinDefinition:function(a,b){b.visitDeeper=!1},visitRuleset:function(b){if(!b.root){var c,d,e,f,g=[];for(c=0;c100){var o="{unable to calculate}",p="{unable to calculate}";try{o=m[0].selfSelectors[0].toCSS(),p=m[0].selector.toCSS()}catch(q){}throw{message:"extend circular reference detected. One of the circular extends is currently:"+o+":extend("+p+")"}}return m.concat(n.doExtendChaining(m,c,d+1))}return m},inInheritanceChain:function(a,b){if(a===b)return!0;if(b.parents){if(this.inInheritanceChain(a,b.parents[0]))return!0;if(this.inInheritanceChain(a,b.parents[1]))return!0}return!1},visitRule:function(a,b){b.visitDeeper=!1},visitMixinDefinition:function(a,b){b.visitDeeper=!1},visitSelector:function(a,b){b.visitDeeper=!1},visitRuleset:function(a){if(!a.root){var b,c,d,e,f=this.allExtendsStack[this.allExtendsStack.length-1],g=[],h=this;for(d=0;d0&&k[i.matched].combinator.value!==g?i=null:i.matched++,i&&(i.finished=i.matched===k.length,i.finished&&!a.allowAfter&&(e+1j&&k>0&&(l[l.length-1].elements=l[l.length-1].elements.concat(c[j].elements.slice(k)),k=0,j++),i=f.elements.slice(k,h.index).concat([g]).concat(d.elements.slice(1)),j===h.pathIndex&&e>0?l[l.length-1].elements=l[l.length-1].elements.concat(i):(l=l.concat(c.slice(j,h.pathIndex)),l.push(new a.Selector(i))),j=h.endPathIndex,k=h.endPathElementIndex,k>=c[j].elements.length&&(k=0,j++);return j0&&(l[l.length-1].elements=l[l.length-1].elements.concat(c[j].elements.slice(k)),j++),l=l.concat(c.slice(j,c.length))},visitRulesetOut:function(){},visitMedia:function(a){var b=a.allExtends.concat(this.allExtendsStack[this.allExtendsStack.length-1]);b=b.concat(this.doExtendChaining(b,a.allExtends)),this.allExtendsStack.push(b)},visitMediaOut:function(){this.allExtendsStack.length=this.allExtendsStack.length-1},visitDirective:function(a){var b=a.allExtends.concat(this.allExtendsStack[this.allExtendsStack.length-1]);b=b.concat(this.doExtendChaining(b,a.allExtends)),this.allExtendsStack.push(b)},visitDirectiveOut:function(){this.allExtendsStack.length=this.allExtendsStack.length-1}}}(require("./tree")),function(a){a.sourceMapOutput=function(a){this._css=[],this._rootNode=a.rootNode,this._writeSourceMap=a.writeSourceMap,this._contentsMap=a.contentsMap,this._sourceMapFilename=a.sourceMapFilename,this._outputFilename=a.outputFilename,this._sourceMapBasepath=a.sourceMapBasepath,this._sourceMapRootpath=a.sourceMapRootpath,this._outputSourceFiles=a.outputSourceFiles,this._sourceMapGeneratorConstructor=a.sourceMapGenerator||require("source-map").SourceMapGenerator,this._sourceMapRootpath&&"/"!==this._sourceMapRootpath.charAt(this._sourceMapRootpath.length-1)&&(this._sourceMapRootpath+="/"),this._lineNumber=0,this._column=0},a.sourceMapOutput.prototype.normalizeFilename=function(a){return this._sourceMapBasepath&&0===a.indexOf(this._sourceMapBasepath)&&(a=a.substring(this._sourceMapBasepath.length),("\\"===a.charAt(0)||"/"===a.charAt(0))&&(a=a.substring(1))),(this._sourceMapRootpath||"")+a.replace(/\\/g,"/")},a.sourceMapOutput.prototype.add=function(a,b,c,d){if(a){var e,f,g,h,i;if(b){var j=this._contentsMap[b.filename].substring(0,c);f=j.split("\n"),h=f[f.length-1]}if(e=a.split("\n"),g=e[e.length-1],b)if(d)for(i=0;i0){var c,d=JSON.stringify(this._sourceMapGenerator.toJSON());this._sourceMapFilename&&(c=this.normalizeFilename(this._sourceMapFilename)),this._writeSourceMap?this._writeSourceMap(d):c="data:application/json,"+encodeURIComponent(d),c&&this._css.push("/*# sourceMappingURL="+c+" */")}return this._css.join("")}}(require("./tree"));var isFileProtocol=/^(file|chrome(-extension)?|resource|qrc|app):/.test(location.protocol);less.env=less.env||("127.0.0.1"==location.hostname||"0.0.0.0"==location.hostname||"localhost"==location.hostname||location.port.length>0||isFileProtocol?"development":"production");var logLevel={info:2,errors:1,none:0};if(less.logLevel="undefined"!=typeof less.logLevel?less.logLevel:logLevel.info,less.async=less.async||!1,less.fileAsync=less.fileAsync||!1,less.poll=less.poll||(isFileProtocol?1e3:1500),less.functions)for(var func in less.functions)less.tree.functions[func]=less.functions[func];var dumpLineNumbers=/!dumpLineNumbers:(comments|mediaquery|all)/.exec(location.hash);dumpLineNumbers&&(less.dumpLineNumbers=dumpLineNumbers[1]);var typePattern=/^text\/(x-)?less$/,cache=null,fileCache={};if(less.watch=function(){return less.watchMode||(less.env="development",initRunningMode()),this.watchMode=!0},less.unwatch=function(){return clearInterval(less.watchTimer),this.watchMode=!1},/!watch/.test(location.hash)&&less.watch(),"development"!=less.env)try{cache="undefined"==typeof window.localStorage?null:window.localStorage}catch(_){}var links=document.getElementsByTagName("link");less.sheets=[];for(var i=0;i div { display: none; } .datepicker.days div.datepicker-days { display: block; } .datepicker.months div.datepicker-months { display: block; } .datepicker.years div.datepicker-years { display: block; } .datepicker table { margin: 0; } .datepicker td, .datepicker th { text-align: center; width: 20px; height: 20px; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; border: none; } .table-striped .datepicker table tr td, .table-striped .datepicker table tr th { background-color: transparent; } .datepicker table tr td.day:hover { background: #eeeeee; cursor: pointer; } .datepicker table tr td.old, .datepicker table tr td.new { color: #999999; } .datepicker table tr td.disabled, .datepicker table tr td.disabled:hover { background: none; color: #999999; cursor: default; } .datepicker table tr td.today, .datepicker table tr td.today:hover, .datepicker table tr td.today.disabled, .datepicker table tr td.today.disabled:hover { background-color: #fde19a; background-image: -moz-linear-gradient(top, #fdd49a, #fdf59a); background-image: -ms-linear-gradient(top, #fdd49a, #fdf59a); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a)); background-image: -webkit-linear-gradient(top, #fdd49a, #fdf59a); background-image: -o-linear-gradient(top, #fdd49a, #fdf59a); background-image: linear-gradient(top, #fdd49a, #fdf59a); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0); border-color: #fdf59a #fdf59a #fbed50; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); color: #000; } .datepicker table tr td.today:hover, .datepicker table tr td.today:hover:hover, .datepicker table tr td.today.disabled:hover, .datepicker table tr td.today.disabled:hover:hover, .datepicker table tr td.today:active, .datepicker table tr td.today:hover:active, .datepicker table tr td.today.disabled:active, .datepicker table tr td.today.disabled:hover:active, .datepicker table tr td.today.active, .datepicker table tr td.today:hover.active, .datepicker table tr td.today.disabled.active, .datepicker table tr td.today.disabled:hover.active, .datepicker table tr td.today.disabled, .datepicker table tr td.today:hover.disabled, .datepicker table tr td.today.disabled.disabled, .datepicker table tr td.today.disabled:hover.disabled, .datepicker table tr td.today[disabled], .datepicker table tr td.today:hover[disabled], .datepicker table tr td.today.disabled[disabled], .datepicker table tr td.today.disabled:hover[disabled] { background-color: #fdf59a; } .datepicker table tr td.today:active, .datepicker table tr td.today:hover:active, .datepicker table tr td.today.disabled:active, .datepicker table tr td.today.disabled:hover:active, .datepicker table tr td.today.active, .datepicker table tr td.today:hover.active, .datepicker table tr td.today.disabled.active, .datepicker table tr td.today.disabled:hover.active { background-color: #fbf069 \9; } .datepicker table tr td.today:hover:hover { color: #000; } .datepicker table tr td.today.active:hover { color: #fff; } .datepicker table tr td.range, .datepicker table tr td.range:hover, .datepicker table tr td.range.disabled, .datepicker table tr td.range.disabled:hover { background: #eeeeee; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .datepicker table tr td.range.today, .datepicker table tr td.range.today:hover, .datepicker table tr td.range.today.disabled, .datepicker table tr td.range.today.disabled:hover { background-color: #f3d17a; background-image: -moz-linear-gradient(top, #f3c17a, #f3e97a); background-image: -ms-linear-gradient(top, #f3c17a, #f3e97a); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f3c17a), to(#f3e97a)); background-image: -webkit-linear-gradient(top, #f3c17a, #f3e97a); background-image: -o-linear-gradient(top, #f3c17a, #f3e97a); background-image: linear-gradient(top, #f3c17a, #f3e97a); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0); border-color: #f3e97a #f3e97a #edde34; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .datepicker table tr td.range.today:hover, .datepicker table tr td.range.today:hover:hover, .datepicker table tr td.range.today.disabled:hover, .datepicker table tr td.range.today.disabled:hover:hover, .datepicker table tr td.range.today:active, .datepicker table tr td.range.today:hover:active, .datepicker table tr td.range.today.disabled:active, .datepicker table tr td.range.today.disabled:hover:active, .datepicker table tr td.range.today.active, .datepicker table tr td.range.today:hover.active, .datepicker table tr td.range.today.disabled.active, .datepicker table tr td.range.today.disabled:hover.active, .datepicker table tr td.range.today.disabled, .datepicker table tr td.range.today:hover.disabled, .datepicker table tr td.range.today.disabled.disabled, .datepicker table tr td.range.today.disabled:hover.disabled, .datepicker table tr td.range.today[disabled], .datepicker table tr td.range.today:hover[disabled], .datepicker table tr td.range.today.disabled[disabled], .datepicker table tr td.range.today.disabled:hover[disabled] { background-color: #f3e97a; } .datepicker table tr td.range.today:active, .datepicker table tr td.range.today:hover:active, .datepicker table tr td.range.today.disabled:active, .datepicker table tr td.range.today.disabled:hover:active, .datepicker table tr td.range.today.active, .datepicker table tr td.range.today:hover.active, .datepicker table tr td.range.today.disabled.active, .datepicker table tr td.range.today.disabled:hover.active { background-color: #efe24b \9; } .datepicker table tr td.selected, .datepicker table tr td.selected:hover, .datepicker table tr td.selected.disabled, .datepicker table tr td.selected.disabled:hover { background-color: #9e9e9e; background-image: -moz-linear-gradient(top, #b3b3b3, #808080); background-image: -ms-linear-gradient(top, #b3b3b3, #808080); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b3b3b3), to(#808080)); background-image: -webkit-linear-gradient(top, #b3b3b3, #808080); background-image: -o-linear-gradient(top, #b3b3b3, #808080); background-image: linear-gradient(top, #b3b3b3, #808080); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0); border-color: #808080 #808080 #595959; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); color: #fff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); } .datepicker table tr td.selected:hover, .datepicker table tr td.selected:hover:hover, .datepicker table tr td.selected.disabled:hover, .datepicker table tr td.selected.disabled:hover:hover, .datepicker table tr td.selected:active, .datepicker table tr td.selected:hover:active, .datepicker table tr td.selected.disabled:active, .datepicker table tr td.selected.disabled:hover:active, .datepicker table tr td.selected.active, .datepicker table tr td.selected:hover.active, .datepicker table tr td.selected.disabled.active, .datepicker table tr td.selected.disabled:hover.active, .datepicker table tr td.selected.disabled, .datepicker table tr td.selected:hover.disabled, .datepicker table tr td.selected.disabled.disabled, .datepicker table tr td.selected.disabled:hover.disabled, .datepicker table tr td.selected[disabled], .datepicker table tr td.selected:hover[disabled], .datepicker table tr td.selected.disabled[disabled], .datepicker table tr td.selected.disabled:hover[disabled] { background-color: #808080; } .datepicker table tr td.selected:active, .datepicker table tr td.selected:hover:active, .datepicker table tr td.selected.disabled:active, .datepicker table tr td.selected.disabled:hover:active, .datepicker table tr td.selected.active, .datepicker table tr td.selected:hover.active, .datepicker table tr td.selected.disabled.active, .datepicker table tr td.selected.disabled:hover.active { background-color: #666666 \9; } .datepicker table tr td.active, .datepicker table tr td.active:hover, .datepicker table tr td.active.disabled, .datepicker table tr td.active.disabled:hover { background-color: #006dcc; background-image: -moz-linear-gradient(top, #0088cc, #0044cc); background-image: -ms-linear-gradient(top, #0088cc, #0044cc); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); background-image: -o-linear-gradient(top, #0088cc, #0044cc); background-image: linear-gradient(top, #0088cc, #0044cc); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0); border-color: #0044cc #0044cc #002a80; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); color: #fff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); } .datepicker table tr td.active:hover, .datepicker table tr td.active:hover:hover, .datepicker table tr td.active.disabled:hover, .datepicker table tr td.active.disabled:hover:hover, .datepicker table tr td.active:active, .datepicker table tr td.active:hover:active, .datepicker table tr td.active.disabled:active, .datepicker table tr td.active.disabled:hover:active, .datepicker table tr td.active.active, .datepicker table tr td.active:hover.active, .datepicker table tr td.active.disabled.active, .datepicker table tr td.active.disabled:hover.active, .datepicker table tr td.active.disabled, .datepicker table tr td.active:hover.disabled, .datepicker table tr td.active.disabled.disabled, .datepicker table tr td.active.disabled:hover.disabled, .datepicker table tr td.active[disabled], .datepicker table tr td.active:hover[disabled], .datepicker table tr td.active.disabled[disabled], .datepicker table tr td.active.disabled:hover[disabled] { background-color: #0044cc; } .datepicker table tr td.active:active, .datepicker table tr td.active:hover:active, .datepicker table tr td.active.disabled:active, .datepicker table tr td.active.disabled:hover:active, .datepicker table tr td.active.active, .datepicker table tr td.active:hover.active, .datepicker table tr td.active.disabled.active, .datepicker table tr td.active.disabled:hover.active { background-color: #003399 \9; } .datepicker table tr td span { display: block; width: 23%; height: 54px; line-height: 54px; float: left; margin: 1%; cursor: pointer; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .datepicker table tr td span:hover { background: #eeeeee; } .datepicker table tr td span.disabled, .datepicker table tr td span.disabled:hover { background: none; color: #999999; cursor: default; } .datepicker table tr td span.active, .datepicker table tr td span.active:hover, .datepicker table tr td span.active.disabled, .datepicker table tr td span.active.disabled:hover { background-color: #006dcc; background-image: -moz-linear-gradient(top, #0088cc, #0044cc); background-image: -ms-linear-gradient(top, #0088cc, #0044cc); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); background-image: -o-linear-gradient(top, #0088cc, #0044cc); background-image: linear-gradient(top, #0088cc, #0044cc); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0); border-color: #0044cc #0044cc #002a80; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); color: #fff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); } .datepicker table tr td span.active:hover, .datepicker table tr td span.active:hover:hover, .datepicker table tr td span.active.disabled:hover, .datepicker table tr td span.active.disabled:hover:hover, .datepicker table tr td span.active:active, .datepicker table tr td span.active:hover:active, .datepicker table tr td span.active.disabled:active, .datepicker table tr td span.active.disabled:hover:active, .datepicker table tr td span.active.active, .datepicker table tr td span.active:hover.active, .datepicker table tr td span.active.disabled.active, .datepicker table tr td span.active.disabled:hover.active, .datepicker table tr td span.active.disabled, .datepicker table tr td span.active:hover.disabled, .datepicker table tr td span.active.disabled.disabled, .datepicker table tr td span.active.disabled:hover.disabled, .datepicker table tr td span.active[disabled], .datepicker table tr td span.active:hover[disabled], .datepicker table tr td span.active.disabled[disabled], .datepicker table tr td span.active.disabled:hover[disabled] { background-color: #0044cc; } .datepicker table tr td span.active:active, .datepicker table tr td span.active:hover:active, .datepicker table tr td span.active.disabled:active, .datepicker table tr td span.active.disabled:hover:active, .datepicker table tr td span.active.active, .datepicker table tr td span.active:hover.active, .datepicker table tr td span.active.disabled.active, .datepicker table tr td span.active.disabled:hover.active { background-color: #003399 \9; } .datepicker table tr td span.old, .datepicker table tr td span.new { color: #999999; } .datepicker th.datepicker-switch { width: 145px; } .datepicker thead tr:first-child th, .datepicker tfoot tr th { cursor: pointer; } .datepicker thead tr:first-child th:hover, .datepicker tfoot tr th:hover { background: #eeeeee; } .datepicker .cw { font-size: 10px; width: 12px; padding: 0 2px 0 5px; vertical-align: middle; } .datepicker thead tr:first-child th.cw { cursor: default; background-color: transparent; } .input-append.date .add-on i, .input-prepend.date .add-on i { display: block; cursor: pointer; width: 16px; height: 16px; } .input-daterange input { text-align: center; } .input-daterange input:first-child { -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .input-daterange input:last-child { -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-daterange .add-on { display: inline-block; width: auto; min-width: 16px; height: 18px; padding: 4px 5px; font-weight: normal; line-height: 18px; text-align: center; text-shadow: 0 1px 0 #ffffff; vertical-align: middle; background-color: #eeeeee; border: 1px solid #ccc; margin-left: -5px; margin-right: -5px; } assets/plugins/x-editable/demo.js000064400000024710152510440720013033 0ustar00$(function(){ //defaults $.fn.editable.defaults.url = '/post'; var c = window.location.href.match(/c=inline/i) ? 'inline' : 'popup'; $.fn.editable.defaults.mode = c === 'inline' ? 'inline' : 'popup'; //enable / disable $('#enable').click(function() { $('#user .editable').editable('toggleDisabled'); }); //editables $('#username').editable({ url: '/post', type: 'text', pk: 1, name: 'username', title: 'Enter username' }); $('#firstname').editable({ validate: function(value) { if($.trim(value) == '') return 'This field is required'; } }); $('#sex').editable({ prepend: "not selected", source: [ {value: 1, text: 'Male'}, {value: 2, text: 'Female'} ], display: function(value, sourceData) { var colors = {"": "gray", 1: "green", 2: "blue"}, elem = $.grep(sourceData, function(o){return o.value == value;}); if(elem.length) { $(this).text(elem[0].text).css("color", colors[value]); } else { $(this).empty(); } } }); $('#status').editable(); $('#group').editable({ showbuttons: false }); $('#vacation').editable({ datepicker: { todayBtn: 'linked' } }); $('#dob').editable(); $('#event').editable({ placement: 'right', combodate: { firstItem: 'name' } }); $('#meeting_start').editable({ format: 'yyyy-mm-dd hh:ii', viewformat: 'dd/mm/yyyy hh:ii', validate: function(v) { if(v && v.getDate() == 10) return 'Day cant be 10!'; }, datetimepicker: { todayBtn: 'linked', weekStart: 1 } }); $('#comments').editable({ showbuttons: 'bottom' }); $('#note').editable(); $('#pencil').click(function(e) { e.stopPropagation(); e.preventDefault(); $('#note').editable('toggle'); }); $('#state').editable({ source: ["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Dakota","North Carolina","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"] }); $('#state2').editable({ value: 'California', typeahead: { name: 'state', local: ["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Dakota","North Carolina","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"] } }); $('#fruits').editable({ pk: 1, limit: 3, source: [ {value: 1, text: 'banana'}, {value: 2, text: 'peach'}, {value: 3, text: 'apple'}, {value: 4, text: 'watermelon'}, {value: 5, text: 'orange'} ] }); $('#tags').editable({ inputclass: 'input-large', select2: { tags: ['html', 'javascript', 'css', 'ajax'], tokenSeparators: [",", " "] } }); var countries = []; $.each({"BD": "Bangladesh", "BE": "Belgium", "BF": "Burkina Faso", "BG": "Bulgaria", "BA": "Bosnia and Herzegovina", "BB": "Barbados", "WF": "Wallis and Futuna", "BL": "Saint Bartelemey", "BM": "Bermuda", "BN": "Brunei Darussalam", "BO": "Bolivia", "BH": "Bahrain", "BI": "Burundi", "BJ": "Benin", "BT": "Bhutan", "JM": "Jamaica", "BV": "Bouvet Island", "BW": "Botswana", "WS": "Samoa", "BR": "Brazil", "BS": "Bahamas", "JE": "Jersey", "BY": "Belarus", "O1": "Other Country", "LV": "Latvia", "RW": "Rwanda", "RS": "Serbia", "TL": "Timor-Leste", "RE": "Reunion", "LU": "Luxembourg", "TJ": "Tajikistan", "RO": "Romania", "PG": "Papua New Guinea", "GW": "Guinea-Bissau", "GU": "Guam", "GT": "Guatemala", "GS": "South Georgia and the South Sandwich Islands", "GR": "Greece", "GQ": "Equatorial Guinea", "GP": "Guadeloupe", "JP": "Japan", "GY": "Guyana", "GG": "Guernsey", "GF": "French Guiana", "GE": "Georgia", "GD": "Grenada", "GB": "United Kingdom", "GA": "Gabon", "SV": "El Salvador", "GN": "Guinea", "GM": "Gambia", "GL": "Greenland", "GI": "Gibraltar", "GH": "Ghana", "OM": "Oman", "TN": "Tunisia", "JO": "Jordan", "HR": "Croatia", "HT": "Haiti", "HU": "Hungary", "HK": "Hong Kong", "HN": "Honduras", "HM": "Heard Island and McDonald Islands", "VE": "Venezuela", "PR": "Puerto Rico", "PS": "Palestinian Territory", "PW": "Palau", "PT": "Portugal", "SJ": "Svalbard and Jan Mayen", "PY": "Paraguay", "IQ": "Iraq", "PA": "Panama", "PF": "French Polynesia", "BZ": "Belize", "PE": "Peru", "PK": "Pakistan", "PH": "Philippines", "PN": "Pitcairn", "TM": "Turkmenistan", "PL": "Poland", "PM": "Saint Pierre and Miquelon", "ZM": "Zambia", "EH": "Western Sahara", "RU": "Russian Federation", "EE": "Estonia", "EG": "Egypt", "TK": "Tokelau", "ZA": "South Africa", "EC": "Ecuador", "IT": "Italy", "VN": "Vietnam", "SB": "Solomon Islands", "EU": "Europe", "ET": "Ethiopia", "SO": "Somalia", "ZW": "Zimbabwe", "SA": "Saudi Arabia", "ES": "Spain", "ER": "Eritrea", "ME": "Montenegro", "MD": "Moldova, Republic of", "MG": "Madagascar", "MF": "Saint Martin", "MA": "Morocco", "MC": "Monaco", "UZ": "Uzbekistan", "MM": "Myanmar", "ML": "Mali", "MO": "Macao", "MN": "Mongolia", "MH": "Marshall Islands", "MK": "Macedonia", "MU": "Mauritius", "MT": "Malta", "MW": "Malawi", "MV": "Maldives", "MQ": "Martinique", "MP": "Northern Mariana Islands", "MS": "Montserrat", "MR": "Mauritania", "IM": "Isle of Man", "UG": "Uganda", "TZ": "Tanzania, United Republic of", "MY": "Malaysia", "MX": "Mexico", "IL": "Israel", "FR": "France", "IO": "British Indian Ocean Territory", "FX": "France, Metropolitan", "SH": "Saint Helena", "FI": "Finland", "FJ": "Fiji", "FK": "Falkland Islands (Malvinas)", "FM": "Micronesia, Federated States of", "FO": "Faroe Islands", "NI": "Nicaragua", "NL": "Netherlands", "NO": "Norway", "NA": "Namibia", "VU": "Vanuatu", "NC": "New Caledonia", "NE": "Niger", "NF": "Norfolk Island", "NG": "Nigeria", "NZ": "New Zealand", "NP": "Nepal", "NR": "Nauru", "NU": "Niue", "CK": "Cook Islands", "CI": "Cote d'Ivoire", "CH": "Switzerland", "CO": "Colombia", "CN": "China", "CM": "Cameroon", "CL": "Chile", "CC": "Cocos (Keeling) Islands", "CA": "Canada", "CG": "Congo", "CF": "Central African Republic", "CD": "Congo, The Democratic Republic of the", "CZ": "Czech Republic", "CY": "Cyprus", "CX": "Christmas Island", "CR": "Costa Rica", "CV": "Cape Verde", "CU": "Cuba", "SZ": "Swaziland", "SY": "Syrian Arab Republic", "KG": "Kyrgyzstan", "KE": "Kenya", "SR": "Suriname", "KI": "Kiribati", "KH": "Cambodia", "KN": "Saint Kitts and Nevis", "KM": "Comoros", "ST": "Sao Tome and Principe", "SK": "Slovakia", "KR": "Korea, Republic of", "SI": "Slovenia", "KP": "Korea, Democratic People's Republic of", "KW": "Kuwait", "SN": "Senegal", "SM": "San Marino", "SL": "Sierra Leone", "SC": "Seychelles", "KZ": "Kazakhstan", "KY": "Cayman Islands", "SG": "Singapore", "SE": "Sweden", "SD": "Sudan", "DO": "Dominican Republic", "DM": "Dominica", "DJ": "Djibouti", "DK": "Denmark", "VG": "Virgin Islands, British", "DE": "Germany", "YE": "Yemen", "DZ": "Algeria", "US": "United States", "UY": "Uruguay", "YT": "Mayotte", "UM": "United States Minor Outlying Islands", "LB": "Lebanon", "LC": "Saint Lucia", "LA": "Lao People's Democratic Republic", "TV": "Tuvalu", "TW": "Taiwan", "TT": "Trinidad and Tobago", "TR": "Turkey", "LK": "Sri Lanka", "LI": "Liechtenstein", "A1": "Anonymous Proxy", "TO": "Tonga", "LT": "Lithuania", "A2": "Satellite Provider", "LR": "Liberia", "LS": "Lesotho", "TH": "Thailand", "TF": "French Southern Territories", "TG": "Togo", "TD": "Chad", "TC": "Turks and Caicos Islands", "LY": "Libyan Arab Jamahiriya", "VA": "Holy See (Vatican City State)", "VC": "Saint Vincent and the Grenadines", "AE": "United Arab Emirates", "AD": "Andorra", "AG": "Antigua and Barbuda", "AF": "Afghanistan", "AI": "Anguilla", "VI": "Virgin Islands, U.S.", "IS": "Iceland", "IR": "Iran, Islamic Republic of", "AM": "Armenia", "AL": "Albania", "AO": "Angola", "AN": "Netherlands Antilles", "AQ": "Antarctica", "AP": "Asia/Pacific Region", "AS": "American Samoa", "AR": "Argentina", "AU": "Australia", "AT": "Austria", "AW": "Aruba", "IN": "India", "AX": "Aland Islands", "AZ": "Azerbaijan", "IE": "Ireland", "ID": "Indonesia", "UA": "Ukraine", "QA": "Qatar", "MZ": "Mozambique"}, function(k, v) { countries.push({id: k, text: v}); }); $('#country').editable({ source: countries, select2: { width: 200 } }); $('#address').editable({ url: '/post', value: { city: "Moscow", street: "Lenina", building: "12" }, validate: function(value) { if(value.city == '') return 'city is required!'; }, display: function(value) { if(!value) { $(this).empty(); return; } var html = '' + $('
      ').text(value.city).html() + ', ' + $('
      ').text(value.street).html() + ' st., bld. ' + $('
      ').text(value.building).html(); $(this).html(html); } }); $('#user .editable').on('hidden', function(e, reason){ if(reason === 'save' || reason === 'nochange') { var $next = $(this).closest('tr').next().find('.editable'); if($('#autoopen').is(':checked')) { setTimeout(function() { $next.editable('show'); }, 300); } else { $next.focus(); } } }); });assets/plugins/x-editable/js/bootstrap-editable.js000064400000670034152510440720016315 0ustar00/*! X-editable - v1.5.0 * In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery * http://github.com/vitalets/x-editable * Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */ /** Form with single input element, two buttons and two states: normal/loading. Applied as jQuery method to DIV tag (not to form tag!). This is because form can be in loading state when spinner shown. Editableform is linked with one of input types, e.g. 'text', 'select' etc. @class editableform @uses text @uses textarea **/ (function ($) { "use strict"; var EditableForm = function (div, options) { this.options = $.extend({}, $.fn.editableform.defaults, options); this.$div = $(div); //div, containing form. Not form tag. Not editable-element. if(!this.options.scope) { this.options.scope = this; } //nothing shown after init }; EditableForm.prototype = { constructor: EditableForm, initInput: function() { //called once //take input from options (as it is created in editable-element) this.input = this.options.input; //set initial value //todo: may be add check: typeof str === 'string' ? this.value = this.input.str2value(this.options.value); //prerender: get input.$input this.input.prerender(); }, initTemplate: function() { this.$form = $($.fn.editableform.template); }, initButtons: function() { var $btn = this.$form.find('.editable-buttons'); $btn.append($.fn.editableform.buttons); if(this.options.showbuttons === 'bottom') { $btn.addClass('editable-buttons-bottom'); } }, /** Renders editableform @method render **/ render: function() { //init loader this.$loading = $($.fn.editableform.loading); this.$div.empty().append(this.$loading); //init form template and buttons this.initTemplate(); if(this.options.showbuttons) { this.initButtons(); } else { this.$form.find('.editable-buttons').remove(); } //show loading state this.showLoading(); //flag showing is form now saving value to server. //It is needed to wait when closing form. this.isSaving = false; /** Fired when rendering starts @event rendering @param {Object} event event object **/ this.$div.triggerHandler('rendering'); //init input this.initInput(); //append input to form this.$form.find('div.editable-input').append(this.input.$tpl); //append form to container this.$div.append(this.$form); //render input $.when(this.input.render()) .then($.proxy(function () { //setup input to submit automatically when no buttons shown if(!this.options.showbuttons) { this.input.autosubmit(); } //attach 'cancel' handler this.$form.find('.editable-cancel').click($.proxy(this.cancel, this)); if(this.input.error) { this.error(this.input.error); this.$form.find('.editable-submit').attr('disabled', true); this.input.$input.attr('disabled', true); //prevent form from submitting this.$form.submit(function(e){ e.preventDefault(); }); } else { this.error(false); this.input.$input.removeAttr('disabled'); this.$form.find('.editable-submit').removeAttr('disabled'); var value = (this.value === null || this.value === undefined || this.value === '') ? this.options.defaultValue : this.value; this.input.value2input(value); //attach submit handler this.$form.submit($.proxy(this.submit, this)); } /** Fired when form is rendered @event rendered @param {Object} event event object **/ this.$div.triggerHandler('rendered'); this.showForm(); //call postrender method to perform actions required visibility of form if(this.input.postrender) { this.input.postrender(); } }, this)); }, cancel: function() { /** Fired when form was cancelled by user @event cancel @param {Object} event event object **/ this.$div.triggerHandler('cancel'); }, showLoading: function() { var w, h; if(this.$form) { //set loading size equal to form w = this.$form.outerWidth(); h = this.$form.outerHeight(); if(w) { this.$loading.width(w); } if(h) { this.$loading.height(h); } this.$form.hide(); } else { //stretch loading to fill container width w = this.$loading.parent().width(); if(w) { this.$loading.width(w); } } this.$loading.show(); }, showForm: function(activate) { this.$loading.hide(); this.$form.show(); if(activate !== false) { this.input.activate(); } /** Fired when form is shown @event show @param {Object} event event object **/ this.$div.triggerHandler('show'); }, error: function(msg) { var $group = this.$form.find('.control-group'), $block = this.$form.find('.editable-error-block'), lines; if(msg === false) { $group.removeClass($.fn.editableform.errorGroupClass); $block.removeClass($.fn.editableform.errorBlockClass).empty().hide(); } else { //convert newline to
      for more pretty error display if(msg) { lines = msg.split("\n"); for (var i = 0; i < lines.length; i++) { lines[i] = $('
      ').text(lines[i]).html(); } msg = lines.join('
      '); } $group.addClass($.fn.editableform.errorGroupClass); $block.addClass($.fn.editableform.errorBlockClass).html(msg).show(); } }, submit: function(e) { e.stopPropagation(); e.preventDefault(); var error, newValue = this.input.input2value(); //get new value from input //validation if (error = this.validate(newValue)) { this.error(error); this.showForm(); return; } //if value not changed --> trigger 'nochange' event and return /*jslint eqeq: true*/ if (!this.options.savenochange && this.input.value2str(newValue) == this.input.value2str(this.value)) { /*jslint eqeq: false*/ /** Fired when value not changed but form is submitted. Requires savenochange = false. @event nochange @param {Object} event event object **/ this.$div.triggerHandler('nochange'); return; } //convert value for submitting to server var submitValue = this.input.value2submit(newValue); this.isSaving = true; //sending data to server $.when(this.save(submitValue)) .done($.proxy(function(response) { this.isSaving = false; //run success callback var res = typeof this.options.success === 'function' ? this.options.success.call(this.options.scope, response, newValue) : null; //if success callback returns false --> keep form open and do not activate input if(res === false) { this.error(false); this.showForm(false); return; } //if success callback returns string --> keep form open, show error and activate input if(typeof res === 'string') { this.error(res); this.showForm(); return; } //if success callback returns object like {newValue: } --> use that value instead of submitted //it is usefull if you want to chnage value in url-function if(res && typeof res === 'object' && res.hasOwnProperty('newValue')) { newValue = res.newValue; } //clear error message this.error(false); this.value = newValue; /** Fired when form is submitted @event save @param {Object} event event object @param {Object} params additional params @param {mixed} params.newValue raw new value @param {mixed} params.submitValue submitted value as string @param {Object} params.response ajax response @example $('#form-div').on('save'), function(e, params){ if(params.newValue === 'username') {...} }); **/ this.$div.triggerHandler('save', {newValue: newValue, submitValue: submitValue, response: response}); }, this)) .fail($.proxy(function(xhr) { this.isSaving = false; var msg; if(typeof this.options.error === 'function') { msg = this.options.error.call(this.options.scope, xhr, newValue); } else { msg = typeof xhr === 'string' ? xhr : xhr.responseText || xhr.statusText || 'Unknown error!'; } this.error(msg); this.showForm(); }, this)); }, save: function(submitValue) { //try parse composite pk defined as json string in data-pk this.options.pk = $.fn.editableutils.tryParseJson(this.options.pk, true); var pk = (typeof this.options.pk === 'function') ? this.options.pk.call(this.options.scope) : this.options.pk, /* send on server in following cases: 1. url is function 2. url is string AND (pk defined OR send option = always) */ send = !!(typeof this.options.url === 'function' || (this.options.url && ((this.options.send === 'always') || (this.options.send === 'auto' && pk !== null && pk !== undefined)))), params; if (send) { //send to server this.showLoading(); //standard params params = { name: this.options.name || '', value: submitValue, pk: pk }; //additional params if(typeof this.options.params === 'function') { params = this.options.params.call(this.options.scope, params); } else { //try parse json in single quotes (from data-params attribute) this.options.params = $.fn.editableutils.tryParseJson(this.options.params, true); $.extend(params, this.options.params); } if(typeof this.options.url === 'function') { //user's function return this.options.url.call(this.options.scope, params); } else { //send ajax to server and return deferred object return $.ajax($.extend({ url : this.options.url, data : params, type : 'POST' }, this.options.ajaxOptions)); } } }, validate: function (value) { if (value === undefined) { value = this.value; } if (typeof this.options.validate === 'function') { return this.options.validate.call(this.options.scope, value); } }, option: function(key, value) { if(key in this.options) { this.options[key] = value; } if(key === 'value') { this.setValue(value); } //do not pass option to input as it is passed in editable-element }, setValue: function(value, convertStr) { if(convertStr) { this.value = this.input.str2value(value); } else { this.value = value; } //if form is visible, update input if(this.$form && this.$form.is(':visible')) { this.input.value2input(this.value); } } }; /* Initialize editableform. Applied to jQuery object. @method $().editableform(options) @params {Object} options @example var $form = $('<div>').editableform({ type: 'text', name: 'username', url: '/post', value: 'vitaliy' }); //to display form you should call 'render' method $form.editableform('render'); */ $.fn.editableform = function (option) { var args = arguments; return this.each(function () { var $this = $(this), data = $this.data('editableform'), options = typeof option === 'object' && option; if (!data) { $this.data('editableform', (data = new EditableForm(this, options))); } if (typeof option === 'string') { //call method data[option].apply(data, Array.prototype.slice.call(args, 1)); } }); }; //keep link to constructor to allow inheritance $.fn.editableform.Constructor = EditableForm; //defaults $.fn.editableform.defaults = { /* see also defaults for input */ /** Type of input. Can be text|textarea|select|date|checklist @property type @type string @default 'text' **/ type: 'text', /** Url for submit, e.g. '/post' If function - it will be called instead of ajax. Function should return deferred object to run fail/done callbacks. @property url @type string|function @default null @example url: function(params) { var d = new $.Deferred; if(params.value === 'abc') { return d.reject('error message'); //returning error via deferred object } else { //async saving data in js model someModel.asyncSaveMethod({ ..., success: function(){ d.resolve(); } }); return d.promise(); } } **/ url:null, /** Additional params for submit. If defined as object - it is **appended** to original ajax data (pk, name and value). If defined as function - returned object **overwrites** original ajax data. @example params: function(params) { //originally params contain pk, name and value params.a = 1; return params; } @property params @type object|function @default null **/ params:null, /** Name of field. Will be submitted on server. Can be taken from id attribute @property name @type string @default null **/ name: null, /** Primary key of editable object (e.g. record id in database). For composite keys use object, e.g. {id: 1, lang: 'en'}. Can be calculated dynamically via function. @property pk @type string|object|function @default null **/ pk: null, /** Initial value. If not defined - will be taken from element's content. For __select__ type should be defined (as it is ID of shown text). @property value @type string|object @default null **/ value: null, /** Value that will be displayed in input if original field value is empty (`null|undefined|''`). @property defaultValue @type string|object @default null @since 1.4.6 **/ defaultValue: null, /** Strategy for sending data on server. Can be `auto|always|never`. When 'auto' data will be sent on server **only if pk and url defined**, otherwise new value will be stored locally. @property send @type string @default 'auto' **/ send: 'auto', /** Function for client-side validation. If returns string - means validation not passed and string showed as error. @property validate @type function @default null @example validate: function(value) { if($.trim(value) == '') { return 'This field is required'; } } **/ validate: null, /** Success callback. Called when value successfully sent on server and **response status = 200**. Usefull to work with json response. For example, if your backend response can be {success: true} or {success: false, msg: "server error"} you can check it inside this callback. If it returns **string** - means error occured and string is shown as error message. If it returns **object like** {newValue: <something>} - it overwrites value, submitted by user. Otherwise newValue simply rendered into element. @property success @type function @default null @example success: function(response, newValue) { if(!response.success) return response.msg; } **/ success: null, /** Error callback. Called when request failed (response status != 200). Usefull when you want to parse error response and display a custom message. Must return **string** - the message to be displayed in the error block. @property error @type function @default null @since 1.4.4 @example error: function(response, newValue) { if(response.status === 500) { return 'Service unavailable. Please try later.'; } else { return response.responseText; } } **/ error: null, /** Additional options for submit ajax request. List of values: http://api.jquery.com/jQuery.ajax @property ajaxOptions @type object @default null @since 1.1.1 @example ajaxOptions: { type: 'put', dataType: 'json' } **/ ajaxOptions: null, /** Where to show buttons: left(true)|bottom|false Form without buttons is auto-submitted. @property showbuttons @type boolean|string @default true @since 1.1.1 **/ showbuttons: true, /** Scope for callback methods (success, validate). If null means editableform instance itself. @property scope @type DOMElement|object @default null @since 1.2.0 @private **/ scope: null, /** Whether to save or cancel value when it was not changed but form was submitted @property savenochange @type boolean @default false @since 1.2.0 **/ savenochange: false }; /* Note: following params could redefined in engine: bootstrap or jqueryui: Classes 'control-group' and 'editable-error-block' must always present! */ $.fn.editableform.template = '
      '+ '
      ' + '
      '+ '
      ' + '
      ' + '
      '; //loading div $.fn.editableform.loading = '
      '; //buttons $.fn.editableform.buttons = ''+ ''; //error class attached to control-group $.fn.editableform.errorGroupClass = null; //error class attached to editable-error-block $.fn.editableform.errorBlockClass = 'editable-error'; //engine $.fn.editableform.engine = 'jquery'; }(window.jQuery)); /** * EditableForm utilites */ (function ($) { "use strict"; //utils $.fn.editableutils = { /** * classic JS inheritance function */ inherit: function (Child, Parent) { var F = function() { }; F.prototype = Parent.prototype; Child.prototype = new F(); Child.prototype.constructor = Child; Child.superclass = Parent.prototype; }, /** * set caret position in input * see http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area */ setCursorPosition: function(elem, pos) { if (elem.setSelectionRange) { elem.setSelectionRange(pos, pos); } else if (elem.createTextRange) { var range = elem.createTextRange(); range.collapse(true); range.moveEnd('character', pos); range.moveStart('character', pos); range.select(); } }, /** * function to parse JSON in *single* quotes. (jquery automatically parse only double quotes) * That allows such code as: * safe = true --> means no exception will be thrown * for details see http://stackoverflow.com/questions/7410348/how-to-set-json-format-to-html5-data-attributes-in-the-jquery */ tryParseJson: function(s, safe) { if (typeof s === 'string' && s.length && s.match(/^[\{\[].*[\}\]]$/)) { if (safe) { try { /*jslint evil: true*/ s = (new Function('return ' + s))(); /*jslint evil: false*/ } catch (e) {} finally { return s; } } else { /*jslint evil: true*/ s = (new Function('return ' + s))(); /*jslint evil: false*/ } } return s; }, /** * slice object by specified keys */ sliceObj: function(obj, keys, caseSensitive /* default: false */) { var key, keyLower, newObj = {}; if (!$.isArray(keys) || !keys.length) { return newObj; } for (var i = 0; i < keys.length; i++) { key = keys[i]; if (obj.hasOwnProperty(key)) { newObj[key] = obj[key]; } if(caseSensitive === true) { continue; } //when getting data-* attributes via $.data() it's converted to lowercase. //details: http://stackoverflow.com/questions/7602565/using-data-attributes-with-jquery //workaround is code below. keyLower = key.toLowerCase(); if (obj.hasOwnProperty(keyLower)) { newObj[key] = obj[keyLower]; } } return newObj; }, /* exclude complex objects from $.data() before pass to config */ getConfigData: function($element) { var data = {}; $.each($element.data(), function(k, v) { if(typeof v !== 'object' || (v && typeof v === 'object' && (v.constructor === Object || v.constructor === Array))) { data[k] = v; } }); return data; }, /* returns keys of object */ objectKeys: function(o) { if (Object.keys) { return Object.keys(o); } else { if (o !== Object(o)) { throw new TypeError('Object.keys called on a non-object'); } var k=[], p; for (p in o) { if (Object.prototype.hasOwnProperty.call(o,p)) { k.push(p); } } return k; } }, /** method to escape html. **/ escape: function(str) { return $('
      ').text(str).html(); }, /* returns array items from sourceData having value property equal or inArray of 'value' */ itemsByValue: function(value, sourceData, valueProp) { if(!sourceData || value === null) { return []; } if (typeof(valueProp) !== "function") { var idKey = valueProp || 'value'; valueProp = function (e) { return e[idKey]; }; } var isValArray = $.isArray(value), result = [], that = this; $.each(sourceData, function(i, o) { if(o.children) { result = result.concat(that.itemsByValue(value, o.children, valueProp)); } else { /*jslint eqeq: true*/ if(isValArray) { if($.grep(value, function(v){ return v == (o && typeof o === 'object' ? valueProp(o) : o); }).length) { result.push(o); } } else { var itemValue = (o && (typeof o === 'object')) ? valueProp(o) : o; if(value == itemValue) { result.push(o); } } /*jslint eqeq: false*/ } }); return result; }, /* Returns input by options: type, mode. */ createInput: function(options) { var TypeConstructor, typeOptions, input, type = options.type; //`date` is some kind of virtual type that is transformed to one of exact types //depending on mode and core lib if(type === 'date') { //inline if(options.mode === 'inline') { if($.fn.editabletypes.datefield) { type = 'datefield'; } else if($.fn.editabletypes.dateuifield) { type = 'dateuifield'; } //popup } else { if($.fn.editabletypes.date) { type = 'date'; } else if($.fn.editabletypes.dateui) { type = 'dateui'; } } //if type still `date` and not exist in types, replace with `combodate` that is base input if(type === 'date' && !$.fn.editabletypes.date) { type = 'combodate'; } } //`datetime` should be datetimefield in 'inline' mode if(type === 'datetime' && options.mode === 'inline') { type = 'datetimefield'; } //change wysihtml5 to textarea for jquery UI and plain versions if(type === 'wysihtml5' && !$.fn.editabletypes[type]) { type = 'textarea'; } //create input of specified type. Input will be used for converting value, not in form if(typeof $.fn.editabletypes[type] === 'function') { TypeConstructor = $.fn.editabletypes[type]; typeOptions = this.sliceObj(options, this.objectKeys(TypeConstructor.defaults)); input = new TypeConstructor(typeOptions); return input; } else { $.error('Unknown type: '+ type); return false; } }, //see http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr supportsTransitions: function () { var b = document.body || document.documentElement, s = b.style, p = 'transition', v = ['Moz', 'Webkit', 'Khtml', 'O', 'ms']; if(typeof s[p] === 'string') { return true; } // Tests for vendor specific prop p = p.charAt(0).toUpperCase() + p.substr(1); for(var i=0; i This method applied internally in $().editable(). You should subscribe on it's events (save / cancel) to get profit of it.
      Final realization can be different: bootstrap-popover, jqueryui-tooltip, poshytip, inline-div. It depends on which js file you include.
      Applied as jQuery method. @class editableContainer @uses editableform **/ (function ($) { "use strict"; var Popup = function (element, options) { this.init(element, options); }; var Inline = function (element, options) { this.init(element, options); }; //methods Popup.prototype = { containerName: null, //method to call container on element containerDataName: null, //object name in element's .data() innerCss: null, //tbd in child class containerClass: 'editable-container editable-popup', //css class applied to container element defaults: {}, //container itself defaults init: function(element, options) { this.$element = $(element); //since 1.4.1 container do not use data-* directly as they already merged into options. this.options = $.extend({}, $.fn.editableContainer.defaults, options); this.splitOptions(); //set scope of form callbacks to element this.formOptions.scope = this.$element[0]; this.initContainer(); //flag to hide container, when saving value will finish this.delayedHide = false; //bind 'destroyed' listener to destroy container when element is removed from dom this.$element.on('destroyed', $.proxy(function(){ this.destroy(); }, this)); //attach document handler to close containers on click / escape if(!$(document).data('editable-handlers-attached')) { //close all on escape $(document).on('keyup.editable', function (e) { if (e.which === 27) { $('.editable-open').editableContainer('hide'); //todo: return focus on element } }); //close containers when click outside //(mousedown could be better than click, it closes everything also on drag drop) $(document).on('click.editable', function(e) { var $target = $(e.target), i, exclude_classes = ['.editable-container', '.ui-datepicker-header', '.datepicker', //in inline mode datepicker is rendered into body '.modal-backdrop', '.bootstrap-wysihtml5-insert-image-modal', '.bootstrap-wysihtml5-insert-link-modal' ]; //check if element is detached. It occurs when clicking in bootstrap datepicker if (!$.contains(document.documentElement, e.target)) { return; } //for some reason FF 20 generates extra event (click) in select2 widget with e.target = document //we need to filter it via construction below. See https://github.com/vitalets/x-editable/issues/199 //Possibly related to http://stackoverflow.com/questions/10119793/why-does-firefox-react-differently-from-webkit-and-ie-to-click-event-on-selec if($target.is(document)) { return; } //if click inside one of exclude classes --> no nothing for(i=0; i container changes size before hide. */ //if form already exist - delete previous data if(this.$form) { //todo: destroy prev data! //this.$form.destroy(); } this.$form = $('
      '); //insert form into container body if(this.tip().is(this.innerCss)) { //for inline container this.tip().append(this.$form); } else { this.tip().find(this.innerCss).append(this.$form); } //render form this.renderForm(); }, /** Hides container with form @method hide() @param {string} reason Reason caused hiding. Can be save|cancel|onblur|nochange|undefined (=manual) **/ hide: function(reason) { if(!this.tip() || !this.tip().is(':visible') || !this.$element.hasClass('editable-open')) { return; } //if form is saving value, schedule hide if(this.$form.data('editableform').isSaving) { this.delayedHide = {reason: reason}; return; } else { this.delayedHide = false; } this.$element.removeClass('editable-open'); this.innerHide(); /** Fired when container was hidden. It occurs on both save or cancel. **Note:** Bootstrap popover has own `hidden` event that now cannot be separated from x-editable's one. The workaround is to check `arguments.length` that is always `2` for x-editable. @event hidden @param {object} event event object @param {string} reason Reason caused hiding. Can be save|cancel|onblur|nochange|manual @example $('#username').on('hidden', function(e, reason) { if(reason === 'save' || reason === 'cancel') { //auto-open next editable $(this).closest('tr').next().find('.editable').editable('show'); } }); **/ this.$element.triggerHandler('hidden', reason || 'manual'); }, /* internal show method. To be overwritten in child classes */ innerShow: function () { }, /* internal hide method. To be overwritten in child classes */ innerHide: function () { }, /** Toggles container visibility (show / hide) @method toggle() @param {boolean} closeAll Whether to close all other editable containers when showing this one. Default true. **/ toggle: function(closeAll) { if(this.container() && this.tip() && this.tip().is(':visible')) { this.hide(); } else { this.show(closeAll); } }, /* Updates the position of container when content changed. @method setPosition() */ setPosition: function() { //tbd in child class }, save: function(e, params) { /** Fired when new value was submitted. You can use $(this).data('editableContainer') inside handler to access to editableContainer instance @event save @param {Object} event event object @param {Object} params additional params @param {mixed} params.newValue submitted value @param {Object} params.response ajax response @example $('#username').on('save', function(e, params) { //assuming server response: '{success: true}' var pk = $(this).data('editableContainer').options.pk; if(params.response && params.response.success) { alert('value: ' + params.newValue + ' with pk: ' + pk + ' saved!'); } else { alert('error!'); } }); **/ this.$element.triggerHandler('save', params); //hide must be after trigger, as saving value may require methods of plugin, applied to input this.hide('save'); }, /** Sets new option @method option(key, value) @param {string} key @param {mixed} value **/ option: function(key, value) { this.options[key] = value; if(key in this.containerOptions) { this.containerOptions[key] = value; this.setContainerOption(key, value); } else { this.formOptions[key] = value; if(this.$form) { this.$form.editableform('option', key, value); } } }, setContainerOption: function(key, value) { this.call('option', key, value); }, /** Destroys the container instance @method destroy() **/ destroy: function() { this.hide(); this.innerDestroy(); this.$element.off('destroyed'); this.$element.removeData('editableContainer'); }, /* to be overwritten in child classes */ innerDestroy: function() { }, /* Closes other containers except one related to passed element. Other containers can be cancelled or submitted (depends on onblur option) */ closeOthers: function(element) { $('.editable-open').each(function(i, el){ //do nothing with passed element and it's children if(el === element || $(el).find(element).length) { return; } //otherwise cancel or submit all open containers var $el = $(el), ec = $el.data('editableContainer'); if(!ec) { return; } if(ec.options.onblur === 'cancel') { $el.data('editableContainer').hide('onblur'); } else if(ec.options.onblur === 'submit') { $el.data('editableContainer').tip().find('form').submit(); } }); }, /** Activates input of visible container (e.g. set focus) @method activate() **/ activate: function() { if(this.tip && this.tip().is(':visible') && this.$form) { this.$form.data('editableform').input.activate(); } } }; /** jQuery method to initialize editableContainer. @method $().editableContainer(options) @params {Object} options @example $('#edit').editableContainer({ type: 'text', url: '/post', pk: 1, value: 'hello' }); **/ $.fn.editableContainer = function (option) { var args = arguments; return this.each(function () { var $this = $(this), dataKey = 'editableContainer', data = $this.data(dataKey), options = typeof option === 'object' && option, Constructor = (options.mode === 'inline') ? Inline : Popup; if (!data) { $this.data(dataKey, (data = new Constructor(this, options))); } if (typeof option === 'string') { //call method data[option].apply(data, Array.prototype.slice.call(args, 1)); } }); }; //store constructors $.fn.editableContainer.Popup = Popup; $.fn.editableContainer.Inline = Inline; //defaults $.fn.editableContainer.defaults = { /** Initial value of form input @property value @type mixed @default null @private **/ value: null, /** Placement of container relative to element. Can be top|right|bottom|left. Not used for inline container. @property placement @type string @default 'top' **/ placement: 'top', /** Whether to hide container on save/cancel. @property autohide @type boolean @default true @private **/ autohide: true, /** Action when user clicks outside the container. Can be cancel|submit|ignore. Setting ignore allows to have several containers open. @property onblur @type string @default 'cancel' @since 1.1.1 **/ onblur: 'cancel', /** Animation speed (inline mode only) @property anim @type string @default false **/ anim: false, /** Mode of editable, can be `popup` or `inline` @property mode @type string @default 'popup' @since 1.4.0 **/ mode: 'popup' }; /* * workaround to have 'destroyed' event to destroy popover when element is destroyed * see http://stackoverflow.com/questions/2200494/jquery-trigger-event-when-an-element-is-removed-from-the-dom */ jQuery.event.special.destroyed = { remove: function(o) { if (o.handler) { o.handler(); } } }; }(window.jQuery)); /** * Editable Inline * --------------------- */ (function ($) { "use strict"; //copy prototype from EditableContainer //extend methods $.extend($.fn.editableContainer.Inline.prototype, $.fn.editableContainer.Popup.prototype, { containerName: 'editableform', innerCss: '.editable-inline', containerClass: 'editable-container editable-inline', //css class applied to container element initContainer: function(){ //container is element this.$tip = $(''); //convert anim to miliseconds (int) if(!this.options.anim) { this.options.anim = 0; } }, splitOptions: function() { //all options are passed to form this.containerOptions = {}; this.formOptions = this.options; }, tip: function() { return this.$tip; }, innerShow: function () { this.$element.hide(); this.tip().insertAfter(this.$element).show(); }, innerHide: function () { this.$tip.hide(this.options.anim, $.proxy(function() { this.$element.show(); this.innerDestroy(); }, this)); }, innerDestroy: function() { if(this.tip()) { this.tip().empty().remove(); } } }); }(window.jQuery)); /** Makes editable any HTML element on the page. Applied as jQuery method. @class editable @uses editableContainer **/ (function ($) { "use strict"; var Editable = function (element, options) { this.$element = $(element); //data-* has more priority over js options: because dynamically created elements may change data-* this.options = $.extend({}, $.fn.editable.defaults, options, $.fn.editableutils.getConfigData(this.$element)); if(this.options.selector) { this.initLive(); } else { this.init(); } //check for transition support if(this.options.highlight && !$.fn.editableutils.supportsTransitions()) { this.options.highlight = false; } }; Editable.prototype = { constructor: Editable, init: function () { var isValueByText = false, doAutotext, finalize; //name this.options.name = this.options.name || this.$element.attr('id'); //create input of specified type. Input needed already here to convert value for initial display (e.g. show text by id for select) //also we set scope option to have access to element inside input specific callbacks (e. g. source as function) this.options.scope = this.$element[0]; this.input = $.fn.editableutils.createInput(this.options); if(!this.input) { return; } //set value from settings or by element's text if (this.options.value === undefined || this.options.value === null) { this.value = this.input.html2value($.trim(this.$element.html())); isValueByText = true; } else { /* value can be string when received from 'data-value' attribute for complext objects value can be set as json string in data-value attribute, e.g. data-value="{city: 'Moscow', street: 'Lenina'}" */ this.options.value = $.fn.editableutils.tryParseJson(this.options.value, true); if(typeof this.options.value === 'string') { this.value = this.input.str2value(this.options.value); } else { this.value = this.options.value; } } //add 'editable' class to every editable element this.$element.addClass('editable'); //specifically for "textarea" add class .editable-pre-wrapped to keep linebreaks if(this.input.type === 'textarea') { this.$element.addClass('editable-pre-wrapped'); } //attach handler activating editable. In disabled mode it just prevent default action (useful for links) if(this.options.toggle !== 'manual') { this.$element.addClass('editable-click'); this.$element.on(this.options.toggle + '.editable', $.proxy(function(e){ //prevent following link if editable enabled if(!this.options.disabled) { e.preventDefault(); } //stop propagation not required because in document click handler it checks event target //e.stopPropagation(); if(this.options.toggle === 'mouseenter') { //for hover only show container this.show(); } else { //when toggle='click' we should not close all other containers as they will be closed automatically in document click listener var closeAll = (this.options.toggle !== 'click'); this.toggle(closeAll); } }, this)); } else { this.$element.attr('tabindex', -1); //do not stop focus on element when toggled manually } //if display is function it's far more convinient to have autotext = always to render correctly on init //see https://github.com/vitalets/x-editable-yii/issues/34 if(typeof this.options.display === 'function') { this.options.autotext = 'always'; } //check conditions for autotext: switch(this.options.autotext) { case 'always': doAutotext = true; break; case 'auto': //if element text is empty and value is defined and value not generated by text --> run autotext doAutotext = !$.trim(this.$element.text()).length && this.value !== null && this.value !== undefined && !isValueByText; break; default: doAutotext = false; } //depending on autotext run render() or just finilize init $.when(doAutotext ? this.render() : true).then($.proxy(function() { if(this.options.disabled) { this.disable(); } else { this.enable(); } /** Fired when element was initialized by `$().editable()` method. Please note that you should setup `init` handler **before** applying `editable`. @event init @param {Object} event event object @param {Object} editable editable instance (as here it cannot accessed via data('editable')) @since 1.2.0 @example $('#username').on('init', function(e, editable) { alert('initialized ' + editable.options.name); }); $('#username').editable(); **/ this.$element.triggerHandler('init', this); }, this)); }, /* Initializes parent element for live editables */ initLive: function() { //store selector var selector = this.options.selector; //modify options for child elements this.options.selector = false; this.options.autotext = 'never'; //listen toggle events this.$element.on(this.options.toggle + '.editable', selector, $.proxy(function(e){ var $target = $(e.target); if(!$target.data('editable')) { //if delegated element initially empty, we need to clear it's text (that was manually set to `empty` by user) //see https://github.com/vitalets/x-editable/issues/137 if($target.hasClass(this.options.emptyclass)) { $target.empty(); } $target.editable(this.options).trigger(e); } }, this)); }, /* Renders value into element's text. Can call custom display method from options. Can return deferred object. @method render() @param {mixed} response server response (if exist) to pass into display function */ render: function(response) { //do not display anything if(this.options.display === false) { return; } //if input has `value2htmlFinal` method, we pass callback in third param to be called when source is loaded if(this.input.value2htmlFinal) { return this.input.value2html(this.value, this.$element[0], this.options.display, response); //if display method defined --> use it } else if(typeof this.options.display === 'function') { return this.options.display.call(this.$element[0], this.value, response); //else use input's original value2html() method } else { return this.input.value2html(this.value, this.$element[0]); } }, /** Enables editable @method enable() **/ enable: function() { this.options.disabled = false; this.$element.removeClass('editable-disabled'); this.handleEmpty(this.isEmpty); if(this.options.toggle !== 'manual') { if(this.$element.attr('tabindex') === '-1') { this.$element.removeAttr('tabindex'); } } }, /** Disables editable @method disable() **/ disable: function() { this.options.disabled = true; this.hide(); this.$element.addClass('editable-disabled'); this.handleEmpty(this.isEmpty); //do not stop focus on this element this.$element.attr('tabindex', -1); }, /** Toggles enabled / disabled state of editable element @method toggleDisabled() **/ toggleDisabled: function() { if(this.options.disabled) { this.enable(); } else { this.disable(); } }, /** Sets new option @method option(key, value) @param {string|object} key option name or object with several options @param {mixed} value option new value @example $('.editable').editable('option', 'pk', 2); **/ option: function(key, value) { //set option(s) by object if(key && typeof key === 'object') { $.each(key, $.proxy(function(k, v){ this.option($.trim(k), v); }, this)); return; } //set option by string this.options[key] = value; //disabled if(key === 'disabled') { return value ? this.disable() : this.enable(); } //value if(key === 'value') { this.setValue(value); } //transfer new option to container! if(this.container) { this.container.option(key, value); } //pass option to input directly (as it points to the same in form) if(this.input.option) { this.input.option(key, value); } }, /* * set emptytext if element is empty */ handleEmpty: function (isEmpty) { //do not handle empty if we do not display anything if(this.options.display === false) { return; } /* isEmpty may be set directly as param of method. It is required when we enable/disable field and can't rely on content as node content is text: "Empty" that is not empty %) */ if(isEmpty !== undefined) { this.isEmpty = isEmpty; } else { //detect empty //for some inputs we need more smart check //e.g. wysihtml5 may have
      ,

      , if(typeof(this.input.isEmpty) === 'function') { this.isEmpty = this.input.isEmpty(this.$element); } else { this.isEmpty = $.trim(this.$element.html()) === ''; } } //emptytext shown only for enabled if(!this.options.disabled) { if (this.isEmpty) { this.$element.html(this.options.emptytext); if(this.options.emptyclass) { this.$element.addClass(this.options.emptyclass); } } else if(this.options.emptyclass) { this.$element.removeClass(this.options.emptyclass); } } else { //below required if element disable property was changed if(this.isEmpty) { this.$element.empty(); if(this.options.emptyclass) { this.$element.removeClass(this.options.emptyclass); } } } }, /** Shows container with form @method show() @param {boolean} closeAll Whether to close all other editable containers when showing this one. Default true. **/ show: function (closeAll) { if(this.options.disabled) { return; } //init editableContainer: popover, tooltip, inline, etc.. if(!this.container) { var containerOptions = $.extend({}, this.options, { value: this.value, input: this.input //pass input to form (as it is already created) }); this.$element.editableContainer(containerOptions); //listen `save` event this.$element.on("save.internal", $.proxy(this.save, this)); this.container = this.$element.data('editableContainer'); } else if(this.container.tip().is(':visible')) { return; } //show container this.container.show(closeAll); }, /** Hides container with form @method hide() **/ hide: function () { if(this.container) { this.container.hide(); } }, /** Toggles container visibility (show / hide) @method toggle() @param {boolean} closeAll Whether to close all other editable containers when showing this one. Default true. **/ toggle: function(closeAll) { if(this.container && this.container.tip().is(':visible')) { this.hide(); } else { this.show(closeAll); } }, /* * called when form was submitted */ save: function(e, params) { //mark element with unsaved class if needed if(this.options.unsavedclass) { /* Add unsaved css to element if: - url is not user's function - value was not sent to server - params.response === undefined, that means data was not sent - value changed */ var sent = false; sent = sent || typeof this.options.url === 'function'; sent = sent || this.options.display === false; sent = sent || params.response !== undefined; sent = sent || (this.options.savenochange && this.input.value2str(this.value) !== this.input.value2str(params.newValue)); if(sent) { this.$element.removeClass(this.options.unsavedclass); } else { this.$element.addClass(this.options.unsavedclass); } } //highlight when saving if(this.options.highlight) { var $e = this.$element, bgColor = $e.css('background-color'); $e.css('background-color', this.options.highlight); setTimeout(function(){ if(bgColor === 'transparent') { bgColor = ''; } $e.css('background-color', bgColor); $e.addClass('editable-bg-transition'); setTimeout(function(){ $e.removeClass('editable-bg-transition'); }, 1700); }, 10); } //set new value this.setValue(params.newValue, false, params.response); /** Fired when new value was submitted. You can use $(this).data('editable') to access to editable instance @event save @param {Object} event event object @param {Object} params additional params @param {mixed} params.newValue submitted value @param {Object} params.response ajax response @example $('#username').on('save', function(e, params) { alert('Saved value: ' + params.newValue); }); **/ //event itself is triggered by editableContainer. Description here is only for documentation }, validate: function () { if (typeof this.options.validate === 'function') { return this.options.validate.call(this, this.value); } }, /** Sets new value of editable @method setValue(value, convertStr) @param {mixed} value new value @param {boolean} convertStr whether to convert value from string to internal format **/ setValue: function(value, convertStr, response) { if(convertStr) { this.value = this.input.str2value(value); } else { this.value = value; } if(this.container) { this.container.option('value', this.value); } $.when(this.render(response)) .then($.proxy(function() { this.handleEmpty(); }, this)); }, /** Activates input of visible container (e.g. set focus) @method activate() **/ activate: function() { if(this.container) { this.container.activate(); } }, /** Removes editable feature from element @method destroy() **/ destroy: function() { this.disable(); if(this.container) { this.container.destroy(); } this.input.destroy(); if(this.options.toggle !== 'manual') { this.$element.removeClass('editable-click'); this.$element.off(this.options.toggle + '.editable'); } this.$element.off("save.internal"); this.$element.removeClass('editable editable-open editable-disabled'); this.$element.removeData('editable'); } }; /* EDITABLE PLUGIN DEFINITION * ======================= */ /** jQuery method to initialize editable element. @method $().editable(options) @params {Object} options @example $('#username').editable({ type: 'text', url: '/post', pk: 1 }); **/ $.fn.editable = function (option) { //special API methods returning non-jquery object var result = {}, args = arguments, datakey = 'editable'; switch (option) { /** Runs client-side validation for all matched editables @method validate() @returns {Object} validation errors map @example $('#username, #fullname').editable('validate'); // possible result: { username: "username is required", fullname: "fullname should be minimum 3 letters length" } **/ case 'validate': this.each(function () { var $this = $(this), data = $this.data(datakey), error; if (data && (error = data.validate())) { result[data.options.name] = error; } }); return result; /** Returns current values of editable elements. Note that it returns an **object** with name-value pairs, not a value itself. It allows to get data from several elements. If value of some editable is `null` or `undefined` it is excluded from result object. When param `isSingle` is set to **true** - it is supposed you have single element and will return value of editable instead of object. @method getValue() @param {bool} isSingle whether to return just value of single element @returns {Object} object of element names and values @example $('#username, #fullname').editable('getValue'); //result: { username: "superuser", fullname: "John" } //isSingle = true $('#username').editable('getValue', true); //result "superuser" **/ case 'getValue': if(arguments.length === 2 && arguments[1] === true) { //isSingle = true result = this.eq(0).data(datakey).value; } else { this.each(function () { var $this = $(this), data = $this.data(datakey); if (data && data.value !== undefined && data.value !== null) { result[data.options.name] = data.input.value2submit(data.value); } }); } return result; /** This method collects values from several editable elements and submit them all to server. Internally it runs client-side validation for all fields and submits only in case of success. See
      creating new records for details. @method submit(options) @param {object} options @param {object} options.url url to submit data @param {object} options.data additional data to submit @param {object} options.ajaxOptions additional ajax options @param {function} options.error(obj) error handler @param {function} options.success(obj,config) success handler @returns {Object} jQuery object **/ case 'submit': //collects value, validate and submit to server for creating new record var config = arguments[1] || {}, $elems = this, errors = this.editable('validate'), values; if($.isEmptyObject(errors)) { values = this.editable('getValue'); if(config.data) { $.extend(values, config.data); } $.ajax($.extend({ url: config.url, data: values, type: 'POST' }, config.ajaxOptions)) .success(function(response) { //successful response 200 OK if(typeof config.success === 'function') { config.success.call($elems, response, config); } }) .error(function(){ //ajax error if(typeof config.error === 'function') { config.error.apply($elems, arguments); } }); } else { //client-side validation error if(typeof config.error === 'function') { config.error.call($elems, errors); } } return this; } //return jquery object return this.each(function () { var $this = $(this), data = $this.data(datakey), options = typeof option === 'object' && option; //for delegated targets do not store `editable` object for element //it's allows several different selectors. //see: https://github.com/vitalets/x-editable/issues/312 if(options && options.selector) { data = new Editable(this, options); return; } if (!data) { $this.data(datakey, (data = new Editable(this, options))); } if (typeof option === 'string') { //call method data[option].apply(data, Array.prototype.slice.call(args, 1)); } }); }; $.fn.editable.defaults = { /** Type of input. Can be text|textarea|select|date|checklist and more @property type @type string @default 'text' **/ type: 'text', /** Sets disabled state of editable @property disabled @type boolean @default false **/ disabled: false, /** How to toggle editable. Can be click|dblclick|mouseenter|manual. When set to manual you should manually call show/hide methods of editable. **Note**: if you call show or toggle inside **click** handler of some DOM element, you need to apply e.stopPropagation() because containers are being closed on any click on document. @example $('#edit-button').click(function(e) { e.stopPropagation(); $('#username').editable('toggle'); }); @property toggle @type string @default 'click' **/ toggle: 'click', /** Text shown when element is empty. @property emptytext @type string @default 'Empty' **/ emptytext: 'Empty', /** Allows to automatically set element's text based on it's value. Can be auto|always|never. Useful for select and date. For example, if dropdown list is {1: 'a', 2: 'b'} and element's value set to 1, it's html will be automatically set to 'a'. auto - text will be automatically set only if element is empty. always|never - always(never) try to set element's text. @property autotext @type string @default 'auto' **/ autotext: 'auto', /** Initial value of input. If not set, taken from element's text. Note, that if element's text is empty - text is automatically generated from value and can be customized (see `autotext` option). For example, to display currency sign: @example @property value @type mixed @default element's text **/ value: null, /** Callback to perform custom displaying of value in element's text. If `null`, default input's display used. If `false`, no displaying methods will be called, element's text will never change. Runs under element's scope. _**Parameters:**_ * `value` current value to be displayed * `response` server response (if display called after ajax submit), since 1.4.0 For _inputs with source_ (select, checklist) parameters are different: * `value` current value to be displayed * `sourceData` array of items for current input (e.g. dropdown items) * `response` server response (if display called after ajax submit), since 1.4.0 To get currently selected items use `$.fn.editableutils.itemsByValue(value, sourceData)`. @property display @type function|boolean @default null @since 1.2.0 @example display: function(value, sourceData) { //display checklist as comma-separated values var html = [], checked = $.fn.editableutils.itemsByValue(value, sourceData); if(checked.length) { $.each(checked, function(i, v) { html.push($.fn.editableutils.escape(v.text)); }); $(this).html(html.join(', ')); } else { $(this).empty(); } } **/ display: null, /** Css class applied when editable text is empty. @property emptyclass @type string @since 1.4.1 @default editable-empty **/ emptyclass: 'editable-empty', /** Css class applied when value was stored but not sent to server (`pk` is empty or `send = 'never'`). You may set it to `null` if you work with editables locally and submit them together. @property unsavedclass @type string @since 1.4.1 @default editable-unsaved **/ unsavedclass: 'editable-unsaved', /** If selector is provided, editable will be delegated to the specified targets. Usefull for dynamically generated DOM elements. **Please note**, that delegated targets can't be initialized with `emptytext` and `autotext` options, as they actually become editable only after first click. You should manually set class `editable-click` to these elements. Also, if element originally empty you should add class `editable-empty`, set `data-value=""` and write emptytext into element: @property selector @type string @since 1.4.1 @default null @example **/ selector: null, /** Color used to highlight element after update. Implemented via CSS3 transition, works in modern browsers. @property highlight @type string|boolean @since 1.4.5 @default #FFFF80 **/ highlight: '#FFFF80' }; }(window.jQuery)); /** AbstractInput - base class for all editable inputs. It defines interface to be implemented by any input type. To create your own input you can inherit from this class. @class abstractinput **/ (function ($) { "use strict"; //types $.fn.editabletypes = {}; var AbstractInput = function () { }; AbstractInput.prototype = { /** Initializes input @method init() **/ init: function(type, options, defaults) { this.type = type; this.options = $.extend({}, defaults, options); }, /* this method called before render to init $tpl that is inserted in DOM */ prerender: function() { this.$tpl = $(this.options.tpl); //whole tpl as jquery object this.$input = this.$tpl; //control itself, can be changed in render method this.$clear = null; //clear button this.error = null; //error message, if input cannot be rendered }, /** Renders input from tpl. Can return jQuery deferred object. Can be overwritten in child objects @method render() **/ render: function() { }, /** Sets element's html by value. @method value2html(value, element) @param {mixed} value @param {DOMElement} element **/ value2html: function(value, element) { $(element)[this.options.escape ? 'text' : 'html']($.trim(value)); }, /** Converts element's html to value @method html2value(html) @param {string} html @returns {mixed} **/ html2value: function(html) { return $('
      ').html(html).text(); }, /** Converts value to string (for internal compare). For submitting to server used value2submit(). @method value2str(value) @param {mixed} value @returns {string} **/ value2str: function(value) { return value; }, /** Converts string received from server into value. Usually from `data-value` attribute. @method str2value(str) @param {string} str @returns {mixed} **/ str2value: function(str) { return str; }, /** Converts value for submitting to server. Result can be string or object. @method value2submit(value) @param {mixed} value @returns {mixed} **/ value2submit: function(value) { return value; }, /** Sets value of input. @method value2input(value) @param {mixed} value **/ value2input: function(value) { this.$input.val(value); }, /** Returns value of input. Value can be object (e.g. datepicker) @method input2value() **/ input2value: function() { return this.$input.val(); }, /** Activates input. For text it sets focus. @method activate() **/ activate: function() { if(this.$input.is(':visible')) { this.$input.focus(); } }, /** Creates input. @method clear() **/ clear: function() { this.$input.val(null); }, /** method to escape html. **/ escape: function(str) { return $('
      ').text(str).html(); }, /** attach handler to automatically submit form when value changed (useful when buttons not shown) **/ autosubmit: function() { }, /** Additional actions when destroying element **/ destroy: function() { }, // -------- helper functions -------- setClass: function() { if(this.options.inputclass) { this.$input.addClass(this.options.inputclass); } }, setAttr: function(attr) { if (this.options[attr] !== undefined && this.options[attr] !== null) { this.$input.attr(attr, this.options[attr]); } }, option: function(key, value) { this.options[key] = value; } }; AbstractInput.defaults = { /** HTML template of input. Normally you should not change it. @property tpl @type string @default '' **/ tpl: '', /** CSS class automatically applied to input @property inputclass @type string @default null **/ inputclass: null, /** If `true` - html will be escaped in content of element via $.text() method. If `false` - html will not be escaped, $.html() used. When you use own `display` function, this option obviosly has no effect. @property escape @type boolean @since 1.5.0 @default true **/ escape: true, //scope for external methods (e.g. source defined as function) //for internal use only scope: null, //need to re-declare showbuttons here to get it's value from common config (passed only options existing in defaults) showbuttons: true }; $.extend($.fn.editabletypes, {abstractinput: AbstractInput}); }(window.jQuery)); /** List - abstract class for inputs that have source option loaded from js array or via ajax @class list @extends abstractinput **/ (function ($) { "use strict"; var List = function (options) { }; $.fn.editableutils.inherit(List, $.fn.editabletypes.abstractinput); $.extend(List.prototype, { render: function () { var deferred = $.Deferred(); this.error = null; this.onSourceReady(function () { this.renderList(); deferred.resolve(); }, function () { this.error = this.options.sourceError; deferred.resolve(); }); return deferred.promise(); }, html2value: function (html) { return null; //can't set value by text }, value2html: function (value, element, display, response) { var deferred = $.Deferred(), success = function () { if(typeof display === 'function') { //custom display method display.call(element, value, this.sourceData, response); } else { this.value2htmlFinal(value, element); } deferred.resolve(); }; //for null value just call success without loading source if(value === null) { success.call(this); } else { this.onSourceReady(success, function () { deferred.resolve(); }); } return deferred.promise(); }, // ------------- additional functions ------------ onSourceReady: function (success, error) { //run source if it function var source; if ($.isFunction(this.options.source)) { source = this.options.source.call(this.options.scope); this.sourceData = null; //note: if function returns the same source as URL - sourceData will be taken from cahce and no extra request performed } else { source = this.options.source; } //if allready loaded just call success if(this.options.sourceCache && $.isArray(this.sourceData)) { success.call(this); return; } //try parse json in single quotes (for double quotes jquery does automatically) try { source = $.fn.editableutils.tryParseJson(source, false); } catch (e) { error.call(this); return; } //loading from url if (typeof source === 'string') { //try to get sourceData from cache if(this.options.sourceCache) { var cacheID = source, cache; if (!$(document).data(cacheID)) { $(document).data(cacheID, {}); } cache = $(document).data(cacheID); //check for cached data if (cache.loading === false && cache.sourceData) { //take source from cache this.sourceData = cache.sourceData; this.doPrepend(); success.call(this); return; } else if (cache.loading === true) { //cache is loading, put callback in stack to be called later cache.callbacks.push($.proxy(function () { this.sourceData = cache.sourceData; this.doPrepend(); success.call(this); }, this)); //also collecting error callbacks cache.err_callbacks.push($.proxy(error, this)); return; } else { //no cache yet, activate it cache.loading = true; cache.callbacks = []; cache.err_callbacks = []; } } //ajaxOptions for source. Can be overwritten bt options.sourceOptions var ajaxOptions = $.extend({ url: source, type: 'get', cache: false, dataType: 'json', success: $.proxy(function (data) { if(cache) { cache.loading = false; } this.sourceData = this.makeArray(data); if($.isArray(this.sourceData)) { if(cache) { //store result in cache cache.sourceData = this.sourceData; //run success callbacks for other fields waiting for this source $.each(cache.callbacks, function () { this.call(); }); } this.doPrepend(); success.call(this); } else { error.call(this); if(cache) { //run error callbacks for other fields waiting for this source $.each(cache.err_callbacks, function () { this.call(); }); } } }, this), error: $.proxy(function () { error.call(this); if(cache) { cache.loading = false; //run error callbacks for other fields $.each(cache.err_callbacks, function () { this.call(); }); } }, this) }, this.options.sourceOptions); //loading sourceData from server $.ajax(ajaxOptions); } else { //options as json/array this.sourceData = this.makeArray(source); if($.isArray(this.sourceData)) { this.doPrepend(); success.call(this); } else { error.call(this); } } }, doPrepend: function () { if(this.options.prepend === null || this.options.prepend === undefined) { return; } if(!$.isArray(this.prependData)) { //run prepend if it is function (once) if ($.isFunction(this.options.prepend)) { this.options.prepend = this.options.prepend.call(this.options.scope); } //try parse json in single quotes this.options.prepend = $.fn.editableutils.tryParseJson(this.options.prepend, true); //convert prepend from string to object if (typeof this.options.prepend === 'string') { this.options.prepend = {'': this.options.prepend}; } this.prependData = this.makeArray(this.options.prepend); } if($.isArray(this.prependData) && $.isArray(this.sourceData)) { this.sourceData = this.prependData.concat(this.sourceData); } }, /* renders input list */ renderList: function() { // this method should be overwritten in child class }, /* set element's html by value */ value2htmlFinal: function(value, element) { // this method should be overwritten in child class }, /** * convert data to array suitable for sourceData, e.g. [{value: 1, text: 'abc'}, {...}] */ makeArray: function(data) { var count, obj, result = [], item, iterateItem; if(!data || typeof data === 'string') { return null; } if($.isArray(data)) { //array /* function to iterate inside item of array if item is object. Caclulates count of keys in item and store in obj. */ iterateItem = function (k, v) { obj = {value: k, text: v}; if(count++ >= 2) { return false;// exit from `each` if item has more than one key. } }; for(var i = 0; i < data.length; i++) { item = data[i]; if(typeof item === 'object') { count = 0; //count of keys inside item $.each(item, iterateItem); //case: [{val1: 'text1'}, {val2: 'text2} ...] if(count === 1) { result.push(obj); //case: [{value: 1, text: 'text1'}, {value: 2, text: 'text2'}, ...] } else if(count > 1) { //removed check of existance: item.hasOwnProperty('value') && item.hasOwnProperty('text') if(item.children) { item.children = this.makeArray(item.children); } result.push(item); } } else { //case: ['text1', 'text2' ...] result.push({value: item, text: item}); } } } else { //case: {val1: 'text1', val2: 'text2, ...} $.each(data, function (k, v) { result.push({value: k, text: v}); }); } return result; }, option: function(key, value) { this.options[key] = value; if(key === 'source') { this.sourceData = null; } if(key === 'prepend') { this.prependData = null; } } }); List.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, { /** Source data for list. If **array** - it should be in format: `[{value: 1, text: "text1"}, {value: 2, text: "text2"}, ...]` For compability, object format is also supported: `{"1": "text1", "2": "text2" ...}` but it does not guarantee elements order. If **string** - considered ajax url to load items. In that case results will be cached for fields with the same source and name. See also `sourceCache` option. If **function**, it should return data in format above (since 1.4.0). Since 1.4.1 key `children` supported to render OPTGROUP (for **select** input only). `[{text: "group1", children: [{value: 1, text: "text1"}, {value: 2, text: "text2"}]}, ...]` @property source @type string | array | object | function @default null **/ source: null, /** Data automatically prepended to the beginning of dropdown list. @property prepend @type string | array | object | function @default false **/ prepend: false, /** Error message when list cannot be loaded (e.g. ajax error) @property sourceError @type string @default Error when loading list **/ sourceError: 'Error when loading list', /** if true and source is **string url** - results will be cached for fields with the same source. Usefull for editable column in grid to prevent extra requests. @property sourceCache @type boolean @default true @since 1.2.0 **/ sourceCache: true, /** Additional ajax options to be used in $.ajax() when loading list from server. Useful to send extra parameters (`data` key) or change request method (`type` key). @property sourceOptions @type object|function @default null @since 1.5.0 **/ sourceOptions: null }); $.fn.editabletypes.list = List; }(window.jQuery)); /** Text input @class text @extends abstractinput @final @example awesome **/ (function ($) { "use strict"; var Text = function (options) { this.init('text', options, Text.defaults); }; $.fn.editableutils.inherit(Text, $.fn.editabletypes.abstractinput); $.extend(Text.prototype, { render: function() { this.renderClear(); this.setClass(); this.setAttr('placeholder'); }, activate: function() { if(this.$input.is(':visible')) { this.$input.focus(); $.fn.editableutils.setCursorPosition(this.$input.get(0), this.$input.val().length); if(this.toggleClear) { this.toggleClear(); } } }, //render clear button renderClear: function() { if (this.options.clear) { this.$clear = $(''); this.$input.after(this.$clear) .css('padding-right', 24) .keyup($.proxy(function(e) { //arrows, enter, tab, etc if(~$.inArray(e.keyCode, [40,38,9,13,27])) { return; } clearTimeout(this.t); var that = this; this.t = setTimeout(function() { that.toggleClear(e); }, 100); }, this)) .parent().css('position', 'relative'); this.$clear.click($.proxy(this.clear, this)); } }, postrender: function() { /* //now `clear` is positioned via css if(this.$clear) { //can position clear button only here, when form is shown and height can be calculated // var h = this.$input.outerHeight(true) || 20, var h = this.$clear.parent().height(), delta = (h - this.$clear.height()) / 2; //this.$clear.css({bottom: delta, right: delta}); } */ }, //show / hide clear button toggleClear: function(e) { if(!this.$clear) { return; } var len = this.$input.val().length, visible = this.$clear.is(':visible'); if(len && !visible) { this.$clear.show(); } if(!len && visible) { this.$clear.hide(); } }, clear: function() { this.$clear.hide(); this.$input.val('').focus(); } }); Text.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, { /** @property tpl @default **/ tpl: '', /** Placeholder attribute of input. Shown when input is empty. @property placeholder @type string @default null **/ placeholder: null, /** Whether to show `clear` button @property clear @type boolean @default true **/ clear: true }); $.fn.editabletypes.text = Text; }(window.jQuery)); /** Textarea input @class textarea @extends abstractinput @final @example awesome comment! **/ (function ($) { "use strict"; var Textarea = function (options) { this.init('textarea', options, Textarea.defaults); }; $.fn.editableutils.inherit(Textarea, $.fn.editabletypes.abstractinput); $.extend(Textarea.prototype, { render: function () { this.setClass(); this.setAttr('placeholder'); this.setAttr('rows'); //ctrl + enter this.$input.keydown(function (e) { if (e.ctrlKey && e.which === 13) { $(this).closest('form').submit(); } }); }, //using `white-space: pre-wrap` solves \n <--> BR conversion very elegant! /* value2html: function(value, element) { var html = '', lines; if(value) { lines = value.split("\n"); for (var i = 0; i < lines.length; i++) { lines[i] = $('
      ').text(lines[i]).html(); } html = lines.join('
      '); } $(element).html(html); }, html2value: function(html) { if(!html) { return ''; } var regex = new RegExp(String.fromCharCode(10), 'g'); var lines = html.split(//i); for (var i = 0; i < lines.length; i++) { var text = $('
      ').html(lines[i]).text(); // Remove newline characters (\n) to avoid them being converted by value2html() method // thus adding extra
      tags text = text.replace(regex, ''); lines[i] = text; } return lines.join("\n"); }, */ activate: function() { $.fn.editabletypes.text.prototype.activate.call(this); } }); Textarea.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, { /** @property tpl @default **/ tpl:'', /** @property inputclass @default input-large **/ inputclass: 'input-large', /** Placeholder attribute of input. Shown when input is empty. @property placeholder @type string @default null **/ placeholder: null, /** Number of rows in textarea @property rows @type integer @default 7 **/ rows: 7 }); $.fn.editabletypes.textarea = Textarea; }(window.jQuery)); /** Select (dropdown) @class select @extends list @final @example **/ (function ($) { "use strict"; var Select = function (options) { this.init('select', options, Select.defaults); }; $.fn.editableutils.inherit(Select, $.fn.editabletypes.list); $.extend(Select.prototype, { renderList: function() { this.$input.empty(); var fillItems = function($el, data) { var attr; if($.isArray(data)) { for(var i=0; i', attr), data[i].children)); } else { attr.value = data[i].value; if(data[i].disabled) { attr.disabled = true; } $el.append($('
      '); } if (!open) { open = active = true; // Prevents the page-change action from queuing up if the visitor holds down the left or right keys. // Show colorbox so the sizes can be calculated in older versions of jQuery $box.css({visibility:'hidden', display:'block'}); $loaded = $tag(div, 'LoadedContent', 'width:0; height:0; overflow:hidden'); $content.css({width:'', height:''}).append($loaded); // Cache values needed for size calculations interfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(true) - $content.height(); interfaceWidth = $leftBorder.width() + $rightBorder.width() + $content.outerWidth(true) - $content.width(); loadedHeight = $loaded.outerHeight(true); loadedWidth = $loaded.outerWidth(true); // Opens inital empty Colorbox prior to content being loaded. settings.w = setSize(settings.initialWidth, 'x'); settings.h = setSize(settings.initialHeight, 'y'); $loaded.css({width:'', height:settings.h}); publicMethod.position(); trigger(event_open, settings.onOpen); $groupControls.add($title).hide(); $box.focus(); if (settings.trapFocus) { // Confine focus to the modal // Uses event capturing that is not supported in IE8- if (document.addEventListener) { document.addEventListener('focus', trapFocus, true); $events.one(event_closed, function () { document.removeEventListener('focus', trapFocus, true); }); } } // Return focus on closing if (settings.returnFocus) { $events.one(event_closed, function () { $(element).focus(); }); } } load(); } } // Colorbox's markup needs to be added to the DOM prior to being called // so that the browser will go ahead and load the CSS background images. function appendHTML() { if (!$box && document.body) { init = false; $window = $(window); $box = $tag(div).attr({ id: colorbox, 'class': $.support.opacity === false ? prefix + 'IE' : '', // class for optional IE8 & lower targeted CSS. role: 'dialog', tabindex: '-1' }).hide(); $overlay = $tag(div, "Overlay").hide(); $loadingOverlay = $([$tag(div, "LoadingOverlay")[0],$tag(div, "LoadingGraphic")[0]]); $wrap = $tag(div, "Wrapper"); $content = $tag(div, "Content").append( $title = $tag(div, "Title"), $current = $tag(div, "Current"), $prev = $('