From b1d33caf660dc63e9dd487bc21f2e18862254da2 Mon Sep 17 00:00:00 2001 From: Dalmon Ian Martins de Oliveira <dimo13@c3sl.ufpr.br> Date: Tue, 5 Aug 2014 12:24:57 +0000 Subject: [PATCH] Updating source code Signed-off-by: Dalmon Ian Martins de Oliveira <dimo13@c3sl.ufpr.br> --- .../org/dspace/app/bulkedit/package-info.java | 22 + .../app/itemimport/BTEBatchImportService.java | 93 + .../dspace/app/launcher/CommandRunner.java | 107 + .../app/requestitem/RequestItemAuthor.java | 34 + .../RequestItemAuthorExtractor.java | 25 + .../RequestItemMetadataStrategy.java | 75 + .../RequestItemSubmitterStrategy.java | 36 + .../java/org/dspace/app/sfx/package-info.java | 16 + .../org/dspace/app/sherpa/SHERPAJournal.java | 56 + .../dspace/app/sherpa/SHERPAPublisher.java | 183 + .../org/dspace/app/sherpa/SHERPAResponse.java | 223 + .../org/dspace/app/sherpa/SHERPAService.java | 67 + .../app/sherpa/submit/ISSNItemExtractor.java | 18 + .../MetadataAuthorityISSNExtractor.java | 40 + .../submit/MetadataValueISSNExtractor.java | 40 + .../SHERPASubmitConfigurationService.java | 25 + .../sherpa/submit/SHERPASubmitService.java | 90 + .../dspace/app/util/AbstractDSpaceWebapp.java | 191 + .../dspace/app/util/CollectionDropDown.java | 74 + .../dspace/app/util/DSpaceWebappMXBean.java | 29 + .../java/org/dspace/app/util/Version.java | 105 + .../java/org/dspace/app/util/XMLUtils.java | 192 + .../org/dspace/app/util/package-info.java | 15 + .../org/dspace/browse/ItemCountDAOSolr.java | 189 + .../java/org/dspace/core/LicenseManager.java | 211 + .../java/org/dspace/core/NewsManager.java | 116 + .../ctask/general/MetadataWebService.java | 543 ++ .../SolrServiceSpellIndexingPlugin.java | 36 + ...ltiRemoteDSpaceRepositoryHandlePlugin.java | 734 ++ .../main/java/org/dspace/identifier/DOI.java | 104 + .../identifier/DOIIdentifierProvider.java | 936 +++ .../identifier/EZIDIdentifierProvider.java | 702 ++ .../dspace/identifier/doi/DOIConnector.java | 103 + .../dspace/identifier/doi/DOIConsumer.java | 108 + .../doi/DOIIdentifierException.java | 175 + .../dspace/identifier/doi/DOIOrganiser.java | 936 +++ .../identifier/doi/DataCiteConnector.java | 1066 +++ .../dspace/identifier/doi/package-info.java | 22 + .../dspace/identifier/ezid/DateToYear.java | 37 + .../dspace/identifier/ezid/EZIDRequest.java | 257 + .../identifier/ezid/EZIDRequestFactory.java | 66 + .../dspace/identifier/ezid/EZIDResponse.java | 173 + .../org/dspace/identifier/ezid/Transform.java | 23 + .../org/dspace/identifier/package-info.java | 17 + .../dspace/statistics/util/package-info.java | 15 + .../submit/lookup/ArXivFileDataLoader.java | 174 + .../submit/lookup/ArXivOnlineDataLoader.java | 98 + .../dspace/submit/lookup/ArXivService.java | 170 + .../org/dspace/submit/lookup/ArxivUtils.java | 160 + .../submit/lookup/CiNiiFileDataLoader.java | 172 + .../submit/lookup/CiNiiOnlineDataLoader.java | 120 + .../dspace/submit/lookup/CiNiiService.java | 221 + .../org/dspace/submit/lookup/CiNiiUtils.java | 268 + .../submit/lookup/CrossRefFileDataLoader.java | 167 + .../lookup/CrossRefOnlineDataLoader.java | 130 + .../dspace/submit/lookup/CrossRefService.java | 219 + .../dspace/submit/lookup/CrossRefUtils.java | 231 + .../DSpaceWorkspaceItemOutputGenerator.java | 439 ++ .../submit/lookup/FieldMergeModifier.java | 75 + .../submit/lookup/LanguageCodeModifier.java | 89 + .../submit/lookup/LookupProvidersCheck.java | 45 + .../submit/lookup/MapConverterModifier.java | 214 + .../MultipleSubmissionLookupDataLoader.java | 341 + .../NetworkSubmissionLookupDataLoader.java | 185 + .../submit/lookup/PubmedFileDataLoader.java | 177 + .../submit/lookup/PubmedOnlineDataLoader.java | 139 + .../dspace/submit/lookup/PubmedService.java | 300 + .../org/dspace/submit/lookup/PubmedUtils.java | 347 + .../submit/lookup/RemoveLastDotModifier.java | 87 + .../lookup/SubmissionItemDataLoader.java | 118 + .../lookup/SubmissionLookupDataLoader.java | 57 + .../SubmissionLookupOutputGenerator.java | 107 + .../lookup/SubmissionLookupService.java | 225 + .../submit/lookup/SubmissionLookupUtils.java | 162 + .../lookup/ValueConcatenationModifier.java | 113 + .../step/StartSubmissionLookupStep.java | 311 + .../submit/util/ItemSubmissionLookupDTO.java | 111 + .../submit/util/SubmissionLookupDTO.java | 52 + .../util/SubmissionLookupPublication.java | 231 + .../src/main/resources/maven.properties | 9 + dspace-api/src/main/resources/scm.properties | 10 + ...ring-dspace-addon-requestitem-services.xml | 34 + ...ce-addon-sherpa-configuration-services.xml | 45 + .../spring-dspace-addon-sherpa-services.xml | 28 + .../spiders/agents/dspace-agents-testing.txt | 1 + .../domains/dspace-domains-testing.txt | 1 + .../config/spiders/dspace-address-testing.txt | 2 + .../discovery/MockIndexEventConsumer.java | 41 + .../identifier/DOIIdentifierProviderTest.java | 711 ++ .../EZIDIdentifierProviderTest.java | 411 + .../dspace/identifier/MockDOIConnector.java | 171 + .../util/DummyHttpServletRequest.java | 578 ++ .../statistics/util/SpiderDetectorTest.java | 170 + .../webui/components/CollectionItemList.java | 137 + .../components/RecentSiteSubmissions.java | 56 + .../TopCommunitiesSiteProcessor.java | 58 + .../webui/components/VersioningItemHome.java | 128 + .../app/webui/handle/HandleJSONResolver.java | 117 + .../json/SubmissionLookupJSONRequest.java | 430 ++ .../app/webui/json/UploadProgressJSON.java | 62 + .../app/webui/jsptag/AccessSettingTag.java | 391 + .../app/webui/jsptag/PoliciesListTag.java | 156 + .../servlet/BatchMetadataImportServlet.java | 174 + .../app/webui/servlet/RequestItemServlet.java | 538 ++ .../servlet/SHERPAPublisherPolicyServlet.java | 101 + .../webui/servlet/VersionHistoryServlet.java | 189 + .../app/webui/servlet/VersionItemServlet.java | 84 + .../webui/servlet/admin/CurateServlet.java | 440 ++ .../servlet/admin/PrivateItemsServlet.java | 160 + .../app/webui/submit/step/JSPAccessStep.java | 205 + .../step/JSPStartSubmissionLookupStep.java | 270 + .../submit/step/JSPUploadWithEmbargoStep.java | 458 ++ .../app/webui/util/CurateTaskResult.java | 78 + .../app/webui/util/FileUploadListener.java | 47 + .../app/webui/util/JSONUploadResponse.java | 57 + .../app/webui/util/RequestItemManager.java | 152 + .../dspace/app/webui/util/VersionUtil.java | 387 + .../java/org/dspace/utils/DSpaceWebapp.java | 31 + .../dspace-admin/batchmetadataimport.jsp | 99 + .../webapp/dspace-admin/curate-collection.jsp | 96 + .../webapp/dspace-admin/curate-community.jsp | 93 + .../main/webapp/dspace-admin/curate-item.jsp | 107 + .../main/webapp/dspace-admin/curate-main.jsp | 96 + .../webapp/dspace-admin/curate-message.jsp | 82 + .../dspace-admin/eperson-loginas-error.jsp | 36 + .../eperson-resetpassword-error.jsp | 40 + .../supervise-no-workspaceitem.jsp | 38 + .../main/webapp/image/dspace-logo-only.png | Bin 0 -> 3119 bytes .../main/webapp/image/logo-cineca-small.png | Bin 0 -> 3738 bytes dspace-jspui/src/main/webapp/image/logo.gif | Bin 0 -> 3068 bytes .../submission-lookup-small-arxiv-error.jpg | Bin 0 -> 5153 bytes .../image/submission-lookup-small-arxiv.jpg | Bin 0 -> 2002 bytes .../image/submission-lookup-small-bibtex.jpg | Bin 0 -> 1591 bytes .../submission-lookup-small-cinii-error.jpg | Bin 0 -> 1528 bytes .../image/submission-lookup-small-cinii.jpg | Bin 0 -> 6015 bytes ...submission-lookup-small-crossref-error.jpg | Bin 0 -> 3283 bytes .../submission-lookup-small-crossref.jpg | Bin 0 -> 1182 bytes .../image/submission-lookup-small-csv.jpg | Bin 0 -> 11700 bytes .../image/submission-lookup-small-endnote.jpg | Bin 0 -> 1694 bytes .../submission-lookup-small-pubmed-error.jpg | Bin 0 -> 4146 bytes .../image/submission-lookup-small-pubmed.jpg | Bin 0 -> 1469 bytes .../image/submission-lookup-small-ris.jpg | Bin 0 -> 2254 bytes .../image/submission-lookup-small-tsv.jpg | Bin 0 -> 11621 bytes .../main/webapp/layout/footer-submission.jsp | 14 + .../main/webapp/layout/header-submission.jsp | 166 + .../webapp/layout/legacy/footer-default.jsp | 69 + .../webapp/layout/legacy/footer-popup.jsp | 20 + .../webapp/layout/legacy/header-default.jsp | 180 + .../webapp/layout/legacy/header-popup.jsp | 73 + .../webapp/layout/legacy/location-bar.jsp | 59 + .../webapp/layout/legacy/navbar-admin.jsp | 209 + .../webapp/layout/legacy/navbar-default.jsp | 244 + .../src/main/webapp/layout/navbar-minimal.jsp | 99 + .../src/main/webapp/requestItem/item-send.jsp | 33 + .../main/webapp/requestItem/request-form.jsp | 113 + .../requestItem/request-free-access.jsp | 64 + .../requestItem/request-information.jsp | 62 + .../webapp/requestItem/request-letter.jsp | 72 + .../main/webapp/requestItem/request-send.jsp | 26 + .../main/webapp/requestItem/response-send.jsp | 33 + .../src/main/webapp/sherpa/css/sherpa.css | 40 + .../webapp/sherpa/image/ajax-loader-big.gif | Bin 0 -> 8238 bytes .../src/main/webapp/sherpa/image/can.gif | Bin 0 -> 188 bytes .../src/main/webapp/sherpa/image/cannot.gif | Bin 0 -> 953 bytes .../main/webapp/sherpa/image/restricted.gif | Bin 0 -> 542 bytes .../main/webapp/sherpa/image/romeosmall.gif | Bin 0 -> 3834 bytes .../src/main/webapp/sherpa/image/unclear.gif | Bin 0 -> 889 bytes .../src/main/webapp/sherpa/sherpa-policy.jsp | 136 + .../static/css/bootstrap/bootstrap-theme.css | 384 + .../css/bootstrap/bootstrap-theme.min.css | 1 + .../webapp/static/css/bootstrap/bootstrap.css | 6805 +++++++++++++++++ .../static/css/bootstrap/bootstrap.min.css | 9 + .../static/css/bootstrap/dspace-theme.css | 66 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 14079 bytes .../fonts/glyphicons-halflings-regular.svg | 228 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 29512 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 16448 bytes .../redmond/images/animated-overlay.gif | Bin 0 -> 1738 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 212 bytes .../images/ui-bg_flat_55_fbec88_40x100.png | Bin 0 -> 206 bytes .../images/ui-bg_glass_75_d0e5f5_1x400.png | Bin 0 -> 336 bytes .../images/ui-bg_glass_85_dfeffc_1x400.png | Bin 0 -> 341 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 332 bytes .../ui-bg_gloss-wave_55_5c9ccc_500x100.png | Bin 0 -> 5824 bytes .../ui-bg_inset-hard_100_f5f8f9_1x100.png | Bin 0 -> 333 bytes .../ui-bg_inset-hard_100_fcfdfd_1x100.png | Bin 0 -> 292 bytes .../images/ui-icons_217bc0_256x240.png | Bin 0 -> 4549 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4549 bytes .../images/ui-icons_469bdd_256x240.png | Bin 0 -> 4549 bytes .../images/ui-icons_6da8d5_256x240.png | Bin 0 -> 4549 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4549 bytes .../images/ui-icons_d8e7f3_256x240.png | Bin 0 -> 4549 bytes .../images/ui-icons_f9bd01_256x240.png | Bin 0 -> 4549 bytes .../redmond/jquery-ui-1.10.3.custom.css | 1177 +++ .../redmond/jquery-ui-1.10.3.custom.min.css | 5 + .../css/jquery.fileupload-ui-noscript.css | 27 + .../static/css/jquery.fileupload-ui.css | 68 + .../webapp/static/js/bootstrap/bootstrap.js | 2006 +++++ .../static/js/bootstrap/bootstrap.min.js | 13 + .../src/main/webapp/static/js/holder.js | 426 ++ .../src/main/webapp/static/js/html5shiv.js | 15 + .../static/js/jquery/jquery-1.10.2.min.js | 6 + .../js/jquery/jquery-ui-1.10.3.custom.min.js | 7 + .../src/main/webapp/static/js/respond.min.js | 11 + .../webapp/static/js/submission-lookup.js | 288 + .../src/main/webapp/submit/access-step.js | 24 + .../src/main/webapp/submit/access-step.jsp | 118 + .../webapp/submit/edit-bitstream-access.jsp | 96 + .../src/main/webapp/submit/edit-policy.jsp | 69 + .../src/main/webapp/submit/review-policy.jsp | 96 + .../webapp/submit/start-lookup-submission.jsp | 469 ++ .../webapp/tools/confirm-privating-item.jsp | 64 + .../main/webapp/tools/curate-collection.jsp | 95 + .../main/webapp/tools/curate-community.jsp | 95 + .../src/main/webapp/tools/curate-item.jsp | 105 + .../src/main/webapp/tools/curate-message.jsp | 82 + .../src/main/webapp/tools/version-history.jsp | 121 + .../src/main/webapp/tools/version-summary.jsp | 47 + .../webapp/tools/version-update-summary.jsp | 53 + .../org/dspace/services/EmailService.java | 23 + .../services/email/EmailServiceImpl.java | 138 + .../dspace/services/email/package-info.java | 13 + .../services/email/EmailServiceImplTest.java | 102 + .../org/dspace/sword2/AbstractSimpleDC.java | 97 + .../org/dspace/sword2/SimpleDCMetadata.java | 38 + .../sword2/SwordMETSPackageIngester.java | 47 + .../sword2/WorkflowManagerUnrestricted.java | 209 + .../DiscoverySearchRequestProcessor.java | 47 + .../mapper/LuceneSearchRequestProcessor.java | 47 + .../mapper/SearchRequestProcessor.java | 38 + .../artifactbrowser/FrontPageFeeds.java | 87 + .../ItemRequestChangeStatusForm.java | 148 + .../artifactbrowser/ItemRequestForm.java | 192 + .../ItemRequestResponseAction.java | 202 + .../ItemRequestResponseDecisionForm.java | 112 + .../ItemRequestResponseFalseForm.java | 162 + .../ItemRequestResponseTrueForm.java | 157 + .../artifactbrowser/ItemRequestSent.java | 91 + .../ItemRequestStatusChanged.java | 107 + .../SendItemRequestAction.java | 210 + .../browseArtifacts/CollectionBrowse.java | 93 + .../browseArtifacts/CommunityBrowse.java | 93 + .../RecentSubmissionTransformer.java | 210 + .../RecentSubmissionUtils.java | 79 + .../aspect/general/ConfigurationMatcher.java | 87 + .../aspect/handle/HandleResolverReader.java | 162 + .../ContainerHomePageMatcher.java | 66 + .../java/org/dspace/utils/DSpaceWebapp.java | 31 + .../src/main/webapp/static/icons/lock.gif | Bin 0 -> 667 bytes .../src/main/webapp/static/icons/lock24.png | Bin 0 -> 904 bytes .../images/creativecommons/cc-by-nc-nd.png | Bin 0 -> 5281 bytes .../images/creativecommons/cc-by-nc-sa.png | Bin 0 -> 5460 bytes .../images/creativecommons/cc-by-nc.png | Bin 0 -> 5145 bytes .../images/creativecommons/cc-by-nd.png | Bin 0 -> 4880 bytes .../images/creativecommons/cc-by-sa.png | Bin 0 -> 5083 bytes .../Mirage/images/creativecommons/cc-by.png | Bin 0 -> 4739 bytes .../images/creativecommons/cc-generic.png | Bin 0 -> 1798 bytes .../Mirage/images/creativecommons/cc-mark.png | Bin 0 -> 1047 bytes .../Mirage/images/creativecommons/cc-zero.png | Bin 0 -> 1124 bytes dspace/config/crosswalks/DIM2DataCite.xsl | 439 ++ .../mapConverter-arxivSubject.properties | 127 + .../mapConverter-pubstatusPubmed.properties | 2 + dspace/config/emails/bte_batch_import_error | 19 + dspace/config/emails/bte_batch_import_success | 15 + dspace/config/emails/doi_maintenance_error | 18 + dspace/config/emails/request_item.admin | 8 + dspace/config/emails/request_item.author | 17 + dspace/config/log4j-solr.properties | 24 + dspace/config/modules/rest.cfg | 8 + dspace/config/registries/dcterms-types.xml | 369 + dspace/config/spiders/agents/example | 224 + dspace/config/spiders/domains/example | 12 + dspace/config/spring/api/requestitem.xml | 34 + dspace/config/spring/api/sherpa.xml | 45 + dspace/etc/oracle/database_schema_3-4.sql | 90 + dspace/etc/postgres/database_schema_3-4.sql | 93 + .../org/dspace/app/util/SyndicationFeed.java | 640 ++ .../src/main/resources/Messages.properties | 1849 +++++ .../main/resources/Messages_pt_BR.properties | 1843 +++++ dspace/modules/rest/pom.xml | 108 + .../modules/rest/src/main/webapp/.gitignore | 0 .../Participatorio-desktop.xsl | 46 + .../images/@mirelogo-small.png | Bin 0 -> 6022 bytes .../Crystal_Clear_action_lock3_64px.png | Bin 0 -> 4289 bytes .../images/apple-touch-icon.png | Bin 0 -> 3808 bytes .../images/arrow_down_ffffff_16x16.png | Bin 0 -> 3125 bytes .../images/arrow_up_ffffff_16x16.png | Bin 0 -> 3125 bytes .../confidence/2-errortriangle.gif | Bin 0 -> 587 bytes .../confidence/2-lightning.gif | Bin 0 -> 320 bytes .../confidence/2-warntriangle.gif | Bin 0 -> 595 bytes .../confidence/3-circleslash.gif | Bin 0 -> 626 bytes .../authority_control/confidence/3-flag.gif | Bin 0 -> 546 bytes .../authority_control/confidence/3-thumb1.gif | Bin 0 -> 1074 bytes .../authority_control/confidence/3-thumb2.gif | Bin 0 -> 599 bytes .../confidence/4-question.gif | Bin 0 -> 537 bytes .../authority_control/confidence/4-star.gif | Bin 0 -> 579 bytes .../authority_control/confidence/5-pinion.gif | Bin 0 -> 628 bytes .../authority_control/confidence/5-star.gif | Bin 0 -> 558 bytes .../confidence/6-greencheck.gif | Bin 0 -> 1057 bytes .../authority_control/confidence/6-star.gif | Bin 0 -> 588 bytes .../authority_control/confidence/6-thumb1.gif | Bin 0 -> 1063 bytes .../authority_control/confidence/6-thumb2.gif | Bin 0 -> 599 bytes .../authority_control/confidence/bug.png | Bin 0 -> 774 bytes .../authority_control/confidence/readme.txt | 53 + .../images/authority_control/invisible.gif | Bin 0 -> 43 bytes .../images/authority_control/lock24.png | Bin 0 -> 904 bytes .../authority_control/lookup-indicator.gif | Bin 0 -> 3208 bytes .../authority_control/suggest-indicator.gif | Bin 0 -> 673 bytes .../images/authority_control/unlock24.png | Bin 0 -> 905 bytes .../images/button_minus.png | Bin 0 -> 3388 bytes .../images/button_plus.png | Bin 0 -> 3455 bytes .../Participatorio-desktop/images/cc-ship.gif | Bin 0 -> 1376 bytes .../images/check_606060_15x15.png | Bin 0 -> 2972 bytes .../voc_closed_222222.png | Bin 0 -> 196 bytes .../controlledvocabulary/voc_doc_222222.png | Bin 0 -> 199 bytes .../controlledvocabulary/voc_open_222222.png | Bin 0 -> 210 bytes .../images/creativecommons/cc-by-nc-nd.png | Bin 0 -> 5281 bytes .../images/creativecommons/cc-by-nc-sa.png | Bin 0 -> 5460 bytes .../images/creativecommons/cc-by-nc.png | Bin 0 -> 5145 bytes .../images/creativecommons/cc-by-nd.png | Bin 0 -> 4880 bytes .../images/creativecommons/cc-by-sa.png | Bin 0 -> 5083 bytes .../images/creativecommons/cc-by.png | Bin 0 -> 4739 bytes .../images/creativecommons/cc-generic.png | Bin 0 -> 1798 bytes .../images/creativecommons/cc-mark.png | Bin 0 -> 1047 bytes .../images/creativecommons/cc-zero.png | Bin 0 -> 1124 bytes .../images/dspace-logo-only.png | Bin 0 -> 3119 bytes .../Participatorio-desktop/images/favicon.ico | Bin 0 -> 318 bytes .../images/gear_6D859C_25x25.png | Bin 0 -> 3200 bytes .../images/gear_ffffff_25x25.png | Bin 0 -> 3135 bytes .../images/information.png | Bin 0 -> 778 bytes .../jquery_ui/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 87 bytes .../ui-bg_flat_100_b6c8d9_40x100.png | Bin 0 -> 87 bytes .../ui-bg_flat_100_fff2f2_40x100.png | Bin 0 -> 87 bytes .../ui-bg_flat_100_ffffff_40x100.png | Bin 0 -> 87 bytes .../jquery_ui/ui-bg_flat_70_000000_40x100.png | Bin 0 -> 87 bytes .../jquery_ui/ui-bg_flat_75_1f3f5e_40x100.png | Bin 0 -> 87 bytes .../jquery_ui/ui-bg_flat_75_f0f2f5_40x100.png | Bin 0 -> 87 bytes .../jquery_ui/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../jquery_ui/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 99 bytes .../jquery_ui/ui-icons_2e83ff_256x240.png | Bin 0 -> 4193 bytes .../jquery_ui/ui-icons_444444_256x240.png | Bin 0 -> 4193 bytes .../jquery_ui/ui-icons_c22121_256x240.png | Bin 0 -> 5103 bytes .../jquery_ui/ui-icons_ffffff_256x240.png | Bin 0 -> 4193 bytes .../Participatorio-desktop/images/mime.png | Bin 0 -> 3082 bytes .../images/search_icon_ffffff_20x20.png | Bin 0 -> 3100 bytes .../lib/css/HTML5Doctor_CSS_Reset.LICENSE | 6 + .../lib/css/authority-control.css | 83 + .../Participatorio-desktop/lib/css/base.css | 81 + .../lib/css/handheld.css | 14 + .../Participatorio-desktop/lib/css/helper.css | 35 + .../lib/css/jquery-ui-1.8.15.custom.css | 568 ++ .../Participatorio-desktop/lib/css/media.css | 29 + .../Participatorio-desktop/lib/css/print.css | 34 + .../Participatorio-desktop/lib/css/reset.css | 87 + .../Participatorio-desktop/lib/css/style.css | 1395 ++++ .../lib/css/yui.LICENSE | 15 + .../lib/js/DD_belatedPNG.LICENSE | 24 + .../lib/js/DD_belatedPNG_0.0.8a.js | 329 + .../lib/js/choice-support.js | 562 ++ .../lib/js/jquery-ui-1.8.15.custom.min.js | 790 ++ .../lib/js/jquery-ui.LICENSE | 26 + .../lib/js/modernizr-1.7.min.js | 2 + .../lib/js/modernizr.LICENSE | 24 + .../lib/xsl/HTML5Boilerplate.LICENSE | 24 + .../aspect/administrative/administrative.xsl | 131 + .../artifactbrowser/collection-list.xsl | 106 + .../aspect/artifactbrowser/community-list.xsl | 108 + .../xsl/aspect/artifactbrowser/item-list.xsl | 268 + .../xsl/aspect/artifactbrowser/item-view.xsl | 560 ++ .../general/choice-authority-control.xsl | 410 + .../lib/xsl/core/attribute-handlers.xsl | 208 + .../lib/xsl/core/elements.xsl | 95 + .../lib/xsl/core/forms.xsl | 318 + .../lib/xsl/core/global-variables.xsl | 42 + .../lib/xsl/core/navigation.xsl | 200 + .../lib/xsl/core/page-structure.xsl | 784 ++ .../lib/xsl/core/utils.xsl | 69 + .../Participatorio-desktop/sitemap.xmap | 169 + .../Participatorio-mobile.xsl | 1059 +++ .../Participatorio-mobile/lib/cookies.js | 47 + .../lib/detectmobile.LICENSE | 24 + .../Participatorio-mobile/lib/detectmobile.js | 15 + .../lib/images/ajax-loader.gif | Bin 0 -> 7825 bytes .../lib/images/default-thumbnail.png | Bin 0 -> 5632 bytes .../lib/images/icons-18-black.png | Bin 0 -> 1767 bytes .../lib/images/icons-18-white.png | Bin 0 -> 1806 bytes .../lib/images/icons-36-black.png | Bin 0 -> 3611 bytes .../lib/images/icons-36-white.png | Bin 0 -> 3648 bytes .../Participatorio-mobile/lib/m-tweaks.css | 603 ++ .../Participatorio-mobile/lib/m-tweaks.js | 0 .../Participatorio-mobile/lib/m-tweaks.ori | 348 + .../lib/sc-mobile.LICENSE | 27 + .../Participatorio-mobile/lib/sc-mobile.css | 906 +++ .../lib/sc-mobile.min.css | 9 + .../themes/Participatorio-mobile/readme.txt | 88 + .../themes/Participatorio-mobile/sitemap.xmap | 96 + .../themes/Participatorio-mobile/themes.xmap | 61 + .../xmlui/src/main/webapp/themes/themes.xmap | 62 + 398 files changed, 57085 insertions(+) create mode 100644 dspace-api/src/main/java/org/dspace/app/bulkedit/package-info.java create mode 100644 dspace-api/src/main/java/org/dspace/app/itemimport/BTEBatchImportService.java create mode 100644 dspace-api/src/main/java/org/dspace/app/launcher/CommandRunner.java create mode 100644 dspace-api/src/main/java/org/dspace/app/requestitem/RequestItemAuthor.java create mode 100644 dspace-api/src/main/java/org/dspace/app/requestitem/RequestItemAuthorExtractor.java create mode 100644 dspace-api/src/main/java/org/dspace/app/requestitem/RequestItemMetadataStrategy.java create mode 100644 dspace-api/src/main/java/org/dspace/app/requestitem/RequestItemSubmitterStrategy.java create mode 100644 dspace-api/src/main/java/org/dspace/app/sfx/package-info.java create mode 100644 dspace-api/src/main/java/org/dspace/app/sherpa/SHERPAJournal.java create mode 100644 dspace-api/src/main/java/org/dspace/app/sherpa/SHERPAPublisher.java create mode 100644 dspace-api/src/main/java/org/dspace/app/sherpa/SHERPAResponse.java create mode 100644 dspace-api/src/main/java/org/dspace/app/sherpa/SHERPAService.java create mode 100644 dspace-api/src/main/java/org/dspace/app/sherpa/submit/ISSNItemExtractor.java create mode 100644 dspace-api/src/main/java/org/dspace/app/sherpa/submit/MetadataAuthorityISSNExtractor.java create mode 100644 dspace-api/src/main/java/org/dspace/app/sherpa/submit/MetadataValueISSNExtractor.java create mode 100644 dspace-api/src/main/java/org/dspace/app/sherpa/submit/SHERPASubmitConfigurationService.java create mode 100644 dspace-api/src/main/java/org/dspace/app/sherpa/submit/SHERPASubmitService.java create mode 100644 dspace-api/src/main/java/org/dspace/app/util/AbstractDSpaceWebapp.java create mode 100644 dspace-api/src/main/java/org/dspace/app/util/CollectionDropDown.java create mode 100644 dspace-api/src/main/java/org/dspace/app/util/DSpaceWebappMXBean.java create mode 100644 dspace-api/src/main/java/org/dspace/app/util/Version.java create mode 100644 dspace-api/src/main/java/org/dspace/app/util/XMLUtils.java create mode 100644 dspace-api/src/main/java/org/dspace/app/util/package-info.java create mode 100644 dspace-api/src/main/java/org/dspace/browse/ItemCountDAOSolr.java create mode 100644 dspace-api/src/main/java/org/dspace/core/LicenseManager.java create mode 100644 dspace-api/src/main/java/org/dspace/core/NewsManager.java create mode 100644 dspace-api/src/main/java/org/dspace/ctask/general/MetadataWebService.java create mode 100644 dspace-api/src/main/java/org/dspace/discovery/SolrServiceSpellIndexingPlugin.java create mode 100644 dspace-api/src/main/java/org/dspace/handle/MultiRemoteDSpaceRepositoryHandlePlugin.java create mode 100644 dspace-api/src/main/java/org/dspace/identifier/DOI.java create mode 100644 dspace-api/src/main/java/org/dspace/identifier/DOIIdentifierProvider.java create mode 100644 dspace-api/src/main/java/org/dspace/identifier/EZIDIdentifierProvider.java create mode 100644 dspace-api/src/main/java/org/dspace/identifier/doi/DOIConnector.java create mode 100644 dspace-api/src/main/java/org/dspace/identifier/doi/DOIConsumer.java create mode 100644 dspace-api/src/main/java/org/dspace/identifier/doi/DOIIdentifierException.java create mode 100644 dspace-api/src/main/java/org/dspace/identifier/doi/DOIOrganiser.java create mode 100644 dspace-api/src/main/java/org/dspace/identifier/doi/DataCiteConnector.java create mode 100644 dspace-api/src/main/java/org/dspace/identifier/doi/package-info.java create mode 100644 dspace-api/src/main/java/org/dspace/identifier/ezid/DateToYear.java create mode 100644 dspace-api/src/main/java/org/dspace/identifier/ezid/EZIDRequest.java create mode 100644 dspace-api/src/main/java/org/dspace/identifier/ezid/EZIDRequestFactory.java create mode 100644 dspace-api/src/main/java/org/dspace/identifier/ezid/EZIDResponse.java create mode 100644 dspace-api/src/main/java/org/dspace/identifier/ezid/Transform.java create mode 100644 dspace-api/src/main/java/org/dspace/identifier/package-info.java create mode 100644 dspace-api/src/main/java/org/dspace/statistics/util/package-info.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/ArXivFileDataLoader.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/ArXivOnlineDataLoader.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/ArXivService.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/ArxivUtils.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiFileDataLoader.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiOnlineDataLoader.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiService.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiUtils.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefFileDataLoader.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefOnlineDataLoader.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefService.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefUtils.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/DSpaceWorkspaceItemOutputGenerator.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/FieldMergeModifier.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/LanguageCodeModifier.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/LookupProvidersCheck.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/MapConverterModifier.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/MultipleSubmissionLookupDataLoader.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/NetworkSubmissionLookupDataLoader.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/PubmedFileDataLoader.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/PubmedOnlineDataLoader.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/PubmedService.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/PubmedUtils.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/RemoveLastDotModifier.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionItemDataLoader.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupDataLoader.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupOutputGenerator.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupService.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupUtils.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/lookup/ValueConcatenationModifier.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/step/StartSubmissionLookupStep.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/util/ItemSubmissionLookupDTO.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/util/SubmissionLookupDTO.java create mode 100644 dspace-api/src/main/java/org/dspace/submit/util/SubmissionLookupPublication.java create mode 100644 dspace-api/src/main/resources/maven.properties create mode 100644 dspace-api/src/main/resources/scm.properties create mode 100644 dspace-api/src/main/resources/spring/spring-dspace-addon-requestitem-services.xml create mode 100644 dspace-api/src/main/resources/spring/spring-dspace-addon-sherpa-configuration-services.xml create mode 100644 dspace-api/src/main/resources/spring/spring-dspace-addon-sherpa-services.xml create mode 100644 dspace-api/src/test/data/dspaceFolder/config/spiders/agents/dspace-agents-testing.txt create mode 100644 dspace-api/src/test/data/dspaceFolder/config/spiders/domains/dspace-domains-testing.txt create mode 100644 dspace-api/src/test/data/dspaceFolder/config/spiders/dspace-address-testing.txt create mode 100644 dspace-api/src/test/java/org/dspace/discovery/MockIndexEventConsumer.java create mode 100644 dspace-api/src/test/java/org/dspace/identifier/DOIIdentifierProviderTest.java create mode 100644 dspace-api/src/test/java/org/dspace/identifier/EZIDIdentifierProviderTest.java create mode 100644 dspace-api/src/test/java/org/dspace/identifier/MockDOIConnector.java create mode 100644 dspace-api/src/test/java/org/dspace/statistics/util/DummyHttpServletRequest.java create mode 100644 dspace-api/src/test/java/org/dspace/statistics/util/SpiderDetectorTest.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/components/CollectionItemList.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/components/RecentSiteSubmissions.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/components/TopCommunitiesSiteProcessor.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/components/VersioningItemHome.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/handle/HandleJSONResolver.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/json/SubmissionLookupJSONRequest.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/json/UploadProgressJSON.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/jsptag/AccessSettingTag.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/jsptag/PoliciesListTag.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/servlet/BatchMetadataImportServlet.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/servlet/RequestItemServlet.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/servlet/SHERPAPublisherPolicyServlet.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/servlet/VersionHistoryServlet.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/servlet/VersionItemServlet.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/servlet/admin/CurateServlet.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/servlet/admin/PrivateItemsServlet.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/submit/step/JSPAccessStep.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/submit/step/JSPStartSubmissionLookupStep.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/submit/step/JSPUploadWithEmbargoStep.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/util/CurateTaskResult.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/util/FileUploadListener.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/util/JSONUploadResponse.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/util/RequestItemManager.java create mode 100644 dspace-jspui/src/main/java/org/dspace/app/webui/util/VersionUtil.java create mode 100644 dspace-jspui/src/main/java/org/dspace/utils/DSpaceWebapp.java create mode 100644 dspace-jspui/src/main/webapp/dspace-admin/batchmetadataimport.jsp create mode 100644 dspace-jspui/src/main/webapp/dspace-admin/curate-collection.jsp create mode 100644 dspace-jspui/src/main/webapp/dspace-admin/curate-community.jsp create mode 100644 dspace-jspui/src/main/webapp/dspace-admin/curate-item.jsp create mode 100644 dspace-jspui/src/main/webapp/dspace-admin/curate-main.jsp create mode 100644 dspace-jspui/src/main/webapp/dspace-admin/curate-message.jsp create mode 100644 dspace-jspui/src/main/webapp/dspace-admin/eperson-loginas-error.jsp create mode 100644 dspace-jspui/src/main/webapp/dspace-admin/eperson-resetpassword-error.jsp create mode 100644 dspace-jspui/src/main/webapp/dspace-admin/supervise-no-workspaceitem.jsp create mode 100644 dspace-jspui/src/main/webapp/image/dspace-logo-only.png create mode 100644 dspace-jspui/src/main/webapp/image/logo-cineca-small.png create mode 100644 dspace-jspui/src/main/webapp/image/logo.gif create mode 100644 dspace-jspui/src/main/webapp/image/submission-lookup-small-arxiv-error.jpg create mode 100644 dspace-jspui/src/main/webapp/image/submission-lookup-small-arxiv.jpg create mode 100644 dspace-jspui/src/main/webapp/image/submission-lookup-small-bibtex.jpg create mode 100644 dspace-jspui/src/main/webapp/image/submission-lookup-small-cinii-error.jpg create mode 100644 dspace-jspui/src/main/webapp/image/submission-lookup-small-cinii.jpg create mode 100644 dspace-jspui/src/main/webapp/image/submission-lookup-small-crossref-error.jpg create mode 100644 dspace-jspui/src/main/webapp/image/submission-lookup-small-crossref.jpg create mode 100644 dspace-jspui/src/main/webapp/image/submission-lookup-small-csv.jpg create mode 100644 dspace-jspui/src/main/webapp/image/submission-lookup-small-endnote.jpg create mode 100644 dspace-jspui/src/main/webapp/image/submission-lookup-small-pubmed-error.jpg create mode 100644 dspace-jspui/src/main/webapp/image/submission-lookup-small-pubmed.jpg create mode 100644 dspace-jspui/src/main/webapp/image/submission-lookup-small-ris.jpg create mode 100644 dspace-jspui/src/main/webapp/image/submission-lookup-small-tsv.jpg create mode 100644 dspace-jspui/src/main/webapp/layout/footer-submission.jsp create mode 100644 dspace-jspui/src/main/webapp/layout/header-submission.jsp create mode 100644 dspace-jspui/src/main/webapp/layout/legacy/footer-default.jsp create mode 100644 dspace-jspui/src/main/webapp/layout/legacy/footer-popup.jsp create mode 100644 dspace-jspui/src/main/webapp/layout/legacy/header-default.jsp create mode 100644 dspace-jspui/src/main/webapp/layout/legacy/header-popup.jsp create mode 100644 dspace-jspui/src/main/webapp/layout/legacy/location-bar.jsp create mode 100644 dspace-jspui/src/main/webapp/layout/legacy/navbar-admin.jsp create mode 100644 dspace-jspui/src/main/webapp/layout/legacy/navbar-default.jsp create mode 100644 dspace-jspui/src/main/webapp/layout/navbar-minimal.jsp create mode 100644 dspace-jspui/src/main/webapp/requestItem/item-send.jsp create mode 100644 dspace-jspui/src/main/webapp/requestItem/request-form.jsp create mode 100644 dspace-jspui/src/main/webapp/requestItem/request-free-access.jsp create mode 100644 dspace-jspui/src/main/webapp/requestItem/request-information.jsp create mode 100644 dspace-jspui/src/main/webapp/requestItem/request-letter.jsp create mode 100644 dspace-jspui/src/main/webapp/requestItem/request-send.jsp create mode 100644 dspace-jspui/src/main/webapp/requestItem/response-send.jsp create mode 100644 dspace-jspui/src/main/webapp/sherpa/css/sherpa.css create mode 100644 dspace-jspui/src/main/webapp/sherpa/image/ajax-loader-big.gif create mode 100644 dspace-jspui/src/main/webapp/sherpa/image/can.gif create mode 100644 dspace-jspui/src/main/webapp/sherpa/image/cannot.gif create mode 100644 dspace-jspui/src/main/webapp/sherpa/image/restricted.gif create mode 100644 dspace-jspui/src/main/webapp/sherpa/image/romeosmall.gif create mode 100644 dspace-jspui/src/main/webapp/sherpa/image/unclear.gif create mode 100644 dspace-jspui/src/main/webapp/sherpa/sherpa-policy.jsp create mode 100644 dspace-jspui/src/main/webapp/static/css/bootstrap/bootstrap-theme.css create mode 100644 dspace-jspui/src/main/webapp/static/css/bootstrap/bootstrap-theme.min.css create mode 100644 dspace-jspui/src/main/webapp/static/css/bootstrap/bootstrap.css create mode 100644 dspace-jspui/src/main/webapp/static/css/bootstrap/bootstrap.min.css create mode 100644 dspace-jspui/src/main/webapp/static/css/bootstrap/dspace-theme.css create mode 100644 dspace-jspui/src/main/webapp/static/css/fonts/glyphicons-halflings-regular.eot create mode 100644 dspace-jspui/src/main/webapp/static/css/fonts/glyphicons-halflings-regular.svg create mode 100644 dspace-jspui/src/main/webapp/static/css/fonts/glyphicons-halflings-regular.ttf create mode 100644 dspace-jspui/src/main/webapp/static/css/fonts/glyphicons-halflings-regular.woff create mode 100644 dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/animated-overlay.gif create mode 100644 dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_flat_55_fbec88_40x100.png create mode 100644 dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png create mode 100644 dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_glass_85_dfeffc_1x400.png create mode 100644 dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png create mode 100644 dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png create mode 100644 dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png create mode 100644 dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-icons_217bc0_256x240.png create mode 100644 dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-icons_2e83ff_256x240.png create mode 100644 dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-icons_469bdd_256x240.png create mode 100644 dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-icons_6da8d5_256x240.png create mode 100644 dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-icons_cd0a0a_256x240.png create mode 100644 dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-icons_d8e7f3_256x240.png create mode 100644 dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-icons_f9bd01_256x240.png create mode 100644 dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/jquery-ui-1.10.3.custom.css create mode 100644 dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/jquery-ui-1.10.3.custom.min.css create mode 100644 dspace-jspui/src/main/webapp/static/css/jquery.fileupload-ui-noscript.css create mode 100644 dspace-jspui/src/main/webapp/static/css/jquery.fileupload-ui.css create mode 100644 dspace-jspui/src/main/webapp/static/js/bootstrap/bootstrap.js create mode 100644 dspace-jspui/src/main/webapp/static/js/bootstrap/bootstrap.min.js create mode 100644 dspace-jspui/src/main/webapp/static/js/holder.js create mode 100644 dspace-jspui/src/main/webapp/static/js/html5shiv.js create mode 100644 dspace-jspui/src/main/webapp/static/js/jquery/jquery-1.10.2.min.js create mode 100644 dspace-jspui/src/main/webapp/static/js/jquery/jquery-ui-1.10.3.custom.min.js create mode 100644 dspace-jspui/src/main/webapp/static/js/respond.min.js create mode 100644 dspace-jspui/src/main/webapp/static/js/submission-lookup.js create mode 100644 dspace-jspui/src/main/webapp/submit/access-step.js create mode 100644 dspace-jspui/src/main/webapp/submit/access-step.jsp create mode 100644 dspace-jspui/src/main/webapp/submit/edit-bitstream-access.jsp create mode 100644 dspace-jspui/src/main/webapp/submit/edit-policy.jsp create mode 100644 dspace-jspui/src/main/webapp/submit/review-policy.jsp create mode 100644 dspace-jspui/src/main/webapp/submit/start-lookup-submission.jsp create mode 100644 dspace-jspui/src/main/webapp/tools/confirm-privating-item.jsp create mode 100644 dspace-jspui/src/main/webapp/tools/curate-collection.jsp create mode 100644 dspace-jspui/src/main/webapp/tools/curate-community.jsp create mode 100644 dspace-jspui/src/main/webapp/tools/curate-item.jsp create mode 100644 dspace-jspui/src/main/webapp/tools/curate-message.jsp create mode 100644 dspace-jspui/src/main/webapp/tools/version-history.jsp create mode 100644 dspace-jspui/src/main/webapp/tools/version-summary.jsp create mode 100644 dspace-jspui/src/main/webapp/tools/version-update-summary.jsp create mode 100644 dspace-services/src/main/java/org/dspace/services/EmailService.java create mode 100644 dspace-services/src/main/java/org/dspace/services/email/EmailServiceImpl.java create mode 100644 dspace-services/src/main/java/org/dspace/services/email/package-info.java create mode 100644 dspace-services/src/test/java/org/dspace/services/email/EmailServiceImplTest.java create mode 100644 dspace-swordv2/src/main/java/org/dspace/sword2/AbstractSimpleDC.java create mode 100644 dspace-swordv2/src/main/java/org/dspace/sword2/SimpleDCMetadata.java create mode 100644 dspace-swordv2/src/main/java/org/dspace/sword2/SwordMETSPackageIngester.java create mode 100644 dspace-swordv2/src/main/java/org/dspace/sword2/WorkflowManagerUnrestricted.java create mode 100644 dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/administrative/mapper/DiscoverySearchRequestProcessor.java create mode 100644 dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/administrative/mapper/LuceneSearchRequestProcessor.java create mode 100644 dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/administrative/mapper/SearchRequestProcessor.java create mode 100644 dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/FrontPageFeeds.java create mode 100644 dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestChangeStatusForm.java create mode 100644 dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestForm.java create mode 100644 dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestResponseAction.java create mode 100644 dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestResponseDecisionForm.java create mode 100644 dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestResponseFalseForm.java create mode 100644 dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestResponseTrueForm.java create mode 100644 dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestSent.java create mode 100644 dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestStatusChanged.java create mode 100644 dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/SendItemRequestAction.java create mode 100644 dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/browseArtifacts/CollectionBrowse.java create mode 100644 dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/browseArtifacts/CommunityBrowse.java create mode 100644 dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/discovery/recentSubmissions/RecentSubmissionTransformer.java create mode 100644 dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/discovery/recentSubmissions/RecentSubmissionUtils.java create mode 100644 dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/general/ConfigurationMatcher.java create mode 100644 dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/handle/HandleResolverReader.java create mode 100644 dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/viewArtifacts/ContainerHomePageMatcher.java create mode 100644 dspace-xmlui/src/main/java/org/dspace/utils/DSpaceWebapp.java create mode 100644 dspace-xmlui/src/main/webapp/static/icons/lock.gif create mode 100644 dspace-xmlui/src/main/webapp/static/icons/lock24.png create mode 100644 dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-by-nc-nd.png create mode 100644 dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-by-nc-sa.png create mode 100644 dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-by-nc.png create mode 100644 dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-by-nd.png create mode 100644 dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-by-sa.png create mode 100644 dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-by.png create mode 100644 dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-generic.png create mode 100644 dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-mark.png create mode 100644 dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-zero.png create mode 100644 dspace/config/crosswalks/DIM2DataCite.xsl create mode 100644 dspace/config/crosswalks/mapConverter-arxivSubject.properties create mode 100644 dspace/config/crosswalks/mapConverter-pubstatusPubmed.properties create mode 100644 dspace/config/emails/bte_batch_import_error create mode 100644 dspace/config/emails/bte_batch_import_success create mode 100644 dspace/config/emails/doi_maintenance_error create mode 100644 dspace/config/emails/request_item.admin create mode 100644 dspace/config/emails/request_item.author create mode 100644 dspace/config/log4j-solr.properties create mode 100644 dspace/config/modules/rest.cfg create mode 100644 dspace/config/registries/dcterms-types.xml create mode 100644 dspace/config/spiders/agents/example create mode 100644 dspace/config/spiders/domains/example create mode 100644 dspace/config/spring/api/requestitem.xml create mode 100644 dspace/config/spring/api/sherpa.xml create mode 100644 dspace/etc/oracle/database_schema_3-4.sql create mode 100644 dspace/etc/postgres/database_schema_3-4.sql create mode 100644 dspace/modules/additions/src/main/java/org/dspace/app/util/SyndicationFeed.java create mode 100644 dspace/modules/additions/src/main/resources/Messages.properties create mode 100644 dspace/modules/additions/src/main/resources/Messages_pt_BR.properties create mode 100644 dspace/modules/rest/pom.xml create mode 100644 dspace/modules/rest/src/main/webapp/.gitignore create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/Participatorio-desktop.xsl create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/@mirelogo-small.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/Crystal_Clear_action_lock3_64px.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/apple-touch-icon.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/arrow_down_ffffff_16x16.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/arrow_up_ffffff_16x16.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/2-errortriangle.gif create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/2-lightning.gif create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/2-warntriangle.gif create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/3-circleslash.gif create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/3-flag.gif create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/3-thumb1.gif create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/3-thumb2.gif create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/4-question.gif create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/4-star.gif create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/5-pinion.gif create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/5-star.gif create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/6-greencheck.gif create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/6-star.gif create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/6-thumb1.gif create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/6-thumb2.gif create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/bug.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/readme.txt create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/invisible.gif create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/lock24.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/lookup-indicator.gif create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/suggest-indicator.gif create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/unlock24.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/button_minus.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/button_plus.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/cc-ship.gif create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/check_606060_15x15.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/controlledvocabulary/voc_closed_222222.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/controlledvocabulary/voc_doc_222222.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/controlledvocabulary/voc_open_222222.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-by-nc-nd.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-by-nc-sa.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-by-nc.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-by-nd.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-by-sa.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-by.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-generic.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-mark.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-zero.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/dspace-logo-only.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/favicon.ico create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/gear_6D859C_25x25.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/gear_ffffff_25x25.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/information.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_flat_100_b6c8d9_40x100.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_flat_100_fff2f2_40x100.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_flat_100_ffffff_40x100.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_flat_70_000000_40x100.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_flat_75_1f3f5e_40x100.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_flat_75_f0f2f5_40x100.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_glass_65_ffffff_1x400.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-icons_2e83ff_256x240.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-icons_444444_256x240.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-icons_c22121_256x240.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-icons_ffffff_256x240.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/mime.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/search_icon_ffffff_20x20.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/HTML5Doctor_CSS_Reset.LICENSE create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/authority-control.css create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/base.css create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/handheld.css create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/helper.css create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/jquery-ui-1.8.15.custom.css create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/media.css create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/print.css create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/reset.css create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/style.css create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/yui.LICENSE create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/DD_belatedPNG.LICENSE create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/DD_belatedPNG_0.0.8a.js create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/choice-support.js create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/jquery-ui-1.8.15.custom.min.js create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/jquery-ui.LICENSE create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/modernizr-1.7.min.js create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/modernizr.LICENSE create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/HTML5Boilerplate.LICENSE create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/administrative/administrative.xsl create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/artifactbrowser/collection-list.xsl create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/artifactbrowser/community-list.xsl create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/artifactbrowser/item-list.xsl create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/artifactbrowser/item-view.xsl create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/general/choice-authority-control.xsl create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/attribute-handlers.xsl create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/elements.xsl create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/forms.xsl create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/global-variables.xsl create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/navigation.xsl create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/page-structure.xsl create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/utils.xsl create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/sitemap.xmap create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/Participatorio-mobile.xsl create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/cookies.js create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/detectmobile.LICENSE create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/detectmobile.js create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/images/ajax-loader.gif create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/images/default-thumbnail.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/images/icons-18-black.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/images/icons-18-white.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/images/icons-36-black.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/images/icons-36-white.png create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/m-tweaks.css create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/m-tweaks.js create mode 100755 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/m-tweaks.ori create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/sc-mobile.LICENSE create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/sc-mobile.css create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/sc-mobile.min.css create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/readme.txt create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/sitemap.xmap create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/themes.xmap create mode 100644 dspace/modules/xmlui/src/main/webapp/themes/themes.xmap diff --git a/dspace-api/src/main/java/org/dspace/app/bulkedit/package-info.java b/dspace-api/src/main/java/org/dspace/app/bulkedit/package-info.java new file mode 100644 index 0000000..5393ca8 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/bulkedit/package-info.java @@ -0,0 +1,22 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +/** + * <p>The DSpace Batch Metadata Editor, which uses a CSV file to export/import + * item metadata.</p> + * <p> + * <ul> + * <li>works on items, communities, collections or the whole site</li> + * <li>can also create new items, delete items and withdraw/restore them</li> + * <li>cannot export/import bitstreams</li> + * </ul> + */ + +package org.dspace.app.bulkedit; + + diff --git a/dspace-api/src/main/java/org/dspace/app/itemimport/BTEBatchImportService.java b/dspace-api/src/main/java/org/dspace/app/itemimport/BTEBatchImportService.java new file mode 100644 index 0000000..1513eae --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/itemimport/BTEBatchImportService.java @@ -0,0 +1,93 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.itemimport; + +import gr.ekt.bte.core.DataLoader; +import gr.ekt.bte.core.TransformationEngine; +import gr.ekt.bte.dataloader.FileDataLoader; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + + + +/** + * This class acts as a Service in the procedure ot batch import using the Biblio-Transformation-Engine + */ +public class BTEBatchImportService +{ + + TransformationEngine transformationEngine; + Map<String, DataLoader> dataLoaders = new HashMap<String, DataLoader>(); + Map<String, String> outputMap = new HashMap<String,String>(); + + /** + * Default constructor + */ + public BTEBatchImportService() + { + super(); + } + + /** + * Setter method for dataLoaders parameter + * @param dataLoaders + */ + public void setDataLoaders(Map<String, DataLoader> dataLoaders) + { + this.dataLoaders = dataLoaders; + } + + /** + * + * @return the map of DataLoaders + */ + public Map<String, DataLoader> getDataLoaders() + { + return dataLoaders; + } + + /** + * + * @return the outputMapping + */ + public Map<String, String> getOutputMap() { + return outputMap; + } + + /** + * Setter method for the outputMapping + * @param outputMapping + */ + public void setOutputMap(Map<String, String> outputMap) { + this.outputMap = outputMap; + } + + public TransformationEngine getTransformationEngine() { + return transformationEngine; + } + + public void setTransformationEngine(TransformationEngine transformationEngine) { + this.transformationEngine = transformationEngine; + } + + public List<String> getFileDataLoaders(){ + List<String> result = new ArrayList<String>(); + + for (String key : dataLoaders.keySet()){ + DataLoader dl = dataLoaders.get(key); + if (dl instanceof FileDataLoader){ + result.add(key); + } + } + return result; + } +} \ No newline at end of file diff --git a/dspace-api/src/main/java/org/dspace/app/launcher/CommandRunner.java b/dspace-api/src/main/java/org/dspace/app/launcher/CommandRunner.java new file mode 100644 index 0000000..259acf0 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/launcher/CommandRunner.java @@ -0,0 +1,107 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.launcher; + +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.Reader; +import java.io.StreamTokenizer; +import java.util.ArrayList; +import java.util.List; + +/** + * + * @author mwood + */ +public class CommandRunner +{ + public static void main(String[] args) + throws FileNotFoundException, IOException + { + if (args.length > 0) + { + runManyCommands(args[0]); + } + else + { + runManyCommands("-"); + } + // There is no sensible way to use the status returned by runManyCommands(). + // If called from the command line then we would want to return it + // through System.exit(). But if called (normally) from ScriptLauncher, + // there is no way to return it and we don't want to interrupt + // ScriptLauncher. + // + // "'tis a puzzlement." -- the King of Siam + } + + /** + * Read a file of command lines and execute each in turn. + * + * @param doc details of recognized commands. + * @param script the file of command lines to be executed. + * @return + * @throws FileNotFoundException + * @throws IOException + */ + static int runManyCommands(String script) + throws FileNotFoundException, IOException + { + Reader input; + if ("-".equals(script)) + { + input = new InputStreamReader(System.in); + } + else + { + input = new FileReader(script); + } + + StreamTokenizer tokenizer = new StreamTokenizer(input); + + tokenizer.eolIsSignificant(true); + + tokenizer.ordinaryChar('-'); + tokenizer.wordChars('-', '-'); + + tokenizer.ordinaryChars('0', '9'); + tokenizer.wordChars('0', '9'); + + tokenizer.ordinaryChar('.'); + tokenizer.wordChars('.', '.'); + + tokenizer.ordinaryChar('@'); + tokenizer.wordChars('@', '@'); + + int status = 0; + List<String> tokens = new ArrayList<String>(); + while (StreamTokenizer.TT_EOF != tokenizer.nextToken()) + { + if (StreamTokenizer.TT_EOL == tokenizer.ttype) + { + if (tokens.size() > 0) + { + status = ScriptLauncher.runOneCommand(tokens.toArray(new String[tokens.size()])); + if (status > 0) + { + break; + } + tokens.clear(); + } + } + else + { + tokens.add(tokenizer.sval); + } + } + + return status; + } +} diff --git a/dspace-api/src/main/java/org/dspace/app/requestitem/RequestItemAuthor.java b/dspace-api/src/main/java/org/dspace/app/requestitem/RequestItemAuthor.java new file mode 100644 index 0000000..db1a735 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/requestitem/RequestItemAuthor.java @@ -0,0 +1,34 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.requestitem; + +/** + * Simple DTO to transfer data about the corresponding author for the Request + * Copy feature + * + * @author Andrea Bollini + * + */ +public class RequestItemAuthor { + private String fullName; + private String email; + + public RequestItemAuthor(String fullName, String email) { + super(); + this.fullName = fullName; + this.email = email; + } + + public String getEmail() { + return email; + } + + public String getFullName() { + return fullName; + } +} diff --git a/dspace-api/src/main/java/org/dspace/app/requestitem/RequestItemAuthorExtractor.java b/dspace-api/src/main/java/org/dspace/app/requestitem/RequestItemAuthorExtractor.java new file mode 100644 index 0000000..d94c732 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/requestitem/RequestItemAuthorExtractor.java @@ -0,0 +1,25 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.requestitem; + +import java.sql.SQLException; + +import org.dspace.content.Item; +import org.dspace.core.Context; + +/** + * Interface to abstract the strategy for select the author to contact for + * request copy + * + * @author Andrea Bollini + * + */ +public interface RequestItemAuthorExtractor { + public RequestItemAuthor getRequestItemAuthor(Context context, Item item) + throws SQLException; +} diff --git a/dspace-api/src/main/java/org/dspace/app/requestitem/RequestItemMetadataStrategy.java b/dspace-api/src/main/java/org/dspace/app/requestitem/RequestItemMetadataStrategy.java new file mode 100644 index 0000000..b5ed3a3 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/requestitem/RequestItemMetadataStrategy.java @@ -0,0 +1,75 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.requestitem; + +import java.sql.SQLException; + +import org.apache.commons.lang.StringUtils; +import org.dspace.content.DCValue; +import org.dspace.content.Item; +import org.dspace.core.Context; +import org.dspace.core.I18nUtil; + +/** + * Try to look to an item metadata for the corresponding author name and email. + * Failover to the RequestItemSubmitterStrategy + * + * @author Andrea Bollini + * + */ +public class RequestItemMetadataStrategy extends RequestItemSubmitterStrategy { + + private String emailMetadata; + private String fullNameMatadata; + + public RequestItemMetadataStrategy() { + } + + @Override + public RequestItemAuthor getRequestItemAuthor(Context context, Item item) + throws SQLException { + if (emailMetadata != null) + { + DCValue[] vals = item.getMetadata(emailMetadata); + if (vals.length > 0) + { + String email = vals[0].value; + String fullname = null; + if (fullNameMatadata != null) + { + DCValue[] nameVals = item.getMetadata(fullNameMatadata); + if (nameVals.length > 0) + { + fullname = nameVals[0].value; + } + } + + if (StringUtils.isBlank(fullname)) + { + fullname = I18nUtil + .getMessage( + "org.dspace.app.requestitem.RequestItemMetadataStrategy.unnamed", + context); + } + RequestItemAuthor author = new RequestItemAuthor( + fullname, email); + return author; + } + } + return super.getRequestItemAuthor(context, item); + } + + public void setEmailMetadata(String emailMetadata) { + this.emailMetadata = emailMetadata; + } + + public void setFullNameMatadata(String fullNameMatadata) { + this.fullNameMatadata = fullNameMatadata; + } + +} diff --git a/dspace-api/src/main/java/org/dspace/app/requestitem/RequestItemSubmitterStrategy.java b/dspace-api/src/main/java/org/dspace/app/requestitem/RequestItemSubmitterStrategy.java new file mode 100644 index 0000000..b7fde10 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/requestitem/RequestItemSubmitterStrategy.java @@ -0,0 +1,36 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.requestitem; + +import java.sql.SQLException; + +import org.dspace.content.Item; +import org.dspace.core.Context; +import org.dspace.eperson.EPerson; + +/** + * Basic strategy that looks to the original submitter. + * + * @author Andrea Bollini + * + */ +public class RequestItemSubmitterStrategy implements RequestItemAuthorExtractor { + + public RequestItemSubmitterStrategy() { + } + + @Override + public RequestItemAuthor getRequestItemAuthor(Context context, Item item) + throws SQLException { + EPerson submitter = item.getSubmitter(); + RequestItemAuthor author = new RequestItemAuthor( + submitter.getFullName(), submitter.getEmail()); + return author; + } + +} diff --git a/dspace-api/src/main/java/org/dspace/app/sfx/package-info.java b/dspace-api/src/main/java/org/dspace/app/sfx/package-info.java new file mode 100644 index 0000000..6d74d40 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/sfx/package-info.java @@ -0,0 +1,16 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +/** + * <p>SFX/OpenURL link server support.</p> + * + * @see org.dspace.app.webui.jsptag.SFXLinkTag + * @see org.dspace.app.xmlui.aspect.artifactbrowser.ItemViewer + */ + +package org.dspace.app.sfx; diff --git a/dspace-api/src/main/java/org/dspace/app/sherpa/SHERPAJournal.java b/dspace-api/src/main/java/org/dspace/app/sherpa/SHERPAJournal.java new file mode 100644 index 0000000..67f358b --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/sherpa/SHERPAJournal.java @@ -0,0 +1,56 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.sherpa; + +/** + * POJO representation for a SHERPA journal + * + * @author Andrea Bollini + * + */ +public class SHERPAJournal +{ + private String title; + + private String issn; + + private String zetopub; + + private String romeopub; + + public SHERPAJournal(String title, String issn, String zetopub, + String romeopub) + { + super(); + this.title = title; + this.issn = issn; + this.zetopub = zetopub; + this.romeopub = romeopub; + } + + public String getTitle() + { + return title; + } + + public String getIssn() + { + return issn; + } + + public String getZetopub() + { + return zetopub; + } + + public String getRomeopub() + { + return romeopub; + } + +} diff --git a/dspace-api/src/main/java/org/dspace/app/sherpa/SHERPAPublisher.java b/dspace-api/src/main/java/org/dspace/app/sherpa/SHERPAPublisher.java new file mode 100644 index 0000000..a1b4fd6 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/sherpa/SHERPAPublisher.java @@ -0,0 +1,183 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.sherpa; + +import java.util.List; + +/** + * POJO representation for a SHERPA Publisher record + * + * @author Andrea Bollini + * + */ +public class SHERPAPublisher +{ + private String name; + + private String alias; + + private String homeurl; + + private String prearchiving; + + private List<String> prerestriction; + + private String postarchiving; + + private List<String> postrestriction; + + private String pubarchiving; + + private List<String> pubrestriction; + + private List<String> condition; + + private String paidaccessurl; + + private String paidaccessname; + + private String paidaccessnotes; + + private List<String[]> copyright; + + private String romeocolour; + + private String dateadded; + + private String dateupdated; + + public SHERPAPublisher(String name, String alias, String homeurl, + String prearchiving, List<String> prerestriction, + String postarchiving, List<String> postrestriction, + String pubarchiving, List<String> pubrestriction, + List<String> condition, String paidaccessurl, + String paidaccessname, String paidaccessnotes, + List<String[]> copyright, String romeocolour, String datedded, + String dateupdated) + { + this.name = name; + + this.alias = alias; + + this.homeurl = homeurl; + + this.prearchiving = prearchiving; + + this.prerestriction = prerestriction; + + this.postarchiving = postarchiving; + + this.postrestriction = postrestriction; + + this.pubarchiving = pubarchiving; + + this.pubrestriction = pubrestriction; + + this.condition = condition; + + this.paidaccessurl = paidaccessurl; + + this.paidaccessname = paidaccessname; + + this.paidaccessnotes = paidaccessnotes; + + this.copyright = copyright; + + this.romeocolour = romeocolour; + + this.dateadded = datedded; + + this.dateupdated = dateupdated; + } + + public String getName() + { + return name; + } + + public String getAlias() + { + return alias; + } + + public String getHomeurl() + { + return homeurl; + } + + public String getPrearchiving() + { + return prearchiving; + } + + public List<String> getPrerestriction() + { + return prerestriction; + } + + public String getPostarchiving() + { + return postarchiving; + } + + public List<String> getPostrestriction() + { + return postrestriction; + } + + public String getPubarchiving() + { + return pubarchiving; + } + + public List<String> getPubrestriction() + { + return pubrestriction; + } + + public List<String> getCondition() + { + return condition; + } + + public String getPaidaccessurl() + { + return paidaccessurl; + } + + public String getPaidaccessname() + { + return paidaccessname; + } + + public String getPaidaccessnotes() + { + return paidaccessnotes; + } + + public List<String[]> getCopyright() + { + return copyright; + } + + public String getRomeocolour() + { + return romeocolour; + } + + public String getDatedded() + { + return dateadded; + } + + public String getDateupdated() + { + return dateupdated; + } + +} diff --git a/dspace-api/src/main/java/org/dspace/app/sherpa/SHERPAResponse.java b/dspace-api/src/main/java/org/dspace/app/sherpa/SHERPAResponse.java new file mode 100644 index 0000000..02a13dd --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/sherpa/SHERPAResponse.java @@ -0,0 +1,223 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.sherpa; + +import java.io.InputStream; +import java.util.LinkedList; +import java.util.List; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import org.apache.commons.lang.StringUtils; +import org.dspace.app.util.XMLUtils; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +/** + * JAVA representation for a SHERPA API Response + * + * @author Andrea Bollini + * + */ +public class SHERPAResponse +{ + private boolean error; + + private String message; + + private String license; + + private String licenseURL; + + private String disclaimer; + + private List<SHERPAJournal> journals; + + private List<SHERPAPublisher> publishers; + + public SHERPAResponse(InputStream xmlData) + { + try + { + DocumentBuilderFactory factory = DocumentBuilderFactory + .newInstance(); + factory.setValidating(false); + factory.setIgnoringComments(true); + factory.setIgnoringElementContentWhitespace(true); + + DocumentBuilder db = factory.newDocumentBuilder(); + Document inDoc = db.parse(xmlData); + + Element xmlRoot = inDoc.getDocumentElement(); + Element dataRoot = XMLUtils.getSingleElement(xmlRoot, "romeoapi"); + + Element headersElement = XMLUtils.getSingleElement(xmlRoot, + "header"); + Element journalsElement = XMLUtils.getSingleElement(xmlRoot, + "journals"); + Element publishersElement = XMLUtils.getSingleElement(xmlRoot, + "publishers"); + + message = XMLUtils.getElementValue(headersElement, "message"); + + if (StringUtils.isNotBlank(message)) + { + error = true; + return; + } + + license = XMLUtils.getElementValue(headersElement, "license"); + licenseURL = XMLUtils.getElementValue(headersElement, "licenseurl"); + disclaimer = XMLUtils.getElementValue(headersElement, "disclaimer"); + + List<Element> journalsList = XMLUtils.getElementList( + journalsElement, "journal"); + List<Element> publishersList = XMLUtils.getElementList( + publishersElement, "publisher"); + + if (journalsList != null) + { + journals = new LinkedList<SHERPAJournal>(); + for (Element journalElement : journalsList) + { + journals.add(new SHERPAJournal( + XMLUtils.getElementValue(journalElement, "jtitle"), + XMLUtils.getElementValue(journalElement, "issn"), + XMLUtils.getElementValue(journalElement, "zetopub"), + XMLUtils.getElementValue(journalElement, "romeopub"))); + } + } + + if (publishersList != null) + { + publishers = new LinkedList<SHERPAPublisher>(); + for (Element publisherElement : publishersList) + { + Element preprintsElement = XMLUtils.getSingleElement( + publisherElement, "preprints"); + Element preprintsRestrictionElement = XMLUtils + .getSingleElement(publisherElement, + "prerestrictions"); + + Element postprintsElement = XMLUtils.getSingleElement( + publisherElement, "postprints"); + Element postprintsRestrictionElement = XMLUtils + .getSingleElement(publisherElement, + "postrestrictions"); + + Element pdfversionElement = XMLUtils.getSingleElement( + publisherElement, "pdfversion"); + Element pdfversionRestrictionElement = XMLUtils + .getSingleElement(publisherElement, + "pdfrestrictions"); + + Element conditionsElement = XMLUtils.getSingleElement( + publisherElement, "conditions"); + Element paidaccessElement = XMLUtils.getSingleElement( + publisherElement, "paidaccess"); + + Element copyrightlinksElement = XMLUtils.getSingleElement( + publisherElement, "copyrightlinks"); + + publishers + .add(new SHERPAPublisher(XMLUtils.getElementValue( + publisherElement, "name"), + XMLUtils.getElementValue(publisherElement, + "alias"), XMLUtils.getElementValue( + publisherElement, "homeurl"), + + XMLUtils.getElementValue(preprintsElement, + "prearchiving"), + XMLUtils.getElementValueList( + preprintsRestrictionElement, + "prerestriction"), + + XMLUtils.getElementValue(postprintsElement, + "postarchiving"), + XMLUtils.getElementValueList( + postprintsRestrictionElement, + "postrestriction"), + + XMLUtils.getElementValue(pdfversionElement, + "pdfarchiving"), + XMLUtils.getElementValueList( + pdfversionRestrictionElement, + "pdfrestriction"), + + XMLUtils + .getElementValueList( + conditionsElement, + "condition"), XMLUtils + .getElementValue(paidaccessElement, + "paidaccessurl"), XMLUtils + .getElementValue(paidaccessElement, + "paidaccessname"), XMLUtils + .getElementValue(paidaccessElement, + "paidaccessnotes"), + XMLUtils.getElementValueArrayList( + copyrightlinksElement, + "copyrightlink", + "copyrightlinktext", + "copyrightlinkurl"), XMLUtils + .getElementValue(publisherElement, + "romeocolour"), XMLUtils + .getElementValue(publisherElement, + "dateadded"), XMLUtils + .getElementValue(publisherElement, + "dateupdated"))); + } + } + } + catch (Exception e) + { + error = true; + } + } + + public SHERPAResponse(String message) + { + this.message = message; + this.error = true; + } + + public boolean isError() + { + return error; + } + + public String getMessage() + { + return message; + } + + public String getLicense() + { + return license; + } + + public String getLicenseURL() + { + return licenseURL; + } + + public String getDisclaimer() + { + return disclaimer; + } + + public List<SHERPAJournal> getJournals() + { + return journals; + } + + public List<SHERPAPublisher> getPublishers() + { + return publishers; + } +} diff --git a/dspace-api/src/main/java/org/dspace/app/sherpa/SHERPAService.java b/dspace-api/src/main/java/org/dspace/app/sherpa/SHERPAService.java new file mode 100644 index 0000000..6d45ad3 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/sherpa/SHERPAService.java @@ -0,0 +1,67 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.sherpa; + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.NameValuePair; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.lang.StringUtils; +import org.dspace.core.ConfigurationManager; + +public class SHERPAService +{ + public SHERPAResponse searchByJournalISSN(String query) + { + String endpoint = ConfigurationManager.getProperty("sherpa.romeo.url"); + String apiKey = ConfigurationManager.getProperty("sherpa.romeo.apikey"); + + GetMethod method = null; + try + { + HttpClient client = new HttpClient(); + method = new GetMethod(endpoint); + + NameValuePair id = new NameValuePair("issn", query); + NameValuePair versions = new NameValuePair("versions", "all"); + NameValuePair[] params = null; + if (StringUtils.isNotBlank(apiKey)) + { + NameValuePair ak = new NameValuePair("ak", apiKey); + params = new NameValuePair[] { id, versions, ak }; + } + else + { + params = new NameValuePair[] { id, versions }; + } + method.setQueryString(params); + // Execute the method. + int statusCode = client.executeMethod(method); + + if (statusCode != HttpStatus.SC_OK) + { + return new SHERPAResponse("SHERPA/RoMEO return not OK status: " + + statusCode); + } + + return new SHERPAResponse(method.getResponseBodyAsStream()); + } + catch (Exception e) + { + return new SHERPAResponse( + "Error processing the SHERPA/RoMEO answer"); + } + finally + { + if (method != null) + { + method.releaseConnection(); + } + } + } +} diff --git a/dspace-api/src/main/java/org/dspace/app/sherpa/submit/ISSNItemExtractor.java b/dspace-api/src/main/java/org/dspace/app/sherpa/submit/ISSNItemExtractor.java new file mode 100644 index 0000000..f107c4d --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/sherpa/submit/ISSNItemExtractor.java @@ -0,0 +1,18 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.sherpa.submit; + +import java.util.List; + +import org.dspace.content.Item; +import org.dspace.core.Context; + +public interface ISSNItemExtractor +{ + public List<String> getISSNs(Context context, Item item); +} diff --git a/dspace-api/src/main/java/org/dspace/app/sherpa/submit/MetadataAuthorityISSNExtractor.java b/dspace-api/src/main/java/org/dspace/app/sherpa/submit/MetadataAuthorityISSNExtractor.java new file mode 100644 index 0000000..0e34f39 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/sherpa/submit/MetadataAuthorityISSNExtractor.java @@ -0,0 +1,40 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.sherpa.submit; + +import java.util.ArrayList; +import java.util.List; + +import org.dspace.content.DCValue; +import org.dspace.content.Item; +import org.dspace.core.Context; + +public class MetadataAuthorityISSNExtractor implements ISSNItemExtractor +{ + private List<String> metadataList; + + public void setMetadataList(List<String> metadataList) + { + this.metadataList = metadataList; + } + + @Override + public List<String> getISSNs(Context context, Item item) + { + List<String> values = new ArrayList<String>(); + for (String metadata : metadataList) + { + DCValue[] dcvalues = item.getMetadata(metadata); + for (DCValue dcvalue : dcvalues) + { + values.add(dcvalue.authority); + } + } + return values; + } +} diff --git a/dspace-api/src/main/java/org/dspace/app/sherpa/submit/MetadataValueISSNExtractor.java b/dspace-api/src/main/java/org/dspace/app/sherpa/submit/MetadataValueISSNExtractor.java new file mode 100644 index 0000000..bf7e521 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/sherpa/submit/MetadataValueISSNExtractor.java @@ -0,0 +1,40 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.sherpa.submit; + +import java.util.ArrayList; +import java.util.List; + +import org.dspace.content.DCValue; +import org.dspace.content.Item; +import org.dspace.core.Context; + +public class MetadataValueISSNExtractor implements ISSNItemExtractor +{ + private List<String> metadataList; + + public void setMetadataList(List<String> metadataList) + { + this.metadataList = metadataList; + } + + @Override + public List<String> getISSNs(Context context, Item item) + { + List<String> values = new ArrayList<String>(); + for (String metadata : metadataList) + { + DCValue[] dcvalues = item.getMetadata(metadata); + for (DCValue dcvalue : dcvalues) + { + values.add(dcvalue.value); + } + } + return values; + } +} diff --git a/dspace-api/src/main/java/org/dspace/app/sherpa/submit/SHERPASubmitConfigurationService.java b/dspace-api/src/main/java/org/dspace/app/sherpa/submit/SHERPASubmitConfigurationService.java new file mode 100644 index 0000000..071c4d0 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/sherpa/submit/SHERPASubmitConfigurationService.java @@ -0,0 +1,25 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.sherpa.submit; + +import java.util.List; + +public class SHERPASubmitConfigurationService +{ + private List<ISSNItemExtractor> issnItemExtractors; + + public void setIssnItemExtractors(List<ISSNItemExtractor> issnItemExtractors) + { + this.issnItemExtractors = issnItemExtractors; + } + + public List<ISSNItemExtractor> getIssnItemExtractors() + { + return issnItemExtractors; + } +} \ No newline at end of file diff --git a/dspace-api/src/main/java/org/dspace/app/sherpa/submit/SHERPASubmitService.java b/dspace-api/src/main/java/org/dspace/app/sherpa/submit/SHERPASubmitService.java new file mode 100644 index 0000000..1cb033a --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/sherpa/submit/SHERPASubmitService.java @@ -0,0 +1,90 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.sherpa.submit; + +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.dspace.app.sherpa.SHERPAResponse; +import org.dspace.app.sherpa.SHERPAService; +import org.dspace.content.Item; +import org.dspace.core.Context; +import org.dspace.core.LogManager; + +public class SHERPASubmitService +{ + private SHERPAService sherpaService; + + private SHERPASubmitConfigurationService configuration; + + /** log4j logger */ + private static Logger log = Logger.getLogger(SHERPASubmitService.class); + + public void setConfiguration(SHERPASubmitConfigurationService configuration) + { + this.configuration = configuration; + } + + public void setSherpaService(SHERPAService sherpaService) + { + this.sherpaService = sherpaService; + } + + public SHERPAResponse searchRelatedJournals(Context context, Item item) + { + Set<String> issns = getISSNs(context, item); + if (issns == null || issns.size() == 0) + { + return null; + } + else + { + return sherpaService.searchByJournalISSN(StringUtils.join(issns, ",")); + } + } + + private Set<String> getISSNs(Context context, Item item) + { + Set<String> issns = new LinkedHashSet<String>(); + if (configuration.getIssnItemExtractors() == null) + { + log.warn(LogManager.getHeader(context, "searchRelatedJournals", + "no issnItemExtractors defined")); + return null; + } + for (ISSNItemExtractor extractor : configuration.getIssnItemExtractors()) + { + List<String> eIssns = extractor.getISSNs(context, item); + if (eIssns != null) + { + for (String eIssn : eIssns) + { + issns.add(eIssn.trim()); + } + } + } + return issns; + } + + public boolean hasISSNs(Context context, Item item) + { + Set<String> issns = getISSNs(context, item); + if (issns == null || issns.size() == 0) + { + return false; + } + else + { + return true; + } + } + +} diff --git a/dspace-api/src/main/java/org/dspace/app/util/AbstractDSpaceWebapp.java b/dspace-api/src/main/java/org/dspace/app/util/AbstractDSpaceWebapp.java new file mode 100644 index 0000000..f73f3d2 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/util/AbstractDSpaceWebapp.java @@ -0,0 +1,191 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.app.util; + +import java.io.IOException; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpException; +import org.apache.commons.httpclient.HttpMethod; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.HeadMethod; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Context; +import org.dspace.storage.rdbms.DatabaseManager; +import org.dspace.storage.rdbms.TableRow; +import org.dspace.storage.rdbms.TableRowIterator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Represent a DSpace application while it is running. This helps us report + * which applications *are* running, by exposing a record that can be viewed + * externally. + * + * @author mwood + */ +abstract public class AbstractDSpaceWebapp + implements DSpaceWebappMXBean +{ + private static final Logger log = LoggerFactory.getLogger(AbstractDSpaceWebapp.class); + + protected String kind; + + protected Date started; + + protected String url; + + private TableRow row; + + /** Prevent null instantiation. */ + protected AbstractDSpaceWebapp() + { + } + + /** + * Construct a particular kind of DSpace application. + * + * @param kind what kind of application is this? (XMLUI, JSPUI, etc.) + */ + public AbstractDSpaceWebapp(String kind) + { + this.kind = kind; + + started = new Date(); + + url = ConfigurationManager.getProperty("dspace.url"); + if (null == url) + { + throw new IllegalStateException("dspace.url is undefined"); + } + } + + /** Record that this application is running. */ + public void register() + { + // Create the database entry + Timestamp now = new Timestamp(started.getTime()); + try { + Context context = new Context(); + row = DatabaseManager.create(context, "Webapp"); + row.setColumn("AppName", kind); + row.setColumn("URL", url); + row.setColumn("Started", now); + row.setColumn("isUI", isUI() ? 1 : 0); // update won't widen boolean to integer + DatabaseManager.update(context, row); + context.complete(); + } catch (SQLException e) { + log.error("Failed to record startup in Webapp table.", e); + } + } + + /** Record that this application is not running. */ + public void deregister() + { + // Remove the database entry + try { + Context context = new Context(); + DatabaseManager.delete(context, row); + context.complete(); + } catch (SQLException e) { + log.error("Failed to record shutdown in Webapp table.", e); + } + } + + /** Return the list of running applications. */ + static public List<AbstractDSpaceWebapp> getApps() + { + ArrayList<AbstractDSpaceWebapp> apps = new ArrayList<AbstractDSpaceWebapp>(); + TableRowIterator tri; + + Context context = null; + HttpMethod request = null; + try { + context = new Context(); + tri = DatabaseManager.queryTable(context, "Webapp", + "SELECT * FROM Webapp"); + + for (TableRow row : tri.toList()) + { + DSpaceWebapp app = new DSpaceWebapp(); + app.kind = row.getStringColumn("AppName"); + app.url = row.getStringColumn("URL"); + app.started = row.getDateColumn("Started"); + app.uiQ = row.getBooleanColumn("isUI"); + + HttpClient client = new HttpClient(); + request = new HeadMethod(app.url); + int status = client.executeMethod(request); + request.getResponseBody(); + if (status != HttpStatus.SC_OK) + { + DatabaseManager.delete(context, row); + context.commit(); + continue; + } + + apps.add(app); + } + } catch (SQLException e) { + log.error("Unable to list running applications", e); + } catch (HttpException e) { + log.error("Failure checking for a running webapp", e); + } catch (IOException e) { + log.error("Failure checking for a running webapp", e); + } finally { + if (null != request) + { + request.releaseConnection(); + } + if (null != context) + { + context.abort(); + } + } + + return apps; + } + + /** Container for retrieved database rows. */ + static private class DSpaceWebapp + extends AbstractDSpaceWebapp + { + private boolean uiQ; + + @Override + public boolean isUI() + { + return uiQ; + } + } + + /* DSpaceWebappMXBean methods */ + + @Override + public String getKind() + { + return kind; + } + + @Override + public String getURL() + { + return url; + } + + @Override + public String getStarted() + { + return started.toString(); + } +} diff --git a/dspace-api/src/main/java/org/dspace/app/util/CollectionDropDown.java b/dspace-api/src/main/java/org/dspace/app/util/CollectionDropDown.java new file mode 100644 index 0000000..a6bb2e5 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/util/CollectionDropDown.java @@ -0,0 +1,74 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.util; + +import java.sql.SQLException; +import org.dspace.content.Collection; +import org.dspace.content.Community; +import org.dspace.core.ConfigurationManager; + +/** + * Utility class for lists of collections. + */ + +public class CollectionDropDown { + + /** + * Get full path starting from a top-level community via subcommunities down to a collection. + * The full path will not be truncated. + * + * @param col + * Get full path for this collection + * @return Full path to the collection + */ + public static String collectionPath(Collection col) throws SQLException + { + return CollectionDropDown.collectionPath(col, 0); + } + + /** + * Get full path starting from a top-level community via subcommunities down to a collection. + * The full cat will be truncated to the specified number of characters and prepended with an ellipsis. + * + * @param col + * Get full path for this collection + * @param maxchars + * Truncate the full path to maxchar characters. 0 means do not truncate. + * @return Full path to the collection (truncated) + */ + public static String collectionPath(Collection col, int maxchars) throws SQLException + { + String separator = ConfigurationManager.getProperty("subcommunity.separator"); + if (separator == null) + { + separator = " > "; + } + + Community[] getCom = null; + StringBuffer name = new StringBuffer(""); + getCom = col.getCommunities(); // all communities containing given collection + for (Community com : getCom) + { + name.insert(0, com.getMetadata("name") + separator); + } + + name.append(col.getMetadata("name")); + + if (maxchars != 0) + { + int len = name.length(); + if (len > maxchars) + { + name = new StringBuffer(name.substring(len - (maxchars - 1), len)); + name.insert(0, "\u2026"); // prepend with an ellipsis (cut from left) + } + } + + return name.toString(); + } +} diff --git a/dspace-api/src/main/java/org/dspace/app/util/DSpaceWebappMXBean.java b/dspace-api/src/main/java/org/dspace/app/util/DSpaceWebappMXBean.java new file mode 100644 index 0000000..46c50b5 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/util/DSpaceWebappMXBean.java @@ -0,0 +1,29 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.app.util; + +/** + * MBean type for discovering DSpace web applications. + * + * @author mwood + */ +public interface DSpaceWebappMXBean +{ + /** Is this webapp a user interface? False if machine interface such as SWORD. */ + public boolean isUI(); + + /** What kind of webapp? XMLUI, OAI, etc. */ + public String getKind(); + + /** What is the base URL of this application? */ + public String getURL(); + + /** When did this application start? */ + public String getStarted(); +} diff --git a/dspace-api/src/main/java/org/dspace/app/util/Version.java b/dspace-api/src/main/java/org/dspace/app/util/Version.java new file mode 100644 index 0000000..ad7cc68 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/util/Version.java @@ -0,0 +1,105 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.util; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import java.util.List; +import java.util.Properties; +import org.dspace.services.ConfigurationService; +import org.dspace.utils.DSpace; + +/** + * Display information about this DSpace, its environment, and how it was built. + * + * @author mwood + */ +public class Version +{ + public static void main(String[] argv) + throws IOException + { + InputStream propStream; + + Properties sys = System.getProperties(); + + // DSpace version + System.out.printf("DSpace version: %s\n", + Util.getSourceVersion()); + + // SCM revision + Properties scm = new Properties(); + propStream = Version.class.getResourceAsStream("/scm.properties"); + if (null != propStream) + { + scm.load(propStream); + } + System.out.printf(" SCM revision: %s\n", scm.get("revision")); + System.out.printf(" SCM branch: %s\n", scm.get("branch")); + + // OS version + System.out.printf(" OS: %s(%s) version %s\n", + sys.get("os.name"), + sys.get("os.arch"), + sys.get("os.version")); + + // UIs used + List<AbstractDSpaceWebapp> apps = AbstractDSpaceWebapp.getApps(); + System.out.println(" Applications:"); + for (AbstractDSpaceWebapp app : apps) + { + System.out.printf(" %s at %s\n", + app.getKind(), app.getURL()); + } + + // Is Discovery available? + ConfigurationService config = new DSpace().getConfigurationService(); + String consumers = config.getPropertyAsType("event.dispatcher.default.consumers", ""); // Avoid null pointer + List<String> consumerList = Arrays.asList(consumers.split("\\s*,\\s*")); + if (consumerList.contains("discovery")) + { + System.out.println(" Discovery: enabled."); + } + + // Is Lucene search enabled? + if (consumerList.contains("search")) + { + System.out.println(" Lucene search: enabled."); + } + + // Java version + System.out.printf(" JRE: %s version %s\n", + sys.get("java.vendor"), + sys.get("java.version")); + + // ant version + Properties ant = new Properties(); + propStream = Version.class.getResourceAsStream("/ant.properties"); + if (null != propStream) + { + ant.load(propStream); + } + System.out.printf(" Ant version: %s\n", + ant.get("ant.version")); + + // maven version + Properties maven = new Properties(); + propStream = Version.class.getResourceAsStream("/maven.properties"); + if (null != propStream) + { + maven.load(propStream); + } + System.out.printf(" Maven version: %s\n", + maven.get("maven.version")); + + // DSpace directory path + System.out.printf(" DSpace home: %s\n", + config.getProperty("dspace.dir")); + } +} diff --git a/dspace-api/src/main/java/org/dspace/app/util/XMLUtils.java b/dspace-api/src/main/java/org/dspace/app/util/XMLUtils.java new file mode 100644 index 0000000..7089f88 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/util/XMLUtils.java @@ -0,0 +1,192 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.util; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +import org.apache.commons.lang.StringUtils; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +/** + * Simple class to read information from small XML using DOM manipulation + * + * @author Andrea Bollini + * + */ +public class XMLUtils +{ + /** + * + * @param rootElement + * the starting node + * @param subElementName + * the name of the subelement to find + * @return the list of all DOM Element with the provided name direct child + * of the starting node + */ + public static List<Element> getElementList(Element dataRoot, String name) + { + NodeList list = dataRoot.getElementsByTagName(name); + List<Element> listElements = new ArrayList<Element>(); + for (int i = 0; i < list.getLength(); i++) + { + Element item = (Element) list.item(i); + if (item.getParentNode().equals(dataRoot)) + { + listElements.add(item); + } + } + return listElements; + } + + /** + * + * @param dataRoot + * the starting node + * @param name + * the name of the sub element + * @param attr + * the attribute to get + * @return the value of the attribute for the sub element with the specified + * name in the starting node + */ + public static String getElementAttribute(Element dataRoot, String name, + String attr) + { + Element element = getSingleElement(dataRoot, name); + String attrValue = null; + if (element != null) + { + attrValue = element.getAttribute(attr); + if (StringUtils.isNotBlank(attrValue)) + { + attrValue = attrValue.trim(); + } + else + attrValue = null; + } + return attrValue; + } + + /** + * + * @param dataRoot + * the starting node + * @param name + * the name of the sub element + * @return the text content of the sub element with the specified name in + * the starting node + */ + public static String getElementValue(Element dataRoot, String name) + { + Element element = getSingleElement(dataRoot, name); + String elementValue = null; + if (element != null) + { + elementValue = element.getTextContent(); + if (StringUtils.isNotBlank(elementValue)) + { + elementValue = elementValue.trim(); + } + else + elementValue = null; + } + return elementValue; + } + + /** + * Return the first element child with the specified name + * + * @param dataRoot + * the starting node + * @param name + * the name of sub element to look for + * @return the first child element or null if no present + */ + public static Element getSingleElement(Element dataRoot, String name) + { + List<Element> nodeList = getElementList(dataRoot, name); + Element element = null; + if (nodeList != null && nodeList.size() > 0) + { + element = (Element) nodeList.get(0); + } + return element; + } + + /** + * + * @param rootElement + * the starting node + * @param subElementName + * the name of the subelement to find + * @return a list of string including all the text contents of the sub + * element with the specified name. If there are not sub element + * with the supplied name the method will return null + */ + public static List<String> getElementValueList(Element rootElement, + String subElementName) + { + if (rootElement == null) + return null; + + List<Element> subElements = getElementList(rootElement, subElementName); + if (subElements == null) + return null; + + List<String> result = new LinkedList<String>(); + for (Element el : subElements) + { + if (StringUtils.isNotBlank(el.getTextContent())) + { + result.add(el.getTextContent().trim()); + } + } + return result; + } + + /** + * root/subElement[]/field1, field2, fieldN + * + * @param rootElement + * the starting node + * @param subElementName + * the name of the sub element to work on + * @param fieldsName + * the names of the sub-sub-elements from which get the text + * content + * @return a list of array strings. The length of the array is equals to the + * number of fields required. For any fields the first textual value + * found in the sub element is used, null if no value is present + */ + public static List<String[]> getElementValueArrayList(Element rootElement, + String subElementName, String... fieldsName) + { + if (rootElement == null) + return null; + + List<Element> subElements = getElementList(rootElement, subElementName); + if (subElements == null) + return null; + + List<String[]> result = new LinkedList<String[]>(); + for (Element el : subElements) + { + String[] tmp = new String[fieldsName.length]; + for (int idx = 0; idx < fieldsName.length; idx++) + { + tmp[idx] = XMLUtils.getElementValue(el, fieldsName[idx]); + } + result.add(tmp); + } + return result; + } +} \ No newline at end of file diff --git a/dspace-api/src/main/java/org/dspace/app/util/package-info.java b/dspace-api/src/main/java/org/dspace/app/util/package-info.java new file mode 100644 index 0000000..faf86e7 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/app/util/package-info.java @@ -0,0 +1,15 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +/** + * <p>Miscellaneous utility classes. Includes supporting classes for AuthorizeManager, input forms, submission process, webapp init/cleanup, Google Scholar metadata, metadata visibility, OpenSearch, syndication feeds and more.</p> + * + */ + +package org.dspace.app.util; + diff --git a/dspace-api/src/main/java/org/dspace/browse/ItemCountDAOSolr.java b/dspace-api/src/main/java/org/dspace/browse/ItemCountDAOSolr.java new file mode 100644 index 0000000..890bf0c --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/browse/ItemCountDAOSolr.java @@ -0,0 +1,189 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.browse; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Logger; +import org.dspace.content.Collection; +import org.dspace.content.Community; +import org.dspace.content.DSpaceObject; +import org.dspace.core.Context; +import org.dspace.discovery.DiscoverFacetField; +import org.dspace.discovery.DiscoverQuery; +import org.dspace.discovery.DiscoverResult; +import org.dspace.discovery.DiscoverResult.FacetResult; +import org.dspace.discovery.SearchService; +import org.dspace.discovery.SearchServiceException; +import org.dspace.discovery.configuration.DiscoveryConfigurationParameters; +import org.dspace.utils.DSpace; + +/** + * Discovery (Solr) driver implementing ItemCountDAO interface to look up item + * count information in communities and collections. Caching operations are + * intentionally not implemented because Solr already is our cache. + * + * @author Ivan Masár, Andrea Bollini + * + */ +public class ItemCountDAOSolr implements ItemCountDAO +{ + /** Log4j logger */ + private static Logger log = Logger.getLogger(ItemCountDAOSolr.class); + + /** DSpace context */ + private Context context; + + /** + * Hold the communities item count obtained from SOLR after the first query. This only works + * well if the ItemCountDAO lifecycle is bound to the request lifecycle as + * it is now. If we switch to a Spring-based instantiation we should mark + * this bean as prototype + **/ + private Map<String, Integer> communitiesCount = null; + + /** Hold the collection item count obtained from SOLR after the first query **/ + private Map<String, Integer> collectionsCount = null; + + /** DSpace helper services access object */ + DSpace dspace = new DSpace(); + + /** Solr search service */ + SearchService searcher = dspace.getServiceManager().getServiceByName(SearchService.class.getName(), SearchService.class); + + /** + * Throw an ItemCountException as caching is not supported by ItemCountDAOSolr. + * + * @param collection + * @param count + * @throws ItemCountException + */ + public void collectionCount(Collection collection, int count) throws ItemCountException + { + throw new ItemCountException("Caching is not supported by the ItemCountDAOSolr as it is not really needed, Solr is faster!"); + } + + /** + * Throw an ItemCountException as caching is not supported by ItemCountDAOSolr. + * + * @param community + * @param count + * @throws ItemCountException + */ + public void communityCount(Community community, int count) throws ItemCountException + { + throw new ItemCountException("Caching is not supported by the ItemCountDAOSolr as it is not really needed, Solr is faster!"); + } + + /** + * Set the dspace context to use + * + * @param context + * @throws ItemCountException + */ + public void setContext(Context context) throws ItemCountException + { + this.context = context; + } + + /** + * Get the count of the items in the given container. + * + * @param dso + * @throws ItemCountException + */ + public int getCount(DSpaceObject dso) throws ItemCountException + { + loadCount(); + DiscoverQuery query = new DiscoverQuery(); + Integer val = null; + if (dso instanceof Collection) + { + val = collectionsCount.get(String.valueOf(((Collection) dso).getID())); + } + else if (dso instanceof Community) + { + val = communitiesCount.get(String.valueOf(((Community) dso).getID())); + } + else + { + throw new ItemCountException("We can only count items in Communities or Collections"); + } + + if (val != null) + { + return val.intValue(); + } + else + { + return 0; + } + } + + /** + * remove the cache for the given container (does nothing in the Solr backend) + * + * @param dso + * @throws ItemCountException + */ + public void remove(DSpaceObject dso) throws ItemCountException + { + } + + /** + * make sure that the counts are actually fetched from Solr (if haven't been + * cached in a Map yet) + * + * @throws ItemCountException + */ + private void loadCount() throws ItemCountException + { + if (communitiesCount != null || collectionsCount != null) + { + return; + } + + communitiesCount = new HashMap<String, Integer>(); + collectionsCount = new HashMap<String, Integer>(); + + DiscoverQuery query = new DiscoverQuery(); + query.setFacetMinCount(1); + query.addFacetField(new DiscoverFacetField("location.comm", + DiscoveryConfigurationParameters.TYPE_STANDARD, -1, + DiscoveryConfigurationParameters.SORT.COUNT)); + query.addFacetField(new DiscoverFacetField("location.coll", + DiscoveryConfigurationParameters.TYPE_STANDARD, -1, + DiscoveryConfigurationParameters.SORT.COUNT)); + query.addFilterQueries("search.resourcetype:2"); // count only items + query.addFilterQueries("NOT(discoverable:false)"); // only discoverable + query.setMaxResults(0); + + DiscoverResult sResponse = null; + try + { + sResponse = searcher.search(context, query, false); + List<FacetResult> commCount = sResponse.getFacetResult("location.comm"); + List<FacetResult> collCount = sResponse.getFacetResult("location.coll"); + for (FacetResult c : commCount) + { + communitiesCount.put(c.getAsFilterQuery(),(int) c.getCount()); + } + for (FacetResult c : collCount) + { + collectionsCount.put(c.getAsFilterQuery(),(int) c.getCount()); + } + } + catch (SearchServiceException e) + { + log.error("caught exception: ", e); + throw new ItemCountException(e); + } + } +} diff --git a/dspace-api/src/main/java/org/dspace/core/LicenseManager.java b/dspace-api/src/main/java/org/dspace/core/LicenseManager.java new file mode 100644 index 0000000..d9c5954 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/core/LicenseManager.java @@ -0,0 +1,211 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.core; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Encapsulate the deposit license. + * + * @author mhwood + */ +public class LicenseManager +{ + private static final Logger log = LoggerFactory.getLogger(LicenseManager.class); + + /** The default license */ + private static String license; + + /** + * Writes license to a text file. + * + * @param licenseFile + * name for the file into which license will be written, + * relative to the current directory. + */ + public static void writeLicenseFile(String licenseFile, + String newLicense) + { + try + { + FileOutputStream fos = new FileOutputStream(licenseFile); + OutputStreamWriter osr = new OutputStreamWriter(fos, "UTF-8"); + PrintWriter out = new PrintWriter(osr); + out.print(newLicense); + out.close(); + } catch (IOException e) + { + log.warn("license_write: " + e.getLocalizedMessage()); + } + license = newLicense; + } + + /** + * Get the License + * + * @param + * licenseFile file name + * + * @return + * license text + * + */ + public static String getLicenseText(String licenseFile) + { + InputStream is = null; + InputStreamReader ir = null; + BufferedReader br = null; + try + { + is = new FileInputStream(licenseFile); + ir = new InputStreamReader(is, "UTF-8"); + br = new BufferedReader(ir); + String lineIn; + license = ""; + while ((lineIn = br.readLine()) != null) + { + license = license + lineIn + '\n'; + } + } catch (IOException e) + { + log.error("Can't load configuration", e); + throw new IllegalStateException("Failed to read default license.", e); + } finally + { + if (br != null) + { + try + { + br.close(); + } catch (IOException ioe) + { + } + } + if (ir != null) + { + try + { + ir.close(); + } + catch (IOException ioe) + { + } + } + if (is != null) + { + try + { + is.close(); + } catch (IOException ioe) + { + } + } + } + return license; + } + + /** + * Get the site-wide default license that submitters need to grant + * + * @return the default license + */ + public static String getDefaultSubmissionLicense() + { + if (null == license) + { + init(); + } + return license; + } + + /** + * Load in the default license. + */ + private static void init() + { + File licenseFile = new File(ConfigurationManager.getProperty("dspace.dir") + + File.separator + "config" + File.separator + "default.license"); + + FileInputStream fir = null; + InputStreamReader ir = null; + BufferedReader br = null; + try + { + + fir = new FileInputStream(licenseFile); + ir = new InputStreamReader(fir, "UTF-8"); + br = new BufferedReader(ir); + String lineIn; + LicenseManager.license = ""; + + while ((lineIn = br.readLine()) != null) + { + LicenseManager.license = LicenseManager.license + lineIn + '\n'; + } + + br.close(); + + } + catch (IOException e) + { + log.error("Can't load license: " + licenseFile.toString() , e); + + // FIXME: Maybe something more graceful here, but with the + // configuration we can't do anything + throw new IllegalStateException("Cannot load license: " + + licenseFile.toString(),e); + } + finally + { + if (br != null) + { + try + { + br.close(); + } + catch (IOException ioe) + { + } + } + + if (ir != null) + { + try + { + ir.close(); + } + catch (IOException ioe) + { + } + } + + if (fir != null) + { + try + { + fir.close(); + } + catch (IOException ioe) + { + } + } + } + } +} diff --git a/dspace-api/src/main/java/org/dspace/core/NewsManager.java b/dspace-api/src/main/java/org/dspace/core/NewsManager.java new file mode 100644 index 0000000..e6128ba --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/core/NewsManager.java @@ -0,0 +1,116 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.core; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Encapsulate access to the news texts. + * + * @author mhwood + */ +public class NewsManager +{ + private static final Logger log = LoggerFactory.getLogger(NewsManager.class); + + /** Not instantiable. */ + private NewsManager() {} + + /** + * Reads news from a text file. + * + * @param newsFile + * name of the news file to read in, relative to the news file path. + */ + public static String readNewsFile(String newsFile) + { + String fileName = getNewsFilePath(); + + fileName += newsFile; + + StringBuilder text = new StringBuilder(); + + try + { + // retrieve existing news from file + FileInputStream fir = new FileInputStream(fileName); + InputStreamReader ir = new InputStreamReader(fir, "UTF-8"); + BufferedReader br = new BufferedReader(ir); + + String lineIn; + + while ((lineIn = br.readLine()) != null) + { + text.append(lineIn); + } + + br.close(); + ir.close(); + fir.close(); + } + catch (IOException e) + { + log.warn("news_read: " + e.getLocalizedMessage()); + } + + return text.toString(); + } + + /** + * Writes news to a text file. + * + * @param newsFile + * name of the news file to read in, relative to the news file path. + * @param news + * the text to be written to the file. + */ + public static String writeNewsFile(String newsFile, String news) + { + String fileName = getNewsFilePath(); + + fileName += newsFile; + + try + { + // write the news out to the appropriate file + FileOutputStream fos = new FileOutputStream(fileName); + OutputStreamWriter osr = new OutputStreamWriter(fos, "UTF-8"); + PrintWriter out = new PrintWriter(osr); + out.print(news); + out.close(); + } + catch (IOException e) + { + log.warn("news_write: " + e.getLocalizedMessage()); + } + + return news; + } + + /** + * Get the path for the news files. + * + */ + public static String getNewsFilePath() + { + String filePath = ConfigurationManager.getProperty("dspace.dir") + + File.separator + "config" + File.separator; + + return filePath; + } +} diff --git a/dspace-api/src/main/java/org/dspace/ctask/general/MetadataWebService.java b/dspace-api/src/main/java/org/dspace/ctask/general/MetadataWebService.java new file mode 100644 index 0000000..e58e83f --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/ctask/general/MetadataWebService.java @@ -0,0 +1,543 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.ctask.general; + +import java.io.InputStream; +import java.io.IOException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.namespace.NamespaceContext; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpression; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; +import javax.xml.XMLConstants; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.log4j.Logger; + +import org.w3c.dom.Document; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import org.xml.sax.SAXException; + +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.DCValue; +import org.dspace.content.DSpaceObject; +import org.dspace.content.Item; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Constants; +import org.dspace.curate.AbstractCurationTask; +import org.dspace.curate.Curator; +import org.dspace.curate.Mutative; +import org.dspace.curate.Suspendable; + +/** + * MetadataWebService task calls a web service using metadata from + * passed item to obtain data. Depending on configuration, this + * data may be assigned to item metadata fields, or just recorded in the + * task result string. Task succeeds if web service call succeeds and + * configured updates occur, fails if task user not authorized or item + * lacks metadata to call service, and returns error in all other cases + * (except skip status for non-item objects). + * Intended use: cataloging tool in workflow and general curation. + * The task uses a URL 'template' to compose the service call, e.g. + * + * http://www.sherpa.ac.uk/romeo/api29.php?issn={dc.identifier.issn} + * + * Task will substitute the value of the passed item's metadata field + * in the {parameter} position. If multiple values are present in the + * item field, the first value is used. + * + * The task uses another property (the datamap) to determine what data + * to extract from the service response and how to use it, e.g. + * + * //publisher/name=>dc.publisher,//romeocolour + * + * Task will evaluate the left-hand side (or entire token) of each + * comma-separated token in the property as an XPath 1.0 expression into + * the response document, and if there is a mapping symbol (e.g.'=>') and + * value, it will assign the response document value(s) to the named + * metadata field in the passed item. If the response document contains + * multiple values, they will all be assigned to the item field. The + * mapping symbol governs the nature of metadata field assignment: + * + * '->' mapping will add to any existing values in the item field + * '=>' mapping will replace any existing values in the item field + * '~>' mapping will add *only* if item field has no existing values + * + * Unmapped data (without a mapping symbol) will simply be added to the task + * result string, prepended by the XPath expression (a little prettified). + * Each label/value pair in the result string is separated by a space, + * unless the optional 'separator' property is defined. + * + * A very rudimentary facility for transformation of data is supported, e.g. + * + * http://www.crossref.org/openurl/?id={doi:dc.relation.isversionof}&format=unixref + * + * The 'doi:' prefix will cause the task to look for a 'transform' with that + * name, which is applied to the metadata value before parameter substitution + * occurs. Transforms are defined in a task property such as the following: + * + * transform.doi = match 10. trunc 60 + * + * This means exclude the value string up to the occurrence of '10.', then + * truncate after 60 characters. The only transform functions currently defined: + * + * 'cut' <number> = remove number leading characters + * 'trunc' <number> = remove trailing characters after number length + * 'match' <pattern> = start match at pattern + * 'text' <characters> = append literal characters (enclose in ' ' when whitespace needed) + * + * If the transform results in an invalid state (e.g. cutting more characters + * than are in the value), the condition will be logged and the + * un-transformed value used. + * + * Transforms may also be used in datamaps, e.g. + * + * //publisher/name=>shorten:dc.publisher,//romeocolour + * + * which would apply the 'shorten' transform to the service response value(s) + * prior to metadata field assignment. + * + * An optional property 'headers' may be defined to stipulate any HTTP headers + * required in the service call. The property syntax is double-pipe separated headers: + * + * Accept: text/xml||Cache-Control: no-cache + * + * @author richardrodgers + */ +@Mutative +@Suspendable +public class MetadataWebService extends AbstractCurationTask implements NamespaceContext +{ + /** log4j category */ + private static final Logger log = Logger.getLogger(MetadataWebService.class); + // transform token parsing pattern + private static Pattern ttPattern = Pattern.compile("\'([^\']*)\'|(\\S+)"); + // URL of web service with template parameters + private String urlTemplate = null; + // template parameter + private String templateParam = null; + // Item metadata field to use in service call + private String lookupField = null; + // Optional transformation of lookupField + private String lookupTransform = null; + // response data to map/record + private List<DataInfo> dataList = null; + // response document parsing tools + private DocumentBuilder docBuilder = null; + // language for metadata fields assigned + private String lang = null; + // field separator in result string + private String fieldSeparator = null; + // optional XML namespace map + private Map<String, String> nsMap = new HashMap<String, String>(); + // optional HTTP headers + private Map<String, String> headers = new HashMap<String, String>(); + + /** + * Initializes task + * @param curator Curator object performing this task + * @param taskId the configured local name of the task + */ + @Override + public void init(Curator curator, String taskId) throws IOException { + super.init(curator, taskId); + lang = ConfigurationManager.getProperty("default.language"); + String fldSep = taskProperty("separator"); + fieldSeparator = (fldSep != null) ? fldSep : " "; + urlTemplate = taskProperty("template"); + templateParam = urlTemplate.substring(urlTemplate.indexOf("{") + 1, + urlTemplate.indexOf("}")); + String[] parsed = parseTransform(templateParam); + lookupField = parsed[0]; + lookupTransform = parsed[1]; + dataList = new ArrayList<DataInfo>(); + for (String entry : taskProperty("datamap").split(",")) { + entry = entry.trim(); + String src = entry; + String mapping = null; + String field = null; + int mapIdx = getMapIndex(entry); + if (mapIdx > 0) { + src = entry.substring(0, mapIdx); + mapping = entry.substring(mapIdx, mapIdx + 2); + field = entry.substring(mapIdx + 2); + } + int slIdx = src.lastIndexOf("/"); + String label = (slIdx > 0) ? src.substring(slIdx + 1) : src; + dataList.add(new DataInfo(src, label, mapping, field)); + } + String hdrs = taskProperty("headers"); + if (hdrs != null) { + for (String header : hdrs.split("\\|\\|")) { + int split = header.indexOf(":"); + headers.put(header.substring(0, split).trim(), header.substring(split + 1).trim()); + } + } + // initialize response document parser + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setNamespaceAware(true); + try { + docBuilder = factory.newDocumentBuilder(); + } catch (ParserConfigurationException pcE) { + log.error("caught exception: " + pcE); + // no point in continuing + throw new IOException(pcE.getMessage(), pcE); + } + } + + /** + * Perform the curation task upon passed DSO + * + * @param dso the DSpace object + * @throws IOException + */ + @Override + public int perform(DSpaceObject dso) throws IOException { + + int status = Curator.CURATE_SKIP; + StringBuilder resultSb = new StringBuilder(); + + if (dso.getType() == Constants.ITEM) { + Item item = (Item)dso; + String itemId = item.getHandle(); + if (itemId == null) { + // we are still in workflow - no handle assigned - try title + DCValue[] titleDc = item.getMetadata("dc", "title", null, Item.ANY); + String title = (titleDc.length > 0) ? titleDc[0].value : "untitled - dbId: " + item.getID(); + itemId = "Workflow item: " + title; + } else { + itemId = "handle: " + itemId; + } + resultSb.append(itemId); + // Only proceed if item has a value for service template parameter + DCValue[] dcVals = item.getMetadata(lookupField); + if (dcVals.length > 0 && dcVals[0].value.length() > 0) { + String value = transform(dcVals[0].value, lookupTransform); + status = callService(value, item, resultSb); + } else { + resultSb.append(" lacks metadata value required for service: ").append(lookupField); + status = Curator.CURATE_FAIL; + } + } else { + resultSb.append("Object skipped"); + } + report(resultSb.toString()); + setResult(resultSb.toString()); + return status; + } + + private int callService(String value, Item item, StringBuilder resultSb) throws IOException { + + String callUrl = urlTemplate.replaceAll("\\{" + templateParam + "\\}", value); + HttpClient client = new DefaultHttpClient(); + HttpGet req = new HttpGet(callUrl); + for (Map.Entry<String, String> entry : headers.entrySet()) { + req.addHeader(entry.getKey(), entry.getValue()); + } + HttpResponse resp = client.execute(req); + int status = Curator.CURATE_ERROR; + int statusCode = resp.getStatusLine().getStatusCode(); + if (statusCode == HttpStatus.SC_OK) { + HttpEntity entity = resp.getEntity(); + if (entity != null) { + // boiler-plate handling taken from Apache 4.1 javadoc + InputStream instream = entity.getContent(); + try { + Document doc = docBuilder.parse(instream); + status = processResponse(doc, item, resultSb); + } catch (SAXException saxE) { + log.error("caught exception: " + saxE); + resultSb.append(" unable to read response document"); + } catch (RuntimeException ex) { + // In case of an unexpected exception you may want to abort + // the HTTP request in order to shut down the underlying + // connection and release it back to the connection manager. + req.abort(); + log.error("caught exception: " + ex); + throw ex; + } finally { + // Closing the input stream will trigger connection release + instream.close(); + } + // When HttpClient instance is no longer needed, + // shut down the connection manager to ensure + // immediate deallocation of all system resources + client.getConnectionManager().shutdown(); + } else { + log.error(" obtained no valid service response"); + resultSb.append("no service response"); + } + } else { + log.error("service returned non-OK status: " + statusCode); + resultSb.append("no service response"); + } + return status; + } + + private int processResponse(Document doc, Item item, StringBuilder resultSb) throws IOException { + boolean update = false; + int status = Curator.CURATE_ERROR; + List<String> values = new ArrayList<String>(); + checkNamespaces(doc); + try { + for (DataInfo info : dataList) { + NodeList nodes = (NodeList)info.expr.evaluate(doc, XPathConstants.NODESET); + values.clear(); + // if data found and we are mapping, check assignment policy + if (nodes.getLength() > 0 && info.mapping != null) { + if ("=>".equals(info.mapping)) { + item.clearMetadata(info.schema, info.element, info.qualifier, Item.ANY); + } else if ("~>".equals(info.mapping)) { + if (item.getMetadata(info.schema, info.element, info.qualifier, Item.ANY).length > 0) { + // there are values, so don't overwrite + continue; + } + } else { + for (DCValue dcVal : item.getMetadata(info.schema, info.element, info.qualifier, Item.ANY)) { + values.add(dcVal.value); + } + } + } + for (int i = 0; i < nodes.getLength(); i++) { + Node node = nodes.item(i); + String tvalue = transform(node.getFirstChild().getNodeValue(), info.transform); + // assign to metadata field if mapped && not present + if (info.mapping != null && ! values.contains(tvalue)) { + item.addMetadata(info.schema, info.element, info.qualifier, lang, tvalue); + update = true; + } + // add to result string in any case + resultSb.append(fieldSeparator).append(info.label).append(": ").append(tvalue); + } + } + // update Item if it has changed + if (update) { + item.update(); + } + status = Curator.CURATE_SUCCESS; + } catch (AuthorizeException authE) { + log.error("caught exception: " + authE); + resultSb.append(" not authorized to update"); + status = Curator.CURATE_FAIL; + } catch (SQLException sqlE) { + log.error("caught exception: " + sqlE); + resultSb.append(" error updating metadata"); + } catch (XPathExpressionException xpeE) { + log.error("caught exception: " + xpeE); + resultSb.append(" error reading response document"); + } + return status; + } + + private String transform(String value, String transDef) { + if (transDef == null) { + return value; + } + String[] tokens = tokenize(transDef); + String retValue = value; + for (int i = 0; i < tokens.length; i+= 2) { + if ("cut".equals(tokens[i]) || "trunc".equals(tokens[i])) { + int index = Integer.parseInt(tokens[i+1]); + if (retValue.length() > index) { + if ("cut".equals(tokens[i])) { + retValue = retValue.substring(index); + } else { + retValue = retValue.substring(0, index); + } + } else if ("cut".equals(tokens[i])) { + log.error("requested cut: " + index + " exceeds value length"); + return value; + } + } else if ("match".equals(tokens[i])) { + int index2 = retValue.indexOf(tokens[i+1]); + if (index2 > 0) { + retValue = retValue.substring(index2); + } else { + log.error("requested match: " + tokens[i+1] + " failed"); + return value; + } + } else if ("text".equals(tokens[i])) { + retValue = retValue + tokens[i+1]; + } else { + log.error(" unknown transform operation: " + tokens[i]); + return value; + } + } + return retValue; + } + + private String[] tokenize(String text) { + List<String> list = new ArrayList<String>(); + Matcher m = ttPattern.matcher(text); + while (m.find()) { + if (m.group(1) != null) { + list.add(m.group(1)); + } else if (m.group(2) != null) { + list.add(m.group(2)); + } + } + return list.toArray(new String[0]); + } + + private int getMapIndex(String mapping) { + int index = mapping.indexOf("->"); + if (index == -1) { + index = mapping.indexOf("=>"); + } + if (index == -1) { + index = mapping.indexOf("~>"); + } + return index; + } + + private String[] parseTransform(String field) { + String[] parsed = new String[2]; + parsed[0] = field; + int txIdx = field.indexOf(":"); + if (txIdx > 0) { + // transform specified + String txName = field.substring(0, txIdx); + parsed[1] = taskProperty("transform." + txName); + if (parsed[1] == null) { + log.error("no transform found for: " + txName); + } + parsed[0] = field.substring(txIdx + 1); + } + return parsed; + } + + private void checkNamespaces(Document document) throws IOException { + // skip if already done + if (dataList.get(0).expr != null) { + return; + } + try { + XPath xpath = XPathFactory.newInstance().newXPath(); + String prefix = null; + NamedNodeMap attrs = document.getDocumentElement().getAttributes(); + for (int i = 0; i < attrs.getLength(); i++) { + Node n = attrs.item(i); + String name = n.getNodeName(); + // remember if a namespace + if (name.startsWith("xmlns")) { + if (! "xmlns".equals(name)) { + // it is a declared (non-default) namespace - capture prefix + nsMap.put(name.substring(name.indexOf(":") + 1), n.getNodeValue()); + } else { + // it is the default name space - mint a unique prefix + prefix = "pre"; + nsMap.put(prefix, n.getNodeValue()); + } + } + } + if (nsMap.size() > 0) { + xpath.setNamespaceContext(this); + } + // now compile the XPath expressions + for (DataInfo info : dataList) { + info.expr = xpath.compile(mangleExpr(info.xpsrc, prefix)); + } + } catch (XPathExpressionException xpeE) { + log.error("caught exception: " + xpeE); + // no point in continuing + throw new IOException(xpeE.getMessage(), xpeE); + } + } + + private String mangleExpr(String expr, String prefix) { + if (prefix == null) { + return expr; + } + // OK the drill is to prepend all node names with the prefix + // *unless* the node name already has a prefix. + StringBuilder sb = new StringBuilder(); + int i = 0; + while (i < expr.length()) { + if (expr.charAt(i) == '/') { + sb.append("/"); + i++; + } else { + int next = expr.indexOf("/", i); + String token = (next > 0) ? expr.substring(i, next) : expr.substring(i); + if (! token.startsWith("@") && token.indexOf(":") < 0) { + sb.append(prefix).append(":"); + } + sb.append(token); + i += token.length(); + } + } + return sb.toString(); + } + + // ---- NamespaceContext methods ---- // + + public String getNamespaceURI(String prefix) { + if (prefix == null) { + throw new NullPointerException("Null prefix"); + } else if ("xml".equals(prefix)) { + return XMLConstants.XML_NS_URI; + } + String nsURI = nsMap.get(prefix); + return (nsURI != null) ? nsURI : XMLConstants.NULL_NS_URI; + } + + public String getPrefix(String uri) { + throw new UnsupportedOperationException(); + } + + public Iterator getPrefixes(String uri) { + throw new UnsupportedOperationException(); + } + + private class DataInfo { + public XPathExpression expr; // compiled XPath espression for data + public String xpsrc; // uncompiled XPath expression + public String label; // label for data in result string + public String mapping; // data mapping symbol: ->,=>,~>, or null = unmapped + public String schema; // item metadata field mapping target, null = unmapped + public String element; // item metadata field mapping target, null = unmapped + public String qualifier; // item metadata field mapping target, null = unmapped + public String transform; // optional transformation of data before field assignment + + public DataInfo(String xpsrc, String label, String mapping, String field) { + this.xpsrc = xpsrc; + this.expr = expr; + this.label = label; + this.mapping = mapping; + if (field != null) { + String[] parsed = parseTransform(field); + String[] parts = parsed[0].split("\\."); + this.schema = parts[0]; + this.element = parts[1]; + this.qualifier = (parts.length == 3) ? parts[2] : null; + this.transform = parsed[1]; + } + } + } +} diff --git a/dspace-api/src/main/java/org/dspace/discovery/SolrServiceSpellIndexingPlugin.java b/dspace-api/src/main/java/org/dspace/discovery/SolrServiceSpellIndexingPlugin.java new file mode 100644 index 0000000..d81b999 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/discovery/SolrServiceSpellIndexingPlugin.java @@ -0,0 +1,36 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.discovery; + +import org.apache.solr.common.SolrInputDocument; +import org.dspace.content.DCValue; +import org.dspace.content.DSpaceObject; +import org.dspace.content.Item; +import org.dspace.core.Context; + +/** + * Created with IntelliJ IDEA. + * User: kevin + * Date: 03/10/13 + * Time: 15:06 + * To change this template use File | Settings | File Templates. + */ +public class SolrServiceSpellIndexingPlugin implements SolrServiceIndexPlugin { + + @Override + public void additionalIndex(Context context, DSpaceObject dso, SolrInputDocument document) { + if(dso instanceof Item){ + DCValue[] dcValues = ((Item) dso).getMetadata(Item.ANY, Item.ANY, Item.ANY, Item.ANY); + for (DCValue dcValue : dcValues) { + document.addField("a_spell", dcValue.value); + + } + } + + } +} diff --git a/dspace-api/src/main/java/org/dspace/handle/MultiRemoteDSpaceRepositoryHandlePlugin.java b/dspace-api/src/main/java/org/dspace/handle/MultiRemoteDSpaceRepositoryHandlePlugin.java new file mode 100644 index 0000000..2d57b88 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/handle/MultiRemoteDSpaceRepositoryHandlePlugin.java @@ -0,0 +1,734 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.handle; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +import net.handle.hdllib.Encoder; +import net.handle.hdllib.HandleException; +import net.handle.hdllib.HandleStorage; +import net.handle.hdllib.HandleValue; +import net.handle.hdllib.ScanCallback; +import net.handle.hdllib.Util; +import net.handle.util.StreamTable; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; + +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; +import java.util.Iterator; + +/** + * Extension to the CNRI Handle Server that translates requests to resolve + * handles into remote calls to the mini-DSpace Handle resolver JSON API. This + * only provides some of the functionality (namely, the resolving of handles to + * URLs) of the CNRI HandleStorage interface. + * + * <p> + * This class is intended to be embedded in the CNRI Handle Server. It conforms + * to the HandleStorage interface that was delivered with Handle Server version + * 6.2.0. + * </p> + * + * @author Andrea Bollini + */ +public class MultiRemoteDSpaceRepositoryHandlePlugin implements HandleStorage +{ + /** + * Name of configuration file. This can be overwritten by setting a path + * to the configuration file to use in the system property + * <code>dspace.handle.plugin.configuration</code>. + */ + private static String CONFIG_FILE_NAME = "handle-dspace-plugin.cfg"; + /** + * Every Property starting with this key will be used as DSpace endpoint + * while resolving handles, f.e. http://localhost:8080/xmlui/handleresolver. + */ + private static String PROPERTY_KEY = "dspace.handle.endpoint"; + + /** log4j category */ + private static Logger log = Logger + .getLogger(MultiRemoteDSpaceRepositoryHandlePlugin.class); + + // maps prefixes to URLs from DSpace instances + private Map<String, String> prefixes; + + /** + * Constructor + */ + public MultiRemoteDSpaceRepositoryHandlePlugin() + { + } + + // ////////////////////////////////////// + // Non-Resolving methods -- unimplemented + // ////////////////////////////////////// + + /** + * HandleStorage interface method - not implemented. + */ + public void init(StreamTable st) throws Exception + { + // Not implemented + if (log.isInfoEnabled()) + { + log.info("Called init"); + } + + // initalize our prefix map + this.prefixes = new HashMap<String, String>(); + + // try to find our configuration + Properties properties = loadProperties(CONFIG_FILE_NAME); + + // find urls of all configured dspace instances + for (Enumeration e = properties.propertyNames(); e.hasMoreElements();) + { + String propertyName = (String) e.nextElement(); + if (propertyName.startsWith(this.PROPERTY_KEY)) + { + // load the prefixes of this instance + loadPrefixes(properties.getProperty(propertyName)); + } + } + + // did we found any prefixes? + if (this.prefixes.isEmpty()) + { + throw new HandleException(HandleException.INTERNAL_ERROR, + "Unable to find configuration or to reach any DSpace instance."); + } + + if (log.isInfoEnabled()) + { + for (Iterator<String> it = this.prefixes.keySet().iterator(); it.hasNext() ;) + { + String prefix = it.next(); + log.info("Loaded Prefix " + prefix + " from " + this.prefixes.get(prefix)); + } + } + } + + /** + * HandleStorage interface method - not implemented. + */ + public void setHaveNA(byte[] theHandle, boolean haveit) + throws HandleException + { + // Not implemented + if (log.isInfoEnabled()) + { + log.info("Called setHaveNA (not implemented)"); + } + } + + /** + * HandleStorage interface method - not implemented. + */ + public void createHandle(byte[] theHandle, HandleValue[] values) + throws HandleException + { + // Not implemented + if (log.isInfoEnabled()) + { + log.info("Called createHandle (not implemented)"); + } + } + + /** + * HandleStorage interface method - not implemented. + */ + public boolean deleteHandle(byte[] theHandle) throws HandleException + { + // Not implemented + if (log.isInfoEnabled()) + { + log.info("Called deleteHandle (not implemented)"); + } + + return false; + } + + /** + * HandleStorage interface method - not implemented. + */ + public void updateValue(byte[] theHandle, HandleValue[] values) + throws HandleException + { + // Not implemented + if (log.isInfoEnabled()) + { + log.info("Called updateValue (not implemented)"); + } + } + + /** + * HandleStorage interface method - not implemented. + */ + public void deleteAllRecords() throws HandleException + { + // Not implemented + if (log.isInfoEnabled()) + { + log.info("Called deleteAllRecords (not implemented)"); + } + } + + /** + * HandleStorage interface method - not implemented. + */ + public void checkpointDatabase() throws HandleException + { + // Not implemented + if (log.isInfoEnabled()) + { + log.info("Called checkpointDatabase (not implemented)"); + } + } + + /** + * HandleStorage interface method - not implemented. + */ + public void shutdown() + { + // Not implemented + if (log.isInfoEnabled()) + { + log.info("Called shutdown (not implemented)"); + } + } + + /** + * HandleStorage interface method - not implemented. + */ + public void scanHandles(ScanCallback callback) throws HandleException + { + // Not implemented + if (log.isInfoEnabled()) + { + log.info("Called scanHandles (not implemented)"); + } + } + + /** + * HandleStorage interface method - not implemented. + */ + public void scanNAs(ScanCallback callback) throws HandleException + { + // Not implemented + if (log.isInfoEnabled()) + { + log.info("Called scanNAs (not implemented)"); + } + } + + // ////////////////////////////////////// + // Resolving methods + // ////////////////////////////////////// + + /** + * Return the raw values for this handle. This implementation returns a + * single URL value. + * + * @param theHandle + * byte array representation of handle + * @param indexList + * ignored + * @param typeList + * ignored + * @return A byte array with the raw data for this handle. Currently, this + * consists of a single URL value. + * @exception HandleException + * If an error occurs while calling the Handle API. + */ + public byte[][] getRawHandleValues(byte[] theHandle, int[] indexList, + byte[][] typeList) throws HandleException + { + if (log.isInfoEnabled()) + { + log.info("Called getRawHandleValues"); + } + + if (theHandle == null) + { + throw new HandleException(HandleException.INTERNAL_ERROR); + } + + String handle = Util.decodeString(theHandle); + String url = getRemoteDSpaceURL(handle); + HandleValue value = new HandleValue(); + + value.setIndex(100); + value.setType(Util.encodeString("URL")); + value.setData(Util.encodeString(url)); + value.setTTLType((byte) 0); + value.setTTL(100); + value.setTimestamp(100); + value.setReferences(null); + value.setAdminCanRead(true); + value.setAdminCanWrite(false); + value.setAnyoneCanRead(true); + value.setAnyoneCanWrite(false); + + List<HandleValue> values = new LinkedList<HandleValue>(); + + values.add(value); + + byte[][] rawValues = new byte[values.size()][]; + + for (int i = 0; i < values.size(); i++) + { + HandleValue hvalue = values.get(i); + + rawValues[i] = new byte[Encoder.calcStorageSize(hvalue)]; + Encoder.encodeHandleValue(rawValues[i], 0, hvalue); + } + + return rawValues; + + } + + private String getRemoteDSpaceURL(String handle) throws HandleException + { + if (log.isInfoEnabled()) + { + log.info("Called getRemoteDSpaceURL("+handle+")."); + } + + InputStreamReader jsonStreamReader = null; + String url = null; + try + { + String prefix = handle.split("/")[0]; + String endpoint = this.prefixes.get(prefix); + if (endpoint == null) + { + if (log.isDebugEnabled()) + { + log.debug("Cannot find endpoint for prefix " + prefix + ", throw HANDLE_DOES_NOT_EXIST."); + } + throw new HandleException(HandleException.HANDLE_DOES_NOT_EXIST); + } + + String jsonurl = endpoint + "/resolve/" + handle; + jsonStreamReader = new InputStreamReader( + new URL(jsonurl).openStream(), "UTF-8"); + JsonParser parser = new JsonParser(); + JsonElement jsonElement = parser.parse(jsonStreamReader); + + if (jsonElement == null || jsonElement.isJsonNull() + || jsonElement.getAsJsonArray().size() == 0 + || jsonElement.getAsJsonArray().get(0).isJsonNull()) + { + if (log.isDebugEnabled()) + { + log.debug("Throw HandleException: HANDLE_DOES_NOT_EXIST."); + } + throw new HandleException(HandleException.HANDLE_DOES_NOT_EXIST); + } + + url = jsonElement.getAsJsonArray().get(0).getAsString(); + } + catch (Exception e) + { + if (log.isDebugEnabled()) + { + log.debug("Exception in getRawHandleValues", e); + } + + // Stack loss as exception does not support cause + throw new HandleException(HandleException.INTERNAL_ERROR); + } + finally + { + if (jsonStreamReader != null) + { + try + { + jsonStreamReader.close(); + } + catch (IOException e) + { + log.error(e.getMessage(), e); + } + } + } + if (log.isDebugEnabled()) + { + log.debug(("getRemoteDspaceURL returns " + url)); + } + return url; + } + + /** + * Return true if we have this handle in storage. + * + * @param theHandle + * byte array representation of handle + * @return True if we have this handle in storage + * @exception HandleException + * If an error occurs while calling the Handle API. + */ + public boolean haveNA(byte[] theHandle) throws HandleException + { + if (log.isInfoEnabled()) + { + log.info("Called haveNA"); + } + /* + * Naming authority Handles are in the form: 0.NA/1721.1234 + * + * 0.NA is basically the naming authority for naming authorities. For + * this simple implementation, we will just check if the requestes + * prefix is one that DSpace returns when we call + * handleresolver/listprefixes. + */ + // Which authority does the request pertain to? Remove the heading "0.NA/". + String received = Util.decodeString(theHandle).substring("0.NA/".length()); + + return this.prefixes.containsKey(received); + } + + /** + * Return all handles in local storage which start with the naming authority + * handle. + * + * @param theNAHandle + * byte array representation of naming authority handle + * @return All handles in local storage which start with the naming + * authority handle. + * @exception HandleException + * If an error occurs while calling the Handle API. + */ + public Enumeration getHandlesForNA(byte[] theNAHandle) + throws HandleException + { + String naHandle = Util.decodeString(theNAHandle); + + if (log.isInfoEnabled()) + { + log.info("Called getHandlesForNA for NA " + naHandle); + } + + List<String> handles = getRemoteDSpaceHandles(naHandle); + List<byte[]> results = new LinkedList<byte[]>(); + + for (String handle : handles) + { + // Transforms to byte array + results.add(Util.encodeString(handle)); + } + + return Collections.enumeration(results); + + } + + private List<String> getRemoteDSpaceHandles(String naHandle) + throws HandleException + { + List<String> handles = new ArrayList<String>(); + + String endpoint = this.prefixes.get(naHandle); + if (null == endpoint) + { + // We don't know anything about this prefix, return an empty list. + return handles; + } + + InputStreamReader jsonStreamReader = null; + try + { + String jsonurl = endpoint + "/listhandles/" + naHandle; + jsonStreamReader = new InputStreamReader( + new URL(jsonurl).openStream(), "UTF-8"); + JsonParser parser = new JsonParser(); + JsonElement jsonElement = parser.parse(jsonStreamReader); + + if (jsonElement != null && jsonElement.getAsJsonArray().size() != 0) + { + for (int i = 0; i < jsonElement.getAsJsonArray().size(); i++) + { + handles.add(jsonElement.getAsJsonArray().get(i) + .getAsString()); + } + } + } + catch (Exception e) + { + if (log.isDebugEnabled()) + { + log.debug("Exception in getHandlesForNA", e); + } + + // Stack loss as exception does not support cause + throw new HandleException(HandleException.INTERNAL_ERROR); + } + finally + { + if (jsonStreamReader != null) + { + try + { + jsonStreamReader.close(); + } + catch (IOException e) + { + log.error(e.getMessage(), e); + } + } + } + return handles; + } + + private Properties loadProperties(String filename) throws IOException + { + InputStream is = findConfigFile(filename); + Properties props = new Properties(); + + InputStreamReader ir = null; + // load the configuration + try { + ir = new InputStreamReader(is, "UTF-8"); + props.load(ir); + } catch (UnsupportedEncodingException ex) { + if (log.isInfoEnabled()) + { + log.info("Caught an UnsupportedEncodingException while loading configuration: " + ex.getMessage()); + } + throw new RuntimeException(ex); + } + catch (IOException ex) + { + if (log.isInfoEnabled()) + { + log.info("Caught an IOException while loading configuration: " + ex.getMessage()); + } + throw ex; + } + finally + { + if (ir != null) + { + try + { + ir.close(); + } + catch (IOException ex) + { + // nothing to do. + } + } + if (is != null) + { + try + { + is.close(); + } + catch (IOException ex) + { + // nothing to do. + } + } + } + + return props; + } + + private InputStream findConfigFile(String filename) + { + InputStream is = null; + + // try to load config file as defined in system property: + try + { + String configProperty = System.getProperty("dspace.handle.plugin.configuration"); + if (null != configProperty) + { + is = new FileInputStream(configProperty); + } + } + catch (SecurityException se) + { + // A security manager may stop us from accessing the system properties. + // This isn't really a fatal error though, so catch and ignore + log.warn("Unable to access system properties, ignoring.", se); + } + catch (FileNotFoundException fne) + { + log.warn("Unable to find config file as defined by system property: " + + fne.getMessage()); + } + + if (null == is) + { + // try some default locations + URL url = MultiRemoteDSpaceRepositoryHandlePlugin.class.getResource( + "/" + filename); + if (null == url) + { + if (log.isInfoEnabled()) + { + log.info("Cannot find configuration by using getResource()."); + } + } else { + try + { + is = new FileInputStream(url.getPath()); + log.warn("Falling back to default locations, " + + "found configuration at: " + url.getPath()); + } + catch (FileNotFoundException e) + { + if (log.isInfoEnabled()) + { + // didn't found fallback config, nothing to do about it. + log.info("Unable to open fallback configuration: " + e.getMessage()); + } + } + } + } + + if (null == is) + { + // try to find configuration in the current working directory + // where the user started the handle server. + try + { + is = new FileInputStream("./" + filename); + if (log.isInfoEnabled()) + { + log.info("Loaded configuration from your current working " + + "directory where you started the handle server."); + } + } + catch (FileNotFoundException ex) + { + if (log.isInfoEnabled()) + { + log.info("Can't load config file: " + ex.getMessage()); + } + } + } + + if (is == null) + { + throw new IllegalStateException("Cannot find configuration."); + } + + return is; + } + + private void loadPrefixes(String endpoint) + { + URL url = null; + try { + url = new URL(endpoint + "/listprefixes"); + } catch (MalformedURLException ex) { + log.error(endpoint + "is not a correct URL, will ignore this " + + "DSpace instance.", ex); + } + + String[] prefixes; + try { + InputStreamReader jsonStreamReader = new InputStreamReader(url.openStream(), "UTF-8"); + JsonParser parser = new JsonParser(); + JsonElement jsonElement = parser.parse(jsonStreamReader); + + if (jsonElement != null && jsonElement.getAsJsonArray().size() != 0) + { + for (int i = 0; i < jsonElement.getAsJsonArray().size(); i++) + { + String prefix = jsonElement.getAsJsonArray().get(i).getAsString(); + this.prefixes.put(prefix, endpoint); + + if (log.isInfoEnabled()) + { + log.info("Mapping " + prefix + " to instance at " + endpoint); + } + } + } else { + log.warn("DSpace instance running at " + url + " returns empty prefix list."); + } + } + catch (Exception ex) + { + log.warn("Error while loading prefixes from " + endpoint + ", ignoring.", ex); + } + } + + public static void main(String[] args) throws Exception + { + MultiRemoteDSpaceRepositoryHandlePlugin multi = new MultiRemoteDSpaceRepositoryHandlePlugin(); + try + { + System.out.println(StringUtils.join( + multi.getRemoteDSpaceHandles("123456789"), ",")); + } + catch (HandleException e) + { + e.printStackTrace(); + } + try + { + System.out.println(StringUtils.join( + multi.getRemoteDSpaceHandles("123456780"), ",")); + } + catch (HandleException e) + { + e.printStackTrace(); + } + try + { + System.out.println(multi.getRemoteDSpaceURL("123456789/1")); + } + catch (HandleException e) + { + e.printStackTrace(); + } + try + { + System.out.println(multi.getRemoteDSpaceURL("123456789/1111111")); + } + catch (HandleException e) + { + e.printStackTrace(); + } + try + { + System.out.println(multi.getRemoteDSpaceURL("123456780/1")); + } + catch (HandleException e) + { + e.printStackTrace(); + } + try + { + System.out.println(multi.getRemoteDSpaceURL("123456780/1111111")); + } + catch (HandleException e) + { + e.printStackTrace(); + } + } +} diff --git a/dspace-api/src/main/java/org/dspace/identifier/DOI.java b/dspace-api/src/main/java/org/dspace/identifier/DOI.java new file mode 100644 index 0000000..893a934 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/identifier/DOI.java @@ -0,0 +1,104 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.identifier; + +import java.util.Locale; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.dspace.identifier.doi.DOIIdentifierException; + +/** + * DOI identifiers. + * + * @author Pascal-Nicolas Becker + */ +public class DOI + implements Identifier +{ + public static final String SCHEME = "doi:"; + + public static final String RESOLVER = "http://dx.doi.org"; + + + /** + * This method helps to convert a DOI into a URL. It takes DOIs in one of + * the following formats and returns it as URL (f.e. + * http://dx.doi.org/10.123/456). Allowed formats are: + * <ul> + * <li>doi:10.123/456</li> + * <li>10.123/456</li> + * <li>http://dx.doi.org/10.123/456</li> + * </ul> + * + * @param identifier A DOI that should be returned in external form. + * @return A String containing a URL to the official DOI resolver. + * @throws IllegalArgumentException If identifier is null or an empty String. + * @throws IdentifierException If identifier could not be recognized as valid DOI. + */ + public static String DOIToExternalForm(String identifier) + throws IdentifierException + { + if (null == identifier) + throw new IllegalArgumentException("Identifier is null.", new NullPointerException()); + if (identifier.isEmpty()) + throw new IllegalArgumentException("Cannot format an empty identifier."); + if (identifier.startsWith(SCHEME)) + return RESOLVER + "/" + identifier.substring(SCHEME.length()); + if (identifier.startsWith("10.") && identifier.contains("/")) + return RESOLVER + "/" + identifier; + if (identifier.startsWith(RESOLVER + "/10.")) + return identifier; + + throw new IdentifierException(identifier + "does not seem to be a DOI."); + } + + public static String DOIFromExternalFormat(String identifier) + throws DOIIdentifierException + { + Pattern pattern = Pattern.compile("^" + RESOLVER + "/+(10\\..*)$"); + Matcher matcher = pattern.matcher(identifier); + if (matcher.find()) + { + return SCHEME + matcher.group(1); + } + + throw new DOIIdentifierException("Cannot recognize DOI!", + DOIIdentifierException.UNRECOGNIZED); + } + + /** + * Recognize format of DOI and return it with leading doi-Scheme. + * @param identifier Identifier to format, following format are accepted: + * f.e. 10.123/456, doi:10.123/456, http://dx.doi.org/10.123/456. + * @return Given Identifier with DOI-Scheme, f.e. doi:10.123/456. + * @throws IllegalArgumentException If identifier is empty or null. + * @throws DOIIdentifierException If DOI could not be recognized. + */ + public static String formatIdentifier(String identifier) + throws DOIIdentifierException + { + if (null == identifier) { + throw new IllegalArgumentException("Identifier is null.", new NullPointerException()); + } + if (identifier.startsWith(DOI.SCHEME)) { + return identifier; + } + if (identifier.isEmpty()) { + throw new IllegalArgumentException("Cannot format an empty identifier."); + } + if (identifier.startsWith("10.") && identifier.contains("/")) { + return DOI.SCHEME + identifier; + } + if (identifier.startsWith(RESOLVER + "/10.")) { + return DOI.SCHEME + identifier.substring(18); + } + throw new DOIIdentifierException(identifier + "does not seem to be a DOI.", + DOIIdentifierException.UNRECOGNIZED); + } +} diff --git a/dspace-api/src/main/java/org/dspace/identifier/DOIIdentifierProvider.java b/dspace-api/src/main/java/org/dspace/identifier/DOIIdentifierProvider.java new file mode 100644 index 0000000..b0669c8 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/identifier/DOIIdentifierProvider.java @@ -0,0 +1,936 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.identifier; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.DCValue; +import org.dspace.content.DSpaceObject; +import org.dspace.content.FormatIdentifier; +import org.dspace.content.Item; +import org.dspace.core.Context; +import org.dspace.identifier.doi.DOIConnector; +import org.dspace.identifier.doi.DOIIdentifierException; +import org.dspace.storage.rdbms.DatabaseManager; +import org.dspace.storage.rdbms.TableRow; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Required; + +/** + * Provide service for DOIs using DataCite. + * + * <p>This class handles reservation, registration and deletion of DOIs using + * the direct API from {@link <a href="http://www.datacite.org">DataCite</a>}. + * Please pay attention that some members of DataCite offer special services + * and want their customers to use special APIs. If you are unsure ask your + * registration agency.</p> + * + * <p>Any identifier a method of this class returns is a string in the following format: doi:10.123/456.</p> + * + * @author Pascal-Nicolas Becker + */ +public class DOIIdentifierProvider + extends IdentifierProvider +{ + private static final Logger log = LoggerFactory.getLogger(DOIIdentifierProvider.class); + + /** + * A DOIConnector connects the DOIIdentifierProvider to the API of the DOI + * registration agency needed to register DOIs. To register DOIs we have to + * care about two APIs: the <link>IdentifierProvider</link> API of DSpace + * and the API of the DOI registration agency. The DOIIdentifierProvider + * manages the DOI database table, generates new DOIs, stores them as + * metadata in DSpace items and so on. To register DOIs at DOI registration + * agencies it uses a DOIConnector. A DOI connector has to register and + * reserve DOIs using the API of the DOI registration agency. If requested + * by the registration agency it has to convert and send metadata of the + * DSpace items. + */ + private DOIConnector connector; + + static final String CFG_PREFIX = "identifier.doi.prefix"; + static final String CFG_NAMESPACE_SEPARATOR = "identifier.doi.namespaceseparator"; + + // Metadata field name elements + // TODO: move these to MetadataSchema or some such? + public static final String MD_SCHEMA = "dc"; + public static final String DOI_ELEMENT = "identifier"; + public static final String DOI_QUALIFIER = "uri"; + + public static final Integer TO_BE_REGISTERED = 1; + public static final Integer TO_BE_RESERVERED = 2; + public static final Integer IS_REGISTERED = 3; + public static final Integer IS_RESERVED = 4; + public static final Integer UPDATE_RESERVERED = 5; + public static final Integer UPDATE_REGISTERED = 6; + public static final Integer UPDATE_BEFORE_REGISTERATION = 7; + public static final Integer TO_BE_DELETED = 8; + public static final Integer DELETED = 9; + + /** + * Prefix of DOI namespace. Set in dspace.cfg. + */ + private String PREFIX; + + /** + * Part of DOI to separate several applications that generate DOIs. + * E.g. it could be 'dspace/' if DOIs generated by DSpace should have the form + * prefix/dspace/uniqueString. Set it to the empty String if DSpace must + * generate DOIs directly after the DOI Prefix. Set in dspace.cfg. + */ + private String NAMESPACE_SEPARATOR; + + protected String getPrefix() + { + if (null == this.PREFIX) + { + this.PREFIX = this.configurationService.getProperty(CFG_PREFIX); + if (null == this.PREFIX) + { + log.warn("Cannot find DOI prefix in configuration!"); + throw new RuntimeException("Unable to load DOI prefix from " + + "configuration. Cannot find property " + + CFG_PREFIX + "."); + } + } + return this.PREFIX; + } + + protected String getNamespaceSeparator() + { + if (null == this.NAMESPACE_SEPARATOR) + { + this.NAMESPACE_SEPARATOR = this.configurationService.getProperty(CFG_NAMESPACE_SEPARATOR); + if (null == this.NAMESPACE_SEPARATOR) + { + this.NAMESPACE_SEPARATOR = ""; + } + } + return this.NAMESPACE_SEPARATOR; + } + + @Required + public void setDOIConnector(DOIConnector connector) + { + this.connector = connector; + } + + /** + * This identifier provider supports identifiers of type + * {@link org.dspace.identifier.DOI}. + * @param identifier to check if it will be supported by this provider. + * @return + */ + @Override + public boolean supports(Class<? extends Identifier> identifier) + { + return DOI.class.isAssignableFrom(identifier); + } + + /** + * This identifier provider supports identifiers in the following format: + * <ul> + * <li>doi:10.123/456</li> + * <li>10.123/456</li> + * <li>http://dx.doi.org/10.123/456</li> + * </ul> + * @param identifier to check if it is in a supported format. + * @return + */ + @Override + public boolean supports(String identifier) + { + try { + DOI.formatIdentifier(identifier); + } catch (IdentifierException e) { + return false; + } catch (IllegalArgumentException e) + { + return false; + } + return true; + } + + + @Override + public String register(Context context, DSpaceObject dso) + throws IdentifierException + { + String doi = mint(context, dso); + // register tries to reserve doi if it's not already. + // So we don't have to reserve it here. + this.register(context, dso, doi); + return doi; + } + + @Override + public void register(Context context, DSpaceObject dso, String identifier) + throws IdentifierException + { + String doi = DOI.formatIdentifier(identifier); + TableRow doiRow = null; + + // search DOI in our db + try + { + doiRow = loadOrCreateDOI(context, dso, doi); + } catch (SQLException ex) { + log.error("Error in databse connection: " + ex.getMessage()); + throw new RuntimeException("Error in database conncetion.", ex); + } + + if (DELETED == doiRow.getIntColumn("status") || + TO_BE_DELETED == doiRow.getIntColumn("status")) + { + throw new DOIIdentifierException("You tried to register a DOI that " + + "is marked as DELETED.", DOIIdentifierException.DOI_IS_DELETED); + } + + // Check status of DOI + if (IS_REGISTERED == doiRow.getIntColumn("status")) + { + return; + } + + // change status of DOI + doiRow.setColumn("status", TO_BE_REGISTERED); + try { + DatabaseManager.update(context, doiRow); + context.commit(); + } + catch (SQLException sqle) + { + log.warn("SQLException while changing status of DOI {} to be registered.", doi); + throw new RuntimeException(sqle); + } + } + + /** + * @param context + * @param dso DSpaceObject the DOI should be reserved for. Some metadata of + * this object will be send to the registration agency. + * @param identifier DOI to register in a format that + * {@link FormatIdentifier(String)} accepts. + * @throws IdentifierException If the format of {@code identifier} was + * unrecognized or if it was impossible to + * reserve the DOI (registration agency denied + * for some reason, see logs). + * @throws IllegalArgumentException If {@code identifier} is a DOI already + * registered for another DSpaceObject then + * {@code dso}. + * @see IdentifierProvider.reserve(Context, DSpaceObject, String) + */ + @Override + public void reserve(Context context, DSpaceObject dso, String identifier) + throws IdentifierException, IllegalArgumentException + { + String doi = DOI.formatIdentifier(identifier); + TableRow doiRow = null; + + try { + // if the doi is in our db already loadOrCreateDOI just returns. + // if it is not loadOrCreateDOI safes the doi. + doiRow = loadOrCreateDOI(context, dso, doi); + } + catch (SQLException sqle) + { + throw new RuntimeException(sqle); + } + + if (!doiRow.isColumnNull("status")) { + return; + } + + doiRow.setColumn("status", TO_BE_RESERVERED); + try + { + DatabaseManager.update(context, doiRow); + } + catch (SQLException sqle) + { + throw new RuntimeException(sqle); + } + } + + public void reserveOnline(Context context, DSpaceObject dso, String identifier) + throws IdentifierException, IllegalArgumentException, SQLException + { + String doi = DOI.formatIdentifier(identifier); + // get TableRow and ensure DOI belongs to dso regarding our db + TableRow doiRow = loadOrCreateDOI(context, dso, doi); + + if (DELETED == doiRow.getIntColumn("status") || + TO_BE_DELETED == doiRow.getIntColumn("status")) + { + throw new DOIIdentifierException("You tried to reserve a DOI that " + + "is marked as DELETED.", DOIIdentifierException.DOI_IS_DELETED); + } + + connector.reserveDOI(context, dso, doi); + + doiRow.setColumn("status", IS_RESERVED); + DatabaseManager.update(context, doiRow); + } + + public void registerOnline(Context context, DSpaceObject dso, String identifier) + throws IdentifierException, IllegalArgumentException, SQLException + { + String doi = DOI.formatIdentifier(identifier); + // get TableRow and ensure DOI belongs to dso regarding our db + TableRow doiRow = loadOrCreateDOI(context, dso, doi); + + if (DELETED == doiRow.getIntColumn("status") || + TO_BE_DELETED == doiRow.getIntColumn("status")) + { + throw new DOIIdentifierException("You tried to register a DOI that " + + "is marked as DELETED.", DOIIdentifierException.DOI_IS_DELETED); + } + + // register DOI Online + try { + connector.registerDOI(context, dso, doi); + } + catch (DOIIdentifierException die) + { + // do we have to reserve DOI before we can register it? + if (die.getCode() == DOIIdentifierException.RESERVE_FIRST) + { + this.reserveOnline(context, dso, identifier); + connector.registerDOI(context, dso, doi); + } + else + { + throw die; + } + } + + // safe DOI as metadata of the item + try { + saveDOIToObject(context, dso, doi); + } + catch (AuthorizeException ae) + { + throw new IdentifierException("Not authorized to save a DOI as metadata of an dso!", ae); + } + catch (SQLException sqle) + { + throw new RuntimeException(sqle); + } + + doiRow.setColumn("status", IS_REGISTERED); + DatabaseManager.update(context, doiRow); + } + + public void updateMetadata(Context context, DSpaceObject dso, String identifier) + throws IdentifierException, IllegalArgumentException, SQLException + { + String doi = DOI.formatIdentifier(identifier); + TableRow doiRow = null; + + doiRow = loadOrCreateDOI(context, dso, doi); + + if (DELETED == doiRow.getIntColumn("status") || + TO_BE_DELETED == doiRow.getIntColumn("status")) + { + throw new DOIIdentifierException("You tried to register a DOI that " + + "is marked as DELETED.", DOIIdentifierException.DOI_IS_DELETED); + } + + if (IS_REGISTERED == doiRow.getIntColumn("status")) + { + doiRow.setColumn("status", UPDATE_REGISTERED); + } + else if (TO_BE_REGISTERED == doiRow.getIntColumn("status")) + { + doiRow.setColumn("status", UPDATE_BEFORE_REGISTERATION); + } + else if (IS_RESERVED == doiRow.getIntColumn("status")) + { + doiRow.setColumn("status", UPDATE_RESERVERED); + } + else + { + return; + } + + DatabaseManager.update(context, doiRow); + } + + public void updateMetadataOnline(Context context, DSpaceObject dso, String identifier) + throws IdentifierException, SQLException + { + String doi = DOI.formatIdentifier(identifier); + + // ensure DOI belongs to dso regarding our db + TableRow doiRow = null; + try + { + doiRow = DatabaseManager.findByUnique(context, "Doi", "doi", doi.substring(DOI.SCHEME.length())); + } + catch (SQLException sqle) + { + log.warn("SQLException while searching a DOI in our db.", sqle); + throw new RuntimeException("Unable to retrieve information about "+ + "a DOI out of database.", sqle); + } + if (null == doiRow) + { + log.error("Cannot update metadata for DOI {}: unable to find it in " + + "our db.", doi); + throw new DOIIdentifierException("Unable to find DOI.", + DOIIdentifierException.DOI_DOES_NOT_EXIST); + } + if (doiRow.getIntColumn("resource_id") != dso.getID() || + doiRow.getIntColumn("resource_type_id") != dso.getType()) + { + log.error("Refuse to update metadata of DOI {} with the metadata of " + + " an object ({}/{}) the DOI is not dedicated to.", + new String[] {doi, dso.getTypeText(), Integer.toString(dso.getID())}); + throw new DOIIdentifierException("Cannot update DOI metadata: " + + "DOI and DSpaceObject does not match!", + DOIIdentifierException.MISMATCH); + } + + if (DELETED == doiRow.getIntColumn("status") || + TO_BE_DELETED == doiRow.getIntColumn("status")) + { + throw new DOIIdentifierException("You tried to update the metadata" + + "of a DOI that is marked as DELETED.", + DOIIdentifierException.DOI_IS_DELETED); + } + + connector.updateMetadata(context, dso, doi); + + if (UPDATE_REGISTERED == doiRow.getIntColumn("status")) + { + doiRow.setColumn("status", IS_REGISTERED); + } + else if (UPDATE_BEFORE_REGISTERATION == doiRow.getIntColumn("status")) + { + doiRow.setColumn("status", TO_BE_REGISTERED); + } + else if (UPDATE_RESERVERED == doiRow.getIntColumn("status")) + { + doiRow.setColumn("status", IS_RESERVED); + } + + DatabaseManager.update(context, doiRow); + } + + @Override + public String mint(Context context, DSpaceObject dso) + throws IdentifierException + { + String doi = null; + try + { + doi = getDOIByObject(context, dso); + } + catch (SQLException e) + { + log.error("Error while attemping to retrieve information about a DOI for " + + dso.getTypeText() + " with ID " + dso.getID() + "."); + throw new RuntimeException("Error while attempting to retrieve " + + "information about a DOI for " + dso.getTypeText() + + " with ID " + dso.getID() + ".", e); + } + if (null == doi) + { + try + { + TableRow doiRow = loadOrCreateDOI(context, dso, null); + doi = DOI.SCHEME + doiRow.getStringColumn("doi"); + + } + catch (SQLException e) + { + log.error("Error while creating new DOI for Object of " + + "ResourceType {} with id {}.", dso.getType(), dso.getID()); + throw new RuntimeException("Error while attempting to create a " + + "new DOI for " + dso.getTypeText() + " with ID " + + dso.getID() + ".", e); + } + } + return doi; + } + + @Override + public DSpaceObject resolve(Context context, String identifier, String... attributes) + throws IdentifierNotFoundException, IdentifierNotResolvableException + { + String doi = null; + try { + doi = DOI.formatIdentifier(identifier); + } catch (IdentifierException e) { + throw new IdentifierNotResolvableException(e); + } + try + { + DSpaceObject dso = getObjectByDOI(context, doi); + if (null == dso) + { + throw new IdentifierNotFoundException(); + } + return dso; + } + catch (SQLException sqle) + { + log.error("SQLException while searching a DOI in our db.", sqle); + throw new RuntimeException("Unable to retrieve information about "+ + "a DOI out of database.", sqle); + } + catch (IdentifierException e) + { + throw new IdentifierNotResolvableException(e); + } + } + + @Override + public String lookup(Context context, DSpaceObject dso) + throws IdentifierNotFoundException, IdentifierNotResolvableException + { + String doi = null; + try + { + doi = getDOIByObject(context, dso); + } + catch (SQLException e) + { + throw new RuntimeException("Error retrieving DOI out of database.", e); + } + + if (null == doi) + { + throw new IdentifierNotFoundException("No DOI for DSpaceObject of type " + + dso.getTypeText() + " with ID " + dso.getID() + " found."); + } + + return doi; + } + + @Override + public void delete(Context context, DSpaceObject dso) + throws IdentifierException + { + // delete all DOIs for this Item from our database. + try + { + String doi = getDOIByObject(context, dso); + while (null != doi) + { + this.delete(context, dso, doi); + doi = getDOIByObject(context, dso); + } + } + catch (SQLException ex) + { + log.error("Error while attemping to retrieve information about a DOI for " + + dso.getTypeText() + " with ID " + dso.getID() + ".", ex); + throw new RuntimeException("Error while attempting to retrieve " + + "information about a DOI for " + dso.getTypeText() + + " with ID " + dso.getID() + ".", ex); + } + + // delete all DOIs of this item out of its metadata + try { + String doi = getDOIOutOfObject(dso); + + while (null != doi) + { + this.removeDOIFromObject(context, dso, doi); + doi = getDOIOutOfObject(dso); + } + } + catch (AuthorizeException ex) + { + log.error("Error while removing a DOI out of the metadata of an " + + dso.getTypeText() + " with ID " + dso.getID() + ".", ex); + throw new RuntimeException("Error while removing a DOI out of the " + + "metadata of an " + dso.getTypeText() + " with ID " + + dso.getID() + ".", ex); + + } + catch (SQLException ex) + { + log.error("Error while removing a DOI out of the metadata of an " + + dso.getTypeText() + " with ID " + dso.getID() + ".", ex); + throw new RuntimeException("Error while removing a DOI out of the " + + "metadata of an " + dso.getTypeText() + " with ID " + + dso.getID() + ".", ex); + } + } + + @Override + public void delete(Context context, DSpaceObject dso, String identifier) + throws IdentifierException + { + String doi = DOI.formatIdentifier(identifier); + TableRow doiRow = null; + + try + { + doiRow = DatabaseManager.findByUnique(context, "Doi", "doi", + doi.substring(DOI.SCHEME.length())); + } + catch (SQLException sqle) + { + throw new RuntimeException(sqle); + } + + // check if DOI belongs to dso + if (null != doiRow) + { + if (doiRow.getIntColumn("resource_id") != dso.getID() || + doiRow.getIntColumn("resource_type_id") != dso.getType()) + { + throw new DOIIdentifierException("Trying to delete a DOI out of " + + "an object that is not addressed by the DOI.", + DOIIdentifierException.MISMATCH); + } + } + + // remove DOI from metadata + try + { + removeDOIFromObject(context, dso, doi); + } + catch (AuthorizeException ex) + { + log.error("Not authorized to delete a DOI out of an Item.", ex); + throw new DOIIdentifierException("Not authorized to delete DOI.", + ex, DOIIdentifierException.UNAUTHORIZED_METADATA_MANIPULATION); + } + catch (SQLException ex) + { + log.error("SQLException occured while deleting a DOI out of an item: " + + ex.getMessage()); + throw new RuntimeException("Error while deleting a DOI out of the " + + "metadata of an Item " + dso.getID(), ex); + } + + // change doi status in db if necessary. + if (null != doiRow) + { + if(doiRow.isColumnNull("status")) + { + doiRow.setColumn("status", DELETED); + } + else + { + doiRow.setColumn("status", TO_BE_DELETED); + } + try { + DatabaseManager.update(context, doiRow); + context.commit(); + } + catch (SQLException sqle) + { + log.warn("SQLException while changing status of DOI {} to be deleted.", doi); + throw new RuntimeException(sqle); + } + } + + // DOI is a permanent identifier. DataCite for example does not delete + // DOIS. But it is possible to mark a DOI as "inactive". + } + + public void deleteOnline(Context context, String identifier) + throws DOIIdentifierException + { + String doi = DOI.formatIdentifier(identifier); + TableRow doiRow = null; + + try + { + doiRow = DatabaseManager.findByUnique(context, "Doi", "doi", + doi.substring(DOI.SCHEME.length())); + } + catch (SQLException sqle) + { + throw new RuntimeException(sqle); + } + if(null == doiRow) + { + throw new DOIIdentifierException("This identifier: " + identifier + + " isn't in our database", + DOIIdentifierException.DOI_DOES_NOT_EXIST); + } + if (TO_BE_DELETED != doiRow.getIntColumn("status")) + { + log.error("This identifier: {} couldn't be deleted. " + + "Delete it first from metadata.", + DOI.SCHEME + doiRow.getStringColumn("doi")); + throw new IllegalArgumentException("Couldn't delete this identifier:" + + DOI.SCHEME + doiRow.getStringColumn("doi") + + ". Delete it first from metadata."); + } + connector.deleteDOI(context, doi); + + doiRow.setColumn("status", DELETED); + try { + DatabaseManager.update(context, doiRow); + context.commit(); + } + catch (SQLException sqle) + { + log.warn("SQLException while changing status of DOI {} deleted.", doi); + throw new RuntimeException(sqle); + } + } + + /** + * Returns a DSpaceObject depending on its DOI. + * @param context the context + * @param identifier The DOI in a format that is accepted by + * {@link formatIdentifier(String)}. + * @return Null if the DOI couldn't be found or the associated DSpaceObject. + * @throws SQLException + * @throws IdentifierException If {@code identifier} is null or an empty string. + * @throws IllegalArgumentException If the identifier couldn't be recognized as DOI. + */ + public static DSpaceObject getObjectByDOI(Context context, String identifier) + throws SQLException, DOIIdentifierException, IllegalArgumentException + { + String doi = DOI.formatIdentifier(identifier); + TableRow doiRow = DatabaseManager.findByUnique(context, "Doi", "doi", + doi.substring(DOI.SCHEME.length())); + + if (null == doiRow) + { + return null; + } + + if (doiRow.isColumnNull("resource_type_id") || + doiRow.isColumnNull("resource_id")) + { + log.error("Found DOI " + doi + + " in database, but no assigned Object could be found."); + throw new IllegalStateException("Found DOI " + doi + + " in database, but no assigned Object could be found."); + } + + return DSpaceObject.find(context, + doiRow.getIntColumn("resource_type_id"), + doiRow.getIntColumn("resource_id")); + } + + /** + * Search the database for a DOI, using the type and id of an DSpaceObject. + * + * @param context + * @param dso DSpaceObject to find doi for. DOIs with status TO_BE_DELETED will be + * ignored. + * @return The DOI as String or null if DOI was not found. + * @throws SQLException + */ + public static String getDOIByObject(Context context, DSpaceObject dso) + throws SQLException + { + String sql = "SELECT * FROM Doi WHERE resource_type_id = ? " + + "AND resource_id = ? AND ((status != ? AND status != ?) OR status IS NULL)"; + + TableRow doiRow = DatabaseManager.querySingleTable(context, "Doi", sql, + dso.getType(), dso.getID(), DOIIdentifierProvider.TO_BE_DELETED, + DOIIdentifierProvider.DELETED); + if (null == doiRow) + { + return null; + } + + if (doiRow.isColumnNull("doi")) + { + log.error("A DOI with an empty doi column was found in the database. DSO-Type: " + + dso.getTypeText() + ", ID: " + dso.getID() + "."); + throw new IllegalStateException("A DOI with an empty doi column " + + "was found in the database. DSO-Type: " + dso.getTypeText() + + ", ID: " + dso.getID() + "."); + } + + return DOI.SCHEME + doiRow.getStringColumn("doi"); + } + + /** + * Load a DOI from the database or creates it if it does not exist. This + * method can be used to ensure that a DOI exists in the database and to + * load the appropriate TableRow. As protected method we don't check if the + * DOI is in a decent format, use DOI.formatIdentifier(String) if necessary. + * + * @param context + * @param dso The DSpaceObject the DOI should be loaded or created for. + * @param doi A DOI or null if a DOI should be generated. The generated DOI + * can be found in the appropriate column for the TableRow. + * @return The database row of the object. + * @throws SQLException In case of an error using the database. + * @throws DOIIdentifierException If {@code doi} is not part of our prefix or + * DOI is registered for another object already. + */ + protected TableRow loadOrCreateDOI(Context context, DSpaceObject dso, String doi) + throws SQLException, DOIIdentifierException + { + TableRow doiRow = null; + if (null != doi) + { + // we expect DOIs to have the DOI-Scheme except inside the doi table: + doi = doi.substring(DOI.SCHEME.length()); + + // check if DOI is already in Database + doiRow = DatabaseManager.findByUnique(context, "Doi", "doi", doi); + if (null != doiRow) + { + // check if DOI already belongs to dso + if (doiRow.getIntColumn("resource_id") == dso.getID() && + doiRow.getIntColumn("resource_type_id") == dso.getType()) + { + return doiRow; + } + else + { + throw new DOIIdentifierException("Trying to create a DOI " + + "that is already reserved for another object.", + DOIIdentifierException.DOI_ALREADY_EXISTS); + } + } + + // check prefix + if (!doi.startsWith(this.getPrefix() + "/")) + { + throw new DOIIdentifierException("Trying to create a DOI " + + "that's not part of our Namespace!", + DOIIdentifierException.FOREIGN_DOI); + } + // prepare new doiRow + doiRow = DatabaseManager.create(context, "Doi"); + } + else + { + // We need to generate a new DOI. + doiRow = DatabaseManager.create(context, "Doi"); + + doi = this.getPrefix() + "/" + this.getNamespaceSeparator() + + doiRow.getIntColumn("doi_id"); + } + + doiRow.setColumn("doi", doi); + doiRow.setColumn("resource_type_id", dso.getType()); + doiRow.setColumn("resource_id", dso.getID()); + doiRow.setColumnNull("status"); + if (0 == DatabaseManager.update(context, doiRow)) + { + throw new RuntimeException("Cannot save DOI to databse for unkown reason."); + } + + return doiRow; + } + + /** + * Loads a DOI out of the metadata of an DSpaceObject. + * @param dso + * @return The DOI or null if no DOI was found. + */ + public static String getDOIOutOfObject(DSpaceObject dso) + throws DOIIdentifierException { + // FIXME + if (!(dso instanceof Item)) + { + throw new IllegalArgumentException("We currently support DOIs for " + + "Items only, not for " + dso.getTypeText() + "."); + } + Item item = (Item)dso; + + DCValue[] metadata = item.getMetadata(MD_SCHEMA, DOI_ELEMENT, DOI_QUALIFIER, null); + for (DCValue id : metadata) + { + if (id.value.startsWith(DOI.RESOLVER + "/10.")) + { + return DOI.DOIFromExternalFormat(id.value); + } + } + return null; + } + + /** + * Adds a DOI to the metadata of an item. + * + * @param context + * @param dso DSpaceObject the DOI should be added to. + * @param doi The DOI that should be added as metadata. + * @throws SQLException + * @throws AuthorizeException + */ + protected void saveDOIToObject(Context context, DSpaceObject dso, String doi) + throws SQLException, AuthorizeException, IdentifierException + { + // FIXME + if (!(dso instanceof Item)) + { + throw new IllegalArgumentException("We currently support DOIs for " + + "Items only, not for " + dso.getTypeText() + "."); + } + Item item = (Item) dso; + + item.addMetadata(MD_SCHEMA, DOI_ELEMENT, DOI_QUALIFIER, null, DOI.DOIToExternalForm(doi)); + try + { + item.update(); + context.commit(); + } catch (SQLException ex) { + throw ex; + } catch (AuthorizeException ex) { + throw ex; + } + } + + /** + * Removes a DOI out of the metadata of a DSpaceObject. + * + * @param context + * @param dso The DSpaceObject the DOI should be removed from. + * @param doi The DOI to remove out of the metadata. + * @throws AuthorizeException + * @throws SQLException + */ + protected void removeDOIFromObject(Context context, DSpaceObject dso, String doi) + throws AuthorizeException, SQLException, IdentifierException + { + // FIXME + if (!(dso instanceof Item)) + { + throw new IllegalArgumentException("We currently support DOIs for " + + "Items only, not for " + dso.getTypeText() + "."); + } + Item item = (Item)dso; + + DCValue[] metadata = item.getMetadata(MD_SCHEMA, DOI_ELEMENT, DOI_QUALIFIER, null); + List<String> remainder = new ArrayList<String>(); + + for (DCValue id : metadata) + { + if (!id.value.equals(DOI.DOIToExternalForm(doi))) + { + remainder.add(id.value); + } + } + + item.clearMetadata(MD_SCHEMA, DOI_ELEMENT, DOI_QUALIFIER, null); + item.addMetadata(MD_SCHEMA, DOI_ELEMENT, DOI_QUALIFIER, null, + remainder.toArray(new String[remainder.size()])); + try { + item.update(); + context.commit(); + } catch (SQLException e) { + throw e; + } catch (AuthorizeException e) { + throw e; + } + } +} diff --git a/dspace-api/src/main/java/org/dspace/identifier/EZIDIdentifierProvider.java b/dspace-api/src/main/java/org/dspace/identifier/EZIDIdentifierProvider.java new file mode 100644 index 0000000..50f4cc7 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/identifier/EZIDIdentifierProvider.java @@ -0,0 +1,702 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.identifier; + +import java.io.IOException; +import java.net.*; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.DCValue; +import org.dspace.content.DSpaceObject; +import org.dspace.content.Item; +import org.dspace.content.ItemIterator; +import org.dspace.core.Context; +import org.dspace.identifier.ezid.EZIDRequest; +import org.dspace.identifier.ezid.EZIDRequestFactory; +import org.dspace.identifier.ezid.EZIDResponse; +import org.dspace.identifier.ezid.Transform; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Required; + +/** + * Provide service for DOIs through DataCite using the EZID service. + * + * <p>Configuration of this class is is in two parts.</p> + * + * <p>Installation-specific configuration (credentials and the "shoulder" value + * which forms a prefix of the site's DOIs) is supplied from property files in + * [DSpace]/config**.</p> + * + * <dl> + * <dt>identifier.doi.ezid.shoulder</dt> + * <dd>base of the site's DOIs. Example: 10.5072/FK2</dd> + * <dt>identifier.doi.ezid.user</dt> + * <dd>EZID username.</dd> + * <dt>identifier.doi.ezid.password</dt> + * <dd>EZID password.</dd> + * <dt>identifier.doi.ezid.publisher</dt> + * <dd>A default publisher, for Items not previously published. EZID requires a publisher.</dd> + * </dl> + * + * <p>Then there are properties injected using Spring:</p> + * <ul> + * <li>There is a Map (with the property name "crosswalk") from EZID + * metadata field names into DSpace field names, injected by Spring. Specify + * the fully-qualified names of all metadata fields to be looked up on a DSpace + * object and their values set on mapped fully-qualified names in the object's + * DataCite metadata.</li> + * + * <li>A second map ("crosswalkTransform") provides Transform instances + * mapped from EZID metadata field names. This allows the crosswalk to rewrite + * field values where the form maintained by DSpace is not directly usable in + * EZID metadata.</li> + * </ul> + * + * @author mwood + */ +public class EZIDIdentifierProvider + extends IdentifierProvider +{ + private static final Logger log = LoggerFactory.getLogger(EZIDIdentifierProvider.class); + + // Configuration property names + static final String CFG_SHOULDER = "identifier.doi.ezid.shoulder"; + static final String CFG_USER = "identifier.doi.ezid.user"; + static final String CFG_PASSWORD = "identifier.doi.ezid.password"; + static final String CFG_PUBLISHER = "identifier.doi.ezid.publisher"; + + // DataCite metadata field names + static final String DATACITE_PUBLISHER = "datacite.publisher"; + static final String DATACITE_PUBLICATION_YEAR = "datacite.publicationyear"; + + // DSpace metadata field name elements + // XXX move these to MetadataSchema or some such + public static final String MD_SCHEMA = "dc"; + public static final String DOI_ELEMENT = "identifier"; + public static final String DOI_QUALIFIER = null; + + private static final String DOI_SCHEME = "doi:"; + + /** Map DataCite metadata into local metadata. */ + private static Map<String, String> crosswalk = new HashMap<String, String>(); + + /** Converters to be applied to specific fields. */ + private static Map<String, Transform> transforms = new HashMap<String, Transform>(); + + /** Factory for EZID requests. */ + private static EZIDRequestFactory requestFactory; + + @Override + public boolean supports(Class<? extends Identifier> identifier) + { + return DOI.class.isAssignableFrom(identifier); + } + + @Override + public boolean supports(String identifier) + { + if (null == identifier) + { + return false; + } + else + { + return identifier.startsWith(DOI_SCHEME); + } // XXX more thorough test? + } + + @Override + public String register(Context context, DSpaceObject dso) + throws IdentifierException + { + log.debug("register {}", dso); + + if (!(dso instanceof Item)) + { + throw new IdentifierException("Unsupported object type " + dso.getTypeText()); + } + + Item item = (Item)dso; + DCValue[] identifiers = item.getMetadata(MD_SCHEMA, DOI_ELEMENT, DOI_QUALIFIER, null); + for (DCValue identifier : identifiers) + { + if ((null != identifier.value) && (identifier.value.startsWith(DOI_SCHEME))) + { + return identifier.value; + } + } + + String id = mint(context, item); + item.addMetadata(MD_SCHEMA, DOI_ELEMENT, DOI_QUALIFIER, null, id); + try { + item.update(); + context.commit(); + } catch (SQLException ex) { + throw new IdentifierException("New identifier not stored", ex); + } catch (AuthorizeException ex) { + throw new IdentifierException("New identifier not stored", ex); + } + log.info("Registered {}", id); + return id; + } + + @Override + public void register(Context context, DSpaceObject object, String identifier) + { + log.debug("register {} as {}", object, identifier); + + if (!(object instanceof Item)) + { + // TODO throw new IdentifierException("Unsupported object type " + object.getTypeText()); + log.error("Unsupported object type " + object.getTypeText()); + return; + } + + EZIDResponse response; + try { + EZIDRequest request = requestFactory.getInstance(loadAuthority(), + loadUser(), loadPassword()); + response = request.create(identifier, crosswalkMetadata(object)); + } catch (IdentifierException e) { + log.error("Identifier '{}' not registered: {}", identifier, e.getMessage()); + return; + } catch (IOException e) { + log.error("Identifier '{}' not registered: {}", identifier, e.getMessage()); + return; + } catch (URISyntaxException e) { + log.error("Identifier '{}' not registered: {}", identifier, e.getMessage()); + return; + } + + if (response.isSuccess()) + { + Item item = (Item)object; + try { + item.addMetadata(MD_SCHEMA, DOI_ELEMENT, DOI_QUALIFIER, null, + idToDOI(identifier)); + item.update(); + context.commit(); + log.info("registered {}", identifier); + } catch (SQLException ex) { + // TODO throw new IdentifierException("New identifier not stored", ex); + log.error("New identifier not stored", ex); + } catch (AuthorizeException ex) { + // TODO throw new IdentifierException("New identifier not stored", ex); + log.error("New identifier not stored", ex); + } catch (IdentifierException ex) { + log.error("New identifier not stored", ex); + } + } + else + { + log.error("Identifier '{}' not registered -- EZID returned: {}", + identifier, response.getEZIDStatusValue()); + } + } + + @Override + public void reserve(Context context, DSpaceObject dso, String identifier) + throws IdentifierException + { + log.debug("reserve {}", identifier); + + EZIDResponse response; + try { + EZIDRequest request = requestFactory.getInstance(loadAuthority(), + loadUser(), loadPassword()); + Map<String, String> metadata = crosswalkMetadata(dso); + metadata.put("_status", "reserved"); + response = request.create(identifier, metadata); + } catch (IOException e) { + log.error("Identifier '{}' not registered: {}", identifier, e.getMessage()); + return; + } catch (URISyntaxException e) { + log.error("Identifier '{}' not registered: {}", identifier, e.getMessage()); + return; + } + + if (response.isSuccess()) + { + Item item = (Item)dso; + item.addMetadata(MD_SCHEMA, DOI_ELEMENT, DOI_QUALIFIER, null, idToDOI(identifier)); + try { + item.update(); + context.commit(); + log.info("reserved {}", identifier); + } catch (SQLException ex) { + throw new IdentifierException("New identifier not stored", ex); + } catch (AuthorizeException ex) { + throw new IdentifierException("New identifier not stored", ex); + } + } + else + { + log.error("Identifier '{}' not registered -- EZID returned: {}", + identifier, response.getEZIDStatusValue()); + } + } + + @Override + public String mint(Context context, DSpaceObject dso) + throws IdentifierException + { + log.debug("mint for {}", dso); + + // Compose the request + EZIDRequest request; + try { + request = requestFactory.getInstance(loadAuthority(), loadUser(), loadPassword()); + } catch (URISyntaxException ex) { + log.error(ex.getMessage()); + throw new IdentifierException("DOI request not sent: " + ex.getMessage()); + } + + // Send the request + EZIDResponse response; + try + { + response = request.mint(crosswalkMetadata(dso)); + } catch (IOException ex) { + log.error("Failed to send EZID request: {}", ex.getMessage()); + throw new IdentifierException("DOI request not sent: " + ex.getMessage()); + } catch (URISyntaxException ex) { + log.error("Failed to send EZID request: {}", ex.getMessage()); + throw new IdentifierException("DOI request not sent: " + ex.getMessage()); + } + + // Good response? + if (HttpURLConnection.HTTP_CREATED != response.getHttpStatusCode()) + { + log.error("EZID server responded: {} {}: {}", + new String[] { + String.valueOf(response.getHttpStatusCode()), + response.getHttpReasonPhrase(), + response.getEZIDStatusValue() + }); + throw new IdentifierException("DOI not created: " + + response.getHttpReasonPhrase() + + ": " + + response.getEZIDStatusValue()); + } + + // Extract the DOI from the content blob + if (response.isSuccess()) + { + String value = response.getEZIDStatusValue(); + int end = value.indexOf('|'); // Following pipe is "shadow ARK" + if (end < 0) + { + end = value.length(); + } + String doi = value.substring(0, end).trim(); + log.info("Created {}", doi); + return doi; + } + else + { + log.error("EZID responded: {}", response.getEZIDStatusValue()); + throw new IdentifierException("No DOI returned"); + } + } + + @Override + public DSpaceObject resolve(Context context, String identifier, + String... attributes) + throws IdentifierNotFoundException, IdentifierNotResolvableException + { + log.debug("resolve {}", identifier); + + ItemIterator found; + try { + found = Item.findByMetadataField(context, + MD_SCHEMA, DOI_ELEMENT, DOI_QUALIFIER, + idToDOI(identifier)); + } catch (IdentifierException ex) { + log.error(ex.getMessage()); + throw new IdentifierNotResolvableException(ex); + } catch (SQLException ex) { + log.error(ex.getMessage()); + throw new IdentifierNotResolvableException(ex); + } catch (AuthorizeException ex) { + log.error(ex.getMessage()); + throw new IdentifierNotResolvableException(ex); + } catch (IOException ex) { + log.error(ex.getMessage()); + throw new IdentifierNotResolvableException(ex); + } + try { + if (!found.hasNext()) + { + throw new IdentifierNotFoundException("No object bound to " + identifier); + } + Item found1 = found.next(); + if (found.hasNext()) + { + log.error("More than one object bound to {}!", identifier); + } + log.debug("Resolved to {}", found1); + return found1; + } catch (SQLException ex) { + log.error(ex.getMessage()); + throw new IdentifierNotResolvableException(ex); + } + } + + @Override + public String lookup(Context context, DSpaceObject object) + throws IdentifierNotFoundException, IdentifierNotResolvableException + { + log.debug("lookup {}", object); + + if (!(object instanceof Item)) + { + throw new IllegalArgumentException("Unsupported type " + object.getTypeText()); + } + + Item item = (Item)object; + DCValue found = null; + for (DCValue candidate : item.getMetadata(MD_SCHEMA, DOI_ELEMENT, DOI_QUALIFIER, null)) + { + if (candidate.value.startsWith(DOI_SCHEME)) + { + found = candidate; + break; + } + } + if (null != found) + { + log.debug("Found {}", found.value); + return found.value; + } + else + { + throw new IdentifierNotFoundException(object.getTypeText() + " " + + object.getID() + " has no DOI"); + } + } + + @Override + public void delete(Context context, DSpaceObject dso) + throws IdentifierException + { + log.debug("delete {}", dso); + + if (!(dso instanceof Item)) + { + throw new IllegalArgumentException("Unsupported type " + dso.getTypeText()); + } + + Item item = (Item)dso; + + // delete from EZID + DCValue[] metadata = item.getMetadata(MD_SCHEMA, DOI_ELEMENT, DOI_QUALIFIER, null); + List<String> remainder = new ArrayList<String>(); + int skipped = 0; + for (DCValue id : metadata) + { + if (!id.value.startsWith(DOI_SCHEME)) + { + remainder.add(id.value); + continue; + } + + EZIDResponse response; + try { + EZIDRequest request = requestFactory.getInstance(loadAuthority(), + loadUser(), loadPassword()); + response = request.delete(DOIToId(id.value)); + } catch (URISyntaxException e) { + log.error("Bad URI in metadata value: {}", e.getMessage()); + remainder.add(id.value); + skipped++; + continue; + } catch (IOException e) { + log.error("Failed request to EZID: {}", e.getMessage()); + remainder.add(id.value); + skipped++; + continue; + } + if (!response.isSuccess()) + { + log.error("Unable to delete {} from DataCite: {}", id.value, + response.getEZIDStatusValue()); + remainder.add(id.value); + skipped++; + continue; + } + log.info("Deleted {}", id.value); + } + + // delete from item + item.clearMetadata(MD_SCHEMA, DOI_ELEMENT, DOI_QUALIFIER, null); + item.addMetadata(MD_SCHEMA, DOI_ELEMENT, DOI_QUALIFIER, null, + remainder.toArray(new String[remainder.size()])); + try { + item.update(); + context.commit(); + } catch (SQLException e) { + log.error("Failed to re-add identifiers: {}", e.getMessage()); + } catch (AuthorizeException e) { + log.error("Failed to re-add identifiers: {}", e.getMessage()); + } + + if (skipped > 0) + { + throw new IdentifierException(skipped + " identifiers could not be deleted."); + } + } + + @Override + public void delete(Context context, DSpaceObject dso, String identifier) + throws IdentifierException + { + log.debug("delete {} from {}", identifier, dso); + + if (!(dso instanceof Item)) + { + throw new IllegalArgumentException("Unsupported type " + dso.getTypeText()); + } + + Item item = (Item)dso; + + DCValue[] metadata = item.getMetadata(MD_SCHEMA, DOI_ELEMENT, DOI_QUALIFIER, null); + List<String> remainder = new ArrayList<String>(); + int skipped = 0; + for (DCValue id : metadata) + { + if (!id.value.equals(idToDOI(identifier))) + { + remainder.add(id.value); + continue; + } + + EZIDResponse response; + try { + EZIDRequest request = requestFactory.getInstance(loadAuthority(), + loadUser(), loadPassword()); + response = request.delete(DOIToId(id.value)); + } catch (URISyntaxException e) { + log.error("Bad URI in metadata value {}: {}", id.value, e.getMessage()); + remainder.add(id.value); + skipped++; + continue; + } catch (IOException e) { + log.error("Failed request to EZID: {}", e.getMessage()); + remainder.add(id.value); + skipped++; + continue; + } + + if (!response.isSuccess()) + { + log.error("Unable to delete {} from DataCite: {}", id.value, + response.getEZIDStatusValue()); + remainder.add(id.value); + skipped++; + continue; + } + log.info("Deleted {}", id.value); + } + + // delete from item + item.clearMetadata(MD_SCHEMA, DOI_ELEMENT, DOI_QUALIFIER, null); + item.addMetadata(MD_SCHEMA, DOI_ELEMENT, DOI_QUALIFIER, null, + remainder.toArray(new String[remainder.size()])); + try { + item.update(); + context.commit(); + } catch (SQLException e) { + log.error("Failed to re-add identifiers: {}", e.getMessage()); + } catch (AuthorizeException e) { + log.error("Failed to re-add identifiers: {}", e.getMessage()); + } + + if (skipped > 0) + { + throw new IdentifierException(identifier + " could not be deleted."); + } + } + + /** + * Format a naked identifier as a DOI with our configured authority prefix. + * + * @throws IdentifierException if authority prefix is not configured. + */ + String idToDOI(String id) + throws IdentifierException + { + return "doi:" + loadAuthority() + id; + } + + /** + * Remove scheme and our configured authority prefix from a doi: URI string. + * @return naked local identifier. + * @throws IdentifierException if authority prefix is not configured. + */ + String DOIToId(String DOI) + throws IdentifierException + { + String prefix = "doi:" + loadAuthority(); + if (DOI.startsWith(prefix)) + { + return DOI.substring(prefix.length()); + } + else + { + return DOI; + } + } + + /** + * Get configured value of EZID username. + * @throws IdentifierException + */ + private String loadUser() + throws IdentifierException + { + String user = configurationService.getProperty(CFG_USER); + if (null != user) + { + return user; + } + else + { + throw new IdentifierException("Unconfigured: define " + CFG_USER); + } + } + + /** + * Get configured value of EZID password. + * @throws IdentifierException + */ + private String loadPassword() + throws IdentifierException + { + String password = configurationService.getProperty(CFG_PASSWORD); + if (null != password) + { + return password; + } + else + { + throw new IdentifierException("Unconfigured: define " + CFG_PASSWORD); + } + } + + /** + * Get configured value of EZID "shoulder". + * @throws IdentifierException + */ + private String loadAuthority() + throws IdentifierException + { + String shoulder = configurationService.getProperty(CFG_SHOULDER); + if (null != shoulder) + { + return shoulder; + } + else + { + throw new IdentifierException("Unconfigured: define " + CFG_SHOULDER); + } + } + + /** + * Map selected DSpace metadata to fields recognized by DataCite. + */ + private Map<String, String> crosswalkMetadata(DSpaceObject dso) + { + if ((null == dso) || !(dso instanceof Item)) + { + throw new IllegalArgumentException("Must be an Item"); + } + Item item = (Item) dso; // TODO generalize to DSO when all DSOs have metadata. + + Map<String, String> mapped = new HashMap<String, String>(); + + for (Entry<String, String> datum : crosswalk.entrySet()) + { + DCValue[] values = item.getMetadata(datum.getValue()); + if (null != values) + { + for (DCValue value : values) + { + String key = datum.getKey(); + String mappedValue; + Transform xfrm = transforms.get(key); + if (null != xfrm) + { + try { + mappedValue = xfrm.transform(value.value); + } catch (Exception ex) { + log.error("Unable to transform '{}' from {} to {}: {}", + new String[] { + value.value, + value.toString(), + key, + ex.getMessage() + }); + continue; + } + } + else + { + mappedValue = value.value; + } + mapped.put(key, mappedValue); + } + } + } + + // Supply a default publisher, if the Item has none. + if (!mapped.containsKey(DATACITE_PUBLISHER)) + { + String publisher = configurationService.getPropertyAsType(CFG_PUBLISHER, "unknown"); + log.info("Supplying default publisher: {}", publisher); + mapped.put(DATACITE_PUBLISHER, publisher); + } + + // Supply current year as year of publication, if the Item has none. + if (!mapped.containsKey(DATACITE_PUBLICATION_YEAR)) + { + String year = String.valueOf(Calendar.getInstance().get(Calendar.YEAR)); + log.info("Supplying default publication year: {}", year); + mapped.put(DATACITE_PUBLICATION_YEAR, year); + } + + // TODO find a way to get a current direct URL to the object and set _target + // mapped.put("_target", url); + + return mapped; + } + + @Required + public void setCrosswalk(Map<String, String> aCrosswalk) + { + crosswalk = aCrosswalk; + } + + public void setCrosswalkTransform(Map<String, Transform> transformMap) + { + transforms = transformMap; + } + + @Required + public static void setRequestFactory(EZIDRequestFactory aRequestFactory) + { + requestFactory = aRequestFactory; + } +} diff --git a/dspace-api/src/main/java/org/dspace/identifier/doi/DOIConnector.java b/dspace-api/src/main/java/org/dspace/identifier/doi/DOIConnector.java new file mode 100644 index 0000000..666d69d --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/identifier/doi/DOIConnector.java @@ -0,0 +1,103 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.identifier.doi; + +import org.dspace.content.DSpaceObject; +import org.dspace.core.Context; + +/** + * A DOIConnector handles all calls to the API of your DOI registry. + * + * A DOIConnector should care about rules of the registration agency. For + * example, if the registration agency wants us to reserve a DOI before we can + * register it, the DOIConnector should check if a DOI is reserved. Use a + * {@link DOIIdenfierException} and set its error code in case of any errors. + * For the given example you should use + * {@code DOIIdentifierException.RESERVER_FIRST} as error code. + * + * @author Pascal-Nicolas Becker + */ +public interface DOIConnector { + public boolean isDOIReserved(Context context, String doi) + throws DOIIdentifierException; + + public boolean isDOIReserved(Context context, DSpaceObject dso, String doi) + throws DOIIdentifierException; + + public boolean isDOIRegistered(Context context, String doi) + throws DOIIdentifierException; + + public boolean isDOIRegistered(Context context, DSpaceObject dso, String doi) + throws DOIIdentifierException; + + /** + * Sends the DELETE-Request to the DOI registry. + * + * <p>This method sends a request to "delete" a DOI. As DOIs are persistent + * identifiers they should never be deleted. For example, if you send a HTTP + * DELETE request to the DataCite Metadata API directly, it will set the DOI + * to inactive.</p> + * + * @param context + * @param doi + * @return + * @throws DOIIdentifierException + */ + public void deleteDOI(Context context, String doi) + throws DOIIdentifierException; + + /** + * Sends a request to the DOI registry to reserve a DOI. + * + * The DOIConnector should check weather this DOI is reserved for another + * object already. In this case it should throw an {@link + * DOIIdentifierException} and set the error code to {@code + * DOIIdentifierException.DOI_ALREADY_EXISTS}. + * + * @param context + * @param dso + * @param doi + * @return + * @throws DOIIdentifierException + */ + public void reserveDOI(Context context, DSpaceObject dso, String doi) + throws DOIIdentifierException; + /** + * Sends a request to the DOI registry to register a DOI. + * + * The DOIConnector ensures compliance with the workflow of the registration + * agency. For example, if a DOI has to be reserved before it can be + * registered the DOIConnector has to check if it is reserved. In this case + * you can throw an DOIIdentifierExcpetion and set the error code to + * {@link DOIIdentifierException.RESERVE_FIRST}. + * + * @param context + * @param dso + * @param doi + * @return + * @throws DOIIdentifierException + */ + public void registerDOI(Context context, DSpaceObject dso, String doi) + throws DOIIdentifierException; + + /** + * Sends a request to the DOI registry to update metadata for a DOI. + * + * The DOIConnector should check weather the DOI is reserved or registered + * for the specified DSpace Object before it sends the metadata update. + * + * @param context + * @param dso + * @param doi + * @return + * @throws IdentifierException + */ + public void updateMetadata(Context context, DSpaceObject dso, String doi) + throws DOIIdentifierException; +} diff --git a/dspace-api/src/main/java/org/dspace/identifier/doi/DOIConsumer.java b/dspace-api/src/main/java/org/dspace/identifier/doi/DOIConsumer.java new file mode 100644 index 0000000..65f7c7c --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/identifier/doi/DOIConsumer.java @@ -0,0 +1,108 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.identifier.doi; + +import java.util.HashSet; +import java.util.Set; +import org.apache.log4j.Logger; +import org.dspace.content.DSpaceObject; +import org.dspace.content.Item; +import org.dspace.core.Constants; +import org.dspace.core.Context; +import org.dspace.event.Consumer; +import org.dspace.event.Event; +import org.dspace.identifier.DOIIdentifierProvider; +import org.dspace.identifier.IdentifierException; +import org.dspace.identifier.IdentifierNotFoundException; +import org.dspace.search.SearchConsumer; +import org.dspace.utils.DSpace; + +/** + * + * @author Pascal-Nicolas Becker (p dot becker at tu hyphen berlin dot de) + */ +public class DOIConsumer implements Consumer +{ + /** log4j logger */ + private static Logger log = Logger.getLogger(DOIConsumer.class); + + @Override + public void initialize() throws Exception { + // nothing to do + // we can ask spring to give as a properly setuped instance of + // DOIIdentifierProvider. Doing so we don't have to configure it and + // can load it in consume method as this is not very expensive. + + } + + // as we use asynchronous metadata update, our updates are not very expensive. + // so we can do everything in the consume method. + @Override + public void consume(Context ctx, Event event) throws Exception { + if (event.getSubjectType() != Constants.ITEM) + { + log.warn("DOIConsumer should not have been given this kind of " + + "subject in an event, skipping: " + event.toString()); + return; + } + if (Event.MODIFY_METADATA != event.getEventType()) + { + log.warn("DOIConsumer should not have been given this kind of " + + "event type, skipping: " + event.toString()); + return; + } + + DSpaceObject dso = event.getSubject(ctx); + //FIXME + if (!(dso instanceof Item)) + { + log.warn("DOIConsumer got an event whose subject was not an item, " + + "skipping: " + event.toString()); + } + Item item = (Item) dso; + + DOIIdentifierProvider provider = new DSpace().getSingletonService( + DOIIdentifierProvider.class); + + String doi = null; + try { + doi = provider.lookup(ctx, dso); + } + catch (IdentifierNotFoundException ex) + { + log.warn("DOIConsumer cannot handles items without DOIs, skipping: " + + event.toString()); + } + try + { + provider.updateMetadata(ctx, dso, doi); + } + catch (IllegalArgumentException ex) + { + // should not happen, as we got the DOI from the DOIProvider + log.warn("DOIConsumer caught an IdentifierException.", ex); + } + catch (IdentifierException ex) + { + log.warn("DOIConsumer cannot update metadata for Item with ID " + + item.getID() + " and DOI " + doi + ".", ex); + } + } + + @Override + public void end(Context ctx) throws Exception { + + + } + + @Override + public void finish(Context ctx) throws Exception { + // nothing to do + } + +} diff --git a/dspace-api/src/main/java/org/dspace/identifier/doi/DOIIdentifierException.java b/dspace-api/src/main/java/org/dspace/identifier/doi/DOIIdentifierException.java new file mode 100644 index 0000000..a5d3be6 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/identifier/doi/DOIIdentifierException.java @@ -0,0 +1,175 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.identifier.doi; + +import org.dspace.identifier.IdentifierException; + +/** + * + * @author Pascal-Nicolas Becker (p dot becker at tu hyphen berlin dot de) + */ +public class DOIIdentifierException extends IdentifierException { + + /** + * Default. + */ + public static final int CODE_NOT_SET = 0; + /** + * A specified DOI does not exists. + */ + public static final int DOI_DOES_NOT_EXIST = 1; + /** + * A DOI cannot be created, registered, reserved, and so on because it is + * already used for another object. + */ + public static final int DOI_ALREADY_EXISTS = 2; + /** + * A DOI cannot be created, registered, reserved and so on because it uses a + * foreign prefix. + */ + public static final int FOREIGN_DOI = 3; + /** + * We got a answer from a registration agency that could not be parsed. + * Either they changed there API or the DOIConnector does not implement it + * properly. + */ + public static final int BAD_ANSWER = 4; + /** + * The registration agency was unable to parse our request. Either they + * changed there API or the DOIConnector does not implement it properly. + */ + public static final int BAD_REQUEST = 5; + /** + * Some registration agencies request that a DOI gets reserved before it can + * be registered. This error code signals that a unreserved DOI should be + * registered and that the registration agency denied it. + */ + public static final int RESERVE_FIRST = 6; + /** + * Error while authenticating against the registration agency. + */ + public static final int AUTHENTICATION_ERROR = 7; + /** + * A internal error occurred either in the registration agency or in the + * DOIConnector. + */ + public static final int INTERNAL_ERROR = 8; + /** + * An error arose while metadata conversion. + */ + public static final int CONVERSION_ERROR = 9; + /** + * A DOI and a provided object does not match. This error occurs if you try + * to connect an object with a DOI that is reserved or registered for + * another object. + */ + public static final int MISMATCH = 10; + /** + * An identifier supplied as DOI could not be recognized. + */ + public static final int UNRECOGNIZED = 11; + /** + * DSpace did not allowed to manipulate the metadata of an DSpaceObject. + */ + public static final int UNAUTHORIZED_METADATA_MANIPULATION = 12; + /** + * You tried to reserve or register a DOI that is marked as DELETED. + */ + public static final int DOI_IS_DELETED = 13; + + private int code; + + // FOR DEBUGGING + public static String codeToString(int code) { + switch (code) { + case CODE_NOT_SET: + return "CODE_NOT_SET"; + case DOI_DOES_NOT_EXIST: + return "DOI_DOES_NOT_EXSIT"; + case DOI_ALREADY_EXISTS: + return "DOI_ALREADY_EXISTS"; + case FOREIGN_DOI: + return "FOREIGN_DOI"; + case BAD_ANSWER: + return "BAD_ANSWER"; + case RESERVE_FIRST: + return "REGISTER_FIRST"; + case AUTHENTICATION_ERROR: + return "AUTHENTICATION_ERROR"; + case INTERNAL_ERROR: + return "INTERNAL_ERROR"; + case CONVERSION_ERROR: + return "CONVERSION_ERROR"; + case MISMATCH: + return "MISMATCH"; + case UNRECOGNIZED: + return "UNRECOGNIZED"; + case UNAUTHORIZED_METADATA_MANIPULATION: + return "UNAUTHORIZED_METADATA_MANIPULATION"; + case DOI_IS_DELETED: + return "DELETED"; + default: + return "UNKOWN"; + } + } + + public DOIIdentifierException() { + super(); + this.code = this.CODE_NOT_SET; + } + + public DOIIdentifierException(int code) { + super(); + this.code = code; + } + + public DOIIdentifierException(String message) { + super(message); + this.code = this.CODE_NOT_SET; + } + + public DOIIdentifierException(String message, int code) { + super(message); + this.code = code; + } + + public DOIIdentifierException(String message, Throwable cause) { + super(message, cause); + this.code = this.CODE_NOT_SET; + } + + public DOIIdentifierException(String message, Throwable cause, int code) { + super(message, cause); + this.code = code; + } + + public DOIIdentifierException(Throwable cause) { + super(cause); + this.code = this.CODE_NOT_SET; + } + + public DOIIdentifierException(Throwable cause, int code) { + super(cause); + this.code = code; + } + + public int getCode() + { + return this.code; + } + + public String getMessage() + { + String message = super.getMessage(); + if ((message == null || message.isEmpty()) && code != CODE_NOT_SET) + { + return codeToString(code); + } + return message; + } +} diff --git a/dspace-api/src/main/java/org/dspace/identifier/doi/DOIOrganiser.java b/dspace-api/src/main/java/org/dspace/identifier/doi/DOIOrganiser.java new file mode 100644 index 0000000..fa85c0a --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/identifier/doi/DOIOrganiser.java @@ -0,0 +1,936 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.identifier.doi; + +import java.io.IOException; +import java.io.PrintStream; +import java.sql.SQLException; +import java.util.Date; +import java.util.Locale; +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.CommandLineParser; +import org.apache.commons.cli.HelpFormatter; +import org.apache.commons.cli.Option; +import org.apache.commons.cli.OptionBuilder; +import org.apache.commons.cli.Options; +import org.apache.commons.cli.ParseException; +import org.apache.commons.cli.PosixParser; +import org.apache.log4j.Logger; +import org.dspace.content.DSpaceObject; +import org.dspace.content.Item; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Constants; +import org.dspace.core.Context; +import org.dspace.core.Email; +import org.dspace.core.I18nUtil; +import org.dspace.handle.HandleManager; +import org.dspace.identifier.DOI; +import org.dspace.identifier.DOIIdentifierProvider; +import org.dspace.identifier.IdentifierException; +import org.dspace.storage.rdbms.DatabaseManager; +import org.dspace.storage.rdbms.TableRow; +import org.dspace.storage.rdbms.TableRowIterator; +import org.dspace.utils.DSpace; + + +/** + * + * @author Marsa Haoua + * @author Pascal-Nicolas Becker + */ +public class DOIOrganiser { + + private static final Logger LOG = Logger.getLogger(DOIOrganiser.class); + + private DOIIdentifierProvider provider; + private Context context; + private boolean quiet; + + public DOIOrganiser(Context context, DOIIdentifierProvider provider) + { + this.context = context; + this.provider = provider; + this.quiet = false; + } + + public static void main(String[] args) + { + LOG.debug("Starting DOI organiser "); + + // setup Context + Context context = null; + try { + context = new Context(); + } + catch (SQLException sqle) + { + System.err.println("Can't connect to database: " + sqle.getMessage()); + System.exit(-1); + } + // Started from commandline, don't use the authentication system. + context.turnOffAuthorisationSystem(); + + DOIOrganiser organiser = new DOIOrganiser(context, new DSpace().getSingletonService(DOIIdentifierProvider.class)); + + // run command line interface + runCLI(context, organiser, args); + + try + { + context.complete(); + } + catch (SQLException sqle) + { + System.err.println("Cannot save changes to database: " + sqle.getMessage()); + System.exit(-1); + } + + } + + public static void runCLI(Context context, DOIOrganiser organiser, String[] args) + { + // initlize options + Options options = new Options(); + + options.addOption("h", "help", false, "Help"); + options.addOption("l", "list", false, + "List all objects to be reserved, registered, deleted of updated "); + options.addOption("r", "register-all", false, + "Perform online registration for all identifiers queued for registration."); + options.addOption("s", "reserve-all", false, + "Perform online reservation for all identifiers queued for reservation."); + options.addOption("u", "update-all", false, + "Perform online metadata update for all identifiers queued for metadata update."); + options.addOption("d", "delete-all", false, + "Perform online deletion for all identifiers queued for deletion."); + + options.addOption("q", "quiet", false, + "Turn the command line output off."); + + Option registerDoi = OptionBuilder.withArgName("DOI|ItemID|handle") + .withLongOpt("register-doi") + .hasArgs(1) + .withDescription("Register a specified identifier. " + + "You can specify the identifier by ItemID, Handle or DOI.") + .create(); + + options.addOption(registerDoi); + + Option reserveDoi = OptionBuilder.withArgName("DOI|ItemID|handle") + .withLongOpt("reserve-doi") + .hasArgs(1) + .withDescription("Reserve a specified identifier online. " + + "You can specify the identifier by ItemID, Handle or DOI.") + .create(); + + options.addOption(reserveDoi); + + Option update = OptionBuilder.withArgName("DOI|ItemID|handle") + .hasArgs(1) + .withDescription("Update online an object for a given DOI identifier" + + " or ItemID or Handle. A DOI identifier or an ItemID or a Handle is needed.\n") + .withLongOpt("update-doi") + .create(); + + options.addOption(update); + + Option delete = OptionBuilder.withArgName("DOI identifier") + .withLongOpt("delete-doi") + .hasArgs(1) + .withDescription("Delete a specified identifier.") + .create(); + + options.addOption(delete); + + + // initialize parser + CommandLineParser parser = new PosixParser(); + CommandLine line = null; + HelpFormatter helpformater = new HelpFormatter(); + + try + { + line = parser.parse(options, args); + } + catch (ParseException ex) + { + LOG.fatal(ex); + System.exit(1); + } + + + // process options + // user asks for help + if (line.hasOption('h') || 0 == line.getOptions().length) + { + helpformater.printHelp("\nDOI organiser\n", options); + } + + if (line.hasOption('q')) + { + organiser.setQuiet(); + } + + if (line.hasOption('l')) + { + organiser.list("reservation", null, null, DOIIdentifierProvider.TO_BE_RESERVERED); + organiser.list("registration", null, null, DOIIdentifierProvider.TO_BE_REGISTERED); + organiser.list("update", null, null, + DOIIdentifierProvider.UPDATE_BEFORE_REGISTERATION, + DOIIdentifierProvider.UPDATE_REGISTERED, + DOIIdentifierProvider.UPDATE_RESERVERED); + organiser.list("deletion", null, null, DOIIdentifierProvider.TO_BE_DELETED); + } + + if (line.hasOption('s')) + { + TableRowIterator it = organiser + .getDOIsByStatus(DOIIdentifierProvider.TO_BE_RESERVERED); + + try { + if (!it.hasNext()) + { + System.err.println("There are no objects in the database " + + "that could be reserved."); + } + + while (it.hasNext()) + { + TableRow doiRow = it.next(); + DSpaceObject dso = DSpaceObject.find( + context, + doiRow.getIntColumn("resource_type_id"), + doiRow.getIntColumn("resource_id")); + organiser.reserve(doiRow, dso); + } + } catch (SQLException ex) { + System.err.println("Error in database connection:" + ex.getMessage()); + ex.printStackTrace(System.err); + } + } + + if (line.hasOption('r')) + { + TableRowIterator it = organiser + .getDOIsByStatus(DOIIdentifierProvider.TO_BE_REGISTERED); + + try { + if (!it.hasNext()) + { + System.err.println("There are no objects in the database " + + "that could be registered."); + } + while (it.hasNext()) + { + TableRow doiRow = it.next(); + DSpaceObject dso = DSpaceObject.find( + context, + doiRow.getIntColumn("resource_type_id"), + doiRow.getIntColumn("resource_id")); + organiser.register(doiRow, dso); + } + } catch (SQLException ex) { + System.err.println("Error in database connection:" + ex.getMessage()); + ex.printStackTrace(System.err); + } + } + + if (line.hasOption('u')) + { + TableRowIterator it = organiser.getDOIsByStatus( + DOIIdentifierProvider.UPDATE_BEFORE_REGISTERATION, + DOIIdentifierProvider.UPDATE_RESERVERED, + DOIIdentifierProvider.UPDATE_REGISTERED); + + try { + if (!it.hasNext()) + { + System.err.println("There are no objects in the database " + + "whose metadata needs an update."); + } + + while (it.hasNext()) + { + TableRow doiRow = it.next(); + DSpaceObject dso = DSpaceObject.find( + context, + doiRow.getIntColumn("resource_type_id"), + doiRow.getIntColumn("resource_id")); + organiser.update(doiRow, dso); + } + } catch (SQLException ex) { + System.err.println("Error in database connection:" + ex.getMessage()); + ex.printStackTrace(System.err); + } + } + + if (line.hasOption('d')) + { + TableRowIterator it = organiser + .getDOIsByStatus(DOIIdentifierProvider.TO_BE_DELETED); + + try { + if (!it.hasNext()) + { + System.err.println("There are no objects in the database " + + "that could be deleted."); + } + + while (it.hasNext()) + { + TableRow doiRow = it.next(); + organiser.delete(doiRow.getStringColumn("doi")); + } + } catch (SQLException ex) { + System.err.println("Error in database connection:" + ex.getMessage()); + ex.printStackTrace(System.err); + } + } + + + if(line.hasOption("reserve-doi")) + { + String identifier = line.getOptionValue("reserve-doi"); + + if(null == identifier) + { + helpformater.printHelp("\nDOI organiser\n", options); + } + else + { + try { + TableRow doiRow = organiser.findTableRow(identifier); + DSpaceObject dso = DSpaceObject.find( + context, + doiRow.getIntColumn("resource_type_id"), + doiRow.getIntColumn("resource_id")); + organiser.reserve(doiRow, dso); + } + catch (SQLException ex) + { + LOG.error(ex); + } + catch (IllegalArgumentException ex) + { + LOG.error(ex); + } + catch (IllegalStateException ex) + { + LOG.error(ex); + } catch (IdentifierException ex) { + LOG.error(ex); + } + } + } + + if(line.hasOption("register-doi")) + { + String identifier = line.getOptionValue("register-doi"); + + if(null == identifier) + { + helpformater.printHelp("\nDOI organiser\n", options); + } + else + { + try { + TableRow doiRow = organiser.findTableRow(identifier); + DSpaceObject dso = DSpaceObject.find( + context, + doiRow.getIntColumn("resource_type_id"), + doiRow.getIntColumn("resource_id")); + organiser.register(doiRow, dso); + } catch (SQLException ex) { + LOG.error(ex); + } catch (IllegalArgumentException ex) { + LOG.error(ex); + } catch (IllegalStateException ex) { + LOG.error(ex); + } catch (IdentifierException ex) { + LOG.error(ex); + } + } + } + + if(line.hasOption("update-doi")) + { + String identifier = line.getOptionValue('u'); + + if(null == identifier) + { + helpformater.printHelp("\nDOI organiser\n", options); + } + else + { + try { + TableRow doiRow = organiser.findTableRow(identifier); + DSpaceObject dso = DSpaceObject.find( + context, + doiRow.getIntColumn("resource_type_id"), + doiRow.getIntColumn("resource_id")); + organiser.update(doiRow, dso); + } catch (SQLException ex) { + LOG.error(ex); + } catch (IllegalArgumentException ex) { + LOG.error(ex); + } catch (IllegalStateException ex) { + LOG.error(ex); + } catch (IdentifierException ex) { + LOG.error(ex); + } + } + } + + if(line.hasOption("delete-doi")) + { + String identifier = line.getOptionValue('d'); + + if (null == identifier) + { + helpformater.printHelp("\nDOI organiser\n", options); + } + else { + try { + organiser.delete(identifier); + } catch (SQLException ex) { + LOG.error(ex); + } catch (IllegalArgumentException ex) { + LOG.error(ex); + } + } + } + + } + + + public TableRowIterator getDOIsByStatus(Integer ... status) + { + try + { + String sql = "SELECT * FROM Doi"; + for (int i = 0; i < status.length ; i++) + { + if (0 == i) + { + sql += " WHERE "; + } + else + { + sql += " OR "; + } + sql += " status = ?"; + } + + if (status.length < 1) + { + return DatabaseManager.queryTable(context, "Doi", sql); + } + return DatabaseManager.queryTable(context, "Doi", sql, status); + } + catch (SQLException ex) + { + LOG.error("Error while trying to get data from database", ex); + throw new RuntimeException("Error while trying to get data from database", ex); + } + } + + public void list(String processName, PrintStream out, PrintStream err, Integer ... status) + { + String indent = " "; + if (null == out) + { + out = System.out; + } + if (null == err) + { + err = System.err; + } + + TableRowIterator it = this.getDOIsByStatus(status); + + try + { + if (it.hasNext()) + { + out.println("DOIs queued for " + processName + ": "); + } + else + { + out.println("There are no DOIs queued for " + processName + "."); + } + while(it.hasNext()) + { + TableRow doiRow = it.next(); + DSpaceObject dso = DSpaceObject.find(context, + doiRow.getIntColumn("resource_type_id"), + doiRow.getIntColumn("resource_id")); + out.print(indent + DOI.SCHEME + doiRow.getStringColumn("doi")); + if (null != dso) + { + out.println(" (belongs to item with handle " + dso.getHandle() + ")"); + } + else + { + out.println(" (cannot determine handle of assigned object)"); + } + } + out.println(""); + } + catch (SQLException ex) + { + err.println("Error in database Connection: " + ex.getMessage()); + ex.printStackTrace(err); + } + finally + { + it.close(); + } + } + + public void register(TableRow doiRow, DSpaceObject dso) throws SQLException + { + if (Constants.ITEM != dso.getType()) + { + throw new IllegalArgumentException("Currenty DSpace supports DOIs for Items only."); + } + + try { + provider.registerOnline(context, dso, + DOI.SCHEME + doiRow.getStringColumn("doi")); + + if(!quiet) + { + System.out.println("This identifier: " + + DOI.SCHEME + doiRow.getStringColumn("doi") + + " is successfully registered."); + } + } + catch (IdentifierException ex) + { + if (!(ex instanceof DOIIdentifierException)) + { + LOG.error("It wasn't possible to register this identifier: " + + DOI.SCHEME + doiRow.getStringColumn("doi") + + " online. ", ex); + } + + DOIIdentifierException doiIdentifierException = (DOIIdentifierException) ex; + + try + { + sendAlertMail("Register", dso, + DOI.SCHEME + doiRow.getStringColumn("doi"), + doiIdentifierException.codeToString(doiIdentifierException + .getCode())); + } + catch (IOException ioe) + { + LOG.error("Couldn't send mail", ioe); + } + + LOG.error("It wasn't possible to register this identifier : " + + DOI.SCHEME + doiRow.getStringColumn("doi") + + " online. Exceptions code: " + + doiIdentifierException + .codeToString(doiIdentifierException.getCode()), ex); + + if(!quiet) + { + System.err.println("It wasn't possible to register this identifier: " + + DOI.SCHEME + doiRow.getStringColumn("doi")); + } + + } + catch (IllegalArgumentException ex) + { + LOG.error("Database table DOI contains a DOI that is not valid: " + + DOI.SCHEME + doiRow.getStringColumn("doi") + "!", ex); + + if(!quiet) + { + System.err.println("It wasn't possible to register this identifier: " + + DOI.SCHEME + doiRow.getStringColumn("doi")); + } + + throw new IllegalStateException("Database table DOI contains a DOI " + + " that is not valid: " + + DOI.SCHEME + doiRow.getStringColumn("doi") + "!", ex); + } + catch (SQLException ex) + { + LOG.error("Error while trying to get data from database", ex); + + if(!quiet) + { + System.err.println("It wasn't possible to register this identifier: " + + DOI.SCHEME + doiRow.getStringColumn("doi")); + } + throw new RuntimeException("Error while trying to get data from database", ex); + } + } + + public void reserve(TableRow doiRow, DSpaceObject dso) throws SQLException + { + if (Constants.ITEM != dso.getType()) + { + throw new IllegalArgumentException("Currenty DSpace supports DOIs for Items only."); + } + + try + { + provider.reserveOnline(context, dso, + DOI.SCHEME + doiRow.getStringColumn("doi")); + + if(!quiet) + { + System.out.println("This identifier : " + + DOI.SCHEME + doiRow.getStringColumn("doi") + + " is successfully reserved."); + } + } + catch (IdentifierException ex) + { + if (!(ex instanceof DOIIdentifierException)) + { + LOG.error("It wasn't possible to register this identifier : " + + DOI.SCHEME + doiRow.getStringColumn("doi") + + " online. ",ex); + } + + DOIIdentifierException doiIdentifierException = (DOIIdentifierException) ex; + + try + { + sendAlertMail("Reserve", dso, + DOI.SCHEME + doiRow.getStringColumn("doi"), + DOIIdentifierException.codeToString( + doiIdentifierException.getCode())); + } + catch (IOException ioe) + { + LOG.error("Couldn't send mail", ioe); + } + + LOG.error("It wasn't possible to reserve the identifier online. " + + " Exceptions code: " + + DOIIdentifierException + .codeToString(doiIdentifierException.getCode()), ex); + + if(!quiet) + { + System.err.println("It wasn't possible to reserve this identifier: " + + DOI.SCHEME + doiRow.getStringColumn("doi")); + } + } + catch (IllegalArgumentException ex) + { + LOG.error("Database table DOI contains a DOI that is not valid: " + + DOI.SCHEME + doiRow.getStringColumn("doi") + "!", ex); + + if(!quiet) + { + System.err.println("It wasn't possible to reserve this identifier: " + + DOI.SCHEME + doiRow.getStringColumn("doi")); + } + throw new IllegalStateException("Database table DOI contains a DOI " + + " that is not valid: " + + DOI.SCHEME + doiRow.getStringColumn("doi") + "!", ex); + } + catch (SQLException ex) + { + LOG.error("Error while trying to get data from database", ex); + + if(!quiet) + { + System.err.println("It wasn't possible to reserve this identifier: " + + DOI.SCHEME + doiRow.getStringColumn("doi")); + } + throw new RuntimeException("Error while trying to get data from database", ex); + + } + } + + public void update(TableRow doiRow, DSpaceObject dso) + { + if (Constants.ITEM != dso.getType()) + { + throw new IllegalArgumentException("Currenty DSpace supports DOIs " + + "for Items only."); + } + + try + { + provider.updateMetadataOnline(context, dso, + DOI.SCHEME + doiRow.getStringColumn("doi")); + + if(!quiet) + { + System.out.println("Successfully updated metadata of DOI " + DOI.SCHEME + + doiRow.getStringColumn("doi") + "."); + } + } + catch (IdentifierException ex) + { + if (!(ex instanceof DOIIdentifierException)) + { + LOG.error("It wasn't possible to register the identifier online. ",ex); + } + + DOIIdentifierException doiIdentifierException = (DOIIdentifierException) ex; + + try + { + sendAlertMail("Update", dso, + DOI.SCHEME + doiRow.getStringColumn("doi"), + doiIdentifierException.codeToString(doiIdentifierException + .getCode())); + } + catch (IOException ioe) + { + LOG.error("Couldn't send mail", ioe); + } + + LOG.error("It wasn't possible to update this identifier: " + + DOI.SCHEME + doiRow.getStringColumn("doi") + + " Exceptions code: " + + doiIdentifierException + .codeToString(doiIdentifierException.getCode()), ex); + + if(!quiet) + { + System.err.println("It wasn't possible to update this identifier: " + + DOI.SCHEME + doiRow.getStringColumn("doi")); + } + + } + catch (IllegalArgumentException ex) + { + LOG.error("Database table DOI contains a DOI that is not valid: " + + DOI.SCHEME + doiRow.getStringColumn("doi") + "!", ex); + + if(!quiet) + { + System.err.println("It wasn't possible to update this identifier: " + + DOI.SCHEME + doiRow.getStringColumn("doi")); + } + + throw new IllegalStateException("Database table DOI contains a DOI " + + " that is not valid: " + + DOI.SCHEME + doiRow.getStringColumn("doi") + "!", ex); + } + catch (SQLException ex) + { + LOG.error("It wasn't possible to connect to the Database!", ex); + } + } + + public void delete(String identifier) + throws SQLException + { + String doi = null; + TableRow doiRow = null; + + try + { + doi = DOI.formatIdentifier(identifier); + + // If there's no exception: we found a valid DOI. :) + doiRow = DatabaseManager.findByUnique(context, "Doi", "doi", + doi.substring(DOI.SCHEME.length())); + + if (null == doiRow) + { + throw new IllegalStateException("You specified a valid DOI," + + " that is not stored in our database."); + } + provider.deleteOnline(context, doi); + + if (!quiet) + { + System.err.println("It was possible to delete this identifier: " + + DOI.SCHEME + doiRow.getStringColumn("doi") + + " online."); + } + } + catch (DOIIdentifierException ex) + { + // Identifier was not recognized as DOI. + LOG.error("It wasn't possible to detect this identifier: " + + identifier + + " Exceptions code: " + + ex.codeToString(ex.getCode()), ex); + + if (!quiet) + { + System.err.println("It wasn't possible to detect this identifier: " + + identifier); + } + } + catch (IllegalArgumentException ex) + { + if (!quiet) + { + System.err.println("It wasn't possible to delete this identifier: " + + DOI.SCHEME + doiRow.getStringColumn("doi") + + " online. Take a look in log file."); + } + } + } + + /** + * Finds the TableRow in the Doi table that belongs to the specified + * DspaceObject. + * + * @param identifier Either an ItemID, a DOI or a handle. If the identifier + * contains digits only we treat it as ItemID, if not we try to find a + * matching doi or a handle (in this order). + * @return The TableRow or null if the Object does not have a DOI. + * @throws SQLException + * @throws IllegalArgumentException If the identifier is null, an empty + * String or specifies an DSpaceObject that is not an item. We currently + * support DOIs for items only, but this may change once... + * @throws IllegalStateException If the identifier was a valid DOI that is + * not stored in our database or if it is a handle that is not bound to an + * DSpaceObject. + */ + public TableRow findTableRow(String identifier) + throws SQLException, IllegalArgumentException, IllegalStateException, IdentifierException + { + if (null == identifier || identifier.isEmpty()) + { + throw new IllegalArgumentException("Identifier is null or empty."); + } + + String sql = "SELECT * FROM Doi WHERE resource_type_id = ? AND resource_id = ? "; + TableRow doiRow = null; + String doi = null; + + // detect it identifer is ItemID, handle or DOI. + // try to detect ItemID + if (identifier.matches("\\d*")) + { + Integer itemID = Integer.valueOf(identifier); + DSpaceObject dso = Item.find(context, itemID); + + if (null != dso) + { + doiRow = DatabaseManager.querySingleTable(context, "Doi", + sql, Constants.ITEM, dso.getID()); + + //Check if this Item has an Identifier, mint one if it doesn't + if (null == doiRow) + { + doi = provider.mint(context, dso); + doiRow = DatabaseManager.findByUnique(context, "Doi", "doi", + doi.substring(DOI.SCHEME.length())); + return doiRow; + } + return doiRow; + } + else + { + throw new IllegalStateException("You specified an ItemID, " + + "that is not stored in our database."); + } + } + + // detect handle + DSpaceObject dso = HandleManager.resolveToObject(context, identifier); + + if (null != dso) + { + if (dso.getType() != Constants.ITEM) + { + throw new IllegalArgumentException( + "Currently DSpace supports DOIs for Items only. " + + "Cannot process specified handle as it does not identify an Item."); + } + + doiRow = DatabaseManager.querySingleTable(context, "Doi", sql, + Constants.ITEM, dso.getID()); + + if (null == doiRow) + { + doi = provider.mint(context, dso); + doiRow = DatabaseManager.findByUnique(context, "Doi", "doi", + doi.substring(DOI.SCHEME.length())); + } + return doiRow; + } + // detect DOI + try { + doi = DOI.formatIdentifier(identifier); + // If there's no exception: we found a valid DOI. :) + doiRow = DatabaseManager.findByUnique(context, "Doi", "doi", + doi.substring(DOI.SCHEME.length())); + if (null == doiRow) + { + throw new IllegalStateException("You specified a valid DOI," + + " that is not stored in our database."); + } + } + catch (DOIIdentifierException ex) + { + // Identifier was not recognized as DOI. + LOG.error("It wasn't possible to detect this identifier: " + + identifier + + " Exceptions code: " + + ex.codeToString(ex.getCode()), ex); + + if(!quiet) + { + System.err.println("It wasn't possible to detect this identifier: " + + DOI.SCHEME + doiRow.getStringColumn("doi")); + } + } + + return doiRow; + } + + private void sendAlertMail(String action, DSpaceObject dso, String doi, String reason) + throws IOException + { + String recipient = ConfigurationManager.getProperty("alert.recipient"); + + try + { + if (recipient != null) + { + Email email = Email.getEmail( + I18nUtil.getEmailFilename(Locale.getDefault(), "doi_maintenance_error")); + email.addRecipient(recipient); + email.addArgument(action); + email.addArgument(new Date()); + email.addArgument(dso.getTypeText()); + email.addArgument(new Integer(dso.getID())); + email.addArgument(doi); + email.addArgument(reason); + email.send(); + + if (!quiet) + { + System.err.println("Email alert is sent."); + } + } + } + catch (Exception e) { + LOG.warn("Unable to send email alert", e); + if (!quiet) + { + System.err.println("Unable to send email alert."); + } + } + } + + private void setQuiet() + { + this.quiet = true; + } + +} diff --git a/dspace-api/src/main/java/org/dspace/identifier/doi/DataCiteConnector.java b/dspace-api/src/main/java/org/dspace/identifier/doi/DataCiteConnector.java new file mode 100644 index 0000000..736ede5 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/identifier/doi/DataCiteConnector.java @@ -0,0 +1,1066 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.identifier.doi; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.net.URISyntaxException; +import java.sql.SQLException; +import java.util.Iterator; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.StatusLine; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpUriRequest; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.util.EntityUtils; +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.DSpaceObject; +import org.dspace.content.crosswalk.CrosswalkException; +import org.dspace.content.crosswalk.DisseminationCrosswalk; +import org.dspace.core.Context; +import org.dspace.core.PluginManager; +import org.dspace.handle.HandleManager; +import org.dspace.identifier.DOI; +import org.dspace.services.ConfigurationService; +import org.jdom.Document; +import org.jdom.Element; +import org.jdom.JDOMException; +import org.jdom.filter.ElementFilter; +import org.jdom.input.SAXBuilder; +import org.jdom.output.Format; +import org.jdom.output.XMLOutputter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Required; + +/** + * + * @author Pascal-Nicolas Becker + */ +public class DataCiteConnector +implements DOIConnector +{ + + private static final Logger log = LoggerFactory.getLogger(DataCiteConnector.class); + + // Configuration property names + static final String CFG_USER = "identifier.doi.user"; + static final String CFG_PASSWORD = "identifier.doi.password"; + + /** + * Stores the scheme used to connect to the DataCite server. It will be set + * by spring dependency injection. + */ + protected String SCHEME; + /** + * Stores the hostname of the DataCite server. Set by spring dependency + * injection. + */ + protected String HOST; + + /** + * Path on the DataCite server used to generate DOIs. Set by spring + * dependency injection. + */ + protected String DOI_PATH; + /** + * Path on the DataCite server used to register metadata. Set by spring + * dependency injection. + */ + protected String METADATA_PATH; + /** + * Name of crosswalk to convert metadata into DataCite Metadata Scheme. Set + * by spring dependency injection. + */ + protected String CROSSWALK_NAME; + /** + * DisseminationCrosswalk to map local metadata into DataCite metadata. + * The name of the crosswalk is set by spring dependency injection using + * {@link setDisseminationCrosswalk(String) setDisseminationCrosswalk} which + * instantiates the crosswalk. + */ + protected DisseminationCrosswalk xwalk; + + protected ConfigurationService configurationService; + + protected String USERNAME; + protected String PASSWORD; + + public DataCiteConnector() + { + this.xwalk = null; + this.USERNAME = null; + this.PASSWORD = null; + } + + /** + * Used to set the scheme to connect the DataCite server. Used by spring + * dependency injection. + * @param DATACITE_SCHEME Probably https or http. + */ + @Required + public void setDATACITE_SCHEME(String DATACITE_SCHEME) + { + this.SCHEME = DATACITE_SCHEME; + } + + /** + * Set the hostname of the DataCite server. Used by spring dependency + * injection. + * @param DATACITE_HOST Hostname to connect to register DOIs (f.e. test.datacite.org). + */ + @Required + public void setDATACITE_HOST(String DATACITE_HOST) + { + this.HOST = DATACITE_HOST; + } + + /** + * Set the path on the DataCite server to register DOIs. Used by spring + * dependency injection. + * @param DATACITE_DOI_PATH Path to register DOIs, f.e. /doi. + */ + @Required + public void setDATACITE_DOI_PATH(String DATACITE_DOI_PATH) + { + if (!DATACITE_DOI_PATH.startsWith("/")) + { + DATACITE_DOI_PATH = "/" + DATACITE_DOI_PATH; + } + if (!DATACITE_DOI_PATH.endsWith("/")) + { + DATACITE_DOI_PATH = DATACITE_DOI_PATH + "/"; + } + + this.DOI_PATH = DATACITE_DOI_PATH; + } + + /** + * Set the path to register metadata on DataCite server. Used by spring + * dependency injection. + * @param DATACITE_METADATA_PATH Path to register metadata, f.e. /mds. + */ + @Required + public void setDATACITE_METADATA_PATH(String DATACITE_METADATA_PATH) + { + if (!DATACITE_METADATA_PATH.startsWith("/")) + { + DATACITE_METADATA_PATH = "/" + DATACITE_METADATA_PATH; + } + if (!DATACITE_METADATA_PATH.endsWith("/")) + { + DATACITE_METADATA_PATH = DATACITE_METADATA_PATH + "/"; + } + + this.METADATA_PATH = DATACITE_METADATA_PATH; + } + + + @Autowired + @Required + public void setConfigurationService(ConfigurationService configurationService) + { + this.configurationService = configurationService; + } + + /** + * Set the name of the dissemination crosswalk used to convert the metadata + * into DataCite Metadata Schema. Used by spring dependency injection. + * @param CROSSWALK_NAME The name of the dissemination crosswalk to use. This + * crosswalk must be configured in dspace.cfg. + */ + @Required + public void setDisseminationCrosswalkName(String CROSSWALK_NAME) { + this.CROSSWALK_NAME = CROSSWALK_NAME; + } + + protected void prepareXwalk() + { + if (null != this.xwalk) + return; + + this.xwalk = (DisseminationCrosswalk) PluginManager.getNamedPlugin( + DisseminationCrosswalk.class, this.CROSSWALK_NAME); + + if (this.xwalk == null) + { + throw new RuntimeException("Can't find crosswalk '" + + CROSSWALK_NAME + "'!"); + } + } + + protected String getUsername() + { + if (null == this.USERNAME) + { + this.USERNAME = this.configurationService.getProperty(CFG_USER); + if (null == this.USERNAME) + { + throw new RuntimeException("Unable to load username from " + + "configuration. Cannot find property " + + CFG_USER + "."); + } + } + return this.USERNAME; + } + + protected String getPassword() + { + if (null == this.PASSWORD) + { + this.PASSWORD = this.configurationService.getProperty(CFG_PASSWORD); + if (null == this.PASSWORD) + { + throw new RuntimeException("Unable to load password from " + + "configuration. Cannot find property " + + CFG_PASSWORD + "."); + } + } + return this.PASSWORD; + } + + + public boolean isDOIReserved(Context context, String doi) + throws DOIIdentifierException + { + return isDOIReserved(context, null, doi); + } + + @Override + public boolean isDOIReserved(Context context, DSpaceObject dso, String doi) + throws DOIIdentifierException + { + // get mds/metadata/<doi> + DataCiteResponse resp = this.sendMetadataGetRequest(doi); + + switch (resp.getStatusCode()) + { + // 200 -> reserved + // if (200 && dso != null) -> compare url (out of response-content) with dso + case (200) : + { + // Do we check if doi is reserved generally or for a specified dso? + if (null == dso) + { + return true; + } + + // check if doi belongs to dso + String doiHandle = null; + try + { + doiHandle = extractAlternateIdentifier(context, resp.getContent()); + } + catch (SQLException e) + { + throw new RuntimeException(e); + } + + if (null == doiHandle) + { + // we were unable to find a handle belonging to our repository + return false; + } + + String dsoHandle = dso.getHandle(); + if (null == dsoHandle) + { + return false; + } + return dsoHandle.equals(doiHandle); + } + + // 404 "Not Found" means DOI is neither reserved nor registered. + case (404) : + { + return false; + } + + // 410 GONE -> DOI is set inactive + // that means metadata has been deleted + // it is unclear if the doi has been registered before or only reserved. + // it is unclear for which item it has been reserved + // we will handle this as if it reserved for an unknown object. + case (410) : + { + if (null == dso) + { + return true; + } + else + { + return false; + } + } + + // Catch all other http status code in case we forgot one. + default : + { + log.warn("While checking if the DOI {} is registered, we got a " + + "http status code {} and the message \"{}\".", + new String[] + { + doi, Integer.toString(resp.statusCode), + resp.getContent() + }); + throw new DOIIdentifierException("Unable to parse an answer from " + + "DataCite API. Please have a look into DSpace logs.", + DOIIdentifierException.BAD_ANSWER); + } + } + } + + @Override + public boolean isDOIRegistered(Context context, String doi) + throws DOIIdentifierException + { + return isDOIRegistered(context, null, doi); + } + + @Override + public boolean isDOIRegistered(Context context, DSpaceObject dso, String doi) + throws DOIIdentifierException + { + DataCiteResponse response = sendDOIGetRequest(doi); + + switch (response.getStatusCode()) + { + // status code 200 means the doi is reserved and registered + case (200) : + { + // Do we check if doi is reserved generally or for a specified dso? + if (null == dso) + { + return true; + } + + // DataCite returns the URL the DOI currently points to. + // To ensure that the DOI is registered for a specified dso it + // should be sufficient to compare the URL DataCite returns with + // the URL of the dso. + String doiUrl = response.getContent(); + if (null == doiUrl) + { + log.error("Received a status code 200 without a response content. DOI: {}.", doi); + throw new DOIIdentifierException("Received a http status code 200 without a response content.", + DOIIdentifierException.BAD_ANSWER); + } + + String dsoUrl = null; + try + { + dsoUrl = HandleManager.resolveToURL(context, dso.getHandle()); + } + catch (SQLException e) + { + log.error("Error in database connection: " + e.getMessage()); + throw new RuntimeException(e); + } + + if (null == dsoUrl) + { + // the handle of the dso was not found in our db?! + log.error("The HandleManager was unable to find the handle " + + "of a DSpaceObject in the database!?! " + + "Type: {} ID: {}", dso.getTypeText(), dso.getID()); + throw new RuntimeException("The HandleManager was unable to " + + "find the handle of a DSpaceObject in the database!"); + } + + return (dsoUrl.equals(doiUrl)); + } + // Status Code 204 "No Content" stands for a known DOI without URL. + // A DOI that is known but does not have any associated URL is + // reserved but not registered yet. + case (204) : + { + // we know it is reserved, but we do not know for which object. + // won't add this to the cache. + return false; + } + // 404 "Not Found" means DOI is neither reserved nor registered. + case (404) : + { + return false; + } + // Catch all other http status code in case we forgot one. + default : + { + log.warn("While checking if the DOI {} is registered, we got a " + + "http status code {} and the message \"{}\".", + new String[] {doi, Integer.toString(response.statusCode), response.getContent()}); + throw new DOIIdentifierException("Unable to parse an answer from " + + "DataCite API. Please have a look into DSpace logs.", + DOIIdentifierException.BAD_ANSWER); + } + } + } + + + @Override + public void deleteDOI(Context context, String doi) + throws DOIIdentifierException + { + if (!isDOIReserved(context, doi)) + return; + + // delete mds/metadata/<doi> + DataCiteResponse resp = this.sendMetadataDeleteRequest(doi); + switch(resp.getStatusCode()) + { + //ok + case (200) : + { + return; + } + // 404 "Not Found" means DOI is neither reserved nor registered. + case (404) : + { + log.error("DOI {} is at least reserved, but a delete request " + + "told us that it is unknown!", doi); + return; + } + // Catch all other http status code in case we forgot one. + default : + { + log.warn("While deleting metadata of DOI {}, we got a " + + "http status code {} and the message \"{}\".", + new String[] {doi, Integer.toString(resp.statusCode), resp.getContent()}); + throw new DOIIdentifierException("Unable to parse an answer from " + + "DataCite API. Please have a look into DSpace logs.", + DOIIdentifierException.BAD_ANSWER); + } + } + } + + @Override + public void reserveDOI(Context context, DSpaceObject dso, String doi) + throws DOIIdentifierException + { + // check if DOI is reserved at the registration agency + if (this.isDOIReserved(context, doi)) + { + // if doi is registered for this object we still should check its + // status in our database (see below). + // if it is registered for another object we should notify an admin + if (!this.isDOIReserved(context, dso, doi)) + { + log.warn("DOI {} is reserved for another object already.", doi); + throw new DOIIdentifierException(DOIIdentifierException.DOI_ALREADY_EXISTS); + } + // the DOI is reserved for this Object. We use {@code reserveDOI} to + // send metadata updates, so don't return here! + } + + this.prepareXwalk(); + + if (!this.xwalk.canDisseminate(dso)) + { + log.error("Crosswalk " + this.CROSSWALK_NAME + + " cannot disseminate DSO with type " + dso.getType() + + " and ID " + dso.getID() + ". Giving up reserving the DOI " + + doi + "."); + throw new DOIIdentifierException("Cannot disseminate " + + dso.getTypeText() + "/" + dso.getID() + + " using crosswalk " + this.CROSSWALK_NAME + ".", + DOIIdentifierException.CONVERSION_ERROR); + } + + Element root = null; + try + { + root = xwalk.disseminateElement(dso); + } + catch (AuthorizeException ae) + { + log.error("Caught an AuthorizeException while disseminating DSO " + + "with type " + dso.getType() + " and ID " + dso.getID() + + ". Giving up to reserve DOI " + doi + ".", ae); + throw new DOIIdentifierException("AuthorizeException occured while " + + "converting " + dso.getTypeText() + "/" + dso.getID() + + " using crosswalk " + this.CROSSWALK_NAME + ".", ae, + DOIIdentifierException.CONVERSION_ERROR); + } + catch (CrosswalkException ce) + { + log.error("Caught an CrosswalkException while reserving a DOI (" + + doi + ") for DSO with type " + dso.getType() + " and ID " + + dso.getID() + ". Won't reserve the doi.", ce); + throw new DOIIdentifierException("CrosswalkException occured while " + + "converting " + dso.getTypeText() + "/" + dso.getID() + + " using crosswalk " + this.CROSSWALK_NAME + ".", ce, + DOIIdentifierException.CONVERSION_ERROR); + } + catch (IOException ioe) + { + throw new RuntimeException(ioe); + } + catch (SQLException se) + { + throw new RuntimeException(se); + } + + String metadataDOI = extractDOI(root); + if (null == metadataDOI) + { + // The DOI will be saved as metadata of dso after successful + // registration. To register a doi it has to be part of the metadata + // sent to DataCite. So we add it to the XML we'll send to DataCite + // and we'll add it to the DSO after successful registration. + root = addDOI(doi, root); + } + else if (!metadataDOI.equals(doi.substring(DOI.SCHEME.length()))) + { + // FIXME: that's not an error. If at all, it is worth logging it. + throw new DOIIdentifierException("DSO with type " + dso.getTypeText() + + " and id " + dso.getID() + " already has DOI " + + metadataDOI + ". Won't reserve DOI " + doi + " for it."); + } + + // send metadata as post to mds/metadata + DataCiteResponse resp = this.sendMetadataPostRequest(doi, root); + + switch (resp.getStatusCode()) + { + // 201 -> created / ok + case (201) : + { + return; + } + // 400 -> invalid XML + case (400) : + { + log.warn("DataCite was unable to understand the XML we send."); + log.warn("DataCite Metadata API returned a http status code " + +"400: " + resp.getContent()); + Format format = Format.getCompactFormat(); + format.setEncoding("UTF-8"); + XMLOutputter xout = new XMLOutputter(format); + log.info("We send the following XML:\n" + xout.outputString(root)); + throw new DOIIdentifierException("Unable to reserve DOI " + doi + + ". Please inform your administrator or take a look " + +" into the log files.", DOIIdentifierException.BAD_REQUEST); + } + // Catch all other http status code in case we forgot one. + default : + { + log.warn("While reserving the DOI {}, we got a http status code " + + "{} and the message \"{}\".", new String[] + {doi, Integer.toString(resp.statusCode), resp.getContent()}); + throw new DOIIdentifierException("Unable to parse an answer from " + + "DataCite API. Please have a look into DSpace logs.", + DOIIdentifierException.BAD_ANSWER); + } + } + } + + @Override + public void registerDOI(Context context, DSpaceObject dso, String doi) + throws DOIIdentifierException + { + // check if the DOI is already registered online + if (this.isDOIRegistered(context, doi)) + { + // if it is registered for another object we should notify an admin + if (!this.isDOIRegistered(context, dso, doi)) + { + // DOI is reserved for another object + log.warn("DOI {} is registered for another object already.", doi); + throw new DOIIdentifierException(DOIIdentifierException.DOI_ALREADY_EXISTS); + } + // doi is registered for this object, we're done + return; + } + else + { + // DataCite wants us to reserve a DOI before we can register it + if (!this.isDOIReserved(context, dso, doi)) + { + // check if doi is already reserved for another dso + if (this.isDOIReserved(context, doi)) + { + log.warn("Trying to register DOI {}, that is reserved for " + + "another dso.", doi); + throw new DOIIdentifierException("Trying to register a DOI " + + "that is reserved for another object.", + DOIIdentifierException.DOI_ALREADY_EXISTS); + } + + // the DOIIdentifierProvider should catch and handle this + throw new DOIIdentifierException("You need to reserve a DOI " + + "before you can register it.", + DOIIdentifierException.RESERVE_FIRST); + } + } + + // send doi=<doi>\nurl=<url> to mds/doi + DataCiteResponse resp = null; + try + { + resp = this.sendDOIPostRequest(doi, + HandleManager.resolveToURL(context, dso.getHandle())); + } + catch (SQLException e) + { + log.error("Caught SQL-Exception while resolving handle to URL: " + + e.getMessage()); + throw new RuntimeException(e); + } + + switch(resp.statusCode) + { + // 201 -> created/updated -> okay + case (201) : + { + return; + } + // 400 -> wrong domain, wrong prefix, wrong request body + case (400) : + { + log.warn("We send an irregular request to DataCite. While " + + "registering a DOI they told us: " + resp.getContent()); + throw new DOIIdentifierException("Currently we cannot register " + + "DOIs. Please inform the administrator or take a look " + + " in the DSpace log file.", + DOIIdentifierException.BAD_REQUEST); + } + // 412 Precondition failed: DOI was not reserved before registration! + case (412) : + { + log.error("We tried to register a DOI {} that was not reserved " + + "before! The registration agency told us: {}.", doi, + resp.getContent()); + throw new DOIIdentifierException("There was an error in handling " + + "of DOIs. The DOI we wanted to register had not been " + + "reserved in advance. Please contact the administrator " + + "or take a look in DSpace log file.", + DOIIdentifierException.RESERVE_FIRST); + } + // Catch all other http status code in case we forgot one. + default : + { + log.warn("While registration of DOI {}, we got a http status code " + + "{} and the message \"{}\".", new String[] + {doi, Integer.toString(resp.statusCode), resp.getContent()}); + throw new DOIIdentifierException("Unable to parse an answer from " + + "DataCite API. Please have a look into DSpace logs.", + DOIIdentifierException.BAD_ANSWER); + } + } + } + + @Override + public void updateMetadata(Context context, DSpaceObject dso, String doi) + throws DOIIdentifierException + { + // check if doi is reserved for another object + if (!this.isDOIReserved(context, dso, doi) && this.isDOIReserved(context, doi)) + { + log.warn("Trying to update metadata for DOI {}, that is reserved" + + " for another dso.", doi); + throw new DOIIdentifierException("Trying to update metadta for " + + "a DOI that is reserved for another object.", + DOIIdentifierException.DOI_ALREADY_EXISTS); + } + // We can use reserveDOI to update metadata. Datacite API uses the same + // request for reservartion as for updating metadata. + this.reserveDOI(context, dso, doi); + } + + protected DataCiteResponse sendDOIPostRequest(String doi, String url) + throws DOIIdentifierException + { + // post mds/doi/ + // body must contaion "doi=<doi>\nurl=<url>}n" + URIBuilder uribuilder = new URIBuilder(); + uribuilder.setScheme(SCHEME).setHost(HOST).setPath(DOI_PATH); + + HttpPost httppost = null; + try + { + httppost = new HttpPost(uribuilder.build()); + } + catch (URISyntaxException e) + { + log.error("The URL we constructed to check a DOI " + + "produced a URISyntaxException. Please check the configuration parameters!"); + log.error("The URL was {}.", SCHEME + "://" + HOST + + DOI_PATH + "/" + doi.substring(DOI.SCHEME.length())); + throw new RuntimeException("The URL we constructed to check a DOI " + + "produced a URISyntaxException. Please check the configuration parameters!", e); + } + + // assemble request content: + HttpEntity reqEntity = null; + try + { + String req = "doi=" + doi.substring(DOI.SCHEME.length()) + "\n" + "url=" + url + "\n"; + ContentType contentType = ContentType.create("text/plain", "UTF-8"); + reqEntity = new StringEntity(req, contentType); + httppost.setEntity(reqEntity); + + return sendHttpRequest(httppost, doi); + } + finally + { + // release ressources + try + { + EntityUtils.consume(reqEntity); + } + catch (IOException ioe) + { + log.info("Caught an IOException while releasing a HTTPEntity:" + + ioe.getMessage()); + } + } + } + + + protected DataCiteResponse sendMetadataDeleteRequest(String doi) + throws DOIIdentifierException + { + // delete mds/metadata/<doi> + URIBuilder uribuilder = new URIBuilder(); + uribuilder.setScheme(SCHEME).setHost(HOST).setPath(METADATA_PATH + + doi.substring(DOI.SCHEME.length())); + + HttpDelete httpdelete = null; + try + { + httpdelete = new HttpDelete(uribuilder.build()); + } + catch (URISyntaxException e) + { + log.error("The URL we constructed to check a DOI " + + "produced a URISyntaxException. Please check the configuration parameters!"); + log.error("The URL was {}.", SCHEME + "://" + HOST + + DOI_PATH + "/" + doi.substring(DOI.SCHEME.length())); + throw new RuntimeException("The URL we constructed to check a DOI " + + "produced a URISyntaxException. Please check the configuration parameters!", e); + } + return sendHttpRequest(httpdelete, doi); + } + + protected DataCiteResponse sendDOIGetRequest(String doi) + throws DOIIdentifierException + { + return sendGetRequest(doi, DOI_PATH); + } + + protected DataCiteResponse sendMetadataGetRequest(String doi) + throws DOIIdentifierException + { + return sendGetRequest(doi, METADATA_PATH); + } + + protected DataCiteResponse sendGetRequest(String doi, String path) + throws DOIIdentifierException + { + URIBuilder uribuilder = new URIBuilder(); + uribuilder.setScheme(SCHEME).setHost(HOST).setPath(path + + doi.substring(DOI.SCHEME.length())); + + HttpGet httpget = null; + try + { + httpget = new HttpGet(uribuilder.build()); + } + catch (URISyntaxException e) + { + log.error("The URL we constructed to check a DOI " + + "produced a URISyntaxException. Please check the configuration parameters!"); + log.error("The URL was {}.", SCHEME + "://" + HOST + + DOI_PATH + "/" + doi.substring(DOI.SCHEME.length())); + throw new RuntimeException("The URL we constructed to check a DOI " + + "produced a URISyntaxException. Please check the configuration parameters!", e); + } + return sendHttpRequest(httpget, doi); + } + + protected DataCiteResponse sendMetadataPostRequest(String doi, Element metadataRoot) + throws DOIIdentifierException + { + Format format = Format.getCompactFormat(); + format.setEncoding("UTF-8"); + XMLOutputter xout = new XMLOutputter(format); + return sendMetadataPostRequest(doi, xout.outputString(new Document(metadataRoot))); + } + + protected DataCiteResponse sendMetadataPostRequest(String doi, String metadata) + throws DOIIdentifierException + { + // post mds/metadata/ + // body must contain metadata in DataCite-XML. + URIBuilder uribuilder = new URIBuilder(); + uribuilder.setScheme(SCHEME).setHost(HOST).setPath(METADATA_PATH); + + HttpPost httppost = null; + try + { + httppost = new HttpPost(uribuilder.build()); + } + catch (URISyntaxException e) + { + log.error("The URL we constructed to check a DOI " + + "produced a URISyntaxException. Please check the configuration parameters!"); + log.error("The URL was {}.", SCHEME + "://" + HOST + + DOI_PATH + "/" + doi.substring(DOI.SCHEME.length())); + throw new RuntimeException("The URL we constructed to check a DOI " + + "produced a URISyntaxException. Please check the configuration parameters!", e); + } + + // assemble request content: + HttpEntity reqEntity = null; + try + { + ContentType contentType = ContentType.create("application/xml", "UTF-8"); + reqEntity = new StringEntity(metadata, contentType); + httppost.setEntity(reqEntity); + + return sendHttpRequest(httppost, doi); + } + finally + { + // release ressources + try + { + EntityUtils.consume(reqEntity); + } + catch (IOException ioe) + { + log.info("Caught an IOException while releasing an HTTPEntity:" + + ioe.getMessage()); + } + } + } + + /** + * + * @param req + * @param doi + * @return + * @throws DOIIdentifierException + */ + protected DataCiteResponse sendHttpRequest(HttpUriRequest req, String doi) + throws DOIIdentifierException + { + DefaultHttpClient httpclient = new DefaultHttpClient(); + httpclient.getCredentialsProvider().setCredentials( + new AuthScope(HOST, 443), + new UsernamePasswordCredentials(this.getUsername(), this.getPassword())); + + HttpEntity entity = null; + try + { + HttpResponse response = httpclient.execute(req); + + StatusLine status = response.getStatusLine(); + int statusCode = status.getStatusCode(); + + String content = null; + entity = response.getEntity(); + if (null != entity) + { + content = EntityUtils.toString(entity, "UTF-8"); + } + + /* While debugging it can be useful to see whitch requests are send: + * + * log.debug("Going to send HTTP request of type " + req.getMethod() + "."); + * log.debug("Will be send to " + req.getURI().toString() + "."); + * if (req instanceof HttpEntityEnclosingRequestBase) + * { + * log.debug("Request contains entity!"); + * HttpEntityEnclosingRequestBase reqee = (HttpEntityEnclosingRequestBase) req; + * if (reqee.getEntity() instanceof StringEntity) + * { + * StringEntity se = (StringEntity) reqee.getEntity(); + * try { + * BufferedReader br = new BufferedReader(new InputStreamReader(se.getContent())); + * String line = null; + * while ((line = br.readLine()) != null) + * { + * log.debug(line); + * } + * log.info("----"); + * } catch (IOException ex) { + * + * } + * } + * } else { + * log.debug("Request contains no entity!"); + * } + * log.debug("The request got http status code {}.", Integer.toString(statusCode)); + * if (null == content) + * { + * log.debug("The response did not contain any answer."); + * } else { + * log.debug("DataCite says: {}", content); + * } + * + */ + + // We can handle some status codes here, others have to be handled above + switch (statusCode) + { + // we get a 401 if we forgot to send credentials or if the username + // and password did not match. + case (401) : + { + log.info("We were unable to authenticate against the DOI registry agency."); + log.info("The response was: {}", content); + throw new DOIIdentifierException("Cannot authenticate at the " + + "DOI registry agency. Please check if username " + + "and password are set correctly.", + DOIIdentifierException.AUTHENTICATION_ERROR); + } + + // We get a 403 Forbidden if we are managing a DOI that belongs to + // another party or if there is a login problem. + case (403) : + { + log.info("Managing a DOI ({}) was prohibited by the DOI " + + "registration agency: {}", doi, content); + throw new DOIIdentifierException("We can check, register or " + + "reserve DOIs that belong to us only.", + DOIIdentifierException.FOREIGN_DOI); + } + + + // 500 is documented and signals an internal server error + case (500) : + { + log.warn("Caught an http status code 500 while managing DOI " + +"{}. Message was: " + content); + throw new DOIIdentifierException("DataCite API has an internal error. " + + "It is temporarily impossible to manage DOIs. " + + "Further information can be found in DSpace log file.", + DOIIdentifierException.INTERNAL_ERROR); + } + } + + + return new DataCiteResponse(statusCode, content); + } + catch (IOException e) + { + log.warn("Caught an IOException: " + e.getMessage()); + throw new RuntimeException(e); + } + finally + { + try + { + // Release any ressources used by HTTP-Request. + if (null != entity) + { + EntityUtils.consume(entity); + } + } + catch (IOException e) + { + log.warn("Can't release HTTP-Entity: " + e.getMessage()); + } + } + } + + // returns null or handle + protected String extractAlternateIdentifier(Context context, String content) + throws SQLException, DOIIdentifierException + { + if (content == null) + { + return null; + } + + // parse the XML + SAXBuilder saxBuilder = new SAXBuilder(); + Document doc = null; + try + { + doc = saxBuilder.build(new ByteArrayInputStream(content.getBytes("UTF-8"))); + } + catch (IOException ioe) + { + throw new RuntimeException("Got an IOException while reading from a string?!", ioe); + } + catch (JDOMException jde) + { + throw new DOIIdentifierException("Got a JDOMException while parsing " + + "a response from the DataCite API.", jde, + DOIIdentifierException.BAD_ANSWER); + } + + String handle = null; + + Iterator<Element> it = doc.getDescendants(new ElementFilter("alternateIdentifier")); + while (handle == null && it.hasNext()) + { + Element alternateIdentifier = it.next(); + try + { + handle = HandleManager.resolveUrlToHandle(context, + alternateIdentifier.getText()); + } + catch (SQLException e) + { + throw e; + } + } + + return handle; + } + + protected String extractDOI(Element root) { + Element doi = root.getChild("identifier", root.getNamespace()); + return (null == doi) ? null : doi.getTextTrim(); + } + + protected Element addDOI(String doi, Element root) { + if (null != extractDOI(root)) + { + return root; + } + Element identifier = new Element("identifier", "http://datacite.org/schema/kernel-2.2"); + identifier.setAttribute("identifierType", "DOI"); + identifier.addContent(doi.substring(DOI.SCHEME.length())); + return root.addContent(0, identifier); + } + + protected class DataCiteResponse + { + private final int statusCode; + private final String content; + + protected DataCiteResponse(int statusCode, String content) + { + this.statusCode = statusCode; + this.content = content; + } + + protected int getStatusCode() + { + return this.statusCode; + } + + protected String getContent() + { + return this.content; + } + } +} diff --git a/dspace-api/src/main/java/org/dspace/identifier/doi/package-info.java b/dspace-api/src/main/java/org/dspace/identifier/doi/package-info.java new file mode 100644 index 0000000..defc49a --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/identifier/doi/package-info.java @@ -0,0 +1,22 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +/** + * Make requests to the DOI registration angencies, f.e.to + * <a href='http://n2t.net/ezid/'>EZID</a> DOI service, and analyze the responses. + * + * <p> + * Use {@link org.dspace.identifier.ezid.EZIDRequestFactory#getInstance} to + * configure an {@link org.dspace.identifier.ezid.EZIDRequest} + * with your authority number and credentials. {@code EZIDRequest} encapsulates + * EZID's operations (lookup, create/mint, modify, delete...). + * An operation returns an {@link org.dspace.identifier.ezid.EZIDResponse} which + * gives easy access to EZID's status code and value, status of the underlying + * HTTP request, and key/value pairs found in the response body (if any). + * <p> + */ +package org.dspace.identifier.doi; diff --git a/dspace-api/src/main/java/org/dspace/identifier/ezid/DateToYear.java b/dspace-api/src/main/java/org/dspace/identifier/ezid/DateToYear.java new file mode 100644 index 0000000..ac21379 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/identifier/ezid/DateToYear.java @@ -0,0 +1,37 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.identifier.ezid; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; + +/** + * Convert a date-time string to the year thereof. + * + * @author mwood + */ +public class DateToYear + implements Transform +{ + private static final SimpleDateFormat parser + = new SimpleDateFormat("yyyy'-'MM'-'dd"); + + @Override + public synchronized String transform(String from) + throws ParseException + { + Date when = parser.parse(from); + Calendar calendar = new GregorianCalendar(); + calendar.setTime(when); + return String.valueOf(calendar.get(Calendar.YEAR)); + } +} diff --git a/dspace-api/src/main/java/org/dspace/identifier/ezid/EZIDRequest.java b/dspace-api/src/main/java/org/dspace/identifier/ezid/EZIDRequest.java new file mode 100644 index 0000000..9447346 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/identifier/ezid/EZIDRequest.java @@ -0,0 +1,257 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.identifier.ezid; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import org.apache.http.HttpResponse; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.AbstractHttpClient; +import org.apache.http.impl.client.DefaultHttpClient; +import org.dspace.identifier.DOI; +import org.dspace.identifier.IdentifierException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * A request to EZID concerning a given (or expected) identifier. + * + * @author Mark H. Wood + */ +public class EZIDRequest +{ + private static final Logger log = LoggerFactory.getLogger(EZIDRequest.class); + + private static final String ID_PATH = "/ezid/id/" + DOI.SCHEME; + + private static final String SHOULDER_PATH = "/ezid/shoulder/" + DOI.SCHEME; + + private static final String UTF_8 = "UTF-8"; + + private static final String MD_KEY_STATUS = "_status"; + + private final AbstractHttpClient client; + + private final String scheme; + + private final String host; + + private final String authority; + + /** + * Prepare a context for requests concerning a specific identifier or + * authority prefix. + * + * @param scheme URL scheme for access to the EZID service. + * @param host Host name for access to the EZID service. + * @param authority DOI authority prefix, e.g. "10.5072/FK2". + * @param username an EZID user identity. + * @param password user's password, or {@code null} for none. + * @throws URISyntaxException if host or authority is bad. + */ + EZIDRequest(String scheme, String host, String authority, String username, String password) + throws URISyntaxException + { + this.scheme = scheme; + + this.host = host; + + if (authority.charAt(authority.length()-1) == '/') + { + this.authority = authority.substring(0, authority.length()-1); + } + else + { + this.authority = authority; + } + + client = new DefaultHttpClient(); + if (null != username) + { + URI uri = new URI(scheme, host, null, null); + client.getCredentialsProvider().setCredentials( + new AuthScope(uri.getHost(), uri.getPort()), + new UsernamePasswordCredentials(username, password)); + } + } + + /** + * Fetch the metadata bound to an identifier. + * + * @throws IdentifierException if the response is error or body malformed. + * @throws IOException if the HTTP request fails. + * @throws URISyntaxException + */ + public EZIDResponse lookup(String name) + throws IdentifierException, IOException, URISyntaxException + { + // GET path + HttpGet request; + URI uri = new URI(scheme, host, ID_PATH + authority + name, null); + log.debug("EZID lookup {}", uri.toASCIIString()); + request = new HttpGet(uri); + HttpResponse response = client.execute(request); + return new EZIDResponse(response); + } + + /** + * Create an identifier with a given name. The name is the end of the + * request path. Note: to "reserve" a given identifier, include "_status = + * reserved" in {@link metadata}. + * + * @param metadata ANVL-encoded key/value pairs. + * @return + */ + public EZIDResponse create(String name, Map<String, String> metadata) + throws IOException, IdentifierException, URISyntaxException + { + // PUT path [+metadata] + HttpPut request; + URI uri = new URI(scheme, host, ID_PATH + authority + '/' + name, null); + log.debug("EZID create {}", uri.toASCIIString()); + request = new HttpPut(uri); + if (null != metadata) + { + try { + request.setEntity(new StringEntity(formatMetadata(metadata), UTF_8)); + } catch (UnsupportedEncodingException ex) { /* SNH */ } + } + HttpResponse response = client.execute(request); + return new EZIDResponse(response); + } + + /** + * Ask EZID to create a unique identifier and return its name. NOTE: to + * "reserve" a unique identifier, include "_status = reserved" in {@link metadata}. + * + * @param metadata ANVL-encoded key/value pairs. + * @return + */ + public EZIDResponse mint(Map<String, String> metadata) + throws IOException, IdentifierException, URISyntaxException + { + // POST path [+metadata] + HttpPost request; + URI uri = new URI(scheme, host, SHOULDER_PATH + authority, null); + log.debug("EZID mint {}", uri.toASCIIString()); + request = new HttpPost(uri); + if (null != metadata) + { + request.setEntity(new StringEntity(formatMetadata(metadata), UTF_8)); + } + HttpResponse response = client.execute(request); + EZIDResponse myResponse = new EZIDResponse(response); + return myResponse; + } + + /** + * Alter the metadata bound to an identifier. + * + * @param metadata fields to be altered. Leave the value of a field's empty + * to delete the field. + * @return + */ + public EZIDResponse modify(String name, Map<String, String> metadata) + throws IOException, IdentifierException, URISyntaxException + { + if (null == metadata) + { + throw new IllegalArgumentException("metadata must not be null"); + } + // POST path +metadata + HttpPost request; + URI uri = new URI(scheme, host, ID_PATH + authority + name, null); + log.debug("EZID modify {}", uri.toASCIIString()); + request = new HttpPost(uri); + request.setEntity(new StringEntity(formatMetadata(metadata), UTF_8)); + HttpResponse response = client.execute(request); + return new EZIDResponse(response); + } + + /** + * Destroy a reserved identifier. Fails if ID was ever public. + */ + public EZIDResponse delete(String name) + throws IOException, IdentifierException, URISyntaxException + { + // DELETE path + HttpDelete request; + URI uri = new URI(scheme, host, ID_PATH + authority + name, null); + log.debug("EZID delete {}", uri.toASCIIString()); + request = new HttpDelete(uri); + HttpResponse response = client.execute(request); + return new EZIDResponse(response); + } + + /** + * Remove a public identifier from view. + */ + public EZIDResponse withdraw(String name) + throws IOException, IdentifierException, URISyntaxException + { + Map<String, String> metadata = new HashMap<String, String>(); + metadata.put(MD_KEY_STATUS, "unavailable"); + return modify(name, metadata); + } + + /** + * Remove a public identifier from view, with a reason. + * + * @param reason annotation for the item's unavailability. + */ + public EZIDResponse withdraw(String name, String reason) + throws IOException, IdentifierException, URISyntaxException + { + Map<String, String> metadata = new HashMap<String, String>(); + metadata.put(MD_KEY_STATUS, "unavailable | " + escape(reason)); + return modify(name, metadata); + } + + /** + * Create ANVL-formatted name/value pairs from a Map. + */ + private static String formatMetadata(Map<String, String> raw) + { + StringBuilder formatted = new StringBuilder(); + for (Entry<String, String> entry : raw.entrySet()) + { + formatted.append(escape(entry.getKey())) + .append(": ") + .append(escape(entry.getValue())) + .append('\n'); + } + + return formatted.toString(); + } + + /** + * Percent-encode a few EZID-specific characters. + * + * @return null for null input. + */ + private static String escape(String s) + { + if (null == s) { return s; } + + return s.replace("%", "%25") + .replace("\n", "%0A") + .replace("\r", "%0D") + .replace(":", "%3A"); + } +} diff --git a/dspace-api/src/main/java/org/dspace/identifier/ezid/EZIDRequestFactory.java b/dspace-api/src/main/java/org/dspace/identifier/ezid/EZIDRequestFactory.java new file mode 100644 index 0000000..7bff29d --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/identifier/ezid/EZIDRequestFactory.java @@ -0,0 +1,66 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.identifier.ezid; + +import java.net.URISyntaxException; +import org.springframework.beans.factory.annotation.Required; + +/** + * Create configured EZID requests. + * + * <p>Common EZID constant properties are:</p> + * + * <dl> + * <dt>EZID_SCHEME</dt> + * <dd>URL scheme (e.g. "https")</dd> + * <dt>EZID_HOST</dt> + * <dd>Name of the EZID API host</dd> + * <dt>EZID_PATH</dt> + * <dd>Path to the API endpoints</dd> + * </dl> + * + * @author mwood + */ +public class EZIDRequestFactory +{ + private static String EZID_SCHEME; + private static String EZID_HOST; + + /** + * Configure an EZID request. + * + * @param authority our DOI authority number. + * @param username EZID user name. + * @param password {@code username}'s password. + * @throws URISyntaxException + */ + public EZIDRequest getInstance(String authority, String username, String password) + throws URISyntaxException + { + return new EZIDRequest(EZID_SCHEME, EZID_HOST, authority, username, password); + } + + /** + * @param aEZID_SCHEME the EZID URL scheme to set + */ + @Required + public static void setEZID_SCHEME(String aEZID_SCHEME) + { + EZID_SCHEME = aEZID_SCHEME; + } + + /** + * @param aEZID_HOST the EZID host to set + */ + @Required + public static void setEZID_HOST(String aEZID_HOST) + { + EZID_HOST = aEZID_HOST; + } +} diff --git a/dspace-api/src/main/java/org/dspace/identifier/ezid/EZIDResponse.java b/dspace-api/src/main/java/org/dspace/identifier/ezid/EZIDResponse.java new file mode 100644 index 0000000..1f2af8d --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/identifier/ezid/EZIDResponse.java @@ -0,0 +1,173 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.identifier.ezid; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.ParseException; +import org.apache.http.util.EntityUtils; +import org.dspace.identifier.IdentifierException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Decoded response data evoked by a request made to EZID. + */ +public class EZIDResponse +{ + private static final Logger log = LoggerFactory.getLogger(EZIDResponse.class); + + private static final String UTF_8 = "UTF-8"; + + private final String status; + + private final String statusValue; + + private final Map<String, String> attributes = new HashMap<String, String>(); + + private final HttpResponse response; + + public EZIDResponse(HttpResponse response) + throws IdentifierException + { + this.response = response; + + HttpEntity responseBody = response.getEntity(); + + // Collect the content of the percent-encoded response. + String body; + try + { + body = EntityUtils.toString(responseBody, UTF_8); + } catch (IOException ex) + { + log.error(ex.getMessage()); + throw new IdentifierException("EZID response not understood: " + + ex.getMessage()); + } catch (ParseException ex) + { + log.error(ex.getMessage()); + throw new IdentifierException("EZID response not understood: " + + ex.getMessage()); + } + + String[] parts; + + String[] lines = body.split("[\\n\\r]"); + + // First line is request status and message or value + parts = lines[0].split(":", 2); + status = parts[0].trim(); + if (parts.length > 1) + { + statusValue = parts[1].trim(); + } + else + { + statusValue = null; + } + + // Remaining lines are key: value pairs + for (int i = 1; i < lines.length; i++) + { + parts = lines[i].split(":", 2); + String key = null, value = null; + try { + key = URLDecoder.decode(parts[0], UTF_8).trim(); + if (parts.length > 1) + { + value = URLDecoder.decode(parts[1], UTF_8).trim(); + } + else + { + value = null; + } + } catch (UnsupportedEncodingException e) { + // XXX SNH, we always use UTF-8 which is required by the Java spec. + } + attributes.put(key, value); + } + } + + /** + * Did the EZID request succeed? + * + * @return returned status was success. + */ + public boolean isSuccess() + { + return status.equalsIgnoreCase("success"); + } + + /** + * Get the EZID request status. + * + * @return should be "success" or "error". + */ + public String getEZIDStatus() + { + return status; + } + + /** + * Value associated with the EZID status (identifier, error text, etc.). + */ + public String getEZIDStatusValue() + { + return statusValue; + } + + /** + * Expose the available keys. + * + * @return all keys found in the response. + */ + public List<String> getKeys() + { + List<String> keys = new ArrayList<String>(); + for (String key : attributes.keySet()) + { + keys.add(key); + } + return keys; + } + + /** + * Look up the value of a given response datum. + * + * @param key the datum to look up. + * @return the value of {@code key}, or null if {@code key} is undefined. + */ + public String get(String key) + { + return attributes.get(key); + } + + /** + * @return status of the HTTP request. + */ + public int getHttpStatusCode() + { + return response.getStatusLine().getStatusCode(); + } + + /** + * @return reason for status of the HTTP request. + */ + public String getHttpReasonPhrase() + { + return response.getStatusLine().getReasonPhrase(); + } +} diff --git a/dspace-api/src/main/java/org/dspace/identifier/ezid/Transform.java b/dspace-api/src/main/java/org/dspace/identifier/ezid/Transform.java new file mode 100644 index 0000000..f57aee0 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/identifier/ezid/Transform.java @@ -0,0 +1,23 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.identifier.ezid; + +/** + * Convert metadata strings to other forms. + * + * @author mwood + */ +public interface Transform +{ + /** + * Convert the input form to the desired output form. + */ + public String transform(String from) + throws Exception; +} diff --git a/dspace-api/src/main/java/org/dspace/identifier/package-info.java b/dspace-api/src/main/java/org/dspace/identifier/package-info.java new file mode 100644 index 0000000..95f2419 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/identifier/package-info.java @@ -0,0 +1,17 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +/** + * Providers of durable unique identifiers (Handles, DOIs, etc.). + * Generally, subclasses of {@link org.dspace.identifier.IdentifierProvider} + * offer methods to create, delete, and resolve subclasses of + * {@link org.dspace.identifier.Identifier}. Classes outside this package + * should rely on {@link org.dspace.identifier.IdentifierService} to perform + * these operations using the most appropriate provider. + */ + +package org.dspace.identifier; diff --git a/dspace-api/src/main/java/org/dspace/statistics/util/package-info.java b/dspace-api/src/main/java/org/dspace/statistics/util/package-info.java new file mode 100644 index 0000000..ecb1b22 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/statistics/util/package-info.java @@ -0,0 +1,15 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +/** + * Mostly classes for dealing with detection of spiders, and command line tools. + * <p> + * One can find a database of User-Agent strings classified as clients, bots, + * etc. at <a href='http://www.user-agents.org/'>www.user-agents.org</a>. + */ + +package org.dspace.statistics.util; diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/ArXivFileDataLoader.java b/dspace-api/src/main/java/org/dspace/submit/lookup/ArXivFileDataLoader.java new file mode 100644 index 0000000..0494943 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/ArXivFileDataLoader.java @@ -0,0 +1,174 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.submit.lookup; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; +import java.util.Map; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.dspace.app.util.XMLUtils; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xml.sax.SAXException; + +import gr.ekt.bte.core.DataLoadingSpec; +import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.RecordSet; +import gr.ekt.bte.core.Value; +import gr.ekt.bte.dataloader.FileDataLoader; +import gr.ekt.bte.exceptions.MalformedSourceException; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + * + */ +public class ArXivFileDataLoader extends FileDataLoader +{ + + private static Logger log = Logger.getLogger(ArXivFileDataLoader.class); + + Map<String, String> fieldMap; // mapping between service fields and local + // intermediate fields + + /** + * Empty constructor + */ + public ArXivFileDataLoader() + { + } + + /** + * @param filename + */ + public ArXivFileDataLoader(String filename) + { + super(filename); + } + + /* + * (non-Javadoc) + * + * @see gr.ekt.bte.core.DataLoader#getRecords() + */ + @Override + public RecordSet getRecords() throws MalformedSourceException + { + + RecordSet recordSet = new RecordSet(); + + try + { + InputStream inputStream = new FileInputStream(new File(filename)); + + DocumentBuilderFactory factory = DocumentBuilderFactory + .newInstance(); + factory.setValidating(false); + factory.setIgnoringComments(true); + factory.setIgnoringElementContentWhitespace(true); + + DocumentBuilder db = factory.newDocumentBuilder(); + Document inDoc = db.parse(inputStream); + + Element xmlRoot = inDoc.getDocumentElement(); + List<Element> dataRoots = XMLUtils.getElementList(xmlRoot, "entry"); + + for (Element dataRoot : dataRoots) + { + Record record = ArxivUtils.convertArxixDomToRecord(dataRoot); + if (record != null) + { + recordSet.addRecord(convertFields(record)); + } + } + } + catch (FileNotFoundException e) + { + log.error(e.getMessage(), e); + } + catch (ParserConfigurationException e) + { + log.error(e.getMessage(), e); + } + catch (SAXException e) + { + log.error(e.getMessage(), e); + } + catch (IOException e) + { + log.error(e.getMessage(), e); + } + + return recordSet; + } + + /* + * (non-Javadoc) + * + * @see + * gr.ekt.bte.core.DataLoader#getRecords(gr.ekt.bte.core.DataLoadingSpec) + */ + @Override + public RecordSet getRecords(DataLoadingSpec spec) + throws MalformedSourceException + { + if (spec.getOffset() > 0) + { + return new RecordSet(); + } + return getRecords(); + } + + public Record convertFields(Record publication) + { + for (String fieldName : fieldMap.keySet()) + { + String md = null; + if (fieldMap != null) + { + md = this.fieldMap.get(fieldName); + } + + if (StringUtils.isBlank(md)) + { + continue; + } + else + { + md = md.trim(); + } + + if (publication.isMutable()) + { + List<Value> values = publication.getValues(fieldName); + publication.makeMutable().removeField(fieldName); + publication.makeMutable().addField(md, values); + } + } + + return publication; + } + + public void setFieldMap(Map<String, String> fieldMap) + { + this.fieldMap = fieldMap; + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/ArXivOnlineDataLoader.java b/dspace-api/src/main/java/org/dspace/submit/lookup/ArXivOnlineDataLoader.java new file mode 100644 index 0000000..0bb94f1 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/ArXivOnlineDataLoader.java @@ -0,0 +1,98 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.submit.lookup; + +import gr.ekt.bte.core.Record; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.httpclient.HttpException; +import org.dspace.core.Context; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class ArXivOnlineDataLoader extends NetworkSubmissionLookupDataLoader +{ + private ArXivService arXivService = new ArXivService(); + + private boolean searchProvider = true; + + public void setArXivService(ArXivService arXivService) + { + this.arXivService = arXivService; + } + + @Override + public List<String> getSupportedIdentifiers() + { + return Arrays.asList(new String[] { ARXIV, DOI }); + } + + public void setSearchProvider(boolean searchProvider) + { + this.searchProvider = searchProvider; + } + + @Override + public boolean isSearchProvider() + { + return searchProvider; + } + + @Override + public List<Record> getByIdentifier(Context context, + Map<String, Set<String>> keys) throws HttpException, IOException + { + List<Record> results = new ArrayList<Record>(); + if (keys != null) + { + Set<String> dois = keys.get(DOI); + Set<String> arxivids = keys.get(ARXIV); + List<Record> items = new ArrayList<Record>(); + if (dois != null && dois.size() > 0) + { + items.addAll(arXivService.getByDOIs(dois)); + } + if (arxivids != null && arxivids.size() > 0) + { + for (String arxivid : arxivids) + { + items.add(arXivService.getByArXivIDs(arxivid)); + } + } + + for (Record item : items) + { + results.add(convertFields(item)); + } + } + return results; + } + + @Override + public List<Record> search(Context context, String title, String author, + int year) throws HttpException, IOException + { + List<Record> results = new ArrayList<Record>(); + List<Record> items = arXivService.searchByTerm(title, author, year); + for (Record item : items) + { + results.add(convertFields(item)); + } + return results; + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/ArXivService.java b/dspace-api/src/main/java/org/dspace/submit/lookup/ArXivService.java new file mode 100644 index 0000000..42e3b1d --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/ArXivService.java @@ -0,0 +1,170 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.submit.lookup; + +import gr.ekt.bte.core.Record; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpException; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.NameValuePair; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.lang.StringUtils; +import org.dspace.app.util.XMLUtils; +import org.dspace.core.ConfigurationManager; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class ArXivService +{ + private int timeout = 1000; + + public void setTimeout(int timeout) + { + this.timeout = timeout; + } + + public List<Record> getByDOIs(Set<String> dois) throws HttpException, + IOException + { + if (dois != null && dois.size() > 0) + { + String doisQuery = StringUtils.join(dois.iterator(), " OR "); + return search(doisQuery, null, 100); + } + return null; + } + + public List<Record> searchByTerm(String title, String author, int year) + throws HttpException, IOException + { + StringBuffer query = new StringBuffer(); + if (StringUtils.isNotBlank(title)) + { + query.append("ti:\"").append(title).append("\""); + } + if (StringUtils.isNotBlank(author)) + { + // [FAU] + if (query.length() > 0) + query.append(" AND "); + query.append("au:\"").append(author).append("\""); + } + return search(query.toString(), "", 10); + } + + private List<Record> search(String query, String arxivid, int max_result) + throws IOException, HttpException + { + List<Record> results = new ArrayList<Record>(); + GetMethod method = null; + try + { + HttpClient client = new HttpClient(); + client.setTimeout(timeout); + method = new GetMethod("http://export.arxiv.org/api/query"); + NameValuePair id = new NameValuePair("id_list", arxivid); + NameValuePair queryParam = new NameValuePair("search_query", + query); + NameValuePair count = new NameValuePair("max_results", + String.valueOf(max_result)); + method.setQueryString(new NameValuePair[] { id, queryParam, + count }); + // Execute the method. + int statusCode = client.executeMethod(method); + + if (statusCode != HttpStatus.SC_OK) + { + if (statusCode == HttpStatus.SC_BAD_REQUEST) + throw new RuntimeException("arXiv query is not valid"); + else + throw new RuntimeException("Http call failed: " + + method.getStatusLine()); + } + + try + { + DocumentBuilderFactory factory = DocumentBuilderFactory + .newInstance(); + factory.setValidating(false); + factory.setIgnoringComments(true); + factory.setIgnoringElementContentWhitespace(true); + + DocumentBuilder db = factory.newDocumentBuilder(); + Document inDoc = db.parse(method.getResponseBodyAsStream()); + + Element xmlRoot = inDoc.getDocumentElement(); + List<Element> dataRoots = XMLUtils.getElementList(xmlRoot, + "entry"); + + for (Element dataRoot : dataRoots) + { + Record crossitem = ArxivUtils + .convertArxixDomToRecord(dataRoot); + if (crossitem != null) + { + results.add(crossitem); + } + } + } + catch (Exception e) + { + throw new RuntimeException( + "ArXiv identifier is not valid or not exist"); + } + } + finally + { + if (method != null) + { + method.releaseConnection(); + } + } + + return results; + } + + public Record getByArXivIDs(String raw) throws HttpException, IOException + { + if (StringUtils.isNotBlank(raw)) + { + raw = raw.trim(); + if (raw.startsWith("http://arxiv.org/abs/")) + { + raw = raw.substring("http://arxiv.org/abs/".length()); + } + else if (raw.toLowerCase().startsWith("arxiv:")) + { + raw = raw.substring("arxiv:".length()); + } + List<Record> result = search("", raw, 1); + if (result != null && result.size() > 0) + { + return result.get(0); + } + } + return null; + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/ArxivUtils.java b/dspace-api/src/main/java/org/dspace/submit/lookup/ArxivUtils.java new file mode 100644 index 0000000..c7db15e --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/ArxivUtils.java @@ -0,0 +1,160 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +/** + * + */ +package org.dspace.submit.lookup; + +import java.util.LinkedList; +import java.util.List; + +import gr.ekt.bte.core.MutableRecord; +import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.StringValue; +import gr.ekt.bte.core.Value; + +import org.dspace.app.util.XMLUtils; +import org.dspace.submit.util.SubmissionLookupPublication; +import org.w3c.dom.Element; + +/** + * + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + * + */ +public class ArxivUtils +{ + + public static Record convertArxixDomToRecord(Element dataRoot) + { + MutableRecord record = new SubmissionLookupPublication(""); + + String articleTitle = XMLUtils.getElementValue(dataRoot, "title"); + if (articleTitle != null) + record.addValue("title", new StringValue(articleTitle)); + String summary = XMLUtils.getElementValue(dataRoot, "summary"); + if (summary != null) + record.addValue("summary", new StringValue(summary)); + String year = XMLUtils.getElementValue(dataRoot, "published"); + if (year != null) + record.addValue("published", new StringValue(year)); + String splashPageUrl = XMLUtils.getElementValue(dataRoot, "id"); + if (splashPageUrl != null) + record.addValue("id", new StringValue(splashPageUrl)); + String comment = XMLUtils.getElementValue(dataRoot, "arxiv:comment"); + if (comment != null) + record.addValue("comment", new StringValue(comment)); + + List<Element> links = XMLUtils.getElementList(dataRoot, "link"); + if (links != null) + { + for (Element link : links) + { + if ("related".equals(link.getAttribute("rel")) + && "pdf".equals(link.getAttribute("title"))) + { + String pdfUrl = link.getAttribute("href"); + if (pdfUrl != null) + record.addValue("pdfUrl", new StringValue(pdfUrl)); + } + } + } + + String doi = XMLUtils.getElementValue(dataRoot, "arxiv:doi"); + if (doi != null) + record.addValue("doi", new StringValue(doi)); + String journalRef = XMLUtils.getElementValue(dataRoot, + "arxiv:journal_ref"); + if (journalRef != null) + record.addValue("journalRef", new StringValue(journalRef)); + + List<String> primaryCategory = new LinkedList<String>(); + List<Element> primaryCategoryList = XMLUtils.getElementList(dataRoot, + "arxiv:primary_category"); + if (primaryCategoryList != null) + { + for (Element primaryCategoryElement : primaryCategoryList) + { + primaryCategory + .add(primaryCategoryElement.getAttribute("term")); + } + } + + if (primaryCategory.size() > 0) + { + List<Value> values = new LinkedList<Value>(); + for (String s : primaryCategory) + { + values.add(new StringValue(s)); + } + record.addField("primaryCategory", values); + } + + List<String> category = new LinkedList<String>(); + List<Element> categoryList = XMLUtils.getElementList(dataRoot, + "category"); + if (categoryList != null) + { + for (Element categoryElement : categoryList) + { + category.add(categoryElement.getAttribute("term")); + } + } + + if (category.size() > 0) + { + List<Value> values = new LinkedList<Value>(); + for (String s : category) + { + values.add(new StringValue(s)); + } + record.addField("category", values); + } + + List<String> authors = new LinkedList<String>(); + List<String> authorsWithAffiliations = new LinkedList<String>(); + List<Element> authorList = XMLUtils.getElementList(dataRoot, "author"); + if (authorList != null) + { + for (Element authorElement : authorList) + { + String authorName = XMLUtils.getElementValue(authorElement, "name"); + String authorAffiliation = XMLUtils.getElementValue(authorElement, "arxiv:affiliation"); + + authors.add(authorName); + authorsWithAffiliations.add(authorName +": " + authorAffiliation); + } + } + + if (authors.size() > 0) + { + List<Value> values = new LinkedList<Value>(); + for (String sArray : authors) + { + values.add(new StringValue(sArray)); + } + record.addField("author", values); + } + + if (authorsWithAffiliations.size() > 0) + { + List<Value> values = new LinkedList<Value>(); + for (String sArray : authorsWithAffiliations) + { + values.add(new StringValue(sArray)); + } + record.addField("authorWithAffiliation", values); + } + + return record; + } + +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiFileDataLoader.java b/dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiFileDataLoader.java new file mode 100644 index 0000000..18f092b --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiFileDataLoader.java @@ -0,0 +1,172 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.submit.lookup; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; +import java.util.Map; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.dspace.app.util.XMLUtils; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xml.sax.SAXException; + +import gr.ekt.bte.core.DataLoadingSpec; +import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.RecordSet; +import gr.ekt.bte.core.Value; +import gr.ekt.bte.dataloader.FileDataLoader; +import gr.ekt.bte.exceptions.MalformedSourceException; + +/** + * Load metadata from CiNii formated file + * + * @author Keiji Suzuki + * + */ +public class CiNiiFileDataLoader extends FileDataLoader +{ + + private static Logger log = Logger.getLogger(CiNiiFileDataLoader.class); + + Map<String, String> fieldMap; // mapping between service fields and local + // intermediate fields + + /** + * Empty constructor + */ + public CiNiiFileDataLoader() + { + } + + /** + * @param filename + */ + public CiNiiFileDataLoader(String filename) + { + super(filename); + } + + /* + * (non-Javadoc) + * + * @see gr.ekt.bte.core.DataLoader#getRecords() + */ + @Override + public RecordSet getRecords() throws MalformedSourceException + { + + RecordSet recordSet = new RecordSet(); + + try + { + InputStream inputStream = new FileInputStream(new File(filename)); + + DocumentBuilderFactory factory = DocumentBuilderFactory + .newInstance(); + factory.setValidating(false); + factory.setIgnoringComments(true); + factory.setIgnoringElementContentWhitespace(true); + + DocumentBuilder db = factory.newDocumentBuilder(); + Document inDoc = db.parse(inputStream); + + Element xmlRoot = inDoc.getDocumentElement(); + + // There is no element to represent an record, so we can not process + // multi records at once. + Record record = CiNiiUtils.convertCiNiiDomToRecord(xmlRoot); + if (record != null) + { + recordSet.addRecord(convertFields(record)); + } + } + catch (FileNotFoundException e) + { + log.error(e.getMessage(), e); + } + catch (ParserConfigurationException e) + { + log.error(e.getMessage(), e); + } + catch (SAXException e) + { + log.error(e.getMessage(), e); + } + catch (IOException e) + { + log.error(e.getMessage(), e); + } + + return recordSet; + } + + /* + * (non-Javadoc) + * + * @see + * gr.ekt.bte.core.DataLoader#getRecords(gr.ekt.bte.core.DataLoadingSpec) + */ + @Override + public RecordSet getRecords(DataLoadingSpec spec) + throws MalformedSourceException + { + if (spec.getOffset() > 0) + { + return new RecordSet(); + } + + return getRecords(); + } + + public Record convertFields(Record publication) + { + for (String fieldName : fieldMap.keySet()) + { + String md = null; + if (fieldMap != null) + { + md = this.fieldMap.get(fieldName); + } + + if (StringUtils.isBlank(md)) + { + continue; + } + else + { + md = md.trim(); + } + + if (publication.isMutable()) + { + List<Value> values = publication.getValues(fieldName); + publication.makeMutable().removeField(fieldName); + publication.makeMutable().addField(md, values); + } + } + + return publication; + } + + public void setFieldMap(Map<String, String> fieldMap) + { + this.fieldMap = fieldMap; + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiOnlineDataLoader.java b/dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiOnlineDataLoader.java new file mode 100644 index 0000000..db831c7 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiOnlineDataLoader.java @@ -0,0 +1,120 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.submit.lookup; + +import gr.ekt.bte.core.Record; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.httpclient.HttpException; +import org.dspace.core.Context; + +/** + * Load metadata from CiNii RDF API + * @author Keiji Suzuki + */ +public class CiNiiOnlineDataLoader extends NetworkSubmissionLookupDataLoader +{ + private CiNiiService ciniiService = new CiNiiService(); + + private boolean searchProvider = true; + + /** Application id to use CiNii */ + private String appId = null; + + /** max result number to return */ + private int maxResults = 10; + + public void setCiNiiService(CiNiiService ciniiService) + { + this.ciniiService = ciniiService; + } + + @Override + public List<String> getSupportedIdentifiers() + { + return Arrays.asList(new String[] { CINII }); + } + + public void setSearchProvider(boolean searchProvider) + { + this.searchProvider = searchProvider; + } + + @Override + public boolean isSearchProvider() + { + return searchProvider; + } + + @Override + public List<Record> getByIdentifier(Context context, + Map<String, Set<String>> keys) throws HttpException, IOException + { + if (appId == null) + { + throw new RuntimeException("No CiNii Application ID is specified!"); + } + + List<Record> results = new ArrayList<Record>(); + if (keys != null) + { + Set<String> ciniiids = keys.get(CINII); + if (ciniiids != null && ciniiids.size() > 0) + { + for (String ciniiid : ciniiids) + { + Record record = ciniiService.getByCiNiiID(ciniiid, getAppId()); + if (record != null) + { + results.add(convertFields(record)); + } + } + } + } + return results; + } + + @Override + public List<Record> search(Context context, String title, String author, int year) + throws HttpException, IOException + { + if (appId == null) + { + throw new RuntimeException("No CiNii Application ID is specified!"); + } + + return ciniiService.searchByTerm(title, author, year, + getMaxResults(), getAppId()); + } + + public String getAppId() + { + return appId; + } + + public void setAppId(String appId) + { + this.appId = appId; + } + + public int getMaxResults() + { + return maxResults; + } + + public void setMaxResults(int maxResults) + { + this.maxResults = maxResults; + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiService.java b/dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiService.java new file mode 100644 index 0000000..e2092c8 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiService.java @@ -0,0 +1,221 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.submit.lookup; + +import gr.ekt.bte.core.Record; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpException; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.NameValuePair; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.dspace.app.util.XMLUtils; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +/** + * @author Keiji Suzuki + */ +public class CiNiiService +{ + /** log4j category */ + private static Logger log = Logger.getLogger(CiNiiService.class); + + private int timeout = 1000; + + public void setTimeout(int timeout) + { + this.timeout = timeout; + } + + public Record getByCiNiiID(String id, String appId) throws HttpException, + IOException + { + return search(id, appId); + } + + public List<Record> searchByTerm(String title, String author, int year, + int maxResults, String appId) + throws HttpException, IOException + { + List<Record> records = new ArrayList<Record>(); + + List<String> ids = getCiNiiIDs(title, author, year, maxResults, appId); + if (ids != null && ids.size() > 0) + { + for (String id : ids) + { + Record record = search(id, appId); + if (record != null) + { + records.add(record); + } + } + } + + return records; + } + + /** + * Get metadata by searching CiNii RDF API with CiNii NAID + * + */ + private Record search(String id, String appId) + throws IOException, HttpException + { + GetMethod method = null; + try + { + HttpClient client = new HttpClient(); + client.setTimeout(timeout); + method = new GetMethod("http://ci.nii.ac.jp/naid/"+id+".rdf?appid="+appId); + // Execute the method. + int statusCode = client.executeMethod(method); + + if (statusCode != HttpStatus.SC_OK) + { + if (statusCode == HttpStatus.SC_BAD_REQUEST) + throw new RuntimeException("CiNii RDF is not valid"); + else + throw new RuntimeException("CiNii RDF Http call failed: " + + method.getStatusLine()); + } + + try + { + DocumentBuilderFactory factory = DocumentBuilderFactory + .newInstance(); + factory.setValidating(false); + factory.setIgnoringComments(true); + factory.setIgnoringElementContentWhitespace(true); + + DocumentBuilder db = factory.newDocumentBuilder(); + Document inDoc = db.parse(method.getResponseBodyAsStream()); + + Element xmlRoot = inDoc.getDocumentElement(); + + return CiNiiUtils.convertCiNiiDomToRecord(xmlRoot); + } + catch (Exception e) + { + throw new RuntimeException( + "CiNii RDF identifier is not valid or not exist"); + } + } + finally + { + if (method != null) + { + method.releaseConnection(); + } + } + } + + /** + * Get CiNii NAIDs by searching CiNii OpenURL API with title, author and year + * + */ + private List<String> getCiNiiIDs(String title, String author, int year, + int maxResults, String appId) + throws IOException, HttpException + { + // Need at least one query term + if (title == null && author == null && year == -1) + { + return null; + } + + GetMethod method = null; + List<String> ids = new ArrayList<String>(); + try + { + HttpClient client = new HttpClient(); + client.setTimeout(timeout); + StringBuilder query = new StringBuilder(); + query.append("format=rss&appid=").append(appId) + .append("&count=").append(maxResults); + if (title != null) + { + query.append("&title=").append(URLEncoder.encode(title, "UTF-8")); + } + if (author != null) + { + query.append("&author=").append(URLEncoder.encode(author, "UTF-8")); + } + if (year != -1) + { + query.append("&year_from=").append(String.valueOf(year)); + query.append("&year_to=").append(String.valueOf(year)); + } + method = new GetMethod("http://ci.nii.ac.jp/opensearch/search?"+query.toString()); + // Execute the method. + int statusCode = client.executeMethod(method); + if (statusCode != HttpStatus.SC_OK) + { + if (statusCode == HttpStatus.SC_BAD_REQUEST) + throw new RuntimeException("CiNii OpenSearch query is not valid"); + else + throw new RuntimeException("CiNii OpenSearch call failed: " + + method.getStatusLine()); + } + + try + { + DocumentBuilderFactory factory = DocumentBuilderFactory + .newInstance(); + factory.setValidating(false); + factory.setIgnoringComments(true); + factory.setIgnoringElementContentWhitespace(true); + + DocumentBuilder db = factory.newDocumentBuilder(); + Document inDoc = db.parse(method.getResponseBodyAsStream()); + + Element xmlRoot = inDoc.getDocumentElement(); + List<Element> items = XMLUtils.getElementList(xmlRoot, "item"); + + int url_len = "http://ci.nii.ac.jp/naid/".length(); + for (Element item : items) + { + String about = item.getAttribute("rdf:about"); + if (about.length() > url_len) + { + ids.add(about.substring(url_len)); + } + } + + return ids; + } + catch (Exception e) + { + throw new RuntimeException( + "CiNii OpenSearch results is not valid or not exist"); + } + } + finally + { + if (method != null) + { + method.releaseConnection(); + } + } + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiUtils.java b/dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiUtils.java new file mode 100644 index 0000000..e134257 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiUtils.java @@ -0,0 +1,268 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +/** + * + */ +package org.dspace.submit.lookup; + +import java.util.LinkedList; +import java.util.List; + +import gr.ekt.bte.core.MutableRecord; +import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.StringValue; +import gr.ekt.bte.core.Value; + +import org.apache.commons.lang.StringUtils; +import org.dspace.app.util.XMLUtils; +import org.dspace.submit.util.SubmissionLookupPublication; +import org.w3c.dom.Element; + +/** + * + * @author Keiji Suzuki + * + */ +public class CiNiiUtils +{ + public static Record convertCiNiiDomToRecord(Element xmlRoot) + { + MutableRecord record = new SubmissionLookupPublication(""); + + List<Element> list = XMLUtils.getElementList(xmlRoot, "rdf:Description"); + // Valid CiNii record should have three rdf:Description elements + if (list.size() < 3) + { + return record; + } + + Element description_ja = list.get(0); // Japanese description + Element description_en = list.get(1); // English description + // Element description3 = list.get(2); // Authors information: NOT USE here + + String language = XMLUtils.getElementValue(description_ja, "dc:language"); + language = language != null ? language.toLowerCase() : "ja"; + record.addValue("language", new StringValue(language)); + + if ("ja".equals(language) || "jpn".equals(language)) + { + String title = XMLUtils.getElementValue(description_ja, "dc:title"); + if (title != null) + { + record.addValue("title", new StringValue(title)); + } + String titleAlternative = XMLUtils.getElementValue(description_en, "dc:title"); + if (titleAlternative != null) + { + record.addValue("titleAlternative", new StringValue(titleAlternative)); + } + + List<Value> authors = getAuthors(description_ja); + if (authors.size() > 0) + { + record.addField("authors", authors); + } + List<Value> authorAlternative = getAuthors(description_en); + if (authorAlternative.size() > 0) + { + record.addField("auhtorAlternative", authorAlternative); + } + + String publisher = XMLUtils.getElementValue(description_ja, "dc:publisher"); + if (publisher != null) + { + record.addValue("publisher", new StringValue(publisher)); + } + } + else + { + String title = XMLUtils.getElementValue(description_en, "dc:title"); + if (title != null) + { + record.addValue("title", new StringValue(title)); + } + String titleAlternative = XMLUtils.getElementValue(description_ja, "dc:title"); + if (titleAlternative != null) + { + record.addValue("titleAlternative", new StringValue(titleAlternative)); + } + + List<Value> authors = getAuthors(description_en); + if (authors.size() > 0) + { + record.addField("authors", authors); + } + List<Value> authorAlternative = getAuthors(description_ja); + if (authorAlternative.size() > 0) + { + record.addField("authorAlternative", authorAlternative); + } + + String publisher = XMLUtils.getElementValue(description_en, "dc:publisher"); + if (publisher != null) + { + record.addValue("publisher", new StringValue(publisher)); + } + } + + String abstract_ja = XMLUtils.getElementValue(description_ja, "dc:description"); + String abstract_en = XMLUtils.getElementValue(description_en, "dc:description"); + if (abstract_ja != null && abstract_en != null) + { + List<Value> description = new LinkedList<Value>(); + description.add(new StringValue(abstract_ja)); + description.add(new StringValue(abstract_en)); + record.addField("description", description); + } + else if (abstract_ja != null) + { + record.addValue("description", new StringValue(abstract_ja)); + } + else if (abstract_en != null) + { + record.addValue("description", new StringValue(abstract_en)); + } + + List<Value> subjects = getSubjects(description_ja); + subjects.addAll(getSubjects(description_en)); + if (subjects.size() > 0) + { + record.addField("subjects", subjects); + } + + String journal_j = XMLUtils.getElementValue(description_ja, "prism:publicationName"); + String journal_e = XMLUtils.getElementValue(description_en, "prism:publicationName"); + if (journal_j != null && journal_e != null) + { + record.addValue("journal", new StringValue(journal_j+" = "+journal_e)); + } + else if (journal_j != null) + { + + record.addValue("journal", new StringValue(journal_j)); + } + else if (journal_e != null) + { + + record.addValue("journal", new StringValue(journal_e)); + } + + String volume = XMLUtils.getElementValue(description_ja, "prism:volume"); + if (volume != null) + { + record.addValue("volume", new StringValue(volume)); + } + + String issue = XMLUtils.getElementValue(description_ja, "prism:number"); + if (issue != null) + { + record.addValue("issue", new StringValue(issue)); + } + + String spage = XMLUtils.getElementValue(description_ja, "prism:startingPage"); + if (spage != null) + { + record.addValue("spage", new StringValue(spage)); + } + + String epage = XMLUtils.getElementValue(description_ja, "prism:endingPage"); + if (epage != null) + { + record.addValue("epage", new StringValue(epage)); + } + + String pages = XMLUtils.getElementValue(description_ja, "prism:pageRange"); + if (pages != null && spage == null) + { + int pos = pages.indexOf("-"); + if (pos > -1) + { + spage = pages.substring(0, pos); + epage = pages.substring(pos+1, pages.length() - pos); + if (!epage.equals("") && spage.length() > epage.length()) + { + epage = spage.substring(0, spage.length() - epage.length()) + epage; + } + } + else + { + spage = pages; + epage = ""; + } + record.addValue("spage", new StringValue(spage)); + if (!epage.equals("") && epage == null) + { + record.addValue("epage", new StringValue(epage)); + } + } + + String issn = XMLUtils.getElementValue(description_ja, "prism:issn"); + if (issn != null) + { + record.addValue("issn", new StringValue(issn)); + } + + String issued = XMLUtils.getElementValue(description_ja, "prism:publicationDate"); + if (issued != null) + { + record.addValue("issued", new StringValue(issued)); + } + + String ncid = XMLUtils.getElementValue(description_ja, "cinii:ncid"); + if (ncid != null) + { + record.addValue("ncid", new StringValue(ncid)); + } + + String naid = XMLUtils.getElementValue(description_ja, "cinii:naid"); + if (naid != null) + { + record.addValue("naid", new StringValue(naid)); + } + + return record; + } + + private static List<Value> getAuthors(Element element) + { + List<Value> authors = new LinkedList<Value>(); + + List<String> authorList = XMLUtils.getElementValueList(element, "dc:creator"); + if (authorList != null && authorList.size() > 0) + { + for (String author : authorList) + { + int pos = author.indexOf(" "); + if (pos > -1) + author = author.substring(0, pos) + "," + author.substring(pos); + authors.add(new StringValue(author)); + } + } + + return authors; + } + + private static List<Value> getSubjects(Element element) + { + List<Value> subjects = new LinkedList<Value>(); + + List<Element> topicList = XMLUtils.getElementList(element, "foaf:topic"); + String attrValue = null; + for (Element topic : topicList) + { + attrValue = topic.getAttribute("dc:title"); + if (StringUtils.isNotBlank(attrValue)) + { + subjects.add(new StringValue(attrValue.trim())); + } + } + + return subjects; + } + +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefFileDataLoader.java b/dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefFileDataLoader.java new file mode 100644 index 0000000..e561777 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefFileDataLoader.java @@ -0,0 +1,167 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.submit.lookup; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; +import java.util.Map; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.apache.commons.lang.StringUtils; +import org.dspace.app.util.XMLUtils; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xml.sax.SAXException; + +import gr.ekt.bte.core.DataLoadingSpec; +import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.RecordSet; +import gr.ekt.bte.core.Value; +import gr.ekt.bte.dataloader.FileDataLoader; +import gr.ekt.bte.exceptions.MalformedSourceException; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class CrossRefFileDataLoader extends FileDataLoader +{ + + Map<String, String> fieldMap; // mapping between service fields and local + // intermediate fields + + /** + * + */ + public CrossRefFileDataLoader() + { + } + + /** + * @param filename + */ + public CrossRefFileDataLoader(String filename) + { + super(filename); + } + + /* + * (non-Javadoc) + * + * @see gr.ekt.bte.core.DataLoader#getRecords() + */ + @Override + public RecordSet getRecords() throws MalformedSourceException + { + + RecordSet recordSet = new RecordSet(); + + try + { + InputStream inputStream = new FileInputStream(new File(filename)); + + DocumentBuilderFactory factory = DocumentBuilderFactory + .newInstance(); + factory.setValidating(false); + factory.setIgnoringComments(true); + factory.setIgnoringElementContentWhitespace(true); + + DocumentBuilder db = factory.newDocumentBuilder(); + Document inDoc = db.parse(inputStream); + + Element xmlRoot = inDoc.getDocumentElement(); + Element queryResult = XMLUtils.getSingleElement(xmlRoot, "query_result"); + Element body = XMLUtils.getSingleElement(queryResult, "body"); + Element dataRoot = XMLUtils.getSingleElement(body, "query"); + Record record = CrossRefUtils.convertCrossRefDomToRecord(dataRoot); + recordSet.addRecord(convertFields(record)); + + } + catch (FileNotFoundException e) + { + e.printStackTrace(); + } + catch (ParserConfigurationException e) + { + e.printStackTrace(); + } + catch (SAXException e) + { + e.printStackTrace(); + } + catch (IOException e) + { + e.printStackTrace(); + } + + return recordSet; + + } + + /* + * (non-Javadoc) + * + * @see + * gr.ekt.bte.core.DataLoader#getRecords(gr.ekt.bte.core.DataLoadingSpec) + */ + @Override + public RecordSet getRecords(DataLoadingSpec spec) + throws MalformedSourceException + { + if (spec.getOffset() > 0) + { + return new RecordSet(); + } + return getRecords(); + } + + public Record convertFields(Record publication) + { + for (String fieldName : fieldMap.keySet()) + { + String md = null; + if (fieldMap != null) + { + md = this.fieldMap.get(fieldName); + } + + if (StringUtils.isBlank(md)) + { + continue; + } + else + { + md = md.trim(); + } + + if (publication.isMutable()) + { + List<Value> values = publication.getValues(fieldName); + publication.makeMutable().removeField(fieldName); + publication.makeMutable().addField(md, values); + } + } + + return publication; + } + + public void setFieldMap(Map<String, String> fieldMap) + { + this.fieldMap = fieldMap; + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefOnlineDataLoader.java b/dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefOnlineDataLoader.java new file mode 100644 index 0000000..ec86ac4 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefOnlineDataLoader.java @@ -0,0 +1,130 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.submit.lookup; + +import gr.ekt.bte.core.Record; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.xml.parsers.ParserConfigurationException; + +import org.apache.commons.httpclient.HttpException; +import org.dspace.core.Context; +import org.jdom.JDOMException; +import org.xml.sax.SAXException; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class CrossRefOnlineDataLoader extends NetworkSubmissionLookupDataLoader +{ + private CrossRefService crossrefService = new CrossRefService(); + + private boolean searchProvider = true; + + private String apiKey = null; + private int maxResults = 10; + + public void setSearchProvider(boolean searchProvider) + { + this.searchProvider = searchProvider; + } + + public void setCrossrefService(CrossRefService crossrefService) + { + this.crossrefService = crossrefService; + } + + @Override + public List<String> getSupportedIdentifiers() + { + return Arrays.asList(new String[] { DOI }); + } + + @Override + public List<Record> getByIdentifier(Context context, + Map<String, Set<String>> keys) throws HttpException, IOException + { + if (keys != null && keys.containsKey(DOI)) + { + Set<String> dois = keys.get(DOI); + List<Record> items = null; + List<Record> results = new ArrayList<Record>(); + + if (getApiKey() == null){ + throw new RuntimeException("No CrossRef API key is specified!"); + } + + try + { + items = crossrefService.search(context, dois, getApiKey()); + } + catch (JDOMException e) + { + throw new RuntimeException(e.getMessage(), e); + } + catch (ParserConfigurationException e) + { + throw new RuntimeException(e.getMessage(), e); + } + catch (SAXException e) + { + throw new RuntimeException(e.getMessage(), e); + } + for (Record record : items) + { + results.add(convertFields(record)); + } + return results; + } + return null; + } + + @Override + public List<Record> search(Context context, String title, String author, + int year) throws HttpException, IOException + { + if (getApiKey() == null){ + throw new RuntimeException("No CrossRef API key is specified!"); + } + + List<Record> items = crossrefService.search(context, title, author, + year, getMaxResults(), getApiKey()); + return items; + } + + @Override + public boolean isSearchProvider() + { + return searchProvider; + } + + public String getApiKey() { + return apiKey; + } + + public void setApiKey(String apiKey) { + this.apiKey = apiKey; + } + + public int getMaxResults() { + return maxResults; + } + + public void setMaxResults(int maxResults) { + this.maxResults = maxResults; + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefService.java b/dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefService.java new file mode 100644 index 0000000..32a5fa1 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefService.java @@ -0,0 +1,219 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.submit.lookup; + +import gr.ekt.bte.core.Record; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpException; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.NameValuePair; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.dspace.app.util.XMLUtils; +import org.dspace.core.Context; +import org.dspace.core.LogManager; +import org.jdom.JDOMException; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xml.sax.SAXException; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class CrossRefService +{ + + private static final Logger log = Logger.getLogger(CrossRefService.class); + + private int timeout = 1000; + + public void setTimeout(int timeout) + { + this.timeout = timeout; + } + + public List<Record> search(Context context, Set<String> dois, String apiKey) + throws HttpException, IOException, JDOMException, + ParserConfigurationException, SAXException + { + List<Record> results = new ArrayList<Record>(); + if (dois != null && dois.size() > 0) + { + for (String record : dois) + { + try + { + GetMethod method = null; + try + { + HttpClient client = new HttpClient(); + client.setConnectionTimeout(timeout); + method = new GetMethod( + "http://www.crossref.org/openurl/"); + + NameValuePair pid = new NameValuePair("pid", apiKey); + NameValuePair noredirect = new NameValuePair( + "noredirect", "true"); + NameValuePair id = new NameValuePair("id", record); + method.setQueryString(new NameValuePair[] { pid, + noredirect, id }); + // Execute the method. + int statusCode = client.executeMethod(method); + + if (statusCode != HttpStatus.SC_OK) + { + throw new RuntimeException("Http call failed: " + + method.getStatusLine()); + } + + Record crossitem; + try + { + DocumentBuilderFactory factory = DocumentBuilderFactory + .newInstance(); + factory.setValidating(false); + factory.setIgnoringComments(true); + factory.setIgnoringElementContentWhitespace(true); + + DocumentBuilder db = factory + .newDocumentBuilder(); + Document inDoc = db.parse(method + .getResponseBodyAsStream()); + + Element xmlRoot = inDoc.getDocumentElement(); + Element queryResult = XMLUtils.getSingleElement(xmlRoot, "query_result"); + Element body = XMLUtils.getSingleElement(queryResult, "body"); + Element dataRoot = XMLUtils.getSingleElement(body, "query"); + + crossitem = CrossRefUtils + .convertCrossRefDomToRecord(dataRoot); + results.add(crossitem); + } + catch (Exception e) + { + log.warn(LogManager + .getHeader( + context, + "retrieveRecordDOI", + record + + " DOI is not valid or not exist: " + + e.getMessage())); + } + } + finally + { + if (method != null) + { + method.releaseConnection(); + } + } + } + catch (RuntimeException rt) + { + log.error(rt.getMessage(), rt); + } + } + } + return results; + } + + public NameValuePair[] buildQueryPart(String title, String author, + int year, int count) + { + StringBuffer sb = new StringBuffer(); + if (StringUtils.isNotBlank(title)) + { + sb.append(title); + } + sb.append(" "); + if (StringUtils.isNotBlank(author)) + { + sb.append(author); + } + String q = sb.toString().trim(); + NameValuePair qParam = new NameValuePair("q", title); + NameValuePair yearParam = new NameValuePair("year", + year != -1 ? String.valueOf(year) : ""); + NameValuePair countParam = new NameValuePair("rows", + count != -1 ? String.valueOf(count) : ""); + + NameValuePair[] query = new NameValuePair[] { qParam, yearParam, + countParam }; + return query; + } + + public List<Record> search(Context context, String title, String authors, + int year, int count, String apiKey) throws IOException, HttpException + { + GetMethod method = null; + try + { + NameValuePair[] query = buildQueryPart(title, authors, year, count); + HttpClient client = new HttpClient(); + client.setTimeout(timeout); + method = new GetMethod("http://search.labs.crossref.org/dois"); + + method.setQueryString(query); + // Execute the method. + int statusCode = client.executeMethod(method); + + if (statusCode != HttpStatus.SC_OK) + { + throw new RuntimeException("Http call failed:: " + + method.getStatusLine()); + } + + Gson gson = new Gson(); + Type listType = new TypeToken<ArrayList<Map>>() + { + }.getType(); + List<Map> json = gson.fromJson(method.getResponseBodyAsString(), + listType); + Set<String> dois = new HashSet<String>(); + for (Map r : json) + { + dois.add(SubmissionLookupUtils.normalizeDOI((String) r + .get("doi"))); + } + method.releaseConnection(); + + return search(context, dois, apiKey); + } + catch (Exception e) + { + throw new RuntimeException(e.getMessage(), e); + } + finally + { + if (method != null) + { + method.releaseConnection(); + } + } + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefUtils.java b/dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefUtils.java new file mode 100644 index 0000000..e05d6d4 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefUtils.java @@ -0,0 +1,231 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +/** + * + */ +package org.dspace.submit.lookup; + +import java.util.LinkedList; +import java.util.List; + +import gr.ekt.bte.core.MutableRecord; +import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.StringValue; +import gr.ekt.bte.core.Value; + +import org.apache.commons.lang.StringUtils; +import org.dspace.app.util.XMLUtils; +import org.dspace.submit.util.SubmissionLookupPublication; +import org.w3c.dom.Element; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class CrossRefUtils +{ + + /** + * + */ + public CrossRefUtils() + { + // TODO Auto-generated constructor stub + } + + public static Record convertCrossRefDomToRecord(Element dataRoot) + { + MutableRecord record = new SubmissionLookupPublication(""); + + String status = dataRoot.getAttribute("status"); + if (!"resolved".equals(status)) + { + String msg = XMLUtils.getElementValue(dataRoot, "msg"); + String exMsg = status + " - " + msg; + throw new RuntimeException(exMsg); + } + + String doi = XMLUtils.getElementValue(dataRoot, "doi"); + if (doi != null) + record.addValue("doi", new StringValue(doi)); + + String itemType = doi != null ? XMLUtils.getElementAttribute(dataRoot, + "doi", "type") : "unspecified"; + if (itemType != null) + record.addValue("doiType", new StringValue(itemType)); + + List<Element> identifier = XMLUtils.getElementList(dataRoot, "issn"); + for (Element ident : identifier) + { + if ("print".equalsIgnoreCase(ident.getAttribute("type")) + || StringUtils.isNotBlank(ident.getAttribute("type"))) + { + String issn = ident.getTextContent().trim(); + if (issn != null) + record.addValue("printISSN", new StringValue(issn)); + } + else + { + String eissn = ident.getTextContent().trim(); + if (eissn != null) + record.addValue("electronicISSN", new StringValue(eissn)); + } + } + + List<Element> identifierisbn = XMLUtils.getElementList(dataRoot, "isbn"); + for (Element ident : identifierisbn) + { + if ("print".equalsIgnoreCase(ident.getAttribute("type")) + || StringUtils.isNotBlank(ident.getAttribute("type"))) + { + String issn = ident.getTextContent().trim(); + if (issn != null) + record.addValue("printISBN", new StringValue(issn)); + } + else + { + String eissn = ident.getTextContent().trim(); + if (eissn != null) + record.addValue("electronicISBN", new StringValue(eissn)); + } + } + + String editionNumber = XMLUtils.getElementValue(dataRoot, + "editionNumber"); + if (editionNumber != null) + record.addValue("editionNumber", new StringValue(editionNumber)); + + String volume = XMLUtils.getElementValue(dataRoot, "volume"); + if (volume != null) + record.addValue("volume", new StringValue(volume)); + + String issue = XMLUtils.getElementValue(dataRoot, "issue"); + if (issue != null) + record.addValue("issue", new StringValue(issue)); + + String year = XMLUtils.getElementValue(dataRoot, "year"); + if (year != null) + record.addValue("year", new StringValue(year)); + + String firstPage = XMLUtils.getElementValue(dataRoot, "first_page"); + if (firstPage != null) + record.addValue("firstPage", new StringValue(firstPage)); + + String lastPage = XMLUtils.getElementValue(dataRoot, "last_page"); + if (lastPage != null) + record.addValue("lastPage", new StringValue(lastPage)); + + String seriesTitle = XMLUtils.getElementValue(dataRoot, "series_title"); + if (seriesTitle != null) + record.addValue("seriesTitle", new StringValue(seriesTitle)); + + String journalTitle = XMLUtils.getElementValue(dataRoot, + "journal_title"); + if (journalTitle != null) + record.addValue("journalTitle", new StringValue(journalTitle)); + + String volumeTitle = XMLUtils.getElementValue(dataRoot, "volume_title"); + if (volumeTitle != null) + record.addValue("volumeTitle", new StringValue(volumeTitle)); + + String articleTitle = XMLUtils.getElementValue(dataRoot, + "article_title"); + if (articleTitle != null) + record.addValue("articleTitle", new StringValue(articleTitle)); + + String publicationType = XMLUtils.getElementValue(dataRoot, + "pubblication_type"); + if (publicationType != null) + record.addValue("publicationType", new StringValue(publicationType)); + + List<String[]> authors = new LinkedList<String[]>(); + List<String[]> editors = new LinkedList<String[]>(); + List<String[]> translators = new LinkedList<String[]>(); + List<String[]> chairs = new LinkedList<String[]>(); + + List<Element> contributors = XMLUtils.getElementList(dataRoot, + "contributors"); + List<Element> contributor = null; + if (contributors != null && contributors.size() > 0) + { + contributor = XMLUtils.getElementList(contributors.get(0), + "contributor"); + + for (Element contrib : contributor) + { + + String givenName = XMLUtils.getElementValue(contrib, + "given_name"); + String surname = XMLUtils.getElementValue(contrib, "surname"); + + if ("editor".equalsIgnoreCase(contrib + .getAttribute("contributor_role"))) + { + editors.add(new String[] { givenName, surname }); + } + else if ("chair".equalsIgnoreCase(contrib + .getAttribute("contributor_role"))) + { + chairs.add(new String[] { givenName, surname }); + } + else if ("translator".equalsIgnoreCase(contrib + .getAttribute("contributor_role"))) + { + translators.add(new String[] { givenName, surname }); + } + else + { + authors.add(new String[] { givenName, surname }); + } + } + } + + if (authors.size() > 0) + { + List<Value> values = new LinkedList<Value>(); + for (String[] sArray : authors) + { + values.add(new StringValue(sArray[1] + ", " + sArray[0])); + } + record.addField("authors", values); + } + + if (editors.size() > 0) + { + List<Value> values = new LinkedList<Value>(); + for (String[] sArray : editors) + { + values.add(new StringValue(sArray[1] + ", " + sArray[0])); + } + record.addField("editors", values); + } + + if (translators.size() > 0) + { + List<Value> values = new LinkedList<Value>(); + for (String[] sArray : translators) + { + values.add(new StringValue(sArray[1] + ", " + sArray[0])); + } + record.addField("translators", values); + } + + if (chairs.size() > 0) + { + List<Value> values = new LinkedList<Value>(); + for (String[] sArray : chairs) + { + values.add(new StringValue(sArray[1] + ", " + sArray[0])); + } + record.addField("chairs", values); + } + return record; + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/DSpaceWorkspaceItemOutputGenerator.java b/dspace-api/src/main/java/org/dspace/submit/lookup/DSpaceWorkspaceItemOutputGenerator.java new file mode 100644 index 0000000..b25b1eb --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/DSpaceWorkspaceItemOutputGenerator.java @@ -0,0 +1,439 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.submit.lookup; + +import gr.ekt.bte.core.DataOutputSpec; +import gr.ekt.bte.core.OutputGenerator; +import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.RecordSet; +import gr.ekt.bte.core.Value; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.dspace.app.util.DCInput; +import org.dspace.app.util.DCInputSet; +import org.dspace.app.util.DCInputsReader; +import org.dspace.app.util.DCInputsReaderException; +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.Collection; +import org.dspace.content.Item; +import org.dspace.content.MetadataField; +import org.dspace.content.MetadataSchema; +import org.dspace.content.WorkspaceItem; +import org.dspace.core.Context; +import org.dspace.submit.util.ItemSubmissionLookupDTO; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class DSpaceWorkspaceItemOutputGenerator implements OutputGenerator +{ + + private static Logger log = Logger + .getLogger(DSpaceWorkspaceItemOutputGenerator.class); + + private Context context; + + private String formName; + + private List<WorkspaceItem> witems; + + private ItemSubmissionLookupDTO dto; + + private Collection collection; + + Map<String, String> outputMap; + + private List<String> extraMetadataToKeep; + + @Override + public List<String> generateOutput(RecordSet recordSet) + { + + log.info("BTE OutputGenerator started. Records to output: " + + recordSet.getRecords().size()); + + // Printing debug message + String totalString = ""; + for (Record record : recordSet.getRecords()) + { + totalString += SubmissionLookupUtils.getPrintableString(record) + + "\n"; + } + log.debug("Records to output:\n" + totalString); + + witems = new ArrayList<WorkspaceItem>(); + + for (Record rec : recordSet.getRecords()) + { + try + { + WorkspaceItem wi = WorkspaceItem.create(context, collection, + true); + merge(formName, wi.getItem(), rec); + + witems.add(wi); + + } + catch (AuthorizeException e) + { + log.error(e.getMessage(), e); + } + catch (SQLException e) + { + log.error(e.getMessage(), e); + } + catch (IOException e) + { + log.error(e.getMessage(), e); + } + + } + + return new ArrayList<String>(); + } + + @Override + public List<String> generateOutput(RecordSet records, DataOutputSpec spec) + { + return generateOutput(records); + } + + public List<WorkspaceItem> getWitems() + { + return witems; + } + + public void setContext(Context context) + { + this.context = context; + } + + public void setFormName(String formName) + { + this.formName = formName; + } + + public void setDto(ItemSubmissionLookupDTO dto) + { + this.dto = dto; + } + + public void setOutputMap(Map<String, String> outputMap) + { + // Reverse the key-value pairs + this.outputMap = new HashMap<String, String>(); + for (String key : outputMap.keySet()) + { + this.outputMap.put(outputMap.get(key), key); + } + } + + public void setCollection(Collection collection) + { + this.collection = collection; + } + + public void setExtraMetadataToKeep(List<String> extraMetadataToKeep) + { + this.extraMetadataToKeep = extraMetadataToKeep; + } + + // Methods + public void merge(String formName, Item item, Record record) + { + + Record itemLookup = record; + + Set<String> addedMetadata = new HashSet<String>(); + for (String field : itemLookup.getFields()) + { + String metadata = getMetadata(formName, itemLookup, field); + if (StringUtils.isBlank(metadata)) + { + continue; + } + if (item.getMetadata(metadata).length == 0 + || addedMetadata.contains(metadata)) + { + addedMetadata.add(metadata); + String[] md = splitMetadata(metadata); + if (isValidMetadata(formName, md)) + { // if in extra metadata or in the spefific form + List<Value> values = itemLookup.getValues(field); + if (values != null && values.size() > 0) + { + if (isRepeatableMetadata(formName, md)) + { // if metadata is repeatable in form + for (Value value : values) + { + String[] splitValue = splitValue(value + .getAsString()); + if (splitValue[3] != null) + { + item.addMetadata(md[0], md[1], md[2], + md[3], splitValue[0], + splitValue[1], + Integer.parseInt(splitValue[2])); + } + else + { + item.addMetadata(md[0], md[1], md[2], + md[3], value.getAsString()); + } + } + } + else + { + String value = values.iterator().next() + .getAsString(); + String[] splitValue = splitValue(value); + if (splitValue[3] != null) + { + item.addMetadata(md[0], md[1], md[2], md[3], + splitValue[0], splitValue[1], + Integer.parseInt(splitValue[2])); + } + else + { + item.addMetadata(md[0], md[1], md[2], md[3], + value); + } + } + } + } + } + } + + try + { + item.update(); + } + catch (SQLException e) + { + log.error(e.getMessage(), e); + } + catch (AuthorizeException e) + { + log.error(e.getMessage(), e); + } + + } + + private String getMetadata(String formName, Record itemLookup, String name) + { + String type = SubmissionLookupService.getType(itemLookup); + + String md = outputMap.get(type + "." + name); + if (StringUtils.isBlank(md)) + { + md = outputMap.get(formName + "." + name); + if (StringUtils.isBlank(md)) + { + md = outputMap.get(name); + } + } + + // KSTA:ToDo: Make this a modifier + if (md != null && md.contains("|")) + { + String[] cond = md.trim().split("\\|"); + for (int idx = 1; idx < cond.length; idx++) + { + boolean temp = itemLookup.getFields().contains(cond[idx]); + if (temp) + { + return null; + } + } + return cond[0]; + } + return md; + } + + private String[] splitMetadata(String metadata) + { + String[] mdSplit = new String[3]; + if (StringUtils.isNotBlank(metadata)) + { + String tmpSplit[] = metadata.split("\\."); + if (tmpSplit.length == 4) + { + mdSplit = new String[4]; + mdSplit[0] = tmpSplit[0]; + mdSplit[1] = tmpSplit[1]; + mdSplit[2] = tmpSplit[2]; + mdSplit[3] = tmpSplit[3]; + } + else if (tmpSplit.length == 3) + { + mdSplit = new String[4]; + mdSplit[0] = tmpSplit[0]; + mdSplit[1] = tmpSplit[1]; + mdSplit[2] = tmpSplit[2]; + mdSplit[3] = null; + } + else if (tmpSplit.length == 2) + { + mdSplit = new String[4]; + mdSplit[0] = tmpSplit[0]; + mdSplit[1] = tmpSplit[1]; + mdSplit[2] = null; + mdSplit[3] = null; + } + } + return mdSplit; + } + + private boolean isValidMetadata(String formName, String[] md) + { + try + { + if (extraMetadataToKeep != null + && extraMetadataToKeep.contains(StringUtils.join( + Arrays.copyOfRange(md, 0, 3), "."))) + { + return true; + } + return getDCInput(formName, md[0], md[1], md[2]) != null; + } + catch (Exception e) + { + log.error(e.getMessage(), e); + } + return false; + } + + private DCInput getDCInput(String formName, String schema, String element, + String qualifier) throws DCInputsReaderException + { + DCInputSet dcinputset = new DCInputsReader().getInputs(formName); + for (int idx = 0; idx < dcinputset.getNumberPages(); idx++) + { + for (DCInput dcinput : dcinputset.getPageRows(idx, true, true)) + { + if (dcinput.getSchema().equals(schema) + && dcinput.getElement().equals(element) + && ((dcinput.getQualifier() != null && dcinput + .getQualifier().equals(qualifier)) + || (dcinput.getQualifier() == null && qualifier == null))) + { + return dcinput; + } + } + } + return null; + } + + private boolean isRepeatableMetadata(String formName, String[] md) + { + try + { + DCInput dcinput = getDCInput(formName, md[0], md[1], md[2]); + if (dcinput != null) + { + return dcinput.isRepeatable(); + } + return true; + } + catch (Exception e) + { + e.printStackTrace(); + } + return false; + } + + private String[] splitValue(String value) + { + String[] splitted = value + .split(SubmissionLookupService.SEPARATOR_VALUE_REGEX); + String[] result = new String[6]; + result[0] = splitted[0]; + result[2] = "-1"; + result[3] = "-1"; + result[4] = "-1"; + if (splitted.length > 1) + { + result[5] = "splitted"; + if (StringUtils.isNotBlank(splitted[1])) + { + result[1] = splitted[1]; + } + if (splitted.length > 2) + { + result[2] = String.valueOf(Integer.parseInt(splitted[2])); + if (splitted.length > 3) + { + result[3] = String.valueOf(Integer.parseInt(splitted[3])); + if (splitted.length > 4) + { + result[4] = String.valueOf(Integer + .parseInt(splitted[4])); + } + } + } + } + return result; + } + + private void makeSureMetadataExist(Context context, String schema, + String element, String qualifier) + { + try + { + context.turnOffAuthorisationSystem(); + boolean create = false; + MetadataSchema mdschema = MetadataSchema.find(context, schema); + MetadataField mdfield = null; + if (mdschema == null) + { + mdschema = new MetadataSchema( + SubmissionLookupService.SL_NAMESPACE_PREFIX + schema, + schema); + mdschema.create(context); + create = true; + } + else + { + mdfield = MetadataField.findByElement(context, + mdschema.getSchemaID(), element, qualifier); + } + + if (mdfield == null) + { + mdfield = new MetadataField(mdschema, element, qualifier, + "Campo utilizzato per la cache del provider submission-lookup: " + + schema); + mdfield.create(context); + create = true; + } + if (create) + { + context.commit(); + } + context.restoreAuthSystemState(); + } + catch (Exception e) + { + e.printStackTrace(); + } + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/FieldMergeModifier.java b/dspace-api/src/main/java/org/dspace/submit/lookup/FieldMergeModifier.java new file mode 100644 index 0000000..1cdbc7a --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/FieldMergeModifier.java @@ -0,0 +1,75 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.submit.lookup; + +import gr.ekt.bte.core.AbstractModifier; +import gr.ekt.bte.core.MutableRecord; +import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.Value; + +import java.util.List; +import java.util.Map; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class FieldMergeModifier extends AbstractModifier +{ + private Map<String, List<String>> mergeFieldMap; + + public FieldMergeModifier() + { + super("FieldMergeModifier"); + } + + @Override + public Record modify(MutableRecord rec) + { + if (mergeFieldMap != null) + { + for (String target_field : mergeFieldMap.keySet()) + { + List<String> source_fields = mergeFieldMap.get(target_field); + for (String source_field : source_fields) + { + List<Value> values = rec.getValues(source_field); + if (values != null && values.size() > 0) + { + for (Value value : values) + { + rec.addValue(target_field, value); + } + } + // rec.removeField(source_field); + } + } + } + return rec; + } + + /** + * @return the merge_field_map + */ + public Map<String, List<String>> getMergeFieldMap() + { + return mergeFieldMap; + } + + /** + * @param merge_field_map + * the merge_field_map to set + */ + public void setMergeFieldMap(Map<String, List<String>> merge_field_map) + { + this.mergeFieldMap = merge_field_map; + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/LanguageCodeModifier.java b/dspace-api/src/main/java/org/dspace/submit/lookup/LanguageCodeModifier.java new file mode 100644 index 0000000..eed73aa --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/LanguageCodeModifier.java @@ -0,0 +1,89 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.submit.lookup; + +import gr.ekt.bte.core.AbstractModifier; +import gr.ekt.bte.core.MutableRecord; +import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.StringValue; +import gr.ekt.bte.core.Value; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.MissingResourceException; + +/** + * Modifier to covert ISO 639-2 alpha-3 code to ISO 639-1 alpha-2 code + * + * @author Keiji Suzuki + */ +public class LanguageCodeModifier extends AbstractModifier +{ + private static Map<String, String> lang3to2 = null; + static + { + lang3to2 = new HashMap<String, String>(); + for (Locale locale : Locale.getAvailableLocales()) + { + try + { + lang3to2.put(locale.getISO3Language(), locale.getLanguage()); + } + catch (MissingResourceException e) + { + continue; + } + } + } + + public LanguageCodeModifier() + { + super("LanguageCodeModifier"); + } + + @Override + public Record modify(MutableRecord rec) + { + List<Value> old_values = rec.getValues("language"); + if (old_values == null || old_values.size() == 0) + { + return rec; + } + + List<Value> new_values = new ArrayList<Value>(); + for (Value value : old_values) + { + String lang3 = value.getAsString(); + String lang2 = lang3.length() == 3 ? getLang2(lang3) : lang3; + new_values.add(new StringValue(lang2)); + } + + rec.updateField("language", new_values); + + return rec; + } + + /** + * Covert ISO 639-2 alpha-3 code to ISO 639-1 alpha-2 code + * + * @param lang + * 3char language code + * + * @return String 2char language code ("other" unless code has 2 char code) + * + */ + private String getLang2(String lang3) + { + return lang3to2.containsKey(lang3) ? lang3to2.get(lang3) : "other"; + } + +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/LookupProvidersCheck.java b/dspace-api/src/main/java/org/dspace/submit/lookup/LookupProvidersCheck.java new file mode 100644 index 0000000..5372b34 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/LookupProvidersCheck.java @@ -0,0 +1,45 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.submit.lookup; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class LookupProvidersCheck +{ + private List<String> providersOk = new ArrayList<String>(); + + private List<String> providersErr = new ArrayList<String>(); + + public List<String> getProvidersOk() + { + return providersOk; + } + + public void setProvidersOk(List<String> providersOk) + { + this.providersOk = providersOk; + } + + public List<String> getProvidersErr() + { + return providersErr; + } + + public void setProvidersErr(List<String> providersErr) + { + this.providersErr = providersErr; + } + +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/MapConverterModifier.java b/dspace-api/src/main/java/org/dspace/submit/lookup/MapConverterModifier.java new file mode 100644 index 0000000..a9dd124 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/MapConverterModifier.java @@ -0,0 +1,214 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.submit.lookup; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +import org.apache.commons.lang.StringUtils; +import org.dspace.core.ConfigurationManager; +import org.dspace.services.ConfigurationService; + +import gr.ekt.bte.core.AbstractModifier; +import gr.ekt.bte.core.MutableRecord; +import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.StringValue; +import gr.ekt.bte.core.Value; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class MapConverterModifier extends AbstractModifier +{ + + private String mappingFile; //The properties absolute filename + + private String converterNameFile; //The properties filename + + private ConfigurationService configurationService; + + private Map<String, String> mapping; + + private String defaultValue = ""; + + private List<String> fieldKeys; + + private Map<String, String> regexConfig = new HashMap<String, String>(); + + public final String REGEX_PREFIX = "regex."; + + public void init() { + this.mappingFile = configurationService.getProperty("dspace.dir") + File.separator + "config" + File.separator + "crosswalks" + File.separator + converterNameFile; + + this.mapping = new HashMap<String, String>(); + + FileInputStream fis = null; + try + { + fis = new FileInputStream(new File(mappingFile)); + Properties mapConfig = new Properties(); + mapConfig.load(fis); + fis.close(); + for (Object key : mapConfig.keySet()) + { + String keyS = (String)key; + if (keyS.startsWith(REGEX_PREFIX)) + { + String regex = keyS.substring(REGEX_PREFIX.length()); + String regReplace = mapping.get(keyS); + if (regReplace == null) + { + regReplace = ""; + } + else if (regReplace.equalsIgnoreCase("@ident@")) + { + regReplace = "$0"; + } + regexConfig.put(regex,regReplace); + } + if (mapConfig.getProperty(keyS) != null) + mapping.put(keyS, mapConfig.getProperty(keyS)); + else + mapping.put(keyS, ""); + } + } + catch (Exception e) + { + throw new IllegalArgumentException("", e); + } + finally + { + if (fis != null) + { + try + { + fis.close(); + } + catch (IOException ioe) + { + // ... + } + } + } + for (String keyS : mapping.keySet()) + { + if (keyS.startsWith(REGEX_PREFIX)) + { + String regex = keyS.substring(REGEX_PREFIX.length()); + String regReplace = mapping.get(keyS); + if (regReplace == null) + { + regReplace = ""; + } + else if (regReplace.equalsIgnoreCase("@ident@")) + { + regReplace = "$0"; + } + regexConfig.put(regex,regReplace); + } + } + } + /** + * @param name + */ + public MapConverterModifier(String name) + { + super(name); + } + + /* + * (non-Javadoc) + * + * @see + * gr.ekt.bte.core.AbstractModifier#modify(gr.ekt.bte.core.MutableRecord) + */ + @Override + public Record modify(MutableRecord record) + { + if (mapping != null && fieldKeys != null) + { + for (String key : fieldKeys) + { + List<Value> values = record.getValues(key); + + if (values == null) + continue; + + List<Value> newValues = new ArrayList<Value>(); + + for (Value value : values) + { + String stringValue = value.getAsString(); + + String tmp = ""; + if (mapping.containsKey(stringValue)) + { + tmp = mapping.get(stringValue); + } + else + { + tmp = defaultValue; + for (String regex : regexConfig.keySet()) + { + if (stringValue != null + && stringValue.matches(regex)) + { + tmp = stringValue.replaceAll(regex, + regexConfig.get(regex)); + } + } + } + + if ("@@ident@@".equals(tmp)) + { + newValues.add(new StringValue(stringValue)); + } + else if (StringUtils.isNotBlank(tmp)) + { + newValues.add(new StringValue(tmp)); + } + else + newValues.add(new StringValue(stringValue)); + } + + record.updateField(key, newValues); + } + } + + return record; + } + + + public void setFieldKeys(List<String> fieldKeys) + { + this.fieldKeys = fieldKeys; + } + + public void setDefaultValue(String defaultValue) + { + this.defaultValue = defaultValue; + } + + public void setConverterNameFile(String converterNameFile) + { + this.converterNameFile = converterNameFile; + } + public void setConfigurationService(ConfigurationService configurationService) + { + this.configurationService = configurationService; + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/MultipleSubmissionLookupDataLoader.java b/dspace-api/src/main/java/org/dspace/submit/lookup/MultipleSubmissionLookupDataLoader.java new file mode 100644 index 0000000..3bed266 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/MultipleSubmissionLookupDataLoader.java @@ -0,0 +1,341 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.submit.lookup; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.log4j.Logger; +import org.dspace.core.Context; + +import gr.ekt.bte.core.DataLoader; +import gr.ekt.bte.core.DataLoadingSpec; +import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.RecordSet; +import gr.ekt.bte.core.StringValue; +import gr.ekt.bte.dataloader.FileDataLoader; +import gr.ekt.bte.exceptions.MalformedSourceException; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class MultipleSubmissionLookupDataLoader implements DataLoader +{ + + private static Logger log = Logger + .getLogger(MultipleSubmissionLookupDataLoader.class); + + private static final String NOT_FOUND_DOI = "NOT-FOUND-DOI"; + + Map<String, DataLoader> dataloadersMap; + + // Depending on these values, the multiple data loader loads data from the + // appropriate providers + Map<String, Set<String>> identifiers = null; // Searching by identifiers + // (DOI ...) + + Map<String, Set<String>> searchTerms = null; // Searching by author, title, + // date + + String filename = null; // Uploading file + + String type = null; // the type of the upload file (bibtex, etc.) + + /* + * (non-Javadoc) + * + * @see gr.ekt.bte.core.DataLoader#getRecords() + */ + @Override + public RecordSet getRecords() throws MalformedSourceException + { + + RecordSet recordSet = new RecordSet(); + + // KSTA:ToDo: Support timeout (problematic) providers + // List<String> timeoutProviders = new ArrayList<String>(); + for (String providerName : filterProviders().keySet()) + { + DataLoader provider = dataloadersMap.get(providerName); + RecordSet subRecordSet = provider.getRecords(); + recordSet.addAll(subRecordSet); + // Add in each record the provider name... a new provider doesn't + // need to know about it! + for (Record record : subRecordSet.getRecords()) + { + if (record.isMutable()) + { + record.makeMutable().addValue( + SubmissionLookupService.PROVIDER_NAME_FIELD, + new StringValue(providerName)); + } + } + } + + // Question: Do we want that in case of file data loader? + // for each publication in the record set, if it has a DOI, try to find + // extra pubs from the other providers + if (searchTerms != null + || (identifiers != null && !identifiers + .containsKey(SubmissionLookupDataLoader.DOI))) + { // Extend + Map<String, Set<String>> provider2foundDOIs = new HashMap<String, Set<String>>(); + List<String> foundDOIs = new ArrayList<String>(); + + for (Record publication : recordSet.getRecords()) + { + String providerName = SubmissionLookupUtils.getFirstValue( + publication, + SubmissionLookupService.PROVIDER_NAME_FIELD); + + String doi = null; + + if (publication.getValues(SubmissionLookupDataLoader.DOI) != null + && publication + .getValues(SubmissionLookupDataLoader.DOI) + .size() > 0) + doi = publication.getValues(SubmissionLookupDataLoader.DOI) + .iterator().next().getAsString(); + if (doi == null) + { + doi = NOT_FOUND_DOI; + } + else + { + doi = SubmissionLookupUtils.normalizeDOI(doi); + if (!foundDOIs.contains(doi)) + { + foundDOIs.add(doi); + } + Set<String> tmp = provider2foundDOIs.get(providerName); + if (tmp == null) + { + tmp = new HashSet<String>(); + provider2foundDOIs.put(providerName, tmp); + } + tmp.add(doi); + } + } + + for (String providerName : dataloadersMap.keySet()) + { + DataLoader genProvider = dataloadersMap.get(providerName); + + if (!(genProvider instanceof SubmissionLookupDataLoader)) + { + continue; + } + + SubmissionLookupDataLoader provider = (SubmissionLookupDataLoader) genProvider; + + // Provider must support DOI + if (!provider.getSupportedIdentifiers().contains( + SubmissionLookupDataLoader.DOI)) + { + continue; + } + + // if (evictProviders != null + // && evictProviders.contains(provider.getShortName())) { + // continue; + // } + Set<String> doiToSearch = new HashSet<String>(); + Set<String> alreadyFoundDOIs = provider2foundDOIs + .get(providerName); + for (String doi : foundDOIs) + { + if (alreadyFoundDOIs == null + || !alreadyFoundDOIs.contains(doi)) + { + doiToSearch.add(doi); + } + } + List<Record> pPublications = null; + Context context = null; + try + { + if (doiToSearch.size() > 0) + { + context = new Context(); + pPublications = provider.getByDOIs(context, doiToSearch); + } + } + catch (Exception e) + { + log.error(e.getMessage(), e); + } + finally { + if(context!=null && context.isValid()) { + context.abort(); + } + } + if (pPublications != null) + { + for (Record rec : pPublications) + { + recordSet.addRecord(rec); + if (rec.isMutable()) + { + rec.makeMutable().addValue( + SubmissionLookupService.PROVIDER_NAME_FIELD, + new StringValue(providerName)); + } + } + + } + } + } + + log.info("BTE DataLoader finished. Items loaded: " + + recordSet.getRecords().size()); + + // Printing debug message + String totalString = ""; + for (Record record : recordSet.getRecords()) + { + totalString += SubmissionLookupUtils.getPrintableString(record) + + "\n"; + } + log.debug("Records loaded:\n" + totalString); + + return recordSet; + } + + /* + * (non-Javadoc) + * + * @see + * gr.ekt.bte.core.DataLoader#getRecords(gr.ekt.bte.core.DataLoadingSpec) + */ + @Override + public RecordSet getRecords(DataLoadingSpec loadingSpec) + throws MalformedSourceException + { + + if (loadingSpec.getOffset() > 0) // Identify the end of loading + return new RecordSet(); + + return getRecords(); + } + + public Map<String, DataLoader> getProvidersMap() + { + return dataloadersMap; + } + + public void setDataloadersMap(Map<String, DataLoader> providersMap) + { + this.dataloadersMap = providersMap; + } + + public void setIdentifiers(Map<String, Set<String>> identifiers) + { + this.identifiers = identifiers; + this.filename = null; + this.searchTerms = null; + + if (dataloadersMap != null) + { + for (String providerName : dataloadersMap.keySet()) + { + DataLoader provider = dataloadersMap.get(providerName); + if (provider instanceof NetworkSubmissionLookupDataLoader) + { + ((NetworkSubmissionLookupDataLoader) provider) + .setIdentifiers(identifiers); + } + + } + } + } + + public void setSearchTerms(Map<String, Set<String>> searchTerms) + { + this.searchTerms = searchTerms; + this.identifiers = null; + this.filename = null; + + if (dataloadersMap != null) + { + for (String providerName : dataloadersMap.keySet()) + { + DataLoader provider = dataloadersMap.get(providerName); + if (provider instanceof NetworkSubmissionLookupDataLoader) + { + ((NetworkSubmissionLookupDataLoader) provider) + .setSearchTerms(searchTerms); + } + } + } + } + + public void setFile(String filename, String type) + { + this.filename = filename; + this.type = type; + this.identifiers = null; + this.searchTerms = null; + + if (dataloadersMap != null) + { + for (String providerName : dataloadersMap.keySet()) + { + DataLoader provider = dataloadersMap.get(providerName); + if (provider instanceof FileDataLoader) + { + ((FileDataLoader) provider).setFilename(filename); + } + } + } + } + + public Map<String, DataLoader> filterProviders() + { + Map<String, DataLoader> result = new HashMap<String, DataLoader>(); + for (String providerName : dataloadersMap.keySet()) + { + DataLoader dataLoader = dataloadersMap.get(providerName); + if (searchTerms != null && identifiers == null && filename == null) + { + if (dataLoader instanceof SubmissionLookupDataLoader + && ((SubmissionLookupDataLoader) dataLoader) + .isSearchProvider()) + { + result.put(providerName, dataLoader); + } + } + else if (searchTerms == null && identifiers != null + && filename == null) + { + if (dataLoader instanceof SubmissionLookupDataLoader) + { + result.put(providerName, dataLoader); + } + } + else if (searchTerms == null && identifiers == null + && filename != null) + { + if (dataLoader instanceof FileDataLoader) + { + if (providerName.endsWith(type)) // add only the one that we + // are interested in + result.put(providerName, dataLoader); + } + } + } + + return result; + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/NetworkSubmissionLookupDataLoader.java b/dspace-api/src/main/java/org/dspace/submit/lookup/NetworkSubmissionLookupDataLoader.java new file mode 100644 index 0000000..be22f37 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/NetworkSubmissionLookupDataLoader.java @@ -0,0 +1,185 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.submit.lookup; + +import gr.ekt.bte.core.DataLoadingSpec; +import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.RecordSet; +import gr.ekt.bte.core.StringValue; +import gr.ekt.bte.core.Value; +import gr.ekt.bte.exceptions.MalformedSourceException; + +import java.io.IOException; +import java.lang.reflect.Field; +import java.lang.reflect.GenericArrayType; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.httpclient.HttpException; +import org.apache.commons.lang.StringUtils; +import org.dspace.core.Context; +import org.dspace.submit.util.SubmissionLookupPublication; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public abstract class NetworkSubmissionLookupDataLoader implements + SubmissionLookupDataLoader +{ + + Map<String, Set<String>> identifiers; // Searching by identifiers (DOI ...) + + Map<String, Set<String>> searchTerms; // Searching by author, title, date + + Map<String, String> fieldMap; // mapping between service fields and local + // intermediate fields + + String providerName; + + @Override + public List<Record> getByDOIs(Context context, Set<String> doiToSearch) + throws HttpException, IOException + { + + Map<String, Set<String>> keys = new HashMap<String, Set<String>>(); + keys.put(DOI, doiToSearch); + + return getByIdentifier(context, keys); + } + + // BTE Data Loader interface methods + @Override + public RecordSet getRecords() throws MalformedSourceException + { + + RecordSet recordSet = new RecordSet(); + + List<Record> results = null; + + try + { + if (getIdentifiers() != null) + { // Search by identifiers + results = getByIdentifier(null, getIdentifiers()); + } + else + { + String title = getSearchTerms().get("title") != null ? getSearchTerms() + .get("title").iterator().next() + : null; + String authors = getSearchTerms().get("authors") != null ? getSearchTerms() + .get("authors").iterator().next() + : null; + String year = getSearchTerms().get("year") != null ? getSearchTerms() + .get("year").iterator().next() + : null; + int yearInt = Integer.parseInt(year); + results = search(null, title, authors, yearInt); + } + } + catch (HttpException e) + { + e.printStackTrace(); + } + catch (IOException e) + { + e.printStackTrace(); + } + + if (results != null) + { + for (Record record : results) + { + recordSet.addRecord(record); + } + } + + return recordSet; + } + + @Override + public RecordSet getRecords(DataLoadingSpec arg0) + throws MalformedSourceException + { + + return getRecords(); + } + + public Map<String, Set<String>> getIdentifiers() + { + return identifiers; + } + + public void setIdentifiers(Map<String, Set<String>> identifiers) + { + this.identifiers = identifiers; + } + + public Map<String, Set<String>> getSearchTerms() + { + return searchTerms; + } + + public void setSearchTerms(Map<String, Set<String>> searchTerms) + { + this.searchTerms = searchTerms; + } + + public Map<String, String> getFieldMap() + { + return fieldMap; + } + + public void setFieldMap(Map<String, String> fieldMap) + { + this.fieldMap = fieldMap; + } + + public void setProviderName(String providerName) + { + this.providerName = providerName; + } + + public Record convertFields(Record publication) + { + for (String fieldName : fieldMap.keySet()) + { + String md = null; + if (fieldMap != null) + { + md = this.fieldMap.get(fieldName); + } + + if (StringUtils.isBlank(md)) + { + continue; + } + else + { + md = md.trim(); + } + + if (publication.isMutable()) + { + List<Value> values = publication.getValues(fieldName); + publication.makeMutable().removeField(fieldName); + publication.makeMutable().addField(md, values); + } + } + + return publication; + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/PubmedFileDataLoader.java b/dspace-api/src/main/java/org/dspace/submit/lookup/PubmedFileDataLoader.java new file mode 100644 index 0000000..d8a99fa --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/PubmedFileDataLoader.java @@ -0,0 +1,177 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.submit.lookup; + +import gr.ekt.bte.core.DataLoadingSpec; +import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.RecordSet; +import gr.ekt.bte.core.Value; +import gr.ekt.bte.dataloader.FileDataLoader; +import gr.ekt.bte.exceptions.MalformedSourceException; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; +import java.util.Map; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.apache.commons.lang.StringUtils; +import org.dspace.app.util.XMLUtils; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xml.sax.SAXException; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class PubmedFileDataLoader extends FileDataLoader +{ + + Map<String, String> fieldMap; // mapping between service fields and local + // intermediate fields + + /** + * + */ + public PubmedFileDataLoader() + { + } + + /** + * @param filename + */ + public PubmedFileDataLoader(String filename) + { + super(filename); + } + + /* + * (non-Javadoc) + * + * @see gr.ekt.bte.core.DataLoader#getRecords() + */ + @Override + public RecordSet getRecords() throws MalformedSourceException + { + + RecordSet recordSet = new RecordSet(); + + try + { + InputStream inputStream = new FileInputStream(new File(filename)); + + DocumentBuilderFactory factory = DocumentBuilderFactory + .newInstance(); + factory.setValidating(false); + factory.setIgnoringComments(true); + factory.setIgnoringElementContentWhitespace(true); + + DocumentBuilder builder = factory.newDocumentBuilder(); + Document inDoc = builder.parse(inputStream); + + Element xmlRoot = inDoc.getDocumentElement(); + List<Element> pubArticles = XMLUtils.getElementList(xmlRoot, + "PubmedArticle"); + + for (Element xmlArticle : pubArticles) + { + Record record = null; + try + { + record = PubmedUtils.convertPubmedDomToRecord(xmlArticle); + recordSet.addRecord(convertFields(record)); + } + catch (Exception e) + { + throw new RuntimeException(e.getMessage(), e); + } + } + } + catch (FileNotFoundException e) + { + e.printStackTrace(); + } + catch (ParserConfigurationException e) + { + e.printStackTrace(); + } + catch (SAXException e) + { + e.printStackTrace(); + } + catch (IOException e) + { + e.printStackTrace(); + } + + return recordSet; + + } + + /* + * (non-Javadoc) + * + * @see + * gr.ekt.bte.core.DataLoader#getRecords(gr.ekt.bte.core.DataLoadingSpec) + */ + @Override + public RecordSet getRecords(DataLoadingSpec spec) + throws MalformedSourceException + { + if (spec.getOffset() > 0) + { + return new RecordSet(); + } + return getRecords(); + } + + public Record convertFields(Record publication) + { + for (String fieldName : fieldMap.keySet()) + { + String md = null; + if (fieldMap != null) + { + md = this.fieldMap.get(fieldName); + } + + if (StringUtils.isBlank(md)) + { + continue; + } + else + { + md = md.trim(); + } + + if (publication.isMutable()) + { + List<Value> values = publication.getValues(fieldName); + publication.makeMutable().removeField(fieldName); + publication.makeMutable().addField(md, values); + } + } + + return publication; + } + + public void setFieldMap(Map<String, String> fieldMap) + { + this.fieldMap = fieldMap; + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/PubmedOnlineDataLoader.java b/dspace-api/src/main/java/org/dspace/submit/lookup/PubmedOnlineDataLoader.java new file mode 100644 index 0000000..85c9964 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/PubmedOnlineDataLoader.java @@ -0,0 +1,139 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.submit.lookup; + +import gr.ekt.bte.core.Record; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.httpclient.HttpException; +import org.apache.log4j.Logger; +import org.dspace.core.Context; +import org.dspace.core.LogManager; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class PubmedOnlineDataLoader extends NetworkSubmissionLookupDataLoader +{ + private boolean searchProvider = true; + + private static Logger log = Logger.getLogger(PubmedOnlineDataLoader.class); + + private PubmedService pubmedService = new PubmedService(); + + public void setPubmedService(PubmedService pubmedService) + { + this.pubmedService = pubmedService; + } + + @Override + public List<String> getSupportedIdentifiers() + { + return Arrays.asList(new String[] { PUBMED, DOI }); + } + + public void setSearchProvider(boolean searchProvider) + { + this.searchProvider = searchProvider; + } + + @Override + public boolean isSearchProvider() + { + return searchProvider; + } + + @Override + public List<Record> getByIdentifier(Context context, + Map<String, Set<String>> keys) throws HttpException, IOException + { + Set<String> pmids = keys != null ? keys.get(PUBMED) : null; + Set<String> dois = keys != null ? keys.get(DOI) : null; + List<Record> results = new ArrayList<Record>(); + if (pmids != null && pmids.size() > 0 + && (dois == null || dois.size() == 0)) + { + for (String pmid : pmids) + { + Record p = null; + try + { + p = pubmedService.getByPubmedID(pmid); + } + catch (Exception e) + { + log.error(LogManager.getHeader(context, "getByIdentifier", + "pmid=" + pmid), e); + } + if (p != null) + results.add(convertFields(p)); + } + } + else if (dois != null && dois.size() > 0 + && (pmids == null || pmids.size() == 0)) + { + StringBuffer query = new StringBuffer(); + for (String d : dois) + { + if (query.length() > 0) + { + query.append(" OR "); + } + query.append(d).append("[AI]"); + } + + List<Record> pubmedResults = pubmedService.search(query.toString()); + for (Record p : pubmedResults) + { + results.add(convertFields(p)); + } + } + else if (dois != null && dois.size() > 0 && pmids != null + && pmids.size() > 0) + { + // EKT:ToDo: support list of dois and pmids in the search method of + // pubmedService + List<Record> pubmedResults = pubmedService.search(dois.iterator() + .next(), pmids.iterator().next()); + if (pubmedResults != null) + { + for (Record p : pubmedResults) + { + results.add(convertFields(p)); + } + } + } + + return results; + } + + @Override + public List<Record> search(Context context, String title, String author, + int year) throws HttpException, IOException + { + List<Record> pubmedResults = pubmedService.search(title, author, year); + List<Record> results = new ArrayList<Record>(); + if (pubmedResults != null) + { + for (Record p : pubmedResults) + { + results.add(convertFields(p)); + } + } + return results; + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/PubmedService.java b/dspace-api/src/main/java/org/dspace/submit/lookup/PubmedService.java new file mode 100644 index 0000000..d493672 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/PubmedService.java @@ -0,0 +1,300 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.submit.lookup; + +import gr.ekt.bte.core.Record; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpException; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.NameValuePair; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.dspace.app.util.XMLUtils; +import org.dspace.core.ConfigurationManager; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xml.sax.SAXException; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class PubmedService +{ + + private static Logger log = Logger.getLogger(PubmedService.class); + + private int timeout = 1000; + + public void setTimeout(int timeout) + { + this.timeout = timeout; + } + + public Record getByPubmedID(String pubmedid) throws HttpException, + IOException, ParserConfigurationException, SAXException + { + List<String> ids = new ArrayList<String>(); + ids.add(pubmedid.trim()); + List<Record> items = getByPubmedIDs(ids); + if (items != null && items.size() > 0) + { + return items.get(0); + } + return null; + } + + public List<Record> search(String title, String author, int year) + throws HttpException, IOException + { + StringBuffer query = new StringBuffer(); + if (StringUtils.isNotBlank(title)) + { + query.append("((").append(title).append("[TI]) OR ("); + // [TI] non funziona sempre, titolo di capitoli di libro + query.append("(").append(title).append("[book]))"); + } + if (StringUtils.isNotBlank(author)) + { + // [FAU] + if (query.length() > 0) + query.append(" AND "); + query.append("(").append(author).append("[AU])"); + } + if (year != -1) + { + // [DP] + if (query.length() > 0) + query.append(" AND "); + query.append(year).append("[DP]"); + } + return search(query.toString()); + } + + public List<Record> search(String query) throws IOException, HttpException + { + List<Record> results = null; + if (!ConfigurationManager.getBooleanProperty(SubmissionLookupService.CFG_MODULE, "remoteservice.demo")) + { + GetMethod method = null; + try + { + HttpClient client = new HttpClient(); + client.setTimeout(timeout); + method = new GetMethod( + "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi"); + + NameValuePair db = new NameValuePair("db", "pubmed"); + NameValuePair datetype = new NameValuePair("datetype", "edat"); + NameValuePair retmax = new NameValuePair("retmax", "10"); + NameValuePair queryParam = new NameValuePair("term", + query.toString()); + method.setQueryString(new NameValuePair[] { db, queryParam, + retmax, datetype }); + // Execute the method. + int statusCode = client.executeMethod(method); + + if (statusCode != HttpStatus.SC_OK) + { + throw new RuntimeException("WS call failed: " + + method.getStatusLine()); + } + + DocumentBuilderFactory factory = DocumentBuilderFactory + .newInstance(); + factory.setValidating(false); + factory.setIgnoringComments(true); + factory.setIgnoringElementContentWhitespace(true); + + DocumentBuilder builder; + try + { + builder = factory.newDocumentBuilder(); + + Document inDoc = builder.parse(method + .getResponseBodyAsStream()); + + Element xmlRoot = inDoc.getDocumentElement(); + Element idList = XMLUtils.getSingleElement(xmlRoot, + "IdList"); + List<String> pubmedIDs = XMLUtils.getElementValueList( + idList, "Id"); + results = getByPubmedIDs(pubmedIDs); + } + catch (ParserConfigurationException e1) + { + log.error(e1.getMessage(), e1); + } + catch (SAXException e1) + { + log.error(e1.getMessage(), e1); + } + } + catch (Exception e1) + { + log.error(e1.getMessage(), e1); + } + finally + { + if (method != null) + { + method.releaseConnection(); + } + } + } + else + { + InputStream stream = null; + try + { + File file = new File( + ConfigurationManager.getProperty("dspace.dir") + + "/config/crosswalks/demo/pubmed-search.xml"); + stream = new FileInputStream(file); + DocumentBuilderFactory factory = DocumentBuilderFactory + .newInstance(); + factory.setValidating(false); + factory.setIgnoringComments(true); + factory.setIgnoringElementContentWhitespace(true); + + DocumentBuilder builder = factory.newDocumentBuilder(); + Document inDoc = builder.parse(stream); + + Element xmlRoot = inDoc.getDocumentElement(); + Element idList = XMLUtils.getSingleElement(xmlRoot, "IdList"); + List<String> pubmedIDs = XMLUtils.getElementValueList(idList, + "Id"); + results = getByPubmedIDs(pubmedIDs); + } + catch (Exception e) + { + throw new RuntimeException(e.getMessage(), e); + } + finally + { + if (stream != null) + { + try + { + stream.close(); + } + catch (IOException e) + { + e.printStackTrace(); + } + } + } + } + return results; + } + + public List<Record> getByPubmedIDs(List<String> pubmedIDs) + throws HttpException, IOException, ParserConfigurationException, + SAXException + { + List<Record> results = new ArrayList<Record>(); + GetMethod method = null; + try + { + HttpClient client = new HttpClient(); + client.setTimeout(5 * timeout); + method = new GetMethod( + "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi"); + + NameValuePair db = new NameValuePair("db", "pubmed"); + NameValuePair retmode = new NameValuePair("retmode", "xml"); + NameValuePair rettype = new NameValuePair("rettype", "full"); + NameValuePair id = new NameValuePair("id", StringUtils.join( + pubmedIDs.iterator(), ",")); + method.setQueryString(new NameValuePair[] { db, retmode, + rettype, id }); + // Execute the method. + int statusCode = client.executeMethod(method); + + if (statusCode != HttpStatus.SC_OK) + { + throw new RuntimeException("WS call failed: " + + method.getStatusLine()); + } + + DocumentBuilderFactory factory = DocumentBuilderFactory + .newInstance(); + factory.setValidating(false); + factory.setIgnoringComments(true); + factory.setIgnoringElementContentWhitespace(true); + + DocumentBuilder builder = factory.newDocumentBuilder(); + Document inDoc = builder + .parse(method.getResponseBodyAsStream()); + + Element xmlRoot = inDoc.getDocumentElement(); + List<Element> pubArticles = XMLUtils.getElementList(xmlRoot, + "PubmedArticle"); + + for (Element xmlArticle : pubArticles) + { + Record pubmedItem = null; + try + { + pubmedItem = PubmedUtils + .convertPubmedDomToRecord(xmlArticle); + results.add(pubmedItem); + } + catch (Exception e) + { + throw new RuntimeException( + "PubmedID is not valid or not exist: " + + e.getMessage(), e); + } + } + + return results; + } + finally + { + if (method != null) + { + method.releaseConnection(); + } + } + } + + public List<Record> search(String doi, String pmid) throws HttpException, + IOException + { + StringBuffer query = new StringBuffer(); + if (StringUtils.isNotBlank(doi)) + { + query.append(doi); + query.append("[AID]"); + } + if (StringUtils.isNotBlank(pmid)) + { + // [FAU] + if (query.length() > 0) + query.append(" OR "); + query.append(pmid).append("[PMID]"); + } + return search(query.toString()); + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/PubmedUtils.java b/dspace-api/src/main/java/org/dspace/submit/lookup/PubmedUtils.java new file mode 100644 index 0000000..552db67 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/PubmedUtils.java @@ -0,0 +1,347 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +/** + * + */ +package org.dspace.submit.lookup; + +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import gr.ekt.bte.core.MutableRecord; +import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.StringValue; +import gr.ekt.bte.core.Value; + +import org.apache.commons.lang.StringUtils; +import org.dspace.app.util.XMLUtils; +import org.dspace.submit.util.SubmissionLookupPublication; +import org.w3c.dom.Element; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class PubmedUtils +{ + + public static Record convertPubmedDomToRecord(Element pubArticle) + { + MutableRecord record = new SubmissionLookupPublication(""); + + Map<String, String> monthToNum = new HashMap<String, String>(); + monthToNum.put("Jan", "01"); + monthToNum.put("Feb", "02"); + monthToNum.put("Mar", "03"); + monthToNum.put("Apr", "04"); + monthToNum.put("May", "05"); + monthToNum.put("Jun", "06"); + monthToNum.put("Jul", "07"); + monthToNum.put("Aug", "08"); + monthToNum.put("Sep", "09"); + monthToNum.put("Oct", "10"); + monthToNum.put("Nov", "11"); + monthToNum.put("Dec", "12"); + + Element medline = XMLUtils.getSingleElement(pubArticle, + "MedlineCitation"); + + Element article = XMLUtils.getSingleElement(medline, "Article"); + Element pubmed = XMLUtils.getSingleElement(pubArticle, "PubmedData"); + + Element identifierList = XMLUtils.getSingleElement(pubmed, + "ArticleIdList"); + if (identifierList != null) + { + List<Element> identifiers = XMLUtils.getElementList(identifierList, + "ArticleId"); + if (identifiers != null) + { + for (Element id : identifiers) + { + if ("pubmed".equals(id.getAttribute("IdType"))) + { + String pubmedID = id.getTextContent().trim(); + if (pubmedID != null) + record.addValue("pubmedID", new StringValue( + pubmedID)); + } + else if ("doi".equals(id.getAttribute("IdType"))) + { + String doi = id.getTextContent().trim(); + if (doi != null) + record.addValue("doi", new StringValue(doi)); + } + } + } + } + + String status = XMLUtils.getElementValue(pubmed, "PublicationStatus"); + if (status != null) + record.addValue("publicationStatus", new StringValue(status)); + + String pubblicationModel = XMLUtils.getElementAttribute(medline, + "Article", "PubModel"); + if (pubblicationModel != null) + record.addValue("pubModel", new StringValue( + pubblicationModel)); + + String title = XMLUtils.getElementValue(article, "ArticleTitle"); + if (title != null) + record.addValue("articleTitle", new StringValue(title)); + + Element abstractElement = XMLUtils + .getSingleElement(article, "Abstract"); + if (abstractElement == null) + { + abstractElement = XMLUtils.getSingleElement(medline, + "OtherAbstract"); + } + if (abstractElement != null) + { + String summary = XMLUtils.getElementValue(abstractElement, + "AbstractText"); + if (summary != null) + record.addValue("abstractText", new StringValue(summary)); + } + + List<String[]> authors = new LinkedList<String[]>(); + Element authorList = XMLUtils.getSingleElement(article, "AuthorList"); + if (authorList != null) + { + List<Element> authorsElement = XMLUtils.getElementList(authorList, + "Author"); + if (authorsElement != null) + { + for (Element author : authorsElement) + { + if (StringUtils.isBlank(XMLUtils.getElementValue(author, + "CollectiveName"))) + { + authors.add(new String[] { + XMLUtils.getElementValue(author, "ForeName"), + XMLUtils.getElementValue(author, "LastName") }); + } + } + } + } + if (authors.size() > 0) + { + List<Value> values = new LinkedList<Value>(); + for (String[] sArray : authors) + { + values.add(new StringValue(sArray[1] + ", " + sArray[0])); + } + record.addField("author", values); + } + + Element journal = XMLUtils.getSingleElement(article, "Journal"); + if (journal != null) + { + List<Element> jnumbers = XMLUtils.getElementList(journal, "ISSN"); + if (jnumbers != null) + { + for (Element jnumber : jnumbers) + { + if ("Print".equals(jnumber.getAttribute("IssnType"))) + { + String issn = jnumber.getTextContent().trim(); + if (issn != null) + record.addValue("printISSN", new StringValue(issn)); + } + else + { + String eissn = jnumber.getTextContent().trim(); + if (eissn != null) + record.addValue("electronicISSN", new StringValue(eissn)); + } + } + } + + String journalTitle = XMLUtils.getElementValue(journal, "Title"); + if (journalTitle != null) + record.addValue("journalTitle", new StringValue(journalTitle)); + + Element journalIssueElement = XMLUtils.getSingleElement(journal, + "JournalIssue"); + if (journalIssueElement != null) + { + String volume = XMLUtils.getElementValue(journalIssueElement, + "Volume"); + if (volume != null) + record.addValue("journalVolume", new StringValue(volume)); + + String issue = XMLUtils.getElementValue(journalIssueElement, + "Issue"); + if (issue != null) + record.addValue("journalIssue", new StringValue(issue)); + + Element pubDateElement = XMLUtils.getSingleElement( + journalIssueElement, "PubDate"); + + String pubDate = null; + if (pubDateElement != null) + { + pubDate = XMLUtils.getElementValue(pubDateElement, "Year"); + + String mounth = XMLUtils.getElementValue(pubDateElement, + "Month"); + String day = XMLUtils + .getElementValue(pubDateElement, "Day"); + if (StringUtils.isNotBlank(mounth) + && monthToNum.containsKey(mounth)) + { + pubDate += "-" + monthToNum.get(mounth); + if (StringUtils.isNotBlank(day)) + { + pubDate += "-" + (day.length() == 1 ? "0" + day : day); + } + } + } + if (pubDate == null){ + pubDate = XMLUtils.getElementValue(pubDateElement, "MedlineDate"); + } + if (pubDate != null) + record.addValue("pubDate", new StringValue(pubDate)); + } + + String language = XMLUtils.getElementValue(article, "Language"); + if (language != null) + record.addValue("language", new StringValue(language)); + + List<String> type = new LinkedList<String>(); + Element publicationTypeList = XMLUtils.getSingleElement(article, + "PublicationTypeList"); + if (publicationTypeList != null) + { + List<Element> publicationTypes = XMLUtils.getElementList( + publicationTypeList, "PublicationType"); + for (Element publicationType : publicationTypes) + { + type.add(publicationType.getTextContent().trim()); + } + } + if (type.size() > 0) + { + List<Value> values = new LinkedList<Value>(); + for (String s : type) + { + values.add(new StringValue(s)); + } + record.addField("publicationType", values); + } + + List<String> primaryKeywords = new LinkedList<String>(); + List<String> secondaryKeywords = new LinkedList<String>(); + Element keywordsList = XMLUtils.getSingleElement(medline, + "KeywordList"); + if (keywordsList != null) + { + List<Element> keywords = XMLUtils.getElementList(keywordsList, + "Keyword"); + for (Element keyword : keywords) + { + if ("Y".equals(keyword.getAttribute("MajorTopicYN"))) + { + primaryKeywords.add(keyword.getTextContent().trim()); + } + else + { + secondaryKeywords.add(keyword.getTextContent().trim()); + } + } + } + if (primaryKeywords.size() > 0) + { + List<Value> values = new LinkedList<Value>(); + for (String s : primaryKeywords) + { + values.add(new StringValue(s)); + } + record.addField("primaryKeyword", values); + } + if (secondaryKeywords.size() > 0) + { + List<Value> values = new LinkedList<Value>(); + for (String s : secondaryKeywords) + { + values.add(new StringValue(s)); + } + record.addField("secondaryKeyword", values); + } + + List<String> primaryMeshHeadings = new LinkedList<String>(); + List<String> secondaryMeshHeadings = new LinkedList<String>(); + Element meshHeadingsList = XMLUtils.getSingleElement(medline, + "MeshHeadingList"); + if (meshHeadingsList != null) + { + List<Element> meshHeadings = XMLUtils.getElementList( + meshHeadingsList, "MeshHeading"); + for (Element meshHeading : meshHeadings) + { + if ("Y".equals(XMLUtils.getElementAttribute(meshHeading, + "DescriptorName", "MajorTopicYN"))) + { + primaryMeshHeadings.add(XMLUtils.getElementValue( + meshHeading, "DescriptorName")); + } + else + { + secondaryMeshHeadings.add(XMLUtils.getElementValue( + meshHeading, "DescriptorName")); + } + } + } + if (primaryMeshHeadings.size() > 0) + { + List<Value> values = new LinkedList<Value>(); + for (String s : primaryMeshHeadings) + { + values.add(new StringValue(s)); + } + record.addField("primaryMeshHeading", values); + } + if (secondaryMeshHeadings.size() > 0) + { + List<Value> values = new LinkedList<Value>(); + for (String s : secondaryMeshHeadings) + { + values.add(new StringValue(s)); + } + record.addField("secondaryMeshHeading", values); + } + + Element paginationElement = XMLUtils.getSingleElement(article, + "Pagination"); + if (paginationElement != null) + { + String startPage = XMLUtils.getElementValue(paginationElement, + "StartPage"); + String endPage = XMLUtils.getElementValue(paginationElement, + "EndPage"); + if (StringUtils.isBlank(startPage)) + { + startPage = XMLUtils.getElementValue(paginationElement, + "MedlinePgn"); + } + + if (startPage != null) + record.addValue("startPage", new StringValue(startPage)); + if (endPage != null) + record.addValue("endPage", new StringValue(endPage)); + } + } + + return record; + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/RemoveLastDotModifier.java b/dspace-api/src/main/java/org/dspace/submit/lookup/RemoveLastDotModifier.java new file mode 100644 index 0000000..f29ca13 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/RemoveLastDotModifier.java @@ -0,0 +1,87 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.submit.lookup; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang.StringUtils; + +import gr.ekt.bte.core.AbstractModifier; +import gr.ekt.bte.core.MutableRecord; +import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.StringValue; +import gr.ekt.bte.core.Value; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class RemoveLastDotModifier extends AbstractModifier +{ + + List<String> fieldKeys; + + /** + * @param name + */ + public RemoveLastDotModifier(String name) + { + super(name); + } + + /* + * (non-Javadoc) + * + * @see + * gr.ekt.bte.core.AbstractModifier#modify(gr.ekt.bte.core.MutableRecord) + */ + @Override + public Record modify(MutableRecord record) + { + if (fieldKeys != null) + { + for (String key : fieldKeys) + { + List<Value> values = record.getValues(key); + + List<Value> newValues = new ArrayList<Value>(); + + if (values != null) + { + for (Value value : values) + { + String valueString = value.getAsString(); + if (StringUtils.isNotBlank(valueString) + && valueString.endsWith(".")) + { + newValues.add(new StringValue(valueString + .substring(0, valueString.length() - 1))); + } + else + { + newValues.add(new StringValue(valueString)); + } + } + + record.updateField(key, newValues); + } + } + } + + return record; + } + + public void setFieldKeys(List<String> fieldKeys) + { + this.fieldKeys = fieldKeys; + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionItemDataLoader.java b/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionItemDataLoader.java new file mode 100644 index 0000000..9908e88 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionItemDataLoader.java @@ -0,0 +1,118 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.submit.lookup; + +import gr.ekt.bte.core.DataLoader; +import gr.ekt.bte.core.DataLoadingSpec; +import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.RecordSet; +import gr.ekt.bte.exceptions.MalformedSourceException; + +import java.util.List; + +import org.apache.log4j.Logger; +import org.dspace.submit.util.ItemSubmissionLookupDTO; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class SubmissionItemDataLoader implements DataLoader +{ + private List<ItemSubmissionLookupDTO> dtoList; + + List<DataLoader> providers; + + private static Logger log = Logger + .getLogger(SubmissionItemDataLoader.class); + + public SubmissionItemDataLoader() + { + dtoList = null; + providers = null; + } + + @Override + public RecordSet getRecords() throws MalformedSourceException + { + if (dtoList == null) + { + throw new MalformedSourceException("dtoList not initialized"); + } + RecordSet ret = new RecordSet(); + + for (ItemSubmissionLookupDTO dto : dtoList) + { + Record rec = dto.getTotalPublication(providers); + ret.addRecord(rec); + } + + log.info("BTE DataLoader finished. Items loaded: " + + ret.getRecords().size()); + + // Printing debug message + String totalString = ""; + for (Record record : ret.getRecords()) + { + totalString += SubmissionLookupUtils.getPrintableString(record) + + "\n"; + } + log.debug("Records loaded:\n" + totalString); + + return ret; + } + + @Override + public RecordSet getRecords(DataLoadingSpec spec) + throws MalformedSourceException + { + if (spec.getOffset() > 0) + { + return new RecordSet(); + } + + return getRecords(); + } + + /** + * @return the dtoList + */ + public List<ItemSubmissionLookupDTO> getDtoList() + { + return dtoList; + } + + /** + * @param dtoList + * the dtoList to set + */ + public void setDtoList(List<ItemSubmissionLookupDTO> dtoList) + { + this.dtoList = dtoList; + } + + /** + * @return the providers + */ + public List<DataLoader> getProviders() + { + return providers; + } + + /** + * @param providers + * the providers to set + */ + public void setProviders(List<DataLoader> providers) + { + this.providers = providers; + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupDataLoader.java b/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupDataLoader.java new file mode 100644 index 0000000..df6f453 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupDataLoader.java @@ -0,0 +1,57 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.submit.lookup; + +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.httpclient.HttpException; +import org.dspace.core.Context; + +import gr.ekt.bte.core.DataLoader; +import gr.ekt.bte.core.Record; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public interface SubmissionLookupDataLoader extends DataLoader +{ + + public final static String DOI = "doi"; + + public final static String PUBMED = "pubmed"; + + public final static String ARXIV = "arxiv"; + + public final static String REPEC = "repec"; + + public final static String SCOPUSEID = "scopuseid"; + + public final static String CINII = "cinii"; + + public final static String TYPE = "type"; + + List<String> getSupportedIdentifiers(); + + boolean isSearchProvider(); + + List<Record> search(Context context, String title, String author, int year) + throws HttpException, IOException; + + List<Record> getByIdentifier(Context context, Map<String, Set<String>> keys) + throws HttpException, IOException; + + List<Record> getByDOIs(Context context, Set<String> doiToSearch) + throws HttpException, IOException; + +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupOutputGenerator.java b/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupOutputGenerator.java new file mode 100644 index 0000000..23dca88 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupOutputGenerator.java @@ -0,0 +1,107 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.submit.lookup; + +import gr.ekt.bte.core.DataOutputSpec; +import gr.ekt.bte.core.OutputGenerator; +import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.RecordSet; +import gr.ekt.bte.core.Value; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.dspace.submit.util.ItemSubmissionLookupDTO; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class SubmissionLookupOutputGenerator implements OutputGenerator +{ + private List<ItemSubmissionLookupDTO> dtoList; + + private static final String DOI_FIELD = "doi"; + + private static final String NOT_FOUND_DOI = "NOT-FOUND-DOI"; + + public SubmissionLookupOutputGenerator() + { + + } + + @Override + public List<String> generateOutput(RecordSet records) + { + dtoList = new ArrayList<ItemSubmissionLookupDTO>(); + + Map<String, List<Record>> record_sets = new HashMap<String, List<Record>>(); + int counter = 0; + for (Record rec : records) + { + String current_doi = NOT_FOUND_DOI; + List<Value> values = rec.getValues(DOI_FIELD); + if (values != null && values.size() > 0) + { + current_doi = values.get(0).getAsString(); + } + else + { + current_doi = NOT_FOUND_DOI + "_" + counter; + } + + if (record_sets.keySet().contains(current_doi)) + { + record_sets.get(current_doi).add(rec); + } + else + { + ArrayList<Record> publication = new ArrayList<Record>(); + publication.add(rec); + record_sets.put(current_doi, publication); + } + + counter++; + } + for (Map.Entry<String, List<Record>> entry : record_sets.entrySet()) + { + ItemSubmissionLookupDTO dto = new ItemSubmissionLookupDTO( + entry.getValue()); + dtoList.add(dto); + } + + return new ArrayList<String>(); + } + + @Override + public List<String> generateOutput(RecordSet records, DataOutputSpec spec) + { + return generateOutput(records); + } + + /** + * @return the items + */ + public List<ItemSubmissionLookupDTO> getDtoList() + { + return dtoList; + } + + /** + * @param items + * the items to set + */ + public void setDtoList(List<ItemSubmissionLookupDTO> items) + { + this.dtoList = items; + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupService.java b/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupService.java new file mode 100644 index 0000000..b3a6334 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupService.java @@ -0,0 +1,225 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.submit.lookup; + +import gr.ekt.bte.core.DataLoader; +import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.TransformationEngine; +import gr.ekt.bte.dataloader.FileDataLoader; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.log4j.Logger; +import org.dspace.submit.util.SubmissionLookupDTO; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class SubmissionLookupService +{ + public static final String CFG_MODULE = "submission-lookup"; + + public static final String SL_NAMESPACE_PREFIX = "http://www.dspace.org/sl/"; + + public static final String MANUAL_USER_INPUT = "manual"; + + public static final String PROVIDER_NAME_FIELD = "provider_name_field"; + + private static Logger log = Logger.getLogger(SubmissionLookupService.class); + + public static final String SEPARATOR_VALUE = "#######"; + + public static final String SEPARATOR_VALUE_REGEX = SEPARATOR_VALUE; + + private List<DataLoader> providers; + + private Map<String, List<String>> idents2provs; + + private List<String> searchProviders; + + private List<String> fileProviders; + + private TransformationEngine phase1TransformationEngine; + + private TransformationEngine phase2TransformationEngine; + + private List<String> detailFields = null; + + public void setPhase2TransformationEngine( + TransformationEngine phase2TransformationEngine) + { + this.phase2TransformationEngine = phase2TransformationEngine; + } + + public void setPhase1TransformationEngine( + TransformationEngine phase1TransformationEngine) + { + this.phase1TransformationEngine = phase1TransformationEngine; + + MultipleSubmissionLookupDataLoader dataLoader = (MultipleSubmissionLookupDataLoader) phase1TransformationEngine + .getDataLoader(); + + this.idents2provs = new HashMap<String, List<String>>(); + this.searchProviders = new ArrayList<String>(); + this.fileProviders = new ArrayList<String>(); + + if (providers == null) + { + this.providers = new ArrayList<DataLoader>(); + + for (String providerName : dataLoader.getProvidersMap().keySet()) + { + DataLoader p = dataLoader.getProvidersMap().get(providerName); + + this.providers.add(p); + + // Do not do that for file providers + if (p instanceof FileDataLoader) + { + this.fileProviders.add(providerName); + } + else if (p instanceof NetworkSubmissionLookupDataLoader) + { + + NetworkSubmissionLookupDataLoader p2 = (NetworkSubmissionLookupDataLoader) p; + + p2.setProviderName(providerName); + + if (p2.isSearchProvider()) + { + searchProviders.add(providerName); + } + List<String> suppIdentifiers = p2.getSupportedIdentifiers(); + if (suppIdentifiers != null) + { + for (String ident : suppIdentifiers) + { + List<String> tmp = idents2provs.get(ident); + if (tmp == null) + { + tmp = new ArrayList<String>(); + idents2provs.put(ident, tmp); + } + tmp.add(providerName); + } + } + } + } + } + } + + public TransformationEngine getPhase1TransformationEngine() + { + return phase1TransformationEngine; + } + + public TransformationEngine getPhase2TransformationEngine() + { + return phase2TransformationEngine; + } + + public List<String> getIdentifiers() + { + + List<String> allSupportedIdentifiers = new ArrayList<String>(); + MultipleSubmissionLookupDataLoader dataLoader = (MultipleSubmissionLookupDataLoader) phase1TransformationEngine + .getDataLoader(); + for (String providerName : dataLoader.getProvidersMap().keySet()) + { + DataLoader provider = dataLoader.getProvidersMap() + .get(providerName); + if (provider instanceof SubmissionLookupDataLoader) + { + for (String identifier : ((SubmissionLookupDataLoader) provider) + .getSupportedIdentifiers()) + { + if (!allSupportedIdentifiers.contains(identifier)) + { + allSupportedIdentifiers.add(identifier); + } + } + } + } + + return allSupportedIdentifiers; + } + + public Map<String, List<String>> getProvidersIdentifiersMap() + { + return idents2provs; + } + + public SubmissionLookupDTO getSubmissionLookupDTO( + HttpServletRequest request, String uuidSubmission) + { + SubmissionLookupDTO dto = (SubmissionLookupDTO) request.getSession() + .getAttribute("submission_lookup_" + uuidSubmission); + if (dto == null) + { + dto = new SubmissionLookupDTO(); + storeDTOs(request, uuidSubmission, dto); + } + return dto; + } + + public void invalidateDTOs(HttpServletRequest request, String uuidSubmission) + { + request.getSession().removeAttribute( + "submission_lookup_" + uuidSubmission); + } + + public void storeDTOs(HttpServletRequest request, String uuidSubmission, + SubmissionLookupDTO dto) + { + request.getSession().setAttribute( + "submission_lookup_" + uuidSubmission, dto); + } + + public List<String> getSearchProviders() + { + return searchProviders; + } + + public List<DataLoader> getProviders() + { + return providers; + } + + public static String getProviderName(Record rec) + { + return SubmissionLookupUtils.getFirstValue(rec, + SubmissionLookupService.PROVIDER_NAME_FIELD); + } + + public static String getType(Record rec) + { + return SubmissionLookupUtils.getFirstValue(rec, + SubmissionLookupDataLoader.TYPE); + } + + public List<String> getFileProviders() + { + return this.fileProviders; + } + + public List<String> getDetailFields() { + return detailFields; + } + + public void setDetailFields(List<String> detailFields) { + this.detailFields = detailFields; + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupUtils.java b/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupUtils.java new file mode 100644 index 0000000..81e98e3 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupUtils.java @@ -0,0 +1,162 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.submit.lookup; + +import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.Value; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Pattern; + +import org.apache.log4j.Logger; +import org.dspace.content.DCValue; +import org.dspace.content.Item; +import org.dspace.content.MetadataSchema; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Context; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class SubmissionLookupUtils +{ + private static Logger log = Logger.getLogger(SubmissionLookupUtils.class); + + /** Location of config file */ + private static final String configFilePath = ConfigurationManager + .getProperty("dspace.dir") + + File.separator + + "config" + + File.separator + "crosswalks" + File.separator; + + // Patter to extract the converter name if any + private static final Pattern converterPattern = Pattern + .compile(".*\\((.*)\\)"); + + public static LookupProvidersCheck getProvidersCheck(Context context, + Item item, String dcSchema, String dcElement, String dcQualifier) + { + try + { + LookupProvidersCheck check = new LookupProvidersCheck(); + MetadataSchema[] schemas = MetadataSchema.findAll(context); + DCValue[] values = item.getMetadata(dcSchema, dcElement, + dcQualifier, Item.ANY); + + for (MetadataSchema schema : schemas) + { + boolean error = false; + if (schema.getNamespace().startsWith( + SubmissionLookupService.SL_NAMESPACE_PREFIX)) + { + DCValue[] slCache = item.getMetadata(schema.getName(), + dcElement, dcQualifier, Item.ANY); + if (slCache.length == 0) + continue; + + if (slCache.length != values.length) + { + error = true; + } + else + { + for (int idx = 0; idx < values.length; idx++) + { + DCValue v = values[idx]; + DCValue sl = slCache[idx]; + // FIXME gestire authority e possibilita' multiple: + // match non sicuri, affiliation, etc. + if (!v.value.equals(sl.value)) + { + error = true; + break; + } + } + } + if (error) + { + check.getProvidersErr().add(schema.getName()); + } + else + { + check.getProvidersOk().add(schema.getName()); + } + } + } + return check; + } + catch (Exception e) + { + log.error(e.getMessage(), e); + throw new RuntimeException(e.getMessage(), e); + } + + } + + public static String normalizeDOI(String doi) + { + if (doi != null) + { + return doi.trim().replaceAll("^http://dx.doi.org/", "") + .replaceAll("^doi:", ""); + } + return null; + + } + + public static String getFirstValue(Record rec, String field) + { + List<Value> values = rec.getValues(field); + String value = null; + if (values != null && values.size() > 0) + { + value = values.get(0).getAsString(); + } + return value; + } + + public static List<String> getValues(Record rec, String field) + { + List<String> result = new ArrayList<String>(); + List<Value> values = rec.getValues(field); + if (values != null && values.size() > 0) + { + for (Value value : values) + { + result.add(value.getAsString()); + } + } + return result; + } + + public static String getPrintableString(Record record) + { + StringBuilder result = new StringBuilder(); + + result.append("\nPublication {\n"); + + for (String field : record.getFields()) + { + result.append("--" + field + ":\n"); + List<Value> values = record.getValues(field); + for (Value value : values) + { + result.append("\t" + value.getAsString() + "\n"); + } + } + + result.append("}\n"); + + return result.toString(); + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/ValueConcatenationModifier.java b/dspace-api/src/main/java/org/dspace/submit/lookup/ValueConcatenationModifier.java new file mode 100644 index 0000000..32f36f2 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/ValueConcatenationModifier.java @@ -0,0 +1,113 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.submit.lookup; + +import gr.ekt.bte.core.AbstractModifier; +import gr.ekt.bte.core.MutableRecord; +import gr.ekt.bte.core.Record; + +import gr.ekt.bte.core.StringValue; +import gr.ekt.bte.core.Value; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang.StringUtils; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class ValueConcatenationModifier extends AbstractModifier +{ + private String field; + + private String separator = ","; + + private boolean whitespaceAfter = true; + + public ValueConcatenationModifier() + { + super("ValueConcatenationModifier"); + } + + @Override + public Record modify(MutableRecord rec) + { + List<Value> values = rec.getValues(field); + if (values != null) + { + List<String> converted_values = new ArrayList<String>(); + for (Value val : values) + { + converted_values.add(val.getAsString()); + } + List<Value> final_value = new ArrayList<Value>(); + String v = StringUtils.join(converted_values.iterator(), separator + + (whitespaceAfter ? " " : "")); + final_value.add(new StringValue(v)); + rec.updateField(field, final_value); + } + + return rec; + } + + /** + * @return the field + */ + public String getField() + { + return field; + } + + /** + * @param field + * the field to set + */ + public void setField(String field) + { + this.field = field; + } + + /** + * @return the separator + */ + public String getSeparator() + { + return separator; + } + + /** + * @param separator + * the separator to set + */ + public void setSeparator(String separator) + { + this.separator = separator; + } + + /** + * @return the whiteSpaceAfter + */ + public boolean isWhitespaceAfter() + { + return whitespaceAfter; + } + + /** + * @param whiteSpaceAfter + * the whiteSpaceAfter to set + */ + public void setWhitespaceAfter(boolean whiteSpaceAfter) + { + this.whitespaceAfter = whiteSpaceAfter; + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/step/StartSubmissionLookupStep.java b/dspace-api/src/main/java/org/dspace/submit/step/StartSubmissionLookupStep.java new file mode 100644 index 0000000..efe4f2f --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/step/StartSubmissionLookupStep.java @@ -0,0 +1,311 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.submit.step; + +import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.TransformationEngine; +import gr.ekt.bte.core.TransformationSpec; +import gr.ekt.bte.exceptions.BadTransformationSpec; +import gr.ekt.bte.exceptions.MalformedSourceException; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.dspace.app.util.DCInputSet; +import org.dspace.app.util.DCInputsReader; +import org.dspace.app.util.SubmissionInfo; +import org.dspace.app.util.Util; +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.Collection; +import org.dspace.content.WorkspaceItem; +import org.dspace.core.Context; +import org.dspace.submit.AbstractProcessingStep; +import org.dspace.submit.lookup.DSpaceWorkspaceItemOutputGenerator; +import org.dspace.submit.lookup.SubmissionItemDataLoader; +import org.dspace.submit.lookup.SubmissionLookupService; +import org.dspace.submit.util.ItemSubmissionLookupDTO; +import org.dspace.submit.util.SubmissionLookupDTO; +import org.dspace.submit.util.SubmissionLookupPublication; +import org.dspace.utils.DSpace; + +/** + * StartSubmissionLookupStep is used when you want enabled the user to auto fill + * the item in submission with metadata retrieved from external bibliographic + * services (like pubmed, arxiv, and so on...) + * + * <p> + * At the moment this step is only available for JSPUI + * </p> + * + * @see org.dspace.app.util.SubmissionConfig + * @see org.dspace.app.util.SubmissionStepConfig + * @see org.dspace.submit.AbstractProcessingStep + * + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + * @version $Revision$ + */ +public class StartSubmissionLookupStep extends AbstractProcessingStep +{ + /*************************************************************************** + * STATUS / ERROR FLAGS (returned by doProcessing() if an error occurs or + * additional user interaction may be required) + * + * (Do NOT use status of 0, since it corresponds to STATUS_COMPLETE flag + * defined in the JSPStepManager class) + **************************************************************************/ + // no collection was selected + public static final int STATUS_NO_COLLECTION = 1; + + // invalid collection or error finding collection + public static final int STATUS_INVALID_COLLECTION = 2; + + public static final int STATUS_NO_SUUID = 3; + + public static final int STATUS_SUBMISSION_EXPIRED = 4; + + private SubmissionLookupService slService = new DSpace() + .getServiceManager().getServiceByName( + SubmissionLookupService.class.getCanonicalName(), + SubmissionLookupService.class); + + /** log4j logger */ + private static Logger log = Logger + .getLogger(StartSubmissionLookupStep.class); + + /** + * Do any processing of the information input by the user, and/or perform + * step processing (if no user interaction required) + * <P> + * It is this method's job to save any data to the underlying database, as + * necessary, and return error messages (if any) which can then be processed + * by the appropriate user interface (JSP-UI or XML-UI) + * <P> + * NOTE: If this step is a non-interactive step (i.e. requires no UI), then + * it should perform *all* of its processing in this method! + * + * @param context + * current DSpace context + * @param request + * current servlet request object + * @param response + * current servlet response object + * @param subInfo + * submission info object + * @return Status or error flag which will be processed by + * doPostProcessing() below! (if STATUS_COMPLETE or 0 is returned, + * no errors occurred!) + */ + public int doProcessing(Context context, HttpServletRequest request, + HttpServletResponse response, SubmissionInfo subInfo) + throws ServletException, IOException, SQLException, + AuthorizeException + { + // First we find the collection which was selected + int id = Util.getIntParameter(request, "collectionid"); + String titolo = request.getParameter("search_title"); + String date = request.getParameter("search_year"); + String autori = request.getParameter("search_authors"); + String uuidSubmission = request.getParameter("suuid"); + String uuidLookup = request.getParameter("iuuid"); + String fuuidLookup = request.getParameter("fuuid"); + + if (StringUtils.isBlank(uuidSubmission)) + { + return STATUS_NO_SUUID; + } + + SubmissionLookupDTO submissionDTO = slService.getSubmissionLookupDTO( + request, uuidSubmission); + + if (submissionDTO == null) + { + return STATUS_SUBMISSION_EXPIRED; + } + + ItemSubmissionLookupDTO itemLookup = null; + if (fuuidLookup == null || fuuidLookup.isEmpty()) + { + if (StringUtils.isNotBlank(uuidLookup)) + { + itemLookup = submissionDTO.getLookupItem(uuidLookup); + if (itemLookup == null) + { + return STATUS_SUBMISSION_EXPIRED; + } + } + } + // if the user didn't select a collection, + // send him/her back to "select a collection" page + if (id < 0) + { + return STATUS_NO_COLLECTION; + } + + // try to load the collection + Collection col = Collection.find(context, id); + + // Show an error if the collection is invalid + if (col == null) + { + return STATUS_INVALID_COLLECTION; + } + else + { + // create our new Workspace Item + DCInputSet inputSet = null; + try + { + inputSet = new DCInputsReader().getInputs(col.getHandle()); + } + catch (Exception e) + { + log.error(e.getMessage(), e); + throw new RuntimeException(e); + } + + List<ItemSubmissionLookupDTO> dto = new ArrayList<ItemSubmissionLookupDTO>(); + + if (itemLookup != null) + { + dto.add(itemLookup); + } + else if (fuuidLookup != null && !fuuidLookup.isEmpty()) + { + String[] ss = fuuidLookup.split(","); + for (String s : ss) + { + itemLookup = submissionDTO.getLookupItem(s); + if (itemLookup == null) + { + return STATUS_SUBMISSION_EXPIRED; + } + dto.add(itemLookup); + } + } + else + { + SubmissionLookupPublication manualPub = new SubmissionLookupPublication( + SubmissionLookupService.MANUAL_USER_INPUT); + manualPub.add("title", titolo); + manualPub.add("year", date); + manualPub.add("allauthors", autori); + + Enumeration e = request.getParameterNames(); + + while (e.hasMoreElements()) + { + String parameterName = (String) e.nextElement(); + String parameterValue = request.getParameter(parameterName); + + if (parameterName.startsWith("identifier_") + && StringUtils.isNotBlank(parameterValue)) + { + manualPub + .add(parameterName.substring("identifier_" + .length()), parameterValue); + } + } + List<Record> publications = new ArrayList<Record>(); + publications.add(manualPub); + dto.add(new ItemSubmissionLookupDTO(publications)); + + } + + List<WorkspaceItem> result = null; + + TransformationEngine transformationEngine = slService + .getPhase2TransformationEngine(); + if (transformationEngine != null) + { + SubmissionItemDataLoader dataLoader = (SubmissionItemDataLoader) transformationEngine + .getDataLoader(); + dataLoader.setDtoList(dto); + // dataLoader.setProviders() + + DSpaceWorkspaceItemOutputGenerator outputGenerator = (DSpaceWorkspaceItemOutputGenerator) transformationEngine + .getOutputGenerator(); + outputGenerator.setCollection(col); + outputGenerator.setContext(context); + outputGenerator.setFormName(inputSet.getFormName()); + outputGenerator.setDto(dto.get(0)); + + try + { + transformationEngine.transform(new TransformationSpec()); + result = outputGenerator.getWitems(); + } + catch (BadTransformationSpec e1) + { + e1.printStackTrace(); + } + catch (MalformedSourceException e1) + { + e1.printStackTrace(); + } + } + + if (result != null && result.size() > 0) + { + // update Submission Information with this Workspace Item + subInfo.setSubmissionItem(result.iterator().next()); + } + + // commit changes to database + context.commit(); + + // need to reload current submission process config, + // since it is based on the Collection selected + subInfo.reloadSubmissionConfig(request); + } + + slService.invalidateDTOs(request, uuidSubmission); + // no errors occurred + return STATUS_COMPLETE; + } + + /** + * Retrieves the number of pages that this "step" extends over. This method + * is used to build the progress bar. + * <P> + * This method may just return 1 for most steps (since most steps consist of + * a single page). But, it should return a number greater than 1 for any + * "step" which spans across a number of HTML pages. For example, the + * configurable "Describe" step (configured using input-forms.xml) overrides + * this method to return the number of pages that are defined by its + * configuration file. + * <P> + * Steps which are non-interactive (i.e. they do not display an interface to + * the user) should return a value of 1, so that they are only processed + * once! + * + * @param request + * The HTTP Request + * @param subInfo + * The current submission information object + * + * @return the number of pages in this step + */ + public int getNumberOfPages(HttpServletRequest request, + SubmissionInfo subInfo) throws ServletException + { + // there is always just one page in the "select a collection" step! + return 1; + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/util/ItemSubmissionLookupDTO.java b/dspace-api/src/main/java/org/dspace/submit/util/ItemSubmissionLookupDTO.java new file mode 100644 index 0000000..cb4cd64 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/util/ItemSubmissionLookupDTO.java @@ -0,0 +1,111 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.submit.util; + +import gr.ekt.bte.core.DataLoader; +import gr.ekt.bte.core.MutableRecord; +import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.Value; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; +import java.util.UUID; + +import org.dspace.submit.lookup.SubmissionLookupDataLoader; +import org.dspace.submit.lookup.SubmissionLookupService; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class ItemSubmissionLookupDTO implements Serializable +{ + private static final long serialVersionUID = 1; + + private static final String MERGED_PUBLICATION_PROVIDER = "merged"; + + private static final String UNKNOWN_PROVIDER_STRING = "UNKNOWN-PROVIDER"; + + private List<Record> publications; + + private String uuid; + + public ItemSubmissionLookupDTO(List<Record> publications) + { + this.uuid = UUID.randomUUID().toString(); + this.publications = publications; + } + + public List<Record> getPublications() + { + return publications; + } + + public Set<String> getProviders() + { + Set<String> orderedProviders = new LinkedHashSet<String>(); + for (Record p : publications) + { + orderedProviders.add(SubmissionLookupService.getProviderName(p)); + } + return orderedProviders; + } + + public String getUUID() + { + return uuid; + } + + public Record getTotalPublication(List<DataLoader> providers) + { + if (publications == null) + { + return null; + } + else if (publications.size() == 1) + { + return publications.get(0); + } + else + { + MutableRecord pub = new SubmissionLookupPublication( + MERGED_PUBLICATION_PROVIDER); + // for (SubmissionLookupProvider prov : providers) + // { + for (Record p : publications) + { + // if + // (!SubmissionLookupService.getProviderName(p).equals(prov.getShortName())) + // { + // continue; + // } + for (String field : p.getFields()) + { + List<Value> values = p.getValues(field); + if (values != null && values.size() > 0) + { + if (!pub.getFields().contains(field)) + { + for (Value v : values) + { + pub.addValue(field, v); + } + } + } + } + } + // } + return pub; + } + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/util/SubmissionLookupDTO.java b/dspace-api/src/main/java/org/dspace/submit/util/SubmissionLookupDTO.java new file mode 100644 index 0000000..599d7ec --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/util/SubmissionLookupDTO.java @@ -0,0 +1,52 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.submit.util; + +import java.io.Serializable; +import java.util.List; +import java.util.UUID; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class SubmissionLookupDTO implements Serializable +{ + private static final long serialVersionUID = 1; + + private String uuid; + + private List<ItemSubmissionLookupDTO> items; + + public SubmissionLookupDTO() + { + this.uuid = UUID.randomUUID().toString(); + } + + public void setItems(List<ItemSubmissionLookupDTO> items) + { + this.items = items; + } + + public ItemSubmissionLookupDTO getLookupItem(String uuidLookup) + { + if (items != null) + { + for (ItemSubmissionLookupDTO item : items) + { + if (item.getUUID().equals(uuidLookup)) + { + return item; + } + } + } + return null; + } +} diff --git a/dspace-api/src/main/java/org/dspace/submit/util/SubmissionLookupPublication.java b/dspace-api/src/main/java/org/dspace/submit/util/SubmissionLookupPublication.java new file mode 100644 index 0000000..5b6d287 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/submit/util/SubmissionLookupPublication.java @@ -0,0 +1,231 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.submit.util; + +import gr.ekt.bte.core.MutableRecord; +import gr.ekt.bte.core.StringValue; +import gr.ekt.bte.core.Value; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.lang.StringUtils; +import org.dspace.submit.lookup.SubmissionLookupDataLoader; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class SubmissionLookupPublication implements MutableRecord, Serializable +{ + private String providerName; + + private Map<String, List<String>> storage = new HashMap<String, List<String>>(); + + public SubmissionLookupPublication(String providerName) + { + this.providerName = providerName; + } + + // needed to serialize it with JSON + public Map<String, List<String>> getStorage() + { + return storage; + } + + public Set<String> getFields() + { + return storage.keySet(); + } + + public List<String> remove(String md) + { + return storage.remove(md); + } + + public void add(String md, String nValue) + { + if (StringUtils.isNotBlank(nValue)) + { + List<String> tmp = storage.get(md); + if (tmp == null) + { + tmp = new ArrayList<String>(); + storage.put(md, tmp); + } + tmp.add(nValue); + } + } + + public String getFirstValue(String md) + { + List<String> tmp = storage.get(md); + if (tmp == null || tmp.size() == 0) + { + return null; + } + return tmp.get(0); + } + + public String getProviderName() + { + return providerName; + } + + public String getType() + { + return getFirstValue(SubmissionLookupDataLoader.TYPE); + } + + // BTE Record interface methods + @Override + public boolean hasField(String md) + { + return storage.containsKey(md); + } + + @Override + public List<Value> getValues(String md) + { + List<String> stringValues = storage.get(md); + if (stringValues == null) + { + return null; + } + List<Value> values = new ArrayList<Value>(); + for (String value : stringValues) + { + values.add(new StringValue(value)); + } + return values; + } + + @Override + public boolean isMutable() + { + return true; + } + + @Override + public MutableRecord makeMutable() + { + return this; + } + + @Override + public boolean addField(String md, List<Value> values) + { + if (storage.containsKey(md)) + { + List<String> stringValues = storage.get(md); + if (values != null) + { + for (Value value : values) + { + stringValues.add(value.getAsString()); + } + } + } + else + { + List<String> tmp = new ArrayList<String>(); + if (values != null) + { + for (Value value : values) + { + tmp.add(value.getAsString()); + } + } + storage.put(md, tmp); + } + + return true; + } + + @Override + public boolean addValue(String md, Value value) + { + if (storage.containsKey(md)) + { + List<String> stringValues = storage.get(md); + stringValues.add(value.getAsString()); + } + else + { + List<String> tmp = new ArrayList<String>(); + tmp.add(value.getAsString()); + + storage.put(md, tmp); + } + + return true; + } + + @Override + public boolean removeField(String md) + { + if (storage.containsKey(md)) + { + storage.remove(md); + } + return false; + } + + @Override + public boolean removeValue(String md, Value value) + { + if (storage.containsKey(md)) + { + List<String> stringValues = storage.get(md); + stringValues.remove(value.getAsString()); + } + return true; + } + + @Override + public boolean updateField(String md, List<Value> values) + { + List<String> stringValues = new ArrayList<String>(); + for (Value value : values) + { + stringValues.add(value.getAsString()); + } + storage.put(md, stringValues); + + return true; + } + + @Override + public boolean updateValue(String md, Value valueOld, Value valueNew) + { + if (storage.containsKey(md)) + { + List<String> stringValues = storage.get(md); + List<String> newStringValues = storage.get(md); + for (String s : stringValues) + { + if (s.equals(valueOld.getAsString())) + { + newStringValues.add(valueNew.getAsString()); + } + else + { + newStringValues.add(s); + } + } + storage.put(md, newStringValues); + } + return true; + } +} diff --git a/dspace-api/src/main/resources/maven.properties b/dspace-api/src/main/resources/maven.properties new file mode 100644 index 0000000..d256fe2 --- /dev/null +++ b/dspace-api/src/main/resources/maven.properties @@ -0,0 +1,9 @@ +# +# The contents of this file are subject to the license and copyright +# detailed in the LICENSE and NOTICE files at the root of the source +# tree and available online at +# +# http://www.dspace.org/license/ +# + +maven.version = ${maven.version} diff --git a/dspace-api/src/main/resources/scm.properties b/dspace-api/src/main/resources/scm.properties new file mode 100644 index 0000000..319ff3a --- /dev/null +++ b/dspace-api/src/main/resources/scm.properties @@ -0,0 +1,10 @@ +# +# The contents of this file are subject to the license and copyright +# detailed in the LICENSE and NOTICE files at the root of the source +# tree and available online at +# +# http://www.dspace.org/license/ +# + +revision = ${buildNumber} +branch = ${scmBranch} diff --git a/dspace-api/src/main/resources/spring/spring-dspace-addon-requestitem-services.xml b/dspace-api/src/main/resources/spring/spring-dspace-addon-requestitem-services.xml new file mode 100644 index 0000000..c7e5c6f --- /dev/null +++ b/dspace-api/src/main/resources/spring/spring-dspace-addon-requestitem-services.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:context="http://www.springframework.org/schema/context" + xsi:schemaLocation="http://www.springframework.org/schema/beans + http://www.springframework.org/schema/beans/spring-beans-2.5.xsd + http://www.springframework.org/schema/context + http://www.springframework.org/schema/context/spring-context-2.5.xsd" + default-autowire-candidates="*Service,*DAO,javax.sql.DataSource"> + + <context:annotation-config /> <!-- allows us to use spring annotations in beans --> + + <bean class="org.dspace.app.requestitem.RequestItemMetadataStrategy" + id="org.dspace.app.requestitem.RequestItemAuthorExtractor"> + <!-- + Uncomment these properties if you want lookup in metadata the email and the name of the author to contact for request copy. + If you don't configure that or if the requested item doesn't have these metadata the submitter data are used as fail over + + <property name="emailMetadata" value="schema.element.qualifier" /> + <property name="fullNameMatadata" value="schema.element.qualifier" /> + + --> + </bean> + +</beans> diff --git a/dspace-api/src/main/resources/spring/spring-dspace-addon-sherpa-configuration-services.xml b/dspace-api/src/main/resources/spring/spring-dspace-addon-sherpa-configuration-services.xml new file mode 100644 index 0000000..00bf02a --- /dev/null +++ b/dspace-api/src/main/resources/spring/spring-dspace-addon-sherpa-configuration-services.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:context="http://www.springframework.org/schema/context" + xsi:schemaLocation="http://www.springframework.org/schema/beans + http://www.springframework.org/schema/beans/spring-beans-2.5.xsd + http://www.springframework.org/schema/context + http://www.springframework.org/schema/context/spring-context-2.5.xsd" + default-autowire-candidates="*Service,*DAO,javax.sql.DataSource"> + + <context:annotation-config /> <!-- allows us to use spring annotations in beans --> + + <bean class="org.dspace.app.sherpa.submit.SHERPASubmitConfigurationService" + id="org.dspace.app.sherpa.submit.SHERPASubmitConfigurationService"> + <property name="issnItemExtractors"> + <list> + <bean class="org.dspace.app.sherpa.submit.MetadataValueISSNExtractor"> + <property name="metadataList"> + <list> + <value>dc.identifier.issn</value> + </list> + </property> + </bean> + <!-- Use the follow if you have the SHERPARoMEOJournalTitle enabled + <bean class="org.dspace.app.sherpa.submit.MetadataAuthorityISSNExtractor"> + <property name="metadataList"> + <list> + <value>dc.title.alternative</value> + </list> + </property> + </bean> --> + </list> + </property> + </bean> + +</beans> diff --git a/dspace-api/src/main/resources/spring/spring-dspace-addon-sherpa-services.xml b/dspace-api/src/main/resources/spring/spring-dspace-addon-sherpa-services.xml new file mode 100644 index 0000000..e43be6b --- /dev/null +++ b/dspace-api/src/main/resources/spring/spring-dspace-addon-sherpa-services.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:context="http://www.springframework.org/schema/context" + xsi:schemaLocation="http://www.springframework.org/schema/beans + http://www.springframework.org/schema/beans/spring-beans-2.5.xsd + http://www.springframework.org/schema/context + http://www.springframework.org/schema/context/spring-context-2.5.xsd" + default-autowire-candidates="*Service,*DAO,javax.sql.DataSource"> + + <context:annotation-config /> <!-- allows us to use spring annotations in beans --> + + <bean class="org.dspace.app.sherpa.SHERPAService" id="org.dspace.app.sherpa.SHERPAService"/> + + <bean class="org.dspace.app.sherpa.submit.SHERPASubmitService" id="org.dspace.app.sherpa.submit.SHERPASubmitService"> + <property name="sherpaService" ref="org.dspace.app.sherpa.SHERPAService" /> + <property name="configuration" ref="org.dspace.app.sherpa.submit.SHERPASubmitConfigurationService" /> + </bean> +</beans> diff --git a/dspace-api/src/test/data/dspaceFolder/config/spiders/agents/dspace-agents-testing.txt b/dspace-api/src/test/data/dspaceFolder/config/spiders/agents/dspace-agents-testing.txt new file mode 100644 index 0000000..74ba3c3 --- /dev/null +++ b/dspace-api/src/test/data/dspaceFolder/config/spiders/agents/dspace-agents-testing.txt @@ -0,0 +1 @@ +^msnbot diff --git a/dspace-api/src/test/data/dspaceFolder/config/spiders/domains/dspace-domains-testing.txt b/dspace-api/src/test/data/dspaceFolder/config/spiders/domains/dspace-domains-testing.txt new file mode 100644 index 0000000..e6d36e1 --- /dev/null +++ b/dspace-api/src/test/data/dspaceFolder/config/spiders/domains/dspace-domains-testing.txt @@ -0,0 +1 @@ +^baiduspider-.*\.crawl\.baidu\.com diff --git a/dspace-api/src/test/data/dspaceFolder/config/spiders/dspace-address-testing.txt b/dspace-api/src/test/data/dspaceFolder/config/spiders/dspace-address-testing.txt new file mode 100644 index 0000000..63dd175 --- /dev/null +++ b/dspace-api/src/test/data/dspaceFolder/config/spiders/dspace-address-testing.txt @@ -0,0 +1,2 @@ +# For testing +192.168.2.1 diff --git a/dspace-api/src/test/java/org/dspace/discovery/MockIndexEventConsumer.java b/dspace-api/src/test/java/org/dspace/discovery/MockIndexEventConsumer.java new file mode 100644 index 0000000..3d212b2 --- /dev/null +++ b/dspace-api/src/test/java/org/dspace/discovery/MockIndexEventConsumer.java @@ -0,0 +1,41 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.discovery; + +import mockit.Mock; +import mockit.MockClass; +import org.dspace.core.Context; +import org.dspace.event.Event; + +/** + * Dummy Discovery IndexEventConsumer. It essentially does nothing, + * as Discovery/Solr is not actively running during unit testing. + * + * @author tdonohue + */ +@MockClass(realClass=IndexEventConsumer.class) +public class MockIndexEventConsumer { + + //public void initialize() throws Exception { + //do nothing + //} + + @Mock + public void consume(Context ctx, Event event) throws Exception { + //do nothing - Solr is not running during unit testing, so we cannot index test content in Solr + } + + @Mock + public void end(Context ctx) throws Exception { + //do nothing - Solr is not running during unit testing, so we cannot index test content in Solr + } + + //public void finish(Context ctx) throws Exception { + //do nothing + //} +} diff --git a/dspace-api/src/test/java/org/dspace/identifier/DOIIdentifierProviderTest.java b/dspace-api/src/test/java/org/dspace/identifier/DOIIdentifierProviderTest.java new file mode 100644 index 0000000..4f4593e --- /dev/null +++ b/dspace-api/src/test/java/org/dspace/identifier/DOIIdentifierProviderTest.java @@ -0,0 +1,711 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.identifier; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Random; +import org.dspace.AbstractUnitTest; +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.*; +import org.dspace.core.Context; +import org.dspace.kernel.ServiceManager; +import org.dspace.services.ConfigurationService; +import org.dspace.storage.rdbms.DatabaseManager; +import org.dspace.storage.rdbms.TableRow; +import org.dspace.workflow.WorkflowItem; +import org.dspace.workflow.WorkflowManager; +import org.junit.*; +import static org.junit.Assert.*; +import static org.junit.Assume.*; + +/** +* Tests for {@link DataCiteIdentifierProvider}. +* +* @author Mark H. Wood +* @author Pascal-Nicolas Becker +*/ +public class DOIIdentifierProviderTest + extends AbstractUnitTest +{ + private static final String PREFIX = "10.5072"; + private static final String NAMESPACE_SEPARATOR = "dspaceUnitTests-"; + + private static ServiceManager sm = null; + private static ConfigurationService config = null; + + private static Community community; + private static Collection collection; + + private static MockDOIConnector connector; + private DOIIdentifierProvider provider; + + /** The most recently created test Item's ID */ + private static int itemID; + + public DOIIdentifierProviderTest() + { + } + + private static void dumpMetadata(Item eyetem) + { + DCValue[] metadata = eyetem.getMetadata("dc", Item.ANY, Item.ANY, Item.ANY); + for (DCValue metadatum : metadata) + System.out.printf("Metadata: %s.%s.%s(%s) = %s\n", + metadatum.schema, + metadatum.element, + metadatum.qualifier, + metadatum.language, + metadatum.value); + } + + /** + * Create a fresh Item, installed in the repository. + * + * @throws SQLException + * @throws AuthorizeException + * @throws IOException + */ + private Item newItem(Context ctx) + throws SQLException, AuthorizeException, IOException + { + ctx.turnOffAuthorisationSystem(); + ctx.setCurrentUser(eperson); + + WorkspaceItem wsItem = WorkspaceItem.create(ctx, collection, false); + + WorkflowItem wfItem = WorkflowManager.start(ctx, wsItem); + WorkflowManager.advance(ctx, wfItem, ctx.getCurrentUser()); + + Item item = wfItem.getItem(); + item.addMetadata("dc", "contributor", "author", null, "Author, A. N."); + item.addMetadata("dc", "title", null, null, "A Test Object"); + item.addMetadata("dc", "publisher", null, null, "DSpace Test Harness"); + + // If DOIIdentifierProvider is configured + // (dspace/conf/spring/api/identifier-service.xml) the new created item + // gets automatically a DOI. We remove this DOI as it can make problems + // with the tests. + String sql = "DELETE FROM Doi WHERE resource_type_id = ? AND resource_id = ?"; + DatabaseManager.updateQuery(context, sql, item.getType(), item.getID()); + + DCValue[] metadata = item.getMetadata( + DOIIdentifierProvider.MD_SCHEMA, + DOIIdentifierProvider.DOI_ELEMENT, + DOIIdentifierProvider.DOI_QUALIFIER, + null); + List<String> remainder = new ArrayList<String>(); + + for (DCValue id : metadata) + { + if (!id.value.startsWith(DOI.RESOLVER)) + { + remainder.add(id.value); + } + } + + item.clearMetadata( + DOIIdentifierProvider.MD_SCHEMA, + DOIIdentifierProvider.DOI_ELEMENT, + DOIIdentifierProvider.DOI_QUALIFIER, + null); + item.addMetadata(DOIIdentifierProvider.MD_SCHEMA, + DOIIdentifierProvider.DOI_ELEMENT, + DOIIdentifierProvider.DOI_QUALIFIER, + null, + remainder.toArray(new String[remainder.size()])); + + item.update(); + ctx.commit(); + ctx.restoreAuthSystemState(); + + return item; + } + + public String createDOI(Item item, Integer status, boolean metadata) + throws SQLException, IdentifierException, AuthorizeException + { + return this.createDOI(item, status, metadata, null); + } + + /** + * Create a DOI to an item. + * @param item Item the DOI should be created for. + * @param status The status of the DOI. + * @param metadata Whether the DOI should be included in the metadata of the item. + * @param doi The doi or null if we should generate one. + * @return the DOI + * @throws SQLException + */ + public String createDOI(Item item, Integer status, boolean metadata, String doi) + throws SQLException, IdentifierException, AuthorizeException + { + // we need some random data. UUIDs would be bloated here + Random random = new Random(); + if (null == doi) + { + doi = DOI.SCHEME + PREFIX + "/" + NAMESPACE_SEPARATOR + + Long.toHexString(new Date().getTime()) + "-" + + random.nextInt(997); + } + + TableRow doiRow = DatabaseManager.create(context, "Doi"); + doiRow.setColumn("doi", doi.substring(DOI.SCHEME.length())); + doiRow.setColumn("resource_type_id", item.getType()); + doiRow.setColumn("resource_id", item.getID()); + if (status == null) + { + doiRow.setColumnNull("status"); + } + else + { + doiRow.setColumn("status", status); + } + assumeTrue(1 == DatabaseManager.update(context, doiRow)); + + if (metadata) + { + item.addMetadata(DOIIdentifierProvider.MD_SCHEMA, + DOIIdentifierProvider.DOI_ELEMENT, + DOIIdentifierProvider.DOI_QUALIFIER, + null, + DOI.DOIToExternalForm(doi)); + item.update(); + } + + context.commit(); + return doi; + } + + @BeforeClass + public static void setUpClass() + throws Exception + { + // Find the usual kernel services + sm = kernelImpl.getServiceManager(); + Context ctx = new Context(); + + ctx.turnOffAuthorisationSystem(); + ctx.setCurrentUser(eperson); + // Create an environment for our test objects to live in. + community = Community.create(null, ctx); + community.setMetadata("name", "A Test Community"); + community.update(); + collection = community.createCollection(); + collection.setMetadata("name", "A Test Collection"); + collection.update(); + ctx.complete(); + + config = kernelImpl.getConfigurationService(); + // Configure the service under test. + config.setProperty(DOIIdentifierProvider.CFG_PREFIX, PREFIX); + config.setProperty(DOIIdentifierProvider.CFG_NAMESPACE_SEPARATOR, + NAMESPACE_SEPARATOR); + // Don't try to send mail. + config.setProperty("mail.server.disabled", "true"); + + connector = new MockDOIConnector(); + } + + @AfterClass + public static void tearDownClass() + throws Exception + { + /* + System.out.print("Tearing down\n\n"); + Context ctx = new Context(); + dumpMetadata(Item.find(ctx, itemID)); + */ + } + + @Before + public void setUp() + { + context.setCurrentUser(eperson); + context.turnOffAuthorisationSystem(); + + provider = new DOIIdentifierProvider(); + provider.setConfigurationService(config); + provider.setDOIConnector(connector); + } + + @After + public void tearDown() + { + context.restoreAuthSystemState(); + connector.reset(); + } + + /** + * Test of supports method, of class DataCiteIdentifierProvider. + */ + @Test + public void testSupports_Class() + { + Class<? extends Identifier> identifier = DOI.class; + assertTrue("DOI should be supported", provider.supports(identifier)); + } + + @Test + public void testSupports_valid_String() + { + String[] validDOIs = new String[] + { + "10.5072/123abc-lkj/kljl", + PREFIX + "/" + NAMESPACE_SEPARATOR + "lkjljasd1234", + DOI.SCHEME + "10.5072/123abc-lkj/kljl", + "http://dx.doi.org/10.5072/123abc-lkj/kljl", + DOI.RESOLVER + "/10.5072/123abc-lkj/kljl" + }; + + for (String doi : validDOIs) + { + assertTrue("DOI should be supported", provider.supports(doi)); + } + } + + @Test + public void testDoes_not_support_invalid_String() + { + String[] invalidDOIs = new String[] + { + "11.5072/123abc-lkj/kljl", + "http://hdl.handle.net/handle/10.5072/123abc-lkj/kljl", + "", + null + }; + + for (String notADoi : invalidDOIs) + { + assertFalse("Invalid DOIs shouldn't be supported", + provider.supports(notADoi)); + } + } + + @Test + public void testStore_DOI_as_item_metadata() + throws SQLException, AuthorizeException, IOException, IdentifierException + { + Item item = newItem(context); + String doi = DOI.SCHEME + PREFIX + "/" + NAMESPACE_SEPARATOR + + Long.toHexString(new Date().getTime()); + provider.saveDOIToObject(context, item, doi); + + DCValue[] metadata = item.getMetadata(DOIIdentifierProvider.MD_SCHEMA, + DOIIdentifierProvider.DOI_ELEMENT, + DOIIdentifierProvider.DOI_QUALIFIER, + null); + boolean result = false; + for (DCValue id : metadata) + { + if (id.value.equals(DOI.DOIToExternalForm(doi))) + { + result = true; + } + } + assertTrue("Cannot store DOI as item metadata value.", result); + } + + @Test + public void testGet_DOI_out_of_item_metadata() + throws SQLException, AuthorizeException, IOException, IdentifierException + { + Item item = newItem(context); + String doi = DOI.SCHEME + PREFIX + "/" + NAMESPACE_SEPARATOR + + Long.toHexString(new Date().getTime()); + + item.addMetadata(DOIIdentifierProvider.MD_SCHEMA, + DOIIdentifierProvider.DOI_ELEMENT, + DOIIdentifierProvider.DOI_QUALIFIER, + null, + DOI.DOIToExternalForm(doi)); + item.update(); + context.commit(); + + assertTrue("Failed to recognize DOI in item metadata.", + doi.equals(DOIIdentifierProvider.getDOIOutOfObject(item))); + } + + @Test + public void testRemove_DOI_from_item_metadata() + throws SQLException, AuthorizeException, IOException, IdentifierException + { + Item item = newItem(context); + String doi = DOI.SCHEME + PREFIX + "/" + NAMESPACE_SEPARATOR + + Long.toHexString(new Date().getTime()); + + item.addMetadata(DOIIdentifierProvider.MD_SCHEMA, + DOIIdentifierProvider.DOI_ELEMENT, + DOIIdentifierProvider.DOI_QUALIFIER, + null, + DOI.DOIToExternalForm(doi)); + item.update(); + context.commit(); + + provider.removeDOIFromObject(context, item, doi); + + DCValue[] metadata = item.getMetadata(DOIIdentifierProvider.MD_SCHEMA, + DOIIdentifierProvider.DOI_ELEMENT, + DOIIdentifierProvider.DOI_QUALIFIER, + null); + boolean foundDOI = false; + for (DCValue id : metadata) + { + if (id.value.equals(DOI.DOIToExternalForm(doi))) + { + foundDOI = true; + } + } + assertFalse("Cannot remove DOI from item metadata.", foundDOI); + } + + @Test + public void testGet_DOI_by_DSpaceObject() + throws SQLException, AuthorizeException, IOException, + IllegalArgumentException, IdentifierException + { + Item item = newItem(context); + String doi = this.createDOI(item, DOIIdentifierProvider.IS_REGISTERED, false); + + String retrievedDOI = DOIIdentifierProvider.getDOIByObject(context, item); + + assertNotNull("Failed to load DOI by DSpaceObject.", retrievedDOI); + assertTrue("Loaded wrong DOI by DSpaceObject.", doi.equals(retrievedDOI)); + } + + @Test + public void testGet_DOI_lookup() + throws SQLException, AuthorizeException, IOException, + IllegalArgumentException, IdentifierException + { + Item item = newItem(context); + String doi = this.createDOI(item, DOIIdentifierProvider.IS_REGISTERED, false); + + String retrievedDOI = provider.lookup(context, (DSpaceObject) item); + + assertNotNull("Failed to loookup doi.", retrievedDOI); + assertTrue("Loaded wrong DOI on lookup.", doi.equals(retrievedDOI)); + } + + @Test + public void testGet_DSpaceObject_by_DOI() + throws SQLException, AuthorizeException, IOException, + IllegalArgumentException, IdentifierException + { + Item item = newItem(context); + String doi = this.createDOI(item, DOIIdentifierProvider.IS_REGISTERED, false); + + DSpaceObject dso = DOIIdentifierProvider.getObjectByDOI(context, doi); + + assertNotNull("Failed to load DSpaceObject by DOI.", dso); + if (item.getType() != dso.getType() || item.getID() != dso.getID()) + { + fail("Object loaded by DOI was another object then expected!"); + } + } + + @Test + public void testResolve_DOI() + throws SQLException, AuthorizeException, IOException, + IllegalArgumentException, IdentifierException + { + Item item = newItem(context); + String doi = this.createDOI(item, DOIIdentifierProvider.IS_REGISTERED, false); + + DSpaceObject dso = provider.resolve(context, doi); + + assertNotNull("Failed to resolve DOI.", dso); + if (item.getType() != dso.getType() || item.getID() != dso.getID()) + { + fail("Object return by DOI lookup was another object then expected!"); + } + } + + /* + * The following test seems a bit silly, but it was helpful to debug some + * problems while deleting DOIs. + */ + @Test + public void testRemove_two_DOIs_from_item_metadata() + throws SQLException, AuthorizeException, IOException, IdentifierException + { + // add two DOIs. + Item item = newItem(context); + String doi1 = this.createDOI(item, DOIIdentifierProvider.IS_REGISTERED, true); + String doi2 = this.createDOI(item, DOIIdentifierProvider.IS_REGISTERED, true); + + // remove one of it + provider.removeDOIFromObject(context, item, doi1); + + // assure that the right one was removed + DCValue[] metadata = item.getMetadata(DOIIdentifierProvider.MD_SCHEMA, + DOIIdentifierProvider.DOI_ELEMENT, + DOIIdentifierProvider.DOI_QUALIFIER, + null); + boolean foundDOI1 = false; + boolean foundDOI2 = false; + for (DCValue id : metadata) + { + if (id.value.equals(DOI.DOIToExternalForm(doi1))) + { + foundDOI1 = true; + } + if (id.value.equals(DOI.DOIToExternalForm(doi2))) + { + foundDOI2 = true; + } + + } + assertFalse("Cannot remove DOI from item metadata.", foundDOI1); + assertTrue("Removed wrong DOI from item metadata.", foundDOI2); + + // remove the otherone as well. + provider.removeDOIFromObject(context, item, doi2); + + // check it + metadata = item.getMetadata(DOIIdentifierProvider.MD_SCHEMA, + DOIIdentifierProvider.DOI_ELEMENT, + DOIIdentifierProvider.DOI_QUALIFIER, + null); + foundDOI1 = false; + foundDOI2 = false; + for (DCValue id : metadata) + { + if (id.value.equals(DOI.DOIToExternalForm(doi1))) + { + foundDOI1 = true; + } + if (id.value.equals(DOI.DOIToExternalForm(doi2))) + { + foundDOI2 = true; + } + + } + assertFalse("Cannot remove DOI from item metadata.", foundDOI1); + assertFalse("Cannot remove DOI from item metadata.", foundDOI2); + } + + @Test + public void testMintDOI() throws SQLException, AuthorizeException, IOException + { + Item item = newItem(context); + String doi = null; + try + { + // get a DOI: + doi = provider.mint(context, item); + } + catch(IdentifierException e) + { + e.printStackTrace(); + fail("Got an IdentifierException: " + e.getMessage()); + } + + assertNotNull("Minted DOI is null!", doi); + assertFalse("Minted DOI is empty!", doi.isEmpty()); + + try + { + DOI.formatIdentifier(doi); + } + catch (Exception e) + { + e.printStackTrace(); + fail("Minted an unrecognizable DOI: " + e.getMessage()); + } + } + + @Test + public void testMint_returns_existing_DOI() + throws SQLException, AuthorizeException, IOException, IdentifierException + { + Item item = newItem(context); + String doi = this.createDOI(item, null, true); + + String retrievedDOI = provider.mint(context, item); + + assertNotNull("Minted DOI is null?!", retrievedDOI); + assertTrue("Mint did not returned an existing DOI!", doi.equals(retrievedDOI)); + } + + @Test + public void testReserve_DOI() + throws SQLException, SQLException, AuthorizeException, IOException, + IdentifierException + { + Item item = newItem(context); + String doi = this.createDOI(item, null, true); + + provider.reserve(context, item, doi); + + TableRow doiRow = DatabaseManager.findByUnique(context, "Doi", "doi", + doi.substring(DOI.SCHEME.length())); + assumeNotNull(doiRow); + + assertTrue("Reservation of DOI did not set the corret DOI status.", + DOIIdentifierProvider.TO_BE_RESERVERED.intValue() == doiRow.getIntColumn("status")); + } + + @Test + public void testRegister_unreserved_DOI() + throws SQLException, SQLException, AuthorizeException, IOException, + IdentifierException + { + Item item = newItem(context); + String doi = this.createDOI(item, null, true); + + provider.register(context, item, doi); + + TableRow doiRow = DatabaseManager.findByUnique(context, "Doi", "doi", + doi.substring(DOI.SCHEME.length())); + assumeNotNull(doiRow); + + assertTrue("Registration of DOI did not set the corret DOI status.", + DOIIdentifierProvider.TO_BE_REGISTERED.intValue() == doiRow.getIntColumn("status")); + } + + @Test + public void testRegister_reserved_DOI() + throws SQLException, SQLException, AuthorizeException, IOException, + IdentifierException + { + Item item = newItem(context); + String doi = this.createDOI(item, DOIIdentifierProvider.IS_RESERVED, true); + + provider.register(context, item, doi); + + TableRow doiRow = DatabaseManager.findByUnique(context, "Doi", "doi", + doi.substring(DOI.SCHEME.length())); + assumeNotNull(doiRow); + + assertTrue("Registration of DOI did not set the corret DOI status.", + DOIIdentifierProvider.TO_BE_REGISTERED.intValue() == doiRow.getIntColumn("status")); + } + + @Test + public void testCreate_and_Register_DOI() + throws SQLException, SQLException, AuthorizeException, IOException, + IdentifierException + { + Item item = newItem(context); + + String doi = provider.register(context, item); + + // we want the created DOI to be returned in the following format: + // doi:10.<prefix>/<suffix>. + String formated_doi = DOI.formatIdentifier(doi); + assertTrue("DOI was not in the expected format!", doi.equals(formated_doi)); + + TableRow doiRow = DatabaseManager.findByUnique(context, "Doi", "doi", + doi.substring(DOI.SCHEME.length())); + assertNotNull("Created DOI was not stored in database.", doiRow); + + assertTrue("Registration of DOI did not set the corret DOI status.", + DOIIdentifierProvider.TO_BE_REGISTERED.intValue() == doiRow.getIntColumn("status")); + } + + @Test + public void testDelete_specified_DOI() + throws SQLException, AuthorizeException, IOException, IdentifierException + { + Item item = newItem(context); + String doi1 = this.createDOI(item, DOIIdentifierProvider.IS_REGISTERED, true); + String doi2 = this.createDOI(item, DOIIdentifierProvider.IS_REGISTERED, true); + + // remove one of it + provider.delete(context, item, doi1); + + // assure that the right one was removed + DCValue[] metadata = item.getMetadata(DOIIdentifierProvider.MD_SCHEMA, + DOIIdentifierProvider.DOI_ELEMENT, + DOIIdentifierProvider.DOI_QUALIFIER, + null); + boolean foundDOI1 = false; + boolean foundDOI2 = false; + for (DCValue id : metadata) + { + if (id.value.equals(DOI.DOIToExternalForm(doi1))) + { + foundDOI1 = true; + } + if (id.value.equals(DOI.DOIToExternalForm(doi2))) + { + foundDOI2 = true; + } + } + assertFalse("Cannot remove DOI from item metadata.", foundDOI1); + assertTrue("Removed wrong DOI from item metadata.", foundDOI2); + + TableRow doiRow1 = DatabaseManager.findByUnique(context, "Doi", "doi", + doi1.substring(DOI.SCHEME.length())); + assumeNotNull(doiRow1); + assertTrue("Status of deleted DOI was not set correctly.", + DOIIdentifierProvider.TO_BE_DELETED.intValue() == doiRow1.getIntColumn("status")); + + TableRow doiRow2 = DatabaseManager.findByUnique(context, "Doi", "doi", + doi2.substring(DOI.SCHEME.length())); + assumeNotNull(doiRow2); + assertTrue("While deleting a DOI the status of another changed.", + DOIIdentifierProvider.IS_REGISTERED.intValue() == doiRow2.getIntColumn("status")); + } + + @Test + public void testDelete_all_DOIs() + throws SQLException, AuthorizeException, IOException, IdentifierException + { + Item item = newItem(context); + String doi1 = this.createDOI(item, DOIIdentifierProvider.IS_REGISTERED, true); + String doi2 = this.createDOI(item, DOIIdentifierProvider.IS_REGISTERED, true); + + // remove one of it + provider.delete(context, item); + + // assure that the right one was removed + DCValue[] metadata = item.getMetadata(DOIIdentifierProvider.MD_SCHEMA, + DOIIdentifierProvider.DOI_ELEMENT, + DOIIdentifierProvider.DOI_QUALIFIER, + null); + boolean foundDOI1 = false; + boolean foundDOI2 = false; + for (DCValue id : metadata) + { + if (id.value.equals(DOI.DOIToExternalForm(doi1))) + { + foundDOI1 = true; + } + if (id.value.equals(DOI.DOIToExternalForm(doi2))) + { + foundDOI2 = true; + } + } + assertFalse("Cannot remove DOI from item metadata.", foundDOI1); + assertFalse("Did not removed all DOIs from item metadata.", foundDOI2); + + TableRow doiRow1 = DatabaseManager.findByUnique(context, "Doi", "doi", + doi1.substring(DOI.SCHEME.length())); + assumeNotNull(doiRow1); + assertTrue("Status of deleted DOI was not set correctly.", + DOIIdentifierProvider.TO_BE_DELETED.intValue() == doiRow1.getIntColumn("status")); + + TableRow doiRow2 = DatabaseManager.findByUnique(context, "Doi", "doi", + doi1.substring(DOI.SCHEME.length())); + assumeNotNull(doiRow2); + assertTrue("Did not set the status of all deleted DOIs as expected.", + DOIIdentifierProvider.TO_BE_DELETED.intValue() == doiRow2.getIntColumn("status")); + } + + + // test the following methods using the MockDOIConnector. + // updateMetadataOnline + // registerOnline + // reserveOnline + +} \ No newline at end of file diff --git a/dspace-api/src/test/java/org/dspace/identifier/EZIDIdentifierProviderTest.java b/dspace-api/src/test/java/org/dspace/identifier/EZIDIdentifierProviderTest.java new file mode 100644 index 0000000..54d7101 --- /dev/null +++ b/dspace-api/src/test/java/org/dspace/identifier/EZIDIdentifierProviderTest.java @@ -0,0 +1,411 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.identifier; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.UUID; +import org.dspace.AbstractUnitTest; +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.*; +import org.dspace.core.Context; +import org.dspace.kernel.ServiceManager; +import org.dspace.services.ConfigurationService; +import org.dspace.workflow.WorkflowItem; +import org.dspace.workflow.WorkflowManager; +import org.junit.*; +import static org.junit.Assert.*; + +/** + * + * @author mwood + */ +public class EZIDIdentifierProviderTest + extends AbstractUnitTest +{ + /** Name of the reserved EZID test authority */ + private static final String TEST_SHOULDER = "10.5072/FK2"; + + private static ServiceManager sm = null; + + private static ConfigurationService config = null; + + private static Community community; + + private static Collection collection; + + /** The most recently created test Item's ID */ + private static int itemID; + + public EZIDIdentifierProviderTest() + { + } + + private static void dumpMetadata(Item eyetem) + { + DCValue[] metadata = eyetem.getMetadata("dc", Item.ANY, Item.ANY, Item.ANY); + for (DCValue metadatum : metadata) + System.out.printf("Metadata: %s.%s.%s(%s) = %s\n", + metadatum.schema, + metadatum.element, + metadatum.qualifier, + metadatum.language, + metadatum.value); + } + + /** + * Create a fresh Item, installed in the repository. + * + * @throws SQLException + * @throws AuthorizeException + * @throws IOException + */ + private Item newItem(Context ctx) + throws SQLException, AuthorizeException, IOException + { + ctx.turnOffAuthorisationSystem(); + ctx.setCurrentUser(eperson); + + // Create an Item to play with + WorkspaceItem wsItem = WorkspaceItem.create(ctx, collection, false); + + // Get it from the workspace and set some metadata + Item item = wsItem.getItem(); + itemID = item.getID(); + + item.addMetadata("dc", "contributor", "author", null, "Author, A. N."); + item.addMetadata("dc", "title", null, null, "A Test Object"); + item.addMetadata("dc", "publisher", null, null, "DSpace Test Harness"); + item.update(); + + // I think we have to do this? + WorkflowItem wfItem = WorkflowManager.startWithoutNotify(ctx, wsItem); + WorkflowManager.advance(ctx, wfItem, ctx.getCurrentUser()); + wfItem.update(); + wfItem.deleteWrapper(); + + // Commit work, clean up + ctx.commit(); + ctx.restoreAuthSystemState(); + + return item; + } + + /* + @BeforeClass + public static void setUpClass() + throws Exception + { + Context ctx = new Context(); + ctx.turnOffAuthorisationSystem(); + + ctx.setCurrentUser(eperson); + + // Create an environment for our test objects to live in. + community = Community.create(null, ctx); + community.setMetadata("name", "A Test Community"); + community.update(); + + collection = community.createCollection(); + collection.setMetadata("name", "A Test Collection"); + collection.update(); + + ctx.complete(); + + // Find the usual kernel services + sm = kernelImpl.getServiceManager(); + + config = kernelImpl.getConfigurationService(); + + // Configure the service under test. + config.setProperty(EZIDIdentifierProvider.CFG_SHOULDER, TEST_SHOULDER); + config.setProperty(EZIDIdentifierProvider.CFG_USER, "apitest"); + config.setProperty(EZIDIdentifierProvider.CFG_PASSWORD, "apitest"); + + // Don't try to send mail. + config.setProperty("mail.server.disabled", "true"); + } + + @AfterClass + public static void tearDownClass() + throws Exception + { + System.out.print("Tearing down\n\n"); + Context ctx = new Context(); + dumpMetadata(Item.find(ctx, itemID)); + } + + @Before + public void setUp() + { + context.setCurrentUser(eperson); + context.turnOffAuthorisationSystem(); + } + + @After + public void tearDown() + { + context.restoreAuthSystemState(); + } + */ + + /** Dummy test. */ + @Test + public void testNothing() + { + System.out.println("dummy"); + } + + /** + * Test of supports method, of class DataCiteIdentifierProvider. + */ + /* + @Test + public void testSupports_Class() + { + System.out.println("supports Class"); + + EZIDIdentifierProvider instance + = (EZIDIdentifierProvider) + sm.getServicesByType(EZIDIdentifierProvider.class).get(0); + + Class<? extends Identifier> identifier = DOI.class; + boolean result = instance.supports(identifier); + assertTrue("DOI should be supported", result); + } + */ + + /** + * Test of supports method, of class DataCiteIdentifierProvider. + */ + /* + @Test + public void testSupports_String() + { + System.out.println("supports String"); + + EZIDIdentifierProvider instance + = (EZIDIdentifierProvider) + sm.getServicesByType(EZIDIdentifierProvider.class).get(0); + + String identifier = "doi:" + TEST_SHOULDER; + boolean result = instance.supports(identifier); + assertTrue(identifier + " should be supported", result); + } + */ + + /** + * Test of register method, of class DataCiteIdentifierProvider. + */ + /* + @Test + public void testRegister_Context_DSpaceObject() + throws Exception + { + System.out.println("register Context, DSpaceObject"); + + EZIDIdentifierProvider instance + = (EZIDIdentifierProvider) + sm.getServicesByType(EZIDIdentifierProvider.class).get(0); + + DSpaceObject dso = newItem(context); + + String result = instance.register(context, dso); + assertTrue("Didn't get a DOI back", result.startsWith("doi:" + TEST_SHOULDER)); + System.out.println(" got identifier: " + result); + } + */ + + /** + * Test of register method, of class DataCiteIdentifierProvider. + */ + /* + @Test + public void testRegister_3args() + throws SQLException, AuthorizeException, IOException + { + System.out.println("register 3"); + + EZIDIdentifierProvider instance + = (EZIDIdentifierProvider) + sm.getServicesByType(EZIDIdentifierProvider.class).get(0); + + DSpaceObject object = newItem(context); + + String identifier = UUID.randomUUID().toString(); + + instance.register(context, object, identifier); + } + */ + + /** + * Test of reserve method, of class DataCiteIdentifierProvider. + */ + /* + @Test + public void testReserve() + throws Exception + { + System.out.println("reserve"); + + EZIDIdentifierProvider instance + = (EZIDIdentifierProvider) + sm.getServicesByType(EZIDIdentifierProvider.class).get(0); + + DSpaceObject dso = newItem(context); + String identifier = UUID.randomUUID().toString(); + instance.reserve(context, dso, identifier); + } + */ + + /** + * Test of mint method, of class DataCiteIdentifierProvider. + */ + /* + @Test + public void testMint() + throws Exception + { + System.out.println("mint"); + + EZIDIdentifierProvider instance + = (EZIDIdentifierProvider) + sm.getServicesByType(EZIDIdentifierProvider.class).get(0); + + DSpaceObject dso = newItem(context); + String result = instance.mint(context, dso); + assertNotNull("Null returned", result); + } + */ + + /** + * Test of resolve method, of class DataCiteIdentifierProvider. + */ + /* + @Test + public void testResolve() + throws Exception + { + System.out.println("resolve"); + + EZIDIdentifierProvider instance + = (EZIDIdentifierProvider) + sm.getServicesByType(EZIDIdentifierProvider.class).get(0); + + String identifier = UUID.randomUUID().toString(); + DSpaceObject expResult = newItem(context); + instance.register(context, expResult, identifier); + + String[] attributes = null; + DSpaceObject result = instance.resolve(context, identifier, attributes); + assertEquals(expResult, result); + } + */ + + /** + * Test of lookup method, of class DataCiteIdentifierProvider. + */ + /* + @Test + public void testLookup() + throws Exception + { + System.out.println("lookup"); + + EZIDIdentifierProvider instance + = (EZIDIdentifierProvider) + sm.getServicesByType(EZIDIdentifierProvider.class).get(0); + + String identifier = UUID.randomUUID().toString(); + DSpaceObject object = newItem(context); + instance.register(context, object, identifier); + + String result = instance.lookup(context, object); + assertNotNull("Null returned", result); + } + */ + + /** + * Test of delete method, of class DataCiteIdentifierProvider. + */ + /* + @Test + public void testDelete_Context_DSpaceObject() + throws Exception + { + System.out.println("delete 2"); + + EZIDIdentifierProvider instance + = (EZIDIdentifierProvider) + sm.getServicesByType(EZIDIdentifierProvider.class).get(0); + + DSpaceObject dso = newItem(context); + + // Ensure that it has multiple DOIs (ooo, bad boy!) + String id1 = UUID.randomUUID().toString(); + String id2 = UUID.randomUUID().toString(); + instance.reserve(context, dso, id1); + instance.reserve(context, dso, id2); + + // Test deletion + try { + instance.delete(context, dso); + } catch (IdentifierException e) { + // Creation of the Item registers a "public" identifier, which can't be deleted. + assertEquals("Unexpected exception", "1 identifiers could not be deleted.", e.getMessage()); + } + + // See if those identifiers were really deleted. + ItemIterator found; + found = Item.findByMetadataField(context, + EZIDIdentifierProvider.MD_SCHEMA, + EZIDIdentifierProvider.DOI_ELEMENT, + EZIDIdentifierProvider.DOI_QUALIFIER, id1); + assertFalse("A test identifier is still present", found.hasNext()); + + found = Item.findByMetadataField(context, + EZIDIdentifierProvider.MD_SCHEMA, + EZIDIdentifierProvider.DOI_ELEMENT, + EZIDIdentifierProvider.DOI_QUALIFIER, id2); + assertFalse("A test identifier is still present", found.hasNext()); + } + */ + + /** + * Test of delete method, of class DataCiteIdentifierProvider. + */ + /* + @Test() + public void testDelete_3args() + throws Exception + { + System.out.println("delete 3"); + + EZIDIdentifierProvider instance + = (EZIDIdentifierProvider) + sm.getServicesByType(EZIDIdentifierProvider.class).get(0); + + DSpaceObject dso = newItem(context); + String identifier = UUID.randomUUID().toString(); + + // Set a known identifier on the object + instance.reserve(context, dso, identifier); + + // Test deletion + instance.delete(context, dso, identifier); + + // See if it is gone + ItemIterator found = Item.findByMetadataField(context, + EZIDIdentifierProvider.MD_SCHEMA, + EZIDIdentifierProvider.DOI_ELEMENT, + EZIDIdentifierProvider.DOI_QUALIFIER, identifier); + assertFalse("Test identifier is still present", found.hasNext()); + } + */ +} diff --git a/dspace-api/src/test/java/org/dspace/identifier/MockDOIConnector.java b/dspace-api/src/test/java/org/dspace/identifier/MockDOIConnector.java new file mode 100644 index 0000000..db0f1d9 --- /dev/null +++ b/dspace-api/src/test/java/org/dspace/identifier/MockDOIConnector.java @@ -0,0 +1,171 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.identifier; + +import java.util.HashMap; +import java.util.Map; +import mockit.Mock; +import mockit.MockUp; +import org.dspace.content.DSpaceObject; +import org.dspace.core.Context; +import org.dspace.identifier.doi.DOIConnector; +import org.dspace.identifier.doi.DOIIdentifierException; + +/** + * + * @author Pascal-Nicolas Becker (p dot becker at tu hyphen berlin dot de) + */ +public class MockDOIConnector +extends MockUp<DOIConnector> +implements org.dspace.identifier.doi.DOIConnector +{ + + public Map<String, Integer> reserved; + public Map<String, Integer> registered; + + public MockDOIConnector() + { + reserved = new HashMap<String, Integer>(); + registered = new HashMap<String, Integer>(); + } + + public void reset() + { + reserved.clear(); + registered.clear(); + } + + @Override + @Mock + public boolean isDOIReserved(Context context, String doi) + throws DOIIdentifierException + { + return reserved.containsKey(doi); + } + + @Override + @Mock + public boolean isDOIReserved(Context context, DSpaceObject dso, String doi) + throws DOIIdentifierException + { + if (null == doi) + { + throw new NullPointerException(); + } + Integer itemId = reserved.get(doi); + return (itemId != null && itemId.intValue() == dso.getID()) ? true : false; + } + + @Override + @Mock + public boolean isDOIRegistered(Context context, String doi) + throws DOIIdentifierException + { + return registered.containsKey(doi); + } + + @Override + @Mock + public boolean isDOIRegistered(Context context, DSpaceObject dso, String doi) + throws DOIIdentifierException + { + if (null == doi) + { + throw new NullPointerException(); + } + Integer itemId = registered.get(doi); + return (itemId != null && itemId.intValue() == dso.getID()) ? true : false; + } + + @Override + @Mock + public void deleteDOI(Context context, String doi) + throws DOIIdentifierException + { + if (reserved.remove(doi) == null) + { + throw new DOIIdentifierException("Trying to delete a DOI that was " + + "never reserved!", DOIIdentifierException.DOI_DOES_NOT_EXIST); + } + registered.remove(doi); + } + + @Override + @Mock + public void reserveDOI(Context context, DSpaceObject dso, String doi) + throws DOIIdentifierException + { + Integer itemId = reserved.get(doi); + if (null != itemId) + { + if (dso.getID() == itemId.intValue()) + { + return; + } + else + { + throw new DOIIdentifierException("Trying to reserve a DOI that " + + "is reserved for another object.", + DOIIdentifierException.MISMATCH); + } + } + reserved.put(doi, new Integer(dso.getID())); + } + + @Override + @Mock + public void registerDOI(Context context, DSpaceObject dso, String doi) + throws DOIIdentifierException + { + if (!reserved.containsKey(doi)) + { + throw new DOIIdentifierException("Trying to register an unreserverd " + + "DOI.", DOIIdentifierException.RESERVE_FIRST); + } + + if (reserved.get(doi).intValue() != dso.getID()) + { + throw new DOIIdentifierException("Trying to register a DOI that is" + + " reserved for another item.", DOIIdentifierException.MISMATCH); + } + + if (registered.containsKey(doi)) + { + if (registered.get(doi).intValue() == dso.getID()) + { + return; + } + else + { + throw new DOIIdentifierException("Trying to register a DOI that " + + "is registered for another item.", + DOIIdentifierException.MISMATCH); + } + } + + registered.put(doi, new Integer(dso.getID())); + } + + @Override + @Mock + public void updateMetadata(Context context, DSpaceObject dso, String doi) + throws DOIIdentifierException + { + if (!reserved.containsKey(doi)) + { + throw new DOIIdentifierException("Trying to update a DOI that is not " + + "registered!", DOIIdentifierException.DOI_DOES_NOT_EXIST); + } + if (reserved.get(doi).intValue() != dso.getID()) + { + throw new DOIIdentifierException("Trying to update metadata of an " + + "unreserved DOI.", DOIIdentifierException.DOI_DOES_NOT_EXIST); + } + } + +} \ No newline at end of file diff --git a/dspace-api/src/test/java/org/dspace/statistics/util/DummyHttpServletRequest.java b/dspace-api/src/test/java/org/dspace/statistics/util/DummyHttpServletRequest.java new file mode 100644 index 0000000..4257ac6 --- /dev/null +++ b/dspace-api/src/test/java/org/dspace/statistics/util/DummyHttpServletRequest.java @@ -0,0 +1,578 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.statistics.util; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.security.Principal; +import java.util.Enumeration; +import java.util.Locale; +import java.util.Map; +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletInputStream; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +/** + * A mock request for testing. + * + * @author mwood + */ +class DummyHttpServletRequest implements HttpServletRequest +{ + private String agent = null; + + private String address = null; + + private String remoteHost = null; + + public void setAgent(String agent) + { + this.agent = agent; + } + + public void setAddress(String address) + { + this.address = address; + } + + public void setRemoteHost(String host) + { + this.remoteHost = host; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#getAuthType() + */ + @Override + public String getAuthType() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#getContextPath() + */ + @Override + public String getContextPath() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#getCookies() + */ + @Override + public Cookie[] getCookies() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#getDateHeader(java.lang.String) + */ + @Override + public long getDateHeader(String arg0) + { + // TODO Auto-generated method stub + return 0; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#getHeader(java.lang.String) + */ + @Override + public String getHeader(String key) + { + if ("User-Agent".equals(key)) + { + return agent; + } + else + { + return null; + } + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#getHeaderNames() + */ + @Override + public Enumeration getHeaderNames() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#getHeaders(java.lang.String) + */ + @Override + public Enumeration getHeaders(String arg0) + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#getIntHeader(java.lang.String) + */ + @Override + public int getIntHeader(String arg0) + { + // TODO Auto-generated method stub + return 0; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#getMethod() + */ + @Override + public String getMethod() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#getPathInfo() + */ + @Override + public String getPathInfo() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#getPathTranslated() + */ + @Override + public String getPathTranslated() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#getQueryString() + */ + @Override + public String getQueryString() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#getRemoteUser() + */ + @Override + public String getRemoteUser() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#getRequestURI() + */ + @Override + public String getRequestURI() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#getRequestURL() + */ + @Override + public StringBuffer getRequestURL() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#getRequestedSessionId() + */ + @Override + public String getRequestedSessionId() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#getServletPath() + */ + @Override + public String getServletPath() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#getSession() + */ + @Override + public HttpSession getSession() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#getSession(boolean) + */ + @Override + public HttpSession getSession(boolean arg0) + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#getUserPrincipal() + */ + @Override + public Principal getUserPrincipal() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdFromCookie() + */ + @Override + public boolean isRequestedSessionIdFromCookie() + { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdFromURL() + */ + @Override + public boolean isRequestedSessionIdFromURL() + { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdFromUrl() + */ + @Override + public boolean isRequestedSessionIdFromUrl() + { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdValid() + */ + @Override + public boolean isRequestedSessionIdValid() + { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#isUserInRole(java.lang.String) + */ + @Override + public boolean isUserInRole(String arg0) + { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#getAttribute(java.lang.String) + */ + @Override + public Object getAttribute(String arg0) + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#getAttributeNames() + */ + @Override + public Enumeration getAttributeNames() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#getCharacterEncoding() + */ + @Override + public String getCharacterEncoding() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#getContentLength() + */ + @Override + public int getContentLength() + { + // TODO Auto-generated method stub + return 0; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#getContentType() + */ + @Override + public String getContentType() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#getInputStream() + */ + @Override + public ServletInputStream getInputStream() throws IOException + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#getLocale() + */ + @Override + public Locale getLocale() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#getLocales() + */ + @Override + public Enumeration getLocales() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#getParameter(java.lang.String) + */ + @Override + public String getParameter(String arg0) + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#getParameterMap() + */ + @Override + public Map getParameterMap() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#getParameterNames() + */ + @Override + public Enumeration getParameterNames() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#getParameterValues(java.lang.String) + */ + @Override + public String[] getParameterValues(String arg0) + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#getProtocol() + */ + @Override + public String getProtocol() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#getReader() + */ + @Override + public BufferedReader getReader() throws IOException + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#getRealPath(java.lang.String) + */ + @Override + public String getRealPath(String arg0) + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#getRemoteAddr() + */ + @Override + public String getRemoteAddr() + { + return address; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#getRemoteHost() + */ + @Override + public String getRemoteHost() + { + return remoteHost; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#getRequestDispatcher(java.lang.String) + */ + @Override + public RequestDispatcher getRequestDispatcher(String arg0) + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#getScheme() + */ + @Override + public String getScheme() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#getServerName() + */ + @Override + public String getServerName() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#getServerPort() + */ + @Override + public int getServerPort() + { + // TODO Auto-generated method stub + return 0; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#isSecure() + */ + @Override + public boolean isSecure() + { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#removeAttribute(java.lang.String) + */ + @Override + public void removeAttribute(String arg0) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#setAttribute(java.lang.String, java.lang.Object) + */ + @Override + public void setAttribute(String arg0, Object arg1) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + /* (non-Javadoc) + * @see javax.servlet.ServletRequest#setCharacterEncoding(java.lang.String) + */ + @Override + public void setCharacterEncoding(String arg0) + throws UnsupportedEncodingException + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public int getRemotePort() + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public String getLocalName() + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public String getLocalAddr() + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public int getLocalPort() + { + throw new UnsupportedOperationException("Not supported yet."); + } + +} diff --git a/dspace-api/src/test/java/org/dspace/statistics/util/SpiderDetectorTest.java b/dspace-api/src/test/java/org/dspace/statistics/util/SpiderDetectorTest.java new file mode 100644 index 0000000..9561772 --- /dev/null +++ b/dspace-api/src/test/java/org/dspace/statistics/util/SpiderDetectorTest.java @@ -0,0 +1,170 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.statistics.util; + +import mockit.Mock; +import mockit.MockClass; +import mockit.Mockit; +import org.dspace.statistics.SolrLogger; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +/** + * @author mwood + */ +public class SpiderDetectorTest +{ + private static final String NOT_A_BOT_ADDRESS = "192.168.0.1"; + + @BeforeClass + static public void beforeClass() + { + Mockit.setUpMocks(MockSolrLogger.class); // Don't test SolrLogger here + } + @AfterClass + + static public void afterClass() + { + Mockit.tearDownMocks(SolrLogger.class); + } + + /** + * Test method for {@link org.dspace.statistics.util.SpiderDetector#readPatterns(java.io.File)}. + */ + @Test + public void testReadPatterns() + { +// FIXME fail("Not yet implemented"); + } + + /** + * Test method for {@link org.dspace.statistics.util.SpiderDetector#getSpiderIpAddresses()}. + */ + @Test + public void testGetSpiderIpAddresses() + { +// FIXME fail("Not yet implemented"); + } + + /** + * Test method for {@link org.dspace.statistics.util.SpiderDetector#isSpider(javax.servlet.http.HttpServletRequest)}. + */ + @Test + public void testIsSpiderHttpServletRequest() + { + DummyHttpServletRequest req = new DummyHttpServletRequest(); + req.setAddress(NOT_A_BOT_ADDRESS); // avoid surprises + req.setRemoteHost("notabot.example.com"); // avoid surprises + req.setAgent("Firefox"); // avoid surprises + + String candidate; + + // Test agent patterns + req.setAgent("msnbot is watching you"); + assertTrue("'msnbot' did not match any pattern", SpiderDetector.isSpider(req)); + + req.setAgent("Firefox"); + assertFalse("'Firefox' matched a pattern", SpiderDetector.isSpider(req)); + + // Test IP patterns + candidate = "192.168.2.1"; + req.setAddress(candidate); + assertTrue(candidate + " did not match IP patterns", SpiderDetector.isSpider(req)); + + req.setAddress(NOT_A_BOT_ADDRESS); + assertFalse(NOT_A_BOT_ADDRESS + " matched IP patterns", SpiderDetector.isSpider(req)); + + // Test DNS patterns + candidate = "baiduspider-dspace-test.crawl.baidu.com"; + req.setRemoteHost(candidate); + assertTrue(candidate + " did not match DNS patterns", SpiderDetector.isSpider(req)); + + candidate = "wiki.dspace.org"; + req.setRemoteHost(candidate); + assertFalse(candidate + " matched DNS patterns", SpiderDetector.isSpider(req)); + } + + /** + * Test method for {@link org.dspace.statistics.util.SpiderDetector#isSpider(java.lang.String, java.lang.String, java.lang.String, java.lang.String)}. + */ + @Test + public void testIsSpiderStringStringStringString() + { + String candidate; + + // Test IP patterns + candidate = "192.168.2.1"; + assertTrue(candidate + " did not match IP patterns", + SpiderDetector.isSpider(candidate, null, null, null)); + + candidate = NOT_A_BOT_ADDRESS; + assertFalse(candidate + " matched IP patterns", + SpiderDetector.isSpider(candidate, null, null, null)); + + // Test DNS patterns + candidate = "baiduspider-dspace-test.crawl.baidu.com"; + assertTrue(candidate + " did not match DNS patterns", + SpiderDetector.isSpider(NOT_A_BOT_ADDRESS, null, candidate, null)); + + candidate = "wiki.dspace.org"; + assertFalse(candidate + " matched DNS patterns", + SpiderDetector.isSpider(NOT_A_BOT_ADDRESS, null, candidate, null)); + + // Test agent patterns + candidate = "msnbot is watching you"; + assertTrue("'" + candidate + "' did not match agent patterns", + SpiderDetector.isSpider(NOT_A_BOT_ADDRESS, null, null, candidate)); + + candidate = "Firefox"; + assertFalse("'" + candidate + "' matched agent patterns", + SpiderDetector.isSpider(NOT_A_BOT_ADDRESS, null, null, candidate)); + } + + /** + * Test method for {@link org.dspace.statistics.util.SpiderDetector#isSpider(java.lang.String)}. + */ + @Test + public void testIsSpiderString() + { + String candidate; + + candidate = "192.168.2.1"; + assertTrue(candidate + " did not match IP patterns", + SpiderDetector.isSpider(candidate, null, null, null)); + + candidate = NOT_A_BOT_ADDRESS; + assertFalse(candidate + " matched IP patterns", + SpiderDetector.isSpider(candidate, null, null, null)); + + } + + /** + * Dummy SolrLogger for testing. + * @author mwood + */ + @MockClass (realClass = org.dspace.statistics.SolrLogger.class) + static public class MockSolrLogger + { + @Mock + public void $init() {} + + @Mock + public void $clinit() {} + + @Mock + public boolean isUseProxies() + { + return false; + } + } +} diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/components/CollectionItemList.java b/dspace-jspui/src/main/java/org/dspace/app/webui/components/CollectionItemList.java new file mode 100644 index 0000000..22f2b48 --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/components/CollectionItemList.java @@ -0,0 +1,137 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.components; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.dspace.authorize.AuthorizeException; +import org.dspace.app.webui.util.UIUtil; +import org.dspace.content.Collection; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Context; +import org.dspace.plugin.CollectionHomeProcessor; +import org.dspace.plugin.PluginException; +import org.dspace.browse.BrowseEngine; +import org.dspace.browse.BrowseIndex; +import org.dspace.browse.BrowseInfo; +import org.dspace.browse.BrowserScope; +import org.dspace.browse.BrowseException; +import org.dspace.sort.SortException; +import org.dspace.sort.SortOption; + + +/** + * This class obtains item list of the given collection by + * implementing the CollectionHomeProcessor. + * + * @author Keiji Suzuki + * + */ +public class CollectionItemList implements CollectionHomeProcessor +{ + // the name of a browse index to display collection's items + private static String name = ConfigurationManager.getProperty("webui.collectionhome.browse-name"); + // the number of authors to display before trncating + private static final int etal = ConfigurationManager.getIntProperty("webui.browse.author-limit", -1); + // the number of items to display per page + private static final int perpage = ConfigurationManager.getIntProperty("webui.collectionhome.perpage", 20); + // whether does use "dateaccessioned" as a sort option + // If true and the sort option "dateaccessioned" exists, use "dateaccessioned" as a sort option. + // Otherwise use the sort option pertaining the specified browse index + private static boolean useDateaccessioned = ConfigurationManager.getBooleanProperty("webui.collectionhome.use.dateaccessioned", true); + // the number of sort option "dateaccessioned" + private static int number = -1; + + static + { + if (name == null) + { + name = "title"; + } + + if (useDateaccessioned) + { + try + { + for (SortOption option : SortOption.getSortOptions()) + { + if ("dateaccessioned".equals(option.getName())) + { + number = option.getNumber(); + break; + } + } + } + catch (SortException e) + { + // does nothing + } + } + } + + /** + * blank constructor - does nothing. + * + */ + public CollectionItemList() + { + + } + + /* (non-Javadoc) + * @see org.dspace.plugin.CommunityHomeProcessor#process(org.dspace.core.Context, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.dspace.content.Community) + */ + public void process(Context context, HttpServletRequest request, HttpServletResponse response, Collection collection) + throws PluginException, AuthorizeException + { + int offset = UIUtil.getIntParameter(request, "offset"); + if (offset < 0) + { + offset = 0; + } + + try + { + BrowseIndex bi = BrowseIndex.getBrowseIndex(name); + if (bi == null || !"item".equals(bi.getDisplayType())) + { + request.setAttribute("show.items", Boolean.FALSE); + return; + } + + BrowserScope scope = new BrowserScope(context); + scope.setBrowseContainer(collection); + scope.setBrowseIndex(bi); + scope.setEtAl(etal); + scope.setOffset(offset); + scope.setResultsPerPage(perpage); + if (number != -1) + { + scope.setSortBy(number); + scope.setOrder(SortOption.DESCENDING); + } + BrowseEngine be = new BrowseEngine(context); + BrowseInfo binfo = be.browse(scope); + request.setAttribute("browse.info", binfo); + + if (binfo.hasResults()) + { + request.setAttribute("show.items", Boolean.TRUE); + } + else + { + request.setAttribute("show.items", Boolean.FALSE); + } + } + catch (BrowseException e) + { + request.setAttribute("show.items", Boolean.FALSE); + } + } +} diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/components/RecentSiteSubmissions.java b/dspace-jspui/src/main/java/org/dspace/app/webui/components/RecentSiteSubmissions.java new file mode 100644 index 0000000..4af7472 --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/components/RecentSiteSubmissions.java @@ -0,0 +1,56 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.components; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.dspace.authorize.AuthorizeException; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Context; +import org.dspace.plugin.SiteHomeProcessor; +import org.dspace.plugin.PluginException; + +/** + * This class obtains recent submissions to the site by + * implementing the SiteHomeProcessor. + * + * @author Keiji Suzuki + * + */ +public class RecentSiteSubmissions implements SiteHomeProcessor +{ + /** + * blank constructor - does nothing. + * + */ + public RecentSiteSubmissions() + { + + } + + /* (non-Javadoc) + * @see org.dspace.plugin.CommunityHomeProcessor#process(org.dspace.core.Context, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.dspace.content.Community) + */ + @Override + public void process(Context context, HttpServletRequest request, HttpServletResponse response) + throws PluginException, AuthorizeException + { + try + { + RecentSubmissionsManager rsm = new RecentSubmissionsManager(context); + RecentSubmissions recent = rsm.getRecentSubmissions(null); + request.setAttribute("recent.submissions", recent); + + } + catch (RecentSubmissionsException e) + { + throw new PluginException(e); + } + } +} diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/components/TopCommunitiesSiteProcessor.java b/dspace-jspui/src/main/java/org/dspace/app/webui/components/TopCommunitiesSiteProcessor.java new file mode 100644 index 0000000..5b355a7 --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/components/TopCommunitiesSiteProcessor.java @@ -0,0 +1,58 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.components; + +import java.sql.SQLException; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.Community; +import org.dspace.core.Context; +import org.dspace.plugin.PluginException; +import org.dspace.plugin.SiteHomeProcessor; + +/** + * This class add top communities object to the request attributes to use in + * the site home page implementing the SiteHomeProcessor. + * + * @author Andrea Bollini + * + */ +public class TopCommunitiesSiteProcessor implements SiteHomeProcessor +{ + + /** + * blank constructor - does nothing. + * + */ + public TopCommunitiesSiteProcessor() + { + + } + + @Override + public void process(Context context, HttpServletRequest request, + HttpServletResponse response) throws PluginException, + AuthorizeException + { + // Get the top communities to shows in the community list + Community[] communities; + try + { + communities = Community.findAllTop(context); + } + catch (SQLException e) + { + throw new PluginException(e.getMessage(), e); + } + request.setAttribute("communities", communities); + } + +} diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/components/VersioningItemHome.java b/dspace-jspui/src/main/java/org/dspace/app/webui/components/VersioningItemHome.java new file mode 100644 index 0000000..c8eda6e --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/components/VersioningItemHome.java @@ -0,0 +1,128 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.components; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.log4j.Logger; +import org.dspace.app.webui.util.VersionUtil; +import org.dspace.authorize.AuthorizeException; +import org.dspace.authorize.AuthorizeManager; +import org.dspace.content.Item; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Context; +import org.dspace.handle.HandleManager; +import org.dspace.plugin.ItemHomeProcessor; +import org.dspace.plugin.PluginException; +import org.dspace.versioning.Version; +import org.dspace.versioning.VersionHistory; + +public class VersioningItemHome implements ItemHomeProcessor { + + /** log4j category */ + private static Logger log = Logger.getLogger(VersioningItemHome.class); + + @Override + public void process(Context context, HttpServletRequest request, + HttpServletResponse response, Item item) throws PluginException, + AuthorizeException { + boolean versioningEnabled = ConfigurationManager.getBooleanProperty( + "versioning", "enabled"); + boolean newVersionAvailable = false; + boolean showVersionWorkflowAvailable = false; + boolean hasVersionButton = false; + boolean hasVersionHistory = false; + + VersionHistory history = null; + List<Version> historyVersions = new ArrayList<Version>(); + String latestVersionHandle = null; + String latestVersionURL = null; + if (versioningEnabled) { + try { + if(item.canEdit()) { + if (VersionUtil.isLatest(context, item) && item.isArchived()) { + hasVersionButton = true; + } + } + } catch (SQLException e) { + throw new PluginException(e.getMessage()); + } + + if (VersionUtil.hasVersionHistory(context, item)) { + hasVersionHistory = true; + history = VersionUtil.retrieveVersionHistory(context, item); + for(Version versRow : history.getVersions()) { + + //Skip items currently in submission + try { + if(VersionUtil.isItemInSubmission(context, versRow.getItem())) + { + continue; + } + else { + historyVersions.add(versRow); + } + } catch (SQLException e) { + throw new PluginException(e.getMessage()); + } + } + } + + // Check if we have a history for the item + Version latestVersion; + try { + latestVersion = VersionUtil.checkLatestVersion(context, item); + } catch (SQLException e) { + throw new PluginException(e.getMessage()); + } + + if (latestVersion != null) { + if (latestVersion != null + && latestVersion.getItemID() != item.getID()) { + // We have a newer version + Item latestVersionItem = latestVersion.getItem(); + if (latestVersionItem.isArchived()) { + // Available, add a link for the user alerting him that + // a new version is available + newVersionAvailable = true; + try { + latestVersionURL = HandleManager.resolveToURL( + context, latestVersionItem.getHandle()); + } catch (SQLException e) { + throw new PluginException(e.getMessage()); + } + latestVersionHandle = latestVersionItem.getHandle(); + } else { + // We might be dealing with a workflow/workspace item + showVersionWorkflowAvailable = true; + } + } + } + } + + request.setAttribute("versioning.enabled", versioningEnabled); + request.setAttribute("versioning.hasversionbutton", hasVersionButton); + request.setAttribute("versioning.hasversionhistory", hasVersionHistory); + request.setAttribute("versioning.history", history); + request.setAttribute("versioning.historyversions", historyVersions); + request.setAttribute("versioning.newversionavailable", + newVersionAvailable); + request.setAttribute("versioning.showversionwfavailable", + showVersionWorkflowAvailable); + request.setAttribute("versioning.latestversionhandle", + latestVersionHandle); + request.setAttribute("versioning.latestversionurl", latestVersionURL); + + } + +} diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/handle/HandleJSONResolver.java b/dspace-jspui/src/main/java/org/dspace/app/webui/handle/HandleJSONResolver.java new file mode 100644 index 0000000..1416968 --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/handle/HandleJSONResolver.java @@ -0,0 +1,117 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.handle; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.dspace.app.webui.json.JSONRequest; +import org.dspace.authorize.AuthorizeException; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Context; +import org.dspace.handle.HandleManager; + +import com.google.gson.Gson; + +public class HandleJSONResolver extends JSONRequest +{ + private static final Logger log = Logger + .getLogger(HandleJSONResolver.class); + + public void doJSONRequest(Context context, HttpServletRequest request, + HttpServletResponse resp) throws AuthorizeException, IOException + { + String reqPath = request.getPathInfo().replaceFirst(getSubPath()+"/", ""); + // remove the first slash if present + if (reqPath.startsWith("/")) + { + reqPath = reqPath.substring(1); + } + + Gson gson = new Gson(); + String jsonString = ""; + + try + { + if (reqPath.startsWith("resolve/")) + { + String handle = reqPath.substring("resolve/".length()); + if (StringUtils.isBlank(handle)) + { + resp.sendError(HttpServletResponse.SC_BAD_REQUEST); + return; + } + String url = HandleManager.resolveToURL(context, handle); + // Only an array or an abject is valid JSON. A simple string + // isn't. An object always uses key value pairs, so we use an + // array. + if (url != null) + { + jsonString = gson.toJson(new String[] {url}); + } + else + { + jsonString = gson.toJson(null); + } + } + else if (reqPath.equals("listprefixes")) + { + List<String> prefixes = new ArrayList<String>(); + prefixes.add(HandleManager.getPrefix()); + String additionalPrefixes = ConfigurationManager + .getProperty("handle.additional.prefixes"); + if (StringUtils.isNotBlank(additionalPrefixes)) + { + for (String apref : additionalPrefixes.split(",")) + { + prefixes.add(apref.trim()); + } + } + jsonString = gson.toJson(prefixes); + } + else if (reqPath.startsWith("listhandles/")) + { + if (ConfigurationManager.getBooleanProperty( + "handle.hide.listhandles", true)) + { + resp.sendError(HttpServletResponse.SC_NOT_FOUND); + return; + } + String prefix = reqPath.substring("listhandles/".length()); + if (StringUtils.isBlank(prefix)) + { + resp.sendError(HttpServletResponse.SC_BAD_REQUEST); + return; + } + + List<String> handlelist = HandleManager.getHandlesForPrefix( + context, prefix); + jsonString = gson.toJson(handlelist); + } + else + { + resp.sendError(HttpServletResponse.SC_NOT_FOUND); + return; + } + resp.getWriter().print(jsonString); + return; + } + catch (SQLException e) + { + log.error(e.getMessage(), e); + return; + } + } +} diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/json/SubmissionLookupJSONRequest.java b/dspace-jspui/src/main/java/org/dspace/app/webui/json/SubmissionLookupJSONRequest.java new file mode 100644 index 0000000..aa2aef6 --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/json/SubmissionLookupJSONRequest.java @@ -0,0 +1,430 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.json; + +import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.TransformationEngine; +import gr.ekt.bte.core.TransformationSpec; +import gr.ekt.bte.exceptions.BadTransformationSpec; +import gr.ekt.bte.exceptions.MalformedSourceException; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.MissingResourceException; +import java.util.Set; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.FileItemFactory; +import org.apache.commons.fileupload.FileUploadException; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; +import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.commons.fileupload.util.Streams; +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.dspace.app.webui.util.UIUtil; +import org.dspace.authorize.AuthorizeException; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Context; +import org.dspace.core.I18nUtil; +import org.dspace.core.Utils; +import org.dspace.submit.lookup.MultipleSubmissionLookupDataLoader; +import org.dspace.submit.lookup.SubmissionLookupOutputGenerator; +import org.dspace.submit.lookup.SubmissionLookupService; +import org.dspace.submit.lookup.SubmissionLookupUtils; +import org.dspace.submit.util.ItemSubmissionLookupDTO; +import org.dspace.submit.util.SubmissionLookupDTO; +import org.dspace.utils.DSpace; + +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +/** + * @author Andrea Bollini + * @author Kostas Stamatis + * @author Luigi Andrea Pascarelli + * @author Panagiotis Koutsourakis + */ +public class SubmissionLookupJSONRequest extends JSONRequest +{ + + private SubmissionLookupService service = new DSpace().getServiceManager() + .getServiceByName(SubmissionLookupService.class.getName(), + SubmissionLookupService.class); + + private static Logger log = Logger + .getLogger(SubmissionLookupJSONRequest.class); + + @Override + public void doJSONRequest(Context context, HttpServletRequest req, + HttpServletResponse resp) throws AuthorizeException, IOException + { + Gson json = new Gson(); + String suuid = req.getParameter("s_uuid"); + SubmissionLookupDTO subDTO = service.getSubmissionLookupDTO(req, suuid); + // Check that we have a file upload request + boolean isMultipart = ServletFileUpload.isMultipartContent(req); + if ("identifiers".equalsIgnoreCase(req.getParameter("type"))) + { + Map<String, Set<String>> identifiers = new HashMap<String, Set<String>>(); + Enumeration e = req.getParameterNames(); + + while (e.hasMoreElements()) + { + String parameterName = (String) e.nextElement(); + String parameterValue = req.getParameter(parameterName); + + if (parameterName.startsWith("identifier_") + && StringUtils.isNotBlank(parameterValue)) + { + Set<String> set = new HashSet<String>(); + set.add(parameterValue); + identifiers.put( + parameterName.substring("identifier_".length()), + set); + } + } + + List<ItemSubmissionLookupDTO> result = new ArrayList<ItemSubmissionLookupDTO>(); + + TransformationEngine transformationEngine = service + .getPhase1TransformationEngine(); + if (transformationEngine != null) + { + MultipleSubmissionLookupDataLoader dataLoader = (MultipleSubmissionLookupDataLoader) transformationEngine + .getDataLoader(); + dataLoader.setIdentifiers(identifiers); + + try + { + SubmissionLookupOutputGenerator outputGenerator = (SubmissionLookupOutputGenerator) transformationEngine + .getOutputGenerator(); + outputGenerator.setDtoList(new ArrayList<ItemSubmissionLookupDTO>()); + log.debug("BTE transformation is about to start!"); + transformationEngine.transform(new TransformationSpec()); + log.debug("BTE transformation finished!"); + result = outputGenerator.getDtoList(); + } + catch (BadTransformationSpec e1) + { + log.error(e1.getMessage(), e1); + } + catch (MalformedSourceException e1) + { + log.error(e1.getMessage(), e1); + } + } + + subDTO.setItems(result); + service.storeDTOs(req, suuid, subDTO); + List<Map<String, Object>> dto = getLightResultList(result); + JsonElement tree = json.toJsonTree(dto); + JsonObject jo = new JsonObject(); + jo.add("result", tree); + resp.getWriter().write(jo.toString()); + + } + else if ("search".equalsIgnoreCase(req.getParameter("type"))) + { + String title = req.getParameter("title"); + String author = req.getParameter("authors"); + int year = UIUtil.getIntParameter(req, "year"); + + Map<String, Set<String>> searchTerms = new HashMap<String, Set<String>>(); + Set<String> tmp1 = new HashSet<String>(); + tmp1.add(title); + Set<String> tmp2 = new HashSet<String>(); + tmp2.add(author); + Set<String> tmp3 = new HashSet<String>(); + tmp3.add(String.valueOf(year)); + searchTerms.put("title", tmp1); + searchTerms.put("authors", tmp2); + searchTerms.put("year", tmp3); + + List<ItemSubmissionLookupDTO> result = new ArrayList<ItemSubmissionLookupDTO>(); + + TransformationEngine transformationEngine = service + .getPhase1TransformationEngine(); + if (transformationEngine != null) + { + MultipleSubmissionLookupDataLoader dataLoader = (MultipleSubmissionLookupDataLoader) transformationEngine + .getDataLoader(); + dataLoader.setSearchTerms(searchTerms); + + try + { + SubmissionLookupOutputGenerator outputGenerator = (SubmissionLookupOutputGenerator) transformationEngine + .getOutputGenerator(); + outputGenerator.setDtoList(new ArrayList<ItemSubmissionLookupDTO>()); + log.debug("BTE transformation is about to start!"); + transformationEngine.transform(new TransformationSpec()); + log.debug("BTE transformation finished!"); + result = outputGenerator.getDtoList(); + } + catch (BadTransformationSpec e1) + { + log.error(e1.getMessage(), e1); + } + catch (MalformedSourceException e1) + { + log.error(e1.getMessage(), e1); + } + } + + subDTO.setItems(result); + service.storeDTOs(req, suuid, subDTO); + List<Map<String, Object>> dto = getLightResultList(result); + JsonElement tree = json.toJsonTree(dto); + JsonObject jo = new JsonObject(); + jo.add("result", tree); + resp.getWriter().write(jo.toString()); + } + else if ("details".equalsIgnoreCase(req.getParameter("type"))) + { + String i_uuid = req.getParameter("i_uuid"); + Map<String, Object> dto = getDetails(subDTO.getLookupItem(i_uuid), + context); + JsonElement tree = json.toJsonTree(dto); + JsonObject jo = new JsonObject(); + jo.add("result", tree); + resp.getWriter().write(jo.toString()); + } + else if (isMultipart) + { + + // Create a factory for disk-based file items + FileItemFactory factory = new DiskFileItemFactory(); + + // Create a new file upload handler + ServletFileUpload upload = new ServletFileUpload(factory); + // Parse the request + Map<String, String> valueMap = new HashMap<String, String>(); + InputStream io = null; + + // Parse the request + List<FileItem> iter; + String filename = null; + try + { + iter = upload.parseRequest(req); + for (FileItem item : iter) + { + String name = item.getFieldName(); + InputStream stream = item.getInputStream(); + if (item.isFormField()) + { + String value = Streams.asString(stream); + valueMap.put(name, value); + } + else + { + io = stream; + } + } + } + catch (FileUploadException e) + { + throw new IOException(e); + } + + suuid = valueMap.get("s_uuid"); + subDTO = service.getSubmissionLookupDTO(req, suuid); + + List<ItemSubmissionLookupDTO> result = new ArrayList<ItemSubmissionLookupDTO>(); + + TransformationEngine transformationEngine = service + .getPhase1TransformationEngine(); + if (transformationEngine != null) + { + MultipleSubmissionLookupDataLoader dataLoader = (MultipleSubmissionLookupDataLoader) transformationEngine + .getDataLoader(); + + String tempDir = (ConfigurationManager + .getProperty("upload.temp.dir") != null) ? ConfigurationManager + .getProperty("upload.temp.dir") : System + .getProperty("java.io.tmpdir"); + File uploadDir = new File(tempDir); + if (!uploadDir.exists()) { + if (!uploadDir.mkdir()) { + uploadDir = null; + } + } + File file = File.createTempFile("submissionlookup-loader", + ".temp", + uploadDir); + BufferedOutputStream out = new BufferedOutputStream( + new FileOutputStream(file)); + Utils.bufferedCopy(io, out); + dataLoader.setFile(file.getAbsolutePath(), + valueMap.get("provider_loader")); + + try + { + SubmissionLookupOutputGenerator outputGenerator = (SubmissionLookupOutputGenerator) transformationEngine + .getOutputGenerator(); + outputGenerator.setDtoList(new ArrayList<ItemSubmissionLookupDTO>()); + log.debug("BTE transformation is about to start!"); + transformationEngine.transform(new TransformationSpec()); + log.debug("BTE transformation finished!"); + result = outputGenerator.getDtoList(); + } + catch (BadTransformationSpec e1) + { + log.error(e1.getMessage(), e1); + } + catch (MalformedSourceException e1) + { + log.error(e1.getMessage(), e1); + } + finally + { + file.delete(); + } + } + subDTO.setItems(result); + service.storeDTOs(req, suuid, subDTO); + List<Map<String, Object>> dto = getLightResultList(result); + if (valueMap.containsKey("skip_loader")) + { + if (valueMap.get("skip_loader").equals("true")) + { + Map<String, Object> skip = new HashMap<String, Object>(); + skip.put("skip", Boolean.TRUE); + skip.put("uuid", valueMap.containsKey("s_uuid") ? suuid + : -1); + skip.put( + "collectionid", + valueMap.containsKey("select-collection-file") ? valueMap + .get("select-collection-file") : -1); + dto.add(skip); + } + } + JsonElement tree = json.toJsonTree(dto); + JsonObject jo = new JsonObject(); + jo.add("result", tree); + resp.setContentType("text/plain"); +// if you works in localhost mode and use IE10 to debug the feature uncomment the follow line +// resp.setHeader("Access-Control-Allow-Origin","*"); + resp.getWriter().write(jo.toString()); + } + } + + private Map<String, Object> getDetails(ItemSubmissionLookupDTO item, + Context context) + { + List<String> fieldOrder = getFieldOrder(); + Record totalData = item.getTotalPublication(service.getProviders()); + Set<String> availableFields = totalData.getFields(); + List<String[]> fieldsLabels = new ArrayList<String[]>(); + for (String f : fieldOrder) + { + if (availableFields.contains(f)) + { + try + { + if (totalData.getValues(f)!=null && totalData.getValues(f).size()>0) + fieldsLabels.add(new String[] {f, I18nUtil.getMessage("jsp.submission-lookup.detail."+ f, context) }); + } + catch (MissingResourceException e) + { + fieldsLabels.add(new String[] { f, f }); + } + } + } + Map<String, Object> data = new HashMap<String, Object>(); + String uuid = item.getUUID(); + + Record pub = item.getTotalPublication(service.getProviders()); + Map<String, List<String>> publication1 = new HashMap<String, List<String>>(); + for (String field : pub.getFields()) + { + publication1 + .put(field, SubmissionLookupUtils.getValues(pub, field)); + } + + data.put("uuid", uuid); + data.put("providers", item.getProviders()); + data.put("publication", publication1); + data.put("fieldsLabels", fieldsLabels); + return data; + } + + private List<String> getFieldOrder() + { + if (service.getDetailFields()!=null){ + return service.getDetailFields(); + } + + //Default values, in case the property is not set + List<String> defaultValues = new ArrayList<String>(); + defaultValues.add("title"); + defaultValues.add("authors"); + defaultValues.add("editors"); + defaultValues.add("translators"); + defaultValues.add("chairs"); + defaultValues.add("issued"); + defaultValues.add("abstract"); + defaultValues.add("doi"); + defaultValues.add("journal"); + defaultValues.add("volume"); + defaultValues.add("issue"); + defaultValues.add("publisher"); + defaultValues.add("jissn"); + defaultValues.add("pisbn"); + defaultValues.add("eisbn"); + defaultValues.add("arxivCategory"); + defaultValues.add("keywords"); + defaultValues.add("mesh"); + defaultValues.add("language"); + defaultValues.add("subtype"); + defaultValues.add("translators"); + + return defaultValues; + } + + private List<Map<String, Object>> getLightResultList( + List<ItemSubmissionLookupDTO> result) + { + List<Map<String, Object>> publications = new ArrayList<Map<String, Object>>(); + if (result != null && result.size() > 0) + { + for (ItemSubmissionLookupDTO item : result) + { + String uuid = item.getUUID(); + Record pub = item.getTotalPublication(service.getProviders()); + Map<String, Object> data = new HashMap<String, Object>(); + data.put("uuid", uuid); + data.put("providers", item.getProviders()); + data.put("title", + SubmissionLookupUtils.getFirstValue(pub, "title")); + data.put( + "authors", + pub.getValues("authors") != null ? StringUtils.join( + SubmissionLookupUtils.getValues(pub, "authors") + .iterator(), ", ") : ""); + data.put("issued", + SubmissionLookupUtils.getFirstValue(pub, "issued")); + + publications.add(data); + } + } + return publications; + } +} diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/json/UploadProgressJSON.java b/dspace-jspui/src/main/java/org/dspace/app/webui/json/UploadProgressJSON.java new file mode 100644 index 0000000..5ebdd18 --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/json/UploadProgressJSON.java @@ -0,0 +1,62 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.json; + +import java.io.IOException; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.dspace.app.webui.util.FileUploadListener; +import org.dspace.app.webui.util.FileUploadRequest; +import org.dspace.authorize.AuthorizeException; +import org.dspace.core.Context; + +import com.google.gson.Gson; + +public class UploadProgressJSON extends JSONRequest +{ + @Override + public void doJSONRequest(Context context, HttpServletRequest req, + HttpServletResponse resp) throws AuthorizeException, IOException + { + HttpSession session = req.getSession(false); + if (session == null) + { + return; + } + + FileUploadListener listner = (FileUploadListener) session + .getAttribute(FileUploadRequest.FILE_UPLOAD_LISTNER); + if (listner == null || listner.getContentLength() == 0) + { + return; + } + else + { + long contentLength = listner.getContentLength(); + UploadProgressDTO dto = new UploadProgressDTO(); + long bytesRead = listner.getBytesRead(); + dto.readBytes = bytesRead; + dto.totalBytes = contentLength; + Gson gson = new Gson(); + resp.getWriter().write(gson.toJson(dto)); + if (listner.isCompleted()) + { + session.removeAttribute(FileUploadRequest.FILE_UPLOAD_LISTNER); + } + } + + } +} + +class UploadProgressDTO { + long totalBytes; + long readBytes; +} diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/jsptag/AccessSettingTag.java b/dspace-jspui/src/main/java/org/dspace/app/webui/jsptag/AccessSettingTag.java new file mode 100644 index 0000000..baf7b8c --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/jsptag/AccessSettingTag.java @@ -0,0 +1,391 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.jsptag; + +import org.apache.commons.lang.time.DateFormatUtils; +import org.apache.log4j.Logger; +import org.dspace.app.util.SubmissionInfo; +import org.dspace.app.webui.util.UIUtil; +import org.dspace.authorize.AuthorizeManager; +import org.dspace.authorize.ResourcePolicy; +import org.dspace.content.DSpaceObject; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Context; +import org.dspace.eperson.Group; + +import java.util.ArrayList; +import java.util.List; +import java.io.IOException; +import java.sql.SQLException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.jsp.JspException; +import javax.servlet.jsp.JspWriter; +import javax.servlet.jsp.jstl.fmt.LocaleSupport; +import javax.servlet.jsp.tagext.TagSupport; + +/** + * Tag to display embargo settings + * + * @author Keiji Suzuki + * @version $Revision$ + */ +public class AccessSettingTag extends TagSupport +{ + /** log4j category */ + private static Logger log = Logger.getLogger(AccessSettingTag.class); + + /** is advanced form enabled? */ + private static final boolean advanced = ConfigurationManager.getBooleanProperty("webui.submission.restrictstep.enableAdvancedForm", false); + + /** Name of the restricted group */ + private static final String restrictedGroup = ConfigurationManager.getProperty("webui.submission.restrictstep.groups"); + + /** the SubmittionInfo */ + private transient SubmissionInfo subInfo = null; + + /** the target DSpaceObject */ + private transient DSpaceObject dso = null; + + /** the target ResourcePolicy */ + private transient ResourcePolicy rp = null; + + /** disable the radio button for open/embargo access */ + private boolean embargo = false; + + /** hide the embargo date and reason fields */ + private boolean hidden = false; + + /** add the policy button */ + private boolean addpolicy = false; + + + public AccessSettingTag() + { + super(); + } + + public int doStartTag() throws JspException + { + String legend = LocaleSupport.getLocalizedMessage(pageContext, "org.dspace.app.webui.jsptag.access-setting.legend"); + String label_name = LocaleSupport.getLocalizedMessage(pageContext, "org.dspace.app.webui.jsptag.access-setting.label_name"); + String label_group = LocaleSupport.getLocalizedMessage(pageContext, "org.dspace.app.webui.jsptag.access-setting.label_group"); + String label_embargo = LocaleSupport.getLocalizedMessage(pageContext, "org.dspace.app.webui.jsptag.access-setting.label_embargo"); + String label_date = LocaleSupport.getLocalizedMessage(pageContext, "org.dspace.app.webui.jsptag.access-setting.label_date"); + String radio0 = LocaleSupport.getLocalizedMessage(pageContext, "org.dspace.app.webui.jsptag.access-setting.radio0"); + String radio1 = LocaleSupport.getLocalizedMessage(pageContext, "org.dspace.app.webui.jsptag.access-setting.radio1"); + String radio_help = LocaleSupport.getLocalizedMessage(pageContext, "org.dspace.app.webui.jsptag.access-setting.radio_help"); + String label_reason = LocaleSupport.getLocalizedMessage(pageContext, "org.dspace.app.webui.jsptag.access-setting.label_reason"); + String button_confirm = LocaleSupport.getLocalizedMessage(pageContext, "org.dspace.app.webui.jsptag.access-setting.button_confirm"); + + String help_name = LocaleSupport.getLocalizedMessage(pageContext, "org.dspace.app.webui.jsptag.access-setting.name_help"); + String help_reason = LocaleSupport.getLocalizedMessage(pageContext, "org.dspace.app.webui.jsptag.access-setting.reason_help"); + + JspWriter out = pageContext.getOut(); + StringBuffer sb = new StringBuffer(); + + try + { + HttpServletRequest hrq = (HttpServletRequest) pageContext.getRequest(); + Context context = UIUtil.obtainContext(hrq); + + // get startDate and reason of the resource policy of the target DSpaceObject + List<ResourcePolicy> policies = null; + if (!advanced && dso != null) + { + policies = AuthorizeManager.findPoliciesByDSOAndType(context, dso, ResourcePolicy.TYPE_CUSTOM); + } + else if (rp != null) + { + policies = new ArrayList<ResourcePolicy>(); + policies.add(rp); + } + + String name = ""; + int group_id = 0; + String startDate = ""; + String reason = ""; + String radio0Checked = " checked=\"checked\""; + String radio1Checked = ""; + String disabled = " disabled=\"disabled\""; + if (policies != null && policies.size() > 0) + { + ResourcePolicy rp = policies.get(0); + name = (rp.getRpName() == null ? "" : rp.getRpName()); + group_id = rp.getGroup().getID(); + startDate = (rp.getStartDate() != null ? DateFormatUtils.format(rp.getStartDate(), "yyyy-MM-dd") : ""); + reason = (rp.getRpDescription() == null ? "" : rp.getRpDescription()); + if (!startDate.equals("")) + { + radio0Checked = ""; + radio1Checked = " checked=\"checked\""; + disabled = ""; + } + } + + // if advanced embargo is disabled, embargo date and reason fields are always enabled + if (!advanced) { + disabled = ""; + } + + if (embargo) + { + // Name + sb.append("<div class=\"form-group\">"); + sb.append(label_name).append("\n"); + sb.append("<p class=\"help-block\">").append(help_name).append("</p>").append("\n"); + sb.append("<input class=\"form-control\" name=\"name\" id=\"policy_name\" type=\"text\" maxlength=\"30\" value=\"").append(name).append("\" />\n"); + sb.append("</div>"); + + // Group + sb.append("<div class=\"form-group\">"); + sb.append(label_group).append("\n"); + sb.append("<select class=\"form-control\" name=\"group_id\" id=\"select_group\">\n"); + + Group[] groups = getGroups(context, hrq, subInfo); + if (groups != null) + { + for (Group group : groups) + { + sb.append("<option value=\"").append(group.getID()).append("\""); + if (group_id == group.getID()) { + sb.append(" selected=\"selected\""); + } + sb.append(">").append(group.getName()).append("</option>\n"); + } + } + else + { + sb.append("<option value=\"0\" selected=\"selected\">Anonymous</option>\n"); + } + sb.append("</select>\n"); + sb.append("</div>"); + // Select open or embargo + sb.append(label_embargo).append("\n"); + sb.append("<div class=\"radio\">"); + sb.append("<label><input name=\"open_access_radios\" type=\"radio\" value=\"0\"").append(radio0Checked).append(" />").append(radio0).append("</label>\n"); + sb.append("</div>"); + sb.append("<div class=\"radio\">"); + sb.append("<label><input name=\"open_access_radios\" type=\"radio\" value=\"1\"").append(radio1Checked).append(" />").append(radio1).append("</label>\n"); + sb.append("</div>"); + + } + + // Embargo Date + if (hidden) + { + sb.append("<input name=\"embargo_until_date\" id=\"embargo_until_date_hidden\" type=\"hidden\" value=\"").append(startDate).append("\" />\n");; + sb.append("<input name=\"reason\" id=\"reason_hidden\" type=\"hidden\" value=\"").append(reason).append("\" />\n"); + } + else + { + sb.append("<div class=\"form-group col-md-12\">"); + sb.append("<div class=\"col-md-2\">"); + sb.append(label_date); + sb.append("</div>"); + sb.append("<div class=\"col-md-2\">"); + sb.append("<input class=\"form-control\" name=\"embargo_until_date\" id=\"embargo_until_date\" maxlength=\"10\" size=\"10\" type=\"text\" value=\"").append(startDate).append("\"").append(disabled).append(" />\n"); + sb.append("</div>"); + sb.append("<div class=\"col-md-8\">"); + sb.append("<span class=\"help-block\">"+radio_help+"</span>"); + sb.append("</div>"); + sb.append("</div>"); + // Reason + sb.append("<div class=\"form-group col-md-12\">"); + sb.append("<div class=\"col-md-12\">"); + sb.append(label_reason).append("\n"); + sb.append("</div>"); + sb.append("<div class=\"col-md-12\">"); + sb.append("<p class=\"help-block\">").append(help_reason).append("</p>").append("\n"); + sb.append("</div>"); + sb.append("<div class=\"col-md-12\">"); + sb.append("<textarea class=\"form-control\" name=\"reason\" id=\"reason\" cols=\"30\" rows=\"5\"").append(disabled).append(">").append(reason).append("</textarea>\n"); + sb.append("</div>"); + sb.append("</div>"); + } + + // Add policy button + if (addpolicy) + { + + sb.append("<input class=\"btn btn-success col-md-offset-5\" name=\"submit_add_policy\" type=\"submit\" value=\"").append(button_confirm).append("\" />\n"); + + } + + + out.println(sb.toString()); + } + catch (IOException ie) + { + throw new JspException(ie); + } + catch (SQLException e) + { + throw new JspException(e); + } + + return SKIP_BODY; + } + + /** + * Get the browseInfo + * + * @return the browseInfo + */ + public SubmissionInfo getSubInfo() + { + return subInfo; + } + + /** + * Set the browseInfo + * + * @param browseInfo + * the browseInfo + */ + public void setSubInfo(SubmissionInfo subInfo) + { + this.subInfo = subInfo; + } + + /** + * Get the dso + * + * @return the dso + */ + public DSpaceObject getDso() + { + return dso; + } + + /** + * Set the the dso + * + * @param the dso + * the dso + */ + public void setDso(DSpaceObject dso) + { + this.dso = dso; + } + + /** + * Get the rp + * + * @return the rp + */ + public ResourcePolicy getRp() + { + return rp; + } + + /** + * Set the the rp + * + * @param the rp + * the rp + */ + public void setRp(ResourcePolicy rp) + { + this.rp = rp; + } + + /** + * Get the display open/embargo setting radio flag + * + * @return radio + */ + public boolean getEmbargo() + { + return embargo; + } + + /** + * Set the display open/embargo setting radio flag + * + * @param embargo + * boolean + */ + public void setEmbargo(boolean embargo) + { + this.embargo = embargo; + } + + /** + * Get the hidden flag + * + * @return hidden + */ + public boolean getHidden() + { + return hidden; + } + + /** + * Set the hidden flag + * + * @param hidden + * boolean + */ + public void setHidden(boolean hidden) + { + this.hidden = hidden; + } + + /** + * Set the add_policy button flag + * + * @param addpolicy + * boolean + */ + public void setAddpolicy(boolean addpolicy) + { + this.addpolicy = addpolicy; + } + + /** + * Get the add_policy button flag + * + * @return addpolicy + */ + public boolean getAddpolicy() + { + return addpolicy; + } + + public void release() + { + dso = null; + subInfo = null; + rp = null; + embargo = false; + hidden = false; + addpolicy = false; + } + + private Group[] getGroups(Context context, HttpServletRequest request, SubmissionInfo subInfo) + throws SQLException + { + Group[] groups = null; + // retrieve groups + if (restrictedGroup != null) + { + Group uiGroup = Group.findByName(context, restrictedGroup); + if (uiGroup != null) + { + groups = uiGroup.getMemberGroups(); + } + } + + if (groups == null || groups.length == 0){ + groups = Group.findAll(context, Group.NAME); + } + + return groups; + } + +} diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/jsptag/PoliciesListTag.java b/dspace-jspui/src/main/java/org/dspace/app/webui/jsptag/PoliciesListTag.java new file mode 100644 index 0000000..6dee1f1 --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/jsptag/PoliciesListTag.java @@ -0,0 +1,156 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.jsptag; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +import javax.servlet.jsp.JspException; +import javax.servlet.jsp.JspWriter; +import javax.servlet.jsp.jstl.fmt.LocaleSupport; +import javax.servlet.jsp.tagext.TagSupport; + +import org.apache.commons.lang.time.DateFormatUtils; +import org.apache.log4j.Logger; +import org.dspace.authorize.ResourcePolicy; + +/** + * Tag to display embargo settings + * + * @author Keiji Suzuki + * @version $Revision$ + */ +public class PoliciesListTag extends TagSupport +{ + /** log4j category */ + private static Logger log = Logger.getLogger(PoliciesListTag.class); + + /** Groups to make options list */ + private transient List<ResourcePolicy> policies = null; + private transient boolean showButton = true; + + public PoliciesListTag() + { + super(); + } + + public int doStartTag() throws JspException + { + String label_name = LocaleSupport.getLocalizedMessage(pageContext, "org.dspace.app.webui.jsptag.policies-list.label_name"); + String label_action = LocaleSupport.getLocalizedMessage(pageContext, "org.dspace.app.webui.jsptag.policies-list.label_action"); + String label_group = LocaleSupport.getLocalizedMessage(pageContext, "org.dspace.app.webui.jsptag.policies-list.label_group"); + String label_sdate = LocaleSupport.getLocalizedMessage(pageContext, "org.dspace.app.webui.jsptag.policies-list.label_sdate"); + String label_edate = LocaleSupport.getLocalizedMessage(pageContext, "org.dspace.app.webui.jsptag.policies-list.label_edate"); + + String label_emptypolicies = LocaleSupport.getLocalizedMessage(pageContext, "org.dspace.app.webui.jsptag.policies-list.no_policies"); + + JspWriter out = pageContext.getOut(); + StringBuffer sb = new StringBuffer(); + + try + { + if (policies != null && policies.size() > 0) + { + sb.append("<div class=\"table-responsive\">\n"); + sb.append("<table class=\"table\">\n"); + sb.append("<tr>\n"); + sb.append("<th class=\"accessHeadOdd\">").append(label_name).append("</th>\n"); + sb.append("<th class=\"accessHeadEven\">").append(label_action).append("</th>\n"); + sb.append("<th class=\"accessHeadOdd\">").append(label_group).append("</th>\n"); + sb.append("<th class=\"accessHeadEven\">").append(label_sdate).append("</th>\n"); + sb.append("<th class=\"accessHeadOdd\">").append(label_edate).append("</th>\n"); + if(showButton) + { + sb.append("<th class=\"accessButton\"> </th>\n"); + } + sb.append("</tr>\n"); + + String column1 = "Even"; + String column2 = "Odd"; + for (ResourcePolicy policy : policies) + { + column1 = (column1.equals("Even") ? "Odd" : "Even"); + column2 = (column2.equals("Even") ? "Odd" : "Even"); + String rpName = (policy.getRpName() == null ? "" : policy.getRpName()); + String startDate = (policy.getStartDate() == null ? "" : DateFormatUtils.format(policy.getStartDate(), "yyyy-MM-dd")); + String endDate = (policy.getEndDate() == null ? "" : DateFormatUtils.format(policy.getEndDate(), "yyyy-MM-dd")); + + + sb.append("<tr>\n"); + sb.append("<td class=\"access").append(column1).append("\">").append(rpName).append("</td>\n"); + sb.append("<td class=\"access").append(column2).append("\">").append(policy.getActionText()).append("</td>\n"); + sb.append("<td class=\"access").append(column1).append("\">").append(policy.getGroup().getName()).append("</td>\n"); + sb.append("<td class=\"access").append(column2).append("\">").append(startDate).append("</td>\n"); + sb.append("<td class=\"access").append(column1).append("\">").append(endDate).append("</td>\n"); + if(showButton) { + sb.append("<td class=\"accessButton\">\n"); + sb.append("<input class=\"btn btn-default\" name=\"submit_edit_edit_policies_").append(policy.getID()).append("\" type=\"submit\" value=\"Edit\" /> <input class=\"btn btn-danger\" name=\"submit_delete_edit_policies_").append(policy.getID()).append("\" type=\"submit\" value=\"Remove\" />\n"); + sb.append("</td>\n"); + } + sb.append("</tr>\n"); + } + sb.append("</table>\n"); + sb.append("</div>\n"); + } + else + { + sb.append("<div class=\"alert alert-warning\">").append(label_emptypolicies).append("</div>").append("\n"); + } + out.println(sb.toString()); + } + catch (IOException ie) + { + throw new JspException(ie); + } + catch (SQLException e) + { + throw new JspException(e); + } + + return SKIP_BODY; + } + + /** + * Get the policies to list + * + * @return the policies + */ + public List<ResourcePolicy> getPolicies() + { + return policies; + } + + /** + * Set the policies to list + * + * @param itemsIn + * the policies + */ + public void setPolicies(List<ResourcePolicy> policies) + { + this.policies = policies; + } + + + public void release() + { + policies = null; + } + + public boolean isShowButton() + { + return showButton; + } + + public void setShowButton(boolean showButton) + { + this.showButton = showButton; + } + +} diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/BatchMetadataImportServlet.java b/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/BatchMetadataImportServlet.java new file mode 100644 index 0000000..36f1784 --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/BatchMetadataImportServlet.java @@ -0,0 +1,174 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.servlet; + +import java.io.*; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Locale; +import java.util.ResourceBundle; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException; +import org.apache.log4j.Logger; +import org.dspace.app.webui.util.JSPManager; +import org.dspace.app.webui.util.FileUploadRequest; +import org.dspace.app.itemimport.BTEBatchImportService; +import org.dspace.app.itemimport.ItemImport; +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.Collection; +import org.dspace.core.*; +import org.dspace.utils.DSpace; +import org.elasticsearch.common.collect.Lists; + +/** + * Servlet to batch import metadata via the BTE + * + * @author Stuart Lewis + */ +public class BatchMetadataImportServlet extends DSpaceServlet +{ + /** log4j category */ + private static Logger log = Logger.getLogger(BatchMetadataImportServlet.class); + + /** + * Respond to a post request for metadata bulk importing via csv + * + * @param context a DSpace Context object + * @param request the HTTP request + * @param response the HTTP response + * + * @throws ServletException + * @throws IOException + * @throws SQLException + * @throws AuthorizeException + */ + protected void doDSPost(Context context, HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException, + SQLException, AuthorizeException + { + // First, see if we have a multipart request (uploading a metadata file) + String contentType = request.getContentType(); + if ((contentType != null) && (contentType.indexOf("multipart/form-data") != -1)) + { + String message = null; + + // Process the file uploaded + try { + // Wrap multipart request to get the submission info + FileUploadRequest wrapper = new FileUploadRequest(request); + File f = wrapper.getFile("file"); + + int colId = Integer.parseInt(wrapper.getParameter("collection")); + Collection collection = Collection.find(context, colId); + + String inputType = wrapper.getParameter("inputType"); + + try { + ItemImport.processUploadableImport(f, new Collection[]{collection}, inputType, context); + + request.setAttribute("has-error", "false"); + + } catch (Exception e) { + request.setAttribute("has-error", "true"); + message = e.getMessage(); + e.printStackTrace(); + } + } catch (FileSizeLimitExceededException e) { + request.setAttribute("has-error", "true"); + message = e.getMessage(); + e.printStackTrace(); + } catch (Exception e) { + request.setAttribute("has-error", "true"); + message = e.getMessage(); + e.printStackTrace(); + } + + //Get all the possible data loaders from the Spring configuration + BTEBatchImportService dls = new DSpace().getSingletonService(BTEBatchImportService.class); + List<String> inputTypes =dls.getFileDataLoaders(); + + request.setAttribute("input-types", inputTypes); + + //Get all collections + List<Collection> collections = null; + String colIdS = request.getParameter("colId"); + if (colIdS!=null){ + collections = new ArrayList<Collection>(); + collections.add(Collection.find(context, Integer.parseInt(colIdS))); + + } + else { + collections = Arrays.asList(Collection.findAll(context)); + } + + request.setAttribute("collections", collections); + + request.setAttribute("message", message); + + // Show the upload screen + JSPManager.showJSP(request, response, "/dspace-admin/batchmetadataimport.jsp"); + + } + else + { + request.setAttribute("has-error", "true"); + + // Show the upload screen + JSPManager.showJSP(request, response, "/dspace-admin/batchmetadataimport.jsp"); + } + } + + /** + * GET request is only ever used to show the upload form + * + * @param context + * a DSpace Context object + * @param request + * the HTTP request + * @param response + * the HTTP response + * + * @throws ServletException + * @throws IOException + * @throws SQLException + * @throws AuthorizeException + */ + protected void doDSGet(Context context, HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException, + SQLException, AuthorizeException + { + //Get all the possible data loaders from the Spring configuration + BTEBatchImportService dls = new DSpace().getSingletonService(BTEBatchImportService.class); + List<String> inputTypes = dls.getFileDataLoaders(); + request.setAttribute("input-types", inputTypes); + + //Get all collections + List<Collection> collections = null; + String colIdS = request.getParameter("colId"); + if (colIdS!=null){ + collections = new ArrayList<Collection>(); + collections.add(Collection.find(context, Integer.parseInt(colIdS))); + + } + else { + collections = Arrays.asList(Collection.findAll(context)); + } + + request.setAttribute("collections", collections); + + // Show the upload screen + JSPManager.showJSP(request, response, "/dspace-admin/batchmetadataimport.jsp"); + } + +} \ No newline at end of file diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/RequestItemServlet.java b/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/RequestItemServlet.java new file mode 100644 index 0000000..8d1c548 --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/RequestItemServlet.java @@ -0,0 +1,538 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.servlet; + +import java.io.IOException; +import java.sql.SQLException; +import java.text.MessageFormat; +import java.util.Date; + +import javax.mail.MessagingException; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.dspace.app.requestitem.RequestItemAuthor; +import org.dspace.app.requestitem.RequestItemAuthorExtractor; +import org.dspace.app.webui.util.JSPManager; +import org.dspace.app.webui.util.RequestItemManager; +import org.dspace.app.webui.util.UIUtil; +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.Bitstream; +import org.dspace.content.Bundle; +import org.dspace.content.DCValue; +import org.dspace.content.Item; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Context; +import org.dspace.core.Email; +import org.dspace.core.I18nUtil; +import org.dspace.core.LogManager; +import org.dspace.eperson.EPerson; +import org.dspace.handle.HandleManager; +import org.dspace.storage.bitstore.BitstreamStorageManager; +import org.dspace.storage.rdbms.DatabaseManager; +import org.dspace.storage.rdbms.TableRow; +import org.dspace.utils.DSpace; + +/** + * Servlet for generate a statistisc report + * + * @author Arnaldo Dantas + * @version $Revision: 1.0 $ + */ +public class RequestItemServlet extends DSpaceServlet +{ + /** log4j category */ + private static Logger log = Logger.getLogger(RequestItemServlet.class); + + /** The information get by form step */ + public static final int ENTER_FORM_PAGE = 1; + + /** The link by submmiter email step*/ + public static final int ENTER_TOKEN = 2; + + /** The link Aproved genarate letter step*/ + public static final int APROVE_TOKEN = 3; + + /* resume leter for request user*/ + public static final int RESUME_REQUEST = 4; + + /* resume leter for request dspace administrator*/ + public static final int RESUME_FREEACESS = 5; + + protected void doDSGet(Context context, + HttpServletRequest request, + HttpServletResponse response) + throws ServletException, IOException, SQLException, AuthorizeException + { + // First get the step + int step = UIUtil.getIntParameter(request, "step"); + + try + { + switch (step) + { + case ENTER_FORM_PAGE: + processForm(context, request, response); + break; + + case ENTER_TOKEN: + processToken(context, request, response); + break; + + case APROVE_TOKEN: + processLetter(context, request, response); + break; + + case RESUME_REQUEST: + processAttach(context, request, response); + break; + + case RESUME_FREEACESS: + processAdmin(context, request, response); + break; + + default: + processForm(context, request, response); + } + context.complete(); + } + catch (MessagingException e) + { + throw new RuntimeException(e.getMessage(), e); + } + } + + protected void doDSPost(Context context, + HttpServletRequest request, + HttpServletResponse response) + throws ServletException, IOException, SQLException, AuthorizeException + { + // Treat as a GET + doDSGet(context, request, response); + } + + private void processForm (Context context, + HttpServletRequest request, + HttpServletResponse response) + throws ServletException, IOException, SQLException, AuthorizeException + { + boolean showRequestCopy = false; + if ("all".equalsIgnoreCase(ConfigurationManager.getProperty("request.item.type")) || + ("logged".equalsIgnoreCase(ConfigurationManager.getProperty("request.item.type")) && + context.getCurrentUser() != null)) + { + showRequestCopy = true; + } + + if (!showRequestCopy) + { + throw new AuthorizeException("The request copy feature is disabled"); + } + + // handle + String handle = request.getParameter("handle"); + + String bitstream_id=request.getParameter("bitstream-id"); + + // Title + String title = null; + Item item = null; + if (StringUtils.isNotBlank(handle)) + { + item = (Item) HandleManager.resolveToObject(context, handle); + + } + if (item == null) + { + JSPManager.showInvalidIDError(request, response, handle, -1); + } + DCValue[] titleDC = item.getDC("title", null, Item.ANY); + if (titleDC != null || titleDC.length > 0) + { + title = titleDC[0].value; + } + else + { + title = I18nUtil.getMessage("jsp.general.untitled", context); + } + + // User email from context + String requesterEmail = request.getParameter("email"); + EPerson currentUser = context.getCurrentUser(); + String userName = null; + + if (currentUser != null) + { + requesterEmail = currentUser.getEmail(); + userName = currentUser.getFullName(); + } + + if (request.getParameter("submit") != null) + { + String reqname = request.getParameter("reqname"); + String coment = request.getParameter("coment"); + if (coment == null || coment.equals("")) + coment = ""; + boolean allfiles = "true".equals(request.getParameter("allfiles")); + + // Check all data is there + if (requesterEmail == null || requesterEmail.equals("") || + reqname == null || reqname.equals("")) + { + request.setAttribute("handle",handle); + request.setAttribute("bitstream-id", bitstream_id); + request.setAttribute("reqname", reqname); + request.setAttribute("email", requesterEmail); + request.setAttribute("coment", coment); + request.setAttribute("title", title); + request.setAttribute("allfiles", allfiles?"true":null); + + request.setAttribute("requestItem.problem", new Boolean(true)); + JSPManager.showJSP(request, response, "/requestItem/request-form.jsp"); + return; + } + + try + { + // All data is there, send the email + Email email = Email.getEmail(I18nUtil.getEmailFilename( + context.getCurrentLocale(), "request_item.author")); + + RequestItemAuthor author = new DSpace() + .getServiceManager() + .getServiceByName( + RequestItemAuthorExtractor.class.getName(), + RequestItemAuthorExtractor.class) + .getRequestItemAuthor(context, item); + + String authorEmail = author.getEmail(); + String authorName = author.getFullName(); + String emailRequest; + + if (authorEmail != null) { + emailRequest = authorEmail; + } else { + emailRequest = ConfigurationManager + .getProperty("mail.helpdesk"); + } + + if (emailRequest == null) { + emailRequest = ConfigurationManager + .getProperty("mail.admin"); + } + email.addRecipient(emailRequest); + + email.addArgument(reqname); + email.addArgument(requesterEmail); + email.addArgument(allfiles ? I18nUtil + .getMessage("itemRequest.all") : Bitstream.find( + context, Integer.parseInt(bitstream_id)).getName()); + email.addArgument(HandleManager.getCanonicalForm(item + .getHandle())); + email.addArgument(title); // request item title + email.addArgument(coment); // message + email.addArgument(RequestItemManager.getLinkTokenEmail(context, + bitstream_id, item.getID(), requesterEmail, reqname, + allfiles)); + + email.addArgument(authorName); // corresponding author name + email.addArgument(authorEmail); // corresponding author email + email.addArgument(ConfigurationManager + .getProperty("dspace.name")); + email.addArgument(ConfigurationManager + .getProperty("mail.helpdesk")); + email.setReplyTo(requesterEmail); + email.send(); + + log.info(LogManager.getHeader(context, + "sent_email_requestItem", + "submitter_id=" + requesterEmail + + ",bitstream_id="+bitstream_id + + ",requestEmail="+requesterEmail)); + + request.setAttribute("handle", handle); + JSPManager.showJSP(request, response, + "/requestItem/request-send.jsp"); + } + catch (MessagingException me) + { + log.warn(LogManager.getHeader(context, + "error_mailing_requestItem", + ""), me); + JSPManager.showInternalError(request, response); + } + } + else + { + // Display request copy form + log.info(LogManager.getHeader(context, + "show_requestItem_form", + "problem=false")); + request.setAttribute("handle", handle); + request.setAttribute("bitstream-id", bitstream_id); + request.setAttribute("email", requesterEmail); + request.setAttribute("reqname", userName); + request.setAttribute("title", title); + request.setAttribute("allfiles", "true"); + JSPManager.showJSP(request, response, "/requestItem/request-form.jsp"); + } + } + + + /* receive token + * get all request data by token + * send email to request user + */ + private void processToken (Context context, + HttpServletRequest request, + HttpServletResponse response) + throws ServletException, IOException, SQLException, AuthorizeException + { + // Token + String token = request.getParameter("token"); + + TableRow requestItem = RequestItemManager.getRequestbyToken( context, token); + // validate + if (requestItem != null) + { + Item item = Item.find(context, requestItem.getIntColumn("item_id")); + String title = ""; + if (item != null) + { + DCValue[] titleDC = item.getDC("title", null, Item.ANY); + if (titleDC != null || titleDC.length > 0) + title = titleDC[0].value; + } + request.setAttribute("request-name", requestItem.getStringColumn("request_name")); + request.setAttribute("handle", item.getHandle()); + request.setAttribute("title", title); + + JSPManager.showJSP(request, response, + "/requestItem/request-information.jsp"); + }else{ + JSPManager.showInvalidIDError(request, response, token, -1); + } + + } + + /* + * receive approvation and generate a letter + * get all request data by token + * send email to request user + */ + private void processLetter(Context context, HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException, + SQLException, AuthorizeException, MessagingException { + // Token + String token = request.getParameter("token"); + boolean yes = request.getParameter("submit_yes") != null; + boolean no = request.getParameter("submit_no") != null; + + // get token, get register, get email template, format email, get + // message to jsp + TableRow requestItem = RequestItemManager.getRequestbyToken(context, + token); + + if (requestItem != null && (yes || no)) { + Item item = Item.find(context, requestItem.getIntColumn("item_id")); + + DCValue[] titleDC = item.getDC("title", null, Item.ANY); + String title = titleDC.length > 0 ? titleDC[0].value : I18nUtil + .getMessage("jsp.general.untitled", context); + + + EPerson submiter = item.getSubmitter(); + + Object[] args = new String[]{ + requestItem.getStringColumn("request_name"), + HandleManager.getCanonicalForm(item.getHandle()), // User + title, // request item title + submiter.getFullName(), // # submmiter name + submiter.getEmail() // # submmiter email + }; + + String subject = I18nUtil.getMessage("itemRequest.response.subject." + + (yes ? "approve" : "reject"), context); + String message = MessageFormat.format(I18nUtil.getMessage("itemRequest.response.body." + + (yes ? "approve" : "reject"), context), args); + + // page + request.setAttribute("response", yes); + request.setAttribute("subject", subject); + request.setAttribute("message", message); + JSPManager.showJSP(request, response, + "/requestItem/request-letter.jsp"); + } else { + JSPManager.showInvalidIDError(request, response, token, -1); + } + } + + /* + * receive token + * get all request data by token + * send email to request user + */ + private void processAttach (Context context, + HttpServletRequest request, + HttpServletResponse response) + throws ServletException, IOException, SQLException, AuthorizeException + { + // Token + String token = request.getParameter("token"); + + //buttom + boolean submit_next = (request.getParameter("submit_next") != null); + + if (submit_next) + { + TableRow requestItem = RequestItemManager.getRequestbyToken( context, token); + // validate + if (requestItem != null) + { + // Token + String subject = request.getParameter("subject"); + String message = request.getParameter("message"); + boolean accept = UIUtil.getBoolParameter(request, "accept_request"); + try + { + Item item = Item.find(context, requestItem.getIntColumn("item_id")); + Email email = new Email(); + email.setSubject(subject); + email.setContent("{0}"); + email.addRecipient(requestItem.getStringColumn("request_email")); + email.addArgument(message); + + // add attach + if (accept) { + if (requestItem.getBooleanColumn("allfiles")) { + Bundle[] bundles = item.getBundles("ORIGINAL"); + for (int i = 0; i < bundles.length; i++) { + Bitstream[] bitstreams = bundles[i] + .getBitstreams(); + for (int k = 0; k < bitstreams.length; k++) { + if (!bitstreams[k].getFormat().isInternal() + && RequestItemManager.isRestricted( + context, bitstreams[k])) { + email.addAttachment( + BitstreamStorageManager + .retrieve( + context, + bitstreams[k] + .getID()), + bitstreams[k].getName(), + bitstreams[k].getFormat() + .getMIMEType()); + } + } + } + } else { + Bitstream bit = Bitstream.find(context, + requestItem.getIntColumn("bitstream_id")); + email.addAttachment(BitstreamStorageManager + .retrieve(context, requestItem + .getIntColumn("bitstream_id")), bit + .getName(), bit.getFormat().getMIMEType()); + } + } + email.send(); + + requestItem.setColumn("accept_request",accept); + requestItem.setColumn("decision_date",new Date()); + DatabaseManager.update(context, requestItem); + + log.info(LogManager.getHeader(context, + "sent_attach_requestItem", + "token=" + token)); + + JSPManager.showJSP(request, response, + "/requestItem/request-free-access.jsp"); + } + catch (MessagingException me) + { + log.warn(LogManager.getHeader(context, + "error_mailing_requestItem", + ""), me); + JSPManager.showInternalError(request, response); + } + } else + JSPManager.showInvalidIDError(request, response, null, -1); + } else { + processToken(context, request, response); + } + } + + /* + * receive approvation and generate a letter + * get all request data by token + * send email to request user + */ + private void processAdmin(Context context, + HttpServletRequest request, + HttpServletResponse response) + throws ServletException, IOException, SQLException, AuthorizeException + { + // Token + String token = request.getParameter("token"); + boolean free = request.getParameter("submit_free") != null; + String name = request.getParameter("name"); + String mail = request.getParameter("email"); + // get token, get register, get email template, format email, get + // message to jsp + TableRow requestItem = RequestItemManager.getRequestbyToken(context, + token); + + if (requestItem != null && free) { + try { + Item item = Item.find(context, + requestItem.getIntColumn("item_id")); + + String emailRequest; + EPerson submiter = item.getSubmitter(); + if (submiter != null) { + emailRequest = submiter.getEmail(); + } else { + emailRequest = ConfigurationManager + .getProperty("mail.helpdesk"); + } + if (emailRequest == null) { + emailRequest = ConfigurationManager + .getProperty("mail.admin"); + } + Email email = Email.getEmail(I18nUtil.getEmailFilename( + context.getCurrentLocale(), "request_item.admin")); + email.addRecipient(emailRequest); + + email.addArgument(Bitstream.find(context, + requestItem.getIntColumn("bitstream_id")).getName()); + email.addArgument(HandleManager.getCanonicalForm(item + .getHandle())); + email.addArgument(requestItem.getStringColumn("token")); + email.addArgument(name); + email.addArgument(mail); + + email.send(); + + log.info(LogManager.getHeader(context, "sent_adm_requestItem", + "token=" + requestItem.getStringColumn("token") + + "item_id=" + item.getID())); + + JSPManager.showJSP(request, response, + "/requestItem/response-send.jsp"); + } catch (MessagingException me) { + log.warn(LogManager.getHeader(context, + "error_mailing_requestItem", ""), me); + JSPManager.showInternalError(request, response); + } + } else { + JSPManager.showInvalidIDError(request, response, token, -1); + } + } +} \ No newline at end of file diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/SHERPAPublisherPolicyServlet.java b/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/SHERPAPublisherPolicyServlet.java new file mode 100644 index 0000000..88a33f5 --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/SHERPAPublisherPolicyServlet.java @@ -0,0 +1,101 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.servlet; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.Iterator; +import java.util.List; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.log4j.Logger; +import org.dspace.app.sherpa.SHERPAJournal; +import org.dspace.app.sherpa.SHERPAPublisher; +import org.dspace.app.sherpa.SHERPAResponse; +import org.dspace.app.sherpa.submit.SHERPASubmitService; +import org.dspace.app.webui.util.JSPManager; +import org.dspace.app.webui.util.UIUtil; +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.Item; +import org.dspace.core.Context; +import org.dspace.utils.DSpace; + +/** + * This servlet use the SHERPASubmitService to build an html page with the + * publisher policy for the journal referred in the specified Item + * + * @author Andrea Bollini + * + */ +public class SHERPAPublisherPolicyServlet extends DSpaceServlet +{ + private SHERPASubmitService sherpaSubmitService = new DSpace() + .getServiceManager().getServiceByName( + SHERPASubmitService.class.getCanonicalName(), + SHERPASubmitService.class); + + /** log4j logger */ + private static Logger log = Logger + .getLogger(SHERPAPublisherPolicyServlet.class); + + protected void doDSGet(Context context, HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException, + SQLException, AuthorizeException + { + int itemID = UIUtil.getIntParameter(request, "item_id"); + Item item = Item.find(context, itemID); + if (item == null) + { + return; + } + SHERPAResponse shresp = sherpaSubmitService.searchRelatedJournals( + context, item); + if (shresp.isError()) + { + request.setAttribute("error", new Boolean(true)); + } + else + { + List<SHERPAJournal> journals = shresp.getJournals(); + if (journals != null) + { + Object[][] results = new Object[journals.size()][]; + if (journals.size() > 0) + { + Iterator<SHERPAJournal> ijourn = journals.iterator(); + int idx = 0; + while (ijourn.hasNext()) + { + SHERPAJournal journ = ijourn.next(); + List<SHERPAPublisher> publishers = shresp + .getPublishers(); + results[idx] = new Object[] { + journ, + publishers != null && publishers.size() > 0 ? publishers + .get(0) : null }; + idx++; + } + } + + request.setAttribute("result", results); + } + } + // Simply forward to the plain form + JSPManager.showJSP(request, response, "/sherpa/sherpa-policy.jsp"); + } + + protected void doDSPost(Context context, HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException, + SQLException, AuthorizeException + { + response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED); + } +} diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/VersionHistoryServlet.java b/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/VersionHistoryServlet.java new file mode 100644 index 0000000..d0b894e --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/VersionHistoryServlet.java @@ -0,0 +1,189 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.servlet; + +import java.io.IOException; +import java.sql.SQLException; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.log4j.Logger; +import org.dspace.app.webui.util.JSPManager; +import org.dspace.app.webui.util.UIUtil; +import org.dspace.app.webui.util.VersionUtil; +import org.dspace.authorize.AuthorizeException; +import org.dspace.authorize.AuthorizeManager; +import org.dspace.content.Item; +import org.dspace.core.Context; +import org.dspace.utils.DSpace; +import org.dspace.versioning.Version; +import org.dspace.versioning.VersionHistory; + +/** + * Servlet for handling the operations in the version history page + * + * @author Pascarelli Luigi Andrea + * @version $Revision$ + */ +public class VersionHistoryServlet extends DSpaceServlet +{ + + /** log4j category */ + private static Logger log = Logger.getLogger(VersionHistoryServlet.class); + + protected void doDSGet(Context context, HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException, + SQLException, AuthorizeException + { + Integer itemID = UIUtil.getIntParameter(request, "itemID"); + String versionID = request.getParameter("versionID"); + + Item item = Item.find(context, itemID); + + if (item == null) { + throw new IllegalArgumentException("Item is null"); + } + + if(!AuthorizeManager.isAdmin(context, + item.getOwningCollection())) + { + // Check if only administrators can view the item history + if (new DSpace().getConfigurationService().getPropertyAsType( + "versioning.item.history.view.admin", true)) + { + throw new AuthorizeException(); + } + + } + + // manage if versionID is not came by request + VersionHistory history = VersionUtil.retrieveVersionHistory(context, + item); + if (versionID == null || versionID.isEmpty()) + { + Version version = history.getVersion(item); + if (version != null) + { + versionID = String.valueOf(version.getVersionId()); + } + } + String submit = UIUtil.getSubmitButton(request, "submit"); + if (submit != null && submit.equals("submit_cancel")) + { + // Pressed the cancel button, redirect us to the item page + response.sendRedirect(request.getContextPath() + "/handle/" + + item.getHandle()); + context.complete(); + return; + } + else if (submit != null && submit.equals("submit_delete")) + { + String[] versionIDs = request.getParameterValues("remove"); + Integer result = doDeleteVersions(request, itemID, versionIDs); + if (result != null) + { + response.sendRedirect(request.getContextPath() + + "/tools/history?delete=true&itemID="+history.getLatestVersion().getItemID()); + } + else + { + // We have removed everything, redirect us to the home page ! + response.sendRedirect(request.getContextPath()); + } + context.complete(); + return; + + } + else if (submit != null && submit.equals("submit_restore")) + { + + doRestoreVersion(request, itemID, versionID); + } + else if (submit != null && submit.equals("submit_update")) + { + doUpdateVersion(request, itemID, versionID); + response.sendRedirect(request.getContextPath() + + "/tools/history?itemID=" + itemID + "&versionID=" + + versionID); + context.complete(); + return; + } + + request.setAttribute("item", item); + request.setAttribute("itemID", itemID); + request.setAttribute("versionID", versionID); + JSPManager.showJSP(request, response, "/tools/version-history.jsp"); + } + + protected void doDSPost(Context context, HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException, + SQLException, AuthorizeException + { + // If this is not overridden, we invoke the raw HttpServlet "doGet" to + // indicate that POST is not supported by this servlet. + doDSGet(UIUtil.obtainContext(request), request, response); + } + + /** + * Delete the given version(s) + * + * @throws IOException + * @throws AuthorizeException + * @throws SQLException + */ + private Integer doDeleteVersions(HttpServletRequest request, + Integer itemID, String... versionIDs) throws SQLException, + AuthorizeException, IOException + { + + return VersionUtil.processDeleteVersions(UIUtil.obtainContext(request), + itemID, versionIDs); + + } + + /** + * Restore the given version + * + * @throws IOException + * @throws AuthorizeException + * @throws SQLException + * @throws NumberFormatException + */ + private Integer doRestoreVersion(HttpServletRequest request, + Integer itemID, String versionID) throws NumberFormatException, + SQLException, AuthorizeException, IOException + { + + String summary = request.getParameter("summary"); + VersionUtil.processRestoreVersion(UIUtil.obtainContext(request), + Integer.parseInt(versionID), summary); + return itemID; + } + + /** + * Update the summary of the given version + * + * @throws IOException + * @throws AuthorizeException + * @throws SQLException + */ + private Integer doUpdateVersion(HttpServletRequest request, Integer itemID, + String versionID) throws SQLException, AuthorizeException, + IOException + { + + String summary = request.getParameter("summary"); + VersionUtil.processUpdateVersion(UIUtil.obtainContext(request), itemID, + summary); + return itemID; + + } + +} diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/VersionItemServlet.java b/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/VersionItemServlet.java new file mode 100644 index 0000000..9e6ab2f --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/VersionItemServlet.java @@ -0,0 +1,84 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.servlet; + +import java.io.IOException; +import java.sql.SQLException; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.log4j.Logger; +import org.dspace.app.webui.util.JSPManager; +import org.dspace.app.webui.util.UIUtil; +import org.dspace.app.webui.util.VersionUtil; +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.Item; +import org.dspace.core.Context; + +/** + * Servlet to handling the versioning of the item + * + * @author Pascarelli Luigi Andrea + * @version $Revision$ + */ +public class VersionItemServlet extends DSpaceServlet +{ + + /** log4j category */ + private static Logger log = Logger.getLogger(VersionItemServlet.class); + + + protected void doDSGet(Context context, HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException, SQLException, + AuthorizeException + { + Integer itemID = UIUtil.getIntParameter(request,"itemID"); + Item item = Item.find(context,itemID); + String submit = UIUtil.getSubmitButton(request,"submit"); + if (submit!=null && submit.equals("submit")){ + request.setAttribute("itemID", itemID); + JSPManager.showJSP(request, response, + "/tools/version-summary.jsp"); + return; + } + + String summary = request.getParameter("summary"); + if (submit!=null && submit.equals("submit_version")){ + Integer wsid = VersionUtil.processCreateNewVersion(context, itemID, summary); + response.sendRedirect(request.getContextPath()+"/submit?resume=" + wsid); + context.complete(); + return; + } + else if (submit!=null && submit.equals("submit_update_version")){ + String versionID = request.getParameter("versionID"); + request.setAttribute("itemID", itemID); + request.setAttribute("versionID", versionID); + JSPManager.showJSP(request, response, + "/tools/version-update-summary.jsp"); + return; + } + + //Send us back to the item page if we cancel ! + response.sendRedirect(request.getContextPath() + "/handle/" + item.getHandle()); + context.complete(); + + } + + + protected void doDSPost(Context context, HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException, + SQLException, AuthorizeException + { + // If this is not overridden, we invoke the raw HttpServlet "doGet" to + // indicate that POST is not supported by this servlet. + doDSGet(UIUtil.obtainContext(request), request, response); + } + +} diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/admin/CurateServlet.java b/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/admin/CurateServlet.java new file mode 100644 index 0000000..70324e6 --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/admin/CurateServlet.java @@ -0,0 +1,440 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.servlet.admin; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.log4j.Logger; +import org.dspace.app.util.Util; +import org.dspace.app.webui.servlet.DSpaceServlet; +import org.dspace.app.webui.util.CurateTaskResult; +import org.dspace.app.webui.util.JSPManager; +import org.dspace.app.webui.util.UIUtil; +import org.dspace.authorize.AuthorizeException; +import org.dspace.authorize.AuthorizeManager; +import org.dspace.content.Collection; +import org.dspace.content.Community; +import org.dspace.content.DSpaceObject; +import org.dspace.content.Item; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Constants; +import org.dspace.core.Context; +import org.dspace.core.I18nUtil; +import org.dspace.curate.Curator; +import org.dspace.core.LogManager; +import org.dspace.handle.HandleManager; + +/** + * + * @author Keiji Suzuki + */ +public class CurateServlet extends DSpaceServlet +{ + // Name of queue used when tasks queued in Admin UI + private static final String TASK_QUEUE_NAME = ConfigurationManager.getProperty("curate", "ui.queuename"); + + // curation status codes in Admin UI: key=status code, value=localized name + private static final Map<String, String> statusMessages = new HashMap<String, String>(); + + // curation tasks to appear in admin UI: key=taskID, value=friendly name + private static Map<String, String> allTasks = new LinkedHashMap<String, String>(); + + // named groups which display together in admin UI: key=groupID, value=friendly group name + private static Map<String, String> taskGroups = new LinkedHashMap<String, String>(); + + // group membership: key=groupID, value=array of taskID + private static Map<String, String[]> groupedTasks = new LinkedHashMap<String, String[]>(); + + static + { + try + { + setStatusMessages(); + setAllTasks(); + setTaskGroups(); + setGroupedTasks(); + } + catch (Exception we) + { + // noop + } + } + + /** Logger */ + private static Logger log = Logger.getLogger(CurateServlet.class); + + protected void doDSGet(Context context, HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException, + SQLException, AuthorizeException + { + doDSPost(context, request, response); + } + + protected void doDSPost(Context context, HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException, + SQLException, AuthorizeException + { + String button = UIUtil.getSubmitButton(request, "submit"); + + // When task gropu is changed, no submit button is clicked. + // Reset the submit button to inform the original page. + if ("submit".equals(button)) + { + if (request.getParameter("community_id") != null) + { + button = "submit_community_select"; + } + else if (request.getParameter("collection_id") != null) + { + button = "submit_collection_select"; + } + else if (request.getParameter("item_id") != null) + { + button = "submit_item_select"; + } + else + { + button = "submit_main_select"; + } + } + + if (button.startsWith("submit_community_")) + { + Community community = Community.find(context, + UIUtil.getIntParameter(request, "community_id")); + request.setAttribute("community", community); + + if (!AuthorizeManager.isAdmin(context, community)) + { + throw new AuthorizeException("Only community admins are allowed to perform curation tasks"); + } + + if ("submit_community_curate".equals(button)) + { + processCurateObject(context, request, community.getHandle()); + } + else if ("submit_community_queue".equals(button)) + { + processQueueObject(context, request, community.getHandle()); + } + + showPage(request, response, "/tools/curate-community.jsp"); + } + else if (button.startsWith("submit_collection_")) + { + Collection collection = Collection.find(context, + UIUtil.getIntParameter(request, "collection_id")); + request.setAttribute("collection", collection); + + if (!AuthorizeManager.isAdmin(context, collection)) + { + throw new AuthorizeException("Only collection admins are allowed to perform curation tasks"); + } + + if ("submit_collection_curate".equals(button)) + { + processCurateObject(context, request, collection.getHandle()); + } + else if ("submit_collection_queue".equals(button)) + { + processQueueObject(context, request, collection.getHandle()); + } + + showPage(request, response, "/tools/curate-collection.jsp"); + } + else if (button.startsWith("submit_item_")) + { + Item item = Item.find(context, + UIUtil.getIntParameter(request, "item_id")); + request.setAttribute("item", item); + + if (!AuthorizeManager.isAdmin(context, item)) + { + throw new AuthorizeException("Only item admins are allowed to perform curation tasks"); + } + + if ("submit_item_curate".equals(button)) + { + processCurateObject(context, request, item.getHandle()); + } + else if ("submit_item_queue".equals(button)) + { + processQueueObject(context, request, item.getHandle()); + } + + showPage(request, response, "/tools/curate-item.jsp"); + } + else if (button.startsWith("submit_main_")) + { + String handle = request.getParameter("handle"); + if (handle != null) + { + if (handle.endsWith("/0")) + { + if (!AuthorizeManager.isAdmin(context)) + { + throw new AuthorizeException("Only system admins are allowed to perform curation tasks over the site"); + } + } + else + { + DSpaceObject dso = HandleManager.resolveToObject(context, handle); + if (!AuthorizeManager.isAdmin(context, dso)) + { + throw new AuthorizeException("Only object (hdl:"+handle+") admins are allowed to perform curation tasks"); + } + } + if ("submit_main_curate".equals(button)) + { + processCurateObject(context, request, handle); + } + else if ("submit_main_queue".equals(button)) + { + processQueueObject(context, request, handle); + } + else if ("submit_main_cancel".equals(button)) + { + handle = null; + } + request.setAttribute("handle", handle); + } + + showPage(request, response, "/dspace-admin/curate-main.jsp"); + } + else + { + log.warn(LogManager.getHeader(context, "integrity_error", UIUtil + .getRequestLogInfo(request))); + JSPManager.showIntegrityError(request, response); + } + } + + private void showPage(HttpServletRequest request, HttpServletResponse response, + String page) throws ServletException, IOException, + SQLException, AuthorizeException + { + String group = request.getParameter("select_curate_group"); + String groupOptions = getGroupSelectOptions(group); + String taskOptions = getTaskSelectOptions(group); + + request.setAttribute("curate_group_options", groupOptions); + request.setAttribute("curate_task_options", taskOptions); + JSPManager.showJSP(request, response, page); + } + + private void processCurateObject(Context context, HttpServletRequest request, String handle) + { + String task = request.getParameter("curate_task"); + Curator curator = getCurator(task); + boolean success = false; + try + { + curator.curate(context, handle); + success = true; + } + catch (Exception e) + { + curator.setResult(task, e.getMessage()); + } + + request.setAttribute("task_result", getCurateMessage(context, curator, task, handle, success)); + } + + private void processQueueObject(Context context, HttpServletRequest request, String handle) { + String task = request.getParameter("curate_task"); + Curator curator = getCurator(task); + boolean success = false; + try + { + curator.queue(context, handle, TASK_QUEUE_NAME); + success = true; + } + catch (Exception e) + { + // no-op (any error should be logged by the Curator itself) + } + + request.setAttribute("task_result", new CurateTaskResult("queue", getTaskName(task), handle, null, null, success)); + } + + private CurateTaskResult getCurateMessage(Context context, Curator curator, String task, String handle, boolean success) + { + String status = statusMessages.get(String.valueOf(curator.getStatus(task))); + if (status == null) + { + status = statusMessages.get("other"); + } + + String result = curator.getResult(task); + if (result == null) + { + result = I18nUtil.getMessage("org.dspace.app.webui.servlet.admin.CurationServlet.null-result", context); + } + + return new CurateTaskResult("perform", getTaskName(task), handle, status, result, success); + } + + private Curator getCurator(String task) + { + if (task != null && task.length() == 0) + { + task = null; + } + Curator curator = new Curator(); + curator.addTask(task); + curator.setInvoked(Curator.Invoked.INTERACTIVE); + return curator; + } + + private static void setStatusMessages() throws UnsupportedEncodingException + { + String statusCodes = ConfigurationManager.getProperty("curate", "ui.statusmessages"); + for (String property : statusCodes.split(",")) + { + String[] keyValuePair = property.split("="); + statusMessages.put(URLDecoder.decode(keyValuePair[0].trim(), "UTF-8"), + URLDecoder.decode(keyValuePair[1].trim(), "UTF-8")); + } + } + + private static void setAllTasks() throws UnsupportedEncodingException + { + String properties = ConfigurationManager.getProperty("curate", "ui.tasknames"); + for (String property : properties.split(",")) + { + String[] keyValuePair = property.split("="); + allTasks.put(URLDecoder.decode(keyValuePair[0].trim(), "UTF-8"), + URLDecoder.decode(keyValuePair[1].trim(), "UTF-8")); + } + } + + private static void setTaskGroups() throws UnsupportedEncodingException + { + String groups = ConfigurationManager.getProperty("curate", "ui.taskgroups"); + if (groups != null) + { + for (String property : groups.split(",")) + { + String[] keyValuePair = property.split("="); + taskGroups.put(URLDecoder.decode(keyValuePair[0].trim(), "UTF-8"), + URLDecoder.decode(keyValuePair[1].trim(), "UTF-8")); + } + } + } + + private static void setGroupedTasks() throws UnsupportedEncodingException + { + if (!taskGroups.isEmpty()) + { + Iterator<String> iterator = taskGroups.keySet().iterator(); + while (iterator.hasNext()) + { + String groupID = iterator.next(); + String memberList = ConfigurationManager.getProperty("curate", "ui.taskgroup" + "." + groupID); + String[] members = memberList.split(","); + groupedTasks.put(URLDecoder.decode(groupID, "UTF-8"), members); + } + } + } + + /** + * Get the string of html option elements for group selection + * + * @param group the short name / identifier for the group + * @return the string of the html option elements + * return "" if no group exists. + */ + private String getGroupSelectOptions(String group) + { + StringBuilder sb = new StringBuilder(); + Iterator<String> iterator = taskGroups.keySet().iterator(); + while (iterator.hasNext()) + { + String groupID = iterator.next(); + sb.append("<option"); + if (groupID.equals(group)) + { + sb.append(" selected=\"selected\""); + } + sb.append(" value=\"").append(groupID).append("\">") + .append(taskGroups.get(groupID)).append("</option>\n"); + } + return sb.toString(); + } + + /** + * Get the string of html option elements for task selection of the specified task group + * when no task group exists, made from all tasks + * + * @param group the short name / identifier for the group + * @return the string of the html option elements + */ + private static String getTaskSelectOptions(String group) + { + StringBuilder sb = new StringBuilder(); + if (groupedTasks.isEmpty()) + { + Iterator<String> iterator = allTasks.keySet().iterator(); + while (iterator.hasNext()) + { + String task = iterator.next(); + sb.append("<option value=\"").append(task).append("\">") + .append(allTasks.get(task)).append("</option>\n"); + } + } + else + { + if (group == null || "".equals(group)) + { + group = groupedTasks.keySet().iterator().next(); + } + + String[] members = groupedTasks.get(group); + if (members != null && members.length > 0) + { + for (String member : members) + { + Iterator<String> innerIterator = allTasks.keySet().iterator(); + while (innerIterator.hasNext()) + { + String taskID = innerIterator.next().trim(); + if (taskID.equals(member.trim())) + { + sb.append("<option value=\"").append(taskID).append("\">") + .append(allTasks.get(taskID)).append("</option>\n"); + } + } + } + } + } + return sb.toString(); + } + + /** + * Retrieve UI "friendly" Task Name for display to user + * + * @param taskID the short name / identifier for the task + * @return the User Friendly name for this task + */ + private String getTaskName(String taskID) + { + return allTasks.containsKey(taskID) ? allTasks.get(taskID) : taskID; + } + +} diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/admin/PrivateItemsServlet.java b/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/admin/PrivateItemsServlet.java new file mode 100644 index 0000000..dded39d --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/admin/PrivateItemsServlet.java @@ -0,0 +1,160 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.servlet.admin; + +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.dspace.app.webui.util.JSPManager; +import org.dspace.app.webui.util.UIUtil; +import org.dspace.app.webui.servlet.AbstractBrowserServlet; +import org.dspace.authorize.AuthorizeException; +import org.dspace.browse.*; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Context; +import org.dspace.core.LogManager; +import org.dspace.sort.SortOption; +import org.apache.log4j.Logger; + +/** + * Servlet for browsing through private items: + * + * @author Keiji Suzuki + * @version $Revision$ + */ +public class PrivateItemsServlet extends AbstractBrowserServlet +{ + + /** log4j category */ + private static Logger log = Logger.getLogger(PrivateItemsServlet.class); + + /** + * Do the usual DSpace GET method. You will notice that browse does not currently + * respond to POST requests. + */ + protected void doDSGet(Context context, HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException, SQLException, + AuthorizeException + { + try + { + // all browse requests currently come to GET. + BrowserScope scope = getBrowserScopeForRequest(context, request, response); + + // Check that we are doing an item browse + if (scope.getBrowseIndex() == null || scope.getBrowseIndex().isItemIndex()) + { + // And override the index in the scope with the private items + scope.setBrowseIndex(BrowseIndex.getPrivateBrowseIndex()); + } + else + { + showError(context, request, response); + } + + // execute browse request + processBrowse(context, scope, request, response); + } + catch (BrowseException be) + { + log.error("caught exception: ", be); + throw new ServletException(be); + } + } + + + /** + * Display the error page + * + * @param context + * @param request + * @param response + * @throws ServletException + * @throws IOException + * @throws SQLException + * @throws AuthorizeException + */ + protected void showError(Context context, HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException, SQLException, + AuthorizeException + { + request.setAttribute("useAdminLayout", "yes"); + + JSPManager.showInternalError(request, response); + } + + /** + * Display the No Results page + * + * @param context + * @param request + * @param response + * @throws ServletException + * @throws IOException + * @throws SQLException + * @throws AuthorizeException + */ + protected void showNoResultsPage(Context context, HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException, SQLException, + AuthorizeException + { + request.setAttribute("browsePrivate", "yes"); + + JSPManager.showJSP(request, response, "/browse/no-results.jsp"); + } + + /** + * Display the single page. This is the page which lists just the single values of a + * metadata browse, not individual items. Single values are links through to all the items + * that match that metadata value + * + * @param context + * @param request + * @param response + * @throws ServletException + * @throws IOException + * @throws SQLException + * @throws AuthorizeException + */ + protected void showSinglePage(Context context, HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException, SQLException, + AuthorizeException + { + // Show an error as this currently isn't supported + showError(context, request, response); + } + + /** + * Display a full item listing. + * + * @param context + * @param request + * @param response + * @throws ServletException + * @throws IOException + * @throws SQLException + * @throws AuthorizeException + */ + protected void showFullPage(Context context, HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException, SQLException, + AuthorizeException + { + request.setAttribute("browsePrivate", "yes"); + + JSPManager.showJSP(request, response, "/browse/full.jsp"); + } + + +} diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/submit/step/JSPAccessStep.java b/dspace-jspui/src/main/java/org/dspace/app/webui/submit/step/JSPAccessStep.java new file mode 100644 index 0000000..8d4974e --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/submit/step/JSPAccessStep.java @@ -0,0 +1,205 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.submit.step; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.log4j.Logger; +import org.dspace.app.util.SubmissionInfo; +import org.dspace.app.webui.submit.JSPStep; +import org.dspace.app.webui.submit.JSPStepManager; +import org.dspace.app.webui.util.UIUtil; +import org.dspace.authorize.AuthorizeException; +import org.dspace.authorize.AuthorizeManager; +import org.dspace.authorize.ResourcePolicy; +import org.dspace.content.Item; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Context; +import org.dspace.submit.AbstractProcessingStep; +import org.dspace.submit.step.AccessStep; + +/** + * + * @author Keiji Suzuki + * @version $Revision$ + */ +public class JSPAccessStep extends JSPStep +{ + /** JSP which displays the step to the user * */ + private static final String DISPLAY_JSP = "/submit/access-step.jsp"; + + /** JSP which edits the selected resource policy to the user * */ + private static final String EDIT_POLICY_JSP = "/submit/edit-policy.jsp"; + + private static final String REVIEW_JSP = "/submit/review-policy.jsp"; + + private boolean advanced = ConfigurationManager.getBooleanProperty("webui.submission.restrictstep.enableAdvancedForm", false); + + /** log4j logger */ + private static Logger log = Logger.getLogger(JSPAccessStep.class); + + /** + * Do any pre-processing to determine which JSP (if any) is used to generate + * the UI for this step. This method should include the gathering and + * validating of all data required by the JSP. In addition, if the JSP + * requires any variable to passed to it on the Request, this method should + * set those variables. + * <P> + * If this step requires user interaction, then this method must call the + * JSP to display, using the "showJSP()" method of the JSPStepManager class. + * <P> + * If this step doesn't require user interaction OR you are solely using + * Manakin for your user interface, then this method may be left EMPTY, + * since all step processing should occur in the doProcessing() method. + * + * @param context + * current DSpace context + * @param request + * current servlet request object + * @param response + * current servlet response object + * @param subInfo + * submission info object + */ + public void doPreProcessing(Context context, HttpServletRequest request, + HttpServletResponse response, SubmissionInfo subInfo) + throws ServletException, IOException, SQLException, + AuthorizeException + { + // Tell JSPStepManager class to load "access-step.jsp" + JSPStepManager.showJSP(request, response, subInfo, DISPLAY_JSP); + } + + /** + * Do any post-processing after the step's backend processing occurred (in + * the doProcessing() method). + * <P> + * It is this method's job to determine whether processing completed + * successfully, or display another JSP informing the users of any potential + * problems/errors. + * <P> + * If this step doesn't require user interaction OR you are solely using + * Manakin for your user interface, then this method may be left EMPTY, + * since all step processing should occur in the doProcessing() method. + * + * @param context + * current DSpace context + * @param request + * current servlet request object + * @param response + * current servlet response object + * @param subInfo + * submission info object + * @param status + * any status/errors reported by doProcessing() method + */ + public void doPostProcessing(Context context, HttpServletRequest request, + HttpServletResponse response, SubmissionInfo subInfo, int status) + throws ServletException, IOException, SQLException, + AuthorizeException + { + String buttonPressed = UIUtil.getSubmitButton(request, + AbstractProcessingStep.NEXT_BUTTON); + + if (status == AccessStep.STATUS_EDIT_POLICY) + { + JSPStepManager.showJSP(request, response, subInfo, EDIT_POLICY_JSP); + } + else if (buttonPressed.equals(AccessStep.FORM_ACCESS_BUTTON_ADD) + || buttonPressed.startsWith("submit_delete_edit_policies_") + || buttonPressed.equals(AccessStep.FORM_EDIT_BUTTON_CANCEL) + || buttonPressed.equals(AccessStep.FORM_EDIT_BUTTON_SAVE) + || status > 0) + { + // Here's some sample error message processing! + if (status > 0 && status != AccessStep.STATUS_EDIT_POLICY) + { + request.setAttribute("error_id", Integer.valueOf(status)); + } + + // special processing for this error message + JSPStepManager.showJSP(request, response, subInfo, DISPLAY_JSP); + } + } + + /** + * Retrieves the number of pages that this "step" extends over. This method + * is used by the SubmissionController to build the progress bar. + * <P> + * This method may just return 1 for most steps (since most steps consist of + * a single page). But, it should return a number greater than 1 for any + * "step" which spans across a number of HTML pages. For example, the + * configurable "Describe" step (configured using input-forms.xml) overrides + * this method to return the number of pages that are defined by its + * configuration file. + * <P> + * Steps which are non-interactive (i.e. they do not display an interface to + * the user) should return a value of 1, so that they are only processed + * once! + * + * + * @param request + * The HTTP Request + * @param subInfo + * The current submission information object + * + * @return the number of pages in this step + */ + public int getNumberOfPages(HttpServletRequest request, + SubmissionInfo subInfo) throws ServletException + { + return 1; + } + + /** + * Return the URL path (e.g. /submit/review-metadata.jsp) of the JSP + * which will review the information that was gathered in this Step. + * <P> + * This Review JSP is loaded by the 'Verify' Step, in order to dynamically + * generate a submission verification page consisting of the information + * gathered in all the enabled submission steps. + * + * @param context + * current DSpace context + * @param request + * current servlet request object + * @param response + * current servlet response object + * @param subInfo + * submission info object + */ + public String getReviewJSP(Context context, HttpServletRequest request, + HttpServletResponse response, SubmissionInfo subInfo) + { + + // Policies List + List<ResourcePolicy> rpolicies = new ArrayList<ResourcePolicy>(); + try + { + rpolicies = AuthorizeManager.findPoliciesByDSOAndType(context, subInfo.getSubmissionItem().getItem(), ResourcePolicy.TYPE_CUSTOM); + } + catch (SQLException e) + { + log.error(e.getMessage(), e); + } + + Item item = subInfo.getSubmissionItem().getItem(); + request.setAttribute("submission.item.isdiscoverable", item.isDiscoverable()); + request.setAttribute("submission.item.rpolicies", rpolicies); + request.setAttribute("advancedEmbargo", advanced); + return REVIEW_JSP; + } + +} diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/submit/step/JSPStartSubmissionLookupStep.java b/dspace-jspui/src/main/java/org/dspace/app/webui/submit/step/JSPStartSubmissionLookupStep.java new file mode 100644 index 0000000..b99f503 --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/submit/step/JSPStartSubmissionLookupStep.java @@ -0,0 +1,270 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.submit.step; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.log4j.Logger; +import org.dspace.app.util.SubmissionInfo; +import org.dspace.app.webui.submit.JSPStep; +import org.dspace.app.webui.submit.JSPStepManager; +import org.dspace.app.webui.util.JSPManager; +import org.dspace.app.webui.util.UIUtil; +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.Collection; +import org.dspace.content.Community; +import org.dspace.core.Constants; +import org.dspace.core.Context; +import org.dspace.submit.lookup.SubmissionLookupDataLoader; +import org.dspace.submit.lookup.SubmissionLookupService; +import org.dspace.submit.step.StartSubmissionLookupStep; +import org.dspace.utils.DSpace; + +/** + * Step which controls selecting an item from external database service to auto + * fill metadata for DSpace JSP-UI + * <P> + * This JSPStep class works with the SubmissionController servlet for the JSP-UI + * <P> + * The following methods are called in this order: + * <ul> + * <li>Call doPreProcessing() method</li> + * <li>If showJSP() was specified from doPreProcessing(), then the JSP specified + * will be displayed</li> + * <li>If showJSP() was not specified from doPreProcessing(), then the + * doProcessing() method is called an the step completes immediately</li> + * <li>Call doProcessing() method on appropriate AbstractProcessingStep after + * the user returns from the JSP, in order to process the user input</li> + * <li>Call doPostProcessing() method to determine if more user interaction is + * required, and if further JSPs need to be called.</li> + * <li>If there are more "pages" in this step then, the process begins again + * (for the new page).</li> + * <li>Once all pages are complete, control is forwarded back to the + * SubmissionController, and the next step is called.</li> + * </ul> + * + * @see org.dspace.app.webui.servlet.SubmissionController + * @see org.dspace.app.webui.submit.JSPStep + * @see org.dspace.submit.step.StartSubmissionLookupStep + * + * @author Andrea Bollini + * @version $Revision$ + */ +public class JSPStartSubmissionLookupStep extends JSPStep +{ + /** JSP which displays HTML for this Class * */ + private static final String START_LOOKUP_JSP = "/submit/start-lookup-submission.jsp"; + + /** log4j logger */ + private static Logger log = Logger + .getLogger(JSPStartSubmissionLookupStep.class); + + SubmissionLookupService slService = new DSpace().getServiceManager() + .getServiceByName(SubmissionLookupService.class.getCanonicalName(), + SubmissionLookupService.class); + + /** + * Do any pre-processing to determine which JSP (if any) is used to generate + * the UI for this step. This method should include the gathering and + * validating of all data required by the JSP. In addition, if the JSP + * requires any variable to passed to it on the Request, this method should + * set those variables. + * <P> + * If this step requires user interaction, then this method must call the + * JSP to display, using the "showJSP()" method of the JSPStepManager class. + * <P> + * If this step doesn't require user interaction OR you are solely using + * Manakin for your user interface, then this method may be left EMPTY, + * since all step processing should occur in the doProcessing() method. + * + * @param context + * current DSpace context + * @param request + * current servlet request object + * @param response + * current servlet response object + * @param subInfo + * submission info object + */ + public void doPreProcessing(Context context, HttpServletRequest request, + HttpServletResponse response, SubmissionInfo subInfo) + throws ServletException, IOException, SQLException, + AuthorizeException + { + if (request.getAttribute("no.collection") == null + || !(Boolean) request.getAttribute("no.collection")) + { + request.setAttribute("s_uuid", UUID.randomUUID().toString()); + } + + /* + * Possible parameters from JSP: + * + * collection= <collection_id> - a collection that has already been + * selected (to use as preference! it is not the final choice!!!) + * + * collectionid = the FINAL chosed collection!!! + * + * With no parameters, this servlet prepares for display of the Select + * Collection JSP. + */ + int collectionID = UIUtil.getIntParameter(request, "collectionid"); + Collection col = null; + + if (collectionID != -1) + { + col = Collection.find(context, collectionID); + } + + // if we already have a valid collection, then we can forward directly + // to post-processing + if (col != null) + { + log.debug("Select Collection page skipped, since a Collection ID was already found. Collection ID=" + + collectionID); + } + else + { + // gather info for JSP page + Community com = UIUtil.getCommunityLocation(request); + + Collection[] collections; + + if (com != null) + { + // In a community. Show collections in that community only. + collections = Collection.findAuthorized(context, com, + Constants.ADD); + } + else + { + // Show all collections + collections = Collection.findAuthorized(context, null, + Constants.ADD); + } + + // save collections to request for JSP + request.setAttribute("collections", collections); + request.setAttribute("collectionID", collectionID); + + Map<String, List<String>> identifiers2providers = slService + .getProvidersIdentifiersMap(); + List<String> searchProviders = slService.getSearchProviders(); + List<String> fileProviders = slService.getFileProviders(); + request.setAttribute("identifiers2providers", identifiers2providers); + request.setAttribute("searchProviders", searchProviders); + request.setAttribute("fileLoaders", fileProviders); + request.setAttribute("identifiers", slService.getIdentifiers()); + // we need to load the select collection JSP + JSPStepManager + .showJSP(request, response, subInfo, START_LOOKUP_JSP); + } + } + + /** + * Do any post-processing after the step's backend processing occurred (in + * the doProcessing() method). + * <P> + * It is this method's job to determine whether processing completed + * successfully, or display another JSP informing the users of any potential + * problems/errors. + * <P> + * If this step doesn't require user interaction OR you are solely using + * Manakin for your user interface, then this method may be left EMPTY, + * since all step processing should occur in the doProcessing() method. + * + * @param context + * current DSpace context + * @param request + * current servlet request object + * @param response + * current servlet response object + * @param subInfo + * submission info object + * @param status + * any status/errors reported by doProcessing() method + */ + public void doPostProcessing(Context context, HttpServletRequest request, + HttpServletResponse response, SubmissionInfo subInfo, int status) + throws ServletException, IOException, SQLException, + AuthorizeException + { + // if the user didn't select a collection, + // send him/her back to "select a collection" page + if (status == StartSubmissionLookupStep.STATUS_NO_COLLECTION) + { + // specify "no collection" error message should be displayed + request.setAttribute("no.collection", new Boolean(true)); + + // reload this page, by re-calling doPreProcessing() + doPreProcessing(context, request, response, subInfo); + } + else if (status == StartSubmissionLookupStep.STATUS_INVALID_COLLECTION) + { + JSPManager.showInvalidIDError(request, response, + request.getParameter("collectionid"), Constants.COLLECTION); + } + else if (status == StartSubmissionLookupStep.STATUS_NO_SUUID) + { + // specify "no suuid" error message should be displayed + request.setAttribute("no.suuid", new Boolean(true)); + + // reload this page, by re-calling doPreProcessing() + doPreProcessing(context, request, response, subInfo); + } + else if (status == StartSubmissionLookupStep.STATUS_SUBMISSION_EXPIRED) + { + // specify "no collection" error message should be displayed + request.setAttribute("expired", new Boolean(true)); + + // reload this page, by re-calling doPreProcessing() + doPreProcessing(context, request, response, subInfo); + } + else if (status != StartSubmissionLookupStep.STATUS_COMPLETE) + { + // specify "no suuid" error message should be displayed + request.setAttribute("no.suuid", new Boolean(true)); + + // reload this page, by re-calling doPreProcessing() + doPreProcessing(context, request, response, subInfo); + } + } + + /** + * Return the URL path (e.g. /submit/review-metadata.jsp) of the JSP which + * will review the information that was gathered in this Step. + * <P> + * This Review JSP is loaded by the 'Verify' Step, in order to dynamically + * generate a submission verification page consisting of the information + * gathered in all the enabled submission steps. + * + * @param context + * current DSpace context + * @param request + * current servlet request object + * @param response + * current servlet response object + * @param subInfo + * submission info object + */ + public String getReviewJSP(Context context, HttpServletRequest request, + HttpServletResponse response, SubmissionInfo subInfo) + { + return NO_JSP; // at this time, you cannot review what collection you + // selected. + } +} diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/submit/step/JSPUploadWithEmbargoStep.java b/dspace-jspui/src/main/java/org/dspace/app/webui/submit/step/JSPUploadWithEmbargoStep.java new file mode 100644 index 0000000..ca98c87 --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/submit/step/JSPUploadWithEmbargoStep.java @@ -0,0 +1,458 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.submit.step; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.log4j.Logger; +import org.dspace.app.util.DCInputsReader; +import org.dspace.app.util.DCInputsReaderException; +import org.dspace.app.util.SubmissionInfo; +import org.dspace.app.webui.submit.JSPStepManager; +import org.dspace.app.webui.util.JSONUploadResponse; +import org.dspace.app.webui.util.JSPManager; +import org.dspace.app.webui.util.UIUtil; +import org.dspace.authorize.AuthorizeException; +import org.dspace.authorize.AuthorizeManager; +import org.dspace.authorize.ResourcePolicy; +import org.dspace.content.Bitstream; +import org.dspace.content.Bundle; +import org.dspace.content.Collection; +import org.dspace.content.Item; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Context; +import org.dspace.core.LogManager; +import org.dspace.submit.step.AccessStep; +import org.dspace.submit.step.UploadStep; +import org.dspace.submit.step.UploadWithEmbargoStep; + +import com.google.gson.Gson; + +/** + * Upload step with the advanced embargo fucntion for DSpace JSP-UI. Handles the pages + * that revolve around uploading files (and verifying a successful upload) for an item + * being submitted into DSpace. + * <P> + * This JSPStep class works with the SubmissionController servlet + * for the JSP-UI + * <P> + * The following methods are called in this order: + * <ul> + * <li>Call doPreProcessing() method</li> + * <li>If showJSP() was specified from doPreProcessing(), then the JSP + * specified will be displayed</li> + * <li>If showJSP() was not specified from doPreProcessing(), then the + * doProcessing() method is called and the step completes immediately</li> + * <li>Call doProcessing() method on appropriate AbstractProcessingStep after the user returns from the JSP, in order + * to process the user input</li> + * <li>Call doPostProcessing() method to determine if more user interaction is + * required, and if further JSPs need to be called.</li> + * <li>If there are more "pages" in this step then, the process begins again + * (for the new page).</li> + * <li>Once all pages are complete, control is forwarded back to the + * SubmissionController, and the next step is called.</li> + * </ul> + * + * @see org.dspace.app.webui.servlet.SubmissionController + * @see org.dspace.app.webui.submit.JSPStep + * @see org.dspace.app.webui.submit.JSPUploadStep + * @see org.dspace.submit.step.UploadStep + * + * @author Tim Donohue + * @author Keiji Suzuki + * @version $Revision$ + */ +public class JSPUploadWithEmbargoStep extends JSPUploadStep +{ + /** JSP to set access policies of uploaded files * */ + private static final String ACCESS_POLICIES_JSP = "/submit/set-policies.jsp"; + + /** JSP to edit access policy of selected policy * */ + private static final String EDIT_POLICY_JSP = "/submit/edit-policy.jsp"; + + /** JSP to edit access policy of selected policy * */ + private static final String EDIT_BITSTREAM_ACCESS_JSP = "/submit/edit-bitstream-access.jsp"; + + /** log4j logger */ + private static Logger log = Logger.getLogger(JSPUploadWithEmbargoStep.class); + + /** + * Do any post-processing after the step's backend processing occurred (in + * the doProcessing() method). + * <P> + * It is this method's job to determine whether processing completed + * successfully, or display another JSP informing the users of any potential + * problems/errors. + * <P> + * If this step doesn't require user interaction OR you are solely using + * Manakin for your user interface, then this method may be left EMPTY, + * since all step processing should occur in the doProcessing() method. + * + * @param context + * current DSpace context + * @param request + * current servlet request object + * @param response + * current servlet response object + * @param subInfo + * submission info object + * @param status + * any status/errors reported by doProcessing() method + */ + public void doPostProcessing(Context context, HttpServletRequest request, + HttpServletResponse response, SubmissionInfo subInfo, int status) + throws ServletException, IOException, SQLException, + AuthorizeException + { + String buttonPressed = UIUtil.getSubmitButton(request, UploadStep.NEXT_BUTTON); + + // Do we need to skip the upload entirely? + boolean fileRequired = ConfigurationManager.getBooleanProperty("webui.submit.upload.required", true); + + if (UIUtil.getBoolParameter(request, "ajaxUpload")) + { + Gson gson = new Gson(); + // old browser need to see this response as html to work + response.setContentType("text/html"); + JSONUploadResponse jsonResponse = new JSONUploadResponse(); + String bitstreamName = null; + int bitstreamID = -1; + long size = 0; + String url = null; + if (subInfo.getBitstream() != null) + { + Bitstream bitstream = subInfo.getBitstream(); + bitstreamName = bitstream.getName(); + bitstreamID = bitstream.getID(); + size = bitstream.getSize(); + url = request.getContextPath() + "/retrieve/" + bitstreamID + + "/" + UIUtil.encodeBitstreamName(bitstreamName); + } + jsonResponse.addUploadFileStatus(bitstreamName, bitstreamID, size, + url, status); + response.getWriter().print(gson.toJson(jsonResponse)); + response.flushBuffer(); + return; + } + + if (buttonPressed.equalsIgnoreCase(UploadStep.SUBMIT_SKIP_BUTTON) || + (buttonPressed.equalsIgnoreCase(UploadStep.SUBMIT_UPLOAD_BUTTON) && !fileRequired)) + { + Bundle[] bundles = subInfo.getSubmissionItem().getItem() + .getBundles("ORIGINAL"); + + boolean fileAlreadyUploaded = false; + + for (Bundle bnd : bundles) + { + fileAlreadyUploaded = bnd.getBitstreams().length > 0; + if (fileAlreadyUploaded) + { + break; + } + } + + // if user already has uploaded at least one file + if (fileAlreadyUploaded) + { + // return to list of uploaded files + showUploadFileList(context, request, response, subInfo, true, + false); + } + + return; // return immediately, since we are skipping upload + } + + //If upload failed in JSPUI (just came from upload-error.jsp), user can retry the upload + if(buttonPressed.equalsIgnoreCase("submit_retry")) + { + showUploadPage(context, request, response, subInfo, false); + } + // + else if (status == UploadWithEmbargoStep.STATUS_EDIT_POLICIES) + { + showEditBitstreamAccess(context, request, response, subInfo); + } + // [Cancel] button is pressed at edit-policy page + else if (status == UploadWithEmbargoStep.STATUS_EDIT_COMPLETE) + { + showUploadPage(context, request, response, subInfo, false); + } + // + else if (status == AccessStep.STATUS_EDIT_POLICY) + { + showEditPolicy(context, request, response, subInfo); + } + + // ------------------------------ + // Check for Errors! + // ------------------------------ + // if an error or message was passed back, determine what to do! + if (status != UploadStep.STATUS_COMPLETE) + { + if (status == UploadStep.STATUS_INTEGRITY_ERROR) + { + // Some type of integrity error occurred + log.warn(LogManager.getHeader(context, "integrity_error", + UIUtil.getRequestLogInfo(request))); + JSPManager.showIntegrityError(request, response); + } + else if (status == UploadStep.STATUS_UPLOAD_ERROR || status == UploadStep.STATUS_NO_FILES_ERROR) + { + // There was a problem uploading the file! + + //First, check if we just removed our uploaded file + if(buttonPressed.startsWith("submit_remove_")) + { + //if file was just removed, go back to upload page + showUploadPage(context, request, response, subInfo, false); + } + else + { + // We need to show the file upload error page + if (subInfo != null) + { + try + { + Collection c = subInfo.getSubmissionItem().getCollection(); + DCInputsReader inputsReader = new DCInputsReader(); + request.setAttribute("submission.inputs", inputsReader + .getInputs(c.getHandle())); + } + catch (DCInputsReaderException e) + { + throw new ServletException(e); + } + + } + JSPStepManager.showJSP(request, response, subInfo, UPLOAD_ERROR_JSP); + } + } + else if (status == UploadStep.STATUS_VIRUS_CHECKER_UNAVAILABLE) + { + // We need to show the file upload error page + if (subInfo != null) + { + try + { + Collection c = subInfo.getSubmissionItem().getCollection(); + DCInputsReader inputsReader = new DCInputsReader(); + request.setAttribute("submission.inputs", inputsReader + .getInputs(c.getHandle())); + } + catch (DCInputsReaderException e) + { + throw new ServletException(e); + } + + } + JSPStepManager.showJSP(request, response, subInfo, VIRUS_CHECKER_ERROR_JSP); + } + else if (status == UploadStep.STATUS_CONTAINS_VIRUS) + { + // We need to show the file upload error page + if (subInfo != null) + { + try + { + Collection c = subInfo.getSubmissionItem().getCollection(); + DCInputsReader inputsReader = new DCInputsReader(); + request.setAttribute("submission.inputs", inputsReader + .getInputs(c.getHandle())); + } + catch (DCInputsReaderException e) + { + throw new ServletException(e); + } + + } + JSPStepManager.showJSP(request, response, subInfo, VIRUS_ERROR_JSP); + } + else if (status == UploadStep.STATUS_UNKNOWN_FORMAT) + { + // user uploaded a file where the format is unknown to DSpace + + // forward user to page to request the file format + showGetFileFormat(context, request, response, subInfo); + } + } + + // As long as there are no errors, clicking Next + // should immediately send them to the next step + if (status == UploadStep.STATUS_COMPLETE && buttonPressed.equals(UploadStep.NEXT_BUTTON)) + { + // just return, so user will continue on to next step! + return; + } + + // ------------------------------ + // Check for specific buttons + // ------------------------------ + if (buttonPressed.equals(UploadStep.SUBMIT_MORE_BUTTON)) + { + // Upload another file (i.e. show the Choose File jsp again) + showChooseFile(context, request, response, subInfo); + } + else if (buttonPressed.equals("submit_show_checksums")) + { + // Show the checksums + showUploadFileList(context, request, response, subInfo, false, true); + } + else if (buttonPressed.startsWith("submit_describe_")) + { + // Change the description of a bitstream + Bitstream bitstream; + + // Which bitstream does the user want to describe? + try + { + int id = Integer.parseInt(buttonPressed.substring(16)); + bitstream = Bitstream.find(context, id); + } + catch (NumberFormatException nfe) + { + bitstream = null; + } + + if (bitstream == null) + { + // Invalid or mangled bitstream ID + // throw an error and return immediately + log.warn(LogManager.getHeader(context, "integrity_error", + UIUtil.getRequestLogInfo(request))); + JSPManager.showIntegrityError(request, response); + } + + // save the bitstream + subInfo.setBitstream(bitstream); + + // load the change file description page + showFileDescription(context, request, response, subInfo); + } + else if (buttonPressed.startsWith("submit_format_")) + { + // A "format is wrong" button must have been pressed + Bitstream bitstream; + + // Which bitstream does the user want to describe? + try + { + int id = Integer.parseInt(buttonPressed.substring(14)); + bitstream = Bitstream.find(context, id); + } + catch (NumberFormatException nfe) + { + bitstream = null; + } + + if (bitstream == null) + { + // Invalid or mangled bitstream ID + // throw an error and return immediately + log.warn(LogManager.getHeader(context, "integrity_error", + UIUtil.getRequestLogInfo(request))); + JSPManager.showIntegrityError(request, response); + } + + subInfo.setBitstream(bitstream); + showGetFileFormat(context, request, response, subInfo); + } + else + { + // BY DEFAULT: just display either the first upload page or the + // upload file listing + String contentType = request.getContentType(); + boolean fileUpload = false; + + // if multipart form, then we just finished a file upload + if ((contentType != null) + && (contentType.indexOf("multipart/form-data") != -1)) + { + fileUpload = true; + } + + // show the appropriate upload page + // (based on if a file has just been uploaded or not) + showUploadPage(context, request, response, subInfo, fileUpload); + } + } + + /** + * Show the page which allows the user to edit bitstream access settings + * was just uploaded + * + * @param context + * context object + * @param request + * the request object + * @param response + * the response object + * @param subInfo + * the SubmissionInfo object + */ + private void showEditBitstreamAccess(Context context, HttpServletRequest request, + HttpServletResponse response, SubmissionInfo subInfo) + throws SQLException, ServletException, IOException + { + if (subInfo == null || subInfo.getBitstream() == null) + { + // We have an integrity error, since we seem to have lost + // which bitstream was just uploaded + log.warn(LogManager.getHeader(context, "integrity_error", UIUtil + .getRequestLogInfo(request))); + JSPManager.showIntegrityError(request, response); + } + + // display choose file format JSP next + JSPStepManager.showJSP(request, response, subInfo, EDIT_BITSTREAM_ACCESS_JSP); + } + + /** + * Show the page which allows the user to edit the specific resource policy + * was just uploaded + * + * @param context + * context object + * @param request + * the request object + * @param response + * the response object + * @param subInfo + * the SubmissionInfo object + */ + private void showEditPolicy(Context context, HttpServletRequest request, + HttpServletResponse response, SubmissionInfo subInfo) + throws SQLException, ServletException, IOException + { + if (subInfo == null || subInfo.getBitstream() == null) + { + // We have an integrity error, since we seem to have lost + // which bitstream was just uploaded + log.warn(LogManager.getHeader(context, "integrity_error", UIUtil + .getRequestLogInfo(request))); + JSPManager.showIntegrityError(request, response); + } + + // display choose file format JSP next + JSPStepManager.showJSP(request, response, subInfo, EDIT_POLICY_JSP); + } + + @Override + public String getReviewJSP(Context context, HttpServletRequest request, + HttpServletResponse response, SubmissionInfo subInfo) + { + request.setAttribute("submission.step.uploadwithembargo", true); + return super.getReviewJSP(context, request, response, subInfo); + } +} diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/util/CurateTaskResult.java b/dspace-jspui/src/main/java/org/dspace/app/webui/util/CurateTaskResult.java new file mode 100644 index 0000000..c55259f --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/util/CurateTaskResult.java @@ -0,0 +1,78 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.util; + +import org.dspace.core.ConfigurationManager; + +/** + * + * @author Keiji Suzuki + */ +public class CurateTaskResult +{ + /** the type of curation: "perform" or "queue" */ + private String type; + + /** the task identifier*/ + private String task; + + /** the handle of the dspace-object */ + private String handle; + + /** the status string */ + private String status; + + /** the result string */ + private String result; + + /** Is the curation success? */ + private boolean isSuccess = false; + + public CurateTaskResult(String type, String task, String handle, String status, String result, boolean isSuccess) + { + this.type = type; + this.task = task; + this.handle = handle; + this.status = status; + this.result = result; + this.isSuccess = isSuccess; + } + + public String getType() + { + return type; + } + + public String getTask() + { + return task; + } + + public String getStatus() + { + return status; + } + + public String getResult() + { + return result; + } + + public String getHandle() + { + return handle; + } + + public boolean isSuccess() + { + return isSuccess; + } + +} + + diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/util/FileUploadListener.java b/dspace-jspui/src/main/java/org/dspace/app/webui/util/FileUploadListener.java new file mode 100644 index 0000000..09b4883 --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/util/FileUploadListener.java @@ -0,0 +1,47 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.util; + +import org.apache.commons.fileupload.ProgressListener; + +public class FileUploadListener implements ProgressListener +{ + private volatile long bytesRead = 0L, contentLength = 0L, item = 0L; + + public FileUploadListener() + { + super(); + } + + public void update(long aBytesRead, long aContentLength, int anItem) + { + bytesRead = aBytesRead; + contentLength = aContentLength; + item = anItem; + } + + public long getBytesRead() + { + return bytesRead; + } + + public long getContentLength() + { + return contentLength; + } + + public long getItem() + { + return item; + } + + public boolean isCompleted() + { + return bytesRead == contentLength; + } +} diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/util/JSONUploadResponse.java b/dspace-jspui/src/main/java/org/dspace/app/webui/util/JSONUploadResponse.java new file mode 100644 index 0000000..6106302 --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/util/JSONUploadResponse.java @@ -0,0 +1,57 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.util; + +import java.util.ArrayList; +import java.util.List; + +public class JSONUploadResponse +{ + List<JSONUploadFileStatus> files = new ArrayList<JSONUploadFileStatus>(); + + JSONFileSizeLimitExceeded fileSizeLimitExceeded; + + public void addUploadFileStatus(String name, int bitstreamID, + long size, String url, int status) + { + JSONUploadFileStatus uploadFileStatus = new JSONUploadFileStatus(); + uploadFileStatus.name = name; + uploadFileStatus.bitstreamID = bitstreamID; + uploadFileStatus.size = size; + uploadFileStatus.url = url; + uploadFileStatus.status = status; + files.add(uploadFileStatus); + } + + public void addUploadFileSizeLimitExceeded(long actualSize, + long permittedSize) + { + this.fileSizeLimitExceeded = new JSONFileSizeLimitExceeded(); + fileSizeLimitExceeded.actualSize = actualSize; + fileSizeLimitExceeded.permittedSize = permittedSize; + } +} + +class JSONUploadFileStatus +{ + String name; + + int bitstreamID; + + long size; + + String url; + + int status; +} + +class JSONFileSizeLimitExceeded +{ + long actualSize; + long permittedSize; +} diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/util/RequestItemManager.java b/dspace-jspui/src/main/java/org/dspace/app/webui/util/RequestItemManager.java new file mode 100644 index 0000000..07bd8e6 --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/util/RequestItemManager.java @@ -0,0 +1,152 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +/* + * RequestItemManager.java + * + * Created on 27 de Marco de 2006, 17:12 by Arnaldo Dantas + * + */ + +package org.dspace.app.webui.util; + +import java.sql.SQLException; +import java.util.Date; +import java.util.List; + +import org.apache.log4j.Logger; +import org.dspace.app.webui.servlet.RequestItemServlet; +import org.dspace.authorize.AuthorizeManager; +import org.dspace.authorize.ResourcePolicy; +import org.dspace.content.DSpaceObject; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Constants; +import org.dspace.core.Context; +import org.dspace.core.Utils; +import org.dspace.storage.rdbms.DatabaseManager; +import org.dspace.storage.rdbms.TableRow; + +/** + * + * @author Arnaldo Dantas + */ +public class RequestItemManager { + + /** log4j log */ + private static Logger log = Logger.getLogger(RequestItemManager.class); + + /* tablerow of requestitem table*/ + TableRow requestitem; + + /** Creates a new instance of RequestItemManager */ + public RequestItemManager(){} + + /** + * Return the e-mail address referred to by a token, or null if email + * address can't be found ignores expiration of token + * + * @param context + * DSpace context + * @param token + * Account token + * @return The email address corresponding to token, or null. + */ + public static TableRow getRequestbyToken(Context context, String token) + throws SQLException + { + TableRow rd = DatabaseManager.findByUnique(context, "requestitem", + "token", token); + + if (rd == null) + { + return null; + } + + /* + * ignore the expiration date on tokens Date expires = + * rd.getDateColumn("expires"); if (expires != null) { if ((new + * java.util.Date()).after(expires)) return null; } + */ + return rd; + } + + /* + * + */ + protected static String getNewToken(Context context, int bitstreamId + , int itemID, String reqEmail, String reqName, boolean allfiles) throws SQLException + { + TableRow rd = DatabaseManager.create(context, "requestitem"); + rd.setColumn("token", Utils.generateHexKey()); + rd.setColumn("bitstream_id", bitstreamId); + rd.setColumn("item_id",itemID); + rd.setColumn("allfiles", allfiles); + rd.setColumn("request_email", reqEmail); + rd.setColumn("request_name", reqName); + rd.setColumnNull("accept_request"); + rd.setColumn("request_date", new Date()); + rd.setColumnNull("decision_date"); + rd.setColumnNull("expires"); + // don't set expiration date any more + //rd.setColumn("expires", getDefaultExpirationDate()); + DatabaseManager.update(context, rd); + + // This is a potential problem -- if we create the callback + // and then crash, registration will get SNAFU-ed. + // So FIRST leave some breadcrumbs + if (log.isDebugEnabled()) + { + log.debug("Created requestitem_token " + + rd.getIntColumn("requestitem_id") + + " with token " + rd.getStringColumn("token") + + "\""); + } + return rd.getStringColumn("token"); + + } + + /** + * Get the link to the author in RequestLink email. + * + * @param email + * The email address to mail to + * + * @exception SQLExeption + * + */ + public static String getLinkTokenEmail(Context context, String bitstreamId + , int itemID, String reqEmail, String reqName, boolean allfiles) + throws SQLException + { + String base = ConfigurationManager.getProperty("dspace.url"); + + String specialLink = (new StringBuffer()).append(base).append( + base.endsWith("/") ? "" : "/").append( + "request-item").append("?step=" + RequestItemServlet.ENTER_TOKEN) + .append("&token=") + .append(getNewToken(context, Integer.parseInt(bitstreamId), itemID, reqEmail, reqName, allfiles)) + .toString(); + + return specialLink; + } + + public static boolean isRestricted(Context context, DSpaceObject o) throws SQLException + { + List<ResourcePolicy> policies = AuthorizeManager + .getPoliciesActionFilter(context, o, Constants.READ); + for (ResourcePolicy rp : policies) + { + if (rp.isDateValid()) + { + return false; + } + } + return true; + } + + +} diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/util/VersionUtil.java b/dspace-jspui/src/main/java/org/dspace/app/webui/util/VersionUtil.java new file mode 100644 index 0000000..cf37571 --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/util/VersionUtil.java @@ -0,0 +1,387 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.util; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +import org.dspace.authorize.AuthorizeException; +import org.dspace.authorize.AuthorizeManager; +import org.dspace.content.DCValue; +import org.dspace.content.InProgressSubmission; +import org.dspace.content.Item; +import org.dspace.content.MetadataSchema; +import org.dspace.content.WorkspaceItem; +import org.dspace.core.Constants; +import org.dspace.core.Context; +import org.dspace.utils.DSpace; +import org.dspace.versioning.Version; +import org.dspace.versioning.VersionHistory; +import org.dspace.versioning.VersioningService; +import org.dspace.workflow.WorkflowItem; + +/** + * Item level versioning feature utility method + * + * @author Luigi Andrea Pascarelli + * + */ +public class VersionUtil +{ + + /** + * Create a new version of the specified item, otherwise return null + * + * @param context + * The DSpace context + * @param itemID + * The id of the to-be-versioned item + * @param summary + * The motif of the versioning + * @return Integer + * @throws SQLException + * @throws AuthorizeException + * @throws IOException + */ + public static Integer processCreateNewVersion(Context context, int itemID, + String summary) throws SQLException, AuthorizeException, + IOException + { + + try + { + + Item item = Item.find(context, itemID); + + if (AuthorizeManager.authorizeActionBoolean(context, item, + Constants.WRITE) || item.canEdit()) + { + VersioningService versioningService = new DSpace() + .getSingletonService(VersioningService.class); + Version version = versioningService.createNewVersion(context, + itemID, summary); + WorkspaceItem wsi = WorkspaceItem.findByItem(context, + version.getItem()); + + context.commit(); + + return wsi.getID(); + + } + } + catch (Exception ex) + { + context.abort(); + throw new RuntimeException(ex); + } + return null; + } + + /** + * Modify latest version + * + * @param context + * The DSpace context + * @param itemID + * The id of the to-be-versioned item + * @param summary + * The motif of the versioning + * @throws SQLException + * @throws AuthorizeException + * @throws IOException + */ + public static void processUpdateVersion(Context context, int itemID, + String summary) throws SQLException, AuthorizeException, + IOException + { + + try + { + + Item item = Item.find(context, itemID); + + if (AuthorizeManager.authorizeActionBoolean(context, item, + Constants.WRITE)) + { + VersioningService versioningService = new DSpace() + .getSingletonService(VersioningService.class); + versioningService.updateVersion(context, itemID, summary); + + context.commit(); + } + } + catch (Exception ex) + { + if (context != null && context.isValid()) + { + context.abort(); + } + throw new RuntimeException(ex); + } + + } + + /** + * Restore a version + * + * @param versionID + * id of the version to restore + * @param context + * The DSpace context + * @param summary + * @throws SQLException + * @throws AuthorizeException + * @throws IOException + */ + public static void processRestoreVersion(Context context, int versionID, + String summary) throws SQLException, AuthorizeException, + IOException + { + + try + { + + VersioningService versioningService = new DSpace() + .getSingletonService(VersioningService.class); + versioningService.restoreVersion(context, versionID, summary); + + context.commit(); + + } + catch (Exception ex) + { + if (context != null && context.isValid()) + { + context.abort(); + } + throw new RuntimeException(ex); + } + + } + + /** + * Delete version(s) + * + * @param context + * The DSpace context + * @param versionIDs + * list of versionIDs to delete + * @param itemId + * + * @return latest version item id or null if all versions has been removed + * @throws SQLException + * @throws AuthorizeException + * @throws IOException + */ + public static Integer processDeleteVersions(Context context, int itemId, + String[] versionIDs) throws SQLException, AuthorizeException, + IOException + { + + try + { + + VersioningService versioningService = new DSpace() + .getSingletonService(VersioningService.class); + VersionHistory versionHistory = versioningService + .findVersionHistory(context, itemId); + + for (String id : versionIDs) + { + versioningService.removeVersion(context, Integer.parseInt(id)); + } + context.commit(); + + // Retrieve the latest version of our history (IF any is even + // present) + Version latestVersion = versionHistory.getLatestVersion(); + if (latestVersion == null) + { + return null; + } + else + { + return latestVersion.getItemID(); + } + + } + catch (Exception ex) + { + if (context != null && context.isValid()) + { + context.abort(); + } + throw new RuntimeException(ex); + } + + } + + /** + * Check if the item is the last version builded + * + * @param context + * @param item + * @return true or false + */ + public static boolean isLatest(Context context, Item item) + { + VersionHistory history = retrieveVersionHistory(context, item); + return (history == null || history.getLatestVersion().getItem().getID() == item + .getID()); + } + + /** + * Check if the item have a version history + * + * @param context + * @param item + * @return true or false + */ + public static boolean hasVersionHistory(Context context, Item item) + { + VersionHistory history = retrieveVersionHistory(context, item); + return (history != null); + } + + /** + * Return the latest version, if there isn't or the user not have permission + * then return null. + * + * @param context + * @param item + * @return the latest version of the item + * @throws SQLException + */ + public static Version checkLatestVersion(Context context, Item item) + throws SQLException + { + + VersionHistory history = retrieveVersionHistory(context, item); + + if (history != null) + { + List<Version> allVersions = history.getVersions(); + for (Version version : allVersions) + { + if (version.getItem().isArchived() + || AuthorizeManager.isAdmin(context, + item.getOwningCollection())) + { + // We have a newer version + return version; + } + } + } + + return null; + } + + /** + * Retrieve the version history of the item + * + * @param context + * @param item + * @return history + */ + public static VersionHistory retrieveVersionHistory(Context context, + Item item) + { + VersioningService versioningService = new DSpace() + .getSingletonService(VersioningService.class); + return versioningService.findVersionHistory(context, item.getID()); + } + + /** + * Check item if it is in workspace or workflow + * + * @param context + * @param item + * @return true if item is in workflow or workspace + * @throws SQLException + */ + public static boolean isItemInSubmission(Context context, Item item) + throws SQLException + { + WorkspaceItem workspaceItem = WorkspaceItem.findByItem(context, item); + InProgressSubmission workflowItem = WorkflowItem.findByItem(context, + item); + + return workspaceItem != null || workflowItem != null; + } + + /** + * Retrieve an array of string where in first position there is the path + * builded from the dc.identifier (e.g. //authority/path where path is + * /handle/123456789/1), in second position founded the value of + * dc.identifier + * + * @param item + * @param version + * @return array of string + */ + public static String[] addItemIdentifier(Item item, Version version) + { + String[] result = null; + String itemHandle = version.getItem().getHandle(); + + DCValue[] identifiers = version.getItem().getMetadata( + MetadataSchema.DC_SCHEMA, "identifier", null, Item.ANY); + String itemIdentifier = null; + if (identifiers != null && identifiers.length > 0) + { + itemIdentifier = identifiers[0].value; + } + + if (itemIdentifier != null) + { + result = new String[] { "/resource/" + itemIdentifier, + itemIdentifier }; + } + else + { + result = new String[] { "/handle/" + itemHandle, itemHandle }; + } + return result; + } + + /** + * Retrieve the summary for the version + * + * @param context + * @param stringVersionID + * @return + */ + public static String getSummary(Context context, String stringVersionID) + { + String result = ""; + + try + { + Integer versionID = Integer.parseInt(stringVersionID); + VersioningService versioningService = new DSpace() + .getSingletonService(VersioningService.class); + Version version = versioningService.getVersion(context, versionID); + if (version != null) + { + result = version.getSummary(); + } + + } + catch (Exception ex) + { + if (context != null && context.isValid()) + { + context.abort(); + } + throw new RuntimeException(ex); + } + + return result; + } +} diff --git a/dspace-jspui/src/main/java/org/dspace/utils/DSpaceWebapp.java b/dspace-jspui/src/main/java/org/dspace/utils/DSpaceWebapp.java new file mode 100644 index 0000000..33b5b7d --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/utils/DSpaceWebapp.java @@ -0,0 +1,31 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.utils; + +import org.dspace.app.util.AbstractDSpaceWebapp; + +/** + * An MBean to identify this web application. + * + * @author mwood + */ +public class DSpaceWebapp + extends AbstractDSpaceWebapp +{ + public DSpaceWebapp() + { + super("JSPUI"); + } + + @Override + public boolean isUI() + { + return true; + } +} diff --git a/dspace-jspui/src/main/webapp/dspace-admin/batchmetadataimport.jsp b/dspace-jspui/src/main/webapp/dspace-admin/batchmetadataimport.jsp new file mode 100644 index 0000000..e59a697 --- /dev/null +++ b/dspace-jspui/src/main/webapp/dspace-admin/batchmetadataimport.jsp @@ -0,0 +1,99 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Form to upload a csv metadata file +--%> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + +<%@ page import="java.util.List" %> +<%@ page import="org.dspace.content.Collection" %> + +<% + + List<String> inputTypes = (List<String>)request.getAttribute("input-types"); + List<Collection> collections = (List<Collection>)request.getAttribute("collections"); + String hasErrorS = (String)request.getAttribute("has-error"); + boolean hasError = (hasErrorS==null) ? true : (Boolean.parseBoolean((String)request.getAttribute("has-error"))); + + String message = (String)request.getAttribute("message"); +%> + +<dspace:layout style="submission" titlekey="jsp.dspace-admin.batchmetadataimport.title" + navbar="admin" + locbar="link" + parenttitlekey="jsp.administer" + parentlink="/dspace-admin" + nocache="true"> + + <h1><fmt:message key="jsp.dspace-admin.batchmetadataimport.title"/></h1> + +<% + if (hasErrorS == null){ + + } + else if (hasError && message!=null){ +%> + <%= message %> +<% + } + else if (hasError && message==null){ +%> + <div class="alert alert-warning"><fmt:message key="jsp.dspace-admin.batchmetadataimport.genericerror"/></div> +<% + } + else { +%> + <div class="alert alert-info"><fmt:message key="jsp.dspace-admin.batchmetadataimport.success"/></div> +<% + } +%> + + <form method="post" enctype="multipart/form-data" action=""> + + + <div class="form-group"> + <label for="file"><fmt:message key="jsp.dspace-admin.batchmetadataimport.selectfile"/></label> + <input class="form-control" type="file" size="40" name="file"/> + </div> + <div class="form-group"> + <label for="inputType"><fmt:message key="jsp.dspace-admin.batchmetadataimport.selectinputfile"/></label> + <select class="form-control" name="inputType"> + <% + for (String inputType : inputTypes){ +%> + <option value="<%= inputType %>"><%= inputType %></option> + <% + } + %> + </select> + </div> + <div class="form-group"> + <label for="collection"><fmt:message key="jsp.dspace-admin.batchmetadataimport.selectcollection"/></label> + <select class="form-control" name="collection"> + <% + for (Collection collection : collections){ +%> + <option value="<%= collection.getID() %>"><%= collection.getName() %></option> + <% + } + %> + </select> + </div> + + <input class="btn btn-success" type="submit" name="submit" value="<fmt:message key="jsp.dspace-admin.general.upload"/>" /> + + </form> + +</dspace:layout> \ No newline at end of file diff --git a/dspace-jspui/src/main/webapp/dspace-admin/curate-collection.jsp b/dspace-jspui/src/main/webapp/dspace-admin/curate-collection.jsp new file mode 100644 index 0000000..280c831 --- /dev/null +++ b/dspace-jspui/src/main/webapp/dspace-admin/curate-collection.jsp @@ -0,0 +1,96 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Form requesting a Handle or internal item ID for item editing + - + - Attributes: + - curate_group_options - options string of gropu selection. + - "" unless ui.taskgroups is set + - curate_task_options - options string of task selection. + - collection - the collection + - task_result - result of the curation task + --%> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" + prefix="fmt" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + +<%@ page import="javax.servlet.jsp.jstl.fmt.LocaleSupport" %> +<%@ page import="org.dspace.app.webui.servlet.admin.EditCommunitiesServlet" %> +<%@ page import="org.dspace.app.webui.util.CurateTaskResult" %> +<%@ page import="org.dspace.content.Collection" %> +<%@ page import="org.dspace.core.ConfigurationManager" %> +<%! + private static final String TASK_QUEUE_NAME = ConfigurationManager.getProperty("curate", "ui.queuename"); +%> +<% + Collection collection = (Collection) request.getAttribute("collection"); + int collectionID = (collection != null ? collection.getID() : -1); + int communityID = (collection.getParentObject() != null ? collection.getParentObject().getID() : -1); + String title = (collection != null ? collection.getMetadata("name") : "Unknown Collection"); + String groupOptions = (String)request.getAttribute("curate_group_options"); + String taskOptions = (String)request.getAttribute("curate_task_options"); +%> + +<dspace:layout style="submission" titlekey="jsp.dspace-admin.curate.collection.title" + navbar="admin" + locbar="link" + parenttitlekey="jsp.administer" + parentlink="/dspace-admin"> + +<%@ include file="/dspace-admin/curate-message.jsp" %> + + <h1><fmt:message key="jsp.dspace-admin.curate.collection.heading"> + <fmt:param value="<%= title %>"/> + </fmt:message> + </h1> + + + <form action="<%=request.getContextPath()%>/dspace-admin/curate" method="post"> + +<% + if (groupOptions != null && !"".equals(groupOptions)) + { +%> + <div class="input-group"> + <label class="input-group-addon"><fmt:message key="jsp.dspace-admin.curate.select-group.tag"/>:</label> + + <select class="form-control" name="select_curate_group" id="select_curate_group" onchange="this.form.submit();"> + <%= groupOptions %> + </select> + </div> +<% + } +%> + <div class="input-group"> + <label class="input-group-addon"><fmt:message key="jsp.dspace-admin.curate.select-task.tag"/>:</label> + + <select class="form-control" name="curate_task" id="curate_task"> + <%= taskOptions %> + </select> + </div> + <div class="input-group"> + <input type="hidden" name="collection_id" value="<%= collectionID %>"/> + <input class="btn btn-default" type="submit" name="submit_collection_curate" value="<fmt:message key="jsp.dspace-admin.curate.perform.button"/>" /> + <input class="btn btn-default" type="submit" name="submit_collection_queue" value="<fmt:message key="jsp.dspace-admin.curate.queue.button"/>" /> + </div> + </form> + <div class="input-group"> + <form method="post" action="<%=request.getContextPath()%>/tools/edit-communities"> + <input type="hidden" name="collection_id" value="<%= collectionID %>"/> + <input type="hidden" name="community_id" value="<%= communityID %>" /> + <input type="hidden" name="action" value="<%=EditCommunitiesServlet.START_EDIT_COLLECTION %>" /> + <input class="btn btn-default" type="submit" value="<fmt:message key="jsp.dspace-admin.curate.return.collection.button"/>" /> + </form> + </div> +</dspace:layout> diff --git a/dspace-jspui/src/main/webapp/dspace-admin/curate-community.jsp b/dspace-jspui/src/main/webapp/dspace-admin/curate-community.jsp new file mode 100644 index 0000000..82a48ed --- /dev/null +++ b/dspace-jspui/src/main/webapp/dspace-admin/curate-community.jsp @@ -0,0 +1,93 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Form requesting a Handle or internal item ID for item editing + - + - Attributes: + - curate_group_options - options string of gropu selection. + - "" unless ui.taskgroups is set + - curate_task_options - options string of task selection. + - community - the community + - task_result - result of the curation task + --%> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" + prefix="fmt" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + +<%@ page import="javax.servlet.jsp.jstl.fmt.LocaleSupport" %> +<%@ page import="org.dspace.app.webui.servlet.admin.EditCommunitiesServlet" %> +<%@ page import="org.dspace.app.webui.util.CurateTaskResult" %> +<%@ page import="org.dspace.content.Community" %> +<%@ page import="org.dspace.core.ConfigurationManager" %> +<%! + private static final String TASK_QUEUE_NAME = ConfigurationManager.getProperty("curate", "ui.queuename"); +%> +<% + Community community = (Community) request.getAttribute("community"); + int communityID = (community != null ? community.getID() : -1); + String title = (community != null ? community.getMetadata("name") : "Unknown Community"); + String groupOptions = (String)request.getAttribute("curate_group_options"); + String taskOptions = (String)request.getAttribute("curate_task_options"); +%> + +<dspace:layout style="submission" titlekey="jsp.dspace-admin.curate.community.title" + navbar="admin" + locbar="link" + parenttitlekey="jsp.administer" + parentlink="/dspace-admin"> + +<%@ include file="/dspace-admin/curate-message.jsp" %> + + <h1><fmt:message key="jsp.dspace-admin.curate.community.heading"> + <fmt:param value="<%= title %>"/> + </fmt:message> + </h1> + + <form action="<%=request.getContextPath()%>/dspace-admin/curate" method="post"> +<% + if (groupOptions != null && !"".equals(groupOptions)) + { +%> + <div class="input-group"> + <label class="input-group-addon"><fmt:message key="jsp.dspace-admin.curate.select-group.tag"/>:</label> + + <select class="form-control" name="select_curate_group" id="select_curate_group" onchange="this.form.submit();"> + <%= groupOptions %> + </select> + </div> +<% + } +%> + <div class="input-group"> + <label class="input-group-addon"><fmt:message key="jsp.dspace-admin.curate.select-task.tag"/>:</label> + + <select class="form-control" name="curate_task" id="curate_task"> + <%= taskOptions %> + </select> + </div> + + <div class="input-group"> + <input type="hidden" name="community_id" value="<%= communityID %>"/> + <input class="btn btn-default" type="submit" name="submit_community_curate" value="<fmt:message key="jsp.dspace-admin.curate.perform.button"/>" /> + <input class="btn btn-default" type="submit" name="submit_community_queue" value="<fmt:message key="jsp.dspace-admin.curate.queue.button"/>" /> + </div> + </form> + + <form method="post" action="<%=request.getContextPath()%>/tools/edit-communities"> + <input type="hidden" name="community_id" value="<%= communityID %>"/> + <input type="hidden" name="action" value="<%=EditCommunitiesServlet.START_EDIT_COMMUNITY%>""/> + <input class="btn btn-default" type="submit" value="<fmt:message key="jsp.dspace-admin.curate.return.community.button"/>" /> + </form> + +</dspace:layout> diff --git a/dspace-jspui/src/main/webapp/dspace-admin/curate-item.jsp b/dspace-jspui/src/main/webapp/dspace-admin/curate-item.jsp new file mode 100644 index 0000000..9713795 --- /dev/null +++ b/dspace-jspui/src/main/webapp/dspace-admin/curate-item.jsp @@ -0,0 +1,107 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Form requesting a Handle or internal item ID for item editing + - + - Attributes: + - curate_group_options - options string of gropu selection. + - "" unless ui.taskgroups is set + - curate_task_options - options string of task selection. + - item - the item + - task_result - result of the curation task + --%> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" + prefix="fmt" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + +<%@ page import="javax.servlet.jsp.jstl.fmt.LocaleSupport" %> +<%@ page import="org.dspace.app.webui.servlet.admin.EditCommunitiesServlet" %> +<%@ page import="org.dspace.app.webui.util.CurateTaskResult" %> +<%@ page import="org.dspace.content.Item" %> +<%@ page import="org.dspace.content.DCValue" %> +<%@ page import="org.dspace.core.ConfigurationManager" %> +<%! + private static final String TASK_QUEUE_NAME = ConfigurationManager.getProperty("curate", "ui.queuename"); +%> +<% + Item item = (Item) request.getAttribute("item"); + int itemID = (item != null ? item.getID() : -1); + String title = "Unknown Item"; + if (item != null) + { + DCValue[] dcvs = item.getMetadata("dc.title"); + if (dcvs != null && dcvs.length > 0) + { + title = dcvs[0].value; + } + } + String groupOptions = (String)request.getAttribute("curate_group_options"); + String taskOptions = (String)request.getAttribute("curate_task_options"); +%> + +<dspace:layout style="submission" titlekey="jsp.dspace-admin.curate.item.title" + navbar="admin" + locbar="link" + parenttitlekey="jsp.administer" + parentlink="/dspace-admin"> + +<%@ include file="/dspace-admin/curate-message.jsp" %> + + <h1><fmt:message key="jsp.dspace-admin.curate.item.heading"> + <fmt:param value="<%= title %>"/> + </fmt:message> + </h1> + <div class="row container"> + <form action="<%=request.getContextPath()%>/dspace-admin/curate" method="post"> +<% + if (groupOptions != null && !"".equals(groupOptions)) + { +%> + <div class="input-group"> + <label class="input-group-addon"><fmt:message key="jsp.dspace-admin.curate.select-group.tag"/>:</label> + + <select class="form-control" name="select_curate_group" id="select_curate_group" onchange="this.form.submit();"> + <%= groupOptions %> + </select> + </div> + +<% + } +%> + + <div class="input-group"> + <label class="input-group-addon"><fmt:message key="jsp.dspace-admin.curate.select-task.tag"/>:</label> + + <select class="form-control" name="curate_task" id="curate_task"> + <%= taskOptions %> + </select> + </div> + + <br/> + <div class="col-md-4 row pull-right"> + <input type="hidden" name="item_id" value="<%= itemID %>"/> + <input class="btn btn-warning col-md-6" type="submit" name="submit_item_queue" value="<fmt:message key="jsp.tools.curate.queue.button"/>" /> + <input class="btn btn-primary col-md-6" type="submit" name="submit_item_curate" value="<fmt:message key="jsp.tools.curate.perform.button"/>" /> + </div> + + </form> + </div> + + <div class="row container"> + <form method="get" action="<%=request.getContextPath()%>/tools/edit-item"> + <input type="hidden" name="item_id" value="<%= itemID %>"/> + <input class="btn btn-default" type="submit" value="<fmt:message key="jsp.dspace-admin.curate.return.item.button"/>"/> + </form> + </div> +</dspace:layout> diff --git a/dspace-jspui/src/main/webapp/dspace-admin/curate-main.jsp b/dspace-jspui/src/main/webapp/dspace-admin/curate-main.jsp new file mode 100644 index 0000000..6d9cb06 --- /dev/null +++ b/dspace-jspui/src/main/webapp/dspace-admin/curate-main.jsp @@ -0,0 +1,96 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Form requesting a Handle or internal item ID for item editing + - + - Attributes: + - curate_group_options - options string of gropu selection. + - "" unless ui.taskgroups is set + - curate_task_options - options string of task selection. + - handle - handle of the DSpaceObject + - task_result - result of the curation task + --%> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" + prefix="fmt" %> + + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + +<%@ page import="javax.servlet.jsp.jstl.fmt.LocaleSupport" %> +<%@ page import="org.dspace.app.webui.util.CurateTaskResult" %> +<%@ page import="org.dspace.core.ConfigurationManager" %> +<%! + private static final String TASK_QUEUE_NAME = ConfigurationManager.getProperty("curate", "ui.queuename"); +%> +<% + String handle = (String) request.getAttribute("handle"); + if (handle == null) + { + handle = ""; + } + String groupOptions = (String)request.getAttribute("curate_group_options"); + String taskOptions = (String)request.getAttribute("curate_task_options"); +%> + +<dspace:layout + style="submission" + titlekey="jsp.dspace-admin.curate.main.title" + navbar="admin" + locbar="link" + parenttitlekey="jsp.administer" + parentlink="/dspace-admin"> + +<%@ include file="/tools/curate-message.jsp" %> + +<form action="<%=request.getContextPath()%>/dspace-admin/curate" method="post"> + + <h1><fmt:message key="jsp.dspace-admin.curate.main.heading"/></h1> + + <div class="input-group"> + <label class="input-group-addon"><fmt:message key="jsp.dspace-admin.curate.main.info1"/>:</label> + <input class="form-control" type="text" name="handle" value="<%= handle %>" size="20"/> + <span class="col-md-10"><fmt:message key="jsp.dspace-admin.curate.main.info2"/></span> + </div> + + + +<% + if (groupOptions != null && !"".equals(groupOptions)) + { +%> + <div class="input-group"> + <label class="input-group-addon"><fmt:message key="jsp.tools.curate.select-group.tag"/>:</label> + + <select class="form-control" name="select_curate_group" id="select_curate_group" onchange="this.form.submit();"> + <%= groupOptions %> + </select> + </div> +<% + } +%> + <div class="input-group"> + <label class="input-group-addon"><fmt:message key="jsp.tools.curate.select-task.tag"/>:</label> + + <select class="form-control" name="curate_task" id="curate_task"> + <%= taskOptions %> + </select> + </div> + + <div class="input-group"> + <input type="hidden" name="handle" value="<%= handle %>"/> + <input class="btn btn-default" type="submit" name="submit_main_curate" value="<fmt:message key="jsp.tools.curate.perform.button"/>" /> + <input class="btn btn-default" type="submit" name="submit_main_queue" value="<fmt:message key="jsp.tools.curate.queue.button"/>" /> + <input class="btn btn-default" type="submit" name="submit_main_cancel" value="<fmt:message key="jsp.dspace-admin.general.cancel"/>" /> + </div> +</form> +</dspace:layout> diff --git a/dspace-jspui/src/main/webapp/dspace-admin/curate-message.jsp b/dspace-jspui/src/main/webapp/dspace-admin/curate-message.jsp new file mode 100644 index 0000000..be71b05 --- /dev/null +++ b/dspace-jspui/src/main/webapp/dspace-admin/curate-message.jsp @@ -0,0 +1,82 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<% + CurateTaskResult result = (CurateTaskResult) request.getAttribute("task_result"); + if (result != null) + { + String type = result.getType(); + boolean isSuccess = result.isSuccess(); + String resultClass = (isSuccess ? "success" : "danger"); +%> + <div class="alert alert-<%= resultClass %>"> + <b> + <fmt:message key="jsp.dspace-admin.curate.task.name"> + <fmt:param value="<%= result.getTask() %>"/> + </fmt:message> + </b> +<% + if ("perform".equals(type)) + { + if (isSuccess) + { +%> + <p class="task-result"><fmt:message key="jsp.dspace-admin.curate.perform.success"/></p> + <div class="task-message"> + <fmt:message key="jsp.dspace-admin.curate.perform.message.success"> + <fmt:param value="<%= result.getStatus() %>"/> + <fmt:param value="<%= result.getResult() %>"/> + </fmt:message> + </div> +<% + } + else + { +%> + <p class="task-result"><fmt:message key="jsp.dspace-admin.curate.perform.failure"/></p> + <div class="task-message"> + <fmt:message key="jsp.dspace-admin.curate.perform.message.success"> + <fmt:param value="<%= result.getResult() %>"/> + </fmt:message> + </div> +<% + } + } + else + { + if (isSuccess) + { +%> + <p class="task-result"><fmt:message key="jsp.dspace-admin.curate.queue.success"/></p> + <div class="task-message"> + <fmt:message key="jsp.dspace-admin.curate.queue.message.success"> + <fmt:param value="<%= result.getHandle() %>"/> + <fmt:param value="<%= TASK_QUEUE_NAME %>"/> + </fmt:message> + </div> +<% + } + else + { +%> + <p class="task-result"><fmt:message key="jsp.dspace-admin.curate.queue.failure"/></p> + <div class="task-message"> + <fmt:message key="jsp.dspace-admin.curate.queue.message.failure"> + <fmt:param value="<%= result.getHandle() %>"/> + <fmt:param value="<%= TASK_QUEUE_NAME %>"/> + </fmt:message> + </div> +<% + } + } +%> + </div> +<% + } +%> diff --git a/dspace-jspui/src/main/webapp/dspace-admin/eperson-loginas-error.jsp b/dspace-jspui/src/main/webapp/dspace-admin/eperson-loginas-error.jsp new file mode 100644 index 0000000..e62b410 --- /dev/null +++ b/dspace-jspui/src/main/webapp/dspace-admin/eperson-loginas-error.jsp @@ -0,0 +1,36 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Page representing an eperson loginas error + + --%> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" + prefix="fmt" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + +<dspace:layout style="submission" titlekey="jsp.dspace-admin.eperson-main.loginAs.authorize.title"> + + <%-- <h1>Authorization Required</h1> --%> + <h1><fmt:message key="jsp.dspace-admin.eperson-main.loginAs.authorize.title"/></h1> + + + <p><fmt:message key="jsp.dspace-admin.eperson-main.loginAs.authorize.errormsg"/></p> + + + <p align="center"> + <a href="<%= request.getContextPath() %>/dspace-admin/edit-epeople"><fmt:message key="jsp.dspace-admin.eperson-main.loginAs.backtoeditpeople" /></a> + </p> + +</dspace:layout> + diff --git a/dspace-jspui/src/main/webapp/dspace-admin/eperson-resetpassword-error.jsp b/dspace-jspui/src/main/webapp/dspace-admin/eperson-resetpassword-error.jsp new file mode 100644 index 0000000..346b612 --- /dev/null +++ b/dspace-jspui/src/main/webapp/dspace-admin/eperson-resetpassword-error.jsp @@ -0,0 +1,40 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Page representing an eperson reset password error + + --%> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" + prefix="fmt" %> + +<%@ page isErrorPage="true" %> +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + +<dspace:layout style="submission" titlekey="jsp.dspace-admin.eperson-main.ResetPassword.title" + navbar="admin" + locbar="link" + parenttitlekey="jsp.administer" + parentlink="/dspace-admin"> + + <h1><fmt:message key="jsp.dspace-admin.eperson-main.ResetPassword.head" /></h1> + + + <p><fmt:message key="jsp.dspace-admin.eperson-main.ResetPassword-error.errormsg"/></p> + + + <p align="center"> + <a href="<%= request.getContextPath() %>/dspace-admin/edit-epeople"><fmt:message key="jsp.dspace-admin.eperson-main.ResetPassword.returntoedit" /></a> + </p> + +</dspace:layout> + diff --git a/dspace-jspui/src/main/webapp/dspace-admin/supervise-no-workspaceitem.jsp b/dspace-jspui/src/main/webapp/dspace-admin/supervise-no-workspaceitem.jsp new file mode 100644 index 0000000..3ce73e6 --- /dev/null +++ b/dspace-jspui/src/main/webapp/dspace-admin/supervise-no-workspaceitem.jsp @@ -0,0 +1,38 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - This page displays an error message when no WorkspaceItem exists or + - the administrator does not select a WorkspaceItem + --%> + +<% request.setAttribute("LanguageSwitch", "hide"); %> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" + prefix="fmt" %> + +<dspace:layout titlekey="jsp.dspace-admin.supervise-no-workspaceitem.title" + style="submission" + navbar="admin" + locbar="link" + parentlink="/dspace-admin" + parenttitlekey="jsp.administer"> + +<h1><fmt:message key="jsp.dspace-admin.supervise-no-workspaceitem.heading"/></h1> + +<p class="alert alert-danger"><fmt:message key="${errorKey}"/></p> + +<div class="text-center"> +<a href="<%= request.getContextPath() %>/dspace-admin/supervise"><fmt:message key="jsp.dspace-admin.supervise-no-workspaceitem.return"/></a> +</div> + +</dspace:layout> diff --git a/dspace-jspui/src/main/webapp/image/dspace-logo-only.png b/dspace-jspui/src/main/webapp/image/dspace-logo-only.png new file mode 100644 index 0000000000000000000000000000000000000000..2a9ea1dc3ec953bf5848a0e051a2c672f9fb906a GIT binary patch literal 3119 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 literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/image/logo-cineca-small.png b/dspace-jspui/src/main/webapp/image/logo-cineca-small.png new file mode 100644 index 0000000000000000000000000000000000000000..a972cc1930c4699a334967d0085665287f7a27b2 GIT binary patch literal 3738 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 literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/image/logo.gif b/dspace-jspui/src/main/webapp/image/logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..160f2178bdb5646b93a0c0b24a2c1315829e0f3b GIT binary patch literal 3068 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 TgJV3kH)@5>e3;n4z+epkmaeHQ literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/image/submission-lookup-small-arxiv-error.jpg b/dspace-jspui/src/main/webapp/image/submission-lookup-small-arxiv-error.jpg new file mode 100644 index 0000000000000000000000000000000000000000..48b2e4085dc1bc8155b7bb0121b52b136b42f025 GIT binary patch literal 5153 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 literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/image/submission-lookup-small-arxiv.jpg b/dspace-jspui/src/main/webapp/image/submission-lookup-small-arxiv.jpg new file mode 100644 index 0000000000000000000000000000000000000000..995a276d3e1229565fe7a3eafa47f716f663e233 GIT binary patch literal 2002 zcmex=<NpH&0WUXCHwH#VMg|WC4+e(+w;7xnSeaQ^SeRK^SXfwDS=rcmIM~_Q+4;G- zIe7&6g@gq81qFr0WW<F<q(lV;B@`v3WM$>$<%PwSRFvdYWaQ-KK!z}~va+(XvGZ|o z@X3h?ipY@+{vTiv<Y3Td2w-LuWMC3xWEN!ne}qAbfq{vck&yujurjf*F*5%@!eAu8 zz{JSR%*@En%*+Z_z{teR!Yarhq{t?0=*TXrq-+#8NhGK+I5A1gsc7QH|3?_4K|W_@ zU<NCP5MWJg?EjB2=m|0~vM?}lF|sg06)-X|F$*dhvakw?h&cuZO}tnrtkk$r)F^S| zhyS-2c$gU(m;{*x8SEK6FPC+$507}UD7ULlQ(p4MPG*a*mI{pDm17=6-SE11`ODmW zlFCio{(FMzn>58dPNo@dt~A#3V=G{gaPD~?c_HXp_S#=*^R7y)SunlC`kS|4?%hQ- z37_Y0lssYaNg`WFlvSzkuJ+}F`i0C_v`q{@Pv<)7dCtI+_sM^TEzf1rR98DMTi+9) zyLaXi>4{;kI*%WHFrGYjZBOOFV{1jWzSwJ8aNk?ztcX#_SsAZ2p0{FWhRk6y{P4Vg z-;`;4G~R?uor=g>nIv>jdCEQhOU|o)e5y?Sz<<SL$<`|`Z(nXY>F{RZ)bhNT)UL*J zwdMMMdo`A>kN6e$>4VAsWuXV$7?&_tq;V~gmzn(iQdd-HxWB2YbMO_n<f(=`J)fkc z&vgxJzxg6luT<oumD8sK4mxW*8G0HRStdTe-cX?~wa{tXw$v4Ev-&ijH5p4Cl?>8s zb_x_yJN8s{-|~ajjo~MLZJiLYB>d{U`AgoFnr>>Vdg<i;p-}NI|1k~)hHAb0{tZhK z<PuMYOgiZvYrC&;<+D|9O{V%hbPLnFlX0ZEdCN8j`x?d-qMA!j9lR1!x@lJSp&iTL zm(8&0R$3DIpFwcTpF<2^?;n?WbusAD?60=ZZd|hY9<d}N+b3~B8vDMUqg_uOPtEiE z&tPh|t2JQS+Gj6zmxY~b^wbi0ps6C<U?Hg>|AcwzQa$OdXI5#4`<<Fy#+LK;mcfqm zJ$x2dwk%P-w!=yDUiqXM4RTCJlr=059{+ywpI>QiXxy%4S+{P!){5D4`NSoUBa^48 ztDjq>`r)2JTgoiWxhl?66PEWD=NFd79X#~w^oB~gYg=tsTrsumt9?3yQQPUQ#FU~s z#pWlI{0xjA@XUF-@Ay?e(QC2IC%$d|zHim{t=_)DN{gna3%W~kthwjEQsvhqPrKz2 zbB&bG#)*NIP5*sv@~_?>bIo_`TF(7i@8FYa_dPHEGpxAZdAYiKRl&ARZ{*y!n(w}B zk}2&`wydmC&gSQrC;u7jZ~MN}TM2Q|72D^Yzi)rE$}cSS69*gGUwNtS+aJH#cVdHE zzfMp1WV`rY$^5<hg_nI74|!Oddc&qa<NI9o_xVR&?mc?dB0jQ=U-?#i>ekS^ucc;9 zxV+HgR;0>`xr)7lHIvRc$p0!nwkJ3$CPRO@zqLZ%<@L)LCO=RY{mWmsJvclpMrldg ztk%boG1rb*&pq*bg_5P>X?11EYiZ&pLX~<EU*`zzT+=ftwzTn3uk=fI>m|<~UnqNJ zm^IIO$=3~ESyMDqx`bBiTrgyEn_PaVZ_Oc_io27)^p#04EH1Cq^Vqs(Q|^{6%o5h+ zCHx9j&GU~*uK9a;Nq*S()tM_@3N8mOEw=VrQl?VSQN+hBW^v%T!r#8FR_bPd*1g!; zV$}9#j;HR4XRPzD*>j1Vo4hY3XW3hC7PdJ{&P&<)Wa^yeII~tJ<y}GZNroTx$qPEq z<+i3?6L8hPRA}C=?DT2#gneOa=C$wF`8(70u3(hMYt_s=fkloov#rzIbeP26=`lWe zew;o0#qNLF@t-Dyc3Vu)TrQ;dnkTDw%Dlf>>o(rYS}ShhVmf90ri{aEw{EaY%E)nC z<Iha)_RC)HK6jRj?=<6FORcD*d2SuOg7z=s7XN4PiG8+SWRuUOODFv{Ih$u?a6f+L z@;f@YC)vVA$hLHorrpe~hnK&ozLPjT#PLXk>4|PJd(G?NrC)44`CqPj^HsKe&5{*! z_Et`cbP<s7n#q-3%;zmL=lQv9p7vJ`^v(IjdUD~b<r&K}`^Ej3-!A-aovnSMB)I#Q zZ^(4Lzo%|YHJNht%hzqYLZ)xq_L*Dn#$#*$(}pXYc06gg=dSx;a!O5oSHxVO3#WRo zcqksXUHz=^+(-5&DJ$+;-SY1Dbie%hb_3IfQ(v{s&r}tvOwy6F;QH+0Tz|aJw0qgM zoJ;q`)(B>@6}$@#ZM`5JKY>ktPk8R%ct_W~CYFsSzKRHj1>a7qI;YgNyw0Ud_?gjn z6@{ib+Z7)025K<ttlO{Uxq8XOCo>JoP8O^=ovl;A*4k4Sy4&>A#mW`0B;K!QRW&`< z)ur0zxy1LppR&WDkS?d?9DZB^&Vmyhtkzb?Z;?H>-#g@%&IL1NKGmhiUdX>qS8{!R zRrTA%l0|z<pFVn-Yq@yd;wQ389bE$!G*mLYJ;6Sw^4iWhvWf*KOJALkXX}(Hs!uTd e&ya1uHhZs>l8H-3$3?+K$}XUogL1|H-vj`sK3}i^ literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/image/submission-lookup-small-bibtex.jpg b/dspace-jspui/src/main/webapp/image/submission-lookup-small-bibtex.jpg new file mode 100644 index 0000000000000000000000000000000000000000..098ca543be12370c5c58c03233de954d942cd61c GIT binary patch literal 1591 zcmex=<NpH&0WUXCHwH#VMur521O|rxw;7xnm>3yBhzSCiS(!nAjfI7om7R^99fUbJ zxj8vFxH#C^xp=v_xOsSZc-T4l_<4EwKx~j9j7&^S%*@Pe%*<>&9PAt*6{O++2N(o7 z7=#&Ym>HEAm;@P_1sVSzVUTBFU}R+k0|qEyWMXDvWn<^y<l_E+gkh@y0}~@NGZPCl zD=P~N0|R3%BNH<Niy*6zqM;+3a9|?4QlW@Z<HUs=%1#>(iUwW$pkka<)WpdpCN3c< zrK+Z`p{ZqJYG!U>Y31zV>gMj@=@lFj8WtWA8I_!pnwFlCnN?g;T2@|BS=HRq+ScCD z*)?hMl&RCE&zL!D(c&dbmn~nha@D5ITefc7zGLUELx+zXJ$C%W$y1juU%7hi`i+~n z9zJ^f<mt2LFJ8X-`04YPuiw7^`1uRuFGdDtu&+P_#A9gw5@cXvWMW}qW?={Ui;=0E zfsu(>kcCyzkWI)jkUg<bSjni7L&Ry~!i@(xm5qZwh$a<X<PuXcd8qmk<TbF*i1Szz zSw4e%4B@X^3_Q$?3`~N|f(-TyzgK@V{Sp4*yW^(6tDf!oA)fg7b*=GZu{{%SyqqU} zIdADC(G8a)4hs34oK$YeVK~Xp$lts^_5Q8&N7D~S*WXzF@J_vu4eLj1&mU`-ycVoz zJ~Aod-mCISbB*q<t68Bh^-QeXRXgKTZ1l`Mr^_dWe3pD1pZ#~v{&fFt`OO=Ctos&J zW4&k3kNJ;losSj9_?A~BUAXm%J0py(#fkSq|C@u|oC%-JA8>r!@$nzie}<;?iun)I zkJjIO9JBFb+4M&ob^Nd7G_KpYman*Ny7qdPslJe>&90sct{jGuM@7C1ofdI9JvFs+ zu9xH;=Jx&n8JcGNas9CW(E0vb*Oote-)!__{zLs<Q-7Wx<%a?*sy^8UA6uU<y7}gf z1M_e7>)+N-ofGYL@u>QH6*oc8X6fMn3{8{kPR--|@cfUk{n2|`SL|df(heWHXYets z{Sj~4v(Fw|riXS_|7Q@s;q~phxR%VB3+@_Q@9tUI#~ONwHSpyu@i*ol&Ha8D{&uL4 z-OArCpZ4SLBi;OndH-Hnul}(`y4LTSbfoUBlaoyMYRcpkU3S<cX%OgOy(|7!{5R>3 z@<;M-@E@*cvQdBJ9hrPFr$k!(qk5Oxv{&B>m&8Wgao1TXw0^$s@f#;5em}l-$vx)3 zw-~yQ{hEGw{f*V%c7JHy-}+DdUc`^?N8jcaFT8#Hp{=~{mgXbnVwt+XR4&;b;g*@U z?PJ^yqZQ%NlU6GxKD}bUW&7dtjQ<%9dYJ6Ze$aoUzg<rI!}5-li_-BIOntL`HqG7g zQfWtL*tbKkIG4Aa%`f~GHi_v!gV8RX6(2o9cfP+p&0aXGe%t&vaoav;M5%YGd`$1; z`>8lRWMjjBhC{k5pXBo9d}7+eJmsJ*hlFj}(hvU`9?kvUY9swnxA;gL-xZtOHLq@6 z{K&RyTY1=~m>-2(6HUH-GhFh?cG1a<Yh{nZ=D9b{64*VXQ<>qhebRgJm-Qb4?hCrE zs)_&by`faTvwrj6<KJ|4rG#ZxvsATwT>PKmkZ026<ui0lIh4D+#T^)W?yyZtk8%E1 zS|NTs{$}!#@cJ$3hv#?6bLZPwKAbO55p^k-`H0!~4V!LNEI<5)`}oom%1#%zn6vn^ z9#FZxea<3Fp=YUfKbB0D-XJa0kinR-sEa{kQ5VDK`0oD<oBSL9S=V@cSl_+JGkg8n zNBk^X&M&-k<Hz*i%i(^N3#W0Wc)VSw+<zt`ZJN<jZ_(VH2N<jm{AbwI-t<rYPn?|1 z=Kdqs?`idW&USA59Pu%1^%~u!b1oe=x#%c*_smA;XP&uv=PoYV{8R9qic&+MgWN<{ JkpTApHvwYjw(I}^ literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/image/submission-lookup-small-cinii-error.jpg b/dspace-jspui/src/main/webapp/image/submission-lookup-small-cinii-error.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a38d8c7e9b522ea8ff321c05c22bad57fa214dca GIT binary patch literal 1528 zcmex=<NpH&0WUXCHwH#VMg|WC4+e(+w;7xnSeaQ^SeRK^SXfwDS=rcmIM~_Q+4;G- zIe7&6g@gq81qFr0WW<F<q(lV;B@`v3WM$>$<%PwSRFvdYWaQ-KK!z}~va+(XvGZ|o z@X3h?ipY@+{vTiv<Y16yh-YS0Vqg+vWEN!ne}qAXfq|KUiJ6fB4%pZ^m{=K@SwOND z0t}4I%uFoIY%DD7U=@r^%q*;If(%0J!it6>j)5FXPKk{hMa3sBR5l7KGz|`EnzVS+ z|04`ij0}vdNTxC{FhI2aKf<6O$iT?Lgls7z0~50#ix8`#p<`g-|62?^%!~|7g3N*p z_6(aWee0+7|LEl{lzX@6#<y3mzM38G(t3KlufcrZGb@$!4WHFd)G}&Zx%xKh@uz&N z9M=`oln>s!Rns(WYo2}V%D*NHqMSButN70lF|~C0$LK1}MeFYd2h5DRpCWuQ<@vqi zGY*`eezx`4>`Qy|qo;Juo$b{h;PTvP`*q2@r5pz|rGuNeHsASn%zCa+!K&L!qQCi? zt}01un%{H#yzLfIo2@EBi)wy<`66|tu;|zH<f|+Al#Eh?pB7)%ox`w6`1GwM^OcOM z$}ImKk&Uudn5Xx#=<zmJK2fuN|8Bcb+m)MLmQC3gHGTfWB}|4*e4f`{xr@lJ_+Xa$ z+@qV%Hcshw>Ngp8!)<r;6xEkGDlCnZt@#%f^V?&u+{TK_T7{f3l_t|-GhHoIwSrE( ze0t$U(qg%_8RoHD<xefTGBeesMvF5lCimdyWA0aeW!_q{rPlG$+lR(&-&HHWy_7SX ztE63cDoLPsou*@S+q=DOR=r6U`zz`~Ry}!o@jrur=t6!wflohUChdQE_r6`_wbd<G zXKq{0uXk##ZO3{KpN>o~m2F{7oDr4`{rkFtk81aPI9huDaK=2H(3XIHu61GO!rr{S z|L5lCb6rk}1x}Av#D3$cx|+IUo^JlGTRVB)_zA7yYni{VYn{|ty}OI|hO9c7r(?zz zviKYGnfZ<j-|@v5ud7z<TI<@;b0YYh!Xo2Tjzgi14W7SWhQ3YJ{W)EAarREtzyzP_ z;&nBa+Fs`Ju?r@Dy;{@BlcUGHb>XojbA82)78kz%u#VQ;ckxPzPe6PA*@=SctWPb3 z3Salg@0+>DcHau|y_P{QK8c>mW_%_iQMjqrefgQJ{H0g*^jPnmyO@2^*X{0{H7jyY zshHoMb+3xGv0=&lH+7=f_gz;8X~<ppm=f`R+gG`@y#8$xb`Q8Ry)=#=ZdK6E_bEGY zY=!GY4dvo@9Y1!(oKxp=vq;|3w=H|!;ngSXxmJ~|dwh1H+M`yv%|02s&4j#UGHvhV z%=z-OdGc4QjMuZSuuYc;xt#G)@A=luMZG6`b=z#OP1MxlPO0}$=$o&6JN8cax)Zx~ zt<%<<wnbFtc{@70y!{^1c-gjQtK;b<mzM54JJq-C*MEkU$AT9Bnz+7uagf;I!t35G z%c4~lvbIcFZu`OTvfqsw-$l#n)D5OeXK(l73H+_?qh}tKv@|1FPhzdG8c*4Ue;4PT z6|nlxu;t&8muvpYO;%2~o5_1G%1Ll<%iNW+4KFWb-w0^xi*zbWmM*+3H{;?aP48)6 zLe*Qtow_`np1LqbyztOE@%Q-aH30|y%r2C*KOR*7(rP)Y(cFik{0Ce=9C@c(G<n1P zm}IE~fiLYuj{Y$cS1$V(uV`If^;qKE^pvcozw-qI50?qqU)lSgVQq!&!Z#M%?`}KI zbIQf*jHtMx#g^4cn{1z5aj@Vz@cN0v&zCcWOfq`flr~)E<y*+RKvnsL>Fwt$=3V&U z7<|z9LB+)O4U4-M?LWF|?uwl5MMsLZL?22%7b70_NyJJuvyeU0;>VujHBVl=zB#}3 z-R)50lDn?DAv?WXEF4u`8y2?ertst`D=<_s6<_(X*l$O57TaSJ3yaxNMxQQO2@6X} K@z09?e-i+7UV9G! literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/image/submission-lookup-small-cinii.jpg b/dspace-jspui/src/main/webapp/image/submission-lookup-small-cinii.jpg new file mode 100644 index 0000000000000000000000000000000000000000..149a92de2999fffbf2fb5acf4c5eb43edecb7634 GIT binary patch literal 6015 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 SgU=tYyv~0o-`TAG|4jhJPh}<m literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/image/submission-lookup-small-crossref-error.jpg b/dspace-jspui/src/main/webapp/image/submission-lookup-small-crossref-error.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9ed10776635358ae11e1908e4bcadc638eb458fe GIT binary patch literal 3283 zcmex=<NpH&0WUXCHwH#VMg|WC4+e(+w;7y4JVr_Y$Ph~OgZ2JDz#z!MpuphA%&5e` zB*@4t$oT&VgA4-$6B83N0|Ibzv2(DnF*33KKf<6dz`)4D#Kg$N%ESgy!^+6S!p6+b zAt=PD$RI2tYAEI?uB2=fn5a@X@&6G92}TBHMn;5T3=FJn>?|OQ)CC!sm>HOu7@1k2 z3K*G~Sy<Twg%sHt3>`UyMMRZUC;q?1z{AYQz$C~l$Y9S<XK!-s$*Hx;1-lO#E;1BX z+IhEH|Cj5ZRsR|K52<fI>b9+@R!FpC+y2ArK3-Vu$`Qu(?(g0WA79sc&br9B>gJ)$ zRuRXWw?&-<e?Ib`By!;E(+zz35eL(28wB4lYUi)~&tT|OxU6;U*FT+4m2PZ*x-HaS z`{)CcrAZgsH?e6iIgz)zeM6L+#lCFTqNNkg7Dz^mR@k=e{B=0!lhXb^7klB^cJuyJ zpAO&r=Ix58vm4I6e8qQh>3qeNx`m11rnMJ0x(91jxyK#moDsK~<3?_h-6Y1D`X_k& zjHPv+_AKx@KB0DP&#KF7tIe4#<X_+T`1+>o_WSz<JpWAo@&01&@gL9Uy$w8n;rPQj z?O|<)&lTJj7xSE*|I5wgRzzUn?uaNCA@fGTm7j{lw?*5=KMB|4vX=RkE^XgCwdYeX z_nK7}=S2%#LQbrm^6=_82eHW;b9#>T`}{bqs=%9bO#IIQF=k(%6=x6Rn@Wnk$eO%q z$LIZ9SAO7~sZ=8K;KgmGl3kxH1!{NAkGf*b^mW6x)R^6KMPrh~1M^mTq`4ivxn^O6 zp&X02!-ijL3udj|x-?6<+ABudMA<;===0RY_kxzjZS*gn>>#(bw)dc$=+VcvK7U^N zIB@7}x-pmkZRAC(`<0c4drz0|FMP4L>9)?bRSL<f(-WGOys1$5s(Wb~&&@}vY<U|K zqm(8Vt?l7UJfkh~Pkdd(<kymMzL%aboxghZTvAQm%Kr@NZ)$eEsH_v2cYtM*`%;!k zi{GA>m;3zc!kX_EX@9hSbnj~OF>kSx_S&fT;_s!#N0o6FQ}?vL^EfqeN#6m}hk{#6 zQ(G*O50<H_Z1CnzU0SinI>6Jwcg6Qo+r#Qxnm-Ev&RVplf6}_2x?!vTGia=w^0t3n zal-nv!!?VarS4ZsTJ^Majnbx5`|LDseV#DM<nZ2!qKo#GKi`t1zH8}m+tM}fL+d;X znD#F#o%wo>qIKP4_RLRu4#IOvSx@weg^R|?_G~oDll9WJ`z5xFJu_tejjtWfYB!@# z_$Ot%ZCX?El&f8$i2G7?g877Lv6;&(>Nk|tOCR}|9{O@^?aI~Vc6QI6u=A|nklU7L z{OsVy_vX^a<JaU>KX|?M=$}Q`R!`KA<cvC~`FJM7-4(ev!_Jr`{&SIYKl1hB`^8VJ z|CHXaZ@$0rGLs|w3$bH*^K?(&tS;$`n^y7S@f(IdufDFy7quSlnXpiH^>HPu#fw*M zKf3&ic#mjY#)S%gwL2Bt)!$#$4DSi$I;(U$K{#ZUfoa1UCTpfgCUIGFMSYXkP0Y}7 z=T1I9TjfB<m%h_e3!mj(dh+4Wy878R5znok*{%;;WEsBQc3<wF>hJe`^S^6X#kU$g zVqgArz4x!rNAF6nn_tuLTA%%BZ0Xs5r+4wjsot$LjlV7x9$h3=+tabBDY87tI5}qe zTX*e;8M<bjsn@4A)F-p|h^&0wd*<xR{-lc)lE>MiQf}pbxpTd@y{lQOW_9U2mSr;2 z?51ex$Xx1Hv0=!5>Oa4=@lsrpOh-iRq6bsC0_t3M#`it-Uut6<m6Gvrt>2D!)zhBm zb7&vEk+3iS?Gvqs%Haup4nc1}#vi*iU;DGqJK5QFeMXU8*V?vyTc|y=v2(8Y`<GdF zKUUmwT`%s<TRKTN?aT(J^w!uVVN%CWtmSwu|Ki)bwE?e_p8qmgyFD=^rZ83ekKJ6> zh0}dw{xcYg&R11l=2E1kUG4f~=0;n&YkOt-T=O%Y#NB#Q?w7Ub>$|S5uB)yuPrjSy zdFhX0`f_=R9mVHvz3mT-EO)zo+2(A|p`)5XOXshje!cwS#1AJY_dYo2!DjR3QiFl1 zQRJ$X`5kE<KW?sJ==5ni^!WAD=a;N!?9LC%UHhNm<=4~R#wQ~xejVDZWwyz9lYdFz z)!PcY4mt>)_RF($d3|JN0&~*RT|POI58F@cb8YAG+0fn}aNv1){>eGFB|}y`f3xLc zdgk+&`&tBJ8&xKLE>)bhHCrT)V^Nv>gJWm*?dIXSYv=#hIPqiDoLzRDXSeS(SO4)% z<}P3O5leSIKmDcEeXnk=c3ZCZ(0pZfPU@#PyX(2vdT-{q=L*G}_nEi3WM4nOPdj$o zvLlb*eZCm}*y{DfUtOu2bREt_&FBu8>7e_#kjt9q3e$>arSuO6r*oy%-;sM0d`kU9 zmg%yC6;-o4#C2-UEiDo*iP)HvEn+7dZaTGd>57Xi+sY27oUr7+ZNz^hsUorHRFd<G z4@}IP^i<|WbANh%<lLs|dnOim#zYovl$|Z4{4upSQ11TuZ(Bp9x}X2Hthd$Q{;=>a zlbE};UX0f!$^IwS%9DR}_TK%iRjFiY{l_x=!^)pOiff`a$NxL<#Uo$I_V3^2$roR5 zykP&NOjLN`SKhUs`W03leOXw+wbV+&`Um&6l~V7_<lam?smA<9zioA*PRFI=oMoCS z-#BzOZAmTs=D)0W!@I+`rUd+6^u@kC+IvFh?y_8Uw%u%g2Pb`<R%R~J!F0`Mv)6_+ z_lMz%`K-l)O*am(N9~lV3Rgd9yX9Wi&F?L?E4B)<IlW6<q<ZmdY>Mu*6LN>6H*v3M zzggfKEv22*w_?ph&v?xo!Ira^RTFGxGfU4knkQ0zjp0q_bZLX+Gdqiu&nt_6+F3K_ zN=Wss?ps=ml-9rLzFw>K_2Vhm&Tg~vZFXkX%5t0TTvv}2ofm6vq`mjXv*q=-dOwA_ zykB>j<I&6ozgXlA?(Je>sP@}`KKUlE1graWm&&U6W!3Ta#nz$IHt+FUeO%|`p?Gn@ z=H3+_l;;;Y6m@M^m}v1#rudzer}okIo(8vrPZhnJZMbKzJokxB?}dTE+N963rnsr? zS|0xBg6UGPgK_E|Q+PZ5W!SEix$38JD`+t`9M7_JdbTb?YSQcF#ZQkhIz;^KTv^Gl zyZ8j-#_-%5SsVG>uiW-dayEB(vTWO5*9p}pkF=*=tLWppy>+vne0+B4+RNb=H^}D3 zE&Y@Bw>F9GHP^&Hfr`iSbSxGp9qrw_SfXRDQib;9KZ{n^?w!8n`?t^^r+!8R{$~h$ zFfZ%6{w!1LmxVvI>Rw*2{m-y9{{H@E%bg$7F8pJ$Yxwgm`km+Z{|w9Dh?L)7`sT0i z&gBM|p3C&TSG)4z-(kms!#@^j{bx9`Ud*V9`+jGa2=mFOc}=T56+=tqV+t?aR&cw0 zdh7RZXXbAGR-&~r>%-<rr9QIpW;&YvYyTeO?UOjWbxW4Vg?Y9ChqDc?X#LuDw#Ys; z`tOwI_nTPOM_K*5^03_Q$MIL4UMtS*eC^P?`f8a>jplSY#q{i(zHHMZt~}|T+Mx6% zw>D`4--dLRNW&y~e#11=n@_mfZ8yrx3q3uq7|}glN<Xr8VolY{z}nw&7wuo){?DKs z+q^RCwnyTGaGj;ySKlOm=CBT$s%LX+;lxSGwK^+UULRTHCvK&)rY=6P$tP#ciSK$Y z+3}Yrt6d9vees|9yIG$PC+)peCR%g0da9~$_=JUDUdUAJ`g_W_q+Z_D&idKq0zH?~ zqZ(h0*FVkr`1Vg{N=A4vbJ^?*S5{0DsJy=6g2kjQ2SocSlJu5VD+=uOF6&>u?wV%g zb9JWeXXg6v@3?U!VjEw}>EOLVx`pe!%~`I!sj4hYGz!(8Ug)xGc234>=htOAH#S8! zi62i*l(^P?|3&{|bAR*i_mwPPo|tz2Z1j$+k?Rwq3_B0U9Nw6}(<^xM4Bhw+d!7n^ z=@4PpE{iuaCT`?ESMoc_`Q)U8!-5NDntT!avL|<??wQB)|6HB?HB0sT?$4`E&Od*8 z$*Q%j4u8$3@4v7{Rc`Hj>BTkkU;YvHs++UsLSy%uD;<%JVNHBpDzXKhK1mJC;@o03 z0>|5Vj8p^{D;_=EJ7dG~PH8bSL)+Q6c7_H`=b7+YR#$z=gnuu#{ruT<CR8^*Vp&7n zEXjx^LL&3RQW_o7lR{Qa=goamzryR{hm?nR?DX7|UI$L*lM6h<=eqYyoWANUEA`%s e`<(=ny%t5BT`pq$(%Pi-LFh!)iHRluZvp@~gz~rm literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/image/submission-lookup-small-crossref.jpg b/dspace-jspui/src/main/webapp/image/submission-lookup-small-crossref.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9025c4c65e04bde06c5a2e50cd049a6ef31ff4ef GIT binary patch literal 1182 zcmex=<NpH&0WUXCHwH#VMg|WC4+e(+w;7xnSeaQ^SeRK^SXfwDS=rcmIM~_Q+4;G- zIe7&6g@gq81qFr0WW<F<q(lV;B@`v3WM$>$<%PwSRFvdYWaQ-KK!z}~va+(XvGZ|o z@X3h?ipY@+{vTiv<X})>uw-UbVqg+vWEN!ne}qAXfq{{QnUMhjSQ**aIT)B&nExMP z&=+7}Vq|7!W@chxhp1p=VrF3#WMC6w7gkg<baV<7F-|Px5LY$|Dr)?Hgh7&#feFPl z5SN9O;r|f^WkCi;7A7VpCT5693=AN(f-HuLj;um~iNYca|KDQZVP<4t5@Z%+uxHp= zl^g!9@%Fszq6=LbF-N|0y;^tFu<+fA0-qUnoDz~O=?V|TqsymACtY>U*L!VyE1C0w z^rRz(XZjR2oL7x$@Zj<I%D8aC`@VU(*O#x}9h<UZ-J~X|Rh4qB2m06#xHK6UN*upr z8zGtGac<hnh|4ak0~4N{y70`+!)oEKTejXizSk_V6}v57Ra9@?9ev>U!*rY5-ybpl zP>&6GU+Uem#oTsx)q;6C(}HD+h34~h3vWKL{P>ix$6pIAnJ2AZEiE<eN6zQFbG5`A zMS3!qygl~(W%@D3@8@r`+ue#@_x9%Y)xBl+=4EZ4cJJ-|Rb8_Jrc7G2SxB9k<AHYN z`Gaz`TklVuujR)UAeL;kxAfE8knh={t~Q|pF)LNta=y(?3zC=nVfnc?N3ZPC27?_z zf&qn`@AbdhUq3(p=c=_=y;J6f-HX<ncQ$9%N}+A8t9Q+q)u|`4ydzDW%eyr)bO%%6 zw0M?P{da5CcJ$s1%-NLl>UL|V&WFI@Kv!GCHCw!7b}BAAFFNt?_FDVhIz|Pj7iTxO zwsa=d_~}dtlod_O-qpJGrB$!%<!@_d#U2djoa4xAz3a%Fh-T%+qsB)bt3RoqaC&{{ z{^fV=R&DyvAhNP*@5O8C)%k0_Y&E*RWm(qME{Rv%0`B%_>RDLNPi1Bna}Juec;A}b zs@H2@ovhsuqqcB=bWgY6YpzqRGKr1s2Y&wkJ^xO{+qa7&|D0NSCw$e^b#o$urscgg zhzqWG^5Z1K{O|@lza?$1Nt|--8!t&LR#&ZgEP2UCSMOVt?x&z_f&v#<;!CRbUTV&d zHCa9HebIuZ&yjN1*6pgZS~n+XwSBpr(@x9duYXtAtE%6)UU+5a`;B-0GjK{T^*WNd zVq(g~$OxrV%t;PAC3KALxYa$1GdNcKQqIrg8pj18rw8-vuRH!a6UIOLgwnp%&byvR zKPdhp5_(y-?c1u=kK)z)ys8#UcX?H`n0&OF(;1*GC&a|aTG;%ic0<wU%sYO9FJCFF z5?~Vv-RgDWdhn-X4jG?RgIm8C=~b+^b4mA~+9|>y!eD2*UGVfYo4;RP+>p2*u=&%c z`BOEg{x<#d&}ds}+f%*==D7!pvwIIFW?XVxBp|>q)5hc;FYn>7_{xz_>WXidXj!ry OpZIy{#Z{;O-vj_C`_8lg literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/image/submission-lookup-small-csv.jpg b/dspace-jspui/src/main/webapp/image/submission-lookup-small-csv.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e156671bad9e5637599e2988a6ceb7a66adbd7b GIT binary patch literal 11700 zcmex=<Nrg}7p@hVX$%a$z6@Fn3=A9$?2JMT%nS?+j0}tn42)6?tY9_+LlUDjoSns} z0ae4qz`$t8z{J47Aj81GP{e2iW{WT|F!Z%&GO$4PE@5C`xWK^m=N1Elx&VxJOvz75 zRS3w)FUc>?$S+WE4mMQ?&&*57FE3^=GB7l@GBmI<GEy)!v@$fbGB99ZU|?WgzzDJT z|9=LC1x#@BZ5A-Y*%ly$3=9lxjLZ<V3~b2$V3b4ngHa9HA54reGZ^)l;AXRIf|}<6 z^$VE(f8+mK1|F~v;+=gNnEt<G-~;m*QW`+&{@-S3Vc_B5;Naxo;pF5I<mTcQ6y@jP z;TM$<78Vs2mJs9t11JS%V-SqI+}yl;yaIfD0wR2Td?Fx%PXwYx5JK@lDGa?}f&T{> z1UVQi7;Kmsl^B==8JPtc|KDX`VPN@xgwdXXfsvIF44@ulW?*DuVP#|I;N;?FM3-b_ zU}A<z3NSFTFfuc-FtM_;aj-J;7&9_32{N-N3K_CG1||wC6*d~NiA-F$(MefFH0WTG zu}M+WMQ3)^Nx>f;eoQVl6<f5aS<Pi~NQ&#B#U*CqmqH(<e%jn}_;Tsv&u;2dmb7k} zdgRKJFH5%`z54WPSXx=zv}N0lU3>P;+&w(KynXue?Z>Y_|1QYD#Kg$N!UA>^I~%Jh z*a?b;LM)DfiG@nStVWF!ML;e%7<BQ2u}adzqNYjC!J^5<CLdMVKn`G6Gd*<4Wpc=3 z@f6okvy#+Da3|n)fjYto|8FtyFoW$BWUy!W8XB*7?*8@-T!+@yf1a;0rO&H2Sl!bv zKj!p)p|1R;N7v^zKPa)X%=ofzrGMb!>e_AFf1dio-|^3B^_30M^Sd(iZoRy7yh32p zMl1W!!#lTKO=g~bkmZ$)jH0S-l1Itj_bb;`@K(w_;OYG2;_3hY!dLG1>)P1uN)0Yp zss?Y@vHT?QqF?au3;D==lgA+s5~feIzo|WMvBKTbQf9W}Y|S4%+bTJxvM>AX@%Qle z{`cN*oxjU|?|&Z|DeKHFt$SnL!gY%lZ+vI`O5&G4|CAr$foax#2CL4@eg36<0^j*F zH}$dwuEsswwLSQ)GFYGYTl*8`_w4tk^}C%}{oyQI_x!L|H{QASN}tZY{&Tlz`0dzO z!)<%&rmH@`Y<pO8@f`a#U$%ztRA02-ZkdVc+hUi4Wi6Z^o7Sxpoq5FCS$N?O(L4Y0 zPs)ZEO_r3q@}J@V#W(+Uo4voeH9FdRcI@UvsRN3K3;+2&J<{{s@ZiCt>oO<QaKvrc zw5#pdlVcaZxF_^(^ye2@-!;$UZ_3O56O!K^+1^~lnNcCK^Ko~~*?r5u31q*%A$Ix2 zSDtd4ZrNnr1#K4j*7FWsH$7WyuD5g9{=4~iMB11BUi-T#tUoJ$kNwe#JN;|wmX%6| z7+=cMjyM$&yW?%*{ObP<)@4um)?SaCKS^ipyk4D*)KZ@VQoH{=-&wYQ(cf!-54s)$ z86~tu#>o8j{euq;*X>sN^=j#|({c~4ZC#Wy_0@#3;}s4Ed4F4bFccr?dvz#mV%uVk zk2O~>Z~lMj%j<LDKLqTu+WgD|_8vT!UCyiiH?ij0B(J*O-{OJtv+nQs&+yXaKSS!P z_#I%j>*p>{&0p4U=6ZjZ{4W1jV@|?X=F`#N<^Rl#w@{fhf7we}$6lUW7cSn6`KxyB z_Vv@8D$D=h{Qs6$1yR-->lrXuIC=WAsDd-U0GLD~z;ae#ftd^p3?O+%Fps;SC^N6b zzqF*Fw1j~HTwpQ;6qf`i<>%*sRe0u=q^9PT=7Lm%*dW?DrwGL72kQ;atN^KS$}9ot z0ZBv5OfB+D%uNk(jR;|2U=U*PVMt}DV8~@iWGG_DW>8=VVK8GbVK87&V9;RjWe8@_ zWMF{!z#3!(BdC-{xKapg6U3GN1tppJdBtEu85kIx3rg}}7Be{KBo)CqLFvW5aE^0P zo-=}zSAyX9B;^#tW&F}h%HSN=+#DA;$1|@4VYE|ncDjF3Rx+q+06CX|A;{gy8C0Qx zctI%&3Mu)eNe=lBKwL0(FUrFZbIQR~=Twvu5}H@yrW}+5iVv_}5aE=QqJT|2s5qwt zEFMsi;}FC!8B|*_FfeeHr6!l;7r7*sB!YYZj>&-ZfMQrog4iHq1JVOP&SvmQO@kPN zW^G7*0aj~+lXD>A0Y%9Uksy;GvB&%t%obqqVDe*NWMG2P;Pj^kmg57HV8XruqKkzW z%muYB<iIK=QTfcD!F*0I2@Z3RDs@o$U|`?^wQImKOdwI_uVA(ZgML~X10zFDS{kUm z0M-N%SvYeRT*L@09tCP$fORo4n1V%g5h7qSe}H8R7#RLz1<Wr%@>r$*Qz8el8x$xE z3=B*RVBfKTT4oGT_e1gvxFN;B%*e<H;e*@`QV-#AfLsR4?@SI13?K{*bvdvc*aEOk zQXoFFE8OoOE&~Io{bd7gNhUKCGn6sJGo&$OGUPC%f<p?T2AKq>HK+hcA4orx3!#t| zKtzxWB!;}woE)%+85r1-@=NnliqUdfa)}|Vqyi<+ocz3Wm@%MajLdf`$<KxI!OjRu z&nSWNK~7^U&dE$pEe^}^0Tm~VDE6>|<)EbuJDB6?0@Vw$jy=67zq9~Fh%LV;Gd(j8 zn#XutgF&YIgT)va7<dy)OY+@Q^HPfvOHxxnMub!rz=~Ebh+>ckNX9caT>%sgH1<Dp zX;BWefQCj2DDY85e2ddzg*ZeFTVhU0NMbsQD!$~@oScx<iW1Laj}TuUSdqg46Gl<Y znUP;q<(QM14ht!Mi03_E!VC-y>?x^fiKXBokh3hcs054hFqkl^a_*#b=lq=fB2Z95 zV?q#OzLPs#0u;u6`FWru%vq9O;9pu&oC-@AAUUp_)HG0~h$_mHlwVSkpNpZIyC^d~ z16?^dM`?fzW8eWLXZsIeHY8UHg4wVf3+i1#s$Mp*E|7W#mUGbj1xl!(#Jh!oK|O(i zfn^he1Oww}e`U14GTL7m?XL`-{tCEcQv{cLp`eltRGIKII5MO#<TE5Oq%tTl1TbVU z<TI2o<TDh5Sp^IX48jCdC@?rP1VbBbU>n%LHn1~*+C7Yn4F4bUe#|H-DX`Ml&nwnT z1dUMXCFkerS0onb8|oS8GuYTy6eK2Rr<N!rrKV@**($x?y<bToGsRXZ+|<{=x4=0y zBh#a*C^fjsFC@7tJJ~Wt$=*)EroyTsw;(sQBvGLvHz%*ys=`(YY`9fku@y*IUr7P1 zq$Jx`2|SLZ5aAo3;GAESs$i;Tpqp%9W}skZsAp(wVs37(qhMrUXrOOkq;F`XYiMp| zY-D9%pa2C*b_zB{DQQ+gE^bh}ic->Sm7ty~FE7_CH`dE9O4m2Ew6p}7VPvFRl#-@f zT$xvrSfQI&tPC^3CAB!YC==X!QUIBln3P{yVymPCHMSzR0B$VSu!1Q}NrtN{C@snX zTb`1vpPG}Jo0?ZrtZ%4i2=YESTnb>Lfp9G-M#H7SkpZ)yBDcWT7rO>nyyfP?ttc*W zEi1vVx){_L&<{#2&Mz%WPIWCy%_~s`Syo`>T$Gwvl3x^(pPvJZC`6|kX#f*Rb*f8Z zNvf?9Xhc)j&_LJ7D8$gf%GBJ-$Uxh`*vh~FqSQA(B{QuOQz>Zh6GdHWNn%Q3Ng{rg zDalr8`9-;jCALbLxryni`dJ03=}HRl;Ijg^Y<%-mQf-xt!4B~Cwerj>E=kNwPW5!L zRjSA>(96tBu`+ORHgh#FcXl&0c62p1G_*7~cXc&&H8(SMv9NSCGl%JQ$xki?#U@N| z3P`Urae5&w-ozZT%mC#rQ1n}QWEPj?7ga)2e{gCcl$DdI0FH61#AMJofUQz8C<;?k zl%T?y*nCaU<q#vwGg9;L#w<ixaei7!d16tjV|r>{3I1fGkJHupd7ySJ!rcXlMTxno zC8<Tlwn}M5`MC;^h%U%WS18Gca=@{U)5zk)GK6thgMnb=L;Qys49KY#qK1SpfJRJm zMq*xiYKpCrz7og_`k*2R60Q2+438A!U^%4X%1*%sEEMG824aFsR!}Kx2Q4E<snHM^ z4S~@R7!85Z5Eu=CkrV=m?ptbJimg()lD!?$)V%|!qY0k62hWQWM=&7(GaMjk1x-{l z!6k@gAWhv1B2V3O{6E6D2sG5o#0=^YgL|(G4D1|itSp?&Tuh7%+>8tiY~ay-s2l?u zD+@C_69*$F0~fad0}~@N3nMc#$VE(SoTZFR%q)VeLTrlc!b%Jrh9Zte%A%ZsPGX5F z#^OPRjS@){Rh<`Z{Geu1#3gy~qN)1BV6&!=lNPyz6uY{ayC-XehJ{OQI&|sLr<CTB z$t|giHy^(ISkofybE%f4m4~NSL}XNYMrKx7c|~PaYg>CqXV;Xe)27duIcv$%Wy@Er zT(xEEw(UE1?mBYx*zpr5PhGis?fQ+Ix1KzG_WZ@mS6{w<`~KtSFF}x#K~w##EG#T+ zY^=GAOw58TibAZ0Yz#`mj)Ck(i6Vs@PL0YFMS~V5i5YWlR5^Ijx#)xV!zL5eNx>4y zE*}?dQZtndF>_5(=PGWV>{bGDZ)j?1n0ZSp*ukGQrKT*|0$O!26|(F=!#zCB0>1J9 zvFyMjBBP>X#)=&$ZoK$m=^2?>**SCN&XYG^{?xMaipr|$nzd@zsavmpp{@?N|M>o{ z?~Z(bPh2w#)5-Ex2`RXA)Y@HoQ|HpDPj-7R=}ioE2&j;me}32Y=$AsO)BjnW{Li4e z{ZIJ4_Bf`!sr>qXN+$pF&i}D~f9>4-H?l(KXU|=`cUOMu*LS~f{Jgctu2}r0#a+I2 zmo9}}-lwgxRpQNDWrME$($SnL)6^eMxg&5eqH3pXejmq+$A98~T5hrP%9(N|nMb1c zac7sr_O=UIjjDcHE8nf0uuy+l)EPe4DKpf!Ub&~Kt0a9x>T8hZ#o6EYZN0wt_xjTR z7r-8ISoiZkLx1CchF4tE|GvvF$+N9qGV4FXk>4L4RBd=rb<S?yH;dAZhZhJxneLjr z̻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 VxbJ%YcIDcCU+e2$$JYP92>=C==*a*8 literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/image/submission-lookup-small-endnote.jpg b/dspace-jspui/src/main/webapp/image/submission-lookup-small-endnote.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d11fa1fd45373a93d0f676d47d220d1c025ce3d6 GIT binary patch literal 1694 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 N%g^i1s?+~(0sxR2^4tIb literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/image/submission-lookup-small-pubmed-error.jpg b/dspace-jspui/src/main/webapp/image/submission-lookup-small-pubmed-error.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7c92179a7ceb9eb04c0f2deaa4cc87a607aca95 GIT binary patch literal 4146 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 K%f0shZvp_(%aNb} literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/image/submission-lookup-small-pubmed.jpg b/dspace-jspui/src/main/webapp/image/submission-lookup-small-pubmed.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27ceb98a4a23d6bfe817ca829b1f6b422d776c5e GIT binary patch literal 1469 zcmex=<NpH&0WUXCHwH#VMg|WC4+e(+w;7xnSeaQ^SeRK^SXfwDS=rcmIM~_Q+4;G- zIe7&6g@gq81qFr0WW<F<q(lV;B@`v3WM$>$<%PwSRFvdYWaQ-KK!z}~va+(XvGZ|o z@X3h?ipY@+{vTiv<Y16x2w-MZVqg+vWEN!ne}qArfq{{gk&yub*cq5v**I93{vTn` z6<}awW@cezW@cuEC}3n_W?^L$WMEe`6jE{w6c$YsacUF`nzV8A|04_%jEoG-$VM?R zGcd7$Y|#{CU}R!tVr5~57{kE8$Slaf#G>eE7$_tx(s+?Iv2dd3#)toJG4L=mGB61; z3o_U<+^mW^6*B8-WLV0n*SovJ`@_05HTxNhW#X^<FL}-yKlz68<zDGEy$AA&r~PGH zEf;@pmC2RU!7DQr7a6ScU#&2q=Y!$7?du(_91qs-iMQy{2tTnhN&0t=>&NF&shb|3 zQ{2LLWhsN{OD(TSB9lZW8FARivX^JQUv}qqZAtKhjk?=2jc%lV`XnT@RNUiK!QzQ8 zY#-kaGK+f|z2@+O3r~-(I{fR5*<oW9caFYSO-`O(dp7rcoRd)fION5Yrym*1FK<5j z>&VYJDmS;jyP$qM_r#to>zSp8R$iMoU21Z0L`UmV<%6tOmn>G`S<WdVE4qH|tHrm! znqJPl@?7hZq@Df>8>w8b?;c?yA&&2R>PqLEtyV5GXTS0HWc{~dH`$hL8KvHFyN$N8 z@iZzGcHHjY(yF=n5&Kdv8KD@7<NHiCRlM6$MfsScpQ*;Y`sg*wwX^z<YuDxb+-a*G zDPLW@*R9r_(NFu8@xKHn`zeh-FM3XwuAE|Xx}$KrkVxx-r&{b29A$gizg6dHe#rRh z_AV>O{OPG_Z_?}oE`=?)?XqC4oU^j}i6><Y_EOnddAD*GZxgr}BrIS1tNY?3m%e`U z7)57Ag$Zn2JD-$)D!D51(#K!%jl<ph8B$fPsm$}Pv%ERGNAk<<_nQte-LKp>$&WFr z$*q2FXl8Y*)0A0@(oL=Um8M<4HdU_Lj*sm>!ycBYl{^zHo~zXKa++^0&@8W=$=M<D zYD<86`|Prqg0_2J0gpl-ELg<J>UrYNi-1Let}IIo?nzc1x$JX>d+wr}n{UU<&3Bvl zH#N_xtYTWo$%=&!zx)yI>+~~zdhmMQ!)SA#+5^kt!lr0Uo-U>SGF<R#3rl|-$4QyQ zTILDv2QNB%$C!4Ba<#qhiL=tU%-M2uw&fP4+qZWgye;+0=#l&Ht!3Hz%cS$wd0Q-& z%B+|#f3Lu(LVm8L-uXMxv)_nt{o%@y3f1%oTDswt*R%-?$Bg`^G0HN|`%-Y}>VF1> zWozWWrftu#YqXX5x%>W}6zk&|=6Z+sXx(mfp31e>Yock<a>t&f?A=^ZQ`Ri>Jou4) z%cO-LdtSYFt6Hv~mboG4SFMw)r)aT}r%UKkF3!>{Pi_TOmx|37ZR_~9C|#Pm&?A6V zOG4pyuPK{Og~82s!6}BaEo`@PnK_*t4lp}4{aLv9j{Ne^JiAzfS4Z@3`^d;Wx$yDU z-DO`+br-+fva2SXWy*fh%!tA(8rm0oCWr_a8S(L1Jde4gD|&C+FYRlm3t#cNt@EuE zxUZFJ6j69!0i%Vc@*0_f>IY2eyVkBUJ?|UBbw<S_|C{#GZFNEG4*qAT`*|hp#_hAW zwrHBTrRsV6_!cZYy8LLI7H0sv++&OL`wzU1IvO)+nVOHu!S>DZXHrZipIJE7>C<$( z_xXZOi*lE|{4(oR{PxVU(~};}_$Y8^dVH~+XIR*JqxmvR_}D66_a$mi>w9_iO@-L% zFIq)O!Lpv29usa9-ce1^R*g8oKCkn{`#Bl9x-$C~EYLgfBs(XctJc;?^29Oyxr_hb F1OT8QN>Ts- literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/image/submission-lookup-small-ris.jpg b/dspace-jspui/src/main/webapp/image/submission-lookup-small-ris.jpg new file mode 100644 index 0000000000000000000000000000000000000000..24b49bdbe11416c269a3f41f6093244ae3066bc1 GIT binary patch literal 2254 zcmex=<NpH&0WUXCHwH#VMur521O|rx4;l1aD>Bm<7<_#hv=|r|I2f1$85md?7#J8C z7#J7=85x+tY%q_3;s0$0X9gxlMi63x0A^NZ5MX0rVP<7#V`m3p4o+@P4h}93c6Kga zE-r2!9v&WcPCkBK9zGBoWC$Y@6B9EtGaEBA8xIFN2S^2J`2PV0K@J8f1{-EZB?cxz zMrJ|A|3?_)85kH@8NmSLd=O@2VrF4wW9Q)H;{JbxVXFWG6C*P-6ALpdD+>z)17j^C z6Eg#gAghp~p(C4cU?RIxp@>oA#DyHnP8$!323`E1Vw_ae#K|QlE+HwUs-~`?sbykn zW^Q3=<?Q0>=I-I?6&w;879J59m7J2AmY$KBRa{b9R$ftA)!fqB*51+CHEHscsne#< zm^o|F;w4L$Enl&6)uzo`wr<<LW9P0zhmRaRcKpQ2Q<pAZxq9vTjhnX~K6?D*>9glA zUcUPH>GPMb-@gC&`3vMPMh0fEuRsLIR}2hj{t{$hVq{`rVP;_m`HPXM9Hc;yg;mjz zO~^5jJ+V+&$*7S-#A)KfjR!fEje|ajCKX-e5>qjGsQMA)HL%Z!^H>vEK7)G<;jdc^ zJj{#?OoGgU4E79vUH&sPb=6(0+WzM4$JY;Kj~+kLFIpk|@ZQqYN7DPn>XS33RW0tW z=H}nB_JI4wT|49=RrXIY5cD=+jBN8iX#Yba_xZu~tx|DwKgI{lK043n`oilrp%0I2 z+kG*&RMz{@gnOG_PTxLB^6i#~rG+fhZg@zRPgg(fuU9O8!CvG)Lz=dH*MA1NeR6*s zc70^qn^^nd=6Y$r%WuQ3zX_k8-F{-nZ-+_ZQyaUvY<4Q&s(iLj<8PB4>yP4?A5T9r z`(7%om#C5XSbi|pJLICtYwzr{_92(n{ZTGoVa>YbcicR)%-1V3w;$5ztkik3eVU<R z>ou)kI`&ty9tKSbeX#d=cHYz6pl7eveZ6$rJNu@%??JU~_urR&wx0Z-fz|oK*Y~%y z{xcleertNym;0?&e9aG~-*b2SZ@d-#W7GR18)N>?%$xS~QsPvD%7ht<8yD=DR35^x ze&Nag46NxNYQJqxUHYPq^+)fcv)KV3#g;$x$SHALa?kjcnN`BoC_#<=0tVAgKAtM8 zlEUUFvsR?*#eAzj^6dxgx1NcYs#C4;`RLxUPj>0_J`-7C$7`mt{=WY%m{-Zpk=izK zt)t*Zm!?<I+25u`yL(R1_FFHtYLouXiswh{*}j~Ys?q(pyth7cuG#mXAH_2JOfRNP z54o`R?fW<RYv!G~v&lJc>6>}?B4?^N+5O%><5Yv%jUGKo@5wiJFU{5a`qVdP>z;Y* zUN86MTInagbywZ|XSsL(GaQVylc=1yZEpG_-lBW29!G83IO|ZZ>8yXRJ-c3IuMiX8 z6Z!a5#C?e;^DG|LZ`!8v_l;cXect+mK{fI#T$h|(S7H9hym`%^z=zfGViie`LpN@o zS`(aGSiJm}JMXHfSbwEEv*(8UwV#-qSo=M*!R=XGxZ98557Qs=PQ89O*ZlFHS@NxR znx3_PyB~(`yC|jd?{;?QENRVKH<ufp)jhL0+U=61{vk<axq#<&Mm2(eXZ`Vic%SKq z_|f^Y;m$ig@VBh5kz9CIz02gU*1L?i?@LbpyUDXwYR&XrwclEken0rBH0|!CjB}Cf zR)-(TObVDfKiYG5_PUetDc_@C-;z<hSXV8#^O64#jcd&h`~}yy*LXjeFI5qJ%$&2b zICVj`_%79@#}=n&i!QdkW6rzcZ|9=S{DkeU=1gu=ynk<)a9XLF{h)sLFa5WyAMy{) zv-xmmyKqJIu`1Vf+n1fRQIm|j^-Oh^(TO{&a|<U_N&U<}da*`(`$xX!$Nd6zmrpMF z@%!MT?}sn_=nk0euwh=cc86~M^UHZ_Q?^9>*{^j?`f5_QQtFaO7QTz~*VswCzGkQO zBlqFkVDIbuA8K7T)it{H>U=am_kV^Qr;pmI*ItAw*=0@m*(=KTeyYO(8H-aU5B>BE zGr!h--SxI~+ui)VXI8nYF8Xu!)Q{s~{~4N!D)v7r+x?I?JLZaw=|kV3^GEE|Hh)Zs z(tR?k#ZL1>-R2ekE6*-Dap|_xBj@689^E`FJ$H8*WIC<Cc_rLTUOcGvuI+z@2d2L! za`jou3%|7A*nd2quO{}R+1lil6>|LCKaM|IdcEgsuF>Tqzxw8vmo7iQ=+?`P%Wpm0 zEUdEaQ<UoQ$-+u^D(6M}O1ag%v`<|BL;XL)k^GyBkKALjQ<!|9d{%w)K5^d<U*DPh z^?T>}bi)1GrRp9}w@UO*O%8L`ROnmZIDf0gx|L~H=bHPSI;*-p<<ifaduy$g<Jb7z zS^m8K@cJKW&yTO?t`Yg*-)vf&eIROT|KS_|<ouVc-QQ*E9c`M==e@+UGUwaG$Th{% z(=RWbs;_7BQu(t|i_>bMQ#R&@>shzf_sMVGez>0PrJ0?qo%oN9V%rzi7+%e_Nw<Br z_JOb5tKzjvv6<Y7B26Oy&Rkxz-e=a7&j&6UsdS`doPQ&l_EL`b;vf6fucTVrCNH~j zKkJO#uV?qJD$n}ZR*+K4uv5}P$ImExGymLBub{&4u&nE0Wn2F<NdJ5__vg%z*E^Qy zP5WaKKl9`Mj{1annTpHD?(^@7H*c<!&G@H&p(cAtMfVY**gsC!_W1ppx@>0lO4n?W zaPw=57ava#o)y9<q8avc#>pwaz1=;NFXe_+S64?)Q{`vf)8>(w!?VgTRMp*~Y@Ndk btI#g(Q%923V^!^D=l|N4Y}FS%|Nl(@$EEz| literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/image/submission-lookup-small-tsv.jpg b/dspace-jspui/src/main/webapp/image/submission-lookup-small-tsv.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05de25f60a8885e1711bb410255697012b736b7d GIT binary patch literal 11621 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 B*b)E$ literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/layout/footer-submission.jsp b/dspace-jspui/src/main/webapp/layout/footer-submission.jsp new file mode 100644 index 0000000..b894d16 --- /dev/null +++ b/dspace-jspui/src/main/webapp/layout/footer-submission.jsp @@ -0,0 +1,14 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Footer for submission + --%> + +<%@ include file="footer-default.jsp" %> \ No newline at end of file diff --git a/dspace-jspui/src/main/webapp/layout/header-submission.jsp b/dspace-jspui/src/main/webapp/layout/header-submission.jsp new file mode 100644 index 0000000..3bee332 --- /dev/null +++ b/dspace-jspui/src/main/webapp/layout/header-submission.jsp @@ -0,0 +1,166 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - HTML header for main home page + --%> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ page import="java.util.List"%> +<%@ page import="java.util.Enumeration"%> +<%@ page import="org.dspace.app.webui.util.JSPManager" %> +<%@ page import="org.dspace.core.ConfigurationManager" %> +<%@ page import="org.dspace.app.util.Util" %> +<%@ page import="javax.servlet.jsp.jstl.core.*" %> +<%@ page import="javax.servlet.jsp.jstl.fmt.*" %> + +<% + String title = (String) request.getAttribute("dspace.layout.title"); + String navbar = (String) request.getAttribute("dspace.layout.navbar"); + boolean locbar = ((Boolean) request.getAttribute("dspace.layout.locbar")).booleanValue(); + + String siteName = ConfigurationManager.getProperty("dspace.name"); + String feedRef = (String)request.getAttribute("dspace.layout.feedref"); + boolean osLink = ConfigurationManager.getBooleanProperty("websvc.opensearch.autolink"); + String osCtx = ConfigurationManager.getProperty("websvc.opensearch.svccontext"); + String osName = ConfigurationManager.getProperty("websvc.opensearch.shortname"); + List parts = (List)request.getAttribute("dspace.layout.linkparts"); + String extraHeadData = (String)request.getAttribute("dspace.layout.head"); + String extraHeadDataLast = (String)request.getAttribute("dspace.layout.head.last"); + String dsVersion = Util.getSourceVersion(); + String generator = dsVersion == null ? "DSpace" : "DSpace "+dsVersion; + String analyticsKey = ConfigurationManager.getProperty("jspui.google.analytics.key"); +%> + +<!DOCTYPE html> +<html> + <head> + <title><%= title %> | <%= siteName %></title> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <meta name="Generator" content="<%= generator %>" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <link rel="shortcut icon" href="<%= request.getContextPath() %>/favicon.ico" type="image/x-icon"/> + <link rel="stylesheet" href="<%= request.getContextPath() %>/static/css/jquery-ui-1.10.3.custom/redmond/jquery-ui-1.10.3.custom.css" type="text/css" /> + <link rel="stylesheet" href="<%= request.getContextPath() %>/static/css/bootstrap/bootstrap.min.css" type="text/css" /> + <link rel="stylesheet" href="<%= request.getContextPath() %>/static/css/bootstrap/bootstrap-theme.min.css" type="text/css" /> + <link rel="stylesheet" href="<%= request.getContextPath() %>/static/css/bootstrap/dspace-theme.css" type="text/css" /> +<% + if (!"NONE".equals(feedRef)) + { + for (int i = 0; i < parts.size(); i+= 3) + { +%> + <link rel="alternate" type="application/<%= (String)parts.get(i) %>" title="<%= (String)parts.get(i+1) %>" href="<%= request.getContextPath() %>/feed/<%= (String)parts.get(i+2) %>/<%= feedRef %>"/> +<% + } + } + + if (osLink) + { +%> + <link rel="search" type="application/opensearchdescription+xml" href="<%= request.getContextPath() %>/<%= osCtx %>description.xml" title="<%= osName %>"/> +<% + } + + if (extraHeadData != null) + { %> +<%= extraHeadData %> +<% + } +%> + + <script type='text/javascript' src="<%= request.getContextPath() %>/static/js/jquery/jquery-1.10.2.min.js"></script> + <script type='text/javascript' src='<%= request.getContextPath() %>/static/js/jquery/jquery-ui-1.10.3.custom.min.js'></script> + <script type='text/javascript' src='<%= request.getContextPath() %>/static/js/bootstrap/bootstrap.min.js'></script> + <script type='text/javascript' src='<%= request.getContextPath() %>/static/js/holder.js'></script> + <script type="text/javascript" src="<%= request.getContextPath() %>/utils.js"></script> + <script type="text/javascript" src="<%= request.getContextPath() %>/static/js/choice-support.js"> </script> + + <%--Gooogle Analytics recording.--%> + <% + if (analyticsKey != null && analyticsKey.length() > 0) + { + %> + <script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', '<%= analyticsKey %>']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); + </script> + <% + } + if (extraHeadDataLast != null) + { %> + <%= extraHeadDataLast %> + <% + } + %> + + +<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries --> +<!--[if lt IE 9]> + <script src="<%= request.getContextPath() %>/static/js/html5shiv.js"></script> + <script src="<%= request.getContextPath() %>/static/js/respond.min.js"></script> +<![endif]--> + </head> + + <%-- HACK: leftmargin, topmargin: for non-CSS compliant Microsoft IE browser --%> + <%-- HACK: marginwidth, marginheight: for non-CSS compliant Netscape browser --%> + <body class="undernavigation"> +<a class="sr-only" href="#content">Skip navigation</a> +<header class="navbar navbar-inverse navbar-fixed-top"> + <% + if (!navbar.equals("off")) + { +%> + <div class="container"> + <dspace:include page="<%= navbar %>" /> + </div> +<% + } + else + { + %> + <div class="container"> + <dspace:include page="/layout/navbar-minimal.jsp" /> + </div> +<% + } +%> +</header> + +<main id="content" role="main"> + <%-- Location bar --%> +<% + if (locbar) + { +%> +<div class="container"> + <dspace:include page="/layout/location-bar.jsp" /> +</div> +<% + } +%> + + + <%-- Page contents --%> +<div class="container"> +<% if (request.getAttribute("dspace.layout.sidebar") != null) { %> + <div class="row"> + <div class="col-md-9"> +<% } %> \ No newline at end of file diff --git a/dspace-jspui/src/main/webapp/layout/legacy/footer-default.jsp b/dspace-jspui/src/main/webapp/layout/legacy/footer-default.jsp new file mode 100644 index 0000000..309660d --- /dev/null +++ b/dspace-jspui/src/main/webapp/layout/legacy/footer-default.jsp @@ -0,0 +1,69 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Footer for home page + --%> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ page import="java.net.URLEncoder" %> +<%@ page import="org.dspace.app.webui.util.UIUtil" %> + +<% + String sidebar = (String) request.getAttribute("dspace.layout.sidebar"); + int overallColSpan = 3; + if (sidebar == null) + { + overallColSpan = 2; + } +%> + <%-- End of page content --%> + <p> </p> + </td> + + <%-- Right-hand side bar if appropriate --%> +<% + if (sidebar != null) + { +%> + <td class="sidebar"> + <%= sidebar %> + </td> +<% + } +%> + </tr> + + <%-- Page footer --%> + <tr class="pageFooterBar"> + <td colspan="<%= overallColSpan %>" class="pageFootnote"> + <table class="pageFooterBar" width="100%"> + <tr> + <td> + <a href="http://validator.w3.org/check?uri=referer"><img + src="<%= request.getContextPath() %>/image/valid-xhtml10.png" + alt="Valid XHTML 1.0!" height="31" width="88" /></a> + </td> + <td class="pageFootnote"> + <fmt:message key="jsp.layout.footer-default.text"/> - + <a target="_blank" href="<%= request.getContextPath() %>/feedback"><fmt:message key="jsp.layout.footer-default.feedback"/></a> + <a href="<%= request.getContextPath() %>/htmlmap"></a> + </td> + <td nowrap="nowrap" valign="middle"> <%-- nowrap, valign for broken NS 4.x --%> + </td> + </tr> + </table> + </td> + </tr> + </table> + </body> +</html> \ No newline at end of file diff --git a/dspace-jspui/src/main/webapp/layout/legacy/footer-popup.jsp b/dspace-jspui/src/main/webapp/layout/legacy/footer-popup.jsp new file mode 100644 index 0000000..3df9635 --- /dev/null +++ b/dspace-jspui/src/main/webapp/layout/legacy/footer-popup.jsp @@ -0,0 +1,20 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Footer for home page + --%> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> + +<%@ page contentType="text/html;charset=UTF-8" %> + + + </body> +</html> diff --git a/dspace-jspui/src/main/webapp/layout/legacy/header-default.jsp b/dspace-jspui/src/main/webapp/layout/legacy/header-default.jsp new file mode 100644 index 0000000..73e8c03 --- /dev/null +++ b/dspace-jspui/src/main/webapp/layout/legacy/header-default.jsp @@ -0,0 +1,180 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - HTML header for main home page + --%> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ page import="java.util.List"%> +<%@ page import="java.util.Enumeration"%> +<%@ page import="org.dspace.app.webui.util.JSPManager" %> +<%@ page import="org.dspace.core.ConfigurationManager" %> +<%@ page import="org.dspace.app.util.Util" %> +<%@ page import="javax.servlet.jsp.jstl.core.*" %> +<%@ page import="javax.servlet.jsp.jstl.fmt.*" %> + +<% + String title = (String) request.getAttribute("dspace.layout.title"); + String navbar = (String) request.getAttribute("dspace.layout.navbar"); + boolean locbar = ((Boolean) request.getAttribute("dspace.layout.locbar")).booleanValue(); + + String siteName = ConfigurationManager.getProperty("dspace.name"); + String feedRef = (String)request.getAttribute("dspace.layout.feedref"); + boolean osLink = ConfigurationManager.getBooleanProperty("websvc.opensearch.autolink"); + String osCtx = ConfigurationManager.getProperty("websvc.opensearch.svccontext"); + String osName = ConfigurationManager.getProperty("websvc.opensearch.shortname"); + List parts = (List)request.getAttribute("dspace.layout.linkparts"); + String extraHeadData = (String)request.getAttribute("dspace.layout.head"); + String extraHeadDataLast = (String)request.getAttribute("dspace.layout.head.last"); + String dsVersion = Util.getSourceVersion(); + String generator = dsVersion == null ? "DSpace" : "DSpace "+dsVersion; + String analyticsKey = ConfigurationManager.getProperty("jspui.google.analytics.key"); +%> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <title><%= siteName %>: <%= title %></title> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <meta name="Generator" content="<%= generator %>" /> + <link rel="stylesheet" href="<%= request.getContextPath() %>/styles.css" type="text/css" /> + <link rel="stylesheet" href="<%= request.getContextPath() %>/print.css" media="print" type="text/css" /> + <link rel="shortcut icon" href="<%= request.getContextPath() %>/favicon.ico" type="image/x-icon"/> + <link rel="stylesheet" href="<%= request.getContextPath() %>/css/discovery.css" type="text/css" /> + <link rel="stylesheet" href="<%= request.getContextPath() %>/static/css/jquery-ui-1.10.3.custom/redmond/jquery-ui-1.10.3.custom.min.css" type="text/css" /> +<% + if (!"NONE".equals(feedRef)) + { + for (int i = 0; i < parts.size(); i+= 3) + { +%> + <link rel="alternate" type="application/<%= (String)parts.get(i) %>" title="<%= (String)parts.get(i+1) %>" href="<%= request.getContextPath() %>/feed/<%= (String)parts.get(i+2) %>/<%= feedRef %>"/> +<% + } + } + + if (osLink) + { +%> + <link rel="search" type="application/opensearchdescription+xml" href="<%= request.getContextPath() %>/<%= osCtx %>description.xml" title="<%= osName %>"/> +<% + } + + if (extraHeadData != null) + { %> +<%= extraHeadData %> +<% + } +%> + + <script type='text/javascript' src='<%= request.getContextPath() %>/static/js/jquery/jquery-1.10.2.min.js'></script> + <script type='text/javascript' src='<%= request.getContextPath() %>/static/js/jquery/jquery-ui-1.10.3.custom.min.js'></script> + <script type="text/javascript" src="<%= request.getContextPath() %>/utils.js"></script> + <script type="text/javascript" src="<%= request.getContextPath() %>/static/js/scriptaculous/prototype.js"> </script> + <script type="text/javascript" src="<%= request.getContextPath() %>/static/js/scriptaculous/effects.js"> </script> + <script type="text/javascript" src="<%= request.getContextPath() %>/static/js/scriptaculous/builder.js"> </script> + <script type="text/javascript" src="<%= request.getContextPath() %>/static/js/scriptaculous/controls.js"> </script> + <script type="text/javascript" src="<%= request.getContextPath() %>/static/js/choice-support.js"> </script> + + <%--Gooogle Analytics recording.--%> + <% + if (analyticsKey != null && analyticsKey.length() > 0) + { + %> + <script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', '<%= analyticsKey %>']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); + </script> + <% + } + if (extraHeadDataLast != null) + { %> + <%= extraHeadDataLast %> + <% + } + %> + + </head> + + <%-- HACK: leftmargin, topmargin: for non-CSS compliant Microsoft IE browser --%> + <%-- HACK: marginwidth, marginheight: for non-CSS compliant Netscape browser --%> + <body> + + <%-- DSpace top-of-page banner --%> + <%-- HACK: width, border, cellspacing, cellpadding: for non-CSS compliant Netscape, Mozilla browsers --%> + <table class="pageBanner" width="100%" border="0" cellpadding="0" cellspacing="0"> + + <%-- DSpace logo --%> + <tr> + <td> + <a href="<%= request.getContextPath() %>/"><img src="<%= request.getContextPath() %>/image/dspace-blue.gif" alt="<fmt:message key="jsp.layout.header-default.alt"/>" width="198" height="79" border="0"/></a></td> + <td class="tagLine" width="99%"> <%-- Make as wide as possible. cellpadding repeated for broken NS 4.x --%> + <a class="tagLineText" target="_blank" href="http://www.dspace.org/"><fmt:message key="jsp.layout.header-default.about"/></a> + </td> + <td nowrap="nowrap" valign="middle"> + </td> + </tr> + <tr class="stripe"> <%-- Blue stripe --%> + <td colspan="3"> </td> + </tr> + </table> + + <%-- Localization --%> +<%-- <c:if test="${param.locale != null}">--%> +<%-- <fmt:setLocale value="${param.locale}" scope="session" /> --%> +<%-- </c:if> --%> +<%-- <fmt:setBundle basename="Messages" scope="session"/> --%> + + <%-- Page contents --%> + + <%-- HACK: width, border, cellspacing, cellpadding: for non-CSS compliant Netscape, Mozilla browsers --%> + <table class="centralPane" width="99%" border="0" cellpadding="3" cellspacing="1"> + + <%-- HACK: valign: for non-CSS compliant Netscape browser --%> + <tr valign="top"> + + <%-- Navigation bar --%> +<% + if (!navbar.equals("off")) + { +%> + <td class="navigationBar"> + <dspace:include page="<%= navbar %>" /> + </td> +<% + } +%> + <%-- Page Content --%> + + <%-- HACK: width specified here for non-CSS compliant Netscape 4.x --%> + <%-- HACK: Width shouldn't really be 100%, but omitting this means --%> + <%-- navigation bar gets far too wide on certain pages --%> + <td class="pageContents" width="100%"> + + <%-- Location bar --%> +<% + if (locbar) + { +%> + <dspace:include page="/layout/location-bar.jsp" /> +<% + } +%> diff --git a/dspace-jspui/src/main/webapp/layout/legacy/header-popup.jsp b/dspace-jspui/src/main/webapp/layout/legacy/header-popup.jsp new file mode 100644 index 0000000..52e4361 --- /dev/null +++ b/dspace-jspui/src/main/webapp/layout/legacy/header-popup.jsp @@ -0,0 +1,73 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - HTML header for main home page + --%> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ page import="java.util.List"%> +<%@ page import="java.util.Enumeration"%> +<%@ page import="org.dspace.app.webui.util.JSPManager" %> +<%@ page import="org.dspace.core.ConfigurationManager" %> +<%@ page import="javax.servlet.jsp.jstl.core.*" %> +<%@ page import="javax.servlet.jsp.jstl.fmt.*" %> + +<% + String title = (String) request.getAttribute("dspace.layout.title"); + + String navbar = (String) request.getAttribute("dspace.layout.navbar"); + boolean locbar = ((Boolean) request.getAttribute("dspace.layout.locbar")).booleanValue(); + + String siteName = ConfigurationManager.getProperty("dspace.name"); + String feedRef = (String)request.getAttribute("dspace.layout.feedref"); + List parts = (List)request.getAttribute("dspace.layout.linkparts"); + String extraHeadData = (String)request.getAttribute("dspace.layout.head"); +%> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <title><%= siteName %>: <%= title %></title> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <meta name="Generator" content="DSpace" /> + <link rel="stylesheet" href="<%= request.getContextPath() %>/styles.css" type="text/css" /> + <link rel="stylesheet" href="<%= request.getContextPath() %>/print.css" media="print" type="text/css" /> + <link rel="shortcut icon" href="<%= request.getContextPath() %>/favicon.ico" type="image/x-icon"/> +<% + if (extraHeadData != null) + { %> +<%= extraHeadData %> +<% + } +%> + + <script type="text/javascript" src="<%= request.getContextPath() %>/utils.js"></script> + <script type="text/javascript" src="<%= request.getContextPath() %>/static/js/scriptaculous/prototype.js"> </script> + <script type="text/javascript" src="<%= request.getContextPath() %>/static/js/scriptaculous/effects.js"> </script> + <script type="text/javascript" src="<%= request.getContextPath() %>/static/js/scriptaculous/builder.js"> </script> + <script type="text/javascript" src="<%= request.getContextPath() %>/static/js/scriptaculous/controls.js"> </script> + <script type="text/javascript" src="<%= request.getContextPath() %>/static/js/choice-support.js"> </script> + </head> + + <%-- HACK: leftmargin, topmargin: for non-CSS compliant Microsoft IE browser --%> + <%-- HACK: marginwidth, marginheight: for non-CSS compliant Netscape browser --%> + <body> + + <%-- Localization --%> +<%-- <c:if test="${param.locale != null}">--%> +<%-- <fmt:setLocale value="${param.locale}" scope="session" /> --%> +<%-- </c:if> --%> +<%-- <fmt:setBundle basename="Messages" scope="session"/> --%> + + <%-- Page contents --%> diff --git a/dspace-jspui/src/main/webapp/layout/legacy/location-bar.jsp b/dspace-jspui/src/main/webapp/layout/legacy/location-bar.jsp new file mode 100644 index 0000000..953d39e --- /dev/null +++ b/dspace-jspui/src/main/webapp/layout/legacy/location-bar.jsp @@ -0,0 +1,59 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Location bar component + - + - This component displays the "breadcrumb" style navigation aid at the top + - of most screens. + - + - Uses request attributes set in org.dspace.app.webui.jsptag.Layout, and + - hence must only be used as part of the execution of that tag. Plus, + - dspace.layout.locbar should be verified to be true before this is included. + - + - dspace.layout.parenttitles - List of titles of parent pages + - dspace.layout.parentlinks - List of URLs of parent pages, empty string + - for non-links + --%> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ page import="java.util.List" %> + +<p class="locationBar"> +<% + List parentTitles = (List) request.getAttribute("dspace.layout.parenttitles"); + List parentLinks = (List) request.getAttribute("dspace.layout.parentlinks"); + + for (int i = 0; i < parentTitles.size(); i++) + { + String s = (String) parentTitles.get(i); + String u = (String) parentLinks.get(i); + + // New line for each breadcrumb (no <br> needed for first) + if (i > 0) + { +%><br/><% + } + + if (u.equals("")) + { +%> +<%= s %> > +<% + } + else + { +%> +<a href="<%= request.getContextPath() %><%= u %>"><%= s %></a> > +<% + } +} +%> +</p> diff --git a/dspace-jspui/src/main/webapp/layout/legacy/navbar-admin.jsp b/dspace-jspui/src/main/webapp/layout/legacy/navbar-admin.jsp new file mode 100644 index 0000000..43ed88f --- /dev/null +++ b/dspace-jspui/src/main/webapp/layout/legacy/navbar-admin.jsp @@ -0,0 +1,209 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Navigation bar for admin pages + --%> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ page import="java.util.LinkedList" %> +<%@ page import="java.util.List" %> + +<%@ page import="javax.servlet.jsp.jstl.fmt.LocaleSupport" %> + +<%@ page import="org.dspace.app.webui.util.UIUtil" %> + + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> + +<% + // Get the current page, minus query string + String currentPage = UIUtil.getOriginalURL(request); + int c = currentPage.indexOf( '?' ); + if( c > -1 ) + { + currentPage = currentPage.substring(0, c); + } +%> + +<%-- HACK: width, border, cellspacing, cellpadding: for non-CSS compliant Netscape, Mozilla browsers --%> +<table width="100%" border="0" cellspacing="2" cellpadding="2"> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= (currentPage.endsWith("/tools/edit-communities") ? "arrow-highlight" : "arrow") %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/tools/edit-communities"><fmt:message key="jsp.layout.navbar-admin.communities-collections"/></a> + </td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= (currentPage.endsWith("/dspace-admin/edit-epeople") ? "arrow-highlight" : "arrow") %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/dspace-admin/edit-epeople"><fmt:message key="jsp.layout.navbar-admin.epeople"/></a> + </td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= (currentPage.endsWith("/tools/group-edit") ? "arrow-highlight" : "arrow") %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/tools/group-edit"><fmt:message key="jsp.layout.navbar-admin.groups"/></a> + </td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= (currentPage.endsWith("/tools/edit-item") ? "arrow-highlight" : "arrow") %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/tools/edit-item"><fmt:message key="jsp.layout.navbar-admin.items"/></a> + </td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= (currentPage.endsWith("/dspace-admin/metadata-schema-registry") ? "arrow-highlight" : "arrow") %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/dspace-admin/metadata-schema-registry"><fmt:message key="jsp.layout.navbar-admin.metadataregistry"/></a> + </td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= (currentPage.endsWith("/dspace-admin/format-registry") ? "arrow-highlight" : "arrow") %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/dspace-admin/format-registry"><fmt:message key="jsp.layout.navbar-admin.formatregistry"/></a> + </td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= (currentPage.endsWith("/dspace-admin/workflow") ? "arrow-highlight" : "arrow") %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/dspace-admin/workflow"><fmt:message key="jsp.layout.navbar-admin.workflow"/></a> + </td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= (currentPage.endsWith("/tools/authorize") ? "arrow-highlight" : "arrow") %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/tools/authorize"><fmt:message key="jsp.layout.navbar-admin.authorization"/></a> + </td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= (currentPage.endsWith("/dspace-admin/news-edit") ? "arrow-highlight" : "arrow") %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/dspace-admin/news-edit"><fmt:message key="jsp.layout.navbar-admin.editnews"/></a> + </td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= (currentPage.endsWith("/dspace-admin/license-edit") ? "arrow-highlight" : "arrow") %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/dspace-admin/license-edit"><fmt:message key="jsp.layout.navbar-admin.editlicense"/></a> + </td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= (currentPage.endsWith("/dspace-admin/supervise") ? "arrow-highlight" : "arrow") %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/dspace-admin/supervise"><fmt:message key="jsp.layout.navbar-admin.supervisors"/></a> + </td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= (currentPage.endsWith("/statistics") ? "arrow-highlight" : "arrow") %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/statistics"><fmt:message key="jsp.layout.navbar-admin.statistics"/></a> + </td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= (currentPage.endsWith("/metadataimport") ? "arrow-highlight" : "arrow") %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/dspace-admin/metadataimport"><fmt:message key="jsp.layout.navbar-admin.metadataimport"/></a> + </td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= (currentPage.endsWith("/curate") ? "arrow-highlight" : "arrow") %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/dspace-admin/curate"><fmt:message key="jsp.layout.navbar-admin.curate"/></a> + </td> + </tr> + + <tr> + <td colspan="2"> </td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= (currentPage.endsWith("/withdrawn") ? "arrow-highlight" : "arrow") %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/dspace-admin/withdrawn"><fmt:message key="jsp.layout.navbar-admin.withdrawn"/></a> + </td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= (currentPage.endsWith("/privateitems") ? "arrow-highlight" : "arrow") %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/dspace-admin/privateitems"><fmt:message key="jsp.layout.navbar-admin.privateitems"/></a> + </td> + </tr> + + <tr> + <td colspan="2"> </td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/arrow.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <dspace:popup page="<%= LocaleSupport.getLocalizedMessage(pageContext, \"help.site-admin\")%>"><fmt:message key="jsp.layout.navbar-admin.help"/></dspace:popup> + </td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/arrow.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/logout"><fmt:message key="jsp.layout.navbar-admin.logout"/></a> + </td> + </tr> +</table> diff --git a/dspace-jspui/src/main/webapp/layout/legacy/navbar-default.jsp b/dspace-jspui/src/main/webapp/layout/legacy/navbar-default.jsp new file mode 100644 index 0000000..f78b16a --- /dev/null +++ b/dspace-jspui/src/main/webapp/layout/legacy/navbar-default.jsp @@ -0,0 +1,244 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Default navigation bar +--%> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="/WEB-INF/dspace-tags.tld" prefix="dspace" %> + +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.List" %> +<%@ page import="javax.servlet.jsp.jstl.fmt.LocaleSupport" %> +<%@ page import="org.dspace.app.webui.util.UIUtil" %> +<%@ page import="org.dspace.content.Collection" %> +<%@ page import="org.dspace.content.Community" %> +<%@ page import="org.dspace.eperson.EPerson" %> +<%@ page import="org.dspace.core.ConfigurationManager" %> +<%@ page import="org.dspace.browse.BrowseIndex" %> +<%@ page import="org.dspace.browse.BrowseInfo" %> +<%@ page import="java.util.Map" %> +<% + // Is anyone logged in? + EPerson user = (EPerson) request.getAttribute("dspace.current.user"); + + // Is the logged in user an admin + Boolean admin = (Boolean)request.getAttribute("is.admin"); + boolean isAdmin = (admin == null ? false : admin.booleanValue()); + + // Get the current page, minus query string + String currentPage = UIUtil.getOriginalURL(request); + int c = currentPage.indexOf( '?' ); + if( c > -1 ) + { + currentPage = currentPage.substring( 0, c ); + } + + // E-mail may have to be truncated + String navbarEmail = null; + + if (user != null) + { + navbarEmail = user.getEmail(); + if (navbarEmail.length() > 18) + { + navbarEmail = navbarEmail.substring(0, 17) + "..."; + } + } + + // get the browse indices + + BrowseIndex[] bis = BrowseIndex.getBrowseIndices(); + BrowseInfo binfo = (BrowseInfo) request.getAttribute("browse.info"); + String browseCurrent = ""; + if (binfo != null) + { + BrowseIndex bix = binfo.getBrowseIndex(); + // Only highlight the current browse, only if it is a metadata index, + // or the selected sort option is the default for the index + if (bix.isMetadataIndex() || bix.getSortOption() == binfo.getSortOption()) + { + if (bix.getName() != null) + browseCurrent = bix.getName(); + } + } +%> + +<%-- Search Box --%> +<form method="get" action="<%= request.getContextPath() %>/simple-search"> + +<% + if (user != null) + { +%> + <p class="loggedIn"><fmt:message key="jsp.layout.navbar-default.loggedin"> + <fmt:param><%= navbarEmail %></fmt:param> + </fmt:message> + (<a href="<%= request.getContextPath() %>/logout"><fmt:message key="jsp.layout.navbar-default.logout"/></a>)</p> +<% + } +%> + <table width="100%" class="searchBox"> + <tr> + <td> + <table width="100%" border="0" cellspacing="0" > + <tr> + <td class="searchBoxLabel"><label for="tequery"><fmt:message key="jsp.layout.navbar-default.search"/></label></td> + </tr> + <tr> + <td class="searchBoxLabelSmall" valign="middle" nowrap="nowrap"> + <%-- <input type="text" name="query" id="tequery" size="10"/><input type=image border="0" src="<%= request.getContextPath() %>/image/search-go.gif" name="submit" alt="Go" value="Go"/> --%> + <input type="text" name="query" id="tequery" size="8"/><input type="submit" name="submit" value="<fmt:message key="jsp.layout.navbar-default.go"/>" /> + <br/><a href="<%= request.getContextPath() %>/advanced-search"><fmt:message key="jsp.layout.navbar-default.advanced"/></a> +<% + if (ConfigurationManager.getBooleanProperty("webui.controlledvocabulary.enable")) + { +%> + <br/><a href="<%= request.getContextPath() %>/subject-search"><fmt:message key="jsp.layout.navbar-default.subjectsearch"/></a> +<% + } +%> + </td> + </tr> + </table> + </td> + </tr> + </table> +</form> + +<%-- HACK: width, border, cellspacing, cellpadding: for non-CSS compliant Netscape, Mozilla browsers --%> +<table width="100%" border="0" cellspacing="2" cellpadding="2"> + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= (currentPage.endsWith("/index.jsp") ? "arrow-highlight" : "arrow") %>.gif" width="16" height="16"/> + </td> + + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/"><fmt:message key="jsp.layout.navbar-default.home"/></a> + </td> + </tr> + + <tr> + <td colspan="2"> </td> + </tr> + + <tr> + <td nowrap="nowrap" colspan="2" class="navigationBarSublabel"><fmt:message key="jsp.layout.navbar-default.browse"/></td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= ( currentPage.endsWith( "/community-list" ) ? "arrow-highlight" : "arrow" ) %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/community-list"><fmt:message key="jsp.layout.navbar-default.communities-collections"/></a> + </td> + </tr> + + +<%-- Insert the dynamic browse indices here --%> + +<% + for (int i = 0; i < bis.length; i++) + { + BrowseIndex bix = bis[i]; + String key = "browse.menu." + bix.getName(); + %> + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= ( browseCurrent.equals(bix.getName()) ? "arrow-highlight" : "arrow" ) %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/browse?type=<%= bix.getName() %>"><fmt:message key="<%= key %>"/></a> + </td> + </tr> + <% + } +%> + +<%-- End of dynamic browse indices --%> + + <tr> + <td colspan="2"> </td> + </tr> + + <tr> + <td nowrap="nowrap" colspan="2" class="navigationBarSublabel"><fmt:message key="jsp.layout.navbar-default.sign"/></td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= ( currentPage.endsWith( "/subscribe" ) ? "arrow-highlight" : "arrow" ) %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/subscribe"><fmt:message key="jsp.layout.navbar-default.receive"/></a> + </td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= ( currentPage.endsWith( "/mydspace" ) ? "arrow-highlight" : "arrow" ) %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/mydspace"><fmt:message key="jsp.layout.navbar-default.users"/></a><br/> + <fmt:message key="jsp.layout.navbar-default.users-authorized" /> + </td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= ( currentPage.endsWith( "/profile" ) ? "arrow-highlight" : "arrow" ) %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/profile"><fmt:message key="jsp.layout.navbar-default.edit"/></a> + </td> + </tr> + +<% + if (isAdmin) + { +%> + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= ( currentPage.endsWith( "/dspace-admin" ) ? "arrow-highlight" : "arrow" ) %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="<%= request.getContextPath() %>/dspace-admin"><fmt:message key="jsp.administer"/></a> + </td> + </tr> +<% + } +%> + + <tr> + <td colspan="2"> </td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= ( currentPage.endsWith( "/help" ) ? "arrow-highlight" : "arrow" ) %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <dspace:popup page="<%= LocaleSupport.getLocalizedMessage(pageContext, \"help.index\")%>"><fmt:message key="jsp.layout.navbar-default.help"/></dspace:popup> + </td> + </tr> + + <tr class="navigationBarItem"> + <td> + <img alt="" src="<%= request.getContextPath() %>/image/<%= ( currentPage.endsWith( "/about" ) ? "arrow-highlight" : "arrow" ) %>.gif" width="16" height="16"/> + </td> + <td nowrap="nowrap" class="navigationBarItem"> + <a href="http://www.dspace.org/"><fmt:message key="jsp.layout.navbar-default.about"/></a> + </td> + </tr> +</table> diff --git a/dspace-jspui/src/main/webapp/layout/navbar-minimal.jsp b/dspace-jspui/src/main/webapp/layout/navbar-minimal.jsp new file mode 100644 index 0000000..89566ab --- /dev/null +++ b/dspace-jspui/src/main/webapp/layout/navbar-minimal.jsp @@ -0,0 +1,99 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Default navigation bar +--%> + +<%@page import="org.apache.commons.lang.StringUtils"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="/WEB-INF/dspace-tags.tld" prefix="dspace" %> + +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.List" %> +<%@ page import="javax.servlet.jsp.jstl.fmt.LocaleSupport" %> +<%@ page import="org.dspace.app.webui.util.UIUtil" %> +<%@ page import="org.dspace.content.Collection" %> +<%@ page import="org.dspace.content.Community" %> +<%@ page import="org.dspace.eperson.EPerson" %> +<%@ page import="org.dspace.core.ConfigurationManager" %> +<%@ page import="org.dspace.browse.BrowseIndex" %> +<%@ page import="org.dspace.browse.BrowseInfo" %> +<%@ page import="java.util.Map" %> +<% + // Is anyone logged in? + EPerson user = (EPerson) request.getAttribute("dspace.current.user"); + + // Is the logged in user an admin + Boolean admin = (Boolean)request.getAttribute("is.admin"); + boolean isAdmin = (admin == null ? false : admin.booleanValue()); + + // Get the current page, minus query string + String currentPage = UIUtil.getOriginalURL(request); + int c = currentPage.indexOf( '?' ); + if( c > -1 ) + { + currentPage = currentPage.substring( 0, c ); + } + + // E-mail may have to be truncated + String navbarEmail = null; + + if (user != null) + { + navbarEmail = user.getEmail(); + } +%> + + + <div class="navbar-header"> + <a class="navbar-brand" href="<%= request.getContextPath() %>/"><img height="25px" src="<%= request.getContextPath() %>/image/dspace-logo-only.png" /></a> + </div> + <nav class="collapse navbar-collapse bs-navbar-collapse" role="navigation"> + <div class="nav navbar-nav navbar-right"> + <ul class="nav navbar-nav navbar-right"> + <li class="dropdown"> + <% + if (user != null) + { + %> + <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-user"></span> <fmt:message key="jsp.layout.navbar-default.loggedin"> + <fmt:param><%= StringUtils.abbreviate(navbarEmail, 20) %></fmt:param> + </fmt:message> <b class="caret"></b></a> + <% + } else { + %> + <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-user"></span> <fmt:message key="jsp.layout.navbar-default.sign"/> <b class="caret"></b></a> + <% } %> + <ul class="dropdown-menu"> + <li><a href="<%= request.getContextPath() %>/mydspace"><fmt:message key="jsp.layout.navbar-default.users"/></a></li> + <li><a href="<%= request.getContextPath() %>/subscribe"><fmt:message key="jsp.layout.navbar-default.receive"/></a></li> + <li><a href="<%= request.getContextPath() %>/profile"><fmt:message key="jsp.layout.navbar-default.edit"/></a></li> + + <% + if (isAdmin) + { + %> + <li class="divider"></li> + <li><a href="<%= request.getContextPath() %>/dspace-admin"><fmt:message key="jsp.administer"/></a></li> + <% + } + if (user != null) { + %> + <li><a href="<%= request.getContextPath() %>/logout"><span class="glyphicon glyphicon-log-out"></span> <fmt:message key="jsp.layout.navbar-default.logout"/></a></li> + <% } %> + </ul> + </li> + </ul> + + </div> + </nav> diff --git a/dspace-jspui/src/main/webapp/requestItem/item-send.jsp b/dspace-jspui/src/main/webapp/requestItem/item-send.jsp new file mode 100644 index 0000000..f62d839 --- /dev/null +++ b/dspace-jspui/src/main/webapp/requestItem/item-send.jsp @@ -0,0 +1,33 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Seggest received OK acknowledgement + --%> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> + +<style type="text/css"> +<!-- +.style1 {color: #0000AE} +--> +</style> + + +<dspace:layout locbar="off" navbar="off" title="O seu registo foi enviado com sucesso"> + + <h1><fmt:message key="jsp.request.item.item-send.info1"/></h1> + + <p><fmt:message key="jsp.request.item.item-send.info2"/> + <a class="style1" href="" onClick="window.close();"><fmt:message key="jsp.request.item.item-send.close"/></a></p> + +</dspace:layout> \ No newline at end of file diff --git a/dspace-jspui/src/main/webapp/requestItem/request-form.jsp b/dspace-jspui/src/main/webapp/requestItem/request-form.jsp new file mode 100644 index 0000000..c7b81ce --- /dev/null +++ b/dspace-jspui/src/main/webapp/requestItem/request-form.jsp @@ -0,0 +1,113 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Sugest form JSP + - + - Attributes: + - requestItem.problem - if present, report that all fields weren't filled out + - authenticated.email - email of authenticated user, if any + - handle - URL of handle item + --%> + +<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> + +<%@ page import="org.dspace.app.webui.servlet.RequestItemServlet"%> +<%@ page import="javax.servlet.jsp.jstl.fmt.LocaleSupport" %> + +<% + request.setCharacterEncoding("UTF-8"); + + boolean problem = (request.getAttribute("requestItem.problem") != null); + + String email = (String) request.getAttribute("email"); + if (email == null) + email = ""; + + String userName = (String) request.getAttribute("reqname"); + if (userName == null) + userName = ""; + + String handle = (String) request.getAttribute("handle"); + if (handle == null ) + handle = ""; + + String title = (String) request.getAttribute("title"); + if (title == null) + title = ""; + + String coment = (String) request.getAttribute("coment"); + if (coment == null) + coment = ""; + + String bitstream_id = (String) request.getAttribute("bitstream-id"); + boolean allfiles = (request.getAttribute("allfiles") != null); + +%> + +<dspace:layout locbar="off" navbar="default" titlekey="jsp.request.item.request-form.title" > + +<h2><fmt:message key="jsp.request.item.request-form.info2"> +<fmt:param><a href="<%=request.getContextPath()%>/handle/<%=handle %>"><%=title %></a></fmt:param> +</fmt:message></h2> + +<% + if (problem) + { +%> + <p class="alert alert-warning"><fmt:message key="jsp.request.item.request-form.problem"/></p> +<% + } +%> + <form name="form1" class="form-horizontal" action="<%= request.getContextPath() %>/request-item" method="post"> + <div class="form-group"> + <label for="reqname" class="control-label col-md-2"><fmt:message key="jsp.request.item.request-form.reqname"/></label> + <div class="col-md-10"> + <input class="form-control" type="text" name="reqname" size="50" value="<%= userName %>"> + </div> + </div> + <div class="form-group"> + <label for="email" class="control-label col-md-2"><fmt:message key="jsp.request.item.request-form.email"/></label> + <div class="col-md-10"> + <input type="text" class="form-control" name="email" size="50" value="<%= email %>"> + </div> + </div> + <div class="form-group"> + <label for="allfiles" class="control-label col-md-2"><fmt:message key="jsp.request.item.request-form.allfiles"/></label> + <div class="col-md-10"> + <div class="input-group"> + <span class="input-group-addon"><input type="radio" name="allfiles" value="true" <%=allfiles?"checked":""%> /></span> + <span class="form-control"><fmt:message key="jsp.request.item.request-form.yes"/></span> + </div> + <div class="input-group"> + <span class="input-group-addon"><input type="radio" name="allfiles" value="false" <%=allfiles?"":"checked"%> /></span> + <span class="form-control"><fmt:message key="jsp.request.item.request-form.no"/></span> + </div> + </div> + </div> + <div class="form-group"> + <label for="coment" class="control-label col-md-2"><fmt:message key="jsp.request.item.request-form.coment"/></label> + <div class="col-md-10"> + <textarea class="form-control" name="coment" rows="6" cols="46" wrap=soft><%= coment %></textarea> + </div> + </div> + + <input type="hidden" name="handle" value='<%= handle %>' /> + <input type="hidden" name="bitstream-id" value='<%= bitstream_id %>' /> + <input type="hidden" name="step" value="<%=RequestItemServlet.ENTER_FORM_PAGE %>" /> + <div class="btn btn-group col-md-4 pull-right row"> + <a class="btn btn-default col-md-6" href="<%=request.getContextPath()%>/handle/<%=handle %>"><fmt:message key="jsp.request.item.request-form.cancel" /></a> + <button type="submit" name="submit" class="btn btn-primary col-md-6" value="true"><fmt:message key="jsp.request.item.request-form.go"/></button> + </div> + </form> + +</dspace:layout> \ No newline at end of file diff --git a/dspace-jspui/src/main/webapp/requestItem/request-free-access.jsp b/dspace-jspui/src/main/webapp/requestItem/request-free-access.jsp new file mode 100644 index 0000000..7d3796b --- /dev/null +++ b/dspace-jspui/src/main/webapp/requestItem/request-free-access.jsp @@ -0,0 +1,64 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - request-free-acess JSP + - + - Attributes: + - token - token from the request item + - title - + - handle - URL of handle item + - + --%> + +<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> + +<%@ page import="org.dspace.app.webui.servlet.RequestItemServlet"%> +<%@ page import="javax.servlet.jsp.jstl.fmt.LocaleSupport" %> + +<% + String token = request.getParameter("token"); + + String handle = (String) request.getAttribute("handle"); + if (handle == null) + handle = ""; + + String title = (String) request.getAttribute("title"); + if (title == null) + title = ""; +%> + +<dspace:layout locbar="off" navbar="default" titlekey="jsp.request.item.request-free-acess.title" > + +<p class="alert alert-success"><fmt:message key="jsp.request.item.request-free-acess.info1"/></p> + +<p><b><fmt:message key="jsp.request.item.request-free-acess.info2" /></b></p> + + <form name="form1" action="<%= request.getContextPath() %>/request-item" method="post" class="form-horizontal"> + <input type="hidden" name="token" value='<%= token %>'> + <input type="hidden" name="step" value='<%= RequestItemServlet.RESUME_FREEACESS %>'> + <div class="form-group"> + <label for="name" class="control-label col-md-2"><fmt:message key="jsp.request.item.request-free-acess.name"/></label> + <div class="col-md-5"> + <input type="text" class="form-control" name="name" size="50" value="" /> + </div> + </div> + <div class="form-group"> + <label for="email" class="control-label col-md-2"><fmt:message key="jsp.request.item.request-free-acess.email"/></label> + <div class="col-md-5"> + <input type="text" name="email" class="form-control" size="50" value="" /> + </div> + </div> + <input class="btn btn-success col-md-offset-2" type="submit" name="submit_free" value="<fmt:message key="jsp.request.item.request-free-acess.free"/>" /> + </form> + +</dspace:layout> \ No newline at end of file diff --git a/dspace-jspui/src/main/webapp/requestItem/request-information.jsp b/dspace-jspui/src/main/webapp/requestItem/request-information.jsp new file mode 100644 index 0000000..d9266f4 --- /dev/null +++ b/dspace-jspui/src/main/webapp/requestItem/request-information.jsp @@ -0,0 +1,62 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - request-information JSP + - + - Attributes: + - token - + - handle - URL of handle item + - title - + - request-name - + --%> + +<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> + +<%@ page import="org.dspace.app.webui.servlet.RequestItemServlet"%> +<%@ page import="javax.servlet.jsp.jstl.fmt.LocaleSupport" %> + +<% + String token = request.getParameter("token"); + + String handle = (String) request.getAttribute("handle"); + if (handle == null) + handle = ""; + + String title = (String) request.getAttribute("title"); + if (title == null) + title = ""; + + String requestName = (String) request.getAttribute("request-name"); + if (requestName == null) + requestName = ""; + +%> + +<dspace:layout locbar="off" navbar="default" titlekey="jsp.request.item.request-information.title" > +<h2><fmt:message key="jsp.request.item.request-information.info1" /></h2> +<p><fmt:message key="jsp.request.item.request-information.info2"> +<fmt:param><a href="<%=request.getContextPath()%>/handle/<%=handle %>"><%=title %></a></fmt:param> +<fmt:param><%=requestName %></a></fmt:param> +</fmt:message></p> +<p class="alert alert-info"><fmt:message key="jsp.request.item.request-information.note" /></p> +<form name="form1" action="<%= request.getContextPath() %>/request-item" method="post"> + <input type="hidden" name="token" value='<%= token %>' /> + <input type="hidden" name="step" value='<%=RequestItemServlet.APROVE_TOKEN %>' /> + <div class="text-center"> + <input class="btn btn-danger" type="submit" name="submit_no" value="<fmt:message key="jsp.request.item.request-information.no"/>" /> + <input class="btn btn-success" type="submit" name="submit_yes" value="<fmt:message key="jsp.request.item.request-information.yes"/>" /> + </div> + </div> +</form> + +</dspace:layout> diff --git a/dspace-jspui/src/main/webapp/requestItem/request-letter.jsp b/dspace-jspui/src/main/webapp/requestItem/request-letter.jsp new file mode 100644 index 0000000..ed60788 --- /dev/null +++ b/dspace-jspui/src/main/webapp/requestItem/request-letter.jsp @@ -0,0 +1,72 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - request-information JSP + - + - Attributes: + - requestItem.problem - if present, report that all fields weren't filled out + - authenticated.email - email of authenticated user, if any + - handle - URL of handle item + --%> + +<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> + +<%@ page import="org.dspace.app.webui.servlet.RequestItemServlet"%> +<%@ page import="javax.servlet.jsp.jstl.fmt.LocaleSupport" %> + +<% + String token = request.getParameter("token"); + + String subject = (String) request.getAttribute("subject"); + if (subject == null) + subject = ""; + + String message = (String) request.getAttribute("message"); + if (message == null) + message = ""; + + boolean resp = (Boolean) request.getAttribute("response"); +%> + +<dspace:layout locbar="off" navbar="default" titlekey="jsp.request.item.request-letter.title" > + +<% if(resp) { %> + <h2><fmt:message key="jsp.request.item.request-letter.accept.heading" /></h2> + <p><fmt:message key="jsp.request.item.request-letter.accept.info" /></p> +<% } else { %> + <h2><fmt:message key="jsp.request.item.request-letter.reject.heading" /></h2> + <p><fmt:message key="jsp.request.item.request-letter.reject.info" /></p> +<% } %> + <form name="form1" action="<%= request.getContextPath() %>/request-item" method="post" class="form-horizontal"> + <input type="hidden" name="token" value='<%= token %>' /> + <input type="hidden" name="accept_request" value="<%= resp %>" /> + <input type="hidden" name="step" value="<%=RequestItemServlet.RESUME_REQUEST %>" /> + <div class="form-group"> + <label for="subject" class="control-label col-md-2"><fmt:message key="jsp.request.item.request-letter.subject"/></label> + <div class="col-md-10"> + <input type="text" class="form-control" name="subject" value='<%= subject %>' /> + </div> + </div> + <div class="form-group"> + <label for="message" class="control-label col-md-2"><fmt:message key="jsp.request.item.request-letter.message"/></label> + <div class="col-md-10"> + <textarea class="form-control" name="message" rows="20" cols="100"><%= message %></textarea> + </div> + </div> + <div class="btn btn-group col-md-4 pull-right row"> + <input type="submit" name="submit_back" class="btn btn-default col-md-6" value="<fmt:message key="jsp.request.item.request-letter.back"/>" > + <input type="submit" class="btn btn-<%= resp?"success":"reject" %> col-md-6" name="submit_next" value="<fmt:message key="jsp.request.item.request-letter.next"/>" > + </div> + </form> + +</dspace:layout> diff --git a/dspace-jspui/src/main/webapp/requestItem/request-send.jsp b/dspace-jspui/src/main/webapp/requestItem/request-send.jsp new file mode 100644 index 0000000..ebb69b8 --- /dev/null +++ b/dspace-jspui/src/main/webapp/requestItem/request-send.jsp @@ -0,0 +1,26 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - request-item received OK acknowledgement + --%> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> + +<dspace:layout locbar="off" navbar="default" titlekey="jsp.request.item.request-send.title"> + + <h2><fmt:message key="jsp.request.item.request-send.info1"/></h2> + + <p><fmt:message key="jsp.request.item.request-send.info2"/> + <a href="<%= request.getContextPath() %>/handle/${handle}"><fmt:message key="jsp.request.item.return-item"/></a></p> + +</dspace:layout> \ No newline at end of file diff --git a/dspace-jspui/src/main/webapp/requestItem/response-send.jsp b/dspace-jspui/src/main/webapp/requestItem/response-send.jsp new file mode 100644 index 0000000..bc7bcc3 --- /dev/null +++ b/dspace-jspui/src/main/webapp/requestItem/response-send.jsp @@ -0,0 +1,33 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - response-send received OK acknowledgement + --%> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> + +<style type="text/css"> +<!-- +.style1 {color: #0000AE} +--> +</style> + + +<dspace:layout locbar="off" navbar="default" titlekey="jsp.request.item.response-send.title"> + + <h1><fmt:message key="jsp.request.item.response-send.info1"/></h1> + + <p><fmt:message key="jsp.request.item.response-send.info2"/> + <a href="<%= request.getContextPath() %>/handle/${handle}"><fmt:message key="jsp.request.item.return-item"/></a></p> + +</dspace:layout> diff --git a/dspace-jspui/src/main/webapp/sherpa/css/sherpa.css b/dspace-jspui/src/main/webapp/sherpa/css/sherpa.css new file mode 100644 index 0000000..fd3d214 --- /dev/null +++ b/dspace-jspui/src/main/webapp/sherpa/css/sherpa.css @@ -0,0 +1,40 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +.sherpaDisclaimer {font-size: 80%; color: #4770AD; } +p.sherpaDisclaimer img {margin: 15px;} + +.sherpaTools { + display: none; +} +div.policy div p img {margin: 10px;display: inline-block;} +.greenRomeoPublisher {background-color: #D0F9D2; } +.blueRomeoPublisher {background-color: #D3ECFA;} +.yellowRomeoPublisher {background-color: #FFFFDF;} +.whiteRomeoPublisher {background-color: #FFFFFF;} +.grayRomeoPublisher {background-color: #F5F5F5;} + +.RomeoPublisher .header, .RomeoPublisher .header a {color: black; } +.greenRomeoPublisher .header, .greenRomeoPublisher .header a {background-color: green; color: white; } +.blueRomeoPublisher .header, .blueRomeoPublisher .header a {background-color: blue; color: white;} +.yellowRomeoPublisher .header,.yellowRomeoPublisher .header a {background-color: yellow; color: black;} +.whiteRomeoPublisher .header, .whiteRomeoPublisher .header a {background-color: white; color: black;} +.grayRomeoPublisher .header, .grayRomeoPublisher .header a {background-color: grey; color:white;} + +.sherpaBox img { + float: left; + margin: 10px; +} + +.sherpaBox .policy img { + float: none; + margin: 2px; +} + +table.romeoColour { + padding: 5px; +} \ No newline at end of file diff --git a/dspace-jspui/src/main/webapp/sherpa/image/ajax-loader-big.gif b/dspace-jspui/src/main/webapp/sherpa/image/ajax-loader-big.gif new file mode 100644 index 0000000000000000000000000000000000000000..8f5bd01a73cc310e583a4e8a841d60e33d73419d GIT binary patch literal 8238 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 E05<KxIRF3v literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/sherpa/image/can.gif b/dspace-jspui/src/main/webapp/sherpa/image/can.gif new file mode 100644 index 0000000000000000000000000000000000000000..2df36dccb86fe276372f4c291b08c9cd76223296 GIT binary patch literal 188 zcmZ?wbhEHblw^=(*v!Dd(7<ru&H=4@2Cey_q4PsS_lMSl(5hAYSFO6g>dO894D}5E ze}6b|-~a;{DE?$&WMJTB&;jv4W;n29ZaC?goqF`u$!Xu2oCWWT%RJq*_VU4fITM%; z-k!?hbFLu&?fg0XFART3HB7nq$+AP`NNa(z_f)p?%0f%tGA(xxSyd*oMCjI&(C!Uo lN7b};GJQ|c?%Jv%8ufIoCWl>UUM#O>c@(3ko~<B*H2^TdOs@a{ literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/sherpa/image/cannot.gif b/dspace-jspui/src/main/webapp/sherpa/image/cannot.gif new file mode 100644 index 0000000000000000000000000000000000000000..d62ceca087f17c8568b5305fc6a9ccb71b19d3af GIT binary patch literal 953 zcmZ?wbhEHblw^=(_|CxapMl}OnAm>>h5y>x|IN()J2?FJ_WmCl`adDze|Gl&($fD8 z4gb5l|4*Izf5C$Pt5*Hry7m8o1OHE*`hWH6{|68Lzk2om|9^&2Fd70wGXxZWvM@3* zh%xAZoDa$q4jj`MbU9=^HY_;UEXKnSvBRLDm5oQ)%OPW-(~)i-&VV~7HZC~Y%FP$X zabUwCw;mq<MI{~u3~pV*3?)k{E;@Qo;o#GAkerx$e1?W^UP#BpL+<kw+1*48CNI9Q zj7?FeC2K;;sV4R~sVi9rRZlUo8>T(=y7<a#m4>E+ZC4SKJC{wMRE3wwQ^ut>oQrHY Rwm&(@$$cegtAGH5H2_WgYia-h literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/sherpa/image/restricted.gif b/dspace-jspui/src/main/webapp/sherpa/image/restricted.gif new file mode 100644 index 0000000000000000000000000000000000000000..07b2ed744a9f5e6dd179d9bcfa37dd56df6a564b GIT binary patch literal 542 zcmZ?wbhEHblw^=(c;><I=g*&i|NgbNxBvY4^YiD=fB*j7ym|BQ-@l(ddp3La?B?d? z1q&AJ*s<gJ^XHQ%PyY4m*N-1R)~{dx<;$0^U%z&Dcel2-zIgHC$&)8{?%b)VshKrv z*0gEU{{R2q+1WW~&YU%C)?B}S{n4XGPoF-WF=NJt4I3s-oH${^ggtxq%$+-T+qP{F zA3khsY<&Oz{mz{`j~qF2;>3x^j~~yQH}ClI<42Dk-Lz@b-Me?MUcI_v#fsIdSFc>T z^7ZT2r%s*v{{4GXQ`7eC+s~alw{+>!3l}cjyLa#6#f#IYPk;ON?UgH68X6k@|NqZ0 z6oBGS7DfgJ4+b5OV?lAkz+T<p(bU}1+UCKdB-7s0#wN+c(L1@x-CfddN{`?)_gTH1 z)0F2=mR-_n;;_7(Z5rq5*17Jw8=82ur)_OzlHMh^tA)#5#Qp%^rUOQ{)3|4`^@@nj xpT?x#B(=e1la!h}m)>&GO^+>>b3dNDmFY3xF4YqUG^Uv!XyWAhdZ3ZP8UV?$+i?H@ literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/sherpa/image/romeosmall.gif b/dspace-jspui/src/main/webapp/sherpa/image/romeosmall.gif new file mode 100644 index 0000000000000000000000000000000000000000..08d175d804fab134f4923dc557de943614340770 GIT binary patch literal 3834 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 W`ExdRBLCA1JQo*CViOc#um%7wApo2J literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/sherpa/image/unclear.gif b/dspace-jspui/src/main/webapp/sherpa/image/unclear.gif new file mode 100644 index 0000000000000000000000000000000000000000..313c1dc4fa7d000a93b5f1dfcadccc5ee11e1623 GIT binary patch literal 889 zcmZ?wbhEHblw^=(_|Cxa9|X?)|3CBp|Fr-AjsO2=_<!dA|1)R)pPBjpOxpi5#{bVS zfFx(0`9E{!|Cwq3XBz*X$pBKDcIJQD%>QX=|I>{Br!j!E8lU-ZJoCSC+J9r?|Hcge z8UFugIP;%j=6{B?{|v_e85lqYgN&Ye=6~9m|HfzjGl1+lbLPyMnP<+VojGHC<_rVK z+L>q0%$#{<X4;vV#%E?SfLxJw=1khmGihmO(u~ifF@PLpeCCYt%rnMmXN--{7&Dw< z_<x4s%o&E6XBg7XFc_a<V3-N=(wUhcN2kpMIg0`01CUKKXM)T!o_U4=<e`~oW`aQ4 z%$deBXEK2Nmv&}m+RT}0X*1J|XQnZLylZ?0Bx#&B)7W^XF~dxT|1%lR%w(83lOb&; zgYirThBQ#vok;_QPFfns{|un80eNX=8pzScX=fNfK?SmSW*W$7<FuI!ppXMe&rAaW z<FqseP(T`=0a<IDmS$|6X3UVr@IQ^=Od7+?G={V^2IDja24hepoiPSQLz*!tpcz1+ z4hp-OAg!R_U;stJ%rnLyFQplS9L)fVle9A+AEc!jgN$YXMUn9tkcU8gV`F0mV}}36 z3}=iPW*Rf388a9gGk_8YC|tqu4Uz;$At;!^u>w*H4roxQgToG_6&xI(NC5i~WD?lX zpg1v}3GxBhCI$wOSquyy)eH;}tNt?#1W^3R!pOjIgFy#mIVevsaD*{z<dpH)u;5@b zJF{j?$A*W8+IggfT09IVxHJl=+fA9V@qt^rpl#cp83ihy6S@4SnXKHj_*A1_d{Xz% jNol^*%!5x|Sy8<F{CrDYroTTXukc^&FnJ#j2ZJ>LzNvAH literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/sherpa/sherpa-policy.jsp b/dspace-jspui/src/main/webapp/sherpa/sherpa-policy.jsp new file mode 100644 index 0000000..1ce2dea --- /dev/null +++ b/dspace-jspui/src/main/webapp/sherpa/sherpa-policy.jsp @@ -0,0 +1,136 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" + prefix="fmt" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<fmt:message key="jsp.sherpa.heading"> + <fmt:param value="<%=request.getContextPath()%>" /> +</fmt:message> +<c:choose> +<c:when test="${error}"> + <fmt:message key="jsp.sherpa.error" /> +</c:when> +<c:otherwise> + <c:choose> + <c:when test="${empty result or fn:length(result) == 0}"> + <fmt:message key="jsp.sherpa.noresult" /> + </c:when> + <c:otherwise> + <c:choose> + <c:when test="${fn:length(result) == 1}"> + <fmt:message key="jsp.sherpa.oneresult" /> + </c:when> + <c:otherwise> + <fmt:message key="jsp.sherpa.moreresults" /> + </c:otherwise> + </c:choose> + + <c:forEach var="r" items="${result}"> + <div class="${r[1].romeocolour}RomeoPublisher row"> + <div class="header container"> + <fmt:message key="jsp.sherpa.jornaltitle"> + <fmt:param value="${r[0].title}" /> + </fmt:message> + <fmt:message key="jsp.sherpa.jornalissn"> + <fmt:param value="${r[0].issn}" /> + </fmt:message> + <c:choose> + <c:when test="${empty r[1]}"> + <fmt:message key="jsp.sherpa.publisher.unknow" /> + </c:when> + <c:when test="${empty r[0].romeopub}"> + <fmt:message key="jsp.sherpa.publisher.onlyname"> + <fmt:param value="${r[0].romeopub}" /> + </fmt:message> + </c:when> + <c:otherwise> + <fmt:message key="jsp.sherpa.publisher"> + <fmt:param value="${r[1].name}" /> + <fmt:param value="${r[1].homeurl}" /> + </fmt:message> + </c:otherwise> + </c:choose> + </div> + <div class="policy container"> + <c:choose> + <c:when test="${empty r[1]}"> + <fmt:message key="jsp.sherpa.publisher.nodata" /> + </c:when> + <c:otherwise> + <div class="sherpaPre"> + <fmt:message key="jsp.sherpa.pre-print.${r[1].prearchiving}"> + <fmt:param value="<%=request.getContextPath()%>" /> + </fmt:message> + <c:if test="${r[1].prearchiving eq 'restricted'}"> + <ul><c:forEach var="cond" items="${r[1].prerestriction}"><li>${cond}</li></c:forEach></ul> + </c:if> + </div> + + <div class="sherpaPost"> + <fmt:message key="jsp.sherpa.post-print.${r[1].postarchiving}"> + <fmt:param value="<%=request.getContextPath()%>" /> + </fmt:message> + <c:if test="${r[1].postarchiving eq 'restricted'}"> + <ul><c:forEach var="cond" items="${r[1].postrestriction}"><li>${cond}</li></c:forEach></ul> + </c:if> + </div> + + <div class="sherpaPub"> + <fmt:message key="jsp.sherpa.publisher-version.${r[1].pubarchiving}"> + <fmt:param value="<%=request.getContextPath()%>" /> + </fmt:message> + <c:if test="${r[1].pubarchiving eq 'restricted'}"> + <ul><c:forEach var="cond" items="${r[1].pubrestriction}"><li>${cond}</li></c:forEach></ul> + </c:if> + </div> + + <div class="sherpaConditions"> + <fmt:message key="jsp.sherpa.generalconditions" /> + <ul><c:forEach var="cond" items="${r[1].condition}"><li>${cond}</li></c:forEach></ul> + </div> + + <div class="sherpaPaid"> + <fmt:message key="jsp.sherpa.paidoption"> + <fmt:param value="${r[1].paidaccessname}" /> + <fmt:param value="${r[1].paidaccessurl}" /> + <c:choose> + <c:when test="${!empty r[1].paidaccessnotes}"> + <fmt:param value="${r[1].paidaccessnotes}" /> + </c:when> + <c:otherwise> + <fmt:param value="" /> + </c:otherwise> + </c:choose> + </fmt:message> + </div> + + <div class="sherpaCopyright"> + <fmt:message key="jsp.sherpa.copyright" /> + <ul><c:forEach var="copyright" items="${r[1].copyright}"><li><a href="${copyright[1]}" target="_blank">${copyright[0]}</a></li></c:forEach></ul> + </div> + + <div class="sherpaColor"> + <fmt:message key="jsp.sherpa.publisher.romeocolour"> + <fmt:param value="${r[1].romeocolour}" /> + </fmt:message> + </div> + </c:otherwise> + </c:choose> + </div> + <fmt:message key="jsp.sherpa.legend" /> + </div> + </c:forEach> + </c:otherwise> + </c:choose> +</c:otherwise> +</c:choose> \ No newline at end of file diff --git a/dspace-jspui/src/main/webapp/static/css/bootstrap/bootstrap-theme.css b/dspace-jspui/src/main/webapp/static/css/bootstrap/bootstrap-theme.css new file mode 100644 index 0000000..ad11735 --- /dev/null +++ b/dspace-jspui/src/main/webapp/static/css/bootstrap/bootstrap-theme.css @@ -0,0 +1,384 @@ +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.btn-default:active, +.btn-primary:active, +.btn-success:active, +.btn-info:active, +.btn-warning:active, +.btn-danger:active, +.btn-default.active, +.btn-primary.active, +.btn-success.active, +.btn-info.active, +.btn-warning.active, +.btn-danger.active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} + +.btn:active, +.btn.active { + background-image: none; +} + +.btn-default { + text-shadow: 0 1px 0 #fff; + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, 0%, #e6e6e6, 100%); + background-image: -moz-linear-gradient(top, #ffffff 0%, #e6e6e6 100%); + background-image: linear-gradient(to bottom, #ffffff 0%, #e6e6e6 100%); + background-repeat: repeat-x; + border-color: #e0e0e0; + border-color: #ccc; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); +} + +.btn-default:active, +.btn-default.active { + background-color: #e6e6e6; + border-color: #e0e0e0; +} + +.btn-primary { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9)); + background-image: -webkit-linear-gradient(top, #428bca, 0%, #3071a9, 100%); + background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); + background-repeat: repeat-x; + border-color: #2d6ca2; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); +} + +.btn-primary:active, +.btn-primary.active { + background-color: #3071a9; + border-color: #2d6ca2; +} + +.btn-success { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44)); + background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #449d44, 100%); + background-image: -moz-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + background-repeat: repeat-x; + border-color: #419641; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); +} + +.btn-success:active, +.btn-success.active { + background-color: #449d44; + border-color: #419641; +} + +.btn-warning { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f)); + background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #ec971f, 100%); + background-image: -moz-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + background-repeat: repeat-x; + border-color: #eb9316; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); +} + +.btn-warning:active, +.btn-warning.active { + background-color: #ec971f; + border-color: #eb9316; +} + +.btn-danger { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c)); + background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c9302c, 100%); + background-image: -moz-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + background-repeat: repeat-x; + border-color: #c12e2a; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); +} + +.btn-danger:active, +.btn-danger.active { + background-color: #c9302c; + border-color: #c12e2a; +} + +.btn-info { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5)); + background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #31b0d5, 100%); + background-image: -moz-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + background-repeat: repeat-x; + border-color: #2aabd2; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); +} + +.btn-info:active, +.btn-info.active { + background-color: #31b0d5; + border-color: #2aabd2; +} + +.thumbnail, +.img-thumbnail { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); +} + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus, +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + background-color: #357ebd; + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd)); + background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%); + background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); +} + +.navbar { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#f8f8f8)); + background-image: -webkit-linear-gradient(top, #ffffff, 0%, #f8f8f8, 100%); + background-image: -moz-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); + background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%); + background-repeat: repeat-x; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); +} + +.navbar .navbar-nav > .active > a { + background-color: #f8f8f8; +} + +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); +} + +.navbar-inverse { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#3c3c3c), to(#222222)); + background-image: -webkit-linear-gradient(top, #3c3c3c, 0%, #222222, 100%); + background-image: -moz-linear-gradient(top, #3c3c3c 0%, #222222 100%); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); +} + +.navbar-inverse .navbar-nav > .active > a { + background-color: #222222; +} + +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.navbar-static-top, +.navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; +} + +.alert { + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.alert-success { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#c8e5bc)); + background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #c8e5bc, 100%); + background-image: -moz-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + background-repeat: repeat-x; + border-color: #b2dba1; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); +} + +.alert-info { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#b9def0)); + background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #b9def0, 100%); + background-image: -moz-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + background-repeat: repeat-x; + border-color: #9acfea; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); +} + +.alert-warning { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#f8efc0)); + background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #f8efc0, 100%); + background-image: -moz-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + background-repeat: repeat-x; + border-color: #f5e79e; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); +} + +.alert-danger { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#e7c3c3)); + background-image: -webkit-linear-gradient(top, #f2dede, 0%, #e7c3c3, 100%); + background-image: -moz-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + background-repeat: repeat-x; + border-color: #dca7a7; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); +} + +.progress { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ebebeb), to(#f5f5f5)); + background-image: -webkit-linear-gradient(top, #ebebeb, 0%, #f5f5f5, 100%); + background-image: -moz-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); +} + +.progress-bar { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9)); + background-image: -webkit-linear-gradient(top, #428bca, 0%, #3071a9, 100%); + background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); +} + +.progress-bar-success { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44)); + background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #449d44, 100%); + background-image: -moz-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); +} + +.progress-bar-info { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5)); + background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #31b0d5, 100%); + background-image: -moz-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); +} + +.progress-bar-warning { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f)); + background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #ec971f, 100%); + background-image: -moz-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); +} + +.progress-bar-danger { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c)); + background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c9302c, 100%); + background-image: -moz-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); +} + +.list-group { + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); +} + +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + text-shadow: 0 -1px 0 #3071a9; + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3278b3)); + background-image: -webkit-linear-gradient(top, #428bca, 0%, #3278b3, 100%); + background-image: -moz-linear-gradient(top, #428bca 0%, #3278b3 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); + background-repeat: repeat-x; + border-color: #3278b3; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); +} + +.panel { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.panel-default > .panel-heading { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f5f5f5), to(#e8e8e8)); + background-image: -webkit-linear-gradient(top, #f5f5f5, 0%, #e8e8e8, 100%); + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); +} + +.panel-primary > .panel-heading { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd)); + background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%); + background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); +} + +.panel-success > .panel-heading { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#d0e9c6)); + background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #d0e9c6, 100%); + background-image: -moz-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); +} + +.panel-info > .panel-heading { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#c4e3f3)); + background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #c4e3f3, 100%); + background-image: -moz-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); +} + +.panel-warning > .panel-heading { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#faf2cc)); + background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #faf2cc, 100%); + background-image: -moz-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); +} + +.panel-danger > .panel-heading { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#ebcccc)); + background-image: -webkit-linear-gradient(top, #f2dede, 0%, #ebcccc, 100%); + background-image: -moz-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); +} + +.well { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#e8e8e8), to(#f5f5f5)); + background-image: -webkit-linear-gradient(top, #e8e8e8, 0%, #f5f5f5, 100%); + background-image: -moz-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + background-repeat: repeat-x; + border-color: #dcdcdc; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); +} \ No newline at end of file diff --git a/dspace-jspui/src/main/webapp/static/css/bootstrap/bootstrap-theme.min.css b/dspace-jspui/src/main/webapp/static/css/bootstrap/bootstrap-theme.min.css new file mode 100644 index 0000000..cad36b4 --- /dev/null +++ b/dspace-jspui/src/main/webapp/static/css/bootstrap/bootstrap-theme.min.css @@ -0,0 +1 @@ +.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left 0,left 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,0%,#e6e6e6,100%);background-image:-moz-linear-gradient(top,#fff 0,#e6e6e6 100%);background-image:linear-gradient(to bottom,#fff 0,#e6e6e6 100%);background-repeat:repeat-x;border-color:#e0e0e0;border-color:#ccc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0)}.btn-default:active,.btn-default.active{background-color:#e6e6e6;border-color:#e0e0e0}.btn-primary{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3071a9));background-image:-webkit-linear-gradient(top,#428bca,0%,#3071a9,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;border-color:#2d6ca2;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3071a9',GradientType=0)}.btn-primary:active,.btn-primary.active{background-color:#3071a9;border-color:#2d6ca2}.btn-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5cb85c),to(#449d44));background-image:-webkit-linear-gradient(top,#5cb85c,0%,#449d44,100%);background-image:-moz-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;border-color:#419641;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff449d44',GradientType=0)}.btn-success:active,.btn-success.active{background-color:#449d44;border-color:#419641}.btn-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f0ad4e),to(#ec971f));background-image:-webkit-linear-gradient(top,#f0ad4e,0%,#ec971f,100%);background-image:-moz-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;border-color:#eb9316;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffec971f',GradientType=0)}.btn-warning:active,.btn-warning.active{background-color:#ec971f;border-color:#eb9316}.btn-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9534f),to(#c9302c));background-image:-webkit-linear-gradient(top,#d9534f,0%,#c9302c,100%);background-image:-moz-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;border-color:#c12e2a;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc9302c',GradientType=0)}.btn-danger:active,.btn-danger.active{background-color:#c9302c;border-color:#c12e2a}.btn-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5bc0de),to(#31b0d5));background-image:-webkit-linear-gradient(top,#5bc0de,0%,#31b0d5,100%);background-image:-moz-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;border-color:#2aabd2;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff31b0d5',GradientType=0)}.btn-info:active,.btn-info.active{background-color:#31b0d5;border-color:#2aabd2}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#357ebd;background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#357ebd));background-image:-webkit-linear-gradient(top,#428bca,0%,#357ebd,100%);background-image:-moz-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.navbar{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fff),to(#f8f8f8));background-image:-webkit-linear-gradient(top,#fff,0%,#f8f8f8,100%);background-image:-moz-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff8f8f8',GradientType=0);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075)}.navbar .navbar-nav>.active>a{background-color:#f8f8f8}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,0.25)}.navbar-inverse{background-image:-webkit-gradient(linear,left 0,left 100%,from(#3c3c3c),to(#222));background-image:-webkit-linear-gradient(top,#3c3c3c,0%,#222,100%);background-image:-moz-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c',endColorstr='#ff222222',GradientType=0)}.navbar-inverse .navbar-nav>.active>a{background-color:#222}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05)}.alert-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#dff0d8),to(#c8e5bc));background-image:-webkit-linear-gradient(top,#dff0d8,0%,#c8e5bc,100%);background-image:-moz-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);background-repeat:repeat-x;border-color:#b2dba1;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffc8e5bc',GradientType=0)}.alert-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9edf7),to(#b9def0));background-image:-webkit-linear-gradient(top,#d9edf7,0%,#b9def0,100%);background-image:-moz-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;border-color:#9acfea;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffb9def0',GradientType=0)}.alert-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fcf8e3),to(#f8efc0));background-image:-webkit-linear-gradient(top,#fcf8e3,0%,#f8efc0,100%);background-image:-moz-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);background-repeat:repeat-x;border-color:#f5e79e;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fff8efc0',GradientType=0)}.alert-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f2dede),to(#e7c3c3));background-image:-webkit-linear-gradient(top,#f2dede,0%,#e7c3c3,100%);background-image:-moz-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);background-repeat:repeat-x;border-color:#dca7a7;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffe7c3c3',GradientType=0)}.progress{background-image:-webkit-gradient(linear,left 0,left 100%,from(#ebebeb),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#ebebeb,0%,#f5f5f5,100%);background-image:-moz-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb',endColorstr='#fff5f5f5',GradientType=0)}.progress-bar{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3071a9));background-image:-webkit-linear-gradient(top,#428bca,0%,#3071a9,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3071a9',GradientType=0)}.progress-bar-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5cb85c),to(#449d44));background-image:-webkit-linear-gradient(top,#5cb85c,0%,#449d44,100%);background-image:-moz-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff449d44',GradientType=0)}.progress-bar-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5bc0de),to(#31b0d5));background-image:-webkit-linear-gradient(top,#5bc0de,0%,#31b0d5,100%);background-image:-moz-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff31b0d5',GradientType=0)}.progress-bar-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f0ad4e),to(#ec971f));background-image:-webkit-linear-gradient(top,#f0ad4e,0%,#ec971f,100%);background-image:-moz-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffec971f',GradientType=0)}.progress-bar-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9534f),to(#c9302c));background-image:-webkit-linear-gradient(top,#d9534f,0%,#c9302c,100%);background-image:-moz-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc9302c',GradientType=0)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3278b3));background-image:-webkit-linear-gradient(top,#428bca,0%,#3278b3,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;border-color:#3278b3;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3278b3',GradientType=0)}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.panel-default>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f5f5f5),to(#e8e8e8));background-image:-webkit-linear-gradient(top,#f5f5f5,0%,#e8e8e8,100%);background-image:-moz-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#ffe8e8e8',GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#357ebd));background-image:-webkit-linear-gradient(top,#428bca,0%,#357ebd,100%);background-image:-moz-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#dff0d8),to(#d0e9c6));background-image:-webkit-linear-gradient(top,#dff0d8,0%,#d0e9c6,100%);background-image:-moz-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffd0e9c6',GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9edf7),to(#c4e3f3));background-image:-webkit-linear-gradient(top,#d9edf7,0%,#c4e3f3,100%);background-image:-moz-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffc4e3f3',GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fcf8e3),to(#faf2cc));background-image:-webkit-linear-gradient(top,#fcf8e3,0%,#faf2cc,100%);background-image:-moz-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fffaf2cc',GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f2dede),to(#ebcccc));background-image:-webkit-linear-gradient(top,#f2dede,0%,#ebcccc,100%);background-image:-moz-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffebcccc',GradientType=0)}.well{background-image:-webkit-gradient(linear,left 0,left 100%,from(#e8e8e8),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#e8e8e8,0%,#f5f5f5,100%);background-image:-moz-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;border-color:#dcdcdc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8',endColorstr='#fff5f5f5',GradientType=0);-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1)} \ No newline at end of file diff --git a/dspace-jspui/src/main/webapp/static/css/bootstrap/bootstrap.css b/dspace-jspui/src/main/webapp/static/css/bootstrap/bootstrap.css new file mode 100644 index 0000000..bbda4ee --- /dev/null +++ b/dspace-jspui/src/main/webapp/static/css/bootstrap/bootstrap.css @@ -0,0 +1,6805 @@ +/*! + * Bootstrap v3.0.0 + * + * Copyright 2013 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + */ + +/*! normalize.css v2.1.0 | MIT License | git.io/normalize */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +audio, +canvas, +video { + display: inline-block; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +[hidden] { + display: none; +} + +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +body { + margin: 0; +} + +a:focus { + outline: thin dotted; +} + +a:active, +a:hover { + outline: 0; +} + +h1 { + margin: 0.67em 0; + font-size: 2em; +} + +abbr[title] { + border-bottom: 1px dotted; +} + +b, +strong { + font-weight: bold; +} + +dfn { + font-style: italic; +} + +hr { + height: 0; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +mark { + color: #000; + background: #ff0; +} + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 1em; +} + +pre { + white-space: pre-wrap; +} + +q { + quotes: "\201C" "\201D" "\2018" "\2019"; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + border: 0; +} + +svg:not(:root) { + overflow: hidden; +} + +figure { + margin: 0; +} + +fieldset { + padding: 0.35em 0.625em 0.75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} + +legend { + padding: 0; + border: 0; +} + +button, +input, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: 100%; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +button[disabled], +html input[disabled] { + cursor: default; +} + +input[type="checkbox"], +input[type="radio"] { + padding: 0; + box-sizing: border-box; +} + +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +@media print { + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + @page { + margin: 2cm .5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .table td, + .table th { + background-color: #fff !important; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} + +*, +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +html { + font-size: 62.5%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.428571429; + color: #333333; + background-color: #ffffff; +} + +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +input, +select[multiple], +textarea { + background-image: none; +} + +a { + color: #428bca; + text-decoration: none; +} + +a:hover, +a:focus { + color: #2a6496; + text-decoration: underline; +} + +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +img { + vertical-align: middle; +} + +.img-responsive { + display: block; + height: auto; + max-width: 100%; +} + +.img-rounded { + border-radius: 6px; +} + +.img-thumbnail { + display: inline-block; + height: auto; + max-width: 100%; + padding: 4px; + line-height: 1.428571429; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +.img-circle { + border-radius: 50%; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eeeeee; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0 0 0 0); + border: 0; +} + +p { + margin: 0 0 10px; +} + +.lead { + margin-bottom: 20px; + font-size: 16.099999999999998px; + font-weight: 200; + line-height: 1.4; +} + +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} + +small { + font-size: 85%; +} + +cite { + font-style: normal; +} + +.text-muted { + color: #999999; +} + +.text-primary { + color: #428bca; +} + +.text-warning { + color: #c09853; +} + +.text-danger { + color: #b94a48; +} + +.text-success { + color: #468847; +} + +.text-info { + color: #3a87ad; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-weight: 500; + line-height: 1.1; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small { + font-weight: normal; + line-height: 1; + color: #999999; +} + +h1, +h2, +h3 { + margin-top: 20px; + margin-bottom: 10px; +} + +h4, +h5, +h6 { + margin-top: 10px; + margin-bottom: 10px; +} + +h1, +.h1 { + font-size: 36px; +} + +h2, +.h2 { + font-size: 30px; +} + +h3, +.h3 { + font-size: 24px; +} + +h4, +.h4 { + font-size: 18px; +} + +h5, +.h5 { + font-size: 14px; +} + +h6, +.h6 { + font-size: 12px; +} + +h1 small, +.h1 small { + font-size: 24px; +} + +h2 small, +.h2 small { + font-size: 18px; +} + +h3 small, +.h3 small, +h4 small, +.h4 small { + font-size: 14px; +} + +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eeeeee; +} + +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} + +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} + +dl { + margin-bottom: 20px; +} + +dt, +dd { + line-height: 1.428571429; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 0; +} + +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } + .dl-horizontal dd:before, + .dl-horizontal dd:after { + display: table; + content: " "; + } + .dl-horizontal dd:after { + clear: both; + } + .dl-horizontal dd:before, + .dl-horizontal dd:after { + display: table; + content: " "; + } + .dl-horizontal dd:after { + clear: both; + } +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; +} + +blockquote p { + font-size: 17.5px; + font-weight: 300; + line-height: 1.25; +} + +blockquote p:last-child { + margin-bottom: 0; +} + +blockquote small { + display: block; + line-height: 1.428571429; + color: #999999; +} + +blockquote small:before { + content: '\2014 \00A0'; +} + +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; +} + +blockquote.pull-right p, +blockquote.pull-right small { + text-align: right; +} + +blockquote.pull-right small:before { + content: ''; +} + +blockquote.pull-right small:after { + content: '\00A0 \2014'; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +address { + display: block; + margin-bottom: 20px; + font-style: normal; + line-height: 1.428571429; +} + +code, +pre { + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; +} + +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + white-space: nowrap; + background-color: #f9f2f4; + border-radius: 4px; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.428571429; + color: #333333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #cccccc; + border-radius: 4px; +} + +pre.prettyprint { + margin-bottom: 20px; +} + +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +.container:before, +.container:after { + display: table; + content: " "; +} + +.container:after { + clear: both; +} + +.container:before, +.container:after { + display: table; + content: " "; +} + +.container:after { + clear: both; +} + +.row { + margin-right: -15px; + margin-left: -15px; +} + +.row:before, +.row:after { + display: table; + content: " "; +} + +.row:after { + clear: both; +} + +.row:before, +.row:after { + display: table; + content: " "; +} + +.row:after { + clear: both; +} + +.col-xs-1, +.col-xs-2, +.col-xs-3, +.col-xs-4, +.col-xs-5, +.col-xs-6, +.col-xs-7, +.col-xs-8, +.col-xs-9, +.col-xs-10, +.col-xs-11, +.col-xs-12, +.col-sm-1, +.col-sm-2, +.col-sm-3, +.col-sm-4, +.col-sm-5, +.col-sm-6, +.col-sm-7, +.col-sm-8, +.col-sm-9, +.col-sm-10, +.col-sm-11, +.col-sm-12, +.col-md-1, +.col-md-2, +.col-md-3, +.col-md-4, +.col-md-5, +.col-md-6, +.col-md-7, +.col-md-8, +.col-md-9, +.col-md-10, +.col-md-11, +.col-md-12, +.col-lg-1, +.col-lg-2, +.col-lg-3, +.col-lg-4, +.col-lg-5, +.col-lg-6, +.col-lg-7, +.col-lg-8, +.col-lg-9, +.col-lg-10, +.col-lg-11, +.col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} + +.col-xs-1, +.col-xs-2, +.col-xs-3, +.col-xs-4, +.col-xs-5, +.col-xs-6, +.col-xs-7, +.col-xs-8, +.col-xs-9, +.col-xs-10, +.col-xs-11 { + float: left; +} + +.col-xs-1 { + width: 8.333333333333332%; +} + +.col-xs-2 { + width: 16.666666666666664%; +} + +.col-xs-3 { + width: 25%; +} + +.col-xs-4 { + width: 33.33333333333333%; +} + +.col-xs-5 { + width: 41.66666666666667%; +} + +.col-xs-6 { + width: 50%; +} + +.col-xs-7 { + width: 58.333333333333336%; +} + +.col-xs-8 { + width: 66.66666666666666%; +} + +.col-xs-9 { + width: 75%; +} + +.col-xs-10 { + width: 83.33333333333334%; +} + +.col-xs-11 { + width: 91.66666666666666%; +} + +.col-xs-12 { + width: 100%; +} + +@media (min-width: 768px) { + .container { + max-width: 750px; + } + .col-sm-1, + .col-sm-2, + .col-sm-3, + .col-sm-4, + .col-sm-5, + .col-sm-6, + .col-sm-7, + .col-sm-8, + .col-sm-9, + .col-sm-10, + .col-sm-11 { + float: left; + } + .col-sm-1 { + width: 8.333333333333332%; + } + .col-sm-2 { + width: 16.666666666666664%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-4 { + width: 33.33333333333333%; + } + .col-sm-5 { + width: 41.66666666666667%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-7 { + width: 58.333333333333336%; + } + .col-sm-8 { + width: 66.66666666666666%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-10 { + width: 83.33333333333334%; + } + .col-sm-11 { + width: 91.66666666666666%; + } + .col-sm-12 { + width: 100%; + } + .col-sm-push-1 { + left: 8.333333333333332%; + } + .col-sm-push-2 { + left: 16.666666666666664%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-4 { + left: 33.33333333333333%; + } + .col-sm-push-5 { + left: 41.66666666666667%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-7 { + left: 58.333333333333336%; + } + .col-sm-push-8 { + left: 66.66666666666666%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-10 { + left: 83.33333333333334%; + } + .col-sm-push-11 { + left: 91.66666666666666%; + } + .col-sm-pull-1 { + right: 8.333333333333332%; + } + .col-sm-pull-2 { + right: 16.666666666666664%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-4 { + right: 33.33333333333333%; + } + .col-sm-pull-5 { + right: 41.66666666666667%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-7 { + right: 58.333333333333336%; + } + .col-sm-pull-8 { + right: 66.66666666666666%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-10 { + right: 83.33333333333334%; + } + .col-sm-pull-11 { + right: 91.66666666666666%; + } + .col-sm-offset-1 { + margin-left: 8.333333333333332%; + } + .col-sm-offset-2 { + margin-left: 16.666666666666664%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-4 { + margin-left: 33.33333333333333%; + } + .col-sm-offset-5 { + margin-left: 41.66666666666667%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-7 { + margin-left: 58.333333333333336%; + } + .col-sm-offset-8 { + margin-left: 66.66666666666666%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-10 { + margin-left: 83.33333333333334%; + } + .col-sm-offset-11 { + margin-left: 91.66666666666666%; + } +} + +@media (min-width: 992px) { + .container { + max-width: 970px; + } + .col-md-1, + .col-md-2, + .col-md-3, + .col-md-4, + .col-md-5, + .col-md-6, + .col-md-7, + .col-md-8, + .col-md-9, + .col-md-10, + .col-md-11 { + float: left; + } + .col-md-1 { + width: 8.333333333333332%; + } + .col-md-2 { + width: 16.666666666666664%; + } + .col-md-3 { + width: 25%; + } + .col-md-4 { + width: 33.33333333333333%; + } + .col-md-5 { + width: 41.66666666666667%; + } + .col-md-6 { + width: 50%; + } + .col-md-7 { + width: 58.333333333333336%; + } + .col-md-8 { + width: 66.66666666666666%; + } + .col-md-9 { + width: 75%; + } + .col-md-10 { + width: 83.33333333333334%; + } + .col-md-11 { + width: 91.66666666666666%; + } + .col-md-12 { + width: 100%; + } + .col-md-push-0 { + left: auto; + } + .col-md-push-1 { + left: 8.333333333333332%; + } + .col-md-push-2 { + left: 16.666666666666664%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-4 { + left: 33.33333333333333%; + } + .col-md-push-5 { + left: 41.66666666666667%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-7 { + left: 58.333333333333336%; + } + .col-md-push-8 { + left: 66.66666666666666%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-10 { + left: 83.33333333333334%; + } + .col-md-push-11 { + left: 91.66666666666666%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-pull-1 { + right: 8.333333333333332%; + } + .col-md-pull-2 { + right: 16.666666666666664%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-4 { + right: 33.33333333333333%; + } + .col-md-pull-5 { + right: 41.66666666666667%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-7 { + right: 58.333333333333336%; + } + .col-md-pull-8 { + right: 66.66666666666666%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-10 { + right: 83.33333333333334%; + } + .col-md-pull-11 { + right: 91.66666666666666%; + } + .col-md-offset-0 { + margin-left: 0; + } + .col-md-offset-1 { + margin-left: 8.333333333333332%; + } + .col-md-offset-2 { + margin-left: 16.666666666666664%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-4 { + margin-left: 33.33333333333333%; + } + .col-md-offset-5 { + margin-left: 41.66666666666667%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-7 { + margin-left: 58.333333333333336%; + } + .col-md-offset-8 { + margin-left: 66.66666666666666%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-10 { + margin-left: 83.33333333333334%; + } + .col-md-offset-11 { + margin-left: 91.66666666666666%; + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1170px; + } + .col-lg-1, + .col-lg-2, + .col-lg-3, + .col-lg-4, + .col-lg-5, + .col-lg-6, + .col-lg-7, + .col-lg-8, + .col-lg-9, + .col-lg-10, + .col-lg-11 { + float: left; + } + .col-lg-1 { + width: 8.333333333333332%; + } + .col-lg-2 { + width: 16.666666666666664%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-4 { + width: 33.33333333333333%; + } + .col-lg-5 { + width: 41.66666666666667%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-7 { + width: 58.333333333333336%; + } + .col-lg-8 { + width: 66.66666666666666%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-10 { + width: 83.33333333333334%; + } + .col-lg-11 { + width: 91.66666666666666%; + } + .col-lg-12 { + width: 100%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-push-1 { + left: 8.333333333333332%; + } + .col-lg-push-2 { + left: 16.666666666666664%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-4 { + left: 33.33333333333333%; + } + .col-lg-push-5 { + left: 41.66666666666667%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-7 { + left: 58.333333333333336%; + } + .col-lg-push-8 { + left: 66.66666666666666%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-10 { + left: 83.33333333333334%; + } + .col-lg-push-11 { + left: 91.66666666666666%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-pull-1 { + right: 8.333333333333332%; + } + .col-lg-pull-2 { + right: 16.666666666666664%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-4 { + right: 33.33333333333333%; + } + .col-lg-pull-5 { + right: 41.66666666666667%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-7 { + right: 58.333333333333336%; + } + .col-lg-pull-8 { + right: 66.66666666666666%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-10 { + right: 83.33333333333334%; + } + .col-lg-pull-11 { + right: 91.66666666666666%; + } + .col-lg-offset-0 { + margin-left: 0; + } + .col-lg-offset-1 { + margin-left: 8.333333333333332%; + } + .col-lg-offset-2 { + margin-left: 16.666666666666664%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-4 { + margin-left: 33.33333333333333%; + } + .col-lg-offset-5 { + margin-left: 41.66666666666667%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-7 { + margin-left: 58.333333333333336%; + } + .col-lg-offset-8 { + margin-left: 66.66666666666666%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-10 { + margin-left: 83.33333333333334%; + } + .col-lg-offset-11 { + margin-left: 91.66666666666666%; + } +} + +table { + max-width: 100%; + background-color: transparent; +} + +th { + text-align: left; +} + +.table { + width: 100%; + margin-bottom: 20px; +} + +.table thead > tr > th, +.table tbody > tr > th, +.table tfoot > tr > th, +.table thead > tr > td, +.table tbody > tr > td, +.table tfoot > tr > td { + padding: 8px; + line-height: 1.428571429; + vertical-align: top; + border-top: 1px solid #dddddd; +} + +.table thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #dddddd; +} + +.table caption + thead tr:first-child th, +.table colgroup + thead tr:first-child th, +.table thead:first-child tr:first-child th, +.table caption + thead tr:first-child td, +.table colgroup + thead tr:first-child td, +.table thead:first-child tr:first-child td { + border-top: 0; +} + +.table tbody + tbody { + border-top: 2px solid #dddddd; +} + +.table .table { + background-color: #ffffff; +} + +.table-condensed thead > tr > th, +.table-condensed tbody > tr > th, +.table-condensed tfoot > tr > th, +.table-condensed thead > tr > td, +.table-condensed tbody > tr > td, +.table-condensed tfoot > tr > td { + padding: 5px; +} + +.table-bordered { + border: 1px solid #dddddd; +} + +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #dddddd; +} + +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} + +.table-striped > tbody > tr:nth-child(odd) > td, +.table-striped > tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +.table-hover > tbody > tr:hover > td, +.table-hover > tbody > tr:hover > th { + background-color: #f5f5f5; +} + +table col[class*="col-"] { + display: table-column; + float: none; +} + +table td[class*="col-"], +table th[class*="col-"] { + display: table-cell; + float: none; +} + +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} + +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td { + background-color: #d0e9c6; + border-color: #c9e2b3; +} + +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; + border-color: #eed3d7; +} + +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td { + background-color: #ebcccc; + border-color: #e6c1c7; +} + +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; + border-color: #fbeed5; +} + +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td { + background-color: #faf2cc; + border-color: #f8e5be; +} + +@media (max-width: 768px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-x: scroll; + overflow-y: hidden; + border: 1px solid #dddddd; + } + .table-responsive > .table { + margin-bottom: 0; + background-color: #fff; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > thead > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > thead > tr:last-child > td, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +label { + display: inline-block; + margin-bottom: 5px; + font-weight: bold; +} + +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + /* IE8-9 */ + + line-height: normal; +} + +input[type="file"] { + display: block; +} + +select[multiple], +select[size] { + height: auto; +} + +select optgroup { + font-family: inherit; + font-size: inherit; + font-style: inherit; +} + +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +input[type="number"]::-webkit-outer-spin-button, +input[type="number"]::-webkit-inner-spin-button { + height: auto; +} + +.form-control:-moz-placeholder { + color: #999999; +} + +.form-control::-moz-placeholder { + color: #999999; +} + +.form-control:-ms-input-placeholder { + color: #999999; +} + +.form-control::-webkit-input-placeholder { + color: #999999; +} + +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.428571429; + color: #555555; + vertical-align: middle; + background-color: #ffffff; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; +} + +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); +} + +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eeeeee; +} + +textarea.form-control { + height: auto; +} + +.form-group { + margin-bottom: 15px; +} + +.radio, +.checkbox { + display: block; + min-height: 20px; + padding-left: 20px; + margin-top: 10px; + margin-bottom: 10px; + vertical-align: middle; +} + +.radio label, +.checkbox label { + display: inline; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} + +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + float: left; + margin-left: -20px; +} + +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} + +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} + +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +.radio[disabled], +.radio-inline[disabled], +.checkbox[disabled], +.checkbox-inline[disabled], +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"], +fieldset[disabled] .radio, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} + +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +select.input-sm { + height: 30px; + line-height: 30px; +} + +textarea.input-sm { + height: auto; +} + +.input-lg { + height: 45px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +select.input-lg { + height: 45px; + line-height: 45px; +} + +textarea.input-lg { + height: auto; +} + +.has-warning .help-block, +.has-warning .control-label { + color: #c09853; +} + +.has-warning .form-control { + border-color: #c09853; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.has-warning .form-control:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; +} + +.has-warning .input-group-addon { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} + +.has-error .help-block, +.has-error .control-label { + color: #b94a48; +} + +.has-error .form-control { + border-color: #b94a48; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.has-error .form-control:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; +} + +.has-error .input-group-addon { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} + +.has-success .help-block, +.has-success .control-label { + color: #468847; +} + +.has-success .form-control { + border-color: #468847; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.has-success .form-control:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; +} + +.has-success .input-group-addon { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} + +.form-control-static { + padding-top: 7px; + margin-bottom: 0; +} + +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} + +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + padding-left: 0; + margin-top: 0; + margin-bottom: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + float: none; + margin-left: 0; + } +} + +.form-horizontal .control-label, +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} + +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} + +.form-horizontal .form-group:before, +.form-horizontal .form-group:after { + display: table; + content: " "; +} + +.form-horizontal .form-group:after { + clear: both; +} + +.form-horizontal .form-group:before, +.form-horizontal .form-group:after { + display: table; + content: " "; +} + +.form-horizontal .form-group:after { + clear: both; +} + +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + } +} + +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.428571429; + text-align: center; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + border: 1px solid transparent; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn:hover, +.btn:focus { + color: #333333; + text-decoration: none; +} + +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} + +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + pointer-events: none; + cursor: not-allowed; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; +} + +.btn-default { + color: #333333; + background-color: #ffffff; + border-color: #cccccc; +} + +.btn-default:hover, +.btn-default:focus, +.btn-default:active, +.btn-default.active, +.open .dropdown-toggle.btn-default { + color: #333333; + background-color: #ebebeb; + border-color: #adadad; +} + +.btn-default:active, +.btn-default.active, +.open .dropdown-toggle.btn-default { + background-image: none; +} + +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #ffffff; + border-color: #cccccc; +} + +.btn-primary { + color: #ffffff; + background-color: #428bca; + border-color: #357ebd; +} + +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.open .dropdown-toggle.btn-primary { + color: #ffffff; + background-color: #3276b1; + border-color: #285e8e; +} + +.btn-primary:active, +.btn-primary.active, +.open .dropdown-toggle.btn-primary { + background-image: none; +} + +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #428bca; + border-color: #357ebd; +} + +.btn-warning { + color: #ffffff; + background-color: #f0ad4e; + border-color: #eea236; +} + +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.open .dropdown-toggle.btn-warning { + color: #ffffff; + background-color: #ed9c28; + border-color: #d58512; +} + +.btn-warning:active, +.btn-warning.active, +.open .dropdown-toggle.btn-warning { + background-image: none; +} + +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} + +.btn-danger { + color: #ffffff; + background-color: #d9534f; + border-color: #d43f3a; +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.open .dropdown-toggle.btn-danger { + color: #ffffff; + background-color: #d2322d; + border-color: #ac2925; +} + +.btn-danger:active, +.btn-danger.active, +.open .dropdown-toggle.btn-danger { + background-image: none; +} + +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} + +.btn-success { + color: #ffffff; + background-color: #5cb85c; + border-color: #4cae4c; +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.open .dropdown-toggle.btn-success { + color: #ffffff; + background-color: #47a447; + border-color: #398439; +} + +.btn-success:active, +.btn-success.active, +.open .dropdown-toggle.btn-success { + background-image: none; +} + +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} + +.btn-info { + color: #ffffff; + background-color: #5bc0de; + border-color: #46b8da; +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.open .dropdown-toggle.btn-info { + color: #ffffff; + background-color: #39b3d7; + border-color: #269abc; +} + +.btn-info:active, +.btn-info.active, +.open .dropdown-toggle.btn-info { + background-image: none; +} + +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} + +.btn-link { + font-weight: normal; + color: #428bca; + cursor: pointer; + border-radius: 0; +} + +.btn-link, +.btn-link:active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} + +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} + +.btn-link:hover, +.btn-link:focus { + color: #2a6496; + text-decoration: underline; + background-color: transparent; +} + +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #999999; + text-decoration: none; +} + +.btn-lg { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +.btn-sm, +.btn-xs { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-xs { + padding: 1px 5px; +} + +.btn-block { + display: block; + width: 100%; + padding-right: 0; + padding-left: 0; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + display: none; +} + +.collapse.in { + display: block; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +@font-face { + font-family: 'Glyphicons Halflings'; + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg'); +} + +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + -webkit-font-smoothing: antialiased; + font-style: normal; + font-weight: normal; + line-height: 1; +} + +.glyphicon-asterisk:before { + content: "\2a"; +} + +.glyphicon-plus:before { + content: "\2b"; +} + +.glyphicon-euro:before { + content: "\20ac"; +} + +.glyphicon-minus:before { + content: "\2212"; +} + +.glyphicon-cloud:before { + content: "\2601"; +} + +.glyphicon-envelope:before { + content: "\2709"; +} + +.glyphicon-pencil:before { + content: "\270f"; +} + +.glyphicon-glass:before { + content: "\e001"; +} + +.glyphicon-music:before { + content: "\e002"; +} + +.glyphicon-search:before { + content: "\e003"; +} + +.glyphicon-heart:before { + content: "\e005"; +} + +.glyphicon-star:before { + content: "\e006"; +} + +.glyphicon-star-empty:before { + content: "\e007"; +} + +.glyphicon-user:before { + content: "\e008"; +} + +.glyphicon-film:before { + content: "\e009"; +} + +.glyphicon-th-large:before { + content: "\e010"; +} + +.glyphicon-th:before { + content: "\e011"; +} + +.glyphicon-th-list:before { + content: "\e012"; +} + +.glyphicon-ok:before { + content: "\e013"; +} + +.glyphicon-remove:before { + content: "\e014"; +} + +.glyphicon-zoom-in:before { + content: "\e015"; +} + +.glyphicon-zoom-out:before { + content: "\e016"; +} + +.glyphicon-off:before { + content: "\e017"; +} + +.glyphicon-signal:before { + content: "\e018"; +} + +.glyphicon-cog:before { + content: "\e019"; +} + +.glyphicon-trash:before { + content: "\e020"; +} + +.glyphicon-home:before { + content: "\e021"; +} + +.glyphicon-file:before { + content: "\e022"; +} + +.glyphicon-time:before { + content: "\e023"; +} + +.glyphicon-road:before { + content: "\e024"; +} + +.glyphicon-download-alt:before { + content: "\e025"; +} + +.glyphicon-download:before { + content: "\e026"; +} + +.glyphicon-upload:before { + content: "\e027"; +} + +.glyphicon-inbox:before { + content: "\e028"; +} + +.glyphicon-play-circle:before { + content: "\e029"; +} + +.glyphicon-repeat:before { + content: "\e030"; +} + +.glyphicon-refresh:before { + content: "\e031"; +} + +.glyphicon-list-alt:before { + content: "\e032"; +} + +.glyphicon-flag:before { + content: "\e034"; +} + +.glyphicon-headphones:before { + content: "\e035"; +} + +.glyphicon-volume-off:before { + content: "\e036"; +} + +.glyphicon-volume-down:before { + content: "\e037"; +} + +.glyphicon-volume-up:before { + content: "\e038"; +} + +.glyphicon-qrcode:before { + content: "\e039"; +} + +.glyphicon-barcode:before { + content: "\e040"; +} + +.glyphicon-tag:before { + content: "\e041"; +} + +.glyphicon-tags:before { + content: "\e042"; +} + +.glyphicon-book:before { + content: "\e043"; +} + +.glyphicon-print:before { + content: "\e045"; +} + +.glyphicon-font:before { + content: "\e047"; +} + +.glyphicon-bold:before { + content: "\e048"; +} + +.glyphicon-italic:before { + content: "\e049"; +} + +.glyphicon-text-height:before { + content: "\e050"; +} + +.glyphicon-text-width:before { + content: "\e051"; +} + +.glyphicon-align-left:before { + content: "\e052"; +} + +.glyphicon-align-center:before { + content: "\e053"; +} + +.glyphicon-align-right:before { + content: "\e054"; +} + +.glyphicon-align-justify:before { + content: "\e055"; +} + +.glyphicon-list:before { + content: "\e056"; +} + +.glyphicon-indent-left:before { + content: "\e057"; +} + +.glyphicon-indent-right:before { + content: "\e058"; +} + +.glyphicon-facetime-video:before { + content: "\e059"; +} + +.glyphicon-picture:before { + content: "\e060"; +} + +.glyphicon-map-marker:before { + content: "\e062"; +} + +.glyphicon-adjust:before { + content: "\e063"; +} + +.glyphicon-tint:before { + content: "\e064"; +} + +.glyphicon-edit:before { + content: "\e065"; +} + +.glyphicon-share:before { + content: "\e066"; +} + +.glyphicon-check:before { + content: "\e067"; +} + +.glyphicon-move:before { + content: "\e068"; +} + +.glyphicon-step-backward:before { + content: "\e069"; +} + +.glyphicon-fast-backward:before { + content: "\e070"; +} + +.glyphicon-backward:before { + content: "\e071"; +} + +.glyphicon-play:before { + content: "\e072"; +} + +.glyphicon-pause:before { + content: "\e073"; +} + +.glyphicon-stop:before { + content: "\e074"; +} + +.glyphicon-forward:before { + content: "\e075"; +} + +.glyphicon-fast-forward:before { + content: "\e076"; +} + +.glyphicon-step-forward:before { + content: "\e077"; +} + +.glyphicon-eject:before { + content: "\e078"; +} + +.glyphicon-chevron-left:before { + content: "\e079"; +} + +.glyphicon-chevron-right:before { + content: "\e080"; +} + +.glyphicon-plus-sign:before { + content: "\e081"; +} + +.glyphicon-minus-sign:before { + content: "\e082"; +} + +.glyphicon-remove-sign:before { + content: "\e083"; +} + +.glyphicon-ok-sign:before { + content: "\e084"; +} + +.glyphicon-question-sign:before { + content: "\e085"; +} + +.glyphicon-info-sign:before { + content: "\e086"; +} + +.glyphicon-screenshot:before { + content: "\e087"; +} + +.glyphicon-remove-circle:before { + content: "\e088"; +} + +.glyphicon-ok-circle:before { + content: "\e089"; +} + +.glyphicon-ban-circle:before { + content: "\e090"; +} + +.glyphicon-arrow-left:before { + content: "\e091"; +} + +.glyphicon-arrow-right:before { + content: "\e092"; +} + +.glyphicon-arrow-up:before { + content: "\e093"; +} + +.glyphicon-arrow-down:before { + content: "\e094"; +} + +.glyphicon-share-alt:before { + content: "\e095"; +} + +.glyphicon-resize-full:before { + content: "\e096"; +} + +.glyphicon-resize-small:before { + content: "\e097"; +} + +.glyphicon-exclamation-sign:before { + content: "\e101"; +} + +.glyphicon-gift:before { + content: "\e102"; +} + +.glyphicon-leaf:before { + content: "\e103"; +} + +.glyphicon-eye-open:before { + content: "\e105"; +} + +.glyphicon-eye-close:before { + content: "\e106"; +} + +.glyphicon-warning-sign:before { + content: "\e107"; +} + +.glyphicon-plane:before { + content: "\e108"; +} + +.glyphicon-random:before { + content: "\e110"; +} + +.glyphicon-comment:before { + content: "\e111"; +} + +.glyphicon-magnet:before { + content: "\e112"; +} + +.glyphicon-chevron-up:before { + content: "\e113"; +} + +.glyphicon-chevron-down:before { + content: "\e114"; +} + +.glyphicon-retweet:before { + content: "\e115"; +} + +.glyphicon-shopping-cart:before { + content: "\e116"; +} + +.glyphicon-folder-close:before { + content: "\e117"; +} + +.glyphicon-folder-open:before { + content: "\e118"; +} + +.glyphicon-resize-vertical:before { + content: "\e119"; +} + +.glyphicon-resize-horizontal:before { + content: "\e120"; +} + +.glyphicon-hdd:before { + content: "\e121"; +} + +.glyphicon-bullhorn:before { + content: "\e122"; +} + +.glyphicon-certificate:before { + content: "\e124"; +} + +.glyphicon-thumbs-up:before { + content: "\e125"; +} + +.glyphicon-thumbs-down:before { + content: "\e126"; +} + +.glyphicon-hand-right:before { + content: "\e127"; +} + +.glyphicon-hand-left:before { + content: "\e128"; +} + +.glyphicon-hand-up:before { + content: "\e129"; +} + +.glyphicon-hand-down:before { + content: "\e130"; +} + +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} + +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} + +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} + +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} + +.glyphicon-globe:before { + content: "\e135"; +} + +.glyphicon-tasks:before { + content: "\e137"; +} + +.glyphicon-filter:before { + content: "\e138"; +} + +.glyphicon-fullscreen:before { + content: "\e140"; +} + +.glyphicon-dashboard:before { + content: "\e141"; +} + +.glyphicon-heart-empty:before { + content: "\e143"; +} + +.glyphicon-link:before { + content: "\e144"; +} + +.glyphicon-phone:before { + content: "\e145"; +} + +.glyphicon-usd:before { + content: "\e148"; +} + +.glyphicon-gbp:before { + content: "\e149"; +} + +.glyphicon-sort:before { + content: "\e150"; +} + +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} + +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} + +.glyphicon-sort-by-order:before { + content: "\e153"; +} + +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} + +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} + +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} + +.glyphicon-unchecked:before { + content: "\e157"; +} + +.glyphicon-expand:before { + content: "\e158"; +} + +.glyphicon-collapse-down:before { + content: "\e159"; +} + +.glyphicon-collapse-up:before { + content: "\e160"; +} + +.glyphicon-log-in:before { + content: "\e161"; +} + +.glyphicon-flash:before { + content: "\e162"; +} + +.glyphicon-log-out:before { + content: "\e163"; +} + +.glyphicon-new-window:before { + content: "\e164"; +} + +.glyphicon-record:before { + content: "\e165"; +} + +.glyphicon-save:before { + content: "\e166"; +} + +.glyphicon-open:before { + content: "\e167"; +} + +.glyphicon-saved:before { + content: "\e168"; +} + +.glyphicon-import:before { + content: "\e169"; +} + +.glyphicon-export:before { + content: "\e170"; +} + +.glyphicon-send:before { + content: "\e171"; +} + +.glyphicon-floppy-disk:before { + content: "\e172"; +} + +.glyphicon-floppy-saved:before { + content: "\e173"; +} + +.glyphicon-floppy-remove:before { + content: "\e174"; +} + +.glyphicon-floppy-save:before { + content: "\e175"; +} + +.glyphicon-floppy-open:before { + content: "\e176"; +} + +.glyphicon-credit-card:before { + content: "\e177"; +} + +.glyphicon-transfer:before { + content: "\e178"; +} + +.glyphicon-cutlery:before { + content: "\e179"; +} + +.glyphicon-header:before { + content: "\e180"; +} + +.glyphicon-compressed:before { + content: "\e181"; +} + +.glyphicon-earphone:before { + content: "\e182"; +} + +.glyphicon-phone-alt:before { + content: "\e183"; +} + +.glyphicon-tower:before { + content: "\e184"; +} + +.glyphicon-stats:before { + content: "\e185"; +} + +.glyphicon-sd-video:before { + content: "\e186"; +} + +.glyphicon-hd-video:before { + content: "\e187"; +} + +.glyphicon-subtitles:before { + content: "\e188"; +} + +.glyphicon-sound-stereo:before { + content: "\e189"; +} + +.glyphicon-sound-dolby:before { + content: "\e190"; +} + +.glyphicon-sound-5-1:before { + content: "\e191"; +} + +.glyphicon-sound-6-1:before { + content: "\e192"; +} + +.glyphicon-sound-7-1:before { + content: "\e193"; +} + +.glyphicon-copyright-mark:before { + content: "\e194"; +} + +.glyphicon-registration-mark:before { + content: "\e195"; +} + +.glyphicon-cloud-download:before { + content: "\e197"; +} + +.glyphicon-cloud-upload:before { + content: "\e198"; +} + +.glyphicon-tree-conifer:before { + content: "\e199"; +} + +.glyphicon-tree-deciduous:before { + content: "\e200"; +} + +.glyphicon-briefcase:before { + content: "\1f4bc"; +} + +.glyphicon-calendar:before { + content: "\1f4c5"; +} + +.glyphicon-pushpin:before { + content: "\1f4cc"; +} + +.glyphicon-paperclip:before { + content: "\1f4ce"; +} + +.glyphicon-camera:before { + content: "\1f4f7"; +} + +.glyphicon-lock:before { + content: "\1f512"; +} + +.glyphicon-bell:before { + content: "\1f514"; +} + +.glyphicon-bookmark:before { + content: "\1f516"; +} + +.glyphicon-fire:before { + content: "\1f525"; +} + +.glyphicon-wrench:before { + content: "\1f527"; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-bottom: 0 dotted; + border-left: 4px solid transparent; + content: ""; +} + +.dropdown { + position: relative; +} + +.dropdown-toggle:focus { + outline: 0; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + list-style: none; + background-color: #ffffff; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + background-clip: padding-box; +} + +.dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} + +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.428571429; + color: #333333; + white-space: nowrap; +} + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #428bca; +} + +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #428bca; + outline: 0; +} + +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #999999; +} + +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.open > .dropdown-menu { + display: block; +} + +.open > a { + outline: 0; +} + +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.428571429; + color: #999999; +} + +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0 dotted; + border-bottom: 4px solid #000000; + content: ""; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } +} + +.btn-default .caret { + border-top-color: #333333; +} + +.btn-primary .caret, +.btn-success .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret { + border-top-color: #fff; +} + +.dropup .btn-default .caret { + border-bottom-color: #333333; +} + +.dropup .btn-primary .caret, +.dropup .btn-success .caret, +.dropup .btn-warning .caret, +.dropup .btn-danger .caret, +.dropup .btn-info .caret { + border-bottom-color: #fff; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} + +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} + +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} + +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus { + outline: none; +} + +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} + +.btn-toolbar:before, +.btn-toolbar:after { + display: table; + content: " "; +} + +.btn-toolbar:after { + clear: both; +} + +.btn-toolbar:before, +.btn-toolbar:after { + display: table; + content: " "; +} + +.btn-toolbar:after { + clear: both; +} + +.btn-toolbar .btn-group { + float: left; +} + +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group, +.btn-toolbar > .btn-group + .btn-group { + margin-left: 5px; +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +.btn-group > .btn:first-child { + margin-left: 0; +} + +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.btn-group > .btn-group { + float: left; +} + +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group > .btn-group:first-child > .btn:last-child, +.btn-group > .btn-group:first-child > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn-group:last-child > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group-xs > .btn { + padding: 5px 10px; + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} + +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} + +.btn .caret { + margin-left: 0; +} + +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} + +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} + +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group { + display: block; + float: none; + width: 100%; + max-width: 100%; +} + +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after { + display: table; + content: " "; +} + +.btn-group-vertical > .btn-group:after { + clear: both; +} + +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after { + display: table; + content: " "; +} + +.btn-group-vertical > .btn-group:after { + clear: both; +} + +.btn-group-vertical > .btn-group > .btn { + float: none; +} + +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-right-radius: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 0; +} + +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group-vertical > .btn-group:first-child > .btn:last-child, +.btn-group-vertical > .btn-group:first-child > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn-group:last-child > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.btn-group-justified { + display: table; + width: 100%; + border-collapse: separate; + table-layout: fixed; +} + +.btn-group-justified .btn { + display: table-cell; + float: none; + width: 1%; +} + +[data-toggle="buttons"] > .btn > input[type="radio"], +[data-toggle="buttons"] > .btn > input[type="checkbox"] { + display: none; +} + +.input-group { + position: relative; + display: table; + border-collapse: separate; +} + +.input-group.col { + float: none; + padding-right: 0; + padding-left: 0; +} + +.input-group .form-control { + width: 100%; + margin-bottom: 0; +} + +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 45px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 45px; + line-height: 45px; +} + +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn { + height: auto; +} + +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} + +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn { + height: auto; +} + +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} + +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} + +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + text-align: center; + background-color: #eeeeee; + border: 1px solid #cccccc; + border-radius: 4px; +} + +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} + +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} + +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} + +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group-addon:first-child { + border-right: 0; +} + +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.input-group-addon:last-child { + border-left: 0; +} + +.input-group-btn { + position: relative; + white-space: nowrap; +} + +.input-group-btn > .btn { + position: relative; +} + +.input-group-btn > .btn + .btn { + margin-left: -4px; +} + +.input-group-btn > .btn:hover, +.input-group-btn > .btn:active { + z-index: 2; +} + +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav:before, +.nav:after { + display: table; + content: " "; +} + +.nav:after { + clear: both; +} + +.nav:before, +.nav:after { + display: table; + content: " "; +} + +.nav:after { + clear: both; +} + +.nav > li { + position: relative; + display: block; +} + +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} + +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.nav > li.disabled > a { + color: #999999; +} + +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #999999; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} + +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eeeeee; + border-color: #428bca; +} + +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} + +.nav > li > a > img { + max-width: none; +} + +.nav-tabs { + border-bottom: 1px solid #dddddd; +} + +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} + +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.428571429; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} + +.nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #dddddd; +} + +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555555; + cursor: default; + background-color: #ffffff; + border: 1px solid #dddddd; + border-bottom-color: transparent; +} + +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} + +.nav-tabs.nav-justified > li { + float: none; +} + +.nav-tabs.nav-justified > li > a { + text-align: center; +} + +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } +} + +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-bottom: 1px solid #dddddd; +} + +.nav-tabs.nav-justified > .active > a { + border-bottom-color: #ffffff; +} + +.nav-pills > li { + float: left; +} + +.nav-pills > li > a { + border-radius: 5px; +} + +.nav-pills > li + li { + margin-left: 2px; +} + +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #ffffff; + background-color: #428bca; +} + +.nav-stacked > li { + float: none; +} + +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} + +.nav-justified { + width: 100%; +} + +.nav-justified > li { + float: none; +} + +.nav-justified > li > a { + text-align: center; +} + +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } +} + +.nav-tabs-justified { + border-bottom: 0; +} + +.nav-tabs-justified > li > a { + margin-right: 0; + border-bottom: 1px solid #dddddd; +} + +.nav-tabs-justified > .active > a { + border-bottom-color: #ffffff; +} + +.tabbable:before, +.tabbable:after { + display: table; + content: " "; +} + +.tabbable:after { + clear: both; +} + +.tabbable:before, +.tabbable:after { + display: table; + content: " "; +} + +.tabbable:after { + clear: both; +} + +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} + +.tab-content > .active, +.pill-content > .active { + display: block; +} + +.nav .caret { + border-top-color: #428bca; + border-bottom-color: #428bca; +} + +.nav a:hover .caret { + border-top-color: #2a6496; + border-bottom-color: #2a6496; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.navbar { + position: relative; + z-index: 1000; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} + +.navbar:before, +.navbar:after { + display: table; + content: " "; +} + +.navbar:after { + clear: both; +} + +.navbar:before, +.navbar:after { + display: table; + content: " "; +} + +.navbar:after { + clear: both; +} + +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} + +.navbar-header:before, +.navbar-header:after { + display: table; + content: " "; +} + +.navbar-header:after { + clear: both; +} + +.navbar-header:before, +.navbar-header:after { + display: table; + content: " "; +} + +.navbar-header:after { + clear: both; +} + +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} + +.navbar-collapse { + max-height: 340px; + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; +} + +.navbar-collapse:before, +.navbar-collapse:after { + display: table; + content: " "; +} + +.navbar-collapse:after { + clear: both; +} + +.navbar-collapse:before, +.navbar-collapse:after { + display: table; + content: " "; +} + +.navbar-collapse:after { + clear: both; +} + +.navbar-collapse.in { + overflow-y: auto; +} + +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-collapse .navbar-nav.navbar-left:first-child { + margin-left: -15px; + } + .navbar-collapse .navbar-nav.navbar-right:last-child { + margin-right: -15px; + } + .navbar-collapse .navbar-text:last-child { + margin-right: 0; + } +} + +.container > .navbar-header, +.container > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} + +@media (min-width: 768px) { + .container > .navbar-header, + .container > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} + +.navbar-static-top { + border-width: 0 0 1px; +} + +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + border-width: 0 0 1px; +} + +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} + +.navbar-fixed-top { + top: 0; + z-index: 1030; +} + +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; +} + +.navbar-brand { + float: left; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} + +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} + +@media (min-width: 768px) { + .navbar > .container .navbar-brand { + margin-left: -15px; + } +} + +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + border: 1px solid transparent; + border-radius: 4px; +} + +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} + +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} + +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} + +.navbar-nav { + margin: 7.5px -15px; +} + +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} + +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} + +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} + +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + } +} + +.navbar-form { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); +} + +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + padding-left: 0; + margin-top: 0; + margin-bottom: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + float: none; + margin-left: 0; + } +} + +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } +} + +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} + +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.navbar-nav.pull-right > li > .dropdown-menu, +.navbar-nav > li > .dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} + +.navbar-text { + float: left; + margin-top: 15px; + margin-bottom: 15px; +} + +@media (min-width: 768px) { + .navbar-text { + margin-right: 15px; + margin-left: 15px; + } +} + +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} + +.navbar-default .navbar-brand { + color: #777777; +} + +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} + +.navbar-default .navbar-text { + color: #777777; +} + +.navbar-default .navbar-nav > li > a { + color: #777777; +} + +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333333; + background-color: transparent; +} + +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555555; + background-color: #e7e7e7; +} + +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #cccccc; + background-color: transparent; +} + +.navbar-default .navbar-toggle { + border-color: #dddddd; +} + +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #dddddd; +} + +.navbar-default .navbar-toggle .icon-bar { + background-color: #cccccc; +} + +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e6e6e6; +} + +.navbar-default .navbar-nav > .dropdown > a:hover .caret, +.navbar-default .navbar-nav > .dropdown > a:focus .caret { + border-top-color: #333333; + border-bottom-color: #333333; +} + +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #555555; + background-color: #e7e7e7; +} + +.navbar-default .navbar-nav > .open > a .caret, +.navbar-default .navbar-nav > .open > a:hover .caret, +.navbar-default .navbar-nav > .open > a:focus .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.navbar-default .navbar-nav > .dropdown > a .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} + +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #cccccc; + background-color: transparent; + } +} + +.navbar-default .navbar-link { + color: #777777; +} + +.navbar-default .navbar-link:hover { + color: #333333; +} + +.navbar-inverse { + background-color: #222222; + border-color: #080808; +} + +.navbar-inverse .navbar-brand { + color: #999999; +} + +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .navbar-text { + color: #999999; +} + +.navbar-inverse .navbar-nav > li > a { + color: #999999; +} + +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #ffffff; + background-color: #080808; +} + +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444444; + background-color: transparent; +} + +.navbar-inverse .navbar-toggle { + border-color: #333333; +} + +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333333; +} + +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #ffffff; +} + +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} + +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #ffffff; + background-color: #080808; +} + +.navbar-inverse .navbar-nav > .dropdown > a:hover .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .navbar-nav > .dropdown > a .caret { + border-top-color: #999999; + border-bottom-color: #999999; +} + +.navbar-inverse .navbar-nav > .open > a .caret, +.navbar-inverse .navbar-nav > .open > a:hover .caret, +.navbar-inverse .navbar-nav > .open > a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #999999; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #ffffff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #ffffff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444444; + background-color: transparent; + } +} + +.navbar-inverse .navbar-link { + color: #999999; +} + +.navbar-inverse .navbar-link:hover { + color: #ffffff; +} + +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} + +.breadcrumb > li { + display: inline-block; +} + +.breadcrumb > li + li:before { + padding: 0 5px; + color: #cccccc; + content: "/\00a0"; +} + +.breadcrumb > .active { + color: #999999; +} + +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} + +.pagination > li { + display: inline; +} + +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.428571429; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; +} + +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} + +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + background-color: #eeeeee; +} + +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 2; + color: #ffffff; + cursor: default; + background-color: #428bca; + border-color: #428bca; +} + +.pagination > .disabled > span, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #999999; + cursor: not-allowed; + background-color: #ffffff; + border-color: #dddddd; +} + +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; +} + +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; +} + +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; +} + +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} + +.pager:before, +.pager:after { + display: table; + content: " "; +} + +.pager:after { + clear: both; +} + +.pager:before, +.pager:after { + display: table; + content: " "; +} + +.pager:after { + clear: both; +} + +.pager li { + display: inline; +} + +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 15px; +} + +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.pager .next > a, +.pager .next > span { + float: right; +} + +.pager .previous > a, +.pager .previous > span { + float: left; +} + +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #999999; + cursor: not-allowed; + background-color: #ffffff; +} + +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} + +.label[href]:hover, +.label[href]:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.label:empty { + display: none; +} + +.label-default { + background-color: #999999; +} + +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #808080; +} + +.label-primary { + background-color: #428bca; +} + +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #3071a9; +} + +.label-success { + background-color: #5cb85c; +} + +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} + +.label-info { + background-color: #5bc0de; +} + +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} + +.label-warning { + background-color: #f0ad4e; +} + +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} + +.label-danger { + background-color: #d9534f; +} + +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} + +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + background-color: #999999; + border-radius: 10px; +} + +.badge:empty { + display: none; +} + +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.btn .badge { + position: relative; + top: -1px; +} + +a.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #428bca; + background-color: #ffffff; +} + +.nav-pills > li > a > .badge { + margin-left: 3px; +} + +.jumbotron { + padding: 30px; + margin-bottom: 30px; + font-size: 21px; + font-weight: 200; + line-height: 2.1428571435; + color: inherit; + background-color: #eeeeee; +} + +.jumbotron h1 { + line-height: 1; + color: inherit; +} + +.jumbotron p { + line-height: 1.4; +} + +.container .jumbotron { + border-radius: 6px; +} + +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1 { + font-size: 63px; + } +} + +.thumbnail { + display: inline-block; + display: block; + height: auto; + max-width: 100%; + padding: 4px; + line-height: 1.428571429; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +.thumbnail > img { + display: block; + height: auto; + max-width: 100%; +} + +a.thumbnail:hover, +a.thumbnail:focus { + border-color: #428bca; +} + +.thumbnail > img { + margin-right: auto; + margin-left: auto; +} + +.thumbnail .caption { + padding: 9px; + color: #333333; +} + +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} + +.alert h4 { + margin-top: 0; + color: inherit; +} + +.alert .alert-link { + font-weight: bold; +} + +.alert > p, +.alert > ul { + margin-bottom: 0; +} + +.alert > p + p { + margin-top: 5px; +} + +.alert-dismissable { + padding-right: 35px; +} + +.alert-dismissable .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-success hr { + border-top-color: #c9e2b3; +} + +.alert-success .alert-link { + color: #356635; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.alert-info hr { + border-top-color: #a6e1ec; +} + +.alert-info .alert-link { + color: #2d6987; +} + +.alert-warning { + color: #c09853; + background-color: #fcf8e3; + border-color: #fbeed5; +} + +.alert-warning hr { + border-top-color: #f8e5be; +} + +.alert-warning .alert-link { + color: #a47e3c; +} + +.alert-danger { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.alert-danger hr { + border-top-color: #e6c1c7; +} + +.alert-danger .alert-link { + color: #953b39; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + color: #ffffff; + text-align: center; + background-color: #428bca; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress-striped .progress-bar { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 40px 40px; +} + +.progress.active .progress-bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -moz-animation: progress-bar-stripes 2s linear infinite; + -ms-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-bar-success { + background-color: #5cb85c; +} + +.progress-striped .progress-bar-success { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-info { + background-color: #5bc0de; +} + +.progress-striped .progress-bar-info { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-warning { + background-color: #f0ad4e; +} + +.progress-striped .progress-bar-warning { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-danger { + background-color: #d9534f; +} + +.progress-striped .progress-bar-danger { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.media, +.media-body { + overflow: hidden; + zoom: 1; +} + +.media, +.media .media { + margin-top: 15px; +} + +.media:first-child { + margin-top: 0; +} + +.media-object { + display: block; +} + +.media-heading { + margin: 0 0 5px; +} + +.media > .pull-left { + margin-right: 10px; +} + +.media > .pull-right { + margin-left: 10px; +} + +.media-list { + padding-left: 0; + list-style: none; +} + +.list-group { + padding-left: 0; + margin-bottom: 20px; +} + +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #ffffff; + border: 1px solid #dddddd; +} + +.list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +.list-group-item > .badge { + float: right; +} + +.list-group-item > .badge + .badge { + margin-right: 5px; +} + +a.list-group-item { + color: #555555; +} + +a.list-group-item .list-group-item-heading { + color: #333333; +} + +a.list-group-item:hover, +a.list-group-item:focus { + text-decoration: none; + background-color: #f5f5f5; +} + +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #ffffff; + background-color: #428bca; + border-color: #428bca; +} + +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading { + color: inherit; +} + +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #e1edf7; +} + +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} + +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} + +.panel { + margin-bottom: 20px; + background-color: #ffffff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.panel-body { + padding: 15px; +} + +.panel-body:before, +.panel-body:after { + display: table; + content: " "; +} + +.panel-body:after { + clear: both; +} + +.panel-body:before, +.panel-body:after { + display: table; + content: " "; +} + +.panel-body:after { + clear: both; +} + +.panel > .list-group { + margin-bottom: 0; +} + +.panel > .list-group .list-group-item { + border-width: 1px 0; +} + +.panel > .list-group .list-group-item:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.panel > .list-group .list-group-item:last-child { + border-bottom: 0; +} + +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} + +.panel > .table { + margin-bottom: 0; +} + +.panel > .panel-body + .table { + border-top: 1px solid #dddddd; +} + +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} + +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; +} + +.panel-title > a { + color: inherit; +} + +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #dddddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} + +.panel-group .panel { + margin-bottom: 0; + overflow: hidden; + border-radius: 4px; +} + +.panel-group .panel + .panel { + margin-top: 5px; +} + +.panel-group .panel-heading { + border-bottom: 0; +} + +.panel-group .panel-heading + .panel-collapse .panel-body { + border-top: 1px solid #dddddd; +} + +.panel-group .panel-footer { + border-top: 0; +} + +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #dddddd; +} + +.panel-default { + border-color: #dddddd; +} + +.panel-default > .panel-heading { + color: #333333; + background-color: #f5f5f5; + border-color: #dddddd; +} + +.panel-default > .panel-heading + .panel-collapse .panel-body { + border-top-color: #dddddd; +} + +.panel-default > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #dddddd; +} + +.panel-primary { + border-color: #428bca; +} + +.panel-primary > .panel-heading { + color: #ffffff; + background-color: #428bca; + border-color: #428bca; +} + +.panel-primary > .panel-heading + .panel-collapse .panel-body { + border-top-color: #428bca; +} + +.panel-primary > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #428bca; +} + +.panel-success { + border-color: #d6e9c6; +} + +.panel-success > .panel-heading { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.panel-success > .panel-heading + .panel-collapse .panel-body { + border-top-color: #d6e9c6; +} + +.panel-success > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #d6e9c6; +} + +.panel-warning { + border-color: #fbeed5; +} + +.panel-warning > .panel-heading { + color: #c09853; + background-color: #fcf8e3; + border-color: #fbeed5; +} + +.panel-warning > .panel-heading + .panel-collapse .panel-body { + border-top-color: #fbeed5; +} + +.panel-warning > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #fbeed5; +} + +.panel-danger { + border-color: #eed3d7; +} + +.panel-danger > .panel-heading { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.panel-danger > .panel-heading + .panel-collapse .panel-body { + border-top-color: #eed3d7; +} + +.panel-danger > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #eed3d7; +} + +.panel-info { + border-color: #bce8f1; +} + +.panel-info > .panel-heading { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.panel-info > .panel-heading + .panel-collapse .panel-body { + border-top-color: #bce8f1; +} + +.panel-info > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #bce8f1; +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} + +.well-lg { + padding: 24px; + border-radius: 6px; +} + +.well-sm { + padding: 9px; + border-radius: 3px; +} + +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} + +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.modal-open { + overflow: hidden; +} + +body.modal-open, +.modal-open .navbar-fixed-top, +.modal-open .navbar-fixed-bottom { + margin-right: 15px; +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + display: none; + overflow: auto; + overflow-y: scroll; +} + +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + transform: translate(0, -25%); + -webkit-transition: -webkit-transform 0.3s ease-out; + -moz-transition: -moz-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; +} + +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); +} + +.modal-dialog { + z-index: 1050; + width: auto; + padding: 10px; + margin-right: auto; + margin-left: auto; +} + +.modal-content { + position: relative; + background-color: #ffffff; + border: 1px solid #999999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + outline: none; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + background-clip: padding-box; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; + background-color: #000000; +} + +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} + +.modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); +} + +.modal-header { + min-height: 16.428571429px; + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} + +.modal-header .close { + margin-top: -2px; +} + +.modal-title { + margin: 0; + line-height: 1.428571429; +} + +.modal-body { + position: relative; + padding: 20px; +} + +.modal-footer { + padding: 19px 20px 20px; + margin-top: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} + +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} + +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} + +@media screen and (min-width: 768px) { + .modal-dialog { + right: auto; + left: 50%; + width: 600px; + padding-top: 30px; + padding-bottom: 30px; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } +} + +.tooltip { + position: absolute; + z-index: 1030; + display: block; + font-size: 12px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); + visibility: visible; +} + +.tooltip.in { + opacity: 0.9; + filter: alpha(opacity=90); +} + +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} + +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} + +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} + +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + border-radius: 4px; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.top-left .tooltip-arrow { + bottom: 0; + left: 5px; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.top-right .tooltip-arrow { + right: 5px; + bottom: 0; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-right-color: #000000; + border-width: 5px 5px 5px 0; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-left-color: #000000; + border-width: 5px 0 5px 5px; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.tooltip.bottom-left .tooltip-arrow { + top: 0; + left: 5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.tooltip.bottom-right .tooltip-arrow { + top: 0; + right: 5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #ffffff; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + background-clip: padding-box; +} + +.popover.top { + margin-top: -10px; +} + +.popover.right { + margin-left: 10px; +} + +.popover.bottom { + margin-top: 10px; +} + +.popover.left { + margin-left: -10px; +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} + +.popover-content { + padding: 9px 14px; +} + +.popover .arrow, +.popover .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover .arrow { + border-width: 11px; +} + +.popover .arrow:after { + border-width: 10px; + content: ""; +} + +.popover.top .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} + +.popover.top .arrow:after { + bottom: 1px; + margin-left: -10px; + border-top-color: #ffffff; + border-bottom-width: 0; + content: " "; +} + +.popover.right .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999999; + border-right-color: rgba(0, 0, 0, 0.25); + border-left-width: 0; +} + +.popover.right .arrow:after { + bottom: -10px; + left: 1px; + border-right-color: #ffffff; + border-left-width: 0; + content: " "; +} + +.popover.bottom .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-bottom-color: #999999; + border-bottom-color: rgba(0, 0, 0, 0.25); + border-top-width: 0; +} + +.popover.bottom .arrow:after { + top: 1px; + margin-left: -10px; + border-bottom-color: #ffffff; + border-top-width: 0; + content: " "; +} + +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-left-color: #999999; + border-left-color: rgba(0, 0, 0, 0.25); + border-right-width: 0; +} + +.popover.left .arrow:after { + right: 1px; + bottom: -10px; + border-left-color: #ffffff; + border-right-width: 0; + content: " "; +} + +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} + +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + height: auto; + max-width: 100%; + line-height: 1; +} + +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} + +.carousel-inner > .active { + left: 0; +} + +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} + +.carousel-inner > .next { + left: 100%; +} + +.carousel-inner > .prev { + left: -100%; +} + +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} + +.carousel-inner > .active.left { + left: -100%; +} + +.carousel-inner > .active.right { + left: 100%; +} + +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + opacity: 0.5; + filter: alpha(opacity=50); +} + +.carousel-control.left { + background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); + background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%)); + background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); +} + +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); + background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%)); + background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); +} + +.carousel-control:hover, +.carousel-control:focus { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} + +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + left: 50%; + z-index: 5; + display: inline-block; +} + +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; + font-family: serif; +} + +.carousel-control .icon-prev:before { + content: '\2039'; +} + +.carousel-control .icon-next:before { + content: '\203a'; +} + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} + +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + border: 1px solid #ffffff; + border-radius: 10px; +} + +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #ffffff; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} + +.carousel-caption .btn { + text-shadow: none; +} + +@media screen and (min-width: 768px) { + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + margin-left: -15px; + font-size: 30px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} + +.clearfix:before, +.clearfix:after { + display: table; + content: " "; +} + +.clearfix:after { + clear: both; +} + +.pull-right { + float: right !important; +} + +.pull-left { + float: left !important; +} + +.hide { + display: none !important; +} + +.show { + display: block !important; +} + +.invisible { + visibility: hidden; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.affix { + position: fixed; +} + +@-ms-viewport { + width: device-width; +} + +@media screen and (max-width: 400px) { + @-ms-viewport { + width: 320px; + } +} + +.hidden { + display: none !important; + visibility: hidden !important; +} + +.visible-xs { + display: none !important; +} + +tr.visible-xs { + display: none !important; +} + +th.visible-xs, +td.visible-xs { + display: none !important; +} + +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-xs.visible-sm { + display: block !important; + } + tr.visible-xs.visible-sm { + display: table-row !important; + } + th.visible-xs.visible-sm, + td.visible-xs.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-xs.visible-md { + display: block !important; + } + tr.visible-xs.visible-md { + display: table-row !important; + } + th.visible-xs.visible-md, + td.visible-xs.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-xs.visible-lg { + display: block !important; + } + tr.visible-xs.visible-lg { + display: table-row !important; + } + th.visible-xs.visible-lg, + td.visible-xs.visible-lg { + display: table-cell !important; + } +} + +.visible-sm { + display: none !important; +} + +tr.visible-sm { + display: none !important; +} + +th.visible-sm, +td.visible-sm { + display: none !important; +} + +@media (max-width: 767px) { + .visible-sm.visible-xs { + display: block !important; + } + tr.visible-sm.visible-xs { + display: table-row !important; + } + th.visible-sm.visible-xs, + td.visible-sm.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-sm.visible-md { + display: block !important; + } + tr.visible-sm.visible-md { + display: table-row !important; + } + th.visible-sm.visible-md, + td.visible-sm.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-sm.visible-lg { + display: block !important; + } + tr.visible-sm.visible-lg { + display: table-row !important; + } + th.visible-sm.visible-lg, + td.visible-sm.visible-lg { + display: table-cell !important; + } +} + +.visible-md { + display: none !important; +} + +tr.visible-md { + display: none !important; +} + +th.visible-md, +td.visible-md { + display: none !important; +} + +@media (max-width: 767px) { + .visible-md.visible-xs { + display: block !important; + } + tr.visible-md.visible-xs { + display: table-row !important; + } + th.visible-md.visible-xs, + td.visible-md.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-md.visible-sm { + display: block !important; + } + tr.visible-md.visible-sm { + display: table-row !important; + } + th.visible-md.visible-sm, + td.visible-md.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-md.visible-lg { + display: block !important; + } + tr.visible-md.visible-lg { + display: table-row !important; + } + th.visible-md.visible-lg, + td.visible-md.visible-lg { + display: table-cell !important; + } +} + +.visible-lg { + display: none !important; +} + +tr.visible-lg { + display: none !important; +} + +th.visible-lg, +td.visible-lg { + display: none !important; +} + +@media (max-width: 767px) { + .visible-lg.visible-xs { + display: block !important; + } + tr.visible-lg.visible-xs { + display: table-row !important; + } + th.visible-lg.visible-xs, + td.visible-lg.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-lg.visible-sm { + display: block !important; + } + tr.visible-lg.visible-sm { + display: table-row !important; + } + th.visible-lg.visible-sm, + td.visible-lg.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-lg.visible-md { + display: block !important; + } + tr.visible-lg.visible-md { + display: table-row !important; + } + th.visible-lg.visible-md, + td.visible-lg.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} + +.hidden-xs { + display: block !important; +} + +tr.hidden-xs { + display: table-row !important; +} + +th.hidden-xs, +td.hidden-xs { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } + tr.hidden-xs { + display: none !important; + } + th.hidden-xs, + td.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-xs.hidden-sm { + display: none !important; + } + tr.hidden-xs.hidden-sm { + display: none !important; + } + th.hidden-xs.hidden-sm, + td.hidden-xs.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-xs.hidden-md { + display: none !important; + } + tr.hidden-xs.hidden-md { + display: none !important; + } + th.hidden-xs.hidden-md, + td.hidden-xs.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-xs.hidden-lg { + display: none !important; + } + tr.hidden-xs.hidden-lg { + display: none !important; + } + th.hidden-xs.hidden-lg, + td.hidden-xs.hidden-lg { + display: none !important; + } +} + +.hidden-sm { + display: block !important; +} + +tr.hidden-sm { + display: table-row !important; +} + +th.hidden-sm, +td.hidden-sm { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-sm.hidden-xs { + display: none !important; + } + tr.hidden-sm.hidden-xs { + display: none !important; + } + th.hidden-sm.hidden-xs, + td.hidden-sm.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } + tr.hidden-sm { + display: none !important; + } + th.hidden-sm, + td.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-sm.hidden-md { + display: none !important; + } + tr.hidden-sm.hidden-md { + display: none !important; + } + th.hidden-sm.hidden-md, + td.hidden-sm.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-sm.hidden-lg { + display: none !important; + } + tr.hidden-sm.hidden-lg { + display: none !important; + } + th.hidden-sm.hidden-lg, + td.hidden-sm.hidden-lg { + display: none !important; + } +} + +.hidden-md { + display: block !important; +} + +tr.hidden-md { + display: table-row !important; +} + +th.hidden-md, +td.hidden-md { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-md.hidden-xs { + display: none !important; + } + tr.hidden-md.hidden-xs { + display: none !important; + } + th.hidden-md.hidden-xs, + td.hidden-md.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-md.hidden-sm { + display: none !important; + } + tr.hidden-md.hidden-sm { + display: none !important; + } + th.hidden-md.hidden-sm, + td.hidden-md.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } + tr.hidden-md { + display: none !important; + } + th.hidden-md, + td.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-md.hidden-lg { + display: none !important; + } + tr.hidden-md.hidden-lg { + display: none !important; + } + th.hidden-md.hidden-lg, + td.hidden-md.hidden-lg { + display: none !important; + } +} + +.hidden-lg { + display: block !important; +} + +tr.hidden-lg { + display: table-row !important; +} + +th.hidden-lg, +td.hidden-lg { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-lg.hidden-xs { + display: none !important; + } + tr.hidden-lg.hidden-xs { + display: none !important; + } + th.hidden-lg.hidden-xs, + td.hidden-lg.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-lg.hidden-sm { + display: none !important; + } + tr.hidden-lg.hidden-sm { + display: none !important; + } + th.hidden-lg.hidden-sm, + td.hidden-lg.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-lg.hidden-md { + display: none !important; + } + tr.hidden-lg.hidden-md { + display: none !important; + } + th.hidden-lg.hidden-md, + td.hidden-lg.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } + tr.hidden-lg { + display: none !important; + } + th.hidden-lg, + td.hidden-lg { + display: none !important; + } +} + +.visible-print { + display: none !important; +} + +tr.visible-print { + display: none !important; +} + +th.visible-print, +td.visible-print { + display: none !important; +} + +@media print { + .visible-print { + display: block !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } + .hidden-print { + display: none !important; + } + tr.hidden-print { + display: none !important; + } + th.hidden-print, + td.hidden-print { + display: none !important; + } +} \ No newline at end of file diff --git a/dspace-jspui/src/main/webapp/static/css/bootstrap/bootstrap.min.css b/dspace-jspui/src/main/webapp/static/css/bootstrap/bootstrap.min.css new file mode 100644 index 0000000..a553c4f --- /dev/null +++ b/dspace-jspui/src/main/webapp/static/css/bootstrap/bootstrap.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap v3.0.0 + * + * Copyright 2013 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + *//*! normalize.css v2.1.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{margin:.67em 0;font-size:2em}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}mark{color:#000;background:#ff0}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid #c0c0c0}legend{padding:0;border:0}button,input,select,textarea{margin:0;font-family:inherit;font-size:100%}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{padding:0;box-sizing:border-box}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:2cm .5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}button,input,select[multiple],textarea{background-image:none}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}img{vertical-align:middle}.img-responsive{display:block;height:auto;max-width:100%}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16.099999999999998px;font-weight:200;line-height:1.4}@media(min-width:768px){.lead{font-size:21px}}small{font-size:85%}cite{font-style:normal}.text-muted{color:#999}.text-primary{color:#428bca}.text-warning{color:#c09853}.text-danger{color:#b94a48}.text-success{color:#468847}.text-info{color:#3a87ad}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}h1 small,.h1 small{font-size:24px}h2 small,.h2 small{font-size:18px}h3 small,.h3 small,h4 small,.h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt,dd{line-height:1.428571429}dt{font-weight:bold}dd{margin-left:0}@media(min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}blockquote p:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.428571429;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:1.428571429}code,pre{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.row{margin-right:-15px;margin-left:-15px}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11{float:left}.col-xs-1{width:8.333333333333332%}.col-xs-2{width:16.666666666666664%}.col-xs-3{width:25%}.col-xs-4{width:33.33333333333333%}.col-xs-5{width:41.66666666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.333333333333336%}.col-xs-8{width:66.66666666666666%}.col-xs-9{width:75%}.col-xs-10{width:83.33333333333334%}.col-xs-11{width:91.66666666666666%}.col-xs-12{width:100%}@media(min-width:768px){.container{max-width:750px}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11{float:left}.col-sm-1{width:8.333333333333332%}.col-sm-2{width:16.666666666666664%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333333333%}.col-sm-5{width:41.66666666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.333333333333336%}.col-sm-8{width:66.66666666666666%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333333334%}.col-sm-11{width:91.66666666666666%}.col-sm-12{width:100%}.col-sm-push-1{left:8.333333333333332%}.col-sm-push-2{left:16.666666666666664%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333333333%}.col-sm-push-5{left:41.66666666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.333333333333336%}.col-sm-push-8{left:66.66666666666666%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333333334%}.col-sm-push-11{left:91.66666666666666%}.col-sm-pull-1{right:8.333333333333332%}.col-sm-pull-2{right:16.666666666666664%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333333333%}.col-sm-pull-5{right:41.66666666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.333333333333336%}.col-sm-pull-8{right:66.66666666666666%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333333334%}.col-sm-pull-11{right:91.66666666666666%}.col-sm-offset-1{margin-left:8.333333333333332%}.col-sm-offset-2{margin-left:16.666666666666664%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333333333%}.col-sm-offset-5{margin-left:41.66666666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.333333333333336%}.col-sm-offset-8{margin-left:66.66666666666666%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333333334%}.col-sm-offset-11{margin-left:91.66666666666666%}}@media(min-width:992px){.container{max-width:970px}.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11{float:left}.col-md-1{width:8.333333333333332%}.col-md-2{width:16.666666666666664%}.col-md-3{width:25%}.col-md-4{width:33.33333333333333%}.col-md-5{width:41.66666666666667%}.col-md-6{width:50%}.col-md-7{width:58.333333333333336%}.col-md-8{width:66.66666666666666%}.col-md-9{width:75%}.col-md-10{width:83.33333333333334%}.col-md-11{width:91.66666666666666%}.col-md-12{width:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.333333333333332%}.col-md-push-2{left:16.666666666666664%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333333333%}.col-md-push-5{left:41.66666666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.333333333333336%}.col-md-push-8{left:66.66666666666666%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333333334%}.col-md-push-11{left:91.66666666666666%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.333333333333332%}.col-md-pull-2{right:16.666666666666664%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333333333%}.col-md-pull-5{right:41.66666666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.333333333333336%}.col-md-pull-8{right:66.66666666666666%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333333334%}.col-md-pull-11{right:91.66666666666666%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.333333333333332%}.col-md-offset-2{margin-left:16.666666666666664%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333333333%}.col-md-offset-5{margin-left:41.66666666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.333333333333336%}.col-md-offset-8{margin-left:66.66666666666666%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333333334%}.col-md-offset-11{margin-left:91.66666666666666%}}@media(min-width:1200px){.container{max-width:1170px}.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11{float:left}.col-lg-1{width:8.333333333333332%}.col-lg-2{width:16.666666666666664%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333333333%}.col-lg-5{width:41.66666666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.333333333333336%}.col-lg-8{width:66.66666666666666%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333333334%}.col-lg-11{width:91.66666666666666%}.col-lg-12{width:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.333333333333332%}.col-lg-push-2{left:16.666666666666664%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333333333%}.col-lg-push-5{left:41.66666666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.333333333333336%}.col-lg-push-8{left:66.66666666666666%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333333334%}.col-lg-push-11{left:91.66666666666666%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.333333333333332%}.col-lg-pull-2{right:16.666666666666664%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333333333%}.col-lg-pull-5{right:41.66666666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.333333333333336%}.col-lg-pull-8{right:66.66666666666666%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333333334%}.col-lg-pull-11{right:91.66666666666666%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.333333333333332%}.col-lg-offset-2{margin-left:16.666666666666664%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333333333%}.col-lg-offset-5{margin-left:41.66666666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.333333333333336%}.col-lg-offset-8{margin-left:66.66666666666666%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333333334%}.col-lg-offset-11{margin-left:91.66666666666666%}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table thead>tr>th,.table tbody>tr>th,.table tfoot>tr>th,.table thead>tr>td,.table tbody>tr>td,.table tfoot>tr>td{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table caption+thead tr:first-child th,.table colgroup+thead tr:first-child th,.table thead:first-child tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed thead>tr>th,.table-condensed tbody>tr>th,.table-condensed tfoot>tr>th,.table-condensed thead>tr>td,.table-condensed tbody>tr>td,.table-condensed tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*="col-"]{display:table-column;float:none}table td[class*="col-"],table th[class*="col-"]{display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8;border-color:#d6e9c6}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td{background-color:#d0e9c6;border-color:#c9e2b3}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede;border-color:#eed3d7}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td{background-color:#ebcccc;border-color:#e6c1c7}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3;border-color:#fbeed5}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td{background-color:#faf2cc;border-color:#f8e5be}@media(max-width:768px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:scroll;overflow-y:hidden;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0;background-color:#fff}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>thead>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>thead>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}select[multiple],select[size]{height:auto}select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{height:auto}.form-control:-moz-placeholder{color:#999}.form-control::-moz-placeholder{color:#999}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}textarea.form-control{height:auto}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.radio label,.checkbox label{display:inline;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:normal;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm{height:auto}.input-lg{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:45px;line-height:45px}textarea.input-lg{height:auto}.has-warning .help-block,.has-warning .control-label{color:#c09853}.has-warning .form-control{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.has-warning .input-group-addon{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.has-error .help-block,.has-error .control-label{color:#b94a48}.has-error .form-control{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.has-error .input-group-addon{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.has-success .help-block,.has-success .control-label{color:#468847}.has-success .form-control{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.has-success .input-group-addon{color:#468847;background-color:#dff0d8;border-color:#468847}.form-control-static{padding-top:7px;margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media(min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block}.form-inline .radio,.form-inline .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:none;margin-left:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}@media(min-width:768px){.form-horizontal .control-label{text-align:right}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:normal;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-link{font-weight:normal;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-xs{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs{padding:1px 5px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:normal;line-height:1}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-print:before{content:"\e045"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-briefcase:before{content:"\1f4bc"}.glyphicon-calendar:before{content:"\1f4c5"}.glyphicon-pushpin:before{content:"\1f4cc"}.glyphicon-paperclip:before{content:"\1f4ce"}.glyphicon-camera:before{content:"\1f4f7"}.glyphicon-lock:before{content:"\1f512"}.glyphicon-bell:before{content:"\1f514"}.glyphicon-bookmark:before{content:"\1f516"}.glyphicon-fire:before{content:"\1f525"}.glyphicon-wrench:before{content:"\1f527"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid #000;border-right:4px solid transparent;border-bottom:0 dotted;border-left:4px solid transparent;content:""}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.428571429;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#fff;text-decoration:none;background-color:#428bca}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0 dotted;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media(min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.btn-default .caret{border-top-color:#333}.btn-primary .caret,.btn-success .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret{border-top-color:#fff}.dropup .btn-default .caret{border-bottom-color:#333}.dropup .btn-primary .caret,.dropup .btn-success .caret,.dropup .btn-warning .caret,.dropup .btn-danger .caret,.dropup .btn-info .caret{border-bottom-color:#fff}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group{float:left}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group-xs>.btn{padding:5px 10px;padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-bottom-left-radius:4px;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.btn-group-justified .btn{display:table-cell;float:none;width:1%}[data-toggle="buttons"]>.btn>input[type="radio"],[data-toggle="buttons"]>.btn>input[type="checkbox"]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group.col{float:none;padding-right:0;padding-left:0}.input-group .form-control{width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:45px;line-height:45px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-4px}.input-group-btn>.btn:hover,.input-group-btn>.btn:active{z-index:2}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center}@media(min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}}.nav-tabs.nav-justified>li>a{margin-right:0;border-bottom:1px solid #ddd}.nav-tabs.nav-justified>.active>a{border-bottom-color:#fff}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:5px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center}@media(min-width:768px){.nav-justified>li{display:table-cell;width:1%}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-bottom:1px solid #ddd}.nav-tabs-justified>.active>a{border-bottom-color:#fff}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after{clear:both}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after{clear:both}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.nav .caret{border-top-color:#428bca;border-bottom-color:#428bca}.nav a:hover .caret{border-top-color:#2a6496;border-bottom-color:#2a6496}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;z-index:1000;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}@media(min-width:768px){.navbar{border-radius:4px}}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}@media(min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media(min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-collapse .navbar-nav.navbar-left:first-child{margin-left:-15px}.navbar-collapse .navbar-nav.navbar-right:last-child{margin-right:-15px}.navbar-collapse .navbar-text:last-child{margin-right:0}}.container>.navbar-header,.container>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media(min-width:768px){.container>.navbar-header,.container>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{border-width:0 0 1px}@media(min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;border-width:0 0 1px}@media(min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;z-index:1030}.navbar-fixed-bottom{bottom:0;margin-bottom:0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media(min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media(min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media(max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media(min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}@media(min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}@media(min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{float:none;margin-left:0}}@media(max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media(min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-nav.pull-right>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-text{float:left;margin-top:15px;margin-bottom:15px}@media(min-width:768px){.navbar-text{margin-right:15px;margin-left:15px}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e6e6e6}.navbar-default .navbar-nav>.dropdown>a:hover .caret,.navbar-default .navbar-nav>.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.open>a .caret,.navbar-default .navbar-nav>.open>a:hover .caret,.navbar-default .navbar-nav>.open>a:focus .caret{border-top-color:#555;border-bottom-color:#555}.navbar-default .navbar-nav>.dropdown>a .caret{border-top-color:#777;border-bottom-color:#777}@media(max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.dropdown>a:hover .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-nav>.dropdown>a .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .navbar-nav>.open>a .caret,.navbar-inverse .navbar-nav>.open>a:hover .caret,.navbar-inverse .navbar-nav>.open>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}@media(max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.428571429;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{background-color:#eee}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:#808080}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#999;border-radius:10px}.badge:empty{display:none}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.btn .badge{position:relative;top:-1px}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.jumbotron h1{line-height:1;color:inherit}.jumbotron p{line-height:1.4}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.thumbnail{display:inline-block;display:block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img{display:block;height:auto;max-width:100%}a.thumbnail:hover,a.thumbnail:focus{border-color:#428bca}.thumbnail>img{margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#356635}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#2d6987}.alert-warning{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}.alert-warning hr{border-top-color:#f8e5be}.alert-warning .alert-link{color:#a47e3c}.alert-danger{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger hr{border-top-color:#e6c1c7}.alert-danger .alert-link{color:#953b39}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0}.panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.list-group .list-group-item:last-child{border-bottom:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table{margin-bottom:0}.panel>.panel-body+.table{border-top:1px solid #ddd}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-title{margin-top:0;margin-bottom:0;font-size:16px}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.panel-warning{border-color:#fbeed5}.panel-warning>.panel-heading{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#fbeed5}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#fbeed5}.panel-danger{border-color:#eed3d7}.panel-danger>.panel-heading{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#eed3d7}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#eed3d7}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}body.modal-open,.modal-open .navbar-fixed-top,.modal-open .navbar-fixed-bottom{margin-right:15px}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:auto;overflow-y:scroll}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{z-index:1050;width:auto;padding:10px;margin-right:auto;margin-left:auto}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:20px}.modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.modal-dialog{right:auto;left:50%;width:600px;padding-top:30px;padding-bottom:30px}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}}.tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;height:auto;max-width:100%;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);opacity:.5;filter:alpha(opacity=50)}.carousel-control.left{background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.5)),to(rgba(0,0,0,0.0001)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.5) 0),color-stop(rgba(0,0,0,0.0001) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',endColorstr='#00000000',GradientType=1)}.carousel-control.right{right:0;left:auto;background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.0001)),to(rgba(0,0,0,0.5)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.0001) 0),color-stop(rgba(0,0,0,0.5) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#80000000',GradientType=1)}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;left:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{display:table;content:" "}.clearfix:after{clear:both}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media screen and (max-width:400px){@-ms-viewport{width:320px}}.hidden{display:none!important;visibility:hidden!important}.visible-xs{display:none!important}tr.visible-xs{display:none!important}th.visible-xs,td.visible-xs{display:none!important}@media(max-width:767px){.visible-xs{display:block!important}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-xs.visible-sm{display:block!important}tr.visible-xs.visible-sm{display:table-row!important}th.visible-xs.visible-sm,td.visible-xs.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-xs.visible-md{display:block!important}tr.visible-xs.visible-md{display:table-row!important}th.visible-xs.visible-md,td.visible-xs.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-xs.visible-lg{display:block!important}tr.visible-xs.visible-lg{display:table-row!important}th.visible-xs.visible-lg,td.visible-xs.visible-lg{display:table-cell!important}}.visible-sm{display:none!important}tr.visible-sm{display:none!important}th.visible-sm,td.visible-sm{display:none!important}@media(max-width:767px){.visible-sm.visible-xs{display:block!important}tr.visible-sm.visible-xs{display:table-row!important}th.visible-sm.visible-xs,td.visible-sm.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-sm{display:block!important}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-sm.visible-md{display:block!important}tr.visible-sm.visible-md{display:table-row!important}th.visible-sm.visible-md,td.visible-sm.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-sm.visible-lg{display:block!important}tr.visible-sm.visible-lg{display:table-row!important}th.visible-sm.visible-lg,td.visible-sm.visible-lg{display:table-cell!important}}.visible-md{display:none!important}tr.visible-md{display:none!important}th.visible-md,td.visible-md{display:none!important}@media(max-width:767px){.visible-md.visible-xs{display:block!important}tr.visible-md.visible-xs{display:table-row!important}th.visible-md.visible-xs,td.visible-md.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-md.visible-sm{display:block!important}tr.visible-md.visible-sm{display:table-row!important}th.visible-md.visible-sm,td.visible-md.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-md{display:block!important}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-md.visible-lg{display:block!important}tr.visible-md.visible-lg{display:table-row!important}th.visible-md.visible-lg,td.visible-md.visible-lg{display:table-cell!important}}.visible-lg{display:none!important}tr.visible-lg{display:none!important}th.visible-lg,td.visible-lg{display:none!important}@media(max-width:767px){.visible-lg.visible-xs{display:block!important}tr.visible-lg.visible-xs{display:table-row!important}th.visible-lg.visible-xs,td.visible-lg.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-lg.visible-sm{display:block!important}tr.visible-lg.visible-sm{display:table-row!important}th.visible-lg.visible-sm,td.visible-lg.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-lg.visible-md{display:block!important}tr.visible-lg.visible-md{display:table-row!important}th.visible-lg.visible-md,td.visible-lg.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-lg{display:block!important}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}.hidden-xs{display:block!important}tr.hidden-xs{display:table-row!important}th.hidden-xs,td.hidden-xs{display:table-cell!important}@media(max-width:767px){.hidden-xs{display:none!important}tr.hidden-xs{display:none!important}th.hidden-xs,td.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-xs.hidden-sm{display:none!important}tr.hidden-xs.hidden-sm{display:none!important}th.hidden-xs.hidden-sm,td.hidden-xs.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-xs.hidden-md{display:none!important}tr.hidden-xs.hidden-md{display:none!important}th.hidden-xs.hidden-md,td.hidden-xs.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-xs.hidden-lg{display:none!important}tr.hidden-xs.hidden-lg{display:none!important}th.hidden-xs.hidden-lg,td.hidden-xs.hidden-lg{display:none!important}}.hidden-sm{display:block!important}tr.hidden-sm{display:table-row!important}th.hidden-sm,td.hidden-sm{display:table-cell!important}@media(max-width:767px){.hidden-sm.hidden-xs{display:none!important}tr.hidden-sm.hidden-xs{display:none!important}th.hidden-sm.hidden-xs,td.hidden-sm.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}tr.hidden-sm{display:none!important}th.hidden-sm,td.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-sm.hidden-md{display:none!important}tr.hidden-sm.hidden-md{display:none!important}th.hidden-sm.hidden-md,td.hidden-sm.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-sm.hidden-lg{display:none!important}tr.hidden-sm.hidden-lg{display:none!important}th.hidden-sm.hidden-lg,td.hidden-sm.hidden-lg{display:none!important}}.hidden-md{display:block!important}tr.hidden-md{display:table-row!important}th.hidden-md,td.hidden-md{display:table-cell!important}@media(max-width:767px){.hidden-md.hidden-xs{display:none!important}tr.hidden-md.hidden-xs{display:none!important}th.hidden-md.hidden-xs,td.hidden-md.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-md.hidden-sm{display:none!important}tr.hidden-md.hidden-sm{display:none!important}th.hidden-md.hidden-sm,td.hidden-md.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}tr.hidden-md{display:none!important}th.hidden-md,td.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-md.hidden-lg{display:none!important}tr.hidden-md.hidden-lg{display:none!important}th.hidden-md.hidden-lg,td.hidden-md.hidden-lg{display:none!important}}.hidden-lg{display:block!important}tr.hidden-lg{display:table-row!important}th.hidden-lg,td.hidden-lg{display:table-cell!important}@media(max-width:767px){.hidden-lg.hidden-xs{display:none!important}tr.hidden-lg.hidden-xs{display:none!important}th.hidden-lg.hidden-xs,td.hidden-lg.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-lg.hidden-sm{display:none!important}tr.hidden-lg.hidden-sm{display:none!important}th.hidden-lg.hidden-sm,td.hidden-lg.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-lg.hidden-md{display:none!important}tr.hidden-lg.hidden-md{display:none!important}th.hidden-lg.hidden-md,td.hidden-lg.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-lg{display:none!important}tr.hidden-lg{display:none!important}th.hidden-lg,td.hidden-lg{display:none!important}}.visible-print{display:none!important}tr.visible-print{display:none!important}th.visible-print,td.visible-print{display:none!important}@media print{.visible-print{display:block!important}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}.hidden-print{display:none!important}tr.hidden-print{display:none!important}th.hidden-print,td.hidden-print{display:none!important}} \ No newline at end of file diff --git a/dspace-jspui/src/main/webapp/static/css/bootstrap/dspace-theme.css b/dspace-jspui/src/main/webapp/static/css/bootstrap/dspace-theme.css new file mode 100644 index 0000000..13b4332 --- /dev/null +++ b/dspace-jspui/src/main/webapp/static/css/bootstrap/dspace-theme.css @@ -0,0 +1,66 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +.banner img {background-color: #FFFFFF;padding:15px;margin:20px;} +.brand {padding-top: 30px;} +.brand h4 {color: #999999} +ol.breadcrumb li {color: white; font-style: italic;} +ol.breadcrumb li a {color: white; font-weight: bold; font-style: normal;} +body.undernavigation {overflow-x: hidden; padding-top: 65px;} +#content {padding-bottom:60px;} +#designedby {padding: 5px;} +#footer_feedback {padding-top: 12px;} +input[type="file"] {display: block;height: auto;} +div.panel-primary div.panel-heading a {color: white;} +/* This magic gets the 16x16 icon to show up.. setting height/width didn't + do it, but adding padding actually made it show up. */ +img.ds-authority-confidence, +span.ds-authority-confidence +{ width: 16px; height: 16px; margin: 5px; background-repeat: no-repeat; + padding: 0px 2px; vertical-align: bottom; color: transparent;} +img.ds-authority-confidence.cf-unset, +span.ds-authority-confidence.cf-unset + { background-image: url(../../../image/authority/bug.png);} +img.ds-authority-confidence.cf-novalue, +span.ds-authority-confidence.cf-novalue + { background-image: url(../../../image/confidence/0-unauthored.gif);} +img.ds-authority-confidence.cf-rejected, +img.ds-authority-confidence.cf-failed, +span.ds-authority-confidence.cf-rejected, +span.ds-authority-confidence.cf-failed + { background-image: url(../../../image/confidence/2-errortriangle.gif); } +img.ds-authority-confidence.cf-notfound, +span.ds-authority-confidence.cf-notfound + { background-image: url(../../../image/confidence/3-thumb1.gif); } +img.ds-authority-confidence.cf-ambiguous, +span.ds-authority-confidence.cf-ambiguous + { background-image: url(../../../image/confidence/4-question.gif); } +img.ds-authority-confidence.cf-uncertain, +span.ds-authority-confidence.cf-uncertain + { background-image: url(../../../image/confidence/5-pinion.gif); } +img.ds-authority-confidence.cf-accepted, +span.ds-authority-confidence.cf-accepted + { background-image: url(../../../image/confidence/6-greencheck.gif); } + +/* hide authority-value inputs in forms */ +input.ds-authority-value { display:none; } + +/** XXX Change to this to get the authority value to show up for debugging: + input.ds-authority-value { display:inline; } +**/ + +/* for edit-item-form lock button */ +input.ds-authority-lock + { vertical-align: bottom; height: 24px; width: 24px; margin-right: 8px; + background-repeat: no-repeat; background-color: transparent; } +input.ds-authority-lock.is-locked + { background-image: url(../../../image/lock24.png); } +input.ds-authority-lock.is-unlocked + { background-image: url(../../../image/unlock24.png); } + +/* field required in submission */ +.label-required:after { content:" *"; } \ No newline at end of file diff --git a/dspace-jspui/src/main/webapp/static/css/fonts/glyphicons-halflings-regular.eot b/dspace-jspui/src/main/webapp/static/css/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..87eaa434234e2a984c261e0450a2f4ad837aa7b4 GIT binary patch literal 14079 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 literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/static/css/fonts/glyphicons-halflings-regular.svg b/dspace-jspui/src/main/webapp/static/css/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..5fee068 --- /dev/null +++ b/dspace-jspui/src/main/webapp/static/css/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,228 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="glyphicons_halflingsregular" horiz-adv-x="1200" > +<font-face units-per-em="1200" ascent="960" descent="-240" /> +<missing-glyph horiz-adv-x="500" /> +<glyph /> +<glyph /> +<glyph unicode=" " /> +<glyph unicode="*" d="M1100 500h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200z" /> +<glyph unicode="+" d="M1100 400h-400v-400h-300v400h-400v300h400v400h300v-400h400v-300z" /> +<glyph unicode=" " /> +<glyph unicode=" " horiz-adv-x="652" /> +<glyph unicode=" " horiz-adv-x="1304" /> +<glyph unicode=" " horiz-adv-x="652" /> +<glyph unicode=" " horiz-adv-x="1304" /> +<glyph unicode=" " horiz-adv-x="434" /> +<glyph unicode=" " horiz-adv-x="326" /> +<glyph unicode=" " horiz-adv-x="217" /> +<glyph unicode=" " horiz-adv-x="217" /> +<glyph unicode=" " horiz-adv-x="163" /> +<glyph unicode=" " horiz-adv-x="260" /> +<glyph unicode=" " horiz-adv-x="72" /> +<glyph unicode=" " horiz-adv-x="260" /> +<glyph unicode=" " horiz-adv-x="326" /> +<glyph unicode="€" d="M800 500h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257 q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406z" /> +<glyph unicode="−" d="M1100 700h-900v-300h900v300z" /> +<glyph unicode="☁" d="M178 300h750q120 0 205 86t85 208q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5q0 -80 56.5 -137t135.5 -57z" /> +<glyph unicode="✉" d="M1200 1100h-1200l600 -603zM300 600l-300 -300v600zM1200 900v-600l-300 300zM800 500l400 -400h-1200l400 400l200 -200z" /> +<glyph unicode="✏" d="M1101 889l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13l-94 -97zM401 189l614 614l-214 214l-614 -614zM-13 -13l333 112l-223 223z" /> +<glyph unicode="" horiz-adv-x="500" d="M0 0z" /> +<glyph unicode="" d="M700 100h300v-100h-800v100h300v550l-500 550h1200l-500 -550v-550z" /> +<glyph unicode="" d="M1000 934v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q17 -55 85.5 -75.5t147.5 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7q-79 -25 -122.5 -82t-25.5 -112t86 -75.5t147 5.5 q65 21 109 69t44 90v606z" /> +<glyph unicode="" d="M913 432l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342t142 342t342 142t342 -142t142 -342q0 -142 -78 -261zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" /> +<glyph unicode="" d="M649 949q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5t-94 124.5t-33.5 117.5q0 64 28 123t73 100.5t104.5 64t119 20.5 t120 -38.5t104.5 -104.5z" /> +<glyph unicode="" d="M791 522l145 -449l-384 275l-382 -275l146 447l-388 280h479l146 400h2l146 -400h472zM168 71l2 1z" /> +<glyph unicode="" d="M791 522l145 -449l-384 275l-382 -275l146 447l-388 280h479l146 400h2l146 -400h472zM747 331l-74 229l193 140h-235l-77 211l-78 -211h-239l196 -142l-73 -226l192 140zM168 71l2 1z" /> +<glyph unicode="" d="M1200 143v-143h-1200v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100z" /> +<glyph unicode="" d="M1200 1100v-1100h-1200v1100h1200zM200 1000h-100v-100h100v100zM900 1000h-600v-400h600v400zM1100 1000h-100v-100h100v100zM200 800h-100v-100h100v100zM1100 800h-100v-100h100v100zM200 600h-100v-100h100v100zM1100 600h-100v-100h100v100zM900 500h-600v-400h600 v400zM200 400h-100v-100h100v100zM1100 400h-100v-100h100v100zM200 200h-100v-100h100v100zM1100 200h-100v-100h100v100z" /> +<glyph unicode="" d="M500 1050v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5zM1100 1050v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h400 q21 0 35.5 -14.5t14.5 -35.5zM500 450v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5zM1100 450v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="" d="M300 1050v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM700 1050v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5zM1100 1050v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM300 650v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM700 650v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM1100 650v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM300 250v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM700 250v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM1100 250v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5 t14.5 -35.5z" /> +<glyph unicode="" d="M300 1050v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM1200 1050v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h700 q21 0 35.5 -14.5t14.5 -35.5zM300 450v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-200q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5zM1200 650v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5zM300 250v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM1200 250v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="" d="M448 34l818 820l-212 212l-607 -607l-206 207l-212 -212z" /> +<glyph unicode="" d="M882 106l-282 282l-282 -282l-212 212l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282z" /> +<glyph unicode="" d="M913 432l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342t142 342t342 142t342 -142t142 -342q0 -142 -78 -261zM507 363q137 0 233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5t-234 -97t-97 -233 t97 -233t234 -97zM600 800h100v-200h-100v-100h-200v100h-100v200h100v100h200v-100z" /> +<glyph unicode="" d="M913 432l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 299q-120 -77 -261 -77q-200 0 -342 142t-142 342t142 342t342 142t342 -142t142 -342q0 -141 -78 -262zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 801v-200h400v200h-400z" /> +<glyph unicode="" d="M700 750v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5zM800 975v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123 t-123 184t-45.5 224.5q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155z" /> +<glyph unicode="" d="M1200 1h-200v1200h200v-1200zM900 1h-200v800h200v-800zM600 1h-200v500h200v-500zM300 301h-200v-300h200v300z" /> +<glyph unicode="" d="M488 183l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5 q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39zM600 815q89 0 152 -63 t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152q0 88 63 151t152 63z" /> +<glyph unicode="" d="M900 1100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100zM800 1100v100h-300v-100h300zM200 900h900v-800q0 -41 -29.5 -71 t-70.5 -30h-700q-41 0 -70.5 30t-29.5 71v800zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" /> +<glyph unicode="" d="M1301 601h-200v-600h-300v400h-300v-400h-300v600h-200l656 644z" /> +<glyph unicode="" d="M600 700h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18v1150q0 11 7 18t18 7h475v-500zM1000 800h-300v300z" /> +<glyph unicode="" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM600 600h200 v-100h-300v400h100v-300z" /> +<glyph unicode="" d="M721 400h-242l-40 -400h-539l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538zM712 500l-27 300h-170l-27 -300h224z" /> +<glyph unicode="" d="M1100 400v-400h-1100v400h490l-290 300h200v500h300v-500h200l-290 -300h490zM988 300h-175v-100h175v100z" /> +<glyph unicode="" d="M600 1199q122 0 233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233t47.5 233t127.5 191t191 127.5t233 47.5zM600 1012q-170 0 -291 -121t-121 -291t121 -291t291 -121t291 121 t121 291t-121 291t-291 121zM700 600h150l-250 -300l-250 300h150v300h200v-300z" /> +<glyph unicode="" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM850 600h-150 v-300h-200v300h-150l250 300z" /> +<glyph unicode="" d="M0 500l200 700h800q199 -700 200 -700v-475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18v475zM903 1000h-606l-97 -500h200l50 -200h300l50 200h200z" /> +<glyph unicode="" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5zM797 598 l-297 -201v401z" /> +<glyph unicode="" d="M1177 600h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123t-123 -184t-45.5 -224.5t45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123 t123 184t45.5 224.5z" /> +<glyph unicode="" d="M700 800l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400zM500 400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122l-145 -145v400h400z" /> +<glyph unicode="" d="M100 1200v-1200h1100v1200h-1100zM1100 100h-900v900h900v-900zM400 800h-100v100h100v-100zM1000 800h-500v100h500v-100zM400 600h-100v100h100v-100zM1000 600h-500v100h500v-100zM400 400h-100v100h100v-100zM1000 400h-500v100h500v-100zM400 200h-100v100h100v-100 zM1000 300h-500v-100h500v100z" /> +<glyph unicode="" d="M200 0h-100v1100h100v-1100zM1100 600v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5z" /> +<glyph unicode="" d="M1200 275v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5t-49.5 -227v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50 q11 0 18 7t7 18zM400 480v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14zM1000 480v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14z" /> +<glyph unicode="" d="M0 800v-400h300l300 -200v800l-300 -200h-300zM971 600l141 -141l-71 -71l-141 141l-141 -141l-71 71l141 141l-141 141l71 71l141 -141l141 141l71 -71z" /> +<glyph unicode="" d="M0 800v-400h300l300 -200v800l-300 -200h-300zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" /> +<glyph unicode="" d="M974 186l6 8q142 178 142 405q0 230 -144 408l-6 8l-83 -64l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8zM300 801l300 200v-800l-300 200h-300v400h300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257z" /> +<glyph unicode="" d="M100 700h400v100h100v100h-100v300h-500v-600h100v100zM1200 700v500h-600v-200h100v-300h200v-300h300v200h-200v100h200zM100 1100h300v-300h-300v300zM800 800v300h300v-300h-300zM200 900h100v100h-100v-100zM900 1000h100v-100h-100v100zM300 600h-100v-100h-200 v-500h500v500h-200v100zM900 200v-100h-200v100h-100v100h100v200h-200v100h300v-300h200v-100h-100zM400 400v-300h-300v300h300zM300 200h-100v100h100v-100zM1100 300h100v-100h-100v100zM600 100h100v-100h-100v100zM1200 100v-100h-300v100h300z" /> +<glyph unicode="" d="M100 1200h-100v-1000h100v1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 1200v-1000h-200v1000h200zM400 100v-100h-300v100h300zM500 91h100v-91h-100v91zM700 91h100v-91h-100v91zM1100 91v-91h-200v91h200z " /> +<glyph unicode="" d="M1200 500l-500 -500l-699 700v475q0 10 7.5 17.5t17.5 7.5h474zM320 882q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71t29 -71q30 -30 71.5 -30t71.5 30z" /> +<glyph unicode="" d="M1201 500l-500 -500l-699 700v475q0 11 7 18t18 7h474zM1501 500l-500 -500l-50 50l450 450l-700 700h100zM320 882q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71t30 -71q29 -30 71 -30t71 30z" /> +<glyph unicode="" d="M1200 1200v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900v1025l175 175h925z" /> +<glyph unicode="" d="M947 829l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18l-94 -346l40 -124h592zM1200 800v-700h-200v200h-800v-200h-200v700h200l100 -200h600l100 200h200zM881 176l38 -152q2 -10 -3.5 -17t-15.5 -7h-600q-10 0 -15.5 7t-3.5 17l38 152q2 10 11.5 17t19.5 7 h500q10 0 19.5 -7t11.5 -17z" /> +<glyph unicode="" d="M1200 0v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417zM416 521l178 457l46 -140l116 -317 h-340z" /> +<glyph unicode="" d="M100 1199h471q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111t-162 -38.5h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21 t-29 14t-49 14.5v70zM400 1079v-379h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400z" /> +<glyph unicode="" d="M877 1200l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425z" /> +<glyph unicode="" d="M1150 1200h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49v300h150h700zM100 1000v-800h75l-125 -167l-125 167h75v800h-75l125 167 l125 -167h-75z" /> +<glyph unicode="" d="M950 1201h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50v300h150h700zM200 101h800v75l167 -125l-167 -125v75h-800v-75l-167 125l167 125 v-75z" /> +<glyph unicode="" d="M700 950v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35zM1100 650v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h1000 q21 0 35.5 15t14.5 35zM900 350v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35zM1200 50v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35 t35.5 -15h1100q21 0 35.5 15t14.5 35z" /> +<glyph unicode="" d="M1000 950v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35zM1200 650v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h1100 q21 0 35.5 15t14.5 35zM1000 350v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35zM1200 50v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35 t35.5 -15h1100q21 0 35.5 15t14.5 35z" /> +<glyph unicode="" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="" d="M0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="" d="M0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35zM0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="" d="M400 1100h-100v-1100h100v1100zM700 950v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35zM1100 650v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15 h500q20 0 35 15t15 35zM100 425v75h-201v100h201v75l166 -125zM900 350v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35zM1200 50v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5 v-100q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35z" /> +<glyph unicode="" d="M201 950v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35zM801 1100h100v-1100h-100v1100zM601 650v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15 h500q20 0 35 15t15 35zM1101 425v75h200v100h-200v75l-167 -125zM401 350v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35zM701 50v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5 v-100q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35z" /> +<glyph unicode="" d="M900 925v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53zM1200 300l-300 300l300 300v-600z" /> +<glyph unicode="" d="M1200 1056v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31zM1100 1000h-1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500zM476 750q0 -56 -39 -95t-95 -39t-95 39t-39 95t39 95t95 39t95 -39 t39 -95z" /> +<glyph unicode="" d="M600 1213q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262q0 124 60.5 231.5t165 172t226.5 64.5zM599 514q107 0 182.5 75.5t75.5 182.5t-75.5 182 t-182.5 75t-182 -75.5t-75 -181.5q0 -107 75.5 -182.5t181.5 -75.5z" /> +<glyph unicode="" d="M600 1199q122 0 233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233t47.5 233t127.5 191t191 127.5t233 47.5zM600 173v854q-176 0 -301.5 -125t-125.5 -302t125.5 -302t301.5 -125z " /> +<glyph unicode="" d="M554 1295q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 138.5t-64 210.5q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5zM455 296q-7 6 -18 17 t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156q14 -82 59.5 -136t136.5 -80z" /> +<glyph unicode="" d="M1108 902l113 113l-21 85l-92 28l-113 -113zM1100 625v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5 t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125zM436 341l161 50l412 412l-114 113l-405 -405z" /> +<glyph unicode="" d="M1100 453v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5z M813 431l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209z" /> +<glyph unicode="" d="M1100 569v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5v300q0 165 117.5 282.5t282.5 117.5h300q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69z M625 348l566 567l-136 137l-430 -431l-147 147l-136 -136z" /> +<glyph unicode="" d="M900 303v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198l-300 300l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296z" /> +<glyph unicode="" d="M900 0l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100z" /> +<glyph unicode="" d="M1200 0l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100z" /> +<glyph unicode="" d="M1200 0l-500 488v-488l-564 550l564 550v-487l500 487v-1100z" /> +<glyph unicode="" d="M1100 550l-900 550v-1100z" /> +<glyph unicode="" d="M500 150v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5zM900 150v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800q0 -21 14.5 -35.5t35.5 -14.5h200 q21 0 35.5 14.5t14.5 35.5z" /> +<glyph unicode="" d="M1100 150v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35z" /> +<glyph unicode="" d="M500 0v488l-500 -488v1100l500 -487v487l564 -550z" /> +<glyph unicode="" d="M1050 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488l-500 -488v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M650 1064l-550 -564h1100zM1200 350v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="" d="M777 7l240 240l-353 353l353 353l-240 240l-592 -594z" /> +<glyph unicode="" d="M513 -46l-241 240l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1z" /> +<glyph unicode="" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM500 900v-200h-200v-200h200v-200h200v200h200v200h-200v200h-200z" /> +<glyph unicode="" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM300 700v-200h600v200h-600z" /> +<glyph unicode="" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM247 741l141 -141l-142 -141l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141 l-141 142z" /> +<glyph unicode="" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM546 623l-102 102l-174 -174l276 -277l411 411l-175 174z" /> +<glyph unicode="" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM500 500h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3 q-105 0 -172 -56t-67 -183h144q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5zM500 400v-100h200v100h-200z" /> +<glyph unicode="" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM500 900v-100h200v100h-200zM400 700v-100h100v-200h-100v-100h400v100h-100v300h-300z" /> +<glyph unicode="" d="M1200 700v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194v200h194q15 60 36 104.5t55.5 86t88 69t126.5 40.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203zM700 500v-206q149 48 201 206h-201v200h200 q-25 74 -76 127.5t-124 76.5v-204h-200v203q-75 -24 -130 -77.5t-79 -125.5h209v-200h-210q24 -73 79.5 -127.5t130.5 -78.5v206h200z" /> +<glyph unicode="" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM844 735 l-135 -135l135 -135l-109 -109l-135 135l-135 -135l-109 109l135 135l-135 135l109 109l135 -135l135 135z" /> +<glyph unicode="" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM896 654 l-346 -345l-228 228l141 141l87 -87l204 205z" /> +<glyph unicode="" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM248 385l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5q0 -115 62 -215zM955 809l-564 -564q97 -59 209 -59q171 0 292.5 121.5 t121.5 292.5q0 112 -59 209z" /> +<glyph unicode="" d="M1200 400h-600v-301l-600 448l600 453v-300h600v-300z" /> +<glyph unicode="" d="M600 400h-600v300h600v300l600 -453l-600 -448v301z" /> +<glyph unicode="" d="M1098 600h-298v-600h-300v600h-296l450 600z" /> +<glyph unicode="" d="M998 600l-449 -600l-445 600h296v600h300v-600h298z" /> +<glyph unicode="" d="M600 199v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453z" /> +<glyph unicode="" d="M1200 1200h-400l129 -129l-294 -294l142 -142l294 294l129 -129v400zM565 423l-294 -294l129 -129h-400v400l129 -129l294 294z" /> +<glyph unicode="" d="M871 730l129 -130h-400v400l129 -129l295 295l142 -141zM200 600h400v-400l-129 130l-295 -295l-142 141l295 295z" /> +<glyph unicode="" d="M600 1177q118 0 224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5t45.5 224.5t123 184t184 123t224.5 45.5zM686 549l58 302q4 20 -8 34.5t-33 14.5h-207q-20 0 -32 -14.5t-8 -34.5 l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5zM700 400h-200v-100h200v100z" /> +<glyph unicode="" d="M1200 900h-111v6t-1 15t-3 18l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6h-111v-100h100v-200h400v300h200v-300h400v200h100v100z M731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269zM481 900h-281q-3 0 14 48t35 96l18 47zM100 0h400v400h-400v-400zM700 400h400v-400h-400v400z" /> +<glyph unicode="" d="M0 121l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55l-201 -202 v143zM692 611q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5t86.5 76.5q55 66 367 234z" /> +<glyph unicode="" d="M1261 600l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30l-26 40l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5 t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30zM600 240q64 0 123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212 q0 85 46 158q-102 -87 -226 -258q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5zM484 762l-107 -106q49 -124 154 -191l105 105q-37 24 -75 72t-57 84z" /> +<glyph unicode="" d="M906 1200l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43l-26 40l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148zM1261 600l-26 -40q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5 t-124 -100t-146.5 -79l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52zM513 264l37 141q-107 18 -178.5 101.5t-71.5 193.5q0 85 46 158q-102 -87 -226 -258q210 -282 393 -336z M484 762l-107 -106q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68z" /> +<glyph unicode="" d="M-47 0h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 33 -48 36t-48 -29l-642 -1066q-21 -32 -7.5 -66t50.5 -34zM700 200v100h-200v-100h-345l445 723l445 -723h-345zM700 700h-200v-100l100 -300l100 300v100z" /> +<glyph unicode="" d="M800 711l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -21 -13 -29t-32 1l-94 78h-222l-94 -78q-19 -9 -32 -1t-13 29v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41q0 20 11 44.5t26 38.5 l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339z" /> +<glyph unicode="" d="M941 800l-600 -600h-341v200h259l600 600h241v198l300 -295l-300 -300v197h-159zM381 678l141 142l-181 180h-341v-200h259zM1100 598l300 -295l-300 -300v197h-241l-181 181l141 142l122 -123h159v198z" /> +<glyph unicode="" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" /> +<glyph unicode="" d="M400 900h-300v300h300v-300zM1100 900h-300v300h300v-300zM1100 800v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5t-58 109.5t-31.5 116t-15 104t-3 83v200h300v-250q0 -113 6 -145 q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300z" /> +<glyph unicode="" d="M902 184l226 227l-578 579l-580 -579l227 -227l352 353z" /> +<glyph unicode="" d="M650 218l578 579l-226 227l-353 -353l-352 353l-227 -227z" /> +<glyph unicode="" d="M1198 400v600h-796l215 -200h381v-400h-198l299 -283l299 283h-200zM-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196z" /> +<glyph unicode="" d="M1050 1200h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35 q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43l-100 475q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5z" /> +<glyph unicode="" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" /> +<glyph unicode="" d="M201 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000zM1501 700l-300 -700h-1200l300 700h1200z" /> +<glyph unicode="" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" /> +<glyph unicode="" d="M900 303v197h-600v-197l-300 297l300 298v-198h600v198l300 -298z" /> +<glyph unicode="" d="M31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM100 300h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM900 200h-100v-100h100v100z M1100 200h-100v-100h100v100z" /> +<glyph unicode="" d="M1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35zM325 800l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35q-56 337 -56 351v250v5 q0 13 0.5 18.5t2.5 13t8 10.5t15 3h200zM-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5z" /> +<glyph unicode="" d="M445 1180l-45 -233l-224 78l78 -225l-233 -44l179 -156l-179 -155l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180z" /> +<glyph unicode="" d="M700 1200h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400q0 -75 100 -75h61q123 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5zM700 925l-50 -225h450 v-125l-250 -375h-214l-136 100h-100v375l150 212l100 213h50v-175zM0 800v-600h200v600h-200z" /> +<glyph unicode="" d="M700 0h-50q-27 0 -51 20t-38 48l-96 198l-145 196q-20 26 -20 63v400q0 75 100 75h61q123 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5zM200 400h-200v600h200 v-600zM700 275l-50 225h450v125l-250 375h-214l-136 -100h-100v-375l150 -212l100 -213h50v175z" /> +<glyph unicode="" d="M364 873l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM408 792v-503 l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83zM208 200h-200v600h200v-600z" /> +<glyph unicode="" d="M475 1104l365 -230q7 -4 16.5 -10.5t26 -26t16.5 -36.5v-526q0 -13 -85.5 -93.5t-93.5 -80.5h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-84 0 -139 39t-55 111t54 110t139 37h302l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6zM370 946 l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100h222q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l106 89v502l-342 237zM1199 201h-200v600h200v-600z" /> +<glyph unicode="" d="M1100 473v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90zM911 400h-503l-236 339 l83 86l183 -146q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6v7.5v7v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294zM1000 200v-200h-600v200h600z" /> +<glyph unicode="" d="M305 1104v200h600v-200h-600zM605 310l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15l-230 -362q-15 -31 7 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85l-1 -302q0 -84 38.5 -138t110.5 -54t111 55t39 139v106z M905 804v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146l-83 86l237 339h503z" /> +<glyph unicode="" d="M603 1195q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5zM598 701h-298v-201h300l-2 -194l402 294l-402 298v-197z" /> +<glyph unicode="" d="M597 1195q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5zM200 600l400 -294v194h302v201h-300v197z" /> +<glyph unicode="" d="M603 1195q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5zM300 600h200v-300h200v300h200l-300 400z" /> +<glyph unicode="" d="M603 1195q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5zM500 900v-300h-200l300 -400l300 400h-200v300h-200z" /> +<glyph unicode="" d="M603 1195q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5zM627 1101q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6 q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55 t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q102 -2 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7 q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5 t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 41 1 44q31 -13 58.5 -14.5t39.5 3.5l11 4q6 36 -17 53.5t-64 28.5t-56 23q-19 -3 -37 0zM613 994q0 -18 8 -42.5t16.5 -44t9.5 -23.5q-9 2 -31 5t-36 5t-32 8t-30 14q3 12 16 30t16 25q10 -10 18.5 -10 t14 6t14.5 14.5t16 12.5z" /> +<glyph unicode="" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " /> +<glyph unicode="" d="M1100 1200v-100h-1000v100h1000zM150 1000h900l-350 -500v-300l-200 -200v500z" /> +<glyph unicode="" d="M329 729l142 142l-200 200l129 129h-400v-400l129 129zM1200 1200v-400l-129 129l-200 -200l-142 142l200 200l-129 129h400zM271 129l129 -129h-400v400l129 -129l200 200l142 -142zM1071 271l129 129v-400h-400l129 129l-200 200l142 142z" /> +<glyph unicode="" d="M596 1192q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM596 1010q-171 0 -292.5 -121.5t-121.5 -292.5q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5zM455 905 q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5t16 38.5t39 16.5zM708 821l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5 q0 32 20.5 56.5t51.5 29.5zM855 709q23 0 38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39q0 22 16 38t39 16zM345 709q23 0 39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39t15.5 38.5t38.5 15.5z" /> +<glyph unicode="" d="M649 54l-16 22q-90 125 -293 323q-71 70 -104.5 105.5t-77 89.5t-61 99t-17.5 91q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-203 -198 -293 -323zM844 524l12 12 q64 62 97.5 97t64.5 79t31 72q0 71 -48 119t-105 48q-74 0 -132 -82l-118 -171l-114 174q-51 79 -123 79q-60 0 -109.5 -49t-49.5 -118q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203z" /> +<glyph unicode="" d="M476 406l19 -17l105 105l-212 212l389 389l247 -247l-95 -96l18 -18q46 -46 77 -99l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159q0 -93 66 -159zM123 193l141 -141q66 -66 159 -66q95 0 159 66 l283 283q66 66 66 159t-66 159l-141 141q-12 12 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159q0 -94 66 -160z" /> +<glyph unicode="" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM900 1000h-600v-700h600v700zM600 46q43 0 73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5t-73.5 -30.5t-30.5 -73.5 t30.5 -73.5t73.5 -30.5z" /> +<glyph unicode="" d="M700 1029v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5h139q5 -77 48.5 -126.5t117.5 -64.5v335l-27 7q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5 t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5zM600 755v274q-61 -8 -97.5 -37.5t-36.5 -102.5q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3zM700 548 v-311q170 18 170 151q0 64 -44 99.5t-126 60.5z" /> +<glyph unicode="" d="M866 300l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5t-30 142.5h-221v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5 t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -11 2.5 -24.5t5.5 -24t9.5 -26.5t10.5 -25t14 -27.5t14 -25.5t15.5 -27t13.5 -24h242v-100h-197q8 -50 -2.5 -115t-31.5 -94 q-41 -59 -99 -113q35 11 84 18t70 7q32 1 102 -16t104 -17q76 0 136 30z" /> +<glyph unicode="" d="M300 0l298 300h-198v900h-200v-900h-198zM900 1200l298 -300h-198v-900h-200v900h-198z" /> +<glyph unicode="" d="M400 300h198l-298 -300l-298 300h198v900h200v-900zM1000 1200v-500h-100v100h-100v-100h-100v500h300zM901 1100h-100v-200h100v200zM700 500h300v-200h-99v-100h-100v100h99v100h-200v100zM800 100h200v-100h-300v200h100v-100z" /> +<glyph unicode="" d="M400 300h198l-298 -300l-298 300h198v900h200v-900zM1000 1200v-200h-99v-100h-100v100h99v100h-200v100h300zM800 800h200v-100h-300v200h100v-100zM700 500h300v-500h-100v100h-100v-100h-100v500zM801 200h100v200h-100v-200z" /> +<glyph unicode="" d="M300 0l298 300h-198v900h-200v-900h-198zM900 1100h-100v100h200v-500h-100v400zM1100 500v-500h-100v100h-200v400h300zM1001 400h-100v-200h100v200z" /> +<glyph unicode="" d="M300 0l298 300h-198v900h-200v-900h-198zM1100 1200v-500h-100v100h-200v400h300zM1001 1100h-100v-200h100v200zM900 400h-100v100h200v-500h-100v400z" /> +<glyph unicode="" d="M300 0l298 300h-198v900h-200v-900h-198zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" /> +<glyph unicode="" d="M300 0l298 300h-198v900h-200v-900h-198zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" /> +<glyph unicode="" d="M400 1100h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5v300q0 165 117.5 282.5t282.5 117.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5 t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5z" /> +<glyph unicode="" d="M700 0h-300q-163 0 -281.5 117.5t-118.5 282.5v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5 t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5zM400 800v-500l333 250z" /> +<glyph unicode="" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM900 300v500q0 41 -29.5 70.5t-70.5 29.5h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5 t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5zM800 700h-500l250 -333z" /> +<glyph unicode="" d="M1100 700v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5zM900 300v500q0 41 -29.5 70.5t-70.5 29.5h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5 t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5zM550 733l-250 -333h500z" /> +<glyph unicode="" d="M500 1100h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200zM700 550l-400 -350v200h-300v300h300v200z" /> +<glyph unicode="" d="M403 2l9 -1q13 0 26 16l538 630q15 19 6 36q-8 18 -32 16h-300q1 4 78 219.5t79 227.5q2 17 -6 27l-8 8h-9q-16 0 -25 -15q-4 -5 -98.5 -111.5t-228 -257t-209.5 -238.5q-17 -19 -7 -40q10 -19 32 -19h302q-155 -438 -160 -458q-5 -21 4 -32z" /> +<glyph unicode="" d="M800 200h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185zM900 200v200h-300v300h300v200l400 -350z" /> +<glyph unicode="" d="M1200 700l-149 149l-342 -353l-213 213l353 342l-149 149h500v-500zM1022 571l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5v-300 q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98z" /> +<glyph unicode="" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM600 794 q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" /> +<glyph unicode="" d="M700 800v400h-300v-400h-300l445 -500l450 500h-295zM25 300h1048q11 0 19 -7.5t8 -17.5v-275h-1100v275q0 11 7 18t18 7zM1000 200h-100v-50h100v50z" /> +<glyph unicode="" d="M400 700v-300h300v300h295l-445 500l-450 -500h300zM25 300h1048q11 0 19 -7.5t8 -17.5v-275h-1100v275q0 11 7 18t18 7zM1000 200h-100v-50h100v50z" /> +<glyph unicode="" d="M405 400l596 596l-154 155l-442 -442l-150 151l-155 -155zM25 300h1048q11 0 19 -7.5t8 -17.5v-275h-1100v275q0 11 7 18t18 7zM1000 200h-100v-50h100v50z" /> +<glyph unicode="" d="M409 1103l-97 97l-212 -212l97 -98zM650 861l-149 149l-212 -212l149 -149l-238 -248h700v699zM25 300h1048q11 0 19 -7.5t8 -17.5v-275h-1100v275q0 11 7 18t18 7zM1000 200h-100v-50h100v50z" /> +<glyph unicode="" d="M539 950l-149 -149l212 -212l149 148l248 -237v700h-699zM297 709l-97 -97l212 -212l98 97zM25 300h1048q11 0 19 -7.5t8 -17.5v-275h-1100v275q0 11 7 18t18 7zM1000 200h-100v-50h100v50z" /> +<glyph unicode="" d="M1200 1199v-1079l-475 272l-310 -393v416h-392zM1166 1148l-672 -712v-226z" /> +<glyph unicode="" d="M1100 1000v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1200h-100v-200h100v200z" /> +<glyph unicode="" d="M578 500h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120zM700 1200h-100v-200h100v200zM1300 538l-475 -476l-244 244l123 123l120 -120l353 352z" /> +<glyph unicode="" d="M529 500h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170zM700 1200h-100v-200h100v200zM1167 6l-170 170l-170 -170l-127 127l170 170l-170 170l127 127l170 -170l170 170l127 -128 l-170 -169l170 -170z" /> +<glyph unicode="" d="M700 500h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200zM700 1000h-100v200h100v-200zM1000 600h-200v-300h-200l300 -300l300 300h-200v300z" /> +<glyph unicode="" d="M602 500h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200zM700 1000h-100v200h100v-200zM1000 300h200l-300 300l-300 -300h200v-300h200v300z" /> +<glyph unicode="" d="M1200 900v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h1200zM0 800v-550q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200zM100 500h400v-200h-400v200z" /> +<glyph unicode="" d="M500 1000h400v198l300 -298l-300 -298v198h-400v200zM100 800v200h100v-200h-100zM400 800h-100v200h100v-200zM700 300h-400v-198l-300 298l300 298v-198h400v-200zM800 500h100v-200h-100v200zM1000 500v-200h100v200h-100z" /> +<glyph unicode="" d="M1200 50v1106q0 31 -18 40.5t-44 -7.5l-276 -117q-25 -16 -43.5 -50.5t-18.5 -65.5v-359q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5zM550 1200l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447l-100 203v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300z" /> +<glyph unicode="" d="M1100 106v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394 q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5z" /> +<glyph unicode="" d="M675 1000l-100 100h-375l-100 -100h400l200 -200v-98l295 98h105v200h-425zM500 300v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5zM100 800h300v-200h-300v200zM700 565l400 133 v-163l-400 -133v163zM100 500h300v-200h-300v200zM805 300l295 98v-298h-425l-100 -100h-375l-100 100h400l200 200h105z" /> +<glyph unicode="" d="M179 1169l-162 -162q-1 -11 -0.5 -32.5t16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q16 17 13 40.5t-22 37.5l-192 136q-19 14 -45 12t-42 -19l-119 -118q-143 103 -267 227q-126 126 -227 268l118 118 q17 17 20 41.5t-11 44.5l-139 194q-14 19 -36.5 22t-40.5 -14z" /> +<glyph unicode="" d="M1200 712v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40t-53.5 -36.5t-31 -27.5l-9 -10v-200q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38 t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5zM800 650l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -15 -35.5t-35 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5 t30 -27.5t12 -24l1 -10v-50z" /> +<glyph unicode="" d="M175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250zM1200 100v-100h-1100v100h1100z" /> +<glyph unicode="" d="M600 1100h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300v1000q0 41 29.5 70.5t70.5 29.5zM1000 800h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300v700q0 41 29.5 70.5t70.5 29.5zM400 0v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400h300z" /> +<glyph unicode="" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM200 800v-300h200v-100h-200v-100h300v300h-200v100h200v100h-300zM800 800h-200v-500h200v100h100v300h-100 v100zM800 700v-300h-100v300h100z" /> +<glyph unicode="" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM400 600h-100v200h-100v-500h100v200h100v-200h100v500h-100v-200zM800 800h-200v-500h200v100h100v300h-100 v100zM800 700v-300h-100v300h100z" /> +<glyph unicode="" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM200 800v-500h300v100h-200v300h200v100h-300zM600 800v-500h300v100h-200v300h200v100h-300z" /> +<glyph unicode="" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM500 700l-300 -150l300 -150v300zM600 400l300 150l-300 150v-300z" /> +<glyph unicode="" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM900 800v-500h-700v500h700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM800 700h-130 q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300z" /> +<glyph unicode="" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM200 800v-300h200v-100h-200v-100h300v300h-200v100h200v100h-300zM800 300h100v500h-200v-100h100v-400z M601 300h100v100h-100v-100z" /> +<glyph unicode="" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM300 700v100h-100v-500h300v400h-200zM800 300h100v500h-200v-100h100v-400zM401 400h-100v200h100v-200z M601 300h100v100h-100v-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM1000 900h-900v-700h900v700zM400 700h-200v100h300v-300h-99v-100h-100v100h99v200zM800 700h-100v100h200v-500h-100v400zM201 400h100v-100 h-100v100zM701 300h-100v100h100v-100z" /> +<glyph unicode="" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM800 700h-300 v-200h300v-100h-300l-100 100v200l100 100h300v-100z" /> +<glyph unicode="" d="M596 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM596 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM800 700v-100 h-100v100h-200v-100h200v-100h-200v-100h-100v400h300zM800 400h-100v100h100v-100z" /> +<glyph unicode="" d="M800 300h128q120 0 205 86t85 208q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5q0 -80 56.5 -137t135.5 -57h222v300h400v-300zM700 200h200l-300 -300 l-300 300h200v300h200v-300z" /> +<glyph unicode="" d="M600 714l403 -403q94 26 154.5 104t60.5 178q0 121 -85 207.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5q0 -80 56.5 -137t135.5 -57h8zM700 -100h-200v300h-200l300 300 l300 -300h-200v-300z" /> +<glyph unicode="" d="M700 200h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-155l-75 -45h350l-75 45v155z" /> +<glyph unicode="" d="M700 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -12t1 -11q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5 q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350z" /> +<glyph unicode="💼" d="M800 1000h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100zM500 1000h200v100h-200v-100zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" /> +<glyph unicode="📅" d="M1100 900v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150h1100zM0 800v-750q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100zM100 600h100v-100h-100v100zM300 600h100v-100h-100v100z M500 600h100v-100h-100v100zM700 600h100v-100h-100v100zM900 600h100v-100h-100v100zM100 400h100v-100h-100v100zM300 400h100v-100h-100v100zM500 400h100v-100h-100v100zM700 400h100v-100h-100v100zM900 400h100v-100h-100v100zM100 200h100v-100h-100v100zM300 200 h100v-100h-100v100zM500 200h100v-100h-100v100zM700 200h100v-100h-100v100zM900 200h100v-100h-100v100z" /> +<glyph unicode="📌" d="M902 1185l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207l-380 -303l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15z" /> +<glyph unicode="📎" d="M518 119l69 -60l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163t35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84 t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -79.5 -17t-67.5 -51l-388 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348 q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256z" /> +<glyph unicode="📷" d="M1200 200v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5z M1000 700h-100v100h100v-100zM844 500q0 -100 -72 -172t-172 -72t-172 72t-72 172t72 172t172 72t172 -72t72 -172zM706 500q0 44 -31 75t-75 31t-75 -31t-31 -75t31 -75t75 -31t75 31t31 75z" /> +<glyph unicode="🔒" d="M900 800h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" /> +<glyph unicode="🔔" d="M1062 400h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-22 -9 -63 -23t-167.5 -37t-251.5 -23t-245.5 20.5t-178.5 41.5l-58 20q-18 7 -31 27.5t-13 40.5q0 21 13.5 35.5t33.5 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94 q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327zM600 104q-54 0 -103 6q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6z" /> +<glyph unicode="🔖" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" /> +<glyph unicode="🔥" d="M400 755q2 -12 8 -41.5t8 -43t6 -39.5t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85t5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5 q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129 q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5z" /> +<glyph unicode="🔧" d="M948 778l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138z" /> +</font> +</defs></svg> \ No newline at end of file diff --git a/dspace-jspui/src/main/webapp/static/css/fonts/glyphicons-halflings-regular.ttf b/dspace-jspui/src/main/webapp/static/css/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..be784dc1d5bcb92ab155f578f3723524a3dd9688 GIT binary patch literal 29512 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 literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/static/css/fonts/glyphicons-halflings-regular.woff b/dspace-jspui/src/main/webapp/static/css/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..2cc3e4852a5a42e6aadd6284e067b66e14a57bc7 GIT binary patch literal 16448 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 literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/animated-overlay.gif b/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/animated-overlay.gif new file mode 100644 index 0000000000000000000000000000000000000000..d441f75ebfbdf26a265dfccd670120d25c0a341c GIT binary patch literal 1738 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 ILl_vW0W4M_7XSbN literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png b/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..81f996dac89b3b7b1a5e835ce164acd27d7ae4ee GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U`SzNU|?XFz2B6bfq{W3$=lt9f!VmFsDpul zfwRCPvY3H^!2^ulPG;LNFffRDx;TbdoKB8lW#?IZCh(a?@f1%zVFoVG8TwJ-GafTA zFsPQeMwFx^mZVxG7o{eaq%s&87#iyuSm+vBgcw>{nVMP|ndussTNxNccHOH*(U6;; Zl9^VCTZ6{+w1Xh$db;|#taD0e0sy6XG!y^; literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_flat_55_fbec88_40x100.png b/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_flat_55_fbec88_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..b3d250dde9b5d328bf86ab03a5ccd388e28f140c GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U`SzPW?*1Ax9Wi<0|NtdfKQ0)?>8O%&SH`b z3=EtF9+AZi3=AG%>~=ESj)8%J-_yl0MB{vNf&}a0hF=T}Oc4x>rDkpA3=9maC9V-A zDTyViR>?)Fi6yBFMh1q)x&{`yh87`)mR6>wRz`-p2If`<26J>Dd`8ibo1c=IR*74~ U+kyyx1_lNOPgg&ebxsLQ039td@&Et; literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png b/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..f60d88dd6d201c21927caf4a598eee1d59bed5d3 GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4NVp#K6F?VU^=~1_lPUByV?@|6srw@%;`1 z0|RG)M`SSr1A_+`yPeFoV_;zD^K@|x@i_kW{6aoPMw#Ou-@l*!WipGW@q2{}IZbN2 zO5_e`XUMrsD*f7ZQ%`f*M$4CFw|gH*_I&W4|G_u@+|}CnP__mIj;05%ZMs+8H@W5( zT)I}#+O2FAvvBs>rkQiOb>GD32kj17bVhILhAl-0muqg_zRU1=QBBI$9crn|<z@?O zvxW7Wt^GfPuSwyDZ2p5S>LvWz3lkU^7*tDKBT7;dOH!?pi&7IyQW=a442^XSEOZSm yLJTdfOiitf40H|5tqcsTqF%eBXvob^$xN%nt-+f;_%{Os1B0ilpUXO@geCy~S9h2I literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_glass_85_dfeffc_1x400.png b/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_glass_85_dfeffc_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..3d7b92d1e291ecd7bcdfa0510b01c5de420ed0f8 GIT binary patch literal 341 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4NVp#K6F?VU^=~1_lPUByV?@|6srw@%;`1 z0|RG)M`SSr1A_+`yPeFoV_;yI?CIhd;&J@#6-BN?3=-}izyEDMsL<53fO%$z@B73J z5qlb}TMxeBEMt6|WODN>UzCf)A(oq$%yRA>crv~2?NRrlbBnx~7>*apJilJBcUfj& z!R)<mslL-TFH+9F*|sjn$44RhR%4^c&Bh7GpVsR4U%KVT<N598qNa4~_2CP1PEFgF zlVo_%eA{MA-;0YI`R^6Z+5en*Yrp#2-kinC3=9maC9V-ADTyViR>?)Fi6yBFMh1q) zx&{`yh87`)mR6>wRz?Q82If`<23Aq8-BC2;=BH$)RpQp*%^v)lfq{X+)78&qol`;+ E0N#~<Bme*a literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_glass_95_fef1ec_1x400.png b/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_glass_95_fef1ec_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..20eb6cab098981e24fdf0355889964af5ec6e1df GIT binary patch literal 332 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4NVp#K6F?VU^=~1_lPUByV?@|6srw@%;`1 z0|RG)M`SSr1A_+`yPeFoV_;zD@^o<w@i_kW{6=2JM2Yr~&;N@FJ&#cg6X?Ch=cOER zfMME&3*9cY!V(R<dTBrGPRe$^vt!-Z7_jH+`ifQUTPn`H6J};OUMTbY_JwVwvP>su z70#KoDNS7a(g(9$>w4v)=k~@dJ=ET`c+$n|v%?pMm=wL;DKXQ`N-{RgN<#LT4zGs9 zpQBqITb$#sWOCQlNSQUC6XZPA64!{5l*E!$tK_28#FA77BLhQYT>}eULyHhYODj`T vD<dOa19K|_gSAJ0<uNcYAT;FWr(~v8;?{6yhSMbm1_lOCS3j3^P6<r__hNMB literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png b/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png new file mode 100644 index 0000000000000000000000000000000000000000..80acaa822934da0f183c11504dc8f843214a0b98 GIT binary patch literal 5824 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 literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png b/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..ae7942b14abc2407ef1a74f66edbf600dcc91b99 GIT binary patch literal 333 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU`P>QVqjpHaZj*>fq{W7$=luKKNxUEe80oM zz`$AH5n0T@z~BMKZYQ(t7#JA3JzX3_G|s<0ugK3>C~@H7{k@H6)ox^%c$&BR8k}5a z{q>gUzNUO-?pdCT`WM_{Ie6~w@A~`3@s4{GY=0`A?s5uccyM0-!@ErDEiE%Nl@$}u z&8S)Uy+Cn)+ssmxTY{UH?3j5&&{y}P+OI8}*K<a{|26N!hu-}grp`a5SoXnxCfDQ) zhxm+u<zbz<r9YXz=bPCcuyp*vz`&qd;u=wsl30>zm0XmXSdz+MWMF8lYha;kXc1y) wX=Q3^Wn`dhU~Xk#U={V+9YsTKeoAIqC2kGg?7_bo7#J8lUHx3vIVCg!01h2`GXMYp literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png b/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..9bc578b6eb9aff4d1ad180cbcbcf00e4ec89831c GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU`P>QVqjpHaZj*>fq{W7$=luKKNxUEe80oM zz`$AH5n0T@z~BMKZYQ(t7#J9mJY5_^G|s<0Z^+ePAi{F-WLLsOFV|+y4h4;>|F?f0 zb@IradFYiWGxzDznKL;V>h?95me*cax^$^)=Dawao}Q%Sq*HTLCf#vV>g@Fp`F%T# z$x$b-z*+9~hl)VOkR!K?Dj8fZ^WO5P)-q&ZU{Eb_jVMV;EJ?LWE=o--No6oHFf`UR zu+TNM2r;y@GBvd_GSD?Jw=yuWihAviq9HdwB{QuOw+3(a;NJ`k3=E#GelF{r5}E+< C@?N_D literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-icons_217bc0_256x240.png b/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-icons_217bc0_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..8d2b7e57044465bac0008ff88d23cdebeab6a8b8 GIT binary patch literal 4549 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 G5}E*VqExQ{ literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-icons_2e83ff_256x240.png b/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..84b601bf0f726bf95801da487deaf2344a32e4b8 GIT binary patch literal 4549 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 G5}E)V<8j;o literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-icons_469bdd_256x240.png b/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-icons_469bdd_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..5dff3f962cd744033b2aef575491451a8b2ce6a8 GIT binary patch literal 4549 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 G5}E)A4R(eA literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-icons_6da8d5_256x240.png b/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-icons_6da8d5_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..f7809f8566cd0aaef9af00e7caeca9d3720cf1b0 GIT binary patch literal 4549 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 G5}E)6tc6_w literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-icons_cd0a0a_256x240.png b/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..ed5b6b0930f672fa08e9b9bdbe5e55370fd1dc30 GIT binary patch literal 4549 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 G5}E*8!6`@p literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-icons_d8e7f3_256x240.png b/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-icons_d8e7f3_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..9b46228fb1e80406b2a9a65b694e5674494c2775 GIT binary patch literal 4549 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 HB{Ts5wY1D= literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-icons_f9bd01_256x240.png b/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/images/ui-icons_f9bd01_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..f1f0531ad5b02b7f891d84a6b6db6ce7290b65de GIT binary patch literal 4549 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 Hl+XkK=xKF{ literal 0 HcmV?d00001 diff --git a/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/jquery-ui-1.10.3.custom.css b/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/jquery-ui-1.10.3.custom.css new file mode 100644 index 0000000..b251e3c --- /dev/null +++ b/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/jquery-ui-1.10.3.custom.css @@ -0,0 +1,1177 @@ +/*! jQuery UI - v1.10.3 - 2013-08-25 +* 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=Lucida%20Grande%2CLucida%20Sans%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=5px&bgColorHeader=5c9ccc&bgTextureHeader=gloss_wave&bgImgOpacityHeader=55&borderColorHeader=4297d7&fcHeader=ffffff&iconColorHeader=d8e7f3&bgColorContent=fcfdfd&bgTextureContent=inset_hard&bgImgOpacityContent=100&borderColorContent=a6c9e2&fcContent=222222&iconColorContent=469bdd&bgColorDefault=dfeffc&bgTextureDefault=glass&bgImgOpacityDefault=85&borderColorDefault=c5dbec&fcDefault=2e6e9e&iconColorDefault=6da8d5&bgColorHover=d0e5f5&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=79b7e7&fcHover=1d5987&iconColorHover=217bc0&bgColorActive=f5f8f9&bgTextureActive=inset_hard&bgImgOpacityActive=100&borderColorActive=79b7e7&fcActive=e17009&iconColorActive=f9bd01&bgColorHighlight=fbec88&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=fad42e&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +* Copyright 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%; + /* support: IE10, see #8844 */ + list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); +} +.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-width: 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: Lucida Grande,Lucida Sans,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: Lucida Grande,Lucida Sans,Arial,sans-serif; + font-size: 1em; +} +.ui-widget-content { + border: 1px solid #a6c9e2; + background: #fcfdfd url(images/ui-bg_inset-hard_100_fcfdfd_1x100.png) 50% bottom repeat-x; + color: #222222; +} +.ui-widget-content a { + color: #222222; +} +.ui-widget-header { + border: 1px solid #4297d7; + background: #5c9ccc url(images/ui-bg_gloss-wave_55_5c9ccc_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 #c5dbec; + background: #dfeffc url(images/ui-bg_glass_85_dfeffc_1x400.png) 50% 50% repeat-x; + font-weight: bold; + color: #2e6e9e; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited { + color: #2e6e9e; + 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 #79b7e7; + background: #d0e5f5 url(images/ui-bg_glass_75_d0e5f5_1x400.png) 50% 50% repeat-x; + font-weight: bold; + color: #1d5987; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited { + color: #1d5987; + text-decoration: none; +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active { + border: 1px solid #79b7e7; + background: #f5f8f9 url(images/ui-bg_inset-hard_100_f5f8f9_1x100.png) 50% 50% repeat-x; + font-weight: bold; + color: #e17009; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #e17009; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #fad42e; + background: #fbec88 url(images/ui-bg_flat_55_fbec88_40x100.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; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* For IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url(images/ui-icons_469bdd_256x240.png); +} +.ui-widget-header .ui-icon { + background-image: url(images/ui-icons_d8e7f3_256x240.png); +} +.ui-state-default .ui-icon { + background-image: url(images/ui-icons_6da8d5_256x240.png); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon { + background-image: url(images/ui-icons_217bc0_256x240.png); +} +.ui-state-active .ui-icon { + background-image: url(images/ui-icons_f9bd01_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-blank { background-position: 16px 16px; } +.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: 5px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 5px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 5px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 5px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; + opacity: .3; + 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: .3; + filter: Alpha(Opacity=30); + border-radius: 8px; +} diff --git a/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/jquery-ui-1.10.3.custom.min.css b/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/jquery-ui-1.10.3.custom.min.css new file mode 100644 index 0000000..b532962 --- /dev/null +++ b/dspace-jspui/src/main/webapp/static/css/jquery-ui-1.10.3.custom/redmond/jquery-ui-1.10.3.custom.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.10.3 - 2013-08-25 +* 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=Lucida%20Grande%2CLucida%20Sans%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=5px&bgColorHeader=5c9ccc&bgTextureHeader=gloss_wave&bgImgOpacityHeader=55&borderColorHeader=4297d7&fcHeader=ffffff&iconColorHeader=d8e7f3&bgColorContent=fcfdfd&bgTextureContent=inset_hard&bgImgOpacityContent=100&borderColorContent=a6c9e2&fcContent=222222&iconColorContent=469bdd&bgColorDefault=dfeffc&bgTextureDefault=glass&bgImgOpacityDefault=85&borderColorDefault=c5dbec&fcDefault=2e6e9e&iconColorDefault=6da8d5&bgColorHover=d0e5f5&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=79b7e7&fcHover=1d5987&iconColorHover=217bc0&bgColorActive=f5f8f9&bgTextureActive=inset_hard&bgImgOpacityActive=100&borderColorActive=79b7e7&fcActive=e17009&iconColorActive=f9bd01&bgColorHighlight=fbec88&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=fad42e&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */.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}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.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 #000}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0}.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}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.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}input.ui-button{padding:.4em 1em}.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-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}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:700;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;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;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.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}.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:0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 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:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:400}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:400;margin:-1px}.ui-menu .ui-state-disabled{font-weight:400;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.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:.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}.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:0;background:0;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}.ui-spinner a.ui-spinner-button{border-top:0;border-bottom:0;border-right:0}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;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-width: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,.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:0}.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}.ui-widget{font-family:Lucida Grande,Lucida Sans,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:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #a6c9e2;background:#fcfdfd url(images/ui-bg_inset-hard_100_fcfdfd_1x100.png) 50% bottom repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #4297d7;background:#5c9ccc url(images/ui-bg_gloss-wave_55_5c9ccc_500x100.png) 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #c5dbec;background:#dfeffc url(images/ui-bg_glass_85_dfeffc_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#2e6e9e}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#2e6e9e;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 #79b7e7;background:#d0e5f5 url(images/ui-bg_glass_75_d0e5f5_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#1d5987}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#1d5987;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #79b7e7;background:#f5f8f9 url(images/ui-bg_inset-hard_100_f5f8f9_1x100.png) 50% 50% repeat-x;font-weight:bold;color:#e17009}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#e17009;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fad42e;background:#fbec88 url(images/ui-bg_flat_55_fbec88_40x100.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}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_469bdd_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_d8e7f3_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_6da8d5_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_217bc0_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_f9bd01_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)}.ui-icon-blank{background-position:16px 16px}.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{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}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:5px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:5px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:5px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:5px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px} \ No newline at end of file diff --git a/dspace-jspui/src/main/webapp/static/css/jquery.fileupload-ui-noscript.css b/dspace-jspui/src/main/webapp/static/css/jquery.fileupload-ui-noscript.css new file mode 100644 index 0000000..c450485 --- /dev/null +++ b/dspace-jspui/src/main/webapp/static/css/jquery.fileupload-ui-noscript.css @@ -0,0 +1,27 @@ +@charset "UTF-8"; +/* + * jQuery File Upload UI Plugin NoScript CSS 1.0 + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2012, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/MIT + */ + +.fileinput-button input { + position: static; + opacity: 1; + filter: none; + transform: none; + font-size: inherit; + direction: inherit; +} + +.fileinput-button span, +.fileinput-button i, +.fileupload-buttonbar .delete, +.fileupload-buttonbar .toggle { + display: none; +} diff --git a/dspace-jspui/src/main/webapp/static/css/jquery.fileupload-ui.css b/dspace-jspui/src/main/webapp/static/css/jquery.fileupload-ui.css new file mode 100644 index 0000000..f81b34c --- /dev/null +++ b/dspace-jspui/src/main/webapp/static/css/jquery.fileupload-ui.css @@ -0,0 +1,68 @@ +@charset "UTF-8"; +/* + * jQuery File Upload UI Plugin CSS 8.8.1 + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2010, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/MIT + */ + +.fileinput-button { + position: relative; + overflow: hidden; +} +.fileinput-button input { + position: absolute; + top: 0; + right: 0; + margin: 0; + opacity: 0; + filter: alpha(opacity=0); + transform: translate(-300px, 0) scale(4); + font-size: 23px; + direction: ltr; + cursor: pointer; +} +.fileupload-buttonbar .btn, +.fileupload-buttonbar .toggle { + margin-bottom: 5px; +} +.progress-animated .progress-bar, +.progress-animated .bar { + background: url(../img/progressbar.gif) !important; + filter: none; +} +.fileupload-loading { + float: right; + width: 32px; + height: 32px; + background: url(../img/loading.gif) center no-repeat; + background-size: contain; + display: none; +} +.fileupload-processing .fileupload-loading { + display: block; +} +.files audio, +.files video { + max-width: 300px; +} + +@media (max-width: 767px) { + .fileupload-buttonbar .toggle, + .files .toggle, + .files .btn span { + display: none; + } + .files .name { + width: 80px; + word-wrap: break-word; + } + .files audio, + .files video { + max-width: 80px; + } +} diff --git a/dspace-jspui/src/main/webapp/static/js/bootstrap/bootstrap.js b/dspace-jspui/src/main/webapp/static/js/bootstrap/bootstrap.js new file mode 100644 index 0000000..c3b5873 --- /dev/null +++ b/dspace-jspui/src/main/webapp/static/js/bootstrap/bootstrap.js @@ -0,0 +1,2006 @@ +/* + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +/** +* bootstrap.js v3.0.0 by @fat and @mdo +* Copyright 2013 Twitter Inc. +* http://www.apache.org/licenses/LICENSE-2.0 +*/ +if (!jQuery) { throw new Error("Bootstrap requires jQuery") } + +/* ======================================================================== + * Bootstrap: transition.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#transitions + * ======================================================================== + * Copyright 2013 Twitter, 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. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + 'WebkitTransition' : 'webkitTransitionEnd' + , 'MozTransition' : 'transitionend' + , 'OTransition' : 'oTransitionEnd otransitionend' + , 'transition' : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false, $el = this + $(this).one($.support.transition.end, function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + }) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: alert.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#alerts + * ======================================================================== + * Copyright 2013 Twitter, 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. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.hasClass('alert') ? $this : $this.parent() + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + $parent.trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one($.support.transition.end, removeElement) + .emulateTransitionEnd(150) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + var old = $.fn.alert + + $.fn.alert = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: button.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#buttons + * ======================================================================== + * Copyright 2013 Twitter, 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. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + } + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state = state + 'Text' + + if (!data.resetText) $el.data('resetText', $el[val]()) + + $el[val](data[state] || this.options[state]) + + // push to event loop to allow forms to submit + setTimeout(function () { + state == 'loadingText' ? + $el.addClass(d).attr(d, d) : + $el.removeClass(d).removeAttr(d); + }, 0) + } + + Button.prototype.toggle = function () { + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + .prop('checked', !this.$element.hasClass('active')) + .trigger('change') + if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active') + } + + this.$element.toggleClass('active') + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + var old = $.fn.button + + $.fn.button = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + $btn.button('toggle') + e.preventDefault() + }) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: carousel.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#carousel + * ======================================================================== + * Copyright 2012 Twitter, 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. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = + this.sliding = + this.interval = + this.$active = + this.$items = null + + this.options.pause == 'hover' && this.$element + .on('mouseenter', $.proxy(this.pause, this)) + .on('mouseleave', $.proxy(this.cycle, this)) + } + + Carousel.DEFAULTS = { + interval: 5000 + , pause: 'hover' + , wrap: true + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getActiveIndex = function () { + this.$active = this.$element.find('.item.active') + this.$items = this.$active.parent().children() + + return this.$items.index(this.$active) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getActiveIndex() + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid', function () { that.to(pos) }) + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition.end) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || $active[type]() + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var fallback = type == 'next' ? 'first' : 'last' + var that = this + + if (!$next.length) { + if (!this.options.wrap) return + $next = this.$element.find('.item')[fallback]() + } + + this.sliding = true + + isCycling && this.pause() + + var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) + + if ($next.hasClass('active')) return + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + this.$element.one('slid', function () { + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) + $nextIndicator && $nextIndicator.addClass('active') + }) + } + + if ($.support.transition && this.$element.hasClass('slide')) { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { that.$element.trigger('slid') }, 0) + }) + .emulateTransitionEnd(600) + } else { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid') + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + var old = $.fn.carousel + + $.fn.carousel = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { + var $this = $(this), href + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + $target.carousel(options) + + if (slideIndex = $this.attr('data-slide-to')) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + }) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + $carousel.carousel($carousel.data()) + }) + }) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: collapse.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#collapse + * ======================================================================== + * Copyright 2012 Twitter, 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. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.transitioning = null + + if (this.options.parent) this.$parent = $(this.options.parent) + if (this.options.toggle) this.toggle() + } + + Collapse.DEFAULTS = { + toggle: true + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var actives = this.$parent && this.$parent.find('> .panel > .in') + + if (actives && actives.length) { + var hasData = actives.data('bs.collapse') + if (hasData && hasData.transitioning) return + actives.collapse('hide') + hasData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing') + [dimension](0) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('in') + [dimension]('auto') + this.transitioning = 0 + this.$element.trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one($.support.transition.end, $.proxy(complete, this)) + .emulateTransitionEnd(350) + [dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element + [dimension](this.$element[dimension]()) + [0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse') + .removeClass('in') + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .trigger('hidden.bs.collapse') + .removeClass('collapsing') + .addClass('collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one($.support.transition.end, $.proxy(complete, this)) + .emulateTransitionEnd(350) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + var old = $.fn.collapse + + $.fn.collapse = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { + var $this = $(this), href + var target = $this.attr('data-target') + || e.preventDefault() + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 + var $target = $(target) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $this.data() + var parent = $this.attr('data-parent') + var $parent = parent && $(parent) + + if (!data || !data.transitioning) { + if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') + $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + } + + $target.collapse(option) + }) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#dropdowns + * ======================================================================== + * Copyright 2012 Twitter, 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. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle=dropdown]' + var Dropdown = function (element) { + var $el = $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we we use a backdrop because click events don't delegate + $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus) + } + + $parent.trigger(e = $.Event('show.bs.dropdown')) + + if (e.isDefaultPrevented()) return + + $parent + .toggleClass('open') + .trigger('shown.bs.dropdown') + + $this.focus() + } + + return false + } + + Dropdown.prototype.keydown = function (e) { + if (!/(38|40|27)/.test(e.keyCode)) return + + var $this = $(this) + + e.preventDefault() + e.stopPropagation() + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + if (!isActive || (isActive && e.keyCode == 27)) { + if (e.which == 27) $parent.find(toggle).focus() + return $this.click() + } + + var $items = $('[role=menu] li:not(.divider):visible a', $parent) + + if (!$items.length) return + + var index = $items.index($items.filter(':focus')) + + if (e.keyCode == 38 && index > 0) index-- // up + if (e.keyCode == 40 && index < $items.length - 1) index++ // down + if (!~index) index=0 + + $items.eq(index).focus() + } + + function clearMenus() { + $(backdrop).remove() + $(toggle).each(function (e) { + var $parent = getParent($(this)) + if (!$parent.hasClass('open')) return + $parent.trigger(e = $.Event('hide.bs.dropdown')) + if (e.isDefaultPrevented()) return + $parent.removeClass('open').trigger('hidden.bs.dropdown') + }) + } + + function getParent($this) { + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + var $parent = selector && $(selector) + + return $parent && $parent.length ? $parent : $this.parent() + } + + + // DROPDOWN PLUGIN DEFINITION + // ========================== + + var old = $.fn.dropdown + + $.fn.dropdown = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('dropdown') + + if (!data) $this.data('dropdown', (data = new Dropdown(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.dropdown.Constructor = Dropdown + + + // DROPDOWN NO CONFLICT + // ==================== + + $.fn.dropdown.noConflict = function () { + $.fn.dropdown = old + return this + } + + + // APPLY TO STANDARD DROPDOWN ELEMENTS + // =================================== + + $(document) + .on('click.bs.dropdown.data-api', clearMenus) + .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('click.bs.dropdown.data-api' , toggle, Dropdown.prototype.toggle) + .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: modal.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#modals + * ======================================================================== + * Copyright 2012 Twitter, 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. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // MODAL CLASS DEFINITION + // ====================== + + var Modal = function (element, options) { + this.options = options + this.$element = $(element) + this.$backdrop = + this.isShown = null + + if (this.options.remote) this.$element.load(this.options.remote) + } + + Modal.DEFAULTS = { + backdrop: true + , keyboard: true + , show: true + } + + Modal.prototype.toggle = function (_relatedTarget) { + return this[!this.isShown ? 'show' : 'hide'](_relatedTarget) + } + + Modal.prototype.show = function (_relatedTarget) { + var that = this + var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) + + this.$element.trigger(e) + + if (this.isShown || e.isDefaultPrevented()) return + + this.isShown = true + + this.escape() + + this.$element.on('click.dismiss.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) + + this.backdrop(function () { + var transition = $.support.transition && that.$element.hasClass('fade') + + if (!that.$element.parent().length) { + that.$element.appendTo(document.body) // don't move modals dom position + } + + that.$element.show() + + if (transition) { + that.$element[0].offsetWidth // force reflow + } + + that.$element + .addClass('in') + .attr('aria-hidden', false) + + that.enforceFocus() + + var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget }) + + transition ? + that.$element.find('.modal-dialog') // wait for modal to slide in + .one($.support.transition.end, function () { + that.$element.focus().trigger(e) + }) + .emulateTransitionEnd(300) : + that.$element.focus().trigger(e) + }) + } + + Modal.prototype.hide = function (e) { + if (e) e.preventDefault() + + e = $.Event('hide.bs.modal') + + this.$element.trigger(e) + + if (!this.isShown || e.isDefaultPrevented()) return + + this.isShown = false + + this.escape() + + $(document).off('focusin.bs.modal') + + this.$element + .removeClass('in') + .attr('aria-hidden', true) + .off('click.dismiss.modal') + + $.support.transition && this.$element.hasClass('fade') ? + this.$element + .one($.support.transition.end, $.proxy(this.hideModal, this)) + .emulateTransitionEnd(300) : + this.hideModal() + } + + Modal.prototype.enforceFocus = function () { + $(document) + .off('focusin.bs.modal') // guard against infinite focus loop + .on('focusin.bs.modal', $.proxy(function (e) { + if (this.$element[0] !== e.target && !this.$element.has(e.target).length) { + this.$element.focus() + } + }, this)) + } + + Modal.prototype.escape = function () { + if (this.isShown && this.options.keyboard) { + this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) { + e.which == 27 && this.hide() + }, this)) + } else if (!this.isShown) { + this.$element.off('keyup.dismiss.bs.modal') + } + } + + Modal.prototype.hideModal = function () { + var that = this + this.$element.hide() + this.backdrop(function () { + that.removeBackdrop() + that.$element.trigger('hidden.bs.modal') + }) + } + + Modal.prototype.removeBackdrop = function () { + this.$backdrop && this.$backdrop.remove() + this.$backdrop = null + } + + Modal.prototype.backdrop = function (callback) { + var that = this + var animate = this.$element.hasClass('fade') ? 'fade' : '' + + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate + + this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') + .appendTo(document.body) + + this.$element.on('click.dismiss.modal', $.proxy(function (e) { + if (e.target !== e.currentTarget) return + this.options.backdrop == 'static' + ? this.$element[0].focus.call(this.$element[0]) + : this.hide.call(this) + }, this)) + + if (doAnimate) this.$backdrop[0].offsetWidth // force reflow + + this.$backdrop.addClass('in') + + if (!callback) return + + doAnimate ? + this.$backdrop + .one($.support.transition.end, callback) + .emulateTransitionEnd(150) : + callback() + + } else if (!this.isShown && this.$backdrop) { + this.$backdrop.removeClass('in') + + $.support.transition && this.$element.hasClass('fade')? + this.$backdrop + .one($.support.transition.end, callback) + .emulateTransitionEnd(150) : + callback() + + } else if (callback) { + callback() + } + } + + + // MODAL PLUGIN DEFINITION + // ======================= + + var old = $.fn.modal + + $.fn.modal = function (option, _relatedTarget) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.modal') + var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data) $this.data('bs.modal', (data = new Modal(this, options))) + if (typeof option == 'string') data[option](_relatedTarget) + else if (options.show) data.show(_relatedTarget) + }) + } + + $.fn.modal.Constructor = Modal + + + // MODAL NO CONFLICT + // ================= + + $.fn.modal.noConflict = function () { + $.fn.modal = old + return this + } + + + // MODAL DATA-API + // ============== + + $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { + var $this = $(this) + var href = $this.attr('href') + var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7 + var option = $target.data('modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) + + e.preventDefault() + + $target + .modal(option, this) + .one('hide', function () { + $this.is(':visible') && $this.focus() + }) + }) + + $(document) + .on('show.bs.modal', '.modal', function () { $(document.body).addClass('modal-open') }) + .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') }) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: tooltip.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#tooltip + * Inspired by the original jQuery.tipsy by Jason Frame + * ======================================================================== + * Copyright 2012 Twitter, 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. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // TOOLTIP PUBLIC CLASS DEFINITION + // =============================== + + var Tooltip = function (element, options) { + this.type = + this.options = + this.enabled = + this.timeout = + this.hoverState = + this.$element = null + + this.init('tooltip', element, options) + } + + Tooltip.DEFAULTS = { + animation: true + , placement: 'top' + , selector: false + , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' + , trigger: 'hover focus' + , title: '' + , delay: 0 + , html: false + , container: false + } + + Tooltip.prototype.init = function (type, element, options) { + this.enabled = true + this.type = type + this.$element = $(element) + this.options = this.getOptions(options) + + var triggers = this.options.trigger.split(' ') + + for (var i = triggers.length; i--;) { + var trigger = triggers[i] + + if (trigger == 'click') { + this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) + } else if (trigger != 'manual') { + var eventIn = trigger == 'hover' ? 'mouseenter' : 'focus' + var eventOut = trigger == 'hover' ? 'mouseleave' : 'blur' + + this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) + this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) + } + } + + this.options.selector ? + (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : + this.fixTitle() + } + + Tooltip.prototype.getDefaults = function () { + return Tooltip.DEFAULTS + } + + Tooltip.prototype.getOptions = function (options) { + options = $.extend({}, this.getDefaults(), this.$element.data(), options) + + if (options.delay && typeof options.delay == 'number') { + options.delay = { + show: options.delay + , hide: options.delay + } + } + + return options + } + + Tooltip.prototype.getDelegateOptions = function () { + var options = {} + var defaults = this.getDefaults() + + this._options && $.each(this._options, function (key, value) { + if (defaults[key] != value) options[key] = value + }) + + return options + } + + Tooltip.prototype.enter = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) + + clearTimeout(self.timeout) + + self.hoverState = 'in' + + if (!self.options.delay || !self.options.delay.show) return self.show() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'in') self.show() + }, self.options.delay.show) + } + + Tooltip.prototype.leave = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) + + clearTimeout(self.timeout) + + self.hoverState = 'out' + + if (!self.options.delay || !self.options.delay.hide) return self.hide() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'out') self.hide() + }, self.options.delay.hide) + } + + Tooltip.prototype.show = function () { + var e = $.Event('show.bs.'+ this.type) + + if (this.hasContent() && this.enabled) { + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + var $tip = this.tip() + + this.setContent() + + if (this.options.animation) $tip.addClass('fade') + + var placement = typeof this.options.placement == 'function' ? + this.options.placement.call(this, $tip[0], this.$element[0]) : + this.options.placement + + var autoToken = /\s?auto?\s?/i + var autoPlace = autoToken.test(placement) + if (autoPlace) placement = placement.replace(autoToken, '') || 'top' + + $tip + .detach() + .css({ top: 0, left: 0, display: 'block' }) + .addClass(placement) + + this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) + + var pos = this.getPosition() + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (autoPlace) { + var $parent = this.$element.parent() + + var orgPlacement = placement + var docScroll = document.documentElement.scrollTop || document.body.scrollTop + var parentWidth = this.options.container == 'body' ? window.innerWidth : $parent.outerWidth() + var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight() + var parentLeft = this.options.container == 'body' ? 0 : $parent.offset().left + + placement = placement == 'bottom' && pos.top + pos.height + actualHeight - docScroll > parentHeight ? 'top' : + placement == 'top' && pos.top - docScroll - actualHeight < 0 ? 'bottom' : + placement == 'right' && pos.right + actualWidth > parentWidth ? 'left' : + placement == 'left' && pos.left - actualWidth < parentLeft ? 'right' : + placement + + $tip + .removeClass(orgPlacement) + .addClass(placement) + } + + var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) + + this.applyPlacement(calculatedOffset, placement) + this.$element.trigger('shown.bs.' + this.type) + } + } + + Tooltip.prototype.applyPlacement = function(offset, placement) { + var replace + var $tip = this.tip() + var width = $tip[0].offsetWidth + var height = $tip[0].offsetHeight + + // manually read margins because getBoundingClientRect includes difference + var marginTop = parseInt($tip.css('margin-top'), 10) + var marginLeft = parseInt($tip.css('margin-left'), 10) + + // we must check for NaN for ie 8/9 + if (isNaN(marginTop)) marginTop = 0 + if (isNaN(marginLeft)) marginLeft = 0 + + offset.top = offset.top + marginTop + offset.left = offset.left + marginLeft + + $tip + .offset(offset) + .addClass('in') + + // check to see if placing tip in new offset caused the tip to resize itself + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (placement == 'top' && actualHeight != height) { + replace = true + offset.top = offset.top + height - actualHeight + } + + if (/bottom|top/.test(placement)) { + var delta = 0 + + if (offset.left < 0) { + delta = offset.left * -2 + offset.left = 0 + + $tip.offset(offset) + + actualWidth = $tip[0].offsetWidth + actualHeight = $tip[0].offsetHeight + } + + this.replaceArrow(delta - width + actualWidth, actualWidth, 'left') + } else { + this.replaceArrow(actualHeight - height, actualHeight, 'top') + } + + if (replace) $tip.offset(offset) + } + + Tooltip.prototype.replaceArrow = function(delta, dimension, position) { + this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + "%") : '') + } + + Tooltip.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + + $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) + $tip.removeClass('fade in top bottom left right') + } + + Tooltip.prototype.hide = function () { + var that = this + var $tip = this.tip() + var e = $.Event('hide.bs.' + this.type) + + function complete() { + if (that.hoverState != 'in') $tip.detach() + } + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + $tip.removeClass('in') + + $.support.transition && this.$tip.hasClass('fade') ? + $tip + .one($.support.transition.end, complete) + .emulateTransitionEnd(150) : + complete() + + this.$element.trigger('hidden.bs.' + this.type) + + return this + } + + Tooltip.prototype.fixTitle = function () { + var $e = this.$element + if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') { + $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') + } + } + + Tooltip.prototype.hasContent = function () { + return this.getTitle() + } + + Tooltip.prototype.getPosition = function () { + var el = this.$element[0] + return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : { + width: el.offsetWidth + , height: el.offsetHeight + }, this.$element.offset()) + } + + Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { + return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : + /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } + } + + Tooltip.prototype.getTitle = function () { + var title + var $e = this.$element + var o = this.options + + title = $e.attr('data-original-title') + || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) + + return title + } + + Tooltip.prototype.tip = function () { + return this.$tip = this.$tip || $(this.options.template) + } + + Tooltip.prototype.arrow = function () { + return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow') + } + + Tooltip.prototype.validate = function () { + if (!this.$element[0].parentNode) { + this.hide() + this.$element = null + this.options = null + } + } + + Tooltip.prototype.enable = function () { + this.enabled = true + } + + Tooltip.prototype.disable = function () { + this.enabled = false + } + + Tooltip.prototype.toggleEnabled = function () { + this.enabled = !this.enabled + } + + Tooltip.prototype.toggle = function (e) { + var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this + self.tip().hasClass('in') ? self.leave(self) : self.enter(self) + } + + Tooltip.prototype.destroy = function () { + this.hide().$element.off('.' + this.type).removeData('bs.' + this.type) + } + + + // TOOLTIP PLUGIN DEFINITION + // ========================= + + var old = $.fn.tooltip + + $.fn.tooltip = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tooltip') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.tooltip.Constructor = Tooltip + + + // TOOLTIP NO CONFLICT + // =================== + + $.fn.tooltip.noConflict = function () { + $.fn.tooltip = old + return this + } + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: popover.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#popovers + * ======================================================================== + * Copyright 2012 Twitter, 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. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // POPOVER PUBLIC CLASS DEFINITION + // =============================== + + var Popover = function (element, options) { + this.init('popover', element, options) + } + + if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') + + Popover.DEFAULTS = $.extend({} , $.fn.tooltip.Constructor.DEFAULTS, { + placement: 'right' + , trigger: 'click' + , content: '' + , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' + }) + + + // NOTE: POPOVER EXTENDS tooltip.js + // ================================ + + Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) + + Popover.prototype.constructor = Popover + + Popover.prototype.getDefaults = function () { + return Popover.DEFAULTS + } + + Popover.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + var content = this.getContent() + + $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) + $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content) + + $tip.removeClass('fade top bottom left right in') + + // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do + // this manually by checking the contents. + if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() + } + + Popover.prototype.hasContent = function () { + return this.getTitle() || this.getContent() + } + + Popover.prototype.getContent = function () { + var $e = this.$element + var o = this.options + + return $e.attr('data-content') + || (typeof o.content == 'function' ? + o.content.call($e[0]) : + o.content) + } + + Popover.prototype.arrow = function () { + return this.$arrow = this.$arrow || this.tip().find('.arrow') + } + + Popover.prototype.tip = function () { + if (!this.$tip) this.$tip = $(this.options.template) + return this.$tip + } + + + // POPOVER PLUGIN DEFINITION + // ========================= + + var old = $.fn.popover + + $.fn.popover = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.popover') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.popover', (data = new Popover(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.popover.Constructor = Popover + + + // POPOVER NO CONFLICT + // =================== + + $.fn.popover.noConflict = function () { + $.fn.popover = old + return this + } + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: scrollspy.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#scrollspy + * ======================================================================== + * Copyright 2012 Twitter, 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. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // SCROLLSPY CLASS DEFINITION + // ========================== + + function ScrollSpy(element, options) { + var href + var process = $.proxy(this.process, this) + + this.$element = $(element).is('body') ? $(window) : $(element) + this.$body = $('body') + this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process) + this.options = $.extend({}, ScrollSpy.DEFAULTS, options) + this.selector = (this.options.target + || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + || '') + ' .nav li > a' + this.offsets = $([]) + this.targets = $([]) + this.activeTarget = null + + this.refresh() + this.process() + } + + ScrollSpy.DEFAULTS = { + offset: 10 + } + + ScrollSpy.prototype.refresh = function () { + var offsetMethod = this.$element[0] == window ? 'offset' : 'position' + + this.offsets = $([]) + this.targets = $([]) + + var self = this + var $targets = this.$body + .find(this.selector) + .map(function () { + var $el = $(this) + var href = $el.data('target') || $el.attr('href') + var $href = /^#\w/.test(href) && $(href) + + return ($href + && $href.length + && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null + }) + .sort(function (a, b) { return a[0] - b[0] }) + .each(function () { + self.offsets.push(this[0]) + self.targets.push(this[1]) + }) + } + + ScrollSpy.prototype.process = function () { + var scrollTop = this.$scrollElement.scrollTop() + this.options.offset + var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight + var maxScroll = scrollHeight - this.$scrollElement.height() + var offsets = this.offsets + var targets = this.targets + var activeTarget = this.activeTarget + var i + + if (scrollTop >= maxScroll) { + return activeTarget != (i = targets.last()[0]) && this.activate(i) + } + + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) + && this.activate( targets[i] ) + } + } + + ScrollSpy.prototype.activate = function (target) { + this.activeTarget = target + + $(this.selector) + .parents('.active') + .removeClass('active') + + var selector = this.selector + + '[data-target="' + target + '"],' + + this.selector + '[href="' + target + '"]' + + var active = $(selector) + .parents('li') + .addClass('active') + + if (active.parent('.dropdown-menu').length) { + active = active + .closest('li.dropdown') + .addClass('active') + } + + active.trigger('activate') + } + + + // SCROLLSPY PLUGIN DEFINITION + // =========================== + + var old = $.fn.scrollspy + + $.fn.scrollspy = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.scrollspy') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.scrollspy.Constructor = ScrollSpy + + + // SCROLLSPY NO CONFLICT + // ===================== + + $.fn.scrollspy.noConflict = function () { + $.fn.scrollspy = old + return this + } + + + // SCROLLSPY DATA-API + // ================== + + $(window).on('load', function () { + $('[data-spy="scroll"]').each(function () { + var $spy = $(this) + $spy.scrollspy($spy.data()) + }) + }) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: tab.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#tabs + * ======================================================================== + * Copyright 2012 Twitter, 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. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // TAB CLASS DEFINITION + // ==================== + + var Tab = function (element) { + this.element = $(element) + } + + Tab.prototype.show = function () { + var $this = this.element + var $ul = $this.closest('ul:not(.dropdown-menu)') + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + if ($this.parent('li').hasClass('active')) return + + var previous = $ul.find('.active:last a')[0] + var e = $.Event('show.bs.tab', { + relatedTarget: previous + }) + + $this.trigger(e) + + if (e.isDefaultPrevented()) return + + var $target = $(selector) + + this.activate($this.parent('li'), $ul) + this.activate($target, $target.parent(), function () { + $this.trigger({ + type: 'shown.bs.tab' + , relatedTarget: previous + }) + }) + } + + Tab.prototype.activate = function (element, container, callback) { + var $active = container.find('> .active') + var transition = callback + && $.support.transition + && $active.hasClass('fade') + + function next() { + $active + .removeClass('active') + .find('> .dropdown-menu > .active') + .removeClass('active') + + element.addClass('active') + + if (transition) { + element[0].offsetWidth // reflow for transition + element.addClass('in') + } else { + element.removeClass('fade') + } + + if (element.parent('.dropdown-menu')) { + element.closest('li.dropdown').addClass('active') + } + + callback && callback() + } + + transition ? + $active + .one($.support.transition.end, next) + .emulateTransitionEnd(150) : + next() + + $active.removeClass('in') + } + + + // TAB PLUGIN DEFINITION + // ===================== + + var old = $.fn.tab + + $.fn.tab = function ( option ) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tab') + + if (!data) $this.data('bs.tab', (data = new Tab(this))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.tab.Constructor = Tab + + + // TAB NO CONFLICT + // =============== + + $.fn.tab.noConflict = function () { + $.fn.tab = old + return this + } + + + // TAB DATA-API + // ============ + + $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { + e.preventDefault() + $(this).tab('show') + }) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: affix.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#affix + * ======================================================================== + * Copyright 2012 Twitter, 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. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // AFFIX CLASS DEFINITION + // ====================== + + var Affix = function (element, options) { + this.options = $.extend({}, Affix.DEFAULTS, options) + this.$window = $(window) + .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) + .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) + + this.$element = $(element) + this.affixed = + this.unpin = null + + this.checkPosition() + } + + Affix.RESET = 'affix affix-top affix-bottom' + + Affix.DEFAULTS = { + offset: 0 + } + + Affix.prototype.checkPositionWithEventLoop = function () { + setTimeout($.proxy(this.checkPosition, this), 1) + } + + Affix.prototype.checkPosition = function () { + if (!this.$element.is(':visible')) return + + var scrollHeight = $(document).height() + var scrollTop = this.$window.scrollTop() + var position = this.$element.offset() + var offset = this.options.offset + var offsetTop = offset.top + var offsetBottom = offset.bottom + + if (typeof offset != 'object') offsetBottom = offsetTop = offset + if (typeof offsetTop == 'function') offsetTop = offset.top() + if (typeof offsetBottom == 'function') offsetBottom = offset.bottom() + + var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false : + offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' : + offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false + + if (this.affixed === affix) return + if (this.unpin) this.$element.css('top', '') + + this.affixed = affix + this.unpin = affix == 'bottom' ? position.top - scrollTop : null + + this.$element.removeClass(Affix.RESET).addClass('affix' + (affix ? '-' + affix : '')) + + if (affix == 'bottom') { + this.$element.offset({ top: document.body.offsetHeight - offsetBottom - this.$element.height() }) + } + } + + + // AFFIX PLUGIN DEFINITION + // ======================= + + var old = $.fn.affix + + $.fn.affix = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.affix') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.affix', (data = new Affix(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.affix.Constructor = Affix + + + // AFFIX NO CONFLICT + // ================= + + $.fn.affix.noConflict = function () { + $.fn.affix = old + return this + } + + + // AFFIX DATA-API + // ============== + + $(window).on('load', function () { + $('[data-spy="affix"]').each(function () { + var $spy = $(this) + var data = $spy.data() + + data.offset = data.offset || {} + + if (data.offsetBottom) data.offset.bottom = data.offsetBottom + if (data.offsetTop) data.offset.top = data.offsetTop + + $spy.affix(data) + }) + }) + +}(window.jQuery); diff --git a/dspace-jspui/src/main/webapp/static/js/bootstrap/bootstrap.min.js b/dspace-jspui/src/main/webapp/static/js/bootstrap/bootstrap.min.js new file mode 100644 index 0000000..b897fe9 --- /dev/null +++ b/dspace-jspui/src/main/webapp/static/js/bootstrap/bootstrap.min.js @@ -0,0 +1,13 @@ +/* + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +/** +* bootstrap.js v3.0.0 by @fat and @mdo +* Copyright 2013 Twitter Inc. +* http://www.apache.org/licenses/LICENSE-2.0 +*/ +if(!jQuery)throw new Error("Bootstrap requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]}}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(window.jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(window.jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d)};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.is("input")?"val":"html",e=c.data();a+="Text",e.resetText||c.data("resetText",c[d]()),c[d](e[a]||this.options[a]),setTimeout(function(){"loadingText"==a?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.closest('[data-toggle="buttons"]');if(a.length){var b=this.$element.find("input").prop("checked",!this.$element.hasClass("active")).trigger("change");"radio"===b.prop("type")&&a.find(".active").removeClass("active")}this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition.end&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}this.sliding=!0,f&&this.pause();var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});if(!e.hasClass("active")){if(this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(j),j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid")},0)}).emulateTransitionEnd(600)}else{if(this.$element.trigger(j),j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return f&&this.cycle(),this}};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?(this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350),void 0):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(window.jQuery),+function(a){"use strict";function b(){a(d).remove(),a(e).each(function(b){var d=c(a(this));d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown")),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown"))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){if("ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b),f.trigger(d=a.Event("show.bs.dropdown")),d.isDefaultPrevented())return;f.toggleClass("open").trigger("shown.bs.dropdown"),e.focus()}return!1}},f.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var f=c(d),g=f.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&f.find(e).focus(),d.click();var h=a("[role=menu] li:not(.divider):visible a",f);if(h.length){var i=h.index(h.filter(":focus"));38==b.keyCode&&i>0&&i--,40==b.keyCode&&i<h.length-1&&i++,~i||(i=0),h.eq(i).focus()}}}};var g=a.fn.dropdown;a.fn.dropdown=function(b){return this.each(function(){var c=a(this),d=c.data("dropdown");d||c.data("dropdown",d=new f(this)),"string"==typeof b&&d[b].call(c)})},a.fn.dropdown.Constructor=f,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=g,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",e,f.prototype.toggle).on("keydown.bs.dropdown.data-api",e+", [role=menu]",f.prototype.keydown)}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=c,this.$element=a(b),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.load(this.options.remote)};b.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},b.prototype.toggle=function(a){return this[this.isShown?"hide":"show"](a)},b.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.escape(),this.$element.on("click.dismiss.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(document.body),c.$element.show(),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one(a.support.transition.end,function(){c.$element.focus().trigger(e)}).emulateTransitionEnd(300):c.$element.focus().trigger(e)}))},b.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one(a.support.transition.end,a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},b.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.focus()},this))},b.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},b.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.removeBackdrop(),a.$element.trigger("hidden.bs.modal")})},b.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},b.prototype.backdrop=function(b){var c=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var d=a.support.transition&&c;if(this.$backdrop=a('<div class="modal-backdrop '+c+'" />').appendTo(document.body),this.$element.on("click.dismiss.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),d&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;d?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()):b&&b()};var c=a.fn.modal;a.fn.modal=function(c,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},b.DEFAULTS,e.data(),"object"==typeof c&&c);f||e.data("bs.modal",f=new b(this,g)),"string"==typeof c?f[c](d):g.show&&f.show(d)})},a.fn.modal.Constructor=b,a.fn.modal.noConflict=function(){return a.fn.modal=c,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());b.preventDefault(),e.modal(f,this).one("hide",function(){c.is(":visible")&&c.focus()})}),a(document).on("show.bs.modal",".modal",function(){a(document.body).addClass("modal-open")}).on("hidden.bs.modal",".modal",function(){a(document.body).removeClass("modal-open")})}(window.jQuery),+function(a){"use strict";var b=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};b.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},b.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focus",i="hover"==g?"mouseleave":"blur";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},b.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},b.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show),void 0):c.show()},b.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide),void 0):c.hide()},b.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){if(this.$element.trigger(b),b.isDefaultPrevented())return;var c=this.tip();this.setContent(),this.options.animation&&c.addClass("fade");var d="function"==typeof this.options.placement?this.options.placement.call(this,c[0],this.$element[0]):this.options.placement,e=/\s?auto?\s?/i,f=e.test(d);f&&(d=d.replace(e,"")||"top"),c.detach().css({top:0,left:0,display:"block"}).addClass(d),this.options.container?c.appendTo(this.options.container):c.insertAfter(this.$element);var g=this.getPosition(),h=c[0].offsetWidth,i=c[0].offsetHeight;if(f){var j=this.$element.parent(),k=d,l=document.documentElement.scrollTop||document.body.scrollTop,m="body"==this.options.container?window.innerWidth:j.outerWidth(),n="body"==this.options.container?window.innerHeight:j.outerHeight(),o="body"==this.options.container?0:j.offset().left;d="bottom"==d&&g.top+g.height+i-l>n?"top":"top"==d&&g.top-l-i<0?"bottom":"right"==d&&g.right+h>m?"left":"left"==d&&g.left-h<o?"right":d,c.removeClass(k).addClass(d)}var p=this.getCalculatedOffset(d,g,h,i);this.applyPlacement(p,d),this.$element.trigger("shown.bs."+this.type)}},b.prototype.applyPlacement=function(a,b){var c,d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),a.top=a.top+g,a.left=a.left+h,d.offset(a).addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;if("top"==b&&j!=f&&(c=!0,a.top=a.top+f-j),/bottom|top/.test(b)){var k=0;a.left<0&&(k=-2*a.left,a.left=0,d.offset(a),i=d[0].offsetWidth,j=d[0].offsetHeight),this.replaceArrow(k-e+i,i,"left")}else this.replaceArrow(j-f,j,"top");c&&d.offset(a)},b.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},b.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach()}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,b).emulateTransitionEnd(150):b(),this.$element.trigger("hidden.bs."+this.type),this)},b.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},b.prototype.hasContent=function(){return this.getTitle()},b.prototype.getPosition=function(){var b=this.$element[0];return a.extend({},"function"==typeof b.getBoundingClientRect?b.getBoundingClientRect():{width:b.offsetWidth,height:b.offsetHeight},this.$element.offset())},b.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},b.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},b.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},b.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},b.prototype.enable=function(){this.enabled=!0},b.prototype.disable=function(){this.enabled=!1},b.prototype.toggleEnabled=function(){this.enabled=!this.enabled},b.prototype.toggle=function(b){var c=b?a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;c.tip().hasClass("in")?c.leave(c):c.enter(c)},b.prototype.destroy=function(){this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var c=a.fn.tooltip;a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof c&&c;e||d.data("bs.tooltip",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=c,this}}(window.jQuery),+function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");b.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"html":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(window.jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(c).is("body")?a(window):a(c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#\w/.test(e)&&a(e);return f&&f.length&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parents(".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.attr("data-target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(window.jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top()),"function"==typeof h&&(h=f.bottom());var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;this.affixed!==i&&(this.unpin&&this.$element.css("top",""),this.affixed=i,this.unpin="bottom"==i?e.top-d:null,this.$element.removeClass(b.RESET).addClass("affix"+(i?"-"+i:"")),"bottom"==i&&this.$element.offset({top:document.body.offsetHeight-h-this.$element.height()}))}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(window.jQuery); \ No newline at end of file diff --git a/dspace-jspui/src/main/webapp/static/js/holder.js b/dspace-jspui/src/main/webapp/static/js/holder.js new file mode 100644 index 0000000..f564c05 --- /dev/null +++ b/dspace-jspui/src/main/webapp/static/js/holder.js @@ -0,0 +1,426 @@ +/* + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +/* + +Holder - 2.0 - client side image placeholders +(c) 2012-2013 Ivan Malopinsky / http://imsky.co + +Provided under the Apache 2.0 License: http://www.apache.org/licenses/LICENSE-2.0 +Commercial use requires attribution. + +*/ + +var Holder = Holder || {}; +(function (app, win) { + +var preempted = false, +fallback = false, +canvas = document.createElement('canvas'); + +//getElementsByClassName polyfill +document.getElementsByClassName||(document.getElementsByClassName=function(e){var t=document,n,r,i,s=[];if(t.querySelectorAll)return t.querySelectorAll("."+e);if(t.evaluate){r=".//*[contains(concat(' ', @class, ' '), ' "+e+" ')]",n=t.evaluate(r,t,null,0,null);while(i=n.iterateNext())s.push(i)}else{n=t.getElementsByTagName("*"),r=new RegExp("(^|\\s)"+e+"(\\s|$)");for(i=0;i<n.length;i++)r.test(n[i].className)&&s.push(n[i])}return s}) + +//getComputedStyle polyfill +window.getComputedStyle||(window.getComputedStyle=function(e,t){return this.el=e,this.getPropertyValue=function(t){var n=/(\-([a-z]){1})/g;return t=="float"&&(t="styleFloat"),n.test(t)&&(t=t.replace(n,function(){return arguments[2].toUpperCase()})),e.currentStyle[t]?e.currentStyle[t]:null},this}) + +//http://javascript.nwbox.com/ContentLoaded by Diego Perini with modifications +function contentLoaded(n,t){var l="complete",s="readystatechange",u=!1,h=u,c=!0,i=n.document,a=i.documentElement,e=i.addEventListener?"addEventListener":"attachEvent",v=i.addEventListener?"removeEventListener":"detachEvent",f=i.addEventListener?"":"on",r=function(e){(e.type!=s||i.readyState==l)&&((e.type=="load"?n:i)[v](f+e.type,r,u),!h&&(h=!0)&&t.call(n,null))},o=function(){try{a.doScroll("left")}catch(n){setTimeout(o,50);return}r("poll")};if(i.readyState==l)t.call(n,"lazy");else{if(i.createEventObject&&a.doScroll){try{c=!n.frameElement}catch(y){}c&&o()}i[e](f+"DOMContentLoaded",r,u),i[e](f+s,r,u),n[e](f+"load",r,u)}}; + +//https://gist.github.com/991057 by Jed Schmidt with modifications +function selector(a){ + a=a.match(/^(\W)?(.*)/);var b=document["getElement"+(a[1]?a[1]=="#"?"ById":"sByClassName":"sByTagName")](a[2]); + var ret=[]; b!=null&&(b.length?ret=b:b.length==0?ret=b:ret=[b]); return ret; +} + +//shallow object property extend +function extend(a,b){var c={};for(var d in a)c[d]=a[d];for(var e in b)c[e]=b[e];return c} + +//hasOwnProperty polyfill +if (!Object.prototype.hasOwnProperty) + Object.prototype.hasOwnProperty = function(prop) { + var proto = this.__proto__ || this.constructor.prototype; + return (prop in this) && (!(prop in proto) || proto[prop] !== this[prop]); + } + +function text_size(width, height, template) { + height = parseInt(height,10); + width = parseInt(width,10); + var bigSide = Math.max(height, width) + var smallSide = Math.min(height, width) + var scale = 1 / 12; + var newHeight = Math.min(smallSide * 0.75, 0.75 * bigSide * scale); + return { + height: Math.round(Math.max(template.size, newHeight)) + } +} + +function draw(ctx, dimensions, template, ratio) { + var ts = text_size(dimensions.width, dimensions.height, template); + var text_height = ts.height; + var width = dimensions.width * ratio, + height = dimensions.height * ratio; + var font = template.font ? template.font : "sans-serif"; + canvas.width = width; + canvas.height = height; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.fillStyle = template.background; + ctx.fillRect(0, 0, width, height); + ctx.fillStyle = template.foreground; + ctx.font = "bold " + text_height + "px " + font; + var text = template.text ? template.text : (Math.floor(dimensions.width) + "x" + Math.floor(dimensions.height)); + var text_width = ctx.measureText(text).width; + if (text_width / width >= 0.75) { + text_height = Math.floor(text_height * 0.75 * (width/text_width)); + } + //Resetting font size if necessary + ctx.font = "bold " + (text_height * ratio) + "px " + font; + ctx.fillText(text, (width / 2), (height / 2), width); + return canvas.toDataURL("image/png"); +} + +function render(mode, el, holder, src) { + var dimensions = holder.dimensions, + theme = holder.theme, + text = holder.text ? decodeURIComponent(holder.text) : holder.text; + var dimensions_caption = dimensions.width + "x" + dimensions.height; + theme = (text ? extend(theme, { + text: text + }) : theme); + theme = (holder.font ? extend(theme, { + font: holder.font + }) : theme); + if (mode == "image") { + el.setAttribute("data-src", src); + el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption); + if (fallback || !holder.auto) { + el.style.width = dimensions.width + "px"; + el.style.height = dimensions.height + "px"; + } + if (fallback) { + el.style.backgroundColor = theme.background; + } else { + el.setAttribute("src", draw(ctx, dimensions, theme, ratio)); + } + } else if (mode == "background") { + if (!fallback) { + el.style.backgroundImage = "url(" + draw(ctx, dimensions, theme, ratio) + ")"; + el.style.backgroundSize = dimensions.width + "px " + dimensions.height + "px"; + } + } else if (mode == "fluid") { + el.setAttribute("data-src", src); + el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption); + if (dimensions.height.substr(-1) == "%") { + el.style.height = dimensions.height + } else { + el.style.height = dimensions.height + "px" + } + if (dimensions.width.substr(-1) == "%") { + el.style.width = dimensions.width + } else { + el.style.width = dimensions.width + "px" + } + if (el.style.display == "inline" || el.style.display == "") { + el.style.display = "block"; + } + if (fallback) { + el.style.backgroundColor = theme.background; + } else { + el.holderData = holder; + fluid_images.push(el); + fluid_update(el); + } + } +}; + +function fluid_update(element) { + var images; + if (element.nodeType == null) { + images = fluid_images; + } else { + images = [element] + } + for (i in images) { + var el = images[i] + if (el.holderData) { + var holder = el.holderData; + el.setAttribute("src", draw(ctx, { + height: el.clientHeight, + width: el.clientWidth + }, holder.theme, ratio)); + } + } +} + +function parse_flags(flags, options) { + + var ret = { + theme: settings.themes.gray + }, render = false; + + for (sl = flags.length, j = 0; j < sl; j++) { + var flag = flags[j]; + if (app.flags.dimensions.match(flag)) { + render = true; + ret.dimensions = app.flags.dimensions.output(flag); + } else if (app.flags.fluid.match(flag)) { + render = true; + ret.dimensions = app.flags.fluid.output(flag); + ret.fluid = true; + } else if (app.flags.colors.match(flag)) { + ret.theme = app.flags.colors.output(flag); + } else if (options.themes[flag]) { + //If a theme is specified, it will override custom colors + ret.theme = options.themes[flag]; + } else if (app.flags.text.match(flag)) { + ret.text = app.flags.text.output(flag); + } else if (app.flags.font.match(flag)) { + ret.font = app.flags.font.output(flag); + } else if (app.flags.auto.match(flag)) { + ret.auto = true; + } + } + + return render ? ret : false; + +}; + + + +if (!canvas.getContext) { + fallback = true; +} else { + if (canvas.toDataURL("image/png") + .indexOf("data:image/png") < 0) { + //Android doesn't support data URI + fallback = true; + } else { + var ctx = canvas.getContext("2d"); + } +} + +var dpr = 1, bsr = 1; + +if(!fallback){ + dpr = window.devicePixelRatio || 1, + bsr = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1; +} + +var ratio = dpr / bsr; + +var fluid_images = []; + +var settings = { + domain: "holder.js", + images: "img", + bgnodes: ".holderjs", + themes: { + "gray": { + background: "#eee", + foreground: "#aaa", + size: 12 + }, + "social": { + background: "#3a5a97", + foreground: "#fff", + size: 12 + }, + "industrial": { + background: "#434A52", + foreground: "#C2F200", + size: 12 + } + }, + stylesheet: ".holderjs-fluid {font-size:16px;font-weight:bold;text-align:center;font-family:sans-serif;margin:0}" +}; + + +app.flags = { + dimensions: { + regex: /^(\d+)x(\d+)$/, + output: function (val) { + var exec = this.regex.exec(val); + return { + width: +exec[1], + height: +exec[2] + } + } + }, + fluid: { + regex: /^([0-9%]+)x([0-9%]+)$/, + output: function (val) { + var exec = this.regex.exec(val); + return { + width: exec[1], + height: exec[2] + } + } + }, + colors: { + regex: /#([0-9a-f]{3,})\:#([0-9a-f]{3,})/i, + output: function (val) { + var exec = this.regex.exec(val); + return { + size: settings.themes.gray.size, + foreground: "#" + exec[2], + background: "#" + exec[1] + } + } + }, + text: { + regex: /text\:(.*)/, + output: function (val) { + return this.regex.exec(val)[1]; + } + }, + font: { + regex: /font\:(.*)/, + output: function (val) { + return this.regex.exec(val)[1]; + } + }, + auto: { + regex: /^auto$/ + } +} + +for (var flag in app.flags) { + if (!app.flags.hasOwnProperty(flag)) continue; + app.flags[flag].match = function (val) { + return val.match(this.regex) + } +} + +app.add_theme = function (name, theme) { + name != null && theme != null && (settings.themes[name] = theme); + return app; +}; + +app.add_image = function (src, el) { + var node = selector(el); + if (node.length) { + for (var i = 0, l = node.length; i < l; i++) { + var img = document.createElement("img") + img.setAttribute("data-src", src); + node[i].appendChild(img); + } + } + return app; +}; + +app.run = function (o) { + var options = extend(settings, o), + images = [], imageNodes = [], bgnodes = []; + + if(typeof(options.images) == "string"){ + imageNodes = selector(options.images); + } + else if (window.NodeList && options.images instanceof window.NodeList) { + imageNodes = options.images; + } else if (window.Node && options.images instanceof window.Node) { + imageNodes = [options.images]; + } + + if(typeof(options.bgnodes) == "string"){ + bgnodes = selector(options.bgnodes); + } else if (window.NodeList && options.elements instanceof window.NodeList) { + bgnodes = options.bgnodes; + } else if (window.Node && options.bgnodes instanceof window.Node) { + bgnodes = [options.bgnodes]; + } + + preempted = true; + + for (i = 0, l = imageNodes.length; i < l; i++) images.push(imageNodes[i]); + + var holdercss = document.getElementById("holderjs-style"); + if (!holdercss) { + holdercss = document.createElement("style"); + holdercss.setAttribute("id", "holderjs-style"); + holdercss.type = "text/css"; + document.getElementsByTagName("head")[0].appendChild(holdercss); + } + + if (!options.nocss) { + if (holdercss.styleSheet) { + holdercss.styleSheet.cssText += options.stylesheet; + } else { + holdercss.appendChild(document.createTextNode(options.stylesheet)); + } + } + + var cssregex = new RegExp(options.domain + "\/(.*?)\"?\\)"); + + for (var l = bgnodes.length, i = 0; i < l; i++) { + var src = window.getComputedStyle(bgnodes[i], null) + .getPropertyValue("background-image"); + var flags = src.match(cssregex); + var bgsrc = bgnodes[i].getAttribute("data-background-src"); + + if (flags) { + var holder = parse_flags(flags[1].split("/"), options); + if (holder) { + render("background", bgnodes[i], holder, src); + } + } + else if(bgsrc != null){ + var holder = parse_flags(bgsrc.substr(bgsrc.lastIndexOf(options.domain) + options.domain.length + 1) + .split("/"), options); + if(holder){ + render("background", bgnodes[i], holder, src); + } + } + } + + for (l = images.length, i = 0; i < l; i++) { + + var attr_src = attr_data_src = src = null; + + try{ + attr_src = images[i].getAttribute("src"); + attr_datasrc = images[i].getAttribute("data-src"); + }catch(e){} + + if (attr_datasrc == null && !! attr_src && attr_src.indexOf(options.domain) >= 0) { + src = attr_src; + } else if ( !! attr_datasrc && attr_datasrc.indexOf(options.domain) >= 0) { + src = attr_datasrc; + } + + if (src) { + var holder = parse_flags(src.substr(src.lastIndexOf(options.domain) + options.domain.length + 1) + .split("/"), options); + if (holder) { + if (holder.fluid) { + render("fluid", images[i], holder, src) + } else { + render("image", images[i], holder, src); + } + } + } + } + return app; +}; + +contentLoaded(win, function () { + if (window.addEventListener) { + window.addEventListener("resize", fluid_update, false); + window.addEventListener("orientationchange", fluid_update, false); + } else { + window.attachEvent("onresize", fluid_update) + } + preempted || app.run(); +}); + +if (typeof define === "function" && define.amd) { + define("Holder", [], function () { + return app; + }); +} + +})(Holder, window); diff --git a/dspace-jspui/src/main/webapp/static/js/html5shiv.js b/dspace-jspui/src/main/webapp/static/js/html5shiv.js new file mode 100644 index 0000000..9039884 --- /dev/null +++ b/dspace-jspui/src/main/webapp/static/js/html5shiv.js @@ -0,0 +1,15 @@ +/* + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +/* + HTML5 Shiv v3.6.2pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); +a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x<style>article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}</style>"; +c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="<xyz></xyz>";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| +"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",version:"3.6.2pre",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment(); +for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d<h;d++)c.createElement(e[d]);return c}};l.html5=e;q(f)})(this,document); diff --git a/dspace-jspui/src/main/webapp/static/js/jquery/jquery-1.10.2.min.js b/dspace-jspui/src/main/webapp/static/js/jquery/jquery-1.10.2.min.js new file mode 100644 index 0000000..da41706 --- /dev/null +++ b/dspace-jspui/src/main/webapp/static/js/jquery/jquery-1.10.2.min.js @@ -0,0 +1,6 @@ +/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license +//@ sourceMappingURL=jquery-1.10.2.min.map +*/ +(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.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(g.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,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=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=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},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?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},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||a;var r=k.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:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){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(a){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:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>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,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(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)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~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 ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}: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},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.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},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,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(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===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]||at.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]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(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=at.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),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?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===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.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!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.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:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(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,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},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 a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[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 a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},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"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav></:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t +}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[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,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;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 e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){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,a=0,s=this.length,l=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(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){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;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):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 t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(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(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==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;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},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,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,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.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},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=tt.test(i)?this.mouseHooks:et.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 e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},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 fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(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=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,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.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),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++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.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&&(a?a.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?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):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 pt(e,t){do e=e[t];while(e&&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 pt(e,"nextSibling")},prev:function(e){return pt(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&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=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,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(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(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).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=Lt(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=Lt(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(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(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(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}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 n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&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&&(r&&r.parentNode!==i&&(r=this.nextSibling),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=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(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 Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._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++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.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)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle); +u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var 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.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return 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 Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,"display"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===x.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+"px":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||x.css(e,"display"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}x.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 contextmenu".split(" "),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var mn,yn,vn=x.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=o.href}catch(Ln){yn=a.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return"string"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o["*"]&&s("*")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(" ");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&x.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?x("<div>").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks("once memory"),m=p.statusCode||{},y={},v={},b=0,w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||"*").toLowerCase().match(T)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(mn[3]||("http:"===mn[1]?"80":"443")))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader("If-Modified-Since",x.lastModified[o]),x.etag[o]&&C.setRequestHeader("If-None-Match",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w="abort";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger("ajaxSend",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort("timeout")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||"",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader("Last-Modified"),T&&(x.lastModified[o]=T),T=C.getResponseHeader("etag"),T&&(x.etag[o]=T)),204===e||"HEAD"===p.type?N="nocontent":304===e?N="notmodified":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+"",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?"ajaxSuccess":"ajaxError",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger("ajaxComplete",[C,p]),--x.active||x.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,n){return x.get(e,t,n,"script")}}),x.each(["get","post"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+" "+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(i in u)if(s=i.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(p){return{state:"parsererror",error:a?p:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),x.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=a.head||x("head")[0]||a.documentElement;return{send:function(t,i){n=a.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Fn.pop()||x.expando+"_"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return l||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||x.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&"withCredentials"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+w+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),a=(x.cssNumber[e]||"px"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||".5",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(a=n.start=+a||+r||0,n.unit=o,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,"fxshow");n.queue||(s=x._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(x.support.inlineBlockNeedsLayout&&"inline"!==ln(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?"hidden"in d&&(f=d.hidden):d=x._data(e,"fxshow",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);(i||x._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=x._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,"position");"static"===r&&(e.style.position="relative");var i=x(e),o=i.offset(),a=x.css(e,"top"),s=x.css(e,"left"),l=("absolute"===r||"fixed"===r)&&x.inArray("auto",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),"using"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===x.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(n=e.offset()),n.top+=x.css(e[0],"borderTopWidth",!0),n.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-x.css(r,"marginTop",!0),left:t.left-n.left-x.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:"height",Width:"width"},function(e,n){x.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}))})(window); diff --git a/dspace-jspui/src/main/webapp/static/js/jquery/jquery-ui-1.10.3.custom.min.js b/dspace-jspui/src/main/webapp/static/js/jquery/jquery-ui-1.10.3.custom.min.js new file mode 100644 index 0000000..b0def54 --- /dev/null +++ b/dspace-jspui/src/main/webapp/static/js/jquery/jquery-ui-1.10.3.custom.min.js @@ -0,0 +1,7 @@ +/*! jQuery UI - v1.10.3 - 2013-08-25 +* 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 2013 jQuery Foundation and other contributors Licensed MIT */ + +(function(e,t){function i(t,i){var a,n,r,o=t.nodeName.toLowerCase();return"area"===o?(a=t.parentNode,n=a.name,t.href&&n&&"map"===a.nodeName.toLowerCase()?(r=e("img[usemap=#"+n+"]")[0],!!r&&s(r)):!1):(/input|select|textarea|button|object/.test(o)?!t.disabled:"a"===o?t.href||i:i)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}var a=0,n=/^ui-id-\d+$/;e.ui=e.ui||{},e.extend(e.ui,{version:"1.10.3",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:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),scrollParent:function(){var t;return t=e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?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):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(i){if(i!==t)return this.css("zIndex",i);if(this.length)for(var s,a,n=e(this[0]);n.length&&n[0]!==document;){if(s=n.css("position"),("absolute"===s||"relative"===s||"fixed"===s)&&(a=parseInt(n.css("zIndex"),10),!isNaN(a)&&0!==a))return a;n=n.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++a)})},removeUniqueId:function(){return this.each(function(){n.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var s=e.attr(t,"tabindex"),a=isNaN(s);return(a||s>=0)&&i(t,!a)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(i,s){function a(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===s?["Left","Right"]:["Top","Bottom"],r=s.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+s]=function(i){return i===t?o["inner"+s].call(this):this.each(function(){e(this).css(r,a(this,i)+"px")})},e.fn["outer"+s]=function(t,i){return"number"!=typeof t?o["outer"+s].call(this,t):this.each(function(){e(this).css(r,a(this,t,!0,i)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):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,i,s){var a,n=e.ui[t].prototype;for(a in s)n.plugins[a]=n.plugins[a]||[],n.plugins[a].push([i,s[a]])},call:function(e,t,i){var s,a=e.plugins[t];if(a&&e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType)for(s=0;a.length>s;s++)e.options[a[s][0]]&&a[s][1].apply(e.element,i)}},hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",a=!1;return t[s]>0?!0:(t[s]=1,a=t[s]>0,t[s]=0,a)}})})(jQuery);(function(e,t){var i=0,s=Array.prototype.slice,n=e.cleanData;e.cleanData=function(t){for(var i,s=0;null!=(i=t[s]);s++)try{e(i).triggerHandler("remove")}catch(a){}n(t)},e.widget=function(i,s,n){var a,r,o,h,l={},u=i.split(".")[0];i=i.split(".")[1],a=u+"-"+i,n||(n=s,s=e.Widget),e.expr[":"][a.toLowerCase()]=function(t){return!!e.data(t,a)},e[u]=e[u]||{},r=e[u][i],o=e[u][i]=function(e,i){return this._createWidget?(arguments.length&&this._createWidget(e,i),t):new o(e,i)},e.extend(o,r,{version:n.version,_proto:e.extend({},n),_childConstructors:[]}),h=new s,h.options=e.widget.extend({},h.options),e.each(n,function(i,n){return e.isFunction(n)?(l[i]=function(){var e=function(){return s.prototype[i].apply(this,arguments)},t=function(e){return s.prototype[i].apply(this,e)};return function(){var i,s=this._super,a=this._superApply;return this._super=e,this._superApply=t,i=n.apply(this,arguments),this._super=s,this._superApply=a,i}}(),t):(l[i]=n,t)}),o.prototype=e.widget.extend(h,{widgetEventPrefix:r?h.widgetEventPrefix:i},l,{constructor:o,namespace:u,widgetName:i,widgetFullName:a}),r?(e.each(r._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete r._childConstructors):s._childConstructors.push(o),e.widget.bridge(i,o)},e.widget.extend=function(i){for(var n,a,r=s.call(arguments,1),o=0,h=r.length;h>o;o++)for(n in r[o])a=r[o][n],r[o].hasOwnProperty(n)&&a!==t&&(i[n]=e.isPlainObject(a)?e.isPlainObject(i[n])?e.widget.extend({},i[n],a):e.widget.extend({},a):a);return i},e.widget.bridge=function(i,n){var a=n.prototype.widgetFullName||i;e.fn[i]=function(r){var o="string"==typeof r,h=s.call(arguments,1),l=this;return r=!o&&h.length?e.widget.extend.apply(null,[r].concat(h)):r,o?this.each(function(){var s,n=e.data(this,a);return n?e.isFunction(n[r])&&"_"!==r.charAt(0)?(s=n[r].apply(n,h),s!==n&&s!==t?(l=s&&s.jquery?l.pushStack(s.get()):s,!1):t):e.error("no such method '"+r+"' for "+i+" widget instance"):e.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+r+"'")}):this.each(function(){var t=e.data(this,a);t?t.option(r||{})._init():e.data(this,a,new n(r,this))}),l}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,s){s=e(s||this.defaultElement||this)[0],this.element=e(s),this.uuid=i++,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(),s!==this&&(e.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===s&&this.destroy()}}),this.document=e(s.style?s.ownerDocument:s.document||s),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(i,s){var n,a,r,o=i;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof i)if(o={},n=i.split("."),i=n.shift(),n.length){for(a=o[i]=e.widget.extend({},this.options[i]),r=0;n.length-1>r;r++)a[n[r]]=a[n[r]]||{},a=a[n[r]];if(i=n.pop(),s===t)return a[i]===t?null:a[i];a[i]=s}else{if(s===t)return this.options[i]===t?null:this.options[i];o[i]=s}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!t).attr("aria-disabled",t),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,n){var a,r=this;"boolean"!=typeof i&&(n=s,s=i,i=!1),n?(s=a=e(s),this.bindings=this.bindings.add(s)):(n=s,s=this.element,a=this.widget()),e.each(n,function(n,o){function h(){return i||r.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?r[o]:o).apply(r,arguments):t}"string"!=typeof o&&(h.guid=o.guid=o.guid||h.guid||e.guid++);var l=n.match(/^(\w+)\s*(.*)$/),u=l[1]+r.eventNamespace,c=l[2];c?a.delegate(c,u,h):s.bind(u,h)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,r=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(r)&&r.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var r,o=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),r=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),r&&e.effects&&e.effects.effect[o]?s[t](n):o!==t&&s[o]?s[o](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}})})(jQuery);(function(e){var t=!1;e(document).mouseup(function(){t=!1}),e.widget("ui.mouse",{version:"1.10.3",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):undefined}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(i){if(!t){this._mouseStarted&&this._mouseUp(i),this._mouseDownEvent=i;var s=this,n=1===i.which,a="string"==typeof this.options.cancel&&i.target.nodeName?e(i.target).closest(this.options.cancel).length:!1;return n&&!a&&this._mouseCapture(i)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){s.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(i)&&this._mouseDelayMet(i)&&(this._mouseStarted=this._mouseStart(i)!==!1,!this._mouseStarted)?(i.preventDefault(),!0):(!0===e.data(i.target,this.widgetName+".preventClickEvent")&&e.removeData(i.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return s._mouseMove(e)},this._mouseUpDelegate=function(e){return s._mouseUp(e)},e(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),i.preventDefault(),t=!0,!0)):!0}},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button?this._mouseUp(t):this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);(function(t,e){function i(t,e,i){return[parseFloat(t[0])*(p.test(t[0])?e/100:1),parseFloat(t[1])*(p.test(t[1])?i/100:1)]}function s(e,i){return parseInt(t.css(e,i),10)||0}function n(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}t.ui=t.ui||{};var a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,c=/top|center|bottom/,u=/[\+\-]\d+(\.[\d]+)?%?/,d=/^\w+/,p=/%$/,f=t.fn.position;t.position={scrollbarWidth:function(){if(a!==e)return a;var i,s,n=t("<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=n.children()[0];return t("body").append(n),i=o.offsetWidth,n.css("overflow","scroll"),s=o.offsetWidth,i===s&&(s=n[0].clientWidth),n.remove(),a=i-s},getScrollInfo:function(e){var i=e.isWindow?"":e.element.css("overflow-x"),s=e.isWindow?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,a="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:a?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]);return{element:i,isWindow:s,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s?i.width():i.outerWidth(),height:s?i.height():i.outerHeight()}}},t.fn.position=function(e){if(!e||!e.of)return f.apply(this,arguments);e=t.extend({},e);var a,p,m,g,v,b,_=t(e.of),y=t.position.getWithinInfo(e.within),w=t.position.getScrollInfo(y),x=(e.collision||"flip").split(" "),k={};return b=n(_),_[0].preventDefault&&(e.at="left top"),p=b.width,m=b.height,g=b.offset,v=t.extend({},g),t.each(["my","at"],function(){var t,i,s=(e[this]||"").split(" ");1===s.length&&(s=l.test(s[0])?s.concat(["center"]):c.test(s[0])?["center"].concat(s):["center","center"]),s[0]=l.test(s[0])?s[0]:"center",s[1]=c.test(s[1])?s[1]:"center",t=u.exec(s[0]),i=u.exec(s[1]),k[this]=[t?t[0]:0,i?i[0]:0],e[this]=[d.exec(s[0])[0],d.exec(s[1])[0]]}),1===x.length&&(x[1]=x[0]),"right"===e.at[0]?v.left+=p:"center"===e.at[0]&&(v.left+=p/2),"bottom"===e.at[1]?v.top+=m:"center"===e.at[1]&&(v.top+=m/2),a=i(k.at,p,m),v.left+=a[0],v.top+=a[1],this.each(function(){var n,l,c=t(this),u=c.outerWidth(),d=c.outerHeight(),f=s(this,"marginLeft"),b=s(this,"marginTop"),D=u+f+s(this,"marginRight")+w.width,T=d+b+s(this,"marginBottom")+w.height,C=t.extend({},v),M=i(k.my,c.outerWidth(),c.outerHeight());"right"===e.my[0]?C.left-=u:"center"===e.my[0]&&(C.left-=u/2),"bottom"===e.my[1]?C.top-=d:"center"===e.my[1]&&(C.top-=d/2),C.left+=M[0],C.top+=M[1],t.support.offsetFractions||(C.left=h(C.left),C.top=h(C.top)),n={marginLeft:f,marginTop:b},t.each(["left","top"],function(i,s){t.ui.position[x[i]]&&t.ui.position[x[i]][s](C,{targetWidth:p,targetHeight:m,elemWidth:u,elemHeight:d,collisionPosition:n,collisionWidth:D,collisionHeight:T,offset:[a[0]+M[0],a[1]+M[1]],my:e.my,at:e.at,within:y,elem:c})}),e.using&&(l=function(t){var i=g.left-C.left,s=i+p-u,n=g.top-C.top,a=n+m-d,h={target:{element:_,left:g.left,top:g.top,width:p,height:m},element:{element:c,left:C.left,top:C.top,width:u,height:d},horizontal:0>s?"left":i>0?"right":"center",vertical:0>a?"top":n>0?"bottom":"middle"};u>p&&p>r(i+s)&&(h.horizontal="center"),d>m&&m>r(n+a)&&(h.vertical="middle"),h.important=o(r(i),r(s))>o(r(n),r(a))?"horizontal":"vertical",e.using.call(this,t,h)}),c.offset(t.extend(C,{using:l}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-o-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-o-a,(0>i||r(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>r(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-o-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-o-a,t.top+p+f+m>c&&(0>s||r(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,t.top+p+f+m>u&&(i>0||u>r(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}},function(){var e,i,s,n,a,o=document.getElementsByTagName("body")[0],r=document.createElement("div");e=document.createElement(o?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},o&&t.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(a in s)e.style[a]=s[a];e.appendChild(r),i=o||document.documentElement,i.insertBefore(e,i.firstChild),r.style.cssText="position: absolute; left: 10.7432222px;",n=t(r).offset().left,t.support.offsetFractions=n>10&&11>n,e.innerHTML="",i.removeChild(e)}()})(jQuery);(function(e){e.widget("ui.draggable",e.ui.mouse,{version:"1.10.3",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(){"original"!==this.options.helper||/^(?: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 i=this.options;return this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(e(i.iframeFix===!0?"iframe":i.iframeFix).each(function(){e("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>").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 i=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.offsetParent=this.helper.offsetParent(),this.offsetParentCssPosition=this.offsetParent.css("position"),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.offset.scroll=!1,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,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_mouseDrag:function(t,i){if("fixed"===this.offsetParentCssPosition&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"original"!==this.options.helper||e.contains(this.element[0].ownerDocument,this.element[0])?("invalid"===this.options.revert&&!s||"valid"===this.options.revert&&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(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1):!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){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return s.parents("body").length||s.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s[0]===this.element[0]||/(fixed|absolute)/.test(s.css("position"))||s.css("position","absolute"),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(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(){var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){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,i,s,n=this.options;return n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):"document"===n.containment?(this.containment=[0,0,e(document).width()-this.helperProportions.width-this.margins.left,(e(document).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):n.containment.constructor===Array?(this.containment=n.containment,undefined):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t="hidden"!==i.css("overflow"),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=i),undefined):(this.containment=null,undefined)},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent;return this.offset.scroll||(this.offset.scroll={top:n.scrollTop(),left:n.scrollLeft()}),{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top)*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)*s}},_generatePosition:function(t){var i,s,n,a,o=this.options,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=t.pageX,l=t.pageY;return this.offset.scroll||(this.offset.scroll={top:r.scrollTop(),left:r.scrollLeft()}),this.originalPosition&&(this.containment&&(this.relative_container?(s=this.relative_container.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)}},_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,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s]),"drag"===t&&(this.positionAbs=this._convertPositionTo("absolute")),e.Widget.prototype._trigger.call(this,t,i,s)},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,i){var s=e(this).data("ui-draggable"),n=s.options,a=e.extend({},i,{item:s.element});s.sortables=[],e(n.connectToSortable).each(function(){var i=e.data(this,"ui-sortable");i&&!i.options.disabled&&(s.sortables.push({instance:i,shouldRevert:i.options.revert}),i.refreshPositions(),i._trigger("activate",t,a))})},stop:function(t,i){var s=e(this).data("ui-draggable"),n=e.extend({},i,{item:s.element});e.each(s.sortables,function(){this.instance.isOver?(this.instance.isOver=0,s.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=this.shouldRevert),this.instance._mouseStop(t),this.instance.options.helper=this.instance.options._helper,"original"===s.options.helper&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",t,n))})},drag:function(t,i){var s=e(this).data("ui-draggable"),n=this;e.each(s.sortables,function(){var a=!1,o=this;this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this.instance._intersectsWith(this.instance.containerCache)&&(a=!0,e.each(s.sortables,function(){return this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this!==o&&this.instance._intersectsWith(this.instance.containerCache)&&e.contains(o.instance.element[0],this.instance.element[0])&&(a=!1),a})),a?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=e(n).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 i.helper[0]},t.target=this.instance.currentItem[0],this.instance._mouseCapture(t,!0),this.instance._mouseStart(t,!0,!0),this.instance.offset.click.top=s.offset.click.top,this.instance.offset.click.left=s.offset.click.left,this.instance.offset.parent.left-=s.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=s.offset.parent.top-this.instance.offset.parent.top,s._trigger("toSortable",t),s.dropped=this.instance.element,s.currentItem=s.element,this.instance.fromOutside=s),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(),s._trigger("fromSortable",t),s.dropped=!1)})}}),e.ui.plugin.add("draggable","cursor",{start:function(){var t=e("body"),i=e(this).data("ui-draggable").options;t.css("cursor")&&(i._cursor=t.css("cursor")),t.css("cursor",i.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,i){var s=e(i.helper),n=e(this).data("ui-draggable").options;s.css("opacity")&&(n._opacity=s.css("opacity")),s.css("opacity",n.opacity)},stop:function(t,i){var s=e(this).data("ui-draggable").options;s._opacity&&e(i.helper).css("opacity",s._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(){var t=e(this).data("ui-draggable");t.scrollParent[0]!==document&&"HTML"!==t.scrollParent[0].tagName&&(t.overflowOffset=t.scrollParent.offset())},drag:function(t){var i=e(this).data("ui-draggable"),s=i.options,n=!1;i.scrollParent[0]!==document&&"HTML"!==i.scrollParent[0].tagName?(s.axis&&"x"===s.axis||(i.overflowOffset.top+i.scrollParent[0].offsetHeight-t.pageY<s.scrollSensitivity?i.scrollParent[0].scrollTop=n=i.scrollParent[0].scrollTop+s.scrollSpeed:t.pageY-i.overflowOffset.top<s.scrollSensitivity&&(i.scrollParent[0].scrollTop=n=i.scrollParent[0].scrollTop-s.scrollSpeed)),s.axis&&"y"===s.axis||(i.overflowOffset.left+i.scrollParent[0].offsetWidth-t.pageX<s.scrollSensitivity?i.scrollParent[0].scrollLeft=n=i.scrollParent[0].scrollLeft+s.scrollSpeed:t.pageX-i.overflowOffset.left<s.scrollSensitivity&&(i.scrollParent[0].scrollLeft=n=i.scrollParent[0].scrollLeft-s.scrollSpeed))):(s.axis&&"x"===s.axis||(t.pageY-e(document).scrollTop()<s.scrollSensitivity?n=e(document).scrollTop(e(document).scrollTop()-s.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<s.scrollSensitivity&&(n=e(document).scrollTop(e(document).scrollTop()+s.scrollSpeed))),s.axis&&"y"===s.axis||(t.pageX-e(document).scrollLeft()<s.scrollSensitivity?n=e(document).scrollLeft(e(document).scrollLeft()-s.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<s.scrollSensitivity&&(n=e(document).scrollLeft(e(document).scrollLeft()+s.scrollSpeed)))),n!==!1&&e.ui.ddmanager&&!s.dropBehaviour&&e.ui.ddmanager.prepareOffsets(i,t)}}),e.ui.plugin.add("draggable","snap",{start:function(){var t=e(this).data("ui-draggable"),i=t.options;t.snapElements=[],e(i.snap.constructor!==String?i.snap.items||":data(ui-draggable)":i.snap).each(function(){var i=e(this),s=i.offset();this!==t.element[0]&&t.snapElements.push({item:this,width:i.outerWidth(),height:i.outerHeight(),top:s.top,left:s.left})})},drag:function(t,i){var s,n,a,o,r,h,l,u,c,d,p=e(this).data("ui-draggable"),f=p.options,m=f.snapTolerance,g=i.offset.left,v=g+p.helperProportions.width,b=i.offset.top,y=b+p.helperProportions.height;for(c=p.snapElements.length-1;c>=0;c--)r=p.snapElements[c].left,h=r+p.snapElements[c].width,l=p.snapElements[c].top,u=l+p.snapElements[c].height,r-m>v||g>h+m||l-m>y||b>u+m||!e.contains(p.snapElements[c].item.ownerDocument,p.snapElements[c].item)?(p.snapElements[c].snapping&&p.options.snap.release&&p.options.snap.release.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[c].item})),p.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(s=m>=Math.abs(l-y),n=m>=Math.abs(u-b),a=m>=Math.abs(r-v),o=m>=Math.abs(h-g),s&&(i.position.top=p._convertPositionTo("relative",{top:l-p.helperProportions.height,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:u,left:0}).top-p.margins.top),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r-p.helperProportions.width}).left-p.margins.left),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:h}).left-p.margins.left)),d=s||n||a||o,"outer"!==f.snapMode&&(s=m>=Math.abs(l-b),n=m>=Math.abs(u-y),a=m>=Math.abs(r-g),o=m>=Math.abs(h-v),s&&(i.position.top=p._convertPositionTo("relative",{top:l,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:u-p.helperProportions.height,left:0}).top-p.margins.top),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r}).left-p.margins.left),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:h-p.helperProportions.width}).left-p.margins.left)),!p.snapElements[c].snapping&&(s||n||a||o||d)&&p.options.snap.snap&&p.options.snap.snap.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[c].item})),p.snapElements[c].snapping=s||n||a||o||d)}}),e.ui.plugin.add("draggable","stack",{start:function(){var t,i=this.data("ui-draggable").options,s=e.makeArray(e(i.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});s.length&&(t=parseInt(e(s[0]).css("zIndex"),10)||0,e(s).each(function(i){e(this).css("zIndex",t+i)}),this.css("zIndex",t+s.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i){var s=e(i.helper),n=e(this).data("ui-draggable").options;s.css("zIndex")&&(n._zIndex=s.css("zIndex")),s.css("zIndex",n.zIndex)},stop:function(t,i){var s=e(this).data("ui-draggable").options;s._zIndex&&e(i.helper).css("zIndex",s._zIndex)}})})(jQuery);(function(e){function t(e,t,i){return e>t&&t+i>e}e.widget("ui.droppable",{version:"1.10.3",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t=this.options,i=t.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(i)?i:function(e){return e.is(i)},this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight},e.ui.ddmanager.droppables[t.scope]=e.ui.ddmanager.droppables[t.scope]||[],e.ui.ddmanager.droppables[t.scope].push(this),t.addClasses&&this.element.addClass("ui-droppable")},_destroy:function(){for(var t=0,i=e.ui.ddmanager.droppables[this.options.scope];i.length>t;t++)i[t]===this&&i.splice(t,1);this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){"accept"===t&&(this.accept=e.isFunction(i)?i:function(e){return e.is(i)}),e.Widget.prototype._setOption.apply(this,arguments)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var t=e.data(this,"ui-droppable");return t.options.greedy&&!t.options.disabled&&t.options.scope===s.options.scope&&t.accept.call(t.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(t,{offset:t.element.offset()}),t.options.tolerance)?(n=!0,!1):undefined}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(e,i,s){if(!i.offset)return!1;var n,a,o=(e.positionAbs||e.position.absolute).left,r=o+e.helperProportions.width,h=(e.positionAbs||e.position.absolute).top,l=h+e.helperProportions.height,u=i.offset.left,c=u+i.proportions.width,d=i.offset.top,p=d+i.proportions.height;switch(s){case"fit":return o>=u&&c>=r&&h>=d&&p>=l;case"intersect":return o+e.helperProportions.width/2>u&&c>r-e.helperProportions.width/2&&h+e.helperProportions.height/2>d&&p>l-e.helperProportions.height/2;case"pointer":return n=(e.positionAbs||e.position.absolute).left+(e.clickOffset||e.offset.click).left,a=(e.positionAbs||e.position.absolute).top+(e.clickOffset||e.offset.click).top,t(a,d,i.proportions.height)&&t(n,u,i.proportions.width);case"touch":return(h>=d&&p>=h||l>=d&&p>=l||d>h&&l>p)&&(o>=u&&c>=o||r>=u&&c>=r||u>o&&r>c);default:return!1}},e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions.height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions={width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight})}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e.data(this,"ui-droppable").options.scope===n}),a.length&&(s=e.data(a[0],"ui-droppable"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}}})(jQuery);(function(e){function t(e){return parseInt(e,10)||0}function i(e){return!isNaN(parseInt(e,10))}e.widget("ui.resizable",e.ui.mouse,{version:"1.10.3",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").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=r.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"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=e(this.handles[i],this.element).show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),e(this.handles[i]).length},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=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&&(i(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),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(i){var s,n,a,o=this.options,r=this.element.position(),h=this.element;return this.resizing=!0,/absolute/.test(h.css("position"))?h.css({position:"absolute",top:h.css("top"),left:h.css("left")}):h.is(".ui-draggable")&&h.css({position:"absolute",top:r.top,left:r.left}),this._renderProxy(),s=t(this.helper.css("left")),n=t(this.helper.css("top")),o.containment&&(s+=e(o.containment).scrollLeft()||0,n+=e(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:s,top:n},this.size=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalSize=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalPosition={left:s,top:n},this.sizeDiff={width:h.outerWidth()-h.width(),height:h.outerHeight()-h.height()},this.originalMousePosition={left:i.pageX,top:i.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,a=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===a?this.axis+"-resize":a),h.addClass("ui-resizable-resizing"),this._propagate("start",i),!0},_mouseDrag:function(t){var i,s=this.helper,n={},a=this.originalMousePosition,o=this.axis,r=this.position.top,h=this.position.left,l=this.size.width,u=this.size.height,c=t.pageX-a.left||0,d=t.pageY-a.top||0,p=this._change[o];return p?(i=p.apply(this,[t,c,d]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),this.position.top!==r&&(n.top=this.position.top+"px"),this.position.left!==h&&(n.left=this.position.left+"px"),this.size.width!==l&&(n.width=this.size.width+"px"),this.size.height!==u&&(n.height=this.size.height+"px"),s.css(n),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(n)||this._trigger("resize",t,this.ui()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&e.ui.hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.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,s,n,a,o,r=this.options;o={minWidth:i(r.minWidth)?r.minWidth:0,maxWidth:i(r.maxWidth)?r.maxWidth:1/0,minHeight:i(r.minHeight)?r.minHeight:0,maxHeight:i(r.maxHeight)?r.maxHeight:1/0},(this._aspectRatio||e)&&(t=o.minHeight*this.aspectRatio,n=o.minWidth/this.aspectRatio,s=o.maxHeight*this.aspectRatio,a=o.maxWidth/this.aspectRatio,t>o.minWidth&&(o.minWidth=t),n>o.minHeight&&(o.minHeight=n),o.maxWidth>s&&(o.maxWidth=s),o.maxHeight>a&&(o.maxHeight=a)),this._vBoundaries=o},_updateCache:function(e){this.offset=this.helper.offset(),i(e.left)&&(this.position.left=e.left),i(e.top)&&(this.position.top=e.top),i(e.height)&&(this.size.height=e.height),i(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,s=this.size,n=this.axis;return i(e.height)?e.width=e.height*this.aspectRatio:i(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===n&&(e.left=t.left+(s.width-e.width),e.top=null),"nw"===n&&(e.top=t.top+(s.height-e.height),e.left=t.left+(s.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,s=this.axis,n=i(e.width)&&t.maxWidth&&t.maxWidth<e.width,a=i(e.height)&&t.maxHeight&&t.maxHeight<e.height,o=i(e.width)&&t.minWidth&&t.minWidth>e.width,r=i(e.height)&&t.minHeight&&t.minHeight>e.height,h=this.originalPosition.left+this.originalSize.width,l=this.position.top+this.size.height,u=/sw|nw|w/.test(s),c=/nw|ne|n/.test(s);return o&&(e.width=t.minWidth),r&&(e.height=t.minHeight),n&&(e.width=t.maxWidth),a&&(e.height=t.maxHeight),o&&u&&(e.left=h-t.minWidth),n&&u&&(e.left=h-t.maxWidth),r&&c&&(e.top=l-t.minHeight),a&&c&&(e.top=l-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length){var e,t,i,s,n,a=this.helper||this.element;for(e=0;this._proportionallyResizeElements.length>e;e++){if(n=this._proportionallyResizeElements[e],!this.borderDif)for(this.borderDif=[],i=[n.css("borderTopWidth"),n.css("borderRightWidth"),n.css("borderBottomWidth"),n.css("borderLeftWidth")],s=[n.css("paddingTop"),n.css("paddingRight"),n.css("paddingBottom"),n.css("paddingLeft")],t=0;i.length>t;t++)this.borderDif[t]=(parseInt(i[t],10)||0)+(parseInt(s[t],10)||0);n.css({height:a.height()-this.borderDif[0]-this.borderDif[2]||0,width:a.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),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:++i.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 i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,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 i=e(this).data("ui-resizable"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&e.ui.hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var i,s,n,a,o,r,h,l=e(this).data("ui-resizable"),u=l.options,c=l.element,d=u.containment,p=d instanceof e?d.get(0):/parent/.test(d)?c.parent().get(0):d;p&&(l.containerElement=e(p),/document/.test(d)||d===document?(l.containerOffset={left:0,top:0},l.containerPosition={left:0,top:0},l.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(i=e(p),s=[],e(["Top","Right","Left","Bottom"]).each(function(e,n){s[e]=t(i.css("padding"+n))}),l.containerOffset=i.offset(),l.containerPosition=i.position(),l.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},n=l.containerOffset,a=l.containerSize.height,o=l.containerSize.width,r=e.ui.hasScroll(p,"left")?p.scrollWidth:o,h=e.ui.hasScroll(p)?p.scrollHeight:a,l.parentData={element:p,left:n.left,top:n.top,width:r,height:h}))},resize:function(t){var i,s,n,a,o=e(this).data("ui-resizable"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,c={top:0,left:0},d=o.containerElement;d[0]!==document&&/static/.test(d.css("position"))&&(c=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-c.left),u&&(o.size.height=o.size.width/o.aspectRatio),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio),o.position.top=o._helper?h.top:0),o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top,i=Math.abs((o._helper?o.offset.left-c.left:o.offset.left-c.left)+o.sizeDiff.width),s=Math.abs((o._helper?o.offset.top-c.top:o.offset.top-h.top)+o.sizeDiff.height),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a&&(i-=o.parentData.left),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio))},stop:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=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)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)})},resize:function(t,i){var s=e(this).data("ui-resizable"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0},h=function(t,s){e(t).each(function(){var t=e(this),n=e(this).data("ui-resizable-alsoresize"),a={},o=s&&s.length?s:t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var i=(n[t]||0)+(r[t]||0);i&&i>=0&&(a[t]=i||null)}),t.css(a)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?h(n.alsoResize):e.each(n.alsoResize,function(e,t){h(e,t)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.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("string"==typeof i.ghost?i.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"),i=t.options,s=t.size,n=t.originalSize,a=t.originalPosition,o=t.axis,r="number"==typeof i.grid?[i.grid,i.grid]:i.grid,h=r[0]||1,l=r[1]||1,u=Math.round((s.width-n.width)/h)*h,c=Math.round((s.height-n.height)/l)*l,d=n.width+u,p=n.height+c,f=i.maxWidth&&d>i.maxWidth,m=i.maxHeight&&p>i.maxHeight,g=i.minWidth&&i.minWidth>d,v=i.minHeight&&i.minHeight>p;i.grid=r,g&&(d+=h),v&&(p+=l),f&&(d-=h),m&&(p-=l),/^(se|s|e)$/.test(o)?(t.size.width=d,t.size.height=p):/^(ne)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.top=a.top-c):/^(sw)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.left=a.left-u):(t.size.width=d,t.size.height=p,t.position.top=a.top-c,t.position.left=a.left-u)}})})(jQuery);(function(e){e.widget("ui.selectable",e.ui.mouse,{version:"1.10.3",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,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.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("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):undefined}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}})})(jQuery);(function(t){function e(t,e,i){return t>e&&e+i>t}function i(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))}t.widget("ui.sortable",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",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 t=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===t.axis||i(this.items[0].item):!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 t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_setOption:function(e,i){"disabled"===e?(this.options[e]=i,this.widget().toggleClass("ui-sortable-disabled",!!i)):t.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(e,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,a.widgetName+"-item")===a?(s=t(this),!1):undefined}),t.data(e.target,a.widgetName+"-item")===a&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),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},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.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(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=t("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!o.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:e.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:e.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(e.pageY-t(document).scrollTop()<o.scrollSensitivity?r=t(document).scrollTop(t(document).scrollTop()-o.scrollSpeed):t(window).height()-(e.pageY-t(document).scrollTop())<o.scrollSensitivity&&(r=t(document).scrollTop(t(document).scrollTop()+o.scrollSpeed)),e.pageX-t(document).scrollLeft()<o.scrollSensitivity?r=t(document).scrollLeft(t(document).scrollLeft()-o.scrollSpeed):t(window).width()-(e.pageX-t(document).scrollLeft())<o.scrollSensitivity&&(r=t(document).scrollLeft(t(document).scrollLeft()+o.scrollSpeed))),r!==!1&&t.ui.ddmanager&&!o.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=t.left,o=a+t.width,r=t.top,h=r+t.height,l=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+l>r&&h>s+l,d="y"===this.options.axis||e+c>a&&o>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var i="x"===this.options.axis||e(this.positionAbs.top+this.offset.click.top,t.top,t.height),s="y"===this.options.axis||e(this.positionAbs.left+this.offset.click.left,t.left,t.width),n=i&&s,a=this._getDragVerticalDirection(),o=this._getDragHorizontalDirection();return n?this.floating?o&&"right"===o||"down"===a?2:1:a&&("down"===a?2:1):!1},_intersectsWithSides:function(t){var i=e(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),s=e(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return this.floating&&a?"right"===a&&s||"left"===a&&!s:n&&("down"===n&&i||"up"===n&&!i)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){var i,s,n,a,o=[],r=[],h=this._connectWith();if(h&&e)for(i=h.length-1;i>=0;i--)for(n=t(h[i]),s=n.length-1;s>=0;s--)a=t.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&r.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(r.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),i=r.length-1;i>=0;i--)r[i][0].each(function(){o.push(this)});return t(o)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i]),s=n.length-1;s>=0;s--)a=t.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(u.push([t.isFunction(a.options.items)?a.options.items.call(a.element[0],e,{item:this.currentItem}):t(a.options.items,a.element),a]),this.containers.push(a));for(i=u.length-1;i>=0;i--)for(o=u[i][1],r=u[i][0],s=0,l=r.length;l>s;s++)h=t(r[s]),h.data(this.widgetName+"-item",o),c.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]).addClass(i||e.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?e.currentItem.children().each(function(){t("<td> </td>",e.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(n)}):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_contactContainers:function(s){var n,a,o,r,h,l,c,u,d,p,f=null,m=null;for(n=this.containers.length-1;n>=0;n--)if(!t.contains(this.currentItem[0],this.containers[n].element[0]))if(this._intersectsWith(this.containers[n].containerCache)){if(f&&t.contains(this.containers[n].element[0],f.element[0]))continue;f=this.containers[n],m=n}else this.containers[n].containerCache.over&&(this.containers[n]._trigger("out",s,this._uiHash(this)),this.containers[n].containerCache.over=0);if(f)if(1===this.containers.length)this.containers[m].containerCache.over||(this.containers[m]._trigger("over",s,this._uiHash(this)),this.containers[m].containerCache.over=1);else{for(o=1e4,r=null,p=f.floating||i(this.currentItem),h=p?"left":"top",l=p?"width":"height",c=this.positionAbs[h]+this.offset.click[h],a=this.items.length-1;a>=0;a--)t.contains(this.containers[m].element[0],this.items[a].item[0])&&this.items[a].item[0]!==this.currentItem[0]&&(!p||e(this.positionAbs.top+this.offset.click.top,this.items[a].top,this.items[a].height))&&(u=this.items[a].item.offset()[h],d=!1,Math.abs(u-c)>Math.abs(u+this.items[a][l]-c)&&(d=!0,u+=this.items[a][l]),o>Math.abs(u-c)&&(o=Math.abs(u-c),r=this.items[a],this.direction=d?"up":"down"));if(!r&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[m])return;r?this._rearrange(s,r,null,!0):this._rearrange(s,null,this.containers[m].element,!0),this._trigger("change",s,this._uiHash()),this.containers[m]._trigger("change",s,this._uiHash(this)),this.currentContainer=this.containers[m],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[m]._trigger("over",s,this._uiHash(this)),this.containers[m].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,t("document"===n.containment?document:window).width()-this.helperProportions.width-this.margins.left,(t("document"===n.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,a=e.pageX,o=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){this.reverting=!1;var i,s=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)("auto"===this._storedCSS[i]||"static"===this._storedCSS[i])&&(this._storedCSS[i]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&s.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||s.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(s.push(function(t){this._trigger("remove",t,this._uiHash())}),s.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),s.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),i=this.containers.length-1;i>=0;i--)e||s.push(function(t){return function(e){t._trigger("deactivate",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over&&(s.push(function(t){return function(e){t._trigger("out",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,this.cancelHelperRemoval){if(!e){for(this._trigger("beforeStop",t,this._uiHash()),i=0;s.length>i;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!1}if(e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null,!e){for(i=0;s.length>i;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!0},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}})})(jQuery);(function(t){var e=0,i={},s={};i.height=i.paddingTop=i.paddingBottom=i.borderTopWidth=i.borderBottomWidth="hide",s.height=s.paddingTop=s.paddingBottom=s.borderTopWidth=s.borderBottomWidth="show",t.widget("ui.accordion",{version:"1.10.3",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> 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 e=this.options;this.prevShow=this.prevHide=t(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t(),content:this.active.length?this.active.next():t()}},_createIcons:function(){var e=this.options.icons;e&&(t("<span>").addClass("ui-accordion-header-icon ui-icon "+e.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(e.header).addClass(e.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;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(),t=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")}),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),undefined):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),"disabled"===t&&this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!e),undefined)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),a=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(t(e.target).attr("tabIndex",-1),t(a).attr("tabIndex",0),a.focus(),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().focus()},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.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 i,s=this.options,n=s.heightStyle,a=this.element.parent(),o=this.accordionId="ui-accordion-"+(this.element.attr("id")||++e);this.active=this._findActive(s.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(e){var i=t(this),s=i.attr("id"),n=i.next(),a=n.attr("id");s||(s=o+"-header-"+e,i.attr("id",s)),a||(a=o+"-panel-"+e,n.attr("id",a)),i.attr("aria-controls",a),n.attr("aria-labelledby",s)}).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(s.event),"fill"===n?(i=a.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.headers.each(function(){i-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===n&&(i=0,this.headers.next().each(function(){i=Math.max(i,t(this).css("height","").height())}).height(i))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?t():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?t():n,newPanel:r};e.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",e,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?t():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-expanded":"false","aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr("tabIndex",-1):i.length&&this.headers.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr({"aria-expanded":"true","aria-hidden":"false"}).prev().attr({"aria-selected":"true",tabIndex:0})},_animate:function(t,e,n){var a,o,r,h=this,l=0,c=t.length&&(!e.length||t.index()<e.index()),u=this.options.animate||{},d=c&&u.down||u,p=function(){h._toggleComplete(n)};return"number"==typeof d&&(r=d),"string"==typeof d&&(o=d),o=o||d.easing||u.easing,r=r||d.duration||u.duration,e.length?t.length?(a=t.show().outerHeight(),e.animate(i,{duration:r,easing:o,step:function(t,e){e.now=Math.round(t)}}),t.hide().animate(s,{duration:r,easing:o,complete:p,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?l+=i.now:"content"!==h.options.heightStyle&&(i.now=Math.round(a-e.outerHeight()-l),l=0)}}),undefined):e.animate(i,r,o,p):t.animate(s,r,o,p)},_toggleComplete:function(t){var e=t.oldPanel;e.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}})})(jQuery);(function(t){var e=0;t.widget("ui.autocomplete",{version:"1.10.3",defaultElement:"<input>",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 e,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,undefined;e=!1,s=!1,i=!1;var a=t.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:e=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case a.UP:e=!0,this._keyEvent("previous",n);break;case a.DOWN:e=!0,this._keyEvent("next",n);break;case a.ENTER:case a.NUMPAD_ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),undefined;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),undefined):(this._searchTimeout(t),undefined)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,undefined):(clearTimeout(this.searching),this.close(t),this._change(t),undefined)}}),this._initSource(),this.menu=t("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().data("ui-menu"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];t(e.target).closest(".ui-menu-item").length||this._delay(function(){var e=this;this.document.one("mousedown",function(s){s.target===e.element[0]||s.target===i||t.contains(i,s.target)||e.close()})})},menufocus:function(e,i){if(this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type)))return this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),undefined;var s=i.item.data("ui-autocomplete-item");!1!==this._trigger("focus",e,{item:s})?e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(s.value):this.liveRegion.text(s.value)},menuselect:function(t,e){var i=e.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",t,{item:i})&&this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=t("<span>",{role:"status","aria-live":"polite"}).addClass("ui-helper-hidden-accessible").insertBefore(this.element),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e||(e=this.element.closest(".ui-front")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){this.term!==this._value()&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):this._trigger("search",e)!==!1?this._search(t):undefined},_search:function(t){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var t=this,i=++e;return function(s){i===e&&t.__response(s),t.pending--,t.pending||t.element.removeClass("ui-autocomplete-loading")}},__response:function(t){t&&(t=this._normalize(t)),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return"string"==typeof e?{label:e,value:e}:t.extend({label:e.label||e.value,value:e.value||e.label},e)})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var s=this;t.each(i,function(t,i){s._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<a>").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this._value(this.term),this.menu.blur(),undefined):(this.menu[t](e),undefined):(this.search(null,e),undefined)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var e;this._superApply(arguments),this.options.disabled||this.cancelSearch||(e=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.text(e))}})})(jQuery);(function(t){var e,i,s,n,a="ui-button ui-widget ui-state-default ui-corner-all",o="ui-state-hover ui-state-active ",r="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",h=function(){var e=t(this);setTimeout(function(){e.find(":ui-button").button("refresh")},1)},l=function(e){var i=e.name,s=e.form,n=t([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?t(s).find("[name='"+i+"']"):t("[name='"+i+"']",e.ownerDocument).filter(function(){return!this.form})),n};t.widget("ui.button",{version:"1.10.3",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,h),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var o=this,r=this.options,c="checkbox"===this.type||"radio"===this.type,u=c?"":"ui-state-active",d="ui-state-focus";null===r.label&&(r.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(a).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){r.disabled||this===e&&t(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){r.disabled||t(this).removeClass(u)}).bind("click"+this.eventNamespace,function(t){r.disabled&&(t.preventDefault(),t.stopImmediatePropagation())}),this.element.bind("focus"+this.eventNamespace,function(){o.buttonElement.addClass(d)}).bind("blur"+this.eventNamespace,function(){o.buttonElement.removeClass(d)}),c&&(this.element.bind("change"+this.eventNamespace,function(){n||o.refresh()}),this.buttonElement.bind("mousedown"+this.eventNamespace,function(t){r.disabled||(n=!1,i=t.pageX,s=t.pageY)}).bind("mouseup"+this.eventNamespace,function(t){r.disabled||(i!==t.pageX||s!==t.pageY)&&(n=!0)})),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return r.disabled||n?!1:undefined}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(r.disabled||n)return!1;t(this).addClass("ui-state-active"),o.buttonElement.attr("aria-pressed","true");var e=o.element[0];l(e).not(e).map(function(){return t(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return r.disabled?!1:(t(this).addClass("ui-state-active"),e=this,o.document.one("mouseup",function(){e=null}),undefined)}).bind("mouseup"+this.eventNamespace,function(){return r.disabled?!1:(t(this).removeClass("ui-state-active"),undefined)}).bind("keydown"+this.eventNamespace,function(e){return r.disabled?!1:((e.keyCode===t.ui.keyCode.SPACE||e.keyCode===t.ui.keyCode.ENTER)&&t(this).addClass("ui-state-active"),undefined)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){t(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(e){e.keyCode===t.ui.keyCode.SPACE&&t(this).click()})),this._setOption("disabled",r.disabled),this._resetButton()},_determineButtonType:function(){var t,e,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(t=this.element.parents().last(),e="label[for='"+this.element.attr("id")+"']",this.buttonElement=t.find(e),this.buttonElement.length||(t=t.length?t.siblings():this.element.siblings(),this.buttonElement=t.filter(e),this.buttonElement.length||(this.buttonElement=t.find(e))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(a+" "+o+" "+r).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(t,e){return this._super(t,e),"disabled"===t?(e?this.element.prop("disabled",!0):this.element.prop("disabled",!1),undefined):(this._resetButton(),undefined)},refresh:function(){var e=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");e!==this.options.disabled&&this._setOption("disabled",e),"radio"===this.type?l(this.element[0]).each(function(){t(this).is(":checked")?t(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):t(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if("input"===this.type)return this.options.label&&this.element.val(this.options.label),undefined;var e=this.buttonElement.removeClass(r),i=t("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(e.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push("ui-button-text-icon"+(n?"s":s.primary?"-primary":"-secondary")),s.primary&&e.prepend("<span class='ui-button-icon-primary ui-icon "+s.primary+"'></span>"),s.secondary&&e.append("<span class='ui-button-icon-secondary ui-icon "+s.secondary+"'></span>"),this.options.text||(a.push(n?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||e.attr("title",t.trim(i)))):a.push("ui-button-text-only"),e.addClass(a.join(" "))}}),t.widget("ui.buttonset",{version:"1.10.3",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(t,e){"disabled"===t&&this.buttons.button("option",t,e),this._super(t,e)},refresh:function(){var e="rtl"===this.element.css("direction");this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return t(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(e?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(e?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return t(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}})})(jQuery);(function(t,e){function i(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.dpDiv=s(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function s(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.delegate(i,"mouseout",function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",function(){t.datepicker._isDisabledDatepicker(a.inline?e.parent()[0]:a.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))})}function n(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}t.extend(t.ui,{datepicker:{version:"1.10.3"}});var a,r="datepicker";t.extend(i.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return n(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n,a;s=e.nodeName.toLowerCase(),n="div"===s||"span"===s,e.id||(this.uuid+=1,e.id="dp"+this.uuid),a=this._newInst(t(e),n),a.settings=t.extend({},i||{}),"input"===s?this._connectDatepicker(e,a):n&&this._inlineDatepicker(e,a)},_newInst:function(e,i){var n=e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:n,input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?s(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),t.data(e,r,i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n,a,r=this._get(i,"appendText"),o=this._get(i,"isRTL");i.append&&i.append.remove(),r&&(i.append=t("<span class='"+this._appendClass+"'>"+r+"</span>"),e[o?"before":"after"](i.append)),e.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&e.focus(this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),a=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):t("<button type='button'></button>").addClass(this._triggerClass).html(a?t("<img/>").attr({src:a,alt:n,title:n}):n)),e[o?"before":"after"](i.trigger),i.trigger.click(function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,a=new Date(2009,11,20),r=this._get(t,"dateFormat");r.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},a.setMonth(e(this._get(t,r.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(e(this._get(t,r.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),t.input.attr("size",this._formatDate(t,a).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,r,i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,a,o){var h,l,c,u,d,p=this._dialogInst;return p||(this.uuid+=1,h="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+h+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),t("body").append(this._dialogInput),p=this._dialogInst=this._newInst(this._dialogInput,!1),p.settings={},t.data(this._dialogInput[0],r,p)),n(p.settings,a||{}),i=i&&i.constructor===Date?this._formatDate(p,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(l=document.documentElement.clientWidth,c=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[l/2-100+u,c/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),p.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],r,p),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,r);s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,r),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty())},_enableDatepicker:function(e){var i,s,n=t(e),a=t.data(e,r);n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),a=t.data(e,r);n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,r)}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(i,s,a){var r,o,h,l,c=this._getInst(i);return 2===arguments.length&&"string"==typeof s?"defaults"===s?t.extend({},t.datepicker._defaults):c?"all"===s?t.extend({},c.settings):this._get(c,s):null:(r=s||{},"string"==typeof s&&(r={},r[s]=a),c&&(this._curInst===c&&this._hideDatepicker(),o=this._getDateDatepicker(i,!0),h=this._getMinMaxDate(c,"min"),l=this._getMinMaxDate(c,"max"),n(c.settings,r),null!==h&&r.dateFormat!==e&&r.minDate===e&&(c.settings.minDate=this._formatDate(c,h)),null!==l&&r.dateFormat!==e&&r.maxDate===e&&(c.settings.maxDate=this._formatDate(c,l)),"disabled"in r&&(r.disabled?this._disableDatepicker(i):this._enableDatepicker(i)),this._attachments(t(i),c),this._autoSize(c),this._setDate(c,o),this._updateAlternate(c),this._updateDatepicker(c)),e)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,a=t.datepicker._getInst(e.target),r=!0,o=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),r=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",a.dpDiv),n[0]&&t.datepicker._selectDay(e.target,a.selectedMonth,a.selectedYear,n[0]),i=t.datepicker._get(a,"onSelect"),i?(s=t.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(a,"stepBigMonths"):-t.datepicker._get(a,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(a,"stepBigMonths"):+t.datepicker._get(a,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),r=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),r=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,o?1:-1,"D"),r=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(a,"stepBigMonths"):-t.datepicker._get(a,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),r=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,o?-1:1,"D"),r=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(a,"stepBigMonths"):+t.datepicker._get(a,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),r=e.ctrlKey||e.metaKey;break;default:r=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):r=!1;r&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(i){var s,n,a=t.datepicker._getInst(i.target);return t.datepicker._get(a,"constrainInput")?(s=t.datepicker._possibleChars(t.datepicker._get(a,"dateFormat")),n=String.fromCharCode(null==i.charCode?i.keyCode:i.charCode),i.ctrlKey||i.metaKey||" ">n||!s||s.indexOf(n)>-1):e},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var i,s,a,r,o,h,l;i=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==i&&(t.datepicker._curInst.dpDiv.stop(!0,!0),i&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),s=t.datepicker._get(i,"beforeShow"),a=s?s.apply(e,[e,i]):{},a!==!1&&(n(i.settings,a),i.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(i),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),o={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(i),o=t.datepicker._checkOffset(i,o,r),i.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:o.left+"px",top:o.top+"px"}),i.inline||(h=t.datepicker._get(i,"showAnim"),l=t.datepicker._get(i,"duration"),i.dpDiv.zIndex(t(e).zIndex()+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[h]?i.dpDiv.show(h,t.datepicker._get(i,"showOptions"),l):i.dpDiv[h||"show"](h?l:null),t.datepicker._shouldFocusInput(i)&&i.input.focus(),t.datepicker._curInst=i))}},_updateDatepicker:function(e){this.maxRows=4,a=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e),e.dpDiv.find("."+this._dayOverClass+" a").mouseover();var i,s=this._getNumberOfMonths(e),n=s[1],r=17;e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",r*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.focus(),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),a=e.dpDiv.outerHeight(),r=e.input?e.input.outerWidth():0,o=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-r:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+o?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+o):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,a,o=this._curInst;!o||e&&o!==t.data(e,r)||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){t.datepicker._tidyDialog(o)},t.effects&&(t.effects.effect[i]||t.effects[i])?o.dpDiv.hide(i,t.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(e,i,s,n){var a,r=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(r[0])||(a=this._getInst(r[0]),a.selectedDay=a.currentDay=t("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(e,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,a=this._get(e,"altField");a&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(a).each(function(){t(this).val(n)}))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(i,s,n){if(null==i||null==s)throw"Invalid arguments";if(s="object"==typeof s?""+s:s+"",""===s)return null;var a,r,o,h,l=0,c=(n?n.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof c?c:(new Date).getFullYear()%100+parseInt(c,10),d=(n?n.dayNamesShort:null)||this._defaults.dayNamesShort,p=(n?n.dayNames:null)||this._defaults.dayNames,f=(n?n.monthNamesShort:null)||this._defaults.monthNamesShort,m=(n?n.monthNames:null)||this._defaults.monthNames,g=-1,v=-1,_=-1,b=-1,y=!1,x=function(t){var e=i.length>a+1&&i.charAt(a+1)===t;return e&&a++,e},k=function(t){var e=x(t),i="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n=RegExp("^\\d{1,"+i+"}"),a=s.substring(l).match(n);if(!a)throw"Missing number at position "+l;return l+=a[0].length,parseInt(a[0],10)},w=function(i,n,a){var r=-1,o=t.map(x(i)?a:n,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(o,function(t,i){var n=i[1];return s.substr(l,n.length).toLowerCase()===n.toLowerCase()?(r=i[0],l+=n.length,!1):e}),-1!==r)return r+1;throw"Unknown name at position "+l},D=function(){if(s.charAt(l)!==i.charAt(a))throw"Unexpected literal at position "+l;l++};for(a=0;i.length>a;a++)if(y)"'"!==i.charAt(a)||x("'")?D():y=!1;else switch(i.charAt(a)){case"d":_=k("d");break;case"D":w("D",d,p);break;case"o":b=k("o");break;case"m":v=k("m");break;case"M":v=w("M",f,m);break;case"y":g=k("y");break;case"@":h=new Date(k("@")),g=h.getFullYear(),v=h.getMonth()+1,_=h.getDate();break;case"!":h=new Date((k("!")-this._ticksTo1970)/1e4),g=h.getFullYear(),v=h.getMonth()+1,_=h.getDate();break;case"'":x("'")?D():y=!0;break;default:D()}if(s.length>l&&(o=s.substr(l),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=g?0:-100)),b>-1)for(v=1,_=b;;){if(r=this._getDaysInMonth(g,v-1),r>=_)break;v++,_-=r}if(h=this._daylightSavingAdjust(new Date(g,v-1,_)),h.getFullYear()!==g||h.getMonth()+1!==v||h.getDate()!==_)throw"Invalid date";return h},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:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,r=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,o=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,a);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),r,o);break;case"y":u+=h("y")?e.getFullYear():(10>e.getYear()%100?"0":"")+e.getYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,i){return t.settings[i]!==e?t.settings[i]:this._defaults[i]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),a=n,r=this._getFormatConfig(t);try{a=this.parseDate(i,s,r)||n}catch(o){s=e?"":s}t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),t.currentDay=s?a.getDate():0,t.currentMonth=s?a.getMonth():0,t.currentYear=s?a.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},a=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,a=n.getFullYear(),r=n.getMonth(),o=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":o+=parseInt(l[1],10);break;case"w":case"W":o+=7*parseInt(l[1],10);break;case"m":case"M":r+=parseInt(l[1],10),o=Math.min(o,t.datepicker._getDaysInMonth(a,r));break;case"y":case"Y":a+=parseInt(l[1],10),o=Math.min(o,t.datepicker._getDaysInMonth(a,r))}l=h.exec(i)}return new Date(a,r,o)},r=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return r=r&&"Invalid Date"==""+r?s:r,r&&(r.setHours(0),r.setMinutes(0),r.setSeconds(0),r.setMilliseconds(0)),this._daylightSavingAdjust(r)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,a=t.selectedYear,r=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=r.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=r.getMonth(),t.drawYear=t.selectedYear=t.currentYear=r.getFullYear(),n===t.selectedMonth&&a===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).bind(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,a,r,o,h,l,c,u,d,p,f,m,g,v,_,b,y,x,k,w,D,T,C,M,S,N,I,P,A,z,H,E,F,O,W,j,R=new Date,L=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),B=this._get(t,"showButtonPanel"),J=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),Q=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),U=this._get(t,"stepMonths"),q=1!==Q[0]||1!==Q[1],X=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),G=this._getMinMaxDate(t,"min"),$=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),$)for(e=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-Q[0]*Q[1]+1,$.getDate())),e=G&&G>e?G:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-U,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":J?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+U,1)),this._getFormatConfig(t)):n,a=this._canAdjustMonth(t,1,te,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":J?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",r=this._get(t,"currentText"),o=this._get(t,"gotoCurrent")&&t.currentDay?X:L,r=K?this.formatDate(r,o,this._getFormatConfig(t)):r,h=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",l=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(t,o)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+r+"</button>":"")+(Y?"":h)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),m=this._get(t,"monthNamesShort"),g=this._get(t,"beforeShowDay"),v=this._get(t,"showOtherMonths"),_=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;Q[0]>k;k++){for(w="",this.maxRows=4,D=0;Q[1]>D;D++){if(T=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),C=" ui-corner-all",M="",q){if(M+="<div class='ui-datepicker-group",Q[1]>1)switch(D){case 0:M+=" ui-datepicker-group-first",C=" ui-corner-"+(Y?"right":"left");break;case Q[1]-1:M+=" ui-datepicker-group-last",C=" ui-corner-"+(Y?"left":"right");break;default:M+=" ui-datepicker-group-middle",C=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+C+"'>"+(/all|left/.test(C)&&0===k?Y?a:s:"")+(/all|right/.test(C)&&0===k?Y?s:a:"")+this._generateMonthYearHeader(t,Z,te,G,$,k>0||D>0,f,m)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",S=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",x=0;7>x;x++)N=(x+c)%7,S+="<th"+((x+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+d[N]+"'>"+p[N]+"</span></th>";for(M+=S+"</tr></thead><tbody>",I=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,I)),P=(this._getFirstDayOfMonth(te,Z)-c+7)%7,A=Math.ceil((P+I)/7),z=q?this.maxRows>A?this.maxRows:A:A,this.maxRows=z,H=this._daylightSavingAdjust(new Date(te,Z,1-P)),E=0;z>E;E++){for(M+="<tr>",F=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(H)+"</td>":"",x=0;7>x;x++)O=g?g.apply(t.input?t.input[0]:null,[H]):[!0,""],W=H.getMonth()!==Z,j=W&&!_||!O[0]||G&&G>H||$&&H>$,F+="<td class='"+((x+c+6)%7>=5?" ui-datepicker-week-end":"")+(W?" ui-datepicker-other-month":"")+(H.getTime()===T.getTime()&&Z===t.selectedMonth&&t._keyEvent||b.getTime()===H.getTime()&&b.getTime()===T.getTime()?" "+this._dayOverClass:"")+(j?" "+this._unselectableClass+" ui-state-disabled":"")+(W&&!v?"":" "+O[1]+(H.getTime()===X.getTime()?" "+this._currentClass:"")+(H.getTime()===L.getTime()?" ui-datepicker-today":""))+"'"+(W&&!v||!O[2]?"":" title='"+O[2].replace(/'/g,"'")+"'")+(j?"":" data-handler='selectDay' data-event='click' data-month='"+H.getMonth()+"' data-year='"+H.getFullYear()+"'")+">"+(W&&!v?" ":j?"<span class='ui-state-default'>"+H.getDate()+"</span>":"<a class='ui-state-default"+(H.getTime()===L.getTime()?" ui-state-highlight":"")+(H.getTime()===X.getTime()?" ui-state-active":"")+(W?" ui-priority-secondary":"")+"' href='#'>"+H.getDate()+"</a>")+"</td>",H.setDate(H.getDate()+1),H=this._daylightSavingAdjust(H);M+=F+"</tr>"}Z++,Z>11&&(Z=0,te++),M+="</tbody></table>"+(q?"</div>"+(Q[0]>0&&D===Q[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),w+=M}y+=w}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,a,r,o){var h,l,c,u,d,p,f,m,g=this._get(t,"changeMonth"),v=this._get(t,"changeYear"),_=this._get(t,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",y="";if(a||!g)y+="<span class='ui-datepicker-month'>"+r[e]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;12>c;c++)(!h||c>=s.getMonth())&&(!l||n.getMonth()>=c)&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+o[c]+"</option>");y+="</select>"}if(_||(b+=y+(!a&&g&&v?"":" ")),!t.yearshtml)if(t.yearshtml="",a||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10); +return isNaN(e)?d:e},f=p(u[0]),m=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";m>=f;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),_&&(b+=(!a&&g&&v?"":" ")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.drawYear+("Y"===i?e:0),n=t.drawMonth+("M"===i?e:0),a=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),r=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,a)));t.selectedDay=r.getDate(),t.drawMonth=t.selectedMonth=r.getMonth(),t.drawYear=t.selectedYear=r.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),a=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(t,a)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),a=this._getMinMaxDate(t,"max"),r=null,o=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),r=parseInt(i[0],10),o=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(r+=s),i[1].match(/[+\-].*/)&&(o+=s)),(!n||e.getTime()>=n.getTime())&&(!a||e.getTime()<=a.getTime())&&(!r||e.getFullYear()>=r)&&(!o||o>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).mousedown(t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new i,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.10.3"})(jQuery);(function(t){var e={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},i={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0};t.widget("ui.dialog",{version:"1.10.3",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(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},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&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=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),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._destroyOverlay(),this.opener.filter(":focusable").focus().length||t(this.document[0].activeElement).blur(),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,e){var i=!!this.uiDialog.nextAll(":visible").insertBefore(this.uiDialog).length;return i&&!e&&this._trigger("focus",t),i},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),undefined):(this._isOpen=!0,this.opener=t(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._trigger("open"),undefined)},_focusTabbable:function(){var t=this.element.find("[autofocus]");t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).focus()},_keepFocus:function(e){function i(){var e=this.document[0].activeElement,i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("<div>").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(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),undefined;if(e.keyCode===t.ui.keyCode.TAB){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(n.focus(1),e.preventDefault()):(s.focus(1),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=t("<button></button>").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(t){t.preventDefault(),this.close(t)}}),e=t("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(e),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title||t.html(" "),t.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),undefined):(t.each(i,function(i,s){var n,a;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(e.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,t("<button></button>",s).button(a).appendTo(e.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),undefined)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){t(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,a){s.position=[a.position.left-i.document.scrollLeft(),a.position.top-i.document.scrollTop()],t(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(a))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){t(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,a){s.height=t(this).height(),s.width=t(this).width(),t(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(a))}}).css("position",a)},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(s){var n=this,a=!1,o={};t.each(s,function(t,s){n._setOption(t,s),t in e&&(a=!0),t in i&&(o[t]=s)}),a&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",o)},_setOption:function(t,e){var i,s,n=this.uiDialog;"dialogClass"===t&&n.removeClass(this.options.dialogClass).addClass(e),"disabled"!==t&&(this._super(t,e),"appendTo"===t&&this.uiDialog.appendTo(this._appendTo()),"buttons"===t&&this._createButtons(),"closeText"===t&&this.uiDialogTitlebarClose.button({label:""+e}),"draggable"===t&&(i=n.is(":data(ui-draggable)"),i&&!e&&n.draggable("destroy"),!i&&e&&this._makeDraggable()),"position"===t&&this._position(),"resizable"===t&&(s=n.is(":data(ui-resizable)"),s&&!e&&n.resizable("destroy"),s&&"string"==typeof e&&n.resizable("option","handles",e),s||e===!1||this._makeResizable()),"title"===t&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=this,i=this.widgetFullName;t.ui.dialog.overlayInstances||this._delay(function(){t.ui.dialog.overlayInstances&&this.document.bind("focusin.dialog",function(s){e._allowInteraction(s)||(s.preventDefault(),t(".ui-dialog:visible:last .ui-dialog-content").data(i)._focusTabbable())})}),this.overlay=t("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),t.ui.dialog.overlayInstances++}},_destroyOverlay:function(){this.options.modal&&this.overlay&&(t.ui.dialog.overlayInstances--,t.ui.dialog.overlayInstances||this.document.unbind("focusin.dialog"),this.overlay.remove(),this.overlay=null)}}),t.ui.dialog.overlayInstances=0,t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{_position:function(){var e,i=this.options.position,s=[],n=[0,0];i?(("string"==typeof i||"object"==typeof i&&"0"in i)&&(s=i.split?i.split(" "):[i[0],i[1]],1===s.length&&(s[1]=s[0]),t.each(["left","top"],function(t,e){+s[t]===s[t]&&(n[t]=s[t],s[t]=e)}),i={my:s[0]+(0>n[0]?n[0]:"+"+n[0])+" "+s[1]+(0>n[1]?n[1]:"+"+n[1]),at:s.join(" ")}),i=t.extend({},t.ui.dialog.prototype.options.position,i)):i=t.ui.dialog.prototype.options.position,e=this.uiDialog.is(":visible"),e||this.uiDialog.show(),this.uiDialog.position(i),e||this.uiDialog.hide()}})})(jQuery);(function(t){t.widget("ui.menu",{version:"1.10.3",defaultElement:"<ul>",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,t.proxy(function(t){this.options.disabled&&t.preventDefault()},this)),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item > a":function(t){t.preventDefault()},"click .ui-state-disabled > a":function(t){t.preventDefault()},"click .ui-menu-item:has(a)":function(e){var i=t(e.target).closest(".ui-menu-item");!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.mouseHandled=!0,this.select(e),i.has(".ui-menu").length?this.expand(e):this.element.is(":focus")||(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){var i=t(e.currentTarget);i.siblings().children(".ui-state-active").removeClass("ui-state-active"),this.focus(e,i)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.children(".ui-menu-item").eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){t.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){t(e.target).closest(".ui-menu").length||this.collapseAll(e),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 e=t(this);e.data("ui-menu-submenu-carat")&&e.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(e){function i(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}var s,n,a,o,r,h=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:h=!1,n=this.previousFilter||"",a=String.fromCharCode(e.keyCode),o=!1,clearTimeout(this.filterTimer),a===n?o=!0:a=n+a,r=RegExp("^"+i(a),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())}),s=o&&-1!==s.index(this.active.next())?this.active.nextAll(".ui-menu-item"):s,s.length||(a=String.fromCharCode(e.keyCode),r=RegExp("^"+i(a),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())})),s.length?(this.focus(e,s),s.length>1?(this.previousFilter=a,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter):delete this.previousFilter}h&&e.preventDefault()},_activate:function(t){this.active.is(".ui-state-disabled")||(this.active.children("a[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i=this.options.icons.submenu,s=this.element.find(this.options.menus);s.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 e=t(this),s=e.prev("a"),n=t("<span>").addClass("ui-menu-icon ui-icon "+i).data("ui-menu-submenu-carat",!0);s.attr("aria-haspopup","true").prepend(n),e.attr("aria-labelledby",s.attr("id"))}),e=s.add(this.element),e.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()}),e.children(":not(.ui-menu-item)").each(function(){var e=t(this);/[^\-\u2014\u2013\s]/.test(e.text())||e.addClass("ui-widget-content ui-menu-divider")}),e.children(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){"icons"===t&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(e.submenu),this._super(t,e)},focus:function(t,e){var i,s;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children("a").addClass("ui-state-focus"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=e.height(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this.active.children("a").removeClass("ui-state-focus"),this.active=null,this._trigger("blur",t,{item:this.active}))},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find("a.ui-state-active").removeClass("ui-state-active")},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").children(".ui-menu-item").first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},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(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.children(".ui-menu-item")[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item")[this.active?"last":"first"]())),undefined):(this.next(e),undefined)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item").first())),undefined):(this.next(e),undefined)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)}})})(jQuery);(function(t,e){t.widget("ui.progressbar",{version:"1.10.3",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=t("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").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(t){return t===e?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),e)},_constrainedValue:function(t){return t===e&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).toggleClass("ui-corner-right",e===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}})})(jQuery);(function(t){var e=5;t.widget("ui.slider",t.ui.mouse,{version:"1.10.3",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 e,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)o.push(a);this.handles=n.add(t(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e)})},_createRange:function(){var e=this.options,i="";e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=t("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===e.range||"max"===e.range?" ui-slider-range-"+e.range:""))):this.range=t([])},_setupEvents:function(){var t=this.handles.add(this.range).filter("a");this._off(t),this._on(t,this._handleEvents),this._hoverable(t),this._focusable(t)},_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(e){var i,s,n,a,o,r,h,l,u=this,c=this.options;return c.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-u.values(e));(n>i||n===i&&(e===u._lastChangedValue||u.values(e)===c.min))&&(n=i,a=t(this),o=e)}),r=this._start(e,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-h.left-a.width()/2,top:e.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,a;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(t,e){var i={handle:this.handles[e],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("start",t,i)},_slide:function(t,e,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(e?0:1),2===this.options.values.length&&this.options.range===!0&&(0===e&&i>s||1===e&&s>i)&&(i=s),i!==this.values(e)&&(n=this.values(),n[e]=i,a=this._trigger("slide",t,{handle:this.handles[e],value:i,values:n}),s=this.values(e?0:1),a!==!1&&this.values(e,i,!0))):i!==this.value()&&(a=this._trigger("slide",t,{handle:this.handles[e],value:i}),a!==!1&&this.value(i))},_stop:function(t,e){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("stop",t,i)},_change:function(t,e){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._lastChangedValue=e,this._trigger("change",t,i)}},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),undefined):this._value()},values:function(e,i){var s,n,a;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),undefined;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(e):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),t.Widget.prototype._setOption.apply(this,arguments),e){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"min":case"max":this._animateOff=!0,this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var e,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(i){var s,n,a,o,r=t(i.target).data("ui-slider-handle-index");switch(i.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(i.preventDefault(),!this._keySliding&&(this._keySliding=!0,t(i.target).addClass("ui-state-active"),s=this._start(i,r),s===!1))return}switch(o=this.options.step,n=a=this.options.values&&this.options.values.length?this.values(r):this.value(),i.keyCode){case t.ui.keyCode.HOME:a=this._valueMin();break;case t.ui.keyCode.END:a=this._valueMax();break;case t.ui.keyCode.PAGE_UP:a=this._trimAlignValue(n+(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.PAGE_DOWN:a=this._trimAlignValue(n-(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(n===this._valueMax())return;a=this._trimAlignValue(n+o);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(n===this._valueMin())return;a=this._trimAlignValue(n-o)}this._slide(i,r,a)},click:function(t){t.preventDefault()},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),t(e.target).removeClass("ui-state-active"))}}})})(jQuery);(function(t){function e(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.widget("ui.spinner",{version:"1.10.3",defaultElement:"<input>",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 e={},i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);void 0!==n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var t=this.element[0]===this.document[0].activeElement;t||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var t=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=t.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*t.height())&&t.height()>0&&t.height(t.height()),this.options.disabled&&this.disable()},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>▲</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>▼</span>"+"</a>"},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){if("culture"===t||"numberFormat"===t){var i=this._parse(this.element.val());return this.options[t]=e,this.element.val(this._format(i)),void 0}("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(e.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(e.down)),this._super(t,e),"disabled"===t&&(e?(this.element.prop("disabled",!0),this.buttons.button("disable")):(this.element.prop("disabled",!1),this.buttons.button("enable")))},_setOptions:e(function(t){this._super(t),this._value(this.element.val())}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:e(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:e(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:e(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:e(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(e(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}})})(jQuery);(function(t,e){function i(){return++n}function s(t){return t.hash.length>1&&decodeURIComponent(t.href.replace(a,""))===decodeURIComponent(location.href.replace(a,""))}var n=0,a=/#.*$/;t.widget("ui.tabs",{version:"1.10.3",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 e=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible).delegate(".ui-tabs-nav > li","mousedown"+this.eventNamespace,function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var i=this.options.active,s=this.options.collapsible,n=location.hash.substring(1);return null===i&&(n&&this.tabs.each(function(s,a){return t(a).attr("aria-controls")===n?(i=s,!1):e}),null===i&&(i=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===i||-1===i)&&(i=this.tabs.length?0:!1)),i!==!1&&(i=this.tabs.index(this.tabs.eq(i)),-1===i&&(i=s?!1:0)),!s&&i===!1&&this.anchors.length&&(i=0),i},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(i){var s=t(this.document[0].activeElement).closest("li"),n=this.tabs.index(s),a=!0;if(!this._handlePageNav(i)){switch(i.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:n++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:a=!1,n--;break;case t.ui.keyCode.END:n=this.anchors.length-1;break;case t.ui.keyCode.HOME:n=0;break;case t.ui.keyCode.SPACE:return i.preventDefault(),clearTimeout(this.activating),this._activate(n),e;case t.ui.keyCode.ENTER:return i.preventDefault(),clearTimeout(this.activating),this._activate(n===this.options.active?!1:n),e;default:return}i.preventDefault(),clearTimeout(this.activating),n=this._focusNextTab(n,a),i.ctrlKey||(s.attr("aria-selected","false"),this.tabs.eq(n).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",n)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.focus())},_handlePageNav:function(i){return i.altKey&&i.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):i.altKey&&i.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):e},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).focus(),t},_setOption:function(t,i){return"active"===t?(this._activate(i),e):"disabled"===t?(this._setupDisabled(i),e):(this._super(t,i),"collapsible"===t&&(this.element.toggleClass("ui-tabs-collapsible",i),i||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(i),"heightStyle"===t&&this._setupHeightStyle(i),e)},_tabId:function(t){return t.attr("aria-controls")||"ui-tabs-"+i()},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),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 e=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 t("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=t(),this.anchors.each(function(i,n){var a,o,r,h=t(n).uniqueId().attr("id"),l=t(n).closest("li"),u=l.attr("aria-controls");s(n)?(a=n.hash,o=e.element.find(e._sanitizeSelector(a))):(r=e._tabId(l),a="#"+r,o=e.element.find(a),o.length||(o=e._createPanel(r),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),u&&l.data("ui-tabs-aria-controls",u),l.attr({"aria-controls":a.substring(1),"aria-labelledby":h}),o.attr("aria-labelledby",h)}),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(e){return t("<div>").attr("id",e).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(e){t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1);for(var i,s=0;i=this.tabs[s];s++)e===!0||-1!==t.inArray(s,e)?t(i).addClass("ui-state-disabled").attr("aria-disabled","true"):t(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=e},_setupEvents:function(e){var i={click:function(t){t.preventDefault()}};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?t():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):t(),u={oldTab:s,oldPanel:l,newTab:r?t():a,newPanel:h};e.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",e,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?t():a,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),e),this._toggle(e,u))},_toggle:function(e,i){function s(){a.running=!1,a._trigger("activate",e,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr({"aria-expanded":"false","aria-hidden":"true"}),i.oldTab.attr("aria-selected","false"),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr({"aria-expanded":"true","aria-hidden":"false"}),i.newTab.attr({"aria-selected":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(t){return"string"==typeof t&&(t=this.anchors.index(this.anchors.filter("[href$='"+t+"']"))),t},_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(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(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 e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(i){var s=this.options.disabled;s!==!1&&(i===e?s=!1:(i=this._getIndex(i),s=t.isArray(s)?t.map(s,function(t){return t!==i?t:null}):t.map(this.tabs,function(t,e){return e!==i?e:null})),this._setupDisabled(s))},disable:function(i){var s=this.options.disabled;if(s!==!0){if(i===e)s=!0;else{if(i=this._getIndex(i),-1!==t.inArray(i,s))return;s=t.isArray(s)?t.merge([i],s).sort():[i]}this._setupDisabled(s)}},load:function(e,i){e=this._getIndex(e);var n=this,a=this.tabs.eq(e),o=a.find(".ui-tabs-anchor"),r=this._getPanelForTab(a),h={tab:a,panel:r};s(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,h)),this.xhr&&"canceled"!==this.xhr.statusText&&(a.addClass("ui-tabs-loading"),r.attr("aria-busy","true"),this.xhr.success(function(t){setTimeout(function(){r.html(t),n._trigger("load",i,h)},1)}).complete(function(t,e){setTimeout(function(){"abort"===e&&n.panels.stop(!1,!0),a.removeClass("ui-tabs-loading"),r.removeAttr("aria-busy"),t===n.xhr&&delete n.xhr},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href"),beforeSend:function(e,a){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:a},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}})})(jQuery);(function(t){function e(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))}function i(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")}var s=0;t.widget("ui.tooltip",{version:"1.10.3",options:{content:function(){var e=t(this).attr("title")||"";return t("<a>").text(e).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(e,i){var s=this;return"disabled"===e?(this[i?"_disable":"_enable"](),this.options[e]=i,void 0):(this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e)}),void 0)},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var e=t(this);e.is("[title]")&&e.data("ui-tooltip-title",e.attr("title")).attr("title","")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))})},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,a=e?e.type:null;return"string"==typeof s?this._open(e,t,s):(i=s.call(t[0],function(i){t.data("ui-tooltip-open")&&n._delay(function(){e&&(e.type=a),this._open(e,t,i)})}),i&&this._open(e,t,i),void 0)},_open:function(i,s,n){function a(t){l.of=t,o.is(":hidden")||o.position(l)}var o,r,h,l=t.extend({},this.options.position);if(n){if(o=this._find(s),o.length)return o.find(".ui-tooltip-content").html(n),void 0;s.is("[title]")&&(i&&"mouseover"===i.type?s.attr("title",""):s.removeAttr("title")),o=this._tooltip(s),e(s,o.attr("id")),o.find(".ui-tooltip-content").html(n),this.options.track&&i&&/^mouse/.test(i.type)?(this._on(this.document,{mousemove:a}),a(i)):o.position(t.extend({of:s},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(h=this.delayedShow=setInterval(function(){o.is(":visible")&&(a(l.of),clearInterval(h))},t.fx.interval)),this._trigger("open",i,{tooltip:o}),r={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var i=t.Event(e);i.currentTarget=s[0],this.close(i,!0)}},remove:function(){this._removeTooltip(o)}},i&&"mouseover"!==i.type||(r.mouseleave="close"),i&&"focusin"!==i.type||(r.focusout="close"),this._on(!0,s,r)}},close:function(e){var s=this,n=t(e?e.currentTarget:this.element),a=this._find(n);this.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&n.attr("title",n.data("ui-tooltip-title")),i(n),a.stop(!0),this._hide(a,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),this.closing=!0,this._trigger("close",e,{tooltip:a}),this.closing=!1)},_tooltip:function(e){var i="ui-tooltip-"+s++,n=t("<div>").attr({id:i,role:"tooltip"}).addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||""));return t("<div>").addClass("ui-tooltip-content").appendTo(n),n.appendTo(this.document[0].body),this.tooltips[i]=e,n},_find:function(e){var i=e.data("ui-tooltip-id");return i?t("#"+i):t()},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0),t("#"+i).remove(),s.data("ui-tooltip-title")&&(s.attr("title",s.data("ui-tooltip-title")),s.removeData("ui-tooltip-title"))})}})})(jQuery);(function(t,e){var i="ui-effects-";t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[c[l].cache]=o[c[l].cache],n=s._rgba=o._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,a.transparent),s):a[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("<p>")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,o,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(o),o=e);var u=this,d=t.type(n),p=this._rgba=[];return o!==e&&(n=[n,o,r,h],d="array"),"string"===d?this.parse(s(n)||a._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var a=s.cache;f(s.props,function(t,e){if(!u[a]&&s.to){if("alpha"===t||null==n[t])return;u[a]=s.to(u._rgba)}u[a][e.idx]=i(n[t],e,!0)}),u[a]&&0>t.inArray(null,u[a].slice(0,3))&&(u[a][3]=1,s.from&&(u._rgba=s.from(u[a])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),a=c[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(t,n){var a=n.idx,o=r[a],l=s[a],c=u[n.type]||{};null!==l&&(null===o?h[a]=l:(c.mod&&(l-o>c.mod/2?o+=c.mod:o-l>c.mod/2&&(o-=c.mod)),h[a]=i((l-o)*e+o,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,a=t[2]/255,o=t[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==o?1:o]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],a=t[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,e+1/3)),Math.round(255*n(r,o,e)),Math.round(255*n(r,o,e-1/3)),a]},f(c,function(s,n){var a=n.props,o=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===e)return this[o].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[o].slice();return f(a,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[o]=d,n):l(d)},f(a,function(e,i){l.fn[e]||(l.fn[e]=function(n){var a,o=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===o?c:("function"===o&&(n=n.call(this,c),o=t.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=c+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var a,o,r="";if("transparent"!==n&&("string"!==t.type(n)||(a=s(n)))){if(n=l(a||n),!d.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&o&&o.style;)try{r=t.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(o),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},a=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(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function s(e,i){var s,n,o={};for(s in i)n=i[s],e[s]!==n&&(a[s]||(t.fx.step[s]||!isNaN(parseFloat(n)))&&(o[s]=n));return o}var n=["add","remove","toggle"],a={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(jQuery.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(e,a,o,r){var h=t.speed(a,o,r);return this.queue(function(){var a,o=t(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var e=t(this);return{el:e,start:i(this)}}),a=function(){t.each(n,function(t,i){e[i]&&o[i+"Class"](e[i])})},a(),l=l.map(function(){return this.end=i(this.el[0]),this.diff=s(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){a(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(o[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,a){return s?t.effects.animateClass.call(this,{add:i},s,n,a):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,a){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,a):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(i){return function(s,n,a,o,r){return"boolean"==typeof n||n===e?a?t.effects.animateClass.call(this,n?{add:s}:{remove:s},a,o,r):i.apply(this,arguments):t.effects.animateClass.call(this,{toggle:s},n,a,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,a){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,a)}})}(),function(){function s(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function n(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}t.extend(t.effects,{version:"1.10.3",save:function(t,e){for(var s=0;e.length>s;s++)null!==e[s]&&t.data(i+e[s],t[0].style[e[s]])},restore:function(t,s){var n,a;for(a=0;s.length>a;a++)null!==s[a]&&(n=t.data(i+s[a]),n===e&&(n=""),t.css(s[a],n))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return e.wrap(s),(e[0]===a||t.contains(e[0],a))&&t(a).focus(),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).focus()),e},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var a=e.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),t.fn.extend({effect:function(){function e(e){function s(){t.isFunction(a)&&a.call(n[0]),t.isFunction(e)&&e()}var n=t(this),a=i.complete,r=i.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),s()):o.call(n[0],i,s)}var i=s.apply(this,arguments),n=i.mode,a=i.queue,o=t.effects.effect[i.effect];return t.fx.off||!o?n?this[n](i.duration,i.complete):this.each(function(){i.complete&&i.complete.call(this)}):a===!1?this.each(e):this.queue(a||"fx",e)},show:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="show",this.effect.call(this,i)}}(t.fn.show),hide:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="hide",this.effect.call(this,i)}}(t.fn.hide),toggle:function(t){return function(e){if(n(e)||"boolean"==typeof e)return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="toggle",this.effect.call(this,i)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s}})}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}()})(jQuery);(function(t){var e=/up|down|vertical/,i=/up|left|vertical|horizontal/;t.effects.effect.blind=function(s,n){var a,o,r,h=t(this),l=["position","top","bottom","left","right","height","width"],c=t.effects.setMode(h,s.mode||"hide"),u=s.direction||"up",d=e.test(u),p=d?"height":"width",f=d?"top":"left",m=i.test(u),g={},v="show"===c;h.parent().is(".ui-effects-wrapper")?t.effects.save(h.parent(),l):t.effects.save(h,l),h.show(),a=t.effects.createWrapper(h).css({overflow:"hidden"}),o=a[p](),r=parseFloat(a.css(f))||0,g[p]=v?o:0,m||(h.css(d?"bottom":"right",0).css(d?"top":"left","auto").css({position:"absolute"}),g[f]=v?r:o+r),v&&(a.css(p,0),m||a.css(f,r+o)),a.animate(g,{duration:s.duration,easing:s.easing,queue:!1,complete:function(){"hide"===c&&h.hide(),t.effects.restore(h,l),t.effects.removeWrapper(h),n()}})}})(jQuery);(function(t){t.effects.effect.bounce=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(o,e.mode||"effect"),l="hide"===h,c="show"===h,u=e.direction||"up",d=e.distance,p=e.times||5,f=2*p+(c||l?1:0),m=e.duration/f,g=e.easing,v="up"===u||"down"===u?"top":"left",_="up"===u||"left"===u,b=o.queue(),y=b.length;for((c||l)&&r.push("opacity"),t.effects.save(o,r),o.show(),t.effects.createWrapper(o),d||(d=o["top"===v?"outerHeight":"outerWidth"]()/3),c&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,_?2*-d:2*d).animate(a,m,g)),l&&(d/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(_?"-=":"+=")+d,o.animate(n,m,g).animate(a,m,g),d=l?2*d:d/2;l&&(n={opacity:0},n[v]=(_?"-=":"+=")+d,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}),y>1&&b.splice.apply(b,[1,0].concat(b.splice(y,f+1))),o.dequeue()}})(jQuery);(function(t){t.effects.effect.clip=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(o,e.mode||"hide"),l="show"===h,c=e.direction||"vertical",u="vertical"===c,d=u?"height":"width",p=u?"top":"left",f={};t.effects.save(o,r),o.show(),s=t.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[d](),l&&(n.css(d,0),n.css(p,a/2)),f[d]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){l||o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}})}})(jQuery);(function(t){t.effects.effect.drop=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","opacity","height","width"],o=t.effects.setMode(n,e.mode||"hide"),r="show"===o,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h?"pos":"neg",u={opacity:r?1:0};t.effects.save(n,a),n.show(),t.effects.createWrapper(n),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===c?-s:s),u[l]=(r?"pos"===c?"+=":"-=":"pos"===c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})}})(jQuery);(function(t){t.effects.effect.explode=function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),m||p.hide(),i()}var a,o,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=t.effects.setMode(p,e.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/d),_=Math.ceil(p.outerHeight()/u),b=[];for(a=0;u>a;a++)for(h=g.top+a*_,c=a-(u-1)/2,o=0;d>o;o++)r=g.left+o*v,l=o-(d-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*_}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:_,left:r+(m?l*v:0),top:h+(m?c*_:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:c*_),opacity:m?1:0},e.duration||500,e.easing,s)}})(jQuery);(function(t){t.effects.effect.fade=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}})(jQuery);(function(t){t.effects.effect.fold=function(e,i){var s,n,a=t(this),o=["position","top","bottom","left","right","height","width"],r=t.effects.setMode(a,e.mode||"hide"),h="show"===r,l="hide"===r,c=e.size||15,u=/([0-9]+)%/.exec(c),d=!!e.horizFirst,p=h!==d,f=p?["width","height"]:["height","width"],m=e.duration/2,g={},v={};t.effects.save(a,o),a.show(),s=t.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],u&&(c=parseInt(u[1],10)/100*n[l?0:1]),h&&s.css(d?{height:0,width:c}:{height:c,width:0}),g[f[0]]=h?n[0]:c,v[f[1]]=h?n[1]:0,s.animate(g,m,e.easing).animate(v,m,e.easing,function(){l&&a.hide(),t.effects.restore(a,o),t.effects.removeWrapper(a),i()})}})(jQuery);(function(t){t.effects.effect.highlight=function(e,i){var s=t(this),n=["backgroundImage","backgroundColor","opacity"],a=t.effects.setMode(s,e.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),t.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(o,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===a&&s.hide(),t.effects.restore(s,n),i()}})}})(jQuery);(function(t){t.effects.effect.pulsate=function(e,i){var s,n=t(this),a=t.effects.setMode(n,e.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(e.times||5)+(h?1:0),c=e.duration/l,u=0,d=n.queue(),p=d.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),u=1),s=1;l>s;s++)n.animate({opacity:u},c,e.easing),u=1-u;n.animate({opacity:u},c,e.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&d.splice.apply(d,[1,0].concat(d.splice(p,l+1))),n.dequeue()}})(jQuery);(function(t){t.effects.effect.puff=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"hide"),a="hide"===n,o=parseInt(e.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};t.extend(e,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(e)},t.effects.effect.scale=function(e,i){var s=t(this),n=t.extend(!0,{},e),a=t.effects.setMode(s,e.mode||"effect"),o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"hide"===a?0:100),r=e.direction||"both",h=e.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},c={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=e.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*c.y,width:l.width*c.x,outerHeight:l.outerHeight*c.y,outerWidth:l.outerWidth*c.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},t.effects.effect.size=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],c=["fontSize"],u=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],d=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=t.effects.setMode(o,e.mode||"effect"),f=e.restore||"effect"!==p,m=e.scale||"both",g=e.origin||["middle","center"],v=o.css("position"),_=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===e.mode&&"show"===p?(o.from=e.to||b,o.to=e.from||s):(o.from=e.from||("show"===p?b:s),o.to=e.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(_=_.concat(u),o.from=t.effects.setTransition(o,u,a.from.y,o.from),o.to=t.effects.setTransition(o,u,a.to.y,o.to)),a.from.x!==a.to.x&&(_=_.concat(d),o.from=t.effects.setTransition(o,d,a.from.x,o.from),o.to=t.effects.setTransition(o,d,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(_=_.concat(c).concat(l),o.from=t.effects.setTransition(o,c,a.from.y,o.from),o.to=t.effects.setTransition(o,c,a.to.y,o.to)),t.effects.save(o,_),o.show(),t.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=t.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(u=u.concat(["marginTop","marginBottom"]).concat(c),d=d.concat(["marginLeft","marginRight"]),l=r.concat(u).concat(d),o.find("*[width]").each(function(){var i=t(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};f&&t.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=t.effects.setTransition(i,u,a.from.y,i.from),i.to=t.effects.setTransition(i,u,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=t.effects.setTransition(i,d,a.from.x,i.from),i.to=t.effects.setTransition(i,d,a.to.x,i.to)),i.css(i.from),i.animate(i.to,e.duration,e.easing,function(){f&&t.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),t.effects.restore(o,_),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):t.each(["top","left"],function(t,e){o.css(e,function(e,i){var s=parseInt(i,10),n=t?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),t.effects.removeWrapper(o),i()}})}})(jQuery);(function(t){t.effects.effect.shake=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","height","width"],o=t.effects.setMode(n,e.mode||"effect"),r=e.direction||"left",h=e.distance||20,l=e.times||3,c=2*l+1,u=Math.round(e.duration/c),d="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),_=v.length;for(t.effects.save(n,a),n.show(),t.effects.createWrapper(n),f[d]=(p?"-=":"+=")+h,m[d]=(p?"+=":"-=")+2*h,g[d]=(p?"-=":"+=")+2*h,n.animate(f,u,e.easing),s=1;l>s;s++)n.animate(m,u,e.easing).animate(g,u,e.easing);n.animate(m,u,e.easing).animate(f,u/2,e.easing).queue(function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}),_>1&&v.splice.apply(v,[1,0].concat(v.splice(_,c+1))),n.dequeue()}})(jQuery);(function(t){t.effects.effect.slide=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","width","height"],o=t.effects.setMode(n,e.mode||"show"),r="show"===o,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u={};t.effects.save(n,a),n.show(),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0),t.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,c?isNaN(s)?"-"+s:-s:s),u[l]=(r?c?"+=":"-=":c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})}})(jQuery);(function(t){t.effects.effect.transfer=function(e,i){var s=t(this),n=t(e.to),a="fixed"===n.css("position"),o=t("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),i()})}})(jQuery); \ No newline at end of file diff --git a/dspace-jspui/src/main/webapp/static/js/respond.min.js b/dspace-jspui/src/main/webapp/static/js/respond.min.js new file mode 100644 index 0000000..c341e2b --- /dev/null +++ b/dspace-jspui/src/main/webapp/static/js/respond.min.js @@ -0,0 +1,11 @@ +/* + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +window.matchMedia=window.matchMedia||function(a){"use strict";var c,d=a.documentElement,e=d.firstElementChild||d.firstChild,f=a.createElement("body"),g=a.createElement("div");return g.id="mq-test-1",g.style.cssText="position:absolute;top:-100em",f.style.background="none",f.appendChild(g),function(a){return g.innerHTML='­<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',d.insertBefore(f,e),c=42===g.offsetWidth,d.removeChild(f),{matches:c,media:a}}}(document); + +/*! Respond.js v1.1.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs */ +(function(a){"use strict";function x(){u(!0)}var b={};a.respond=b,b.update=function(){},b.mediaQueriesSupported=a.matchMedia&&a.matchMedia("only all").matches,b.mediaQueriesSupported;var q,r,t,c=a.document,d=c.documentElement,e=[],f=[],g=[],h={},i=30,j=c.getElementsByTagName("head")[0]||d,k=c.getElementsByTagName("base")[0],l=j.getElementsByTagName("link"),m=[],n=function(){for(var b=0;l.length>b;b++){var c=l[b],d=c.href,e=c.media,f=c.rel&&"stylesheet"===c.rel.toLowerCase();d&&f&&!h[d]&&(c.styleSheet&&c.styleSheet.rawCssText?(p(c.styleSheet.rawCssText,d,e),h[d]=!0):(!/^([a-zA-Z:]*\/\/)/.test(d)&&!k||d.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&m.push({href:d,media:e}))}o()},o=function(){if(m.length){var a=m.shift();v(a.href,function(b){p(b,a.href,a.media),h[a.href]=!0,setTimeout(function(){o()},0)})}},p=function(a,b,c){var d=a.match(/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi),g=d&&d.length||0;b=b.substring(0,b.lastIndexOf("/"));var h=function(a){return a.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+b+"$2$3")},i=!g&&c;b.length&&(b+="/"),i&&(g=1);for(var j=0;g>j;j++){var k,l,m,n;i?(k=c,f.push(h(a))):(k=d[j].match(/@media *([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,f.push(RegExp.$2&&h(RegExp.$2))),m=k.split(","),n=m.length;for(var o=0;n>o;o++)l=m[o],e.push({media:l.split("(")[0].match(/(only\s+)?([a-zA-Z]+)\s?/)&&RegExp.$2||"all",rules:f.length-1,hasquery:l.indexOf("(")>-1,minw:l.match(/\(min\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:l.match(/\(max\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},s=function(){var a,b=c.createElement("div"),e=c.body,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",e||(e=f=c.createElement("body"),e.style.background="none"),e.appendChild(b),d.insertBefore(e,d.firstChild),a=b.offsetWidth,f?d.removeChild(e):e.removeChild(b),a=t=parseFloat(a)},u=function(a){var b="clientWidth",h=d[b],k="CSS1Compat"===c.compatMode&&h||c.body[b]||h,m={},n=l[l.length-1],o=(new Date).getTime();if(a&&q&&i>o-q)return clearTimeout(r),r=setTimeout(u,i),void 0;q=o;for(var p in e)if(e.hasOwnProperty(p)){var v=e[p],w=v.minw,x=v.maxw,y=null===w,z=null===x,A="em";w&&(w=parseFloat(w)*(w.indexOf(A)>-1?t||s():1)),x&&(x=parseFloat(x)*(x.indexOf(A)>-1?t||s():1)),v.hasquery&&(y&&z||!(y||k>=w)||!(z||x>=k))||(m[v.media]||(m[v.media]=[]),m[v.media].push(f[v.rules]))}for(var B in g)g.hasOwnProperty(B)&&g[B]&&g[B].parentNode===j&&j.removeChild(g[B]);for(var C in m)if(m.hasOwnProperty(C)){var D=c.createElement("style"),E=m[C].join("\n");D.type="text/css",D.media=C,j.insertBefore(D,n.nextSibling),D.styleSheet?D.styleSheet.cssText=E:D.appendChild(c.createTextNode(E)),g.push(D)}},v=function(a,b){var c=w();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))},w=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}();n(),b.update=n,a.addEventListener?a.addEventListener("resize",x,!1):a.attachEvent&&a.attachEvent("onresize",x)})(this); diff --git a/dspace-jspui/src/main/webapp/static/js/submission-lookup.js b/dspace-jspui/src/main/webapp/static/js/submission-lookup.js new file mode 100644 index 0000000..ada12b5 --- /dev/null +++ b/dspace-jspui/src/main/webapp/static/js/submission-lookup.js @@ -0,0 +1,288 @@ +/* + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +submissionLookupIdentifiers = function(identInputs){ + var mydata = new Object(); + mydata['s_uuid'] = j('#suuid-identifier').val(); + mydata['type'] = 'identifiers'; + for (var i=0;i<identInputs.length;i++) + { + mydata[j(identInputs[i]).attr('id')] = j(identInputs[i]).val(); + } + var ajaxCall = j.ajax({url: dspaceContextPath+"/json/submissionLookup", + type: "POST", + dataType: "json", + async: true, + contentType: "application/x-www-form-urlencoded;charset=UTF-8", + data: mydata, + error: function(info){ + j('#loading-search-result').modal("hide"); + var message = j('#jserrormessage').text(); + alert(message); + }, + success: function(info) { + if (info == null || info.result == null || info.result.length == 0) + { + j('#result-list').hide(); + j('#empty-result').show(); + } + else + { + submissionLookupShowResult(info, "-identifier"); + } + j('#loading-search-result').modal("hide"); + j('#tabs').find('a[href="#tabs-result"]').click(); + } + }); + j('#loading-search-result').data('ajaxCall', ajaxCall); + j('#loading-search-result').modal("show"); +} + +submissionLookupSearch = function(){ + var mydata = new Object(); + mydata['s_uuid'] = j('#suuid-search').val(); + mydata['type'] = 'search'; + mydata['title'] = j('#search_title').val(); + mydata['authors'] = j('#search_authors').val(); + mydata['year'] = j('#search_year').val(); + var ajaxCall = j.ajax({url: dspaceContextPath+"/json/submissionLookup", + type: "POST", + dataType: "json", + async: true, + contentType: "application/x-www-form-urlencoded;charset=UTF-8", + data: mydata, + error: function(info){ + j('#loading-search-result').modal('hide'); + var message = j('#jserrormessage').text(); + alert(message); + }, + success: function(info) { + if (info == null || info.result == null || info.result.length == 0) + { + j('#result-list').hide(); + j('#empty-result').show(); + } + else + { + submissionLookupShowResult(info, "-search"); + } + j('#loading-search-result').modal('hide'); + j('#tabs').find('a[href="#tabs-result"]').click(); + } + }); + j('#loading-search-result').data('ajaxCall', ajaxCall); + j('#loading-search-result').modal('show'); +} + +submissionLookupDetails = function(button, suffixID){ + var uuid = j(button).data('uuid'); + var mydata = new Object(); + var suuidID = 'suuid' + suffixID + mydata['s_uuid'] = j('#'+suuidID).val(); + mydata['type'] = 'details'; + mydata['i_uuid'] = uuid; + j.ajax({url: dspaceContextPath+"/json/submissionLookup", + type: "POST", + dataType: "json", + async: false, + contentType: "application/x-www-form-urlencoded;charset=UTF-8", + data: mydata, + error: function(info){var message = j('#jserrormessage').text();alert(message);}, + success: function(info) { + if (info == null || info.result == null || info.result.uuid != uuid) + { + var message = j('#jserrormessage').text(); + alert(message); + } + else + { + submissionLookupShowDetails(info.result); + } + j('#tabs').find('a[href="#tabs-result"]').click(); + } + }); +} + + +submissionLookupShowResult = function(info, suffixID){ + j('#result-list').show(); + j('#empty-result').hide(); + j('#result-list').html(" "); + for (var i=0;i<info.result.length;i++) + { + var bt = j('<button class="btn btn-info" type="button">').append(j('#jsseedetailsbuttonmessage').text()); + var par = j('<p class="sl-result">'); + var divImg = j('<div class="submission-lookup-providers">'); + par.append(divImg); + for (var k=0;k<info.result[i].providers.length;k++) + { + var prov = info.result[i].providers[k]; + divImg.append(j('<img class="img-thumbnail" src="'+dspaceContextPath+'/image/submission-lookup-small-'+prov+'.jpg">')); + } + par + .append(j('<span class="sl-result-title">').text(info.result[i].title)) + .append(j('<span class="sl-result-authors">').text(info.result[i].authors)) + .append(j('<span class="sl-result-date">').text(info.result[i].issued)) + .append(bt); + j('#result-list').append(par); + bt.button(); + bt.data({uuid: info.result[i].uuid}); + bt.click(function(){ + submissionLookupDetails(this, suffixID); + }); + } +} + +submissionLookupShowDetails = function(info){ + + var modalbody = j('#loading-details .modal-body'); + var divImg = j('<div class="submission-lookup-providers">'); + + for (var k=0;k<info.providers.length;k++) + { + var prov = info.providers[k]; + divImg.append(j('<img class="img-thumbnail" src="'+dspaceContextPath+'/image/submission-lookup-small-'+prov+'.jpg">')); + } + modalbody.append(divImg); + var detailsDiv = j('<div class="submission-lookup-details">'); + var details = j('<table class="table">'); + detailsDiv.append(details); + + for (var i=0;i<info.fieldsLabels.length;i++) + { + var fieldName = info.fieldsLabels[i][0]; + var fieldLabel = info.fieldsLabels[i][1]; + var values = info.publication[fieldName]; + var tr = j('<tr>'); + tr.append(j('<td class="submission-lookup-label">').append(fieldLabel)); + var td = j('<td>'); + tr.append(td); + for (var k=0;k<values.length;k++) + { + td.append(j('<span>').text(values[k])); + if (k != values.length-1) + { + td.append('<br>'); + } + } + details.append(tr); + } + modalbody.append(detailsDiv); + + modalbody.append(j('#select-collection-div')); + j('#select-collection').val(info.collection); + + var modalfooter = j('#loading-details .modal-footer'); + var start = j('<button class="btn btn-success" type="button">'); + start.append(j('#jsfilldatabuttonmessage').text()); + start.button(); + start.click(function(){ + var selcolid = j('#select-collection').val(); + if (selcolid != null && selcolid != -1) + { + j('#collectionid').val(selcolid); + j('#iuuid').val(info.uuid); + j('#form-submission').submit(); + } + else + { + j('#no-collection-warn').modal('show'); + j('#loading-details').modal('hide'); + } + }); + modalfooter.append(start); + j('#loading-details').modal('show'); +}; + +submissionLookupFile = function(form){ + + var suuidVal = j('#suuid-loader').val(); + var suuid = j('<input type="hidden" name="s_uuid" value="'+suuidVal+'">'); + var collectionidVal = j('#select-collection-file').val(); + var collectionid = j('<input type="hidden" name="collectionid" value="'+collectionidVal+'">'); + var preview_loader = ""; + if(j('#preview_loader').is (':checked')) { + preview_loader = j('<input type="hidden" name="skip_loader" value="false">'); + } + else { + preview_loader = j('<input type="hidden" name="skip_loader" value="true">'); + } + + var provider_loaderVal = j('#provider_loader').val(); + var provider_loader = j('<input type="hidden" name="provider_loader" value="'+provider_loaderVal+'">'); + + // Create the iframe... + var iframe = j('<iframe name="upload_iframe" id="upload_iframe" style="display: none" />'); + // Add to document... + j("body").append(iframe); + + // Add event... + var eventHandler = function () { + + j('#upload_iframe').off(); + + var clickResultTab = true; + var index = 0; + var iindex = new Array(); + // Message from server... + var json = j.parseJSON(j('#upload_iframe').contents().find('body').text()); + if (json == null || json.result == null || json.result.length == 0) + { + j('#result-list').hide(); + j('#empty-result').show(); + } + else + { + for (var i = 0; i < json.result.length; i++) { + if (json.result[i].skip == true) { + clickResultTab = false; + index = i; + break; + } + iindex[i] = json.result[i].uuid; + } + } + if (clickResultTab) { + submissionLookupShowResult(json, "-loader"); + j('#loading-file-result').modal("hide"); + j('#tabs').find('a[href="#tabs-result"]').click(); + } else { + // skip details + j('#collectionid').val(json.result[index].collectionid); + j('#suuid').val(json.result[index].uuid); + j('#fuuid').val(iindex); + j('#form-submission').submit(); + return false; + } + // Del the iframe... + j('upload_iframe').empty(); + }; + + j('#upload_iframe').on("load", eventHandler); + + // Set properties of form... + form.attr("target", "upload_iframe"); + form.attr("action", dspaceContextPath+"/json/submissionLookup"); + form.attr("method", "post"); + form.attr("enctype", "multipart/form-data"); + form.attr("encoding", "multipart/form-data"); + form.attr("target", "upload_iframe"); + form.attr("file", j('#file_upload').val()); + + j(form).append(suuid); + j(form).append(collectionid); + j(form).append(preview_loader); + j(form).append(provider_loader); + // Submit the form... + form.submit(); + + j('#loading-file-result').modal("show"); + + +}; + + diff --git a/dspace-jspui/src/main/webapp/submit/access-step.js b/dspace-jspui/src/main/webapp/submit/access-step.js new file mode 100644 index 0000000..6e4417e --- /dev/null +++ b/dspace-jspui/src/main/webapp/submit/access-step.js @@ -0,0 +1,24 @@ +/* + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +(function() { + jQuery.noConflict(); + jQuery(document).ready(function($) { + $("input[name='open_access_radios']").change(function() { + if ($("#embargo_until_date").attr("disabled") == undefined) { + $("#embargo_until_date").attr("disabled", "disabled"); + $("#reason").attr("disabled", "disabled"); + } else { + $("#embargo_until_date").removeAttr("disabled"); + $("#reason").removeAttr("disabled"); + } + }); + $("#embargo_until_date").datepicker({ + dateFormat: "yy-mm-dd" + }); + }); +})(); diff --git a/dspace-jspui/src/main/webapp/submit/access-step.jsp b/dspace-jspui/src/main/webapp/submit/access-step.jsp new file mode 100644 index 0000000..caea7de --- /dev/null +++ b/dspace-jspui/src/main/webapp/submit/access-step.jsp @@ -0,0 +1,118 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Initial questions for keeping UI as simple as possible. + - + - Attributes to pass in: + - submission.info - the SubmissionInfo object + --%> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" + prefix="fmt" %> + +<%@ page import="java.util.List" %> +<%@ page import="javax.servlet.jsp.jstl.fmt.LocaleSupport" %> + +<%@ page import="org.dspace.app.util.SubmissionInfo" %> +<%@ page import="org.dspace.app.webui.servlet.SubmissionController" %> +<%@ page import="org.dspace.app.webui.util.UIUtil" %> +<%@ page import="org.dspace.authorize.AuthorizeManager" %> +<%@ page import="org.dspace.authorize.ResourcePolicy" %> +<%@ page import="org.dspace.content.Item" %> +<%@ page import="org.dspace.core.ConfigurationManager" %> +<%@ page import="org.dspace.core.Context" %> +<%@ page import="org.dspace.submit.AbstractProcessingStep" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + +<% + // Obtain DSpace context + Context context = UIUtil.obtainContext(request); + + //get submission information object + SubmissionInfo subInfo = SubmissionController.getSubmissionInfo(context, request); + + // Policies List + List<ResourcePolicy> policies = AuthorizeManager.findPoliciesByDSOAndType(context, subInfo.getSubmissionItem().getItem(), ResourcePolicy.TYPE_CUSTOM); + + boolean advanced = ConfigurationManager.getBooleanProperty("webui.submission.restrictstep.enableAdvancedForm", false); + + int error_id = request.getAttribute("error_id") == null ? 0 : ((Integer)request.getAttribute("error_id")).intValue(); + + Item item = subInfo.getSubmissionItem().getItem(); + String discoverableChecked = item.isDiscoverable() ? "" : " checked=\"checked\""; + +%> +<dspace:layout style="submission" locbar="off" navbar="off" titlekey="jsp.submit.access.title" nocache="true"> + + <form action="<%= request.getContextPath() %>/submit" method="post" onkeydown="return disableEnterKey(event);"> + + <jsp:include page="/submit/progressbar.jsp" /> +<h2><fmt:message key="jsp.submit.access.title" /></h2> +<% + if (error_id > 0) + { + String key = "jsp.submit.access.error_" + error_id; +%> + <div class="alert alert-warning submitFormWarn"><fmt:message key="<%= key %>"/></div> +<% + } +%> + + + <div class="panel panel-primary"><div class="panel-heading"><fmt:message key="jsp.submit.access.access_setting.heading"/></div> + <div class="panel-body"> + <h3 class="access-setting"><fmt:message key="jsp.submit.access.private_setting.heading"/></h3> + + <div class="row"> + <label class="col-md-2" for="private_option"><fmt:message key="jsp.submit.access.private_setting.label"/></label> + <div class="col-md-10"> + <div class="input-group"> + <span class="input-group-addon"> + <input id="private_option" name="private_option" type="checkbox" value="1" <%= discoverableChecked %>/> + </span> + <span class="form-control"><fmt:message key="jsp.submit.access.private_setting.help"/></span> + </div> + </div> + </div> + + <h3 class="access-setting"><fmt:message key="jsp.submit.access.embargo_setting.heading"/></h3> + + <dspace:access-setting subInfo="<%= subInfo %>" dso="<%= subInfo.getSubmissionItem().getItem() %>" embargo="<%= advanced ? true : false %>" addpolicy="<%= advanced ? true : false %>" /> + </div> + </div> + +<% + if (advanced) + { +%> + <div class="panel panel-info"><div class="panel-heading"><fmt:message key="jsp.submit.access.plist.heading"/></div> + <div id="policies-help" class="container help-block"><fmt:message key="jsp.submit.access.policy_setting.help"/></div> + <dspace:policieslist policies="<%= policies %>" /> + </div> +<% + } +%> + + <%-- Hidden fields needed for SubmissionController servlet to know which step is next--%> + <div class="row"> + <%= SubmissionController.getSubmissionParameters(context, request) %> + <div class="col-md-6 pull-right btn-group"> + <input class="btn btn-default col-md-4" type="submit" name="<%=AbstractProcessingStep.PREVIOUS_BUTTON%>" value="<fmt:message key="jsp.submit.general.previous"/>" /> + <input class="btn btn-default col-md-4" type="submit" name="<%=AbstractProcessingStep.CANCEL_BUTTON%>" value="<fmt:message key="jsp.submit.general.cancel-or-save.button"/>" /> + <input class="btn btn-primary col-md-4" type="submit" name="<%=AbstractProcessingStep.NEXT_BUTTON%>" value="<fmt:message key="jsp.submit.general.next"/>" /> + </div> + </div> + </form> + + <script type="text/javascript" src="<%= request.getContextPath() %>/submit/access-step.js"></script> +</dspace:layout> diff --git a/dspace-jspui/src/main/webapp/submit/edit-bitstream-access.jsp b/dspace-jspui/src/main/webapp/submit/edit-bitstream-access.jsp new file mode 100644 index 0000000..c0ff9ac --- /dev/null +++ b/dspace-jspui/src/main/webapp/submit/edit-bitstream-access.jsp @@ -0,0 +1,96 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Initial questions for keeping UI as simple as possible. + - + - Attributes to pass in: + - submission.info - the SubmissionInfo object + --%> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" + prefix="fmt" %> + +<%@ page import="java.util.List" %> +<%@ page import="javax.servlet.jsp.jstl.fmt.LocaleSupport" %> + +<%@ page import="org.dspace.app.util.SubmissionInfo" %> +<%@ page import="org.dspace.app.webui.servlet.SubmissionController" %> +<%@ page import="org.dspace.app.webui.util.UIUtil" %> +<%@ page import="org.dspace.authorize.AuthorizeManager" %> +<%@ page import="org.dspace.authorize.ResourcePolicy" %> +<%@ page import="org.dspace.content.Item" %> +<%@ page import="org.dspace.core.ConfigurationManager" %> +<%@ page import="org.dspace.core.Context" %> +<%@ page import="org.dspace.submit.AbstractProcessingStep" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + +<% + // Obtain DSpace context + Context context = UIUtil.obtainContext(request); + + //get submission information object + SubmissionInfo subInfo = SubmissionController.getSubmissionInfo(context, request); + + // Policies List + List<ResourcePolicy> policies = AuthorizeManager.findPoliciesByDSOAndType(context, subInfo.getBitstream(), ResourcePolicy.TYPE_CUSTOM); + + boolean advanced = ConfigurationManager.getBooleanProperty("webui.submission.restrictstep.enableAdvancedForm", false); + + int error_id = request.getAttribute("error_id") == null ? 0 : ((Integer)request.getAttribute("error_id")).intValue(); + + Item item = subInfo.getSubmissionItem().getItem(); + String discarableChecked = item.isDiscoverable() ? "" : " checked=\"checked\""; + +%> + +<dspace:layout style="submission" locbar="off" navbar="off" titlekey="jsp.submit.edit-bitstream-access.title" nocache="true"> + + <form action="<%= request.getContextPath() %>/submit" method="post" onkeydown="return disableEnterKey(event);"> + + <jsp:include page="/submit/progressbar.jsp" /> + +<% + if (error_id > 0) + { + String key = "jsp.submit.access.error_" + error_id; +%> + <div class="submitFormWarn"><fmt:message key="<%= key %>"/></div> +<% + } +%> +<% + if (advanced) + { +%> + <h2 class="alert alert-info"><fmt:message key="jsp.submit.access.plist.heading"/></h2> + + <dspace:policieslist policies="<%= policies %>" /> +<% + } +%> + + <h2 class="alert alert-info"><fmt:message key="jsp.submit.edit-bitstream-access.heading"/></h2> + + <dspace:access-setting subInfo="<%= subInfo %>" dso="<%= subInfo.getBitstream() %>" embargo="<%= advanced ? true : false %>" addpolicy="<%= advanced ? true : false %>" /> + + + <%-- Hidden fields needed for SubmissionController servlet to know which step is next--%> + <%= SubmissionController.getSubmissionParameters(context, request) %> + <div class="col-md-4 pull-right btn-group"> + <input class="btn btn-default col-md-6" type="submit" name="submit_edit_cancel" value="<fmt:message key="jsp.submit.general.cancel"/>" /> + <input class="btn btn-primary col-md-6" type="submit" name="submit_save" value="<fmt:message key="jsp.submit.edit-bitstream-access.save.button"/>" /> + </div> + </form> + + <script type="text/javascript" src="<%= request.getContextPath() %>/submit/access-step.js"></script> +</dspace:layout> diff --git a/dspace-jspui/src/main/webapp/submit/edit-policy.jsp b/dspace-jspui/src/main/webapp/submit/edit-policy.jsp new file mode 100644 index 0000000..9bdb53f --- /dev/null +++ b/dspace-jspui/src/main/webapp/submit/edit-policy.jsp @@ -0,0 +1,69 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Initial questions for keeping UI as simple as possible. + - + - Attributes to pass in: + - submission.info - the SubmissionInfo object + - rp - the target resource policy + --%> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" + prefix="fmt" %> + +<%@ page import="java.util.List" %> +<%@ page import="javax.servlet.jsp.jstl.fmt.LocaleSupport" %> + +<%@ page import="org.apache.commons.lang.time.DateFormatUtils" %> +<%@ page import="org.dspace.app.util.SubmissionInfo" %> +<%@ page import="org.dspace.app.webui.servlet.SubmissionController" %> +<%@ page import="org.dspace.submit.step.AccessStep" %> +<%@ page import="org.dspace.app.webui.util.UIUtil" %> +<%@ page import="org.dspace.authorize.ResourcePolicy" %> +<%@ page import="org.dspace.core.Context" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + +<% + // Obtain DSpace context + Context context = UIUtil.obtainContext(request); + + //get submission information object + SubmissionInfo subInfo = SubmissionController.getSubmissionInfo(context, request); + + // Policies List + ResourcePolicy rp = (ResourcePolicy) subInfo.get(AccessStep.SUB_INFO_SELECTED_RP); + +%> + +<dspace:layout style="submission" locbar="off" navbar="off" titlekey="jsp.submit.access.title" nocache="true"> + + <form action="<%= request.getContextPath() %>/submit" method="post" onkeydown="return disableEnterKey(event);"> + + <jsp:include page="/submit/progressbar.jsp" /> + + <h1><fmt:message key="jsp.submit.access.edit_policy.heading"/></h1> + + <dspace:access-setting subInfo="<%= subInfo %>" rp="<%= rp %>" embargo="true" /> + + <%-- Hidden fields needed for SubmissionController servlet to know which step is next--%> + <%= SubmissionController.getSubmissionParameters(context, request) %> + <input type="hidden" name="policy_id" value="<%= rp.getID() %>" /> + <div class="col-md-4 pull-right btn-group"> + <input class="btn btn-default col-md-6" type="submit" name="submit_edit_cancel" value="<fmt:message key="jsp.submit.general.cancel"/>" /> + <input class="btn btn-primary col-md-6" type="submit" name="submit_save" value="<fmt:message key="jsp.submit.general.save"/>" /> + </div> + </form> + + <script type="text/javascript" src="<%= request.getContextPath() %>/submit/access-step.js"></script> + +</dspace:layout> diff --git a/dspace-jspui/src/main/webapp/submit/review-policy.jsp b/dspace-jspui/src/main/webapp/submit/review-policy.jsp new file mode 100644 index 0000000..bafa741 --- /dev/null +++ b/dspace-jspui/src/main/webapp/submit/review-policy.jsp @@ -0,0 +1,96 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Review file upload info + - + - Parameters to pass in to this page (from review.jsp) + - submission.jump - the step and page number (e.g. stepNum.pageNum) to create a "jump-to" link + --%> +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@page import="org.dspace.core.ConfigurationManager"%> +<%@page import="org.dspace.authorize.AuthorizeManager"%> +<%@page import="java.util.Date"%> +<%@page import="org.dspace.authorize.ResourcePolicy"%> +<%@page import="java.util.List"%> +<%@ page import="org.dspace.app.webui.servlet.SubmissionController" %> +<%@ page import="org.dspace.app.util.SubmissionInfo" %> +<%@ page import="org.dspace.app.webui.util.UIUtil" %> +<%@ page import="org.dspace.content.Bitstream" %> +<%@ page import="org.dspace.content.BitstreamFormat" %> +<%@ page import="org.dspace.content.Item" %> +<%@ page import="org.dspace.core.Context" %> +<%@ page import="org.dspace.core.Utils" %> + +<%@ page import="javax.servlet.jsp.jstl.fmt.LocaleSupport" %> +<%@ page import="javax.servlet.jsp.PageContext" %> + + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> + +<% + request.setAttribute("LanguageSwitch", "hide"); + + //get the step number (for jump-to link) + String stepJump = (String) request.getParameter("submission.jump"); + Boolean isDiscoverable = (Boolean) request.getAttribute("submission.item.isdiscoverable"); + List<ResourcePolicy> rpolicies = (List<ResourcePolicy>)request.getAttribute("submission.item.rpolicies"); + Boolean advanced = (Boolean) request.getAttribute("advancedEmbargo"); +%> + + +<%-- ====================================================== --%> +<%-- REVIEW POLICY --%> +<%-- ====================================================== --%> +<div class="col-md-10"> + <div class="row"> + <span class="metadataFieldLabel col-md-4"><fmt:message key="jsp.submit.access.private_setting.heading"/></span> + <span + class="metadataFieldValue col-md-8"> <% if(isDiscoverable) { %> + <fmt:message + key="jsp.submit.access.private_setting.review.discoverable" /> <% } else { %> + <fmt:message + key="jsp.submit.access.private_setting.review.notdiscoverable" /> <% } %> + </span> + </div> +</div> + +<% if(rpolicies!=null && !rpolicies.isEmpty()) { %> +<div class="col-md-10"> + <% if(advanced) { %> + <div class="row"> + <span class="metadataFieldLabel col-md-10"><fmt:message key="jsp.submit.access.plist.heading"/></span> + </div> + <div class="container row"> + <dspace:policieslist policies="<%= rpolicies %>" showButton="false" /> + </div> + <% } else { %> + <% Date startDate = rpolicies.get(0).getStartDate(); + if(startDate!=null) { %> + <div class="row"> + <span class="metadataFieldLabel col-md-4"><fmt:message key="jsp.submit.access.embargo_setting.heading"/></span> + <span + class="metadataFieldValue col-md-8"> + + <fmt:message key="jsp.submit.access.review.embargoed"><fmt:param><%= startDate %></fmt:param></fmt:message> + </span> + </div> + <% } %> + <% } %> + +</div> +<% } %> + +<div class="col-md-2"> + <input class="btn btn-default" type="submit" + name="submit_jump_<%=stepJump%>" + value="<fmt:message key="jsp.submit.access.review.button"/>" /> +</div> \ No newline at end of file diff --git a/dspace-jspui/src/main/webapp/submit/start-lookup-submission.jsp b/dspace-jspui/src/main/webapp/submit/start-lookup-submission.jsp new file mode 100644 index 0000000..9b42446 --- /dev/null +++ b/dspace-jspui/src/main/webapp/submit/start-lookup-submission.jsp @@ -0,0 +1,469 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - UI page for start of a submission with lookup on external sources. + - + - Required attributes: + - collections - Array of collection objects to show in the drop-down. + collectionID - the collection ID of preference for the user + identifiers2providers + searchProviders + --%> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ page import="javax.servlet.jsp.jstl.fmt.LocaleSupport" %> + +<%@ page import="org.dspace.content.Collection" %> +<%@ page import="java.lang.Boolean" %> +<%@ page import="java.util.List" %> +<%@ page import="java.util.Map" %> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" + prefix="c" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" + prefix="fmt" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + +<% + String contextPath = "/dspace-jspui"; + request.setAttribute("LanguageSwitch", "hide"); + + //get collections to choose from + Collection[] collections = + (Collection[]) request.getAttribute("collections"); + + //get community handle + int communityId = (Integer) request.getAttribute("collectionID"); + + //check if we need to display the "no collection selected" error + Boolean noCollection = (Boolean) request.getAttribute("no.collection"); + Boolean nosuuid = (Boolean) request.getAttribute("nouuid"); + Boolean expired = (Boolean) request.getAttribute("expired"); + + Map<String, List<String>> identifiers2providers = (Map<String, List<String>>) request.getAttribute("identifiers2providers"); + List<String> searchProviders = (List<String>) request.getAttribute("searchProviders"); + List<String> fileLoaders = (List<String>) request.getAttribute("fileLoaders"); + List<String> identifiers = (List<String>) request.getAttribute("identifiers"); + String uuid = (String) request.getAttribute("s_uuid"); +%> +<c:set var="dspace.layout.head" scope="request"> + <style type="text/css"> + + #link-ricerca-identificatore {cursor: pointer; font-weight: bold; color: #FF6600;} + .sl-result {padding: 10px;} + .sl-result:HOVER {background-color: #5C9CCC;} + .sl-result-title, .sl-result-authors, .sl-result-date {display: block;} + .sl-result-title {font-weight: bold;} + .sl-result-authors {font-style: italic;} + .sl-result-date {margin-bottom: 10px;} + .invalid-value {border: 1px solid #FF6600;} + </style> + <script type='text/javascript'>var dspaceContextPath = "<%=request.getContextPath()%>";</script> +</c:set> +<c:set var="dspace.layout.head.last" scope="request"> + <script type="text/javascript" src="<%= request.getContextPath() %>/static/js/submission-lookup.js"></script> +</c:set> + +<dspace:layout style="submission" locbar="off" + navbar="off" + titlekey="jsp.submit.start-lookup-submission.title" + nocache="true"> + + <h1><fmt:message key="jsp.submit.start-lookup-submission.heading"/></h1> + <div id="jserrormessage" style="display: none"><fmt:message key="jsp.submit.start-lookup-submission.js.errormessage"/></div> + <div id="jsseedetailsbuttonmessage" style="display: none"><fmt:message key="jsp.submit.start-lookup-submission.js.detailsbuttonmessage"/></div> + <div id="jsfilldatabuttonmessage" style="display: none"><fmt:message key="jsp.submit.start-lookup-submission.js.filldataandstartbuttonmessage"/></div> + +<% if (collections.length > 0) + { + //if no collection was selected, display an error + if((noCollection != null) && (noCollection.booleanValue()==true)) + { +%> + <div class="alert alert-warning"> + <p><fmt:message key="jsp.submit.start-lookup-submission.no-collection"/></p> + </div> +<% + } + //if no collection was selected, display an error + if((nosuuid != null) && (nosuuid.booleanValue()==true)) + { +%> + <div class="alert alert-warning"> + <p><fmt:message key="jsp.submit.start-lookup-submission.nosuuid"/></p> + </div> +<% + } + //if no collection was selected, display an error + if((expired != null) && (expired.booleanValue()==true)) + { +%> + <div class="alert alert-warning"> + <p><fmt:message key="jsp.submit.start-lookup-submission.expired"/></p> + </div> +<% + } +%> + +<div id="tabs"> + <ul class="nav nav-tabs"> + <li class="active"><a href="#tabs-search"><fmt:message key="jsp.submit.start-lookup-submission.tabs.search" /></a></li> + <li><a href="#tabs-result"><fmt:message key="jsp.submit.start-lookup-submission.tabs.result" /></a></li> + </ul> + <div class="tab-content"> + <div class="tab-pane" id="tabs-search"> + + + <div id="tabs-search-accordion"> + <h3><a href="#"><fmt:message key="jsp.submit.start-lookup-submission.manual-submission"/></a></h3> + <div id="manual-accordion"> </div> +<% + if (searchProviders != null && searchProviders.size() > 0) { + %> + <h3><a href="#"><fmt:message key="jsp.submit.start-lookup-submission.search"/></a></h3> + <div id="search-accordion"> + <form class="form-horizontal" id="form-submission-search" action="" method="post"> + <input type="hidden" id="suuid-search" name="suuid" value="<%= uuid %>"/> + <input type="hidden" id="iuuid-search" name="iuuid" value=""/> + <input type="hidden" id="fuuid-search" name="fuuid" value=""/> + <input type="hidden" id="collectionid-search" name="collectionid" value=""/> +<% + for (String provider : searchProviders) + { +%> + <img class="img-thumbnail" src="<%= request.getContextPath() %>/image/submission-lookup-small-<%= provider %>.jpg" /> +<% + } + %> + <p class="help-block"><fmt:message key="jsp.submit.start-lookup-submission.search.hints"/></p> + <div class="form-group"> + <label for="search_title"><fmt:message key="jsp.submit.start-lookup-submission.search.title"/>:</label> + <textarea class="form-control submission-lookup-search" name="search_title" id="search_title" cols="50" row="4"></textarea> + </div> + <div class="form-group"> + <label for="search_year"><fmt:message key="jsp.submit.start-lookup-submission.search.year"/>:</label> + <input class="form-control submission-lookup-search" type="text" size="7" name="search_year" id="search_year" /> + </div> + + <div class="form-group"> + <label for="search_authors"><fmt:message key="jsp.submit.start-lookup-submission.search.authors"/>:</label> + <textarea class="form-control submission-lookup-search" name="search_authors" id="search_authors"cols="50" row="4"></textarea> + </div> + + <div class="row"> + <button type="button" class="btn btn-primary col-md-2 pull-right" id="search_go"><fmt:message key="jsp.submit.start-lookup-submission.search-go"/></button> + </div> + </form> + </div> +<% } %> + + + <h3><a href="#"><fmt:message key="jsp.submit.start-lookup-submission.identifiers"/></a></h3> + <div id="identifier-accordion"> + <form class="form-horizontal" id="form-submission-identifier" action="" method="post"> + <input type="hidden" id="suuid-identifier" name="suuid" value="<%= uuid %>"/> + <input type="hidden" id="iuuid-identifier" name="iuuid" value=""/> + <input type="hidden" id="fuuid-identifier" name="fuuid" value=""/> + <input type="hidden" id="collectionid-identifier" name="collectionid" value=""/> +<% if (identifiers != null && identifiers.size()>0) { + %> + + <p class="help-block"><fmt:message key="jsp.submit.start-lookup-submission.identifiers.hints"/></p> +<% + for (String identifier : identifiers) + { +%> +<c:set var="identifier"><%= identifier %></c:set> + <div class="form-group"> + <label class="col-md-3" for="identifier_<%= identifier%>"><span class="submission-lookup-label"><fmt:message key="jsp.submit.start-lookup-submission.identifier-${identifier}"/>:</span> + <span class="help-block submission-lookup-hint"><fmt:message key="jsp.submit.start-lookup-submission.identifier-${identifier}.hint"/></span></label> + <div class="col-md-9"> + <div class="col-md-4"> + <input class="form-control submission-lookup-identifier" type="text" name="identifier_<%= identifier%>" id="identifier_<%= identifier%>" /> + </div> + <div class="col-md-7"> +<% + for (String provider : identifiers2providers.get(identifier)) + { +%> + + <img class="img-thumbnail" src="<%= request.getContextPath() %>/image/submission-lookup-small-<%= provider %>.jpg" /> + +<% + } +%></div></div></div><% + } %> + <div class="row"> + <button class="btn btn-primary col-md-2 pull-right" type="button" id="lookup_idenfifiers"><fmt:message key="jsp.submit.start-lookup-submission.identifier.lookup"/></button> + </div> + </form> + </div> +<% + + } %> + + <% if (fileLoaders != null && fileLoaders.size()>0) { + %> + <h3><a href="#"><fmt:message key="jsp.submit.start-lookup-submission.byfile"/></a></h3> + <div id="file-accordion" class="container"> + <form class="form-horizontal" id="form-submission-loader" action="" method="post"> + <input type="hidden" id="suuid-loader" name="suuid" value="<%= uuid %>"/> + <input type="hidden" id="iuuid-loader" name="iuuid" value=""/> + <input type="hidden" id="fuuid-loader" name="fuuid" value=""/> + <input type="hidden" id="collectionid-loader" name="collectionid" value=""/> + <p class="help-block"><fmt:message key="jsp.submit.start-lookup-submission.byfile.hints"/></p> + + <div class="form-group"> + <label class="col-md-3" for="provider_loader"><span class="submission-lookup-label"><fmt:message key="jsp.submit.start-lookup-submission.byfile.chooseprovider"/>:</span></label> + <div class="col-md-6"> + <select class="form-control submission-file-loader" name="provider_loader" id="provider_loader"> + <option value="-1"><fmt:message key="jsp.submit.start-lookup-submission.select.collection.defaultoption"/></option> + <% + for (String dataLoader : fileLoaders) + { + %> + <option value="<%= dataLoader %>"><%= dataLoader %></option> + <% + } + %> + </select> + </div> + </div> + <div class="form-group"> + <label class="col-md-3" for="file_upload"><fmt:message key="jsp.submit.start-lookup-submission.byfile.file"/>:</label> + <div class="col-md-7"> + <input class="form-control submission-file-loader" type="file" name="file_upload" id="file_upload" /> + </div> + </div> + + <div class="container checkbox"> + <input class="submission-file-loader submission-preview-loader" type="checkbox" name="preview_loader" id="preview_loader" value="<%= Boolean.TRUE%>"/><span class="help-block"><fmt:message key="jsp.submit.start-lookup-submission.byfile.filepreview"/></span> + </div> + + <div class="form-group" id="select-collection-file-div"> + <label class="col-md-3" for="select-collection-file"><fmt:message key="jsp.submit.start-lookup-submission.byfile.filecollection"/>:</label> + <div class="col-md-6"> + <select class="form-control submission-file-loader" name="select-collection-file" id="select-collection-file"> + <% for (Collection c : collections) { %> + <option value="<%= c.getID() %>"><%= c.getName() %></option> + <% } %> + </select> + </div> + </div> + <button class="btn btn-primary col-md-2 pull-right" type="button" id="loadfile_go"><fmt:message key="jsp.submit.start-lookup-submission.byfile.process"/></button> + </form> + </div> +<% + + } %> + + </div> + +</div> + +<div class="tab-pane" id="tabs-result"> + <div id="empty-result"> + <p class="alert alert-warning"><fmt:message key="jsp.submit.start-lookup-submission.noresult"/></p> + </div> + <div id="result-list"></div> + <div id="manual-submission"> + <div class="form-group"> + <div class="col-md-3"> + <label for="select-collection-manual"><fmt:message key="jsp.submit.start-lookup-submission.select.collection.label"/></label> + </div> + <div class="col-md-7"> + <select class="form-control" id="select-collection-manual"> + <option value="-1"><fmt:message key="jsp.submit.start-lookup-submission.select.collection.defaultoption"/></option> + <% for (Collection c : collections) { %> + <option value="<%= c.getID() %>"><%= c.getName() %></option> + <% } %> + </select> + </div> + </div> + <form class="form-horizontal" id="form-submission" action="" method="post"> + <input type="hidden" id="iuuid" name="iuuid" value=""/> + <input type="hidden" id="fuuid" name="fuuid" value=""/> + <input type="hidden" id="suuid" name="suuid" value="<%= uuid %>"/> + <input type="hidden" id="collectionid" name="collectionid" value=""/> + <div class="btn-group"> + <button class="btn btn-success col-md-offset-5" id="manual-submission-button" type="button"><fmt:message key="jsp.submit.start-lookup-submission.button.manual-submission"/> </button> + </div> + </form> + </div> + </div> + <div class="row container"> + <button type="button" class="btn btn-default col-md-2 pull-right exit"><fmt:message key="jsp.submit.start-lookup-submission.exit"/></button> + </div> +</div> +</div> + <div id="hidden-area" style="display: none;"> + <div id="select-collection-div"> + <select class="form-control" id="select-collection"> + <% for (Collection c : collections) { %> + <option value="<%= c.getID() %>"><%= c.getName() %></option> + <% } %> + </select> + </div> + </div> + + +<div id="no-collection-warn" class="modal"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> + <h4 class="modal-title"><fmt:message key="jsp.submit.start-lookup-submission.no-collection-warn.title" /></h4> + </div> + <div class="modal-body"> + <p class="alert alert-warning"><fmt:message key="jsp.submit.start-lookup-submission.no-collection-warn.hint" /></p> + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-default" data-dismiss="modal"><fmt:message key="jsp.submit.start-lookup-submission.no-collection.dialog.return" /></button> + </div> + </div><!-- /.modal-content --> + </div><!-- /.modal-dialog --> +</div><!-- /.modal --> + +<div id="loading-search-result" class="modal"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> + <h4 class="modal-title"><fmt:message key="jsp.submit.start-lookup-submission.search-loading.title" /></h4> + </div> + <div class="modal-body"> + <p class="help-block"><fmt:message key="jsp.submit.start-lookup-submission.search-loading.hint" /></p> + </div> + <div class="modal-footer"> + <img src="<%= request.getContextPath() %>/sherpa/image/ajax-loader-big.gif"/> + </div> + </div><!-- /.modal-content --> + </div><!-- /.modal-dialog --> +</div><!-- /.modal --> + +<div id="loading-file-result" class="modal"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> + <h4 class="modal-title"><fmt:message key="jsp.submit.start-lookup-submission.search-loading.title" /></h4> + </div> + <div class="modal-body"> + <p class="help-block"><fmt:message key="jsp.submit.start-lookup-submission.search-loading.hint" /></p> + </div> + <div class="modal-footer"> + <img src="<%= request.getContextPath() %>/sherpa/image/ajax-loader-big.gif"/> + </div> + </div><!-- /.modal-content --> + </div><!-- /.modal-dialog --> +</div><!-- /.modal --> + +<div id="loading-details" class="modal"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> + <h4 class="modal-title"><fmt:message key="jsp.submit.start-lookup-submission.js.titlepopupmessage" /></h4> + </div> + <div class="modal-body"> + + </div> + <div class="modal-footer"> + + </div> + </div><!-- /.modal-content --> + </div><!-- /.modal-dialog --> +</div><!-- /.modal --> + +<% } else { %> + <p class="submitFormWarn"><fmt:message key="jsp.submit.select-collection.none-authorized"/></p> +<% } %> + <br/> + <p><fmt:message key="jsp.general.goto"/><br /> + <a href="<%= request.getContextPath() %>"><fmt:message key="jsp.general.home"/></a><br /> + <a href="<%= request.getContextPath() %>/mydspace"><fmt:message key="jsp.general.mydspace" /></a> + </p> + <script type="text/javascript"><!-- + var j = jQuery.noConflict(); + j("#tabs").tabs({ + beforeActivate: function( event, ui ) { + if ('tabs-result' == j(ui.newPanel).attr('id')) + { + j('#manual-submission').appendTo(j(ui.newPanel)); + } + else + { + j('#manual-submission').appendTo(j('#manual-accordion')); + } + } + }); + j('#tabs-search-accordion').accordion({ + heightStyle: "content", + collapsible: true, + active: false, + beforeActivate: function( event, ui ) { + if ('manual-accordion' == ui.newPanel.attr('id')) + { + j('#manual-submission').appendTo(ui.newPanel); + } + } + }); + j('#link-ricerca-identificatore').click(function(){ + j('#tabs-search-accordion').accordion({'active': 2}); + }); + j('button').button(); + j('#manual-submission-button').click(function(event){ + var colman = j('#select-collection-manual').val(); + if (colman != -1) + { + j('#collectionid').val(colman); + j('#form-submission').submit(); + } + else + { + j('#no-collection-warn').modal('show'); + } + }); + j('#lookup_idenfifiers').click(function(){ + submissionLookupIdentifiers(j('input.submission-lookup-identifier')); + }); + j('#search_go').click(function(){ + submissionLookupSearch(j('.submission-lookup-search')); + }); + j('#loadfile_go').click(function(){ + j('#select-collection').val(j('#select-collection-file').val()); + submissionLookupFile(j('#form-submission-loader')); + }); + j('button.exit').click(function(event){ + event.preventDefault(); + window.location = "<%= request.getContextPath() %>/mydspace"; + }); + j('#loading-search-result').on('hide.bs.modal', function () { + j(this).data('ajaxCall').abort(); + }); + j('#loading-details').on('hidden.bs.modal', function () { + j('#hidden-area').append(j('#select-collection-div')); + j('#loading-details .modal-body').empty(); + j('#loading-details .modal-footer').empty(); + }); + j(".submission-preview-loader").click(function() { + if(j(this).is (':checked')) { + j("#select-collection-file-div").hide(); + } + else { + j("#select-collection-file-div").show(); + } + }); + j('#tabs-search-accordion').accordion({'active': 0}); + --></script> + +</dspace:layout> diff --git a/dspace-jspui/src/main/webapp/tools/confirm-privating-item.jsp b/dspace-jspui/src/main/webapp/tools/confirm-privating-item.jsp new file mode 100644 index 0000000..18a8fc3 --- /dev/null +++ b/dspace-jspui/src/main/webapp/tools/confirm-privating-item.jsp @@ -0,0 +1,64 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Confirm privating of a item + - + - Attributes: + - item - item we may withdraw + --%> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" + prefix="fmt" %> + +<%@ page import="org.dspace.app.webui.servlet.admin.EditItemServlet" %> +<%@ page import="org.dspace.content.Item" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + +<% + String handle = (String) request.getAttribute("handle"); + Item item = (Item) request.getAttribute("item"); + request.setAttribute("LanguageSwitch", "hide"); +%> + +<dspace:layout titlekey="jsp.tools.confirm-privating-item.title" + navbar="admin" + locbar="link" + parenttitlekey="jsp.administer" + parentlink="/dspace-admin" + nocache="true"> + + <h1><fmt:message key="jsp.tools.confirm-privating-item.title"/>: <%= (handle == null ? String.valueOf(item.getID()) : handle) %></h1> + + <p><fmt:message key="jsp.tools.confirm-privating-item.question"/></p> + + <dspace:item item="<%= item %>" style="full" /> + + <form method="post" action=""> + <input type="hidden" name="item_id" value="<%= item.getID() %>"/> + <input type="hidden" name="action" value="<%= EditItemServlet.CONFIRM_PRIVATING %>"/> + + <center> + <table width="70%"> + <tr> + <td align="left"> + <input type="submit" name="submit" value="<fmt:message key="jsp.tools.confirm-privating-item.privating.button"/>" /> + </td> + <td align="right"> + <%-- <input type="submit" name="submit_cancel" value="Cancel" /> --%> + <input type="submit" name="submit_cancel" value="<fmt:message key="jsp.tools.general.cancel"/>" /> + </td> + </tr> + </table> + </center> + </form> +</dspace:layout> diff --git a/dspace-jspui/src/main/webapp/tools/curate-collection.jsp b/dspace-jspui/src/main/webapp/tools/curate-collection.jsp new file mode 100644 index 0000000..10cfe6d --- /dev/null +++ b/dspace-jspui/src/main/webapp/tools/curate-collection.jsp @@ -0,0 +1,95 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Form requesting a Handle or internal item ID for item editing + - + - Attributes: + - curate_group_options - options string of gropu selection. + - "" unless ui.taskgroups is set + - curate_task_options - options string of task selection. + - collection - the collection + - task_result - result of the curation task + --%> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" + prefix="fmt" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + +<%@ page import="javax.servlet.jsp.jstl.fmt.LocaleSupport" %> +<%@ page import="org.dspace.app.webui.servlet.admin.EditCommunitiesServlet" %> +<%@ page import="org.dspace.app.webui.util.CurateTaskResult" %> +<%@ page import="org.dspace.content.Collection" %> +<%@ page import="org.dspace.core.ConfigurationManager" %> +<%! + private static final String TASK_QUEUE_NAME = ConfigurationManager.getProperty("curate", "ui.queuename"); +%> +<% + Collection collection = (Collection) request.getAttribute("collection"); + int collectionID = (collection != null ? collection.getID() : -1); + int communityID = (collection.getParentObject() != null ? collection.getParentObject().getID() : -1); + String title = (collection != null ? collection.getMetadata("name") : "Unknown Collection"); + String groupOptions = (String)request.getAttribute("curate_group_options"); + String taskOptions = (String)request.getAttribute("curate_task_options"); +%> + +<dspace:layout style="submission" titlekey="jsp.tools.curate.collection.title" + navbar="admin" + locbar="link" + parenttitlekey="jsp.administer" + parentlink="/dspace-admin"> + +<%@ include file="/tools/curate-message.jsp" %> + + <h1><fmt:message key="jsp.tools.curate.collection.heading"> + <fmt:param value="<%= title %>"/> + </fmt:message> + </h1> + <div class="row container"> + <form action="<%=request.getContextPath()%>/tools/curate" method="post"> + +<% + if (groupOptions != null && !"".equals(groupOptions)) + { +%> + <label for="select_curate_group"><fmt:message key="jsp.tools.curate.select-group.tag"/></label>: + <select class="form-control" name="select_curate_group" id="select_curate_group" onchange="this.form.submit();"> + <%= groupOptions %> + </select> +<% + } +%> + <div class="input-group"> + <label for="curate_task" class="input-group-addon"><fmt:message key="jsp.tools.curate.select-task.tag"/>:</label> + <select class="form-control" name="curate_task" id="curate_task"> + <%= taskOptions %> + </select> + <input type="hidden" name="collection_id" value="<%= collectionID %>"/> + </div> + <br/> + <div class="col-md-4 row pull-right"> + <input class="btn btn-warning col-md-6" type="submit" name="submit_collection_queue" value="<fmt:message key="jsp.tools.curate.queue.button"/>" /> + <input class="btn btn-primary col-md-6" type="submit" name="submit_collection_curate" value="<fmt:message key="jsp.tools.curate.perform.button"/>" /> + </div> + </form> + </div> + <br/> + <div class="row container"> + <form method="post" action="<%=request.getContextPath()%>/tools/edit-communities"> + <input type="hidden" name="collection_id" value="<%= collectionID %>"/> + <input type="hidden" name="community_id" value="<%= communityID %>" /> + <input type="hidden" name="action" value="<%=EditCommunitiesServlet.START_EDIT_COLLECTION %>" /> + <input class="btn btn-default" type="submit" value="<fmt:message key="jsp.tools.curate.return.collection.button"/>" /> + </form> + </div> + +</dspace:layout> diff --git a/dspace-jspui/src/main/webapp/tools/curate-community.jsp b/dspace-jspui/src/main/webapp/tools/curate-community.jsp new file mode 100644 index 0000000..6c26c3d --- /dev/null +++ b/dspace-jspui/src/main/webapp/tools/curate-community.jsp @@ -0,0 +1,95 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Form requesting a Handle or internal item ID for item editing + - + - Attributes: + - curate_group_options - options string of gropu selection. + - "" unless ui.taskgroups is set + - curate_task_options - options string of task selection. + - community - the community + - task_result - result of the curation task + --%> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" + prefix="fmt" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + +<%@ page import="javax.servlet.jsp.jstl.fmt.LocaleSupport" %> +<%@ page import="org.dspace.app.webui.servlet.admin.EditCommunitiesServlet" %> +<%@ page import="org.dspace.app.webui.util.CurateTaskResult" %> +<%@ page import="org.dspace.content.Community" %> +<%@ page import="org.dspace.core.ConfigurationManager" %> +<%! + private static final String TASK_QUEUE_NAME = ConfigurationManager.getProperty("curate", "ui.queuename"); +%> +<% + Community community = (Community) request.getAttribute("community"); + int communityID = (community != null ? community.getID() : -1); + String title = (community != null ? community.getMetadata("name") : "Unknown Community"); + String groupOptions = (String)request.getAttribute("curate_group_options"); + String taskOptions = (String)request.getAttribute("curate_task_options"); +%> + +<dspace:layout style="submission" titlekey="jsp.tools.curate.community.title" + navbar="admin" + locbar="link" + parenttitlekey="jsp.administer" + parentlink="/dspace-admin"> + +<%@ include file="/tools/curate-message.jsp" %> + + <h1><fmt:message key="jsp.tools.curate.community.heading"> + <fmt:param value="<%= title %>"/> + </fmt:message> + </h1> + <div class="row container"> + <form action="<%=request.getContextPath()%>/tools/curate" method="post"> + +<% + if (groupOptions != null && !"".equals(groupOptions)) + { +%> + + <label for="select_curate_group"><fmt:message key="jsp.tools.curate.select-group.tag"/></label>: + <select class="form-control" name="select_curate_group" id="select_curate_group" onchange="this.form.submit();"> + <%= groupOptions %> + </select> +<% + } +%> + + <div class="input-group"> + <label for="curate_task" class="input-group-addon"><fmt:message key="jsp.tools.curate.select-task.tag"/>:</label> + <select class="form-control" name="curate_task" id="curate_task"> + <%= taskOptions %> + </select> + </div> + <input type="hidden" name="community_id" value="<%= communityID %>"/> + <br/> + <div class="col-md-4 row pull-right"> + <input class="btn btn-warning col-md-6" type="submit" name="submit_community_queue" value="<fmt:message key="jsp.tools.curate.queue.button"/>" /> + <input class="btn btn-primary col-md-6" type="submit" name="submit_community_curate" value="<fmt:message key="jsp.tools.curate.perform.button"/>" /> + </div> + </form> + </div> + <br/> + <div class="row container"> + <form method="post" action="<%=request.getContextPath()%>/tools/edit-communities"> + <input type="hidden" name="community_id" value="<%= communityID %>" /> + <input type="hidden" name="action" value="<%=EditCommunitiesServlet.START_EDIT_COMMUNITY %>" /> + <input class="btn btn-default" type="submit" value="<fmt:message key="jsp.tools.curate.return.community.button"/>" /> + </form> + </div> + +</dspace:layout> diff --git a/dspace-jspui/src/main/webapp/tools/curate-item.jsp b/dspace-jspui/src/main/webapp/tools/curate-item.jsp new file mode 100644 index 0000000..2898b99 --- /dev/null +++ b/dspace-jspui/src/main/webapp/tools/curate-item.jsp @@ -0,0 +1,105 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Form requesting a Handle or internal item ID for item editing + - + - Attributes: + - curate_group_options - options string of gropu selection. + - "" unless ui.taskgroups is set + - curate_task_options - options string of task selection. + - item - the item + - task_result - result of the curation task + --%> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" + prefix="fmt" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + +<%@ page import="javax.servlet.jsp.jstl.fmt.LocaleSupport" %> +<%@ page import="org.dspace.app.webui.servlet.admin.EditCommunitiesServlet" %> +<%@ page import="org.dspace.app.webui.util.CurateTaskResult" %> +<%@ page import="org.dspace.content.Item" %> +<%@ page import="org.dspace.content.DCValue" %> +<%@ page import="org.dspace.core.ConfigurationManager" %> +<%! + private static final String TASK_QUEUE_NAME = ConfigurationManager.getProperty("curate", "ui.queuename"); +%> +<% + Item item = (Item) request.getAttribute("item"); + int itemID = (item != null ? item.getID() : -1); + String title = "Unknown Item"; + if (item != null) + { + DCValue[] dcvs = item.getMetadata("dc.title"); + if (dcvs != null && dcvs.length > 0) + { + title = dcvs[0].value; + } + } + String groupOptions = (String)request.getAttribute("curate_group_options"); + String taskOptions = (String)request.getAttribute("curate_task_options"); +%> + +<dspace:layout style="submission" titlekey="jsp.tools.curate.item.title" + navbar="admin" + locbar="link" + parenttitlekey="jsp.administer" + parentlink="/dspace-admin"> + +<%@ include file="/tools/curate-message.jsp" %> + + <h1><fmt:message key="jsp.tools.curate.item.heading"> + <fmt:param value="<%= title %>"/> + </fmt:message> + </h1> + <div class="row container"> + <form action="<%=request.getContextPath()%>/tools/curate" method="post"> +<% + if (groupOptions != null && !"".equals(groupOptions)) + { +%> + <div class="input-group"> + <label class="input-group-addon"><fmt:message key="jsp.tools.curate.select-group.tag"/>:</label> + + <select class="form-control" name="select_curate_group" id="select_curate_group" onchange="this.form.submit();"> + <%= groupOptions %> + </select> + </div> +<% + } +%> + + <div class="input-group"> + <label class="input-group-addon"><fmt:message key="jsp.tools.curate.select-task.tag"/>:</label> + <select class="form-control" name="curate_task" id="curate_task"> + <%= taskOptions %> + </select> + </div> + + <br/> + <div class="col-md-4 row pull-right"> + <input type="hidden" name="item_id" value="<%= itemID %>"/> + <input class="btn btn-warning col-md-6" type="submit" name="submit_item_queue" value="<fmt:message key="jsp.tools.curate.queue.button"/>" /> + <input class="btn btn-primary col-md-6" type="submit" name="submit_item_curate" value="<fmt:message key="jsp.tools.curate.perform.button"/>" /> + </div> + + </form> + </div> + <div class="row container"> + <form method="get" action="<%=request.getContextPath()%>/tools/edit-item"> + <input type="hidden" name="item_id" value="<%= itemID %>"/> + <input class="btn btn-default" type="submit" value="<fmt:message key="jsp.tools.curate.return.item.button"/>"/> + </form> + </div> + +</dspace:layout> diff --git a/dspace-jspui/src/main/webapp/tools/curate-message.jsp b/dspace-jspui/src/main/webapp/tools/curate-message.jsp new file mode 100644 index 0000000..7bb3000 --- /dev/null +++ b/dspace-jspui/src/main/webapp/tools/curate-message.jsp @@ -0,0 +1,82 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<% + CurateTaskResult result = (CurateTaskResult) request.getAttribute("task_result"); + if (result != null) + { + String type = result.getType(); + boolean isSuccess = result.isSuccess(); + String resultClass = (isSuccess ? "success" : "danger"); +%> + <div class="alert alert-<%= resultClass %>"> + <b> + <fmt:message key="jsp.tools.curate.task.name"> + <fmt:param value="<%= result.getTask() %>"/> + </fmt:message> + </b> +<% + if ("perform".equals(type)) + { + if (isSuccess) + { +%> + <p class="task-result"><fmt:message key="jsp.tools.curate.perform.success"/></p> + <div class="task-message"> + <fmt:message key="jsp.tools.curate.perform.message.success"> + <fmt:param value="<%= result.getStatus() %>"/> + <fmt:param value="<%= result.getResult() %>"/> + </fmt:message> + </div> +<% + } + else + { +%> + <p class="task-result"><fmt:message key="jsp.tools.curate.perform.failure"/></p> + <div class="task-message"> + <fmt:message key="jsp.tools.curate.perform.message.success"> + <fmt:param value="<%= result.getResult() %>"/> + </fmt:message> + </div> +<% + } + } + else + { + if (isSuccess) + { +%> + <p class="task-result"><fmt:message key="jsp.tools.curate.queue.success"/></p> + <div class="task-message"> + <fmt:message key="jsp.tools.curate.queue.message.success"> + <fmt:param value="<%= result.getHandle() %>"/> + <fmt:param value="<%= TASK_QUEUE_NAME %>"/> + </fmt:message> + </div> +<% + } + else + { +%> + <p class="task-result"><fmt:message key="jsp.tools.curate.queue.failure"/></p> + <div class="task-message"> + <fmt:message key="jsp.tools.curate.queue.message.failure"> + <fmt:param value="<%= result.getHandle() %>"/> + <fmt:param value="<%= TASK_QUEUE_NAME %>"/> + </fmt:message> + </div> +<% + } + } +%> + </div> +<% + } +%> diff --git a/dspace-jspui/src/main/webapp/tools/version-history.jsp b/dspace-jspui/src/main/webapp/tools/version-history.jsp new file mode 100644 index 0000000..52bc415 --- /dev/null +++ b/dspace-jspui/src/main/webapp/tools/version-history.jsp @@ -0,0 +1,121 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Version history table with functionalities + - + - Attributes: + --%> + +<%@page import="org.dspace.app.webui.util.UIUtil"%> +<%@page import="org.dspace.core.Context"%> +<%@page import="org.dspace.content.Item"%> +<%@page import="org.dspace.eperson.EPerson"%> +<%@page import="org.dspace.versioning.Version"%> +<%@page import="org.dspace.app.webui.util.VersionUtil"%> +<%@page import="org.dspace.versioning.VersionHistory"%> +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" + prefix="fmt" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + +<% + Integer itemID = (Integer)request.getAttribute("itemID"); + String versionID = (String)request.getAttribute("versionID"); + Item item = (Item) request.getAttribute("item"); + Boolean removeok = UIUtil.getBoolParameter(request, "delete"); + Context context = UIUtil.obtainContext(request); + + request.setAttribute("LanguageSwitch", "hide"); +%> +<c:set var="dspace.layout.head.last" scope="request"> +<script type="text/javascript"> +var j = jQuery.noConflict(); +</script> +</c:set> +<dspace:layout style="submission" titlekey="jsp.version.history.title"> + + <div class="modal fade" id="myModal"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> + <h4 class="modal-title"><fmt:message key="jsp.version.history.delete.warning.head1"/></h4> + </div> + <div class="modal-body"> + <p><fmt:message key="jsp.version.history.delete.warning.para1"/><br/><fmt:message key="jsp.version.history.delete.warning.para2"/></p> + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-default" data-dismiss="modal"><fmt:message key="jsp.version.history.popup.close"/></button> + <button type="button" class="btn btn-danger" onclick="j('#myModal').modal('hide');j('#submit_delete').click();"><fmt:message key="jsp.version.history.popup.delete"/></button> + </div> + </div><!-- /.modal-content --> + </div><!-- /.modal-dialog --> +</div><!-- /.modal --> + + + <h1><fmt:message key="jsp.version.history.head2"/></h1> + + <% if(removeok) { %><div class="alert alert-success"><fmt:message key="jsp.version.history.delete.success.message"/></div><% } %> + <form action="<%= request.getContextPath() %>/tools/history" method="post"> + <input type="hidden" name="itemID" value="<%= itemID %>" /> + <input type="hidden" name="versionID" value="<%= versionID %>" /> + <%-- Versioning table --%> +<% + + VersionHistory history = VersionUtil.retrieveVersionHistory(context, item); + +%> + <div id="versionHistory"> + <p class="alert alert-info"><fmt:message key="jsp.version.history.legend"/></p> + + + <table class="table"> + <tr> + <th id="t0"></th> + <th id="t1" class="oddRowEvenCol"><fmt:message key="jsp.version.history.column1"/></th> + <th + id="t2" class="oddRowOddCol"><fmt:message key="jsp.version.history.column2"/></th> + <th + id="t3" class="oddRowEvenCol"><fmt:message key="jsp.version.history.column3"/></th> + <th + id="t4" class="oddRowOddCol"><fmt:message key="jsp.version.history.column4"/></th> + <th + id="t5" class="oddRowEvenCol"><fmt:message key="jsp.version.history.column5"/> </th> + </tr> + + <% for(Version versRow : history.getVersions()) { + + EPerson versRowPerson = versRow.getEperson(); + String[] identifierPath = VersionUtil.addItemIdentifier(item, versRow); + + %> + <tr> + <td headers="t0"><input type="checkbox" class="remove" name="remove" value="<%=versRow.getVersionId()%>"/></td> + <td headers="t1" class="oddRowEvenCol"><%= versRow.getVersionNumber() %></td> + <td headers="t2" class="oddRowOddCol"><a href="<%= request.getContextPath() + identifierPath[0] %>"><%= identifierPath[1] %></a><%= item.getID()==versRow.getItemID()?"<span class=\"glyphicon glyphicon-asterisk\"></span>":""%></td> + <td headers="t3" class="oddRowEvenCol"><a href="mailto:<%= versRowPerson.getEmail() %>"><%=versRowPerson.getFullName() %></a></td> + <td headers="t4" class="oddRowOddCol"><%= versRow.getVersionDate() %></td> + <td headers="t5" class="oddRowEvenCol"><%= versRow.getSummary() %><a class="btn btn-default pull-right" href="<%= request.getContextPath() %>/tools/version?itemID=<%= versRow.getItemID()%>&versionID=<%= versRow.getVersionId() %>&submit_update_version"><span class="glyphicon glyphicon-pencil"></span> <fmt:message key="jsp.version.history.update"/></a></td> + </tr> + <% } %> + </table> + + <input data-toggle="modal" href="#myModal" class="btn btn-danger" type="button" id="fake_submit_delete" value="<fmt:message key="jsp.version.history.delete"/>"/> <input class="btn btn-default" type="submit" value="<fmt:message key="jsp.version.history.return"/>" name="submit_cancel"/> + </div> + <div style="display: none"> + <input type="submit" value="<fmt:message key="jsp.version.history.delete"/>" name="submit_delete" id="submit_delete"/> + </div> +</form> + + +</dspace:layout> diff --git a/dspace-jspui/src/main/webapp/tools/version-summary.jsp b/dspace-jspui/src/main/webapp/tools/version-summary.jsp new file mode 100644 index 0000000..7e64a1a --- /dev/null +++ b/dspace-jspui/src/main/webapp/tools/version-summary.jsp @@ -0,0 +1,47 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Insert summary for versionable item JSP + - + - Attributes: + --%> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" + prefix="fmt" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + + +<% + Integer itemID = (Integer)request.getAttribute("itemID"); + request.setAttribute("LanguageSwitch", "hide"); +%> + +<dspace:layout style="submission" titlekey="jsp.dspace-admin.version-summary.title"> + + <h1><fmt:message key="jsp.dspace-admin.version-summary.heading"/></h1> + + <form action="<%= request.getContextPath() %>/tools/version" method="post"> + <input type="hidden" name="itemID" value="<%= itemID %>" /> + <p><fmt:message key="jsp.dspace-admin.version-summary.text3"><fmt:param><%= itemID%></fmt:param></fmt:message></p> + + <%-- <td class="submitFormLabel">News:</td> --%> + <div class="form-group"> + <label for="summary"><fmt:message key="jsp.dspace-admin.version-summary.text"/></label> + <textarea class="form-control" name="summary" rows="10" cols="50"></textarea> + </div> + <%-- <input type="submit" name="submit_save" value="Save"> --%> + <input class="btn btn-success" type="submit" name="submit_version" value="<fmt:message key="jsp.version.version-summary.submit_version"/>" /> + <%-- <input type="submit" name="cancel" value="Cancel"> --%> + <input class="btn btn-default" type="submit" name="submit_cancel" value="<fmt:message key="jsp.dspace-admin.general.cancel"/>" /> +</form> +</dspace:layout> diff --git a/dspace-jspui/src/main/webapp/tools/version-update-summary.jsp b/dspace-jspui/src/main/webapp/tools/version-update-summary.jsp new file mode 100644 index 0000000..96aff6d --- /dev/null +++ b/dspace-jspui/src/main/webapp/tools/version-update-summary.jsp @@ -0,0 +1,53 @@ +<%-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--%> +<%-- + - Insert summary for versionable item JSP + - + - Attributes: + --%> + +<%@page import="org.dspace.core.Context"%> +<%@page import="org.dspace.app.webui.util.UIUtil"%> +<%@page import="org.dspace.app.webui.util.VersionUtil"%> +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" + prefix="fmt" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + + +<% + Integer itemID = (Integer)request.getAttribute("itemID"); + String versionID = (String)request.getAttribute("versionID"); + + Context context = UIUtil.obtainContext(request); + + request.setAttribute("LanguageSwitch", "hide"); +%> + +<dspace:layout style="submission" titlekey="jsp.dspace-admin.version-summary.title"> + <h1><fmt:message key="jsp.dspace-admin.version-summary.heading"/></h1> + + <form action="<%= request.getContextPath() %>/tools/history" method="post"> + <input type="hidden" name="itemID" value="<%= itemID %>" /> + <input type="hidden" name="versionID" value="<%= versionID %>" /> + <p><fmt:message key="jsp.dspace-admin.version-summary.text3"><fmt:param><%= itemID%></fmt:param></fmt:message></p> + <%-- <td class="submitFormLabel">News:</td> --%> + <div class="form-group"> + <label for="summary"><fmt:message key="jsp.dspace-admin.version-summary.text"/></label> + <textarea class="form-control" name="summary" rows="10" cols="50"><%= VersionUtil.getSummary(context, versionID) %></textarea> + </div> + <%-- <input type="submit" name="submit_save" value="Save"> --%> + <input class="btn btn-success" type="submit" name="submit_update" value="<fmt:message key="jsp.version.history.update"/>" /> + <%-- <input type="submit" name="cancel" value="Cancel"> --%> + <input class="btn btn-default" type="submit" name="submit_cancel" value="<fmt:message key="jsp.dspace-admin.general.cancel"/>" /> +</form> +</dspace:layout> diff --git a/dspace-services/src/main/java/org/dspace/services/EmailService.java b/dspace-services/src/main/java/org/dspace/services/EmailService.java new file mode 100644 index 0000000..1b4a0d7 --- /dev/null +++ b/dspace-services/src/main/java/org/dspace/services/EmailService.java @@ -0,0 +1,23 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.services; + +import javax.mail.Session; + +/** + * + * @author mwood + */ +public interface EmailService +{ + /** + * Provide a reference to the JavaMail session. + */ + Session getSession(); +} diff --git a/dspace-services/src/main/java/org/dspace/services/email/EmailServiceImpl.java b/dspace-services/src/main/java/org/dspace/services/email/EmailServiceImpl.java new file mode 100644 index 0000000..24a3546 --- /dev/null +++ b/dspace-services/src/main/java/org/dspace/services/email/EmailServiceImpl.java @@ -0,0 +1,138 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.services.email; + +import java.util.Properties; +import javax.mail.Authenticator; +import javax.mail.PasswordAuthentication; +import javax.mail.Session; +import javax.naming.InitialContext; +import javax.naming.NamingException; +import org.dspace.kernel.mixins.InitializedService; +import org.dspace.services.ConfigurationService; +import org.dspace.services.EmailService; +import org.dspace.utils.DSpace; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Required; + +/** + * Provides mail sending services through JavaMail. If a {@link javax.mail.Session} + * instance is provided through JNDI, it will be used. If not, then a session + * will be created from DSpace configuration data ({@code mail.server} etc.) + * + * @author mwood + */ +public class EmailServiceImpl + extends Authenticator + implements EmailService, InitializedService +{ + private static final Logger logger = (Logger) LoggerFactory.getLogger(EmailServiceImpl.class); + + private Session session = null; + + private ConfigurationService cfg = null; + + /** Inject the ConfigurationService */ + @Autowired + @Required + public void setCfg(ConfigurationService cfg) + { + this.cfg = cfg; + } + + /** + * Provide a reference to the JavaMail session. + * + * @return the managed Session, or null if none could be created. + */ + @Override + public Session getSession() + { + return session; + } + + @Override + public void init() + { + // See if there is already a Session in our environment + String sessionName = cfg.getProperty("mail.session.name"); + if (null == sessionName) + { + sessionName = "Session"; + } + try + { + InitialContext ctx = new InitialContext(null); + session = (Session) ctx.lookup("java:comp/env/mail/" + sessionName); + } catch (NamingException ex) + { + logger.warn("Couldn't get an email session from environment: {}", + ex.getMessage()); + } + + if (null != session) + { + logger.info("Email session retrieved from environment."); + } + else + { // No Session provided, so create one + logger.info("Initializing an email session from configuration."); + Properties props = new Properties(); + props.put("mail.transport.protocol", "smtp"); + String host = cfg.getProperty("mail.server"); + if (null != host) + { + props.put("mail.host", cfg.getProperty("mail.server")); + } + String port = cfg.getProperty("mail.server.port"); + if (null != port) + { + props.put("mail.smtp.port", port); + } + + if (null == cfg.getProperty("mail.server.username")) + { + session = Session.getInstance(props); + } + else + { + props.put("mail.smtp.auth", "true"); + session = Session.getInstance(props, this); + } + + // Set extra configuration properties + String extras = cfg.getProperty("mail.extraproperties"); + if ((extras != null) && (!"".equals(extras.trim()))) + { + String arguments[] = extras.split(","); + String key, value; + for (String argument : arguments) + { + key = argument.substring(0, argument.indexOf('=')).trim(); + value = argument.substring(argument.indexOf('=') + 1).trim(); + props.put(key, value); + } + } + } + } + + @Override + protected PasswordAuthentication getPasswordAuthentication() + { + if (null == cfg) + { + cfg = new DSpace().getConfigurationService(); + } + + return new PasswordAuthentication( + cfg.getProperty("mail.server.username"), + cfg.getProperty("mail.server.password")); + } +} diff --git a/dspace-services/src/main/java/org/dspace/services/email/package-info.java b/dspace-services/src/main/java/org/dspace/services/email/package-info.java new file mode 100644 index 0000000..38154ca --- /dev/null +++ b/dspace-services/src/main/java/org/dspace/services/email/package-info.java @@ -0,0 +1,13 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +/** + * Manages a JavaMail session for code which wants to send email. + */ + +package org.dspace.services.email; diff --git a/dspace-services/src/test/java/org/dspace/services/email/EmailServiceImplTest.java b/dspace-services/src/test/java/org/dspace/services/email/EmailServiceImplTest.java new file mode 100644 index 0000000..377734d --- /dev/null +++ b/dspace-services/src/test/java/org/dspace/services/email/EmailServiceImplTest.java @@ -0,0 +1,102 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.services.email; + +import javax.mail.MessagingException; +import javax.mail.PasswordAuthentication; +import javax.mail.Session; +import org.dspace.services.ConfigurationService; +import org.dspace.services.EmailService; +import org.dspace.test.DSpaceAbstractKernelTest; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import org.junit.Test; + +/** + * + * @author mwood + */ +public class EmailServiceImplTest + extends DSpaceAbstractKernelTest +{ + private static final String USERNAME = "auser"; + private static final String PASSWORD = "apassword"; + + /* + @BeforeClass + public static void setUpClass() + throws Exception + { + } + + @AfterClass + public static void tearDownClass() + throws Exception + { + } + + @Before + public void setUp() + { + } + + @After + public void tearDown() + { + } + */ + + /** + * Test of getSession method, of class EmailService. + */ + @Test + public void testGetSession() + throws MessagingException + { + System.out.println("getSession"); + Session session; + EmailService instance = getService(EmailServiceImpl.class); + + // Try to get a Session + session = instance.getSession(); + assertNotNull(" getSession returned null", session); + } + + private static final String CFG_USERNAME = "mail.server.username"; + private static final String CFG_PASSWORD = "mail.server.password"; + + /** + * Test of getPasswordAuthentication method, of class EmailServiceImpl. + */ + @Test + public void testGetPasswordAuthentication() + { + System.out.println("getPasswordAuthentication"); + ConfigurationService cfg = getKernel().getConfigurationService(); + + // Save existing values. + String oldUsername = cfg.getProperty(CFG_USERNAME); + String oldPassword = cfg.getProperty(CFG_PASSWORD); + + // Set known values. + cfg.setProperty(CFG_USERNAME, USERNAME); + cfg.setProperty(CFG_PASSWORD, PASSWORD); + + EmailServiceImpl instance = (EmailServiceImpl) getService(EmailServiceImpl.class); + + PasswordAuthentication result = instance.getPasswordAuthentication(); + assertNotNull(" null returned", result); + assertEquals(" username does not match configuration", result.getUserName(), USERNAME); + assertEquals(" password does not match configuration", result.getPassword(), PASSWORD); + + // Restore old values, if any. + cfg.setProperty(CFG_USERNAME, oldUsername); + cfg.setProperty(CFG_PASSWORD, oldPassword); + } +} diff --git a/dspace-swordv2/src/main/java/org/dspace/sword2/AbstractSimpleDC.java b/dspace-swordv2/src/main/java/org/dspace/sword2/AbstractSimpleDC.java new file mode 100644 index 0000000..e88f86f --- /dev/null +++ b/dspace-swordv2/src/main/java/org/dspace/sword2/AbstractSimpleDC.java @@ -0,0 +1,97 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.sword2; + +import org.dspace.content.DCValue; +import org.dspace.content.Item; +import org.dspace.core.ConfigurationManager; + +import java.util.HashMap; +import java.util.Properties; + +public class AbstractSimpleDC +{ + protected HashMap<String, String> dcMap = null; + protected HashMap<String, String> atomMap = null; + + protected void loadMetadataMaps() + { + if (this.dcMap == null) + { + // we should load our DC map from configuration + this.dcMap = new HashMap<String, String>(); + Properties props = ConfigurationManager.getProperties("swordv2-server"); + for (Object key : props.keySet()) + { + String keyString = (String) key; + if (keyString.startsWith("simpledc.")) + { + String k = keyString.substring("simpledc.".length()); + String v = (String) props.get(key); + this.dcMap.put(k, v); + } + } + } + + if (this.atomMap == null) + { + this.atomMap = new HashMap<String, String>(); + Properties props = ConfigurationManager.getProperties("swordv2-server"); + for (Object key : props.keySet()) + { + String keyString = (String) key; + if (keyString.startsWith("atom.")) + { + String k = keyString.substring("atom.".length()); + String v = (String) props.get(key); + this.atomMap.put(k, v); + } + } + } + } + + protected SimpleDCMetadata getMetadata(Item item) + { + this.loadMetadataMaps(); + + SimpleDCMetadata md = new SimpleDCMetadata(); + DCValue[] all = item.getMetadata(Item.ANY, Item.ANY, Item.ANY, Item.ANY); + + for (DCValue dcv : all) + { + String valueMatch = dcv.schema + "." + dcv.element; + if (dcv.qualifier != null) + { + valueMatch += "." + dcv.qualifier; + } + + // look for the metadata in the dublin core map + for (String key : this.dcMap.keySet()) + { + String value = this.dcMap.get(key); + if (valueMatch.equals(value)) + { + md.addDublinCore(key, dcv.value); + } + } + + // look for the metadata in the atom map + for (String key : this.atomMap.keySet()) + { + String value = this.atomMap.get(key); + if (valueMatch.equals(value)) + { + md.addAtom(key, dcv.value); + } + } + } + + return md; + } +} diff --git a/dspace-swordv2/src/main/java/org/dspace/sword2/SimpleDCMetadata.java b/dspace-swordv2/src/main/java/org/dspace/sword2/SimpleDCMetadata.java new file mode 100644 index 0000000..db57f3e --- /dev/null +++ b/dspace-swordv2/src/main/java/org/dspace/sword2/SimpleDCMetadata.java @@ -0,0 +1,38 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.sword2; + +import java.util.HashMap; +import java.util.Map; + +public class SimpleDCMetadata +{ + private Map<String, String> dublinCore = new HashMap<String, String>(); + private Map<String, String> atom = new HashMap<String, String>(); + + public void addDublinCore(String element, String value) + { + this.dublinCore.put(element, value); + } + + public void addAtom(String element, String value) + { + this.atom.put(element, value); + } + + public Map<String, String> getDublinCore() + { + return dublinCore; + } + + public Map<String, String> getAtom() + { + return atom; + } +} diff --git a/dspace-swordv2/src/main/java/org/dspace/sword2/SwordMETSPackageIngester.java b/dspace-swordv2/src/main/java/org/dspace/sword2/SwordMETSPackageIngester.java new file mode 100644 index 0000000..0fe5c9f --- /dev/null +++ b/dspace-swordv2/src/main/java/org/dspace/sword2/SwordMETSPackageIngester.java @@ -0,0 +1,47 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.sword2; + + +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.Collection; +import org.dspace.content.Item; +import org.dspace.content.packager.DSpaceMETSIngester; +import org.dspace.content.packager.PackageParameters; +import org.dspace.content.packager.PackageUtils; +import org.dspace.content.packager.PackageValidationException; +import org.dspace.core.Context; + +import java.io.IOException; +import java.sql.SQLException; + +public class SwordMETSPackageIngester extends DSpaceMETSIngester +{ + /** + * Policy: For DSpace deposit license, take deposit license + * supplied by explicit argument first, else use collection's + * default deposit license. + * For Creative Commons, look for a rightsMd containing a CC license. + * + * This override basically fixes a bug in the DSpaceMETSIngester which + * allows (in fact enforces) a null licence during replace, but which + * then requires it to be not-null here. + * + */ + @Override + public void addLicense(Context context, Item item, String license, + Collection collection, PackageParameters params) + throws PackageValidationException, + AuthorizeException, SQLException, IOException + { + if (PackageUtils.findDepositLicense(context, item) == null && license != null) + { + PackageUtils.addDepositLicense(context, license, item, collection); + } + } +} diff --git a/dspace-swordv2/src/main/java/org/dspace/sword2/WorkflowManagerUnrestricted.java b/dspace-swordv2/src/main/java/org/dspace/sword2/WorkflowManagerUnrestricted.java new file mode 100644 index 0000000..cd7d2db --- /dev/null +++ b/dspace-swordv2/src/main/java/org/dspace/sword2/WorkflowManagerUnrestricted.java @@ -0,0 +1,209 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.sword2; + +import org.dspace.content.Bitstream; +import org.dspace.content.Bundle; +import org.dspace.content.Collection; +import org.dspace.content.Item; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Context; +import org.swordapp.server.Deposit; +import org.swordapp.server.SwordError; +import org.swordapp.server.UriRegistry; + +import java.sql.SQLException; + +/** + * This implementation of WorkflowManager is unrestricted and allows UPDATE and DELETE operations + * on items in any state (in workflow, in archive, or withdrawn). + */ +public class WorkflowManagerUnrestricted implements WorkflowManager +{ + public void retrieveServiceDoc(Context context) throws SwordError + { + // do nothing - operation allowed + } + + public void listCollectionContents(Context context, Collection collection) throws SwordError + { + // do nothing - operation allowed + } + + public void createResource(Context context, Collection collection) throws SwordError + { + // do nothing - operation allowed + } + + public void retrieveContent(Context context, Item item) throws SwordError + { + // do nothing - operation allowed + } + + public void retrieveBitstream(Context context, Bitstream bitstream) throws SwordError, DSpaceSwordException + { + // do nothing - operation allowed + } + + public void replaceResourceContent(Context context, Item item) throws SwordError, DSpaceSwordException + { + // do nothing - operation allowed + } + + public void replaceMetadata(Context context, Item item) throws SwordError, DSpaceSwordException + { + // do nothing - operation allowed + } + + public void replaceMetadataAndMediaResource(Context context, Item item) throws SwordError, DSpaceSwordException + { + // do nothing - operation allowed + } + + public void deleteMediaResource(Context context, Item item) throws SwordError, DSpaceSwordException + { + // do nothing - operation allowed + } + + public void deleteBitstream(Context context, Bitstream bitstream) throws SwordError, DSpaceSwordException + { + // this is equivalent to asking whether the media resource in the item can be deleted + try + { + for (Bundle bundle : bitstream.getBundles()) + { + // is the bitstream in the ORIGINAL bundle? If not, it can't be worked on + if (!"ORIGINAL".equals(bundle.getName())) + { + throw new SwordError(UriRegistry.ERROR_METHOD_NOT_ALLOWED, "The file is not in a bundle which can be modified"); + } + + for (Item item : bundle.getItems()) + { + this.deleteMediaResource(context, item); + } + } + } + catch (SQLException e) + { + throw new DSpaceSwordException(e); + } + } + + public void replaceBitstream(Context context, Bitstream bitstream) + throws SwordError, DSpaceSwordException + { + // this is equivalent to asking whether the media resource in the item can be deleted + try + { + for (Bundle bundle : bitstream.getBundles()) + { + // is the bitstream in the ORIGINAL bundle? If not, it can't be worked on + if (!"ORIGINAL".equals(bundle.getName())) + { + throw new SwordError(UriRegistry.ERROR_METHOD_NOT_ALLOWED, "The file is not in a bundle which can be modified"); + } + + for (Item item : bundle.getItems()) + { + this.replaceResourceContent(context, item); + } + } + } + catch (SQLException e) + { + throw new DSpaceSwordException(e); + } + } + + public void addResourceContent(Context context, Item item) throws SwordError, DSpaceSwordException + { + // do nothing - operation allowed + } + + public void addMetadata(Context context, Item item) throws SwordError, DSpaceSwordException + { + // do nothing - operation allowed + } + + public void deleteItem(Context context, Item item) throws SwordError, DSpaceSwordException + { + // do nothing - operation allowed + } + + public void retrieveStatement(Context context, Item item) throws SwordError, DSpaceSwordException + { + // do nothing - operation allowed + } + + public void modifyState(Context context, Item item) throws SwordError, DSpaceSwordException + { + // do nothing - operation allowed + } + + public void resolveState(Context context, Deposit deposit, DepositResult result, VerboseDescription verboseDescription) + throws DSpaceSwordException + { + this.resolveState(context, deposit, result, verboseDescription, true); + } + + public void resolveState(Context context, Deposit deposit, DepositResult result, VerboseDescription verboseDescription, boolean containerOperation) + throws DSpaceSwordException + { + // the containerOperation flag tells us whether this method was called by an operation which happened on the + // container. This workflow implementation only changes workflow states on contaner operations, not media + // resource operations, so we just bounce this right back. + if (!containerOperation) + { + return; + } + + // if we get to here this is a container operation, and we can decide how best to process + Item item = result.getItem(); + + // find out where the item is in the workflow + WorkflowTools wft = new WorkflowTools(); + boolean inwf = wft.isItemInWorkflow(context, item); + boolean inws = wft.isItemInWorkspace(context, item); + + // or find out if the item is in the archive + boolean inarch = item.isArchived() || item.isWithdrawn(); + + // in progress inws inwf inarch action description + // 0 0 0 1 NOTHING the deposit finished, and the item is in the archive; + // 0 0 1 0 NOTHING the deposit finished, and the item is in the workflow. Carry on as normal + // 0 1 0 0 START WF the deposit is finished, and the item is in the workflow, so we start it + // 1 0 0 1 NOTHING the deposit is not finished, and the item is in the archive; + // 1 0 1 0 STOP WF the deposit is not finished, and it is in the workflow. Pull it out into the workspace + // 1 1 0 0 NOTHING the deposit is not finished, and is in the workspace; leave it there + + if (!deposit.isInProgress() && inarch) + { + verboseDescription.append("The deposit is finished, and the item is already in the archive"); + // throw new DSpaceSwordException("Invalid workflow state"); + } + + if (!deposit.isInProgress() && inws) + { + verboseDescription.append("The deposit is finished: moving it from the workspace to the workflow"); + wft.startWorkflow(context, item); + } + + if (deposit.isInProgress() && inarch) + { + verboseDescription.append("The deposit is not finished, and the item is already in the archive"); + // throw new DSpaceSwordException("Invalid workflow state"); + } + + if (deposit.isInProgress() && inwf) + { + verboseDescription.append("The deposit is in progress, but is in the workflow; returning to the workspace"); + wft.stopWorkflow(context, item); + } + } +} diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/administrative/mapper/DiscoverySearchRequestProcessor.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/administrative/mapper/DiscoverySearchRequestProcessor.java new file mode 100644 index 0000000..2d23327 --- /dev/null +++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/administrative/mapper/DiscoverySearchRequestProcessor.java @@ -0,0 +1,47 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.app.xmlui.aspect.administrative.mapper; + +import java.io.IOException; +import java.util.List; +import org.dspace.content.Collection; +import org.dspace.content.DSpaceObject; +import org.dspace.core.Context; +import org.dspace.discovery.DiscoverQuery; +import org.dspace.discovery.DiscoverResult; +import org.dspace.discovery.SearchServiceException; +import org.dspace.discovery.SearchUtils; + +/** + * Search using the Discovery index provider. + * + * @author mwood + */ +public class DiscoverySearchRequestProcessor + implements SearchRequestProcessor +{ + @Override + public List<DSpaceObject> doItemMapSearch(Context context, String queryString, + Collection collection) + throws IOException + { + DiscoverQuery query = new DiscoverQuery(); + query.setQuery(queryString); + query.addFilterQueries("-location:l"+collection.getID()); + + DiscoverResult results = null; + try { + results = SearchUtils.getSearchService().search(context, query); + } catch (SearchServiceException ex) { + throw new IOException(ex); // Best we can do with the interface method's signature + } + + return results.getDspaceObjects(); + } +} diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/administrative/mapper/LuceneSearchRequestProcessor.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/administrative/mapper/LuceneSearchRequestProcessor.java new file mode 100644 index 0000000..f5d7128 --- /dev/null +++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/administrative/mapper/LuceneSearchRequestProcessor.java @@ -0,0 +1,47 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.app.xmlui.aspect.administrative.mapper; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import org.dspace.content.Collection; +import org.dspace.content.DSpaceObject; +import org.dspace.core.Context; +import org.dspace.handle.HandleManager; +import org.dspace.search.DSQuery; +import org.dspace.search.QueryArgs; +import org.dspace.search.QueryResults; + +/** + * Search using built-in Lucene index provider. + * + * @author mwood + */ +public class LuceneSearchRequestProcessor + implements SearchRequestProcessor +{ + @Override + public List<DSpaceObject> doItemMapSearch(Context context, String query, Collection collection) + throws IOException, SQLException + { + QueryArgs queryArgs = new QueryArgs(); + queryArgs.setQuery(query); + queryArgs.setPageSize(Integer.MAX_VALUE); + QueryResults results = DSQuery.doQuery(context, queryArgs); + + results.getHitHandles(); + List<DSpaceObject> dsos = new ArrayList<DSpaceObject>(); + for (String handle : results.getHitHandles()) + dsos.add(HandleManager.resolveToObject(context, handle)); + + return dsos; + } +} diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/administrative/mapper/SearchRequestProcessor.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/administrative/mapper/SearchRequestProcessor.java new file mode 100644 index 0000000..5cb5f9d --- /dev/null +++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/administrative/mapper/SearchRequestProcessor.java @@ -0,0 +1,38 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.app.xmlui.aspect.administrative.mapper; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; +import org.dspace.content.Collection; +import org.dspace.content.DSpaceObject; +import org.dspace.core.Context; +import org.dspace.search.QueryResults; + +/** + * Generic search. See plug-ins derived from this interface. + * + * @author mwood + */ +interface SearchRequestProcessor +{ + /** + * Search for Items to be mapped into a Collection. + * + * @param context + * @param query matches the interesting Items. + * @param collection into which the found Items may be mapped. + * @return found Items. + * @throws IOException + * @throws SQLException + */ + List<DSpaceObject> doItemMapSearch(Context context, String query, Collection collection) + throws IOException, SQLException; +} diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/FrontPageFeeds.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/FrontPageFeeds.java new file mode 100644 index 0000000..1c0c3f2 --- /dev/null +++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/FrontPageFeeds.java @@ -0,0 +1,87 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.xmlui.aspect.artifactbrowser; + +import java.io.IOException; +import java.io.Serializable; +import java.sql.SQLException; + +import org.apache.cocoon.caching.CacheableProcessingComponent; +import org.apache.excalibur.source.SourceValidity; +import org.apache.excalibur.source.impl.validity.NOPValidity; +import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; +import org.dspace.app.xmlui.utils.UIException; +import org.dspace.app.xmlui.wing.Message; +import org.dspace.app.xmlui.wing.WingException; +import org.dspace.app.xmlui.wing.element.PageMeta; +import org.dspace.authorize.AuthorizeException; +import org.dspace.core.ConfigurationManager; +import org.xml.sax.SAXException; + +/** + * This simple component will add feed links. It is intended for use on the front + * page. + * + * @author Scott Phillips + */ +public class FrontPageFeeds extends AbstractDSpaceTransformer implements CacheableProcessingComponent +{ + /** Language Strings */ + + public static final Message T_dspace_home = + message("xmlui.general.dspace_home"); + + + /** + * Generate the unique caching key. + * This key must be unique inside the space of this component. + */ + public Serializable getKey() + { + return "1"; + } + + /** + * Generate the cache validity object. + */ + public SourceValidity getValidity() + { + return NOPValidity.SHARED_INSTANCE; + } + + /** + * Add a page title and trail links. + */ + public void addPageMeta(PageMeta pageMeta) throws SAXException, + WingException, UIException, SQLException, IOException, + AuthorizeException + { + pageMeta.addMetadata("title").addContent(T_dspace_home); + pageMeta.addTrailLink(contextPath, T_dspace_home); + + // Add RSS links if available + String formats = ConfigurationManager.getProperty("webui.feed.formats"); + if ( formats != null ) + { + for (String format : formats.split(",")) + { + // Remove the protocol number, i.e. just list 'rss' or' atom' + String[] parts = format.split("_"); + if (parts.length < 1) + { + continue; + } + + String feedFormat = parts[0].trim()+"+xml"; + + String feedURL = contextPath+"/feed/"+format.trim()+"/site"; + pageMeta.addMetadata("feed", feedFormat).addContent(feedURL); + } + } + } +} diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestChangeStatusForm.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestChangeStatusForm.java new file mode 100644 index 0000000..f711375 --- /dev/null +++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestChangeStatusForm.java @@ -0,0 +1,148 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.xmlui.aspect.artifactbrowser; + +import java.io.IOException; +import java.io.Serializable; +import java.sql.SQLException; + +import org.apache.cocoon.caching.CacheableProcessingComponent; +import org.apache.cocoon.environment.ObjectModelHelper; +import org.apache.cocoon.environment.Request; +import org.apache.cocoon.util.HashUtil; +import org.apache.commons.lang.StringUtils; +import org.apache.excalibur.source.SourceValidity; +import org.apache.excalibur.source.impl.validity.NOPValidity; +import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; +import org.dspace.app.xmlui.utils.HandleUtil; +import org.dspace.app.xmlui.utils.UIException; +import org.dspace.app.xmlui.wing.Message; +import org.dspace.app.xmlui.wing.WingException; +import org.dspace.app.xmlui.wing.element.Body; +import org.dspace.app.xmlui.wing.element.Division; +import org.dspace.app.xmlui.wing.element.List; +import org.dspace.app.xmlui.wing.element.PageMeta; +import org.dspace.app.xmlui.wing.element.Radio; +import org.dspace.app.xmlui.wing.element.Text; +import org.dspace.app.xmlui.wing.element.TextArea; +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.DCValue; +import org.dspace.content.DSpaceObject; +import org.dspace.content.Item; +import org.xml.sax.SAXException; + +/** + * Display to the user a form to request change of permissions of a item. + * + * Original Concept, JSPUI version: Universidade do Minho at www.uminho.pt + * Sponsorship of XMLUI version: Instituto Oceanográfico de España at www.ieo.es + * + * @author Adán Román Ruiz at arvo.es (added request item support) + */ +public class ItemRequestChangeStatusForm extends AbstractDSpaceTransformer implements CacheableProcessingComponent +{ + /** Language Strings */ + private static final Message T_title = + message("xmlui.ArtifactBrowser.ItemRequestChangeStatusForm.title"); + + private static final Message T_dspace_home = + message("xmlui.general.dspace_home"); + + private static final Message T_trail = + message("xmlui.ArtifactBrowser.ItemRequestChangeStatusForm.trail"); + + private static final Message T_head = + message("xmlui.ArtifactBrowser.ItemRequestChangeStatusForm.head"); + + private static final Message T_para1 = + message("xmlui.ArtifactBrowser.ItemRequestChangeStatusForm.para1"); + + private static final Message T_name = + message("xmlui.ArtifactBrowser.ItemRequestChangeStatusForm.name"); + + private static final Message T_email = + message("xmlui.ArtifactBrowser.ItemRequestChangeStatusForm.email"); + + private static final Message T_name_error = + message("xmlui.ArtifactBrowser.ItemRequestChangeStatusForm.name.error"); + + private static final Message T_email_error = + message("xmlui.ArtifactBrowser.ItemRequestChangeStatusForm.email.error"); + + private static final Message T_changeToOpen = + message("xmlui.ArtifactBrowser.ItemRequestChangeStatusForm.changeToOpen"); + + /** + * Generate the unique caching key. + * This key must be unique inside the space of this component. + */ + public Serializable getKey() { + + String token = parameters.getParameter("token",""); + String name = parameters.getParameter("name",""); + String email = parameters.getParameter("email",""); + Request request = ObjectModelHelper.getRequest(objectModel); + String openAccess = request.getParameter("openAccess"); + return HashUtil.hash(token+name+email+openAccess); + } + + /** + * Generate the cache validity object. + */ + public SourceValidity getValidity() + { + return NOPValidity.SHARED_INSTANCE; + } + + + public void addPageMeta(PageMeta pageMeta) throws SAXException, + WingException, UIException, SQLException, IOException, + AuthorizeException + { + pageMeta.addMetadata("title").addContent(T_title); + + pageMeta.addTrailLink(contextPath + "/",T_dspace_home); + pageMeta.addTrail().addContent(T_trail); + } + + public void addBody(Body body) throws SAXException, WingException, + UIException, SQLException, IOException, AuthorizeException + { + + Request request = ObjectModelHelper.getRequest(objectModel); + + // Build the item viewer division. + Division itemRequest = body.addInteractiveDivision("itemRequest-form", + request.getRequestURI(),Division.METHOD_POST,"primary"); + itemRequest.setHead(T_head); + + itemRequest.addPara(T_para1); + + List form = itemRequest.addList("form",List.TYPE_FORM); + + Text name = form.addItem().addText("name"); + name.setLabel(T_name); + name.setValue(parameters.getParameter("name","")); + + Text mail = form.addItem().addText("email"); + mail.setLabel(T_email); + mail.setValue(parameters.getParameter("email","")); + + if(request.getParameter("openAccess")!=null){ + if(StringUtils.isEmpty(parameters.getParameter("name", ""))){ + name.addError(T_name_error); + } + if(StringUtils.isEmpty(parameters.getParameter("email", ""))){ + mail.addError(T_email_error); + } + } + // mail.setValue(parameters.getParameter("mail","")); + form.addItem().addHidden("isSent").setValue("true"); + form.addItem().addButton("openAccess").setValue(T_changeToOpen); + } +} diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestForm.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestForm.java new file mode 100644 index 0000000..24e0be9 --- /dev/null +++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestForm.java @@ -0,0 +1,192 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.xmlui.aspect.artifactbrowser; + +import java.io.IOException; +import java.io.Serializable; +import java.sql.SQLException; + +import org.apache.cocoon.caching.CacheableProcessingComponent; +import org.apache.cocoon.environment.ObjectModelHelper; +import org.apache.cocoon.environment.Request; +import org.apache.cocoon.util.HashUtil; +import org.apache.commons.lang.StringUtils; +import org.apache.excalibur.source.SourceValidity; +import org.apache.excalibur.source.impl.validity.NOPValidity; +import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; +import org.dspace.app.xmlui.utils.HandleUtil; +import org.dspace.app.xmlui.utils.UIException; +import org.dspace.app.xmlui.wing.Message; +import org.dspace.app.xmlui.wing.WingException; +import org.dspace.app.xmlui.wing.element.Body; +import org.dspace.app.xmlui.wing.element.Division; +import org.dspace.app.xmlui.wing.element.List; +import org.dspace.app.xmlui.wing.element.PageMeta; +import org.dspace.app.xmlui.wing.element.Radio; +import org.dspace.app.xmlui.wing.element.Text; +import org.dspace.app.xmlui.wing.element.TextArea; +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.DCValue; +import org.dspace.content.DSpaceObject; +import org.dspace.content.Item; +import org.xml.sax.SAXException; + +/** + * Display to the user a simple form letting the user to request a protected item. + * + * Original Concept, JSPUI version: Universidade do Minho at www.uminho.pt + * Sponsorship of XMLUI version: Instituto Oceanográfico de España at www.ieo.es + * + * @author Adán Román Ruiz at arvo.es (added request item support) + */ +public class ItemRequestForm extends AbstractDSpaceTransformer implements CacheableProcessingComponent +{ + /** Language Strings */ + private static final Message T_title = + message("xmlui.ArtifactBrowser.ItemRequestForm.title"); + + private static final Message T_dspace_home = + message("xmlui.general.dspace_home"); + + private static final Message T_trail = + message("xmlui.ArtifactBrowser.ItemRequestForm.trail"); + + private static final Message T_head = + message("xmlui.ArtifactBrowser.ItemRequestForm.head"); + + private static final Message T_para1 = + message("xmlui.ArtifactBrowser.ItemRequestForm.para1"); + + private static final Message T_requesterEmail = + message("xmlui.ArtifactBrowser.ItemRequestForm.requesterEmail"); + + private static final Message T_requesterEmail_help = + message("xmlui.ArtifactBrowser.ItemRequestForm.requesterEmail_help"); + + private static final Message T_requesterEmail_error = + message("xmlui.ArtifactBrowser.ItemRequestForm.requesterEmail.error"); + + private static final Message T_message = + message("xmlui.ArtifactBrowser.ItemRequestForm.message"); + + private static final Message T_message_error = + message("xmlui.ArtifactBrowser.ItemRequestForm.message.error"); + + private static final Message T_requesterName = + message("xmlui.ArtifactBrowser.ItemRequestForm.requesterName"); + + private static final Message T_requesterName_error = + message("xmlui.ArtifactBrowser.ItemRequestForm.requesterName.error"); + + private static final Message T_allFiles = + message("xmlui.ArtifactBrowser.ItemRequestForm.allFiles"); + + private static final Message T_files = + message("xmlui.ArtifactBrowser.ItemRequestForm.files"); + + private static final Message T_notAllFiles = + message("xmlui.ArtifactBrowser.ItemRequestForm.notAllFiles"); + + private static final Message T_submit = + message("xmlui.ArtifactBrowser.ItemRequestForm.submit"); + + /** + * Generate the unique caching key. + * This key must be unique inside the space of this component. + */ + public Serializable getKey() { + + String requesterName = parameters.getParameter("requesterName",""); + String requesterEmail = parameters.getParameter("requesterEmail",""); + String allFiles = parameters.getParameter("allFiles",""); + String message = parameters.getParameter("message",""); + String bitstreamId = parameters.getParameter("bitstreamId",""); + + return HashUtil.hash(requesterName + "-" + requesterEmail + "-" + allFiles +"-"+message+"-"+bitstreamId); + } + + /** + * Generate the cache validity object. + */ + public SourceValidity getValidity() + { + return NOPValidity.SHARED_INSTANCE; + } + + + public void addPageMeta(PageMeta pageMeta) throws SAXException, + WingException, UIException, SQLException, IOException, + AuthorizeException + { + pageMeta.addMetadata("title").addContent(T_title); + + pageMeta.addTrailLink(contextPath + "/",T_dspace_home); + pageMeta.addTrail().addContent(T_trail); + } + + public void addBody(Body body) throws SAXException, WingException, + UIException, SQLException, IOException, AuthorizeException { + + DSpaceObject dso = HandleUtil.obtainHandle(objectModel); + if (!(dso instanceof Item)) { + return; + } + Request request = ObjectModelHelper.getRequest(objectModel); + boolean firstVisit=Boolean.valueOf(request.getParameter("firstVisit")); + + Item item = (Item) dso; + // Build the item viewer division. + Division itemRequest = body.addInteractiveDivision("itemRequest-form", + request.getRequestURI(), Division.METHOD_POST, "primary"); + itemRequest.setHead(T_head); + + itemRequest.addPara(T_para1); + DCValue[] titleDC = item.getDC("title", null, Item.ANY); + if (titleDC != null && titleDC.length > 0) + itemRequest.addPara(titleDC[0].value); + + List form = itemRequest.addList("form", List.TYPE_FORM); + + Text requesterName = form.addItem().addText("requesterName"); + requesterName.setLabel(T_requesterName); + requesterName.setValue(parameters.getParameter("requesterName", "")); + + Text requesterEmail = form.addItem().addText("requesterEmail"); + requesterEmail.setLabel(T_requesterEmail); + requesterEmail.setHelp(T_requesterEmail_help); + requesterEmail.setValue(parameters.getParameter("requesterEmail", "")); + + Radio radio = form.addItem().addRadio("allFiles"); + String selected=!parameters.getParameter("allFiles","true").equalsIgnoreCase("false")?"true":"false"; + radio.setOptionSelected(selected); + radio.setLabel(T_files); + radio.addOption("true", T_allFiles); + radio.addOption("false", T_notAllFiles); + + + TextArea message = form.addItem().addTextArea("message"); + message.setLabel(T_message); + message.setValue(parameters.getParameter("message", "")); + form.addItem().addHidden("bitstreamId").setValue(parameters.getParameter("bitstreamId", "")); + form.addItem().addButton("submit").setValue(T_submit); + + // if button is pressed and form is re-loaded it means some parameter is missing + if(request.getParameter("submit")!=null){ + if(StringUtils.isEmpty(parameters.getParameter("requesterName", ""))){ + requesterName.addError(T_requesterName_error); + } + if(StringUtils.isEmpty(parameters.getParameter("requesterEmail", ""))){ + requesterEmail.addError(T_requesterEmail_error); + } + if(StringUtils.isEmpty(parameters.getParameter("message", ""))){ + message.addError(T_message_error); + } + } + itemRequest.addHidden("page").setValue(parameters.getParameter("page", "unknown")); + } +} diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestResponseAction.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestResponseAction.java new file mode 100644 index 0000000..2873b99 --- /dev/null +++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestResponseAction.java @@ -0,0 +1,202 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.xmlui.aspect.artifactbrowser; + +import java.io.IOException; +import java.net.InetAddress; +import java.sql.SQLException; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import javax.mail.MessagingException; + +import org.apache.avalon.framework.parameters.Parameters; +import org.apache.cocoon.acting.AbstractAction; +import org.apache.cocoon.environment.ObjectModelHelper; +import org.apache.cocoon.environment.Redirector; +import org.apache.cocoon.environment.Request; +import org.apache.cocoon.environment.SourceResolver; +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.dspace.app.xmlui.utils.ContextUtil; +import org.dspace.app.xmlui.utils.HandleUtil; +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.Bitstream; +import org.dspace.content.Bundle; +import org.dspace.content.DCValue; +import org.dspace.content.DSpaceObject; +import org.dspace.content.Item; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Context; +import org.dspace.core.Email; +import org.dspace.core.I18nUtil; +import org.dspace.core.LogManager; +import org.dspace.core.Utils; +import org.dspace.eperson.EPerson; +import org.dspace.handle.HandleManager; +import org.dspace.storage.bitstore.BitstreamStorageManager; +import org.dspace.storage.rdbms.DatabaseManager; +import org.dspace.storage.rdbms.TableRow; + + +/** + * + * Original Concept, JSPUI version: Universidade do Minho at www.uminho.pt + * Sponsorship of XMLUI version: Instituto Oceanográfico de España at www.ieo.es + * + * @author Adán Román Ruiz at arvo.es (added request item support) + */ +public class ItemRequestResponseAction extends AbstractAction +{ + /** log4j log */ + private static Logger log = Logger.getLogger(ItemRequestResponseAction.class); + + public Map act(Redirector redirector, SourceResolver resolver, Map objectModel, + String source, Parameters parameters) throws Exception + { + Request request = ObjectModelHelper.getRequest(objectModel); + + String token = parameters.getParameter("token",""); + String decision = request.getParameter("decision"); + String isSent = request.getParameter("isSent"); + String message = request.getParameter("message"); + Context context = ContextUtil.obtainContext(objectModel); + request.setAttribute("token", token); + + TableRow requestItem = DatabaseManager.findByUnique(context, "requestitem", "token", token); + String title; + Item item = Item.find(context, requestItem.getIntColumn("item_id")); + DCValue[] titleDC = item.getDC("title", null, Item.ANY); + if (titleDC != null || titleDC.length > 0) + title=titleDC[0].value; + else + title="untitled"; + + String button=""; + // Botones de las paginas: + if(request.getParameter("send")!=null){ + decision="true"; + button="send"; + }else if(request.getParameter("dontSend")!=null){ + decision="false"; + button="dontSend"; + } + if(request.getParameter("mail")!=null){ + button="mail"; + }else if(request.getParameter("back")!=null){ + button="back"; + } + if(request.getParameter("openAccess")!=null){ + button="openAccess"; + } + + if(button.equals("mail")&& StringUtils.isNotEmpty(decision) && decision.equals("true")){ + processSendDocuments(context,request,requestItem,item,title); + isSent="true"; + }else if(button.equals("mail")&& StringUtils.isNotEmpty(decision) && decision.equals("false")){ + processDeny(context,request,requestItem,item,title); + isSent="true"; + }else if(button.equals("openAccess")){ + if(processOpenAccessRequest(context,request,requestItem,item,title)){ + // se acabo el flujo + return null; + } + }else if(button.equals("back")){ + decision=null; + } + + + Map<String, String> map = new HashMap<String, String>(); + map.put("decision", decision); + map.put("token", token); + map.put("isSent", isSent); + map.put("title", title); + map.put("name", request.getParameter("name")); + map.put("email",request.getParameter("email")); + return map; + } + + + + private boolean processOpenAccessRequest(Context context,Request request, TableRow requestItem,Item item,String title) throws SQLException, IOException, MessagingException { + String name = request.getParameter("name"); + String mail = request.getParameter("email"); + if(StringUtils.isNotEmpty(name)&&StringUtils.isNotEmpty(mail)){ + String emailRequest; + EPerson submiter = item.getSubmitter(); + if(submiter!=null){ + emailRequest=submiter.getEmail(); + }else{ + emailRequest=ConfigurationManager.getProperty("mail.helpdesk"); + } + if(emailRequest==null){ + emailRequest=ConfigurationManager.getProperty("mail.admin"); + } + Email email = Email.getEmail(I18nUtil.getEmailFilename(context.getCurrentLocale(), "request_item.admin")); + email.addRecipient(emailRequest); + + email.addArgument(Bitstream.find(context,requestItem.getIntColumn("bitstream_id")).getName()); + email.addArgument(HandleManager.getCanonicalForm(item.getHandle())); + email.addArgument(requestItem.getStringColumn("token")); + email.addArgument(name); + email.addArgument(mail); + + email.send(); + return true; + } + return false; + } + + private void processSendDocuments(Context context,Request request, TableRow requestItem,Item item,String title) throws SQLException, MessagingException, IOException { + String message = request.getParameter("message"); + String subject = request.getParameter("subject"); + + Email email = new Email(); + email.setSubject(subject); + email.setContent("{0}"); + email.addRecipient(requestItem.getStringColumn("request_email")); + email.addArgument(message); + + if (requestItem.getBooleanColumn("allfiles")){ + Bundle[] bundles = item.getBundles("ORIGINAL"); + for (int i = 0; i < bundles.length; i++){ + Bitstream[] bitstreams = bundles[i].getBitstreams(); + for (int k = 0; k < bitstreams.length; k++){ + if (!bitstreams[k].getFormat().isInternal() /*&& RequestItemManager.isRestricted(context, bitstreams[k])*/){ + email.addAttachment(BitstreamStorageManager.retrieve(context, bitstreams[k].getID()), bitstreams[k].getName(), bitstreams[k].getFormat().getMIMEType()); + } + } + } + } else { + Bitstream bit = Bitstream.find(context,requestItem.getIntColumn("bitstream_id")); + email.addAttachment(BitstreamStorageManager.retrieve(context, requestItem.getIntColumn("bitstream_id")), bit.getName(), bit.getFormat().getMIMEType()); + } + + email.send(); + requestItem.setColumn("decision_date",new Date()); + requestItem.setColumn("accept_request",true); + DatabaseManager.update(context, requestItem); + } + + private void processDeny(Context context,Request request, TableRow requestItem,Item item,String title) throws SQLException, IOException, MessagingException { + String message = request.getParameter("message"); + String subject = request.getParameter("subject"); + + Email email = new Email(); + email.setSubject(subject); + email.setContent("{0}"); + email.addRecipient(requestItem.getStringColumn("request_email")); + email.addArgument(message); + email.send(); + + requestItem.setColumn("decision_date",new Date()); + requestItem.setColumn("accept_request",false); + DatabaseManager.update(context, requestItem); + } +} diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestResponseDecisionForm.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestResponseDecisionForm.java new file mode 100644 index 0000000..6dfa321 --- /dev/null +++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestResponseDecisionForm.java @@ -0,0 +1,112 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.xmlui.aspect.artifactbrowser; + +import java.io.IOException; +import java.io.Serializable; +import java.sql.SQLException; + +import org.apache.cocoon.caching.CacheableProcessingComponent; +import org.apache.cocoon.environment.ObjectModelHelper; +import org.apache.cocoon.environment.Request; +import org.apache.cocoon.util.HashUtil; +import org.apache.excalibur.source.SourceValidity; +import org.apache.excalibur.source.impl.validity.NOPValidity; +import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; +import org.dspace.app.xmlui.utils.HandleUtil; +import org.dspace.app.xmlui.utils.UIException; +import org.dspace.app.xmlui.wing.Message; +import org.dspace.app.xmlui.wing.WingException; +import org.dspace.app.xmlui.wing.element.Body; +import org.dspace.app.xmlui.wing.element.Division; +import org.dspace.app.xmlui.wing.element.List; +import org.dspace.app.xmlui.wing.element.PageMeta; +import org.dspace.app.xmlui.wing.element.Para; +import org.dspace.app.xmlui.wing.element.Radio; +import org.dspace.app.xmlui.wing.element.Text; +import org.dspace.app.xmlui.wing.element.TextArea; +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.DCValue; +import org.dspace.content.DSpaceObject; +import org.dspace.content.Item; +import org.xml.sax.SAXException; + +/** + * Display to the user a simple decision form to select sending or not a file to + * requester. + * + * Original Concept, JSPUI version: Universidade do Minho at www.uminho.pt + * Sponsorship of XMLUI version: Instituto Oceanográfico de España at www.ieo.es + * + * @author Adán Román Ruiz at arvo.es (added request item support) + */ +public class ItemRequestResponseDecisionForm extends AbstractDSpaceTransformer + implements CacheableProcessingComponent { + /** Language Strings */ + private static final Message T_title = message("xmlui.ArtifactBrowser.ItemRequestResponseDecisionForm.title"); + + private static final Message T_dspace_home = message("xmlui.general.dspace_home"); + + private static final Message T_trail = message("xmlui.ArtifactBrowser.ItemRequestResponseDecisionForm.trail"); + + private static final Message T_head = message("xmlui.ArtifactBrowser.ItemRequestResponseDecisionForm.head"); + + private static final Message T_para1 = message("xmlui.ArtifactBrowser.ItemRequestResponseDecisionForm.para1"); + + private static final Message T_para2 = message("xmlui.ArtifactBrowser.ItemRequestResponseDecisionForm.para2"); + + private static final Message T_send = message("xmlui.ArtifactBrowser.ItemRequestResponseDecisionForm.send"); + + private static final Message T_dontSend = message("xmlui.ArtifactBrowser.ItemRequestResponseDecisionForm.dontSend"); + + /** + * Generate the unique caching key. This key must be unique inside the space + * of this component. + */ + public Serializable getKey() { + + String title = parameters.getParameter("title",""); + return HashUtil.hash(title); + } + + /** + * Generate the cache validity object. + */ + public SourceValidity getValidity() { + return NOPValidity.SHARED_INSTANCE; + } + + public void addPageMeta(PageMeta pageMeta) throws SAXException, + WingException, UIException, SQLException, IOException, + AuthorizeException { + pageMeta.addMetadata("title").addContent(T_title); + + pageMeta.addTrailLink(contextPath + "/", T_dspace_home); + pageMeta.addTrail().addContent(T_trail); + } + + public void addBody(Body body) throws SAXException, WingException, + UIException, SQLException, IOException, AuthorizeException { + + Request request = ObjectModelHelper.getRequest(objectModel); + String title = parameters.getParameter("title",""); + // Build the item viewer division. + Division itemRequest = body.addInteractiveDivision("itemRequest-form", + request.getRequestURI(), Division.METHOD_POST, "primary"); + itemRequest.setHead(T_head); + + itemRequest.addPara(T_para1.parameterize(title)); + itemRequest.addPara(T_para2); + + List form = itemRequest.addList("form", List.TYPE_FORM); + + form.addItem().addButton("send").setValue(T_send); + form.addItem().addButton("dontSend").setValue(T_dontSend); + + } +} diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestResponseFalseForm.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestResponseFalseForm.java new file mode 100644 index 0000000..ce1f56f --- /dev/null +++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestResponseFalseForm.java @@ -0,0 +1,162 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.xmlui.aspect.artifactbrowser; + +import java.io.IOException; +import java.io.Serializable; +import java.sql.SQLException; +import java.text.MessageFormat; + +import org.apache.cocoon.caching.CacheableProcessingComponent; +import org.apache.cocoon.environment.ObjectModelHelper; +import org.apache.cocoon.environment.Request; +import org.apache.cocoon.util.HashUtil; +import org.apache.excalibur.source.SourceValidity; +import org.apache.excalibur.source.impl.validity.NOPValidity; +import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; +import org.dspace.app.xmlui.utils.ContextUtil; +import org.dspace.app.xmlui.utils.HandleUtil; +import org.dspace.app.xmlui.utils.UIException; +import org.dspace.app.xmlui.wing.Message; +import org.dspace.app.xmlui.wing.WingException; +import org.dspace.app.xmlui.wing.element.Body; +import org.dspace.app.xmlui.wing.element.Division; +import org.dspace.app.xmlui.wing.element.List; +import org.dspace.app.xmlui.wing.element.PageMeta; +import org.dspace.app.xmlui.wing.element.Radio; +import org.dspace.app.xmlui.wing.element.Text; +import org.dspace.app.xmlui.wing.element.TextArea; +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.DCValue; +import org.dspace.content.DSpaceObject; +import org.dspace.content.Item; +import org.dspace.core.Context; +import org.dspace.core.I18nUtil; +import org.dspace.eperson.EPerson; +import org.dspace.handle.HandleManager; +import org.dspace.storage.rdbms.DatabaseManager; +import org.dspace.storage.rdbms.TableRow; +import org.xml.sax.SAXException; + +/** + * Display to the user a simple form to send a message rejecting the file send. + * + * Original Concept, JSPUI version: Universidade do Minho at www.uminho.pt + * Sponsorship of XMLUI version: Instituto Oceanográfico de España at www.ieo.es + * + * @author Adán Román Ruiz at arvo.es (added request item support) + */ +public class ItemRequestResponseFalseForm extends AbstractDSpaceTransformer implements CacheableProcessingComponent +{ + /** Language Strings */ + private static final Message T_title = + message("xmlui.ArtifactBrowser.ItemRequestResponseFalseForm.title"); + + private static final Message T_dspace_home = + message("xmlui.general.dspace_home"); + + private static final Message T_trail = + message("xmlui.ArtifactBrowser.ItemRequestResponseFalseForm.trail"); + + private static final Message T_head = + message("xmlui.ArtifactBrowser.ItemRequestResponseFalseForm.head"); + + private static final Message T_para1 = + message("xmlui.ArtifactBrowser.ItemRequestResponseFalseForm.para1"); + + private static final Message T_mail = + message("xmlui.ArtifactBrowser.ItemRequestResponseFalseForm.mail"); + + private static final Message T_back = + message("xmlui.ArtifactBrowser.ItemRequestResponseFalseForm.back"); + + private static final Message T_message = + message("xmlui.ArtifactBrowser.ItemRequestResponseFalseForm.message"); + + private static final Message T_subject = + message("xmlui.ArtifactBrowser.ItemRequestResponseFalseForm.subject"); + /** + * Generate the unique caching key. + * This key must be unique inside the space of this component. + */ + public Serializable getKey() { + + String token = parameters.getParameter("token", ""); + String decision = parameters.getParameter("decision", ""); + + return HashUtil.hash(token+"-"+decision); + } + + /** + * Generate the cache validity object. + */ + public SourceValidity getValidity() + { + return NOPValidity.SHARED_INSTANCE; + } + + public void addPageMeta(PageMeta pageMeta) throws SAXException, + WingException, UIException, SQLException, IOException, + AuthorizeException + { + pageMeta.addMetadata("title").addContent(T_title); + + pageMeta.addTrailLink(contextPath + "/",T_dspace_home); + pageMeta.addTrail().addContent(T_trail); + } + + public void addBody(Body body) throws SAXException, WingException, + UIException, SQLException, IOException, AuthorizeException + { + Request request = ObjectModelHelper.getRequest(objectModel); + Context context = ContextUtil.obtainContext(objectModel); + + TableRow requestItem = DatabaseManager.findByUnique(context, + "requestitem", "token", (String) request.getAttribute("token")); + String title; + Item item = Item.find(context, requestItem.getIntColumn("item_id")); + DCValue[] titleDC = item.getDC("title", null, Item.ANY); + if (titleDC != null || titleDC.length > 0) + title = titleDC[0].value; + else + title = "untitled"; + + EPerson submitter = item.getSubmitter(); + + Object[] args = new String[]{ + requestItem.getStringColumn("request_name"), + HandleManager.getCanonicalForm(item.getHandle()), // User + title, // request item title + submitter.getFullName(), // # submmiter name + submitter.getEmail() // # submmiter email + }; + + String subject = I18nUtil.getMessage("itemRequest.response.subject.reject", context); + String messageTemplate = MessageFormat.format(I18nUtil.getMessage("itemRequest.response.body.reject", context), args); + + Division itemRequest = body.addInteractiveDivision("itemRequest-form", + request.getRequestURI(),Division.METHOD_POST,"primary"); + itemRequest.setHead(T_head); + + itemRequest.addPara(T_para1); + + List form = itemRequest.addList("form",List.TYPE_FORM); + + Text subj = form.addItem().addText("subject"); + subj.setLabel(T_subject); + subj.setValue(subject); + subj.setSize(60); + TextArea message = form.addItem().addTextArea("message"); + message.setSize(20, 0); + message.setLabel(T_message); + message.setValue(parameters.getParameter("message",messageTemplate)); + form.addItem().addHidden("decision").setValue(parameters.getParameter("decision","")); + form.addItem().addButton("back").setValue(T_back); + form.addItem().addButton("mail").setValue(T_mail); + } +} diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestResponseTrueForm.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestResponseTrueForm.java new file mode 100644 index 0000000..e53d820 --- /dev/null +++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestResponseTrueForm.java @@ -0,0 +1,157 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.xmlui.aspect.artifactbrowser; + +import java.io.IOException; +import java.io.Serializable; +import java.sql.SQLException; +import java.text.MessageFormat; + +import org.apache.cocoon.caching.CacheableProcessingComponent; +import org.apache.cocoon.environment.ObjectModelHelper; +import org.apache.cocoon.environment.Request; +import org.apache.cocoon.util.HashUtil; +import org.apache.excalibur.source.SourceValidity; +import org.apache.excalibur.source.impl.validity.NOPValidity; +import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; +import org.dspace.app.xmlui.utils.ContextUtil; +import org.dspace.app.xmlui.utils.UIException; +import org.dspace.app.xmlui.wing.Message; +import org.dspace.app.xmlui.wing.WingException; +import org.dspace.app.xmlui.wing.element.Body; +import org.dspace.app.xmlui.wing.element.Division; +import org.dspace.app.xmlui.wing.element.List; +import org.dspace.app.xmlui.wing.element.PageMeta; +import org.dspace.app.xmlui.wing.element.Text; +import org.dspace.app.xmlui.wing.element.TextArea; +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.DCValue; +import org.dspace.content.Item; +import org.dspace.core.Context; +import org.dspace.core.I18nUtil; +import org.dspace.eperson.EPerson; +import org.dspace.handle.HandleManager; +import org.dspace.storage.rdbms.DatabaseManager; +import org.dspace.storage.rdbms.TableRow; +import org.xml.sax.SAXException; + +/** + * Display to the user a simple form letting the user send a document with a message. + * + * Original Concept, JSPUI version: Universidade do Minho at www.uminho.pt + * Sponsorship of XMLUI version: Instituto Oceanográfico de España at www.ieo.es + * + * @author Adán Román Ruiz at arvo.es (added request item support) + */ +public class ItemRequestResponseTrueForm extends AbstractDSpaceTransformer implements CacheableProcessingComponent +{ + /** Language Strings */ + private static final Message T_title = + message("xmlui.ArtifactBrowser.ItemRequestResponseTrueForm.title"); + + private static final Message T_dspace_home = + message("xmlui.general.dspace_home"); + + private static final Message T_trail = + message("xmlui.ArtifactBrowser.ItemRequestResponseTrueForm.trail"); + + private static final Message T_head = + message("xmlui.ArtifactBrowser.ItemRequestResponseTrueForm.head"); + + private static final Message T_para1 = + message("xmlui.ArtifactBrowser.ItemRequestResponseTrueForm.para1"); + + private static final Message T_mail = + message("xmlui.ArtifactBrowser.ItemRequestResponseTrueForm.mail"); + + private static final Message T_back = + message("xmlui.ArtifactBrowser.ItemRequestResponseTrueForm.back"); + + private static final Message T_message = + message("xmlui.ArtifactBrowser.ItemRequestResponseTrueForm.message"); + + private static final Message T_subject = + message("xmlui.ArtifactBrowser.ItemRequestResponseTrueForm.subject"); + + /** + * Generate the unique caching key. + * This key must be unique inside the space of this component. + */ + public Serializable getKey() { + String token = parameters.getParameter("token", ""); + String decision = parameters.getParameter("decision", ""); + + return HashUtil.hash(token+"-"+decision); + } + + /** + * Generate the cache validity object. + */ + public SourceValidity getValidity() + { + return NOPValidity.SHARED_INSTANCE; + } + + public void addPageMeta(PageMeta pageMeta) throws SAXException, + WingException, UIException, SQLException, IOException, + AuthorizeException + { + pageMeta.addMetadata("title").addContent(T_title); + + pageMeta.addTrailLink(contextPath + "/",T_dspace_home); + pageMeta.addTrail().addContent(T_trail); + } + + public void addBody(Body body) throws SAXException, WingException, + UIException, SQLException, IOException, AuthorizeException + { + Request request = ObjectModelHelper.getRequest(objectModel); + Context context = ContextUtil.obtainContext(objectModel); + + TableRow requestItem = DatabaseManager.findByUnique(context, + "requestitem", "token", (String) request.getAttribute("token")); + String title; + Item item = Item.find(context, requestItem.getIntColumn("item_id")); + DCValue[] titleDC = item.getDC("title", null, Item.ANY); + if (titleDC != null || titleDC.length > 0) + title = titleDC[0].value; + else + title = "untitled"; + + EPerson submitter = item.getSubmitter(); + + Object[] args = new String[]{ + requestItem.getStringColumn("request_name"), + HandleManager.getCanonicalForm(item.getHandle()), // User + title, // request item title + submitter.getFullName(), // # submmiter name + submitter.getEmail() // # submmiter email + }; + + String subject = I18nUtil.getMessage("itemRequest.response.subject.approve", context); + String messageTemplate = MessageFormat.format(I18nUtil.getMessage("itemRequest.response.body.approve", context), args); + + Division itemRequest = body.addInteractiveDivision("itemRequest-form", request.getRequestURI(),Division.METHOD_POST,"primary"); + itemRequest.setHead(T_head); + + itemRequest.addPara(T_para1); + + List form = itemRequest.addList("form",List.TYPE_FORM); + Text subj = form.addItem().addText("subject"); + subj.setLabel(T_subject); + subj.setValue(subject); + subj.setSize(60); + TextArea message = form.addItem().addTextArea("message"); + message.setSize(20, 0); + message.setLabel(T_message); + message.setValue(parameters.getParameter("message",messageTemplate)); + form.addItem().addHidden("decision").setValue(parameters.getParameter("decision","")); + form.addItem().addButton("back").setValue(T_back); + form.addItem().addButton("mail").setValue(T_mail); + } +} diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestSent.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestSent.java new file mode 100644 index 0000000..55c5989 --- /dev/null +++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestSent.java @@ -0,0 +1,91 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.xmlui.aspect.artifactbrowser; + +import java.io.IOException; +import java.io.Serializable; +import java.sql.SQLException; + +import org.apache.cocoon.caching.CacheableProcessingComponent; +import org.apache.excalibur.source.SourceValidity; +import org.apache.excalibur.source.impl.validity.NOPValidity; +import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; +import org.dspace.app.xmlui.utils.UIException; +import org.dspace.app.xmlui.wing.Message; +import org.dspace.app.xmlui.wing.WingException; +import org.dspace.app.xmlui.wing.element.Body; +import org.dspace.app.xmlui.wing.element.Division; +import org.dspace.app.xmlui.wing.element.PageMeta; +import org.dspace.authorize.AuthorizeException; +import org.xml.sax.SAXException; + +/** + * Simple page to let the user know their mail and file has been sent. + * + * Original Concept, JSPUI version: Universidade do Minho at www.uminho.pt + * Sponsorship of XMLUI version: Instituto Oceanográfico de España at www.ieo.es + * + * @author Adán Román Ruiz at arvo.es (added request item support) + */ +public class ItemRequestSent extends AbstractDSpaceTransformer implements CacheableProcessingComponent +{ + /** language strings */ + public static final Message T_title = + message("xmlui.ArtifactBrowser.ItemRequestSent.title"); + + public static final Message T_dspace_home = + message("xmlui.general.dspace_home"); + + public static final Message T_trail = + message("xmlui.ArtifactBrowser.ItemRequestSent.trail"); + + public static final Message T_head = + message("xmlui.ArtifactBrowser.ItemRequestSent.head"); + + public static final Message T_para1 = + message("xmlui.ArtifactBrowser.ItemRequestSent.para1"); + + /** + * Generate the unique caching key. + */ + public Serializable getKey() { + return 0; + } + + /** + * Generate the cache validity object. + */ + public SourceValidity getValidity() + { + return NOPValidity.SHARED_INSTANCE; + } + + + public void addPageMeta(PageMeta pageMeta) throws SAXException, + WingException, UIException, SQLException, IOException, + AuthorizeException + { + + pageMeta.addMetadata("title").addContent(T_title); + + pageMeta.addTrailLink(contextPath + "/",T_dspace_home); + pageMeta.addTrail().addContent(T_trail); + } + + + public void addBody(Body body) throws SAXException, WingException, + UIException, SQLException, IOException, AuthorizeException + { + Division feedback = body.addDivision("itemRequest-sent","primary"); + + feedback.setHead(T_head); + + feedback.addPara(T_para1); + + } +} diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestStatusChanged.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestStatusChanged.java new file mode 100644 index 0000000..6d106c1 --- /dev/null +++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemRequestStatusChanged.java @@ -0,0 +1,107 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.xmlui.aspect.artifactbrowser; + +import java.io.IOException; +import java.io.Serializable; +import java.sql.SQLException; + +import org.apache.cocoon.caching.CacheableProcessingComponent; +import org.apache.cocoon.environment.ObjectModelHelper; +import org.apache.cocoon.environment.Request; +import org.apache.cocoon.util.HashUtil; +import org.apache.excalibur.source.SourceValidity; +import org.apache.excalibur.source.impl.validity.NOPValidity; +import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; +import org.dspace.app.xmlui.utils.HandleUtil; +import org.dspace.app.xmlui.utils.UIException; +import org.dspace.app.xmlui.wing.Message; +import org.dspace.app.xmlui.wing.WingException; +import org.dspace.app.xmlui.wing.element.Body; +import org.dspace.app.xmlui.wing.element.Division; +import org.dspace.app.xmlui.wing.element.List; +import org.dspace.app.xmlui.wing.element.PageMeta; +import org.dspace.app.xmlui.wing.element.Radio; +import org.dspace.app.xmlui.wing.element.Text; +import org.dspace.app.xmlui.wing.element.TextArea; +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.DCValue; +import org.dspace.content.DSpaceObject; +import org.dspace.content.Item; +import org.xml.sax.SAXException; + +/** + * Display to the user a simple page to let the user know the mail to request change status of a item is sent. + * + * + * Original Concept, JSPUI version: Universidade do Minho at www.uminho.pt + * Sponsorship of XMLUI version: Instituto Oceanográfico de España at www.ieo.es + * + * @author Adán Román Ruiz at arvo.es (added request item support) + */ +public class ItemRequestStatusChanged extends AbstractDSpaceTransformer implements CacheableProcessingComponent +{ + /** Language Strings */ + private static final Message T_title = + message("xmlui.ArtifactBrowser.ItemRequestStatusChanged.title"); + + private static final Message T_dspace_home = + message("xmlui.general.dspace_home"); + + private static final Message T_trail = + message("xmlui.ArtifactBrowser.ItemRequestStatusChanged.trail"); + + private static final Message T_head = + message("xmlui.ArtifactBrowser.ItemRequestStatusChanged.head"); + + private static final Message T_para1 = + message("xmlui.ArtifactBrowser.ItemRequestStatusChanged.para1"); + + private static final Message T_para2 = + message("xmlui.ArtifactBrowser.ItemRequestStatusChanged.para2"); + + /** + * Generate the unique caching key. + * This key must be unique inside the space of this component. + */ + public Serializable getKey() { + + String token = parameters.getParameter("token", ""); + return HashUtil.hash(token); + } + + /** + * Generate the cache validity object. + */ + public SourceValidity getValidity() + { + return NOPValidity.SHARED_INSTANCE; + } + + + public void addPageMeta(PageMeta pageMeta) throws SAXException, + WingException, UIException, SQLException, IOException, + AuthorizeException + { + pageMeta.addMetadata("title").addContent(T_title); + + pageMeta.addTrailLink(contextPath + "/",T_dspace_home); + pageMeta.addTrail().addContent(T_trail); + } + + public void addBody(Body body) throws SAXException, WingException, + UIException, SQLException, IOException, AuthorizeException + { + Division itemRequest = body.addDivision("itemRequestStatus"); + + itemRequest.setHead(T_head); + + itemRequest.addPara(T_para1); + itemRequest.addPara(T_para2); + } +} diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/SendItemRequestAction.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/SendItemRequestAction.java new file mode 100644 index 0000000..5133bc3 --- /dev/null +++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/SendItemRequestAction.java @@ -0,0 +1,210 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.xmlui.aspect.artifactbrowser; + +import java.sql.SQLException; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import org.apache.avalon.framework.parameters.Parameters; +import org.apache.cocoon.acting.AbstractAction; +import org.apache.cocoon.environment.ObjectModelHelper; +import org.apache.cocoon.environment.Redirector; +import org.apache.cocoon.environment.Request; +import org.apache.cocoon.environment.SourceResolver; +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.dspace.app.requestitem.RequestItemAuthor; +import org.dspace.app.requestitem.RequestItemAuthorExtractor; +import org.dspace.app.xmlui.utils.ContextUtil; +import org.dspace.app.xmlui.utils.HandleUtil; +import org.dspace.content.Bitstream; +import org.dspace.content.DCValue; +import org.dspace.content.DSpaceObject; +import org.dspace.content.Item; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Context; +import org.dspace.core.Email; +import org.dspace.core.I18nUtil; +import org.dspace.core.Utils; +import org.dspace.eperson.EPerson; +import org.dspace.handle.HandleManager; +import org.dspace.storage.rdbms.DatabaseManager; +import org.dspace.storage.rdbms.TableRow; +import org.dspace.utils.DSpace; + + /** + * This action will send a mail to request a item to administrator when all mandatory data is present. + * It will record the request into the database. + * + * Original Concept, JSPUI version: Universidade do Minho at www.uminho.pt + * Sponsorship of XMLUI version: Instituto Oceanográfico de España at www.ieo.es + * + * @author Adán Román Ruiz at arvo.es (added request item support) + */ +public class SendItemRequestAction extends AbstractAction +{ + private static Logger log = Logger.getLogger(SendItemRequestAction.class); + + public Map act(Redirector redirector, SourceResolver resolver, Map objectModel, + String source, Parameters parameters) throws Exception + { + Request request = ObjectModelHelper.getRequest(objectModel); + + String requesterName = request.getParameter("requesterName"); + String requesterEmail = request.getParameter("requesterEmail"); + String allFiles = request.getParameter("allFiles"); + String message = request.getParameter("message"); + String bitstreamId = request.getParameter("bitstreamId"); + + // User email from context + Context context = ContextUtil.obtainContext(objectModel); + EPerson loggedin = context.getCurrentUser(); + String eperson = null; + if (loggedin != null) + { + eperson = loggedin.getEmail(); + } + + // Check all data is there + if (StringUtils.isEmpty(requesterName) || StringUtils.isEmpty(requesterEmail) || StringUtils.isEmpty(allFiles) || StringUtils.isEmpty(message)) + { + // Either the user did not fill out the form or this is the + // first time they are visiting the page. + Map<String,String> map = new HashMap<String,String>(); + map.put("bitstreamId",bitstreamId); + + if (StringUtils.isEmpty(requesterEmail)) + { + map.put("requesterEmail", eperson); + } + else + { + map.put("requesterEmail", requesterEmail); + } + map.put("requesterName",requesterName); + map.put("allFiles",allFiles); + map.put("message",message); + return map; + } + DSpaceObject dso = HandleUtil.obtainHandle(objectModel); + if (!(dso instanceof Item)) + { + throw new Exception("Invalid DspaceObject at ItemRequest."); + } + + Item item = (Item) dso; + String title=""; + DCValue[] titleDC = item.getDC("title", null, Item.ANY); + if (titleDC != null || titleDC.length > 0) { + title=titleDC[0].value; + } + String emailRequest; + + RequestItemAuthor author = new DSpace() + .getServiceManager() + .getServiceByName(RequestItemAuthorExtractor.class.getName(), + RequestItemAuthorExtractor.class) + .getRequestItemAuthor(context, item); + + String authorEmail = author.getEmail(); + String authorName = author.getFullName(); + + if(authorEmail!=null){ + emailRequest=authorEmail; + }else{ + emailRequest=ConfigurationManager.getProperty("mail.helpdesk"); + } + if(emailRequest==null){ + emailRequest=ConfigurationManager.getProperty("mail.admin"); + } + // All data is there, send the email + Email email = Email.getEmail(I18nUtil.getEmailFilename(context.getCurrentLocale(), "request_item.author")); + email.addRecipient(emailRequest); + + email.addArgument(requesterName); + email.addArgument(requesterEmail); + email.addArgument(allFiles.equals("true")?I18nUtil.getMessage("itemRequest.all"):Bitstream.find(context,Integer.parseInt(bitstreamId)).getName()); + email.addArgument(HandleManager.getCanonicalForm(item.getHandle())); + email.addArgument(title); // request item title + email.addArgument(message); // message + email.addArgument(getLinkTokenEmail(context,request, bitstreamId, item.getID(), requesterEmail, requesterName, Boolean.parseBoolean(allFiles))); + email.addArgument(authorName); // corresponding author name + email.addArgument(authorEmail); // corresponding author email + email.addArgument(ConfigurationManager.getProperty("dspace.name")); + email.addArgument(ConfigurationManager.getProperty("mail.helpdesk")); + + email.setReplyTo(requesterEmail); + + email.send(); + // Finished, allow to pass. + return null; + } + + /** + * Get the link to the author in RequestLink email. + * + * @param email + * The email address to mail to + * + * @exception SQLExeption + * + */ + protected String getLinkTokenEmail(Context context,Request request, String bitstreamId + , int itemID, String reqEmail, String reqName, boolean allfiles) + throws SQLException + { + String base = ConfigurationManager.getProperty("dspace.url"); + + request.getPathInfo(); + String specialLink = (new StringBuffer()).append(base).append( + base.endsWith("/") ? "" : "/").append( + "itemRequestResponse/").append(getNewToken(context, Integer.parseInt(bitstreamId), itemID, reqEmail, reqName, allfiles)) + .toString()+"/"; + + return specialLink; + } + /** + * Generate a unique id of the request and put it into the ddbb + * @param context + * @param bitstreamId + * @param itemID + * @param reqEmail + * @param reqName + * @param allfiles + * @return + * @throws SQLException + */ + protected String getNewToken(Context context, int bitstreamId, int itemID, String reqEmail, String reqName, boolean allfiles) throws SQLException + { + TableRow rd = DatabaseManager.create(context, "requestitem"); + rd.setColumn("token", Utils.generateHexKey()); + rd.setColumn("bitstream_id", bitstreamId); + rd.setColumn("item_id",itemID); + rd.setColumn("allfiles", allfiles); + rd.setColumn("request_email", reqEmail); + rd.setColumn("request_name", reqName); + rd.setColumnNull("accept_request"); + rd.setColumn("request_date", new Date()); + rd.setColumnNull("decision_date"); + rd.setColumnNull("expires"); + + DatabaseManager.update(context, rd); + + if (log.isDebugEnabled()) + { + log.debug("Created requestitem_token " + + rd.getIntColumn("requestitem_id") + + " with token " + rd.getStringColumn("token") + + "\""); + } + return rd.getStringColumn("token"); + + } +} diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/browseArtifacts/CollectionBrowse.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/browseArtifacts/CollectionBrowse.java new file mode 100644 index 0000000..bc76e56 --- /dev/null +++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/browseArtifacts/CollectionBrowse.java @@ -0,0 +1,93 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.xmlui.aspect.browseArtifacts; + +import org.apache.cocoon.ProcessingException; +import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; +import org.dspace.app.xmlui.utils.HandleUtil; +import org.dspace.app.xmlui.wing.Message; +import org.dspace.app.xmlui.wing.WingException; +import org.dspace.app.xmlui.wing.element.Body; +import org.dspace.app.xmlui.wing.element.Division; +import org.dspace.app.xmlui.wing.element.List; +import org.dspace.authorize.AuthorizeException; +import org.dspace.browse.BrowseException; +import org.dspace.browse.BrowseIndex; +import org.dspace.content.Collection; +import org.dspace.content.DSpaceObject; +import org.xml.sax.SAXException; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; + +/** + * Renders the browse links for a collection + * + * @author Kevin Van de Velde (kevin at atmire dot com) + * @author Mark Diggory (markd at atmire dot com) + * @author Ben Bosman (ben at atmire dot com) + */ +public class CollectionBrowse extends AbstractDSpaceTransformer { + + private static final Message T_head_browse = + message("xmlui.ArtifactBrowser.CollectionViewer.head_browse"); + + private static final Message T_browse_titles = + message("xmlui.ArtifactBrowser.CollectionViewer.browse_titles"); + + private static final Message T_browse_authors = + message("xmlui.ArtifactBrowser.CollectionViewer.browse_authors"); + + private static final Message T_browse_dates = + message("xmlui.ArtifactBrowser.CollectionViewer.browse_dates"); + + @Override + public void addBody(Body body) throws SAXException, WingException, SQLException, IOException, AuthorizeException, ProcessingException { + DSpaceObject dso = HandleUtil.obtainHandle(objectModel); + if (!(dso instanceof Collection)) + { + return; + } + + // Set up the major variables + Collection collection = (Collection) dso; + + Division home = body.addDivision("collection-home", "primary repository collection"); + + Division search = home.addDivision("collection-search-browse", + "secondary search-browse"); + + // Browse by list + Division browseDiv = search.addDivision("collection-browse", "secondary browse"); + List browse = browseDiv.addList("collection-browse", List.TYPE_SIMPLE, + "collection-browse"); + browse.setHead(T_head_browse); + String url = contextPath + "/handle/" + collection.getHandle(); + + try { + // Get a Map of all the browse tables + BrowseIndex[] bis = BrowseIndex.getBrowseIndices(); + for (BrowseIndex bix : bis) { + // Create a Map of the query parameters for this link + Map<String, String> queryParams = new HashMap<String, String>(); + + queryParams.put("type", bix.getName()); + + // Add a link to this browse + browse.addItemXref(generateURL(url + "/browse", queryParams), + message("xmlui.ArtifactBrowser.Navigation.browse_" + bix.getName())); + } + } catch (BrowseException bex) { + browse.addItemXref(url + "/browse?type=title", T_browse_titles); + browse.addItemXref(url + "/browse?type=author", T_browse_authors); + browse.addItemXref(url + "/browse?type=dateissued", T_browse_dates); + } + } +} \ No newline at end of file diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/browseArtifacts/CommunityBrowse.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/browseArtifacts/CommunityBrowse.java new file mode 100644 index 0000000..04b3a01 --- /dev/null +++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/browseArtifacts/CommunityBrowse.java @@ -0,0 +1,93 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.xmlui.aspect.browseArtifacts; + +import org.apache.cocoon.ProcessingException; +import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; +import org.dspace.app.xmlui.utils.HandleUtil; +import org.dspace.app.xmlui.wing.Message; +import org.dspace.app.xmlui.wing.WingException; +import org.dspace.app.xmlui.wing.element.Body; +import org.dspace.app.xmlui.wing.element.Division; +import org.dspace.app.xmlui.wing.element.List; +import org.dspace.authorize.AuthorizeException; +import org.dspace.browse.BrowseException; +import org.dspace.browse.BrowseIndex; +import org.dspace.content.Community; +import org.dspace.content.DSpaceObject; +import org.xml.sax.SAXException; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; + +/** + * Renders the browse links for a community + * + * @author Kevin Van de Velde (kevin at atmire dot com) + * @author Mark Diggory (markd at atmire dot com) + * @author Ben Bosman (ben at atmire dot com) + */ +public class CommunityBrowse extends AbstractDSpaceTransformer { + + private static final Message T_head_browse = + message("xmlui.ArtifactBrowser.CommunityViewer.head_browse"); + + private static final Message T_browse_titles = + message("xmlui.ArtifactBrowser.CommunityViewer.browse_titles"); + + private static final Message T_browse_authors = + message("xmlui.ArtifactBrowser.CommunityViewer.browse_authors"); + + private static final Message T_browse_dates = + message("xmlui.ArtifactBrowser.CommunityViewer.browse_dates"); + + @Override + public void addBody(Body body) throws SAXException, WingException, SQLException, IOException, AuthorizeException, ProcessingException { + DSpaceObject dso = HandleUtil.obtainHandle(objectModel); + if (!(dso instanceof Community)) + { + return; + } + + // Set up the major variables + Community community = (Community) dso; + + Division home = body.addDivision("community-home", "primary repository community"); + + Division search = home.addDivision("community-search-browse", + "secondary search-browse"); + + // Browse by list + Division browseDiv = search.addDivision("community-browse", "secondary browse"); + List browse = browseDiv.addList("community-browse", List.TYPE_SIMPLE, + "community-browse"); + browse.setHead(T_head_browse); + String url = contextPath + "/handle/" + community.getHandle(); + + try { + // Get a Map of all the browse tables + BrowseIndex[] bis = BrowseIndex.getBrowseIndices(); + for (BrowseIndex bix : bis) { + // Create a Map of the query parameters for this link + Map<String, String> queryParams = new HashMap<String, String>(); + + queryParams.put("type", bix.getName()); + + // Add a link to this browse + browse.addItemXref(generateURL(url + "/browse", queryParams), + message("xmlui.ArtifactBrowser.Navigation.browse_" + bix.getName())); + } + } catch (BrowseException bex) { + browse.addItemXref(url + "/browse?type=title", T_browse_titles); + browse.addItemXref(url + "/browse?type=author", T_browse_authors); + browse.addItemXref(url + "/browse?type=dateissued", T_browse_dates); + } + } +} \ No newline at end of file diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/discovery/recentSubmissions/RecentSubmissionTransformer.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/discovery/recentSubmissions/RecentSubmissionTransformer.java new file mode 100644 index 0000000..5e876a8 --- /dev/null +++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/discovery/recentSubmissions/RecentSubmissionTransformer.java @@ -0,0 +1,210 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.xmlui.aspect.discovery.recentSubmissions; + +import org.apache.avalon.framework.parameters.Parameters; +import org.apache.cocoon.ProcessingException; +import org.apache.cocoon.environment.ObjectModelHelper; +import org.apache.cocoon.environment.Request; +import org.apache.cocoon.environment.SourceResolver; +import org.dspace.app.util.Util; +import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; +import org.dspace.app.xmlui.utils.HandleUtil; +import org.dspace.app.xmlui.utils.UIException; +import org.dspace.app.xmlui.wing.Message; +import org.dspace.app.xmlui.wing.WingException; +import org.dspace.app.xmlui.wing.element.*; +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.DSpaceObject; +import org.dspace.content.Site; +import org.dspace.core.ConfigurationManager; +import org.dspace.discovery.DiscoverResult; +import org.xml.sax.SAXException; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.Map; + +/** + * Transformer that renders recent submissions with a paging option to traverse them + * + * @author Kevin Van de Velde (kevin at atmire dot com) + */ +public class RecentSubmissionTransformer extends AbstractDSpaceTransformer { + + protected static final Message T_dspace_home = message("xmlui.general.dspace_home"); + protected static final Message T_untitled = message("xmlui.general.untitled"); + protected static final Message T_head = message("xmlui.Discovery.RecentSubmissions.RecentSubmissionTransformer.head"); + protected static final Message T_recent_submission_head = message("xmlui.Discovery.RecentSubmissions.RecentSubmissionTransformer.recent.head"); + protected static final Message T_trail = message("xmlui.Discovery.RecentSubmissions.RecentSubmissionTransformer.trail"); + + protected boolean isHomePage = false; + + @Override + public void setup(SourceResolver resolver, Map objectModel, String src, Parameters parameters) throws ProcessingException, SAXException, IOException { + super.setup(resolver, objectModel, src, parameters); + isHomePage = parameters.getParameterAsBoolean("isHomePage", false); + } + + @Override + public void addPageMeta(PageMeta pageMeta) throws SAXException, WingException, UIException, SQLException, IOException, AuthorizeException { + DSpaceObject dso = getDSpaceObject(); + + // Set up the major variables + // Set the page title + String name = dso.getName(); + Metadata titlePageMeta = pageMeta.addMetadata("title"); + if (name == null || name.length() == 0) + { + if(isHomePage){ + titlePageMeta.addContent(T_untitled); + }else{ + titlePageMeta.addContent(T_recent_submission_head.parameterize(name)); + } + } + else + { + if(isHomePage){ + titlePageMeta.addContent(name); + }else{ + titlePageMeta.addContent(T_recent_submission_head.parameterize(name)); + } + } + + // Add the trail back to the repository root. + pageMeta.addTrailLink(contextPath + "/",T_dspace_home); + HandleUtil.buildHandleTrail(dso, pageMeta,contextPath, !isHomePage); + if(!isHomePage) + { + //Add a trail link indicating that we are on a recent submissions page + pageMeta.addTrail().addContent(T_trail); + } + + /** + * If we are on a home page add the feeds (if enabled) + */ + if(isHomePage) + { + // Add RSS links if available + String formats = ConfigurationManager.getProperty("webui.feed.formats"); + if ( formats != null ) + { + for (String format : formats.split(",")) + { + // Remove the protocol number, i.e. just list 'rss' or' atom' + String[] parts = format.split("_"); + if (parts.length < 1) + { + continue; + } + + String feedFormat = parts[0].trim()+"+xml"; + + String feedURL = contextPath+"/feed/"+format.trim()+"/"+dso.getHandle(); + pageMeta.addMetadata("feed", feedFormat).addContent(feedURL); + } + } + } + } + + @Override + public void addBody(Body body) throws SAXException, WingException, SQLException, IOException, AuthorizeException, ProcessingException { + Request request = ObjectModelHelper.getRequest(objectModel); + DSpaceObject dso = getDSpaceObject(); + + Division mainDivision = body.addDivision("main-recent-submissions"); + setMainTitle(dso, mainDivision); + Division recentSubmissionDivision = mainDivision.addDivision("recent-submissions"); + if(isHomePage){ + recentSubmissionDivision.setHead(T_recent_submission_head); + } + + DiscoverResult recentlySubmittedItems = RecentSubmissionUtils.getRecentlySubmittedItems(context, dso, getOffset(request)); + setPagination(request, dso, recentSubmissionDivision, recentlySubmittedItems); + + ReferenceSet lastSubmitted = recentSubmissionDivision.addReferenceSet( + "last-submitted", ReferenceSet.TYPE_SUMMARY_LIST, + null, "recent-submissions"); + + for (DSpaceObject resultObject : recentlySubmittedItems.getDspaceObjects()) { + if(resultObject != null){ + lastSubmitted.addReference(resultObject); + } + } + } + + protected void setPagination(Request request, DSpaceObject dso, Division mainDivision, DiscoverResult recentlySubmittedItems) { + int offset = getOffset(request); + int rpp = RecentSubmissionUtils.getRecentSubmissionConfiguration(dso).getMax(); + int firstIndex = offset + 1; + int lastIndex = offset + recentlySubmittedItems.getDspaceObjects().size(); + mainDivision.setSimplePagination((int) recentlySubmittedItems.getTotalSearchResults(), firstIndex, + lastIndex, getPreviousPageURL(dso, offset, rpp), getNextPageURL(dso, offset, rpp, (int) recentlySubmittedItems.getTotalSearchResults())); + } + + protected void setMainTitle(DSpaceObject dso, Division mainDivision) throws WingException { + String title = dso.getName(); + if(isHomePage) + { + mainDivision.setHead(title); + }else{ + //We are not acting as home page so use a message + mainDivision.setHead(T_head.parameterize(title)); + } + + } + + protected String getNextPageURL(DSpaceObject dso, int currentOffset, int rpp, int total){ + if((rpp + currentOffset) < total) + { + return getBaseUrl(dso) + "?offset=" + (rpp + currentOffset); + }else{ + return null; + } + } + + protected String getPreviousPageURL(DSpaceObject dso, int currentOffset, int rpp) { + if((currentOffset - rpp) < 0){ + return null; + }else{ + return getBaseUrl(dso) + "?offset=" + (currentOffset - rpp); + } + } + + protected String getBaseUrl(DSpaceObject dso) + { + String url = contextPath; + if(dso != null && dso.getID() != Site.SITE_ID) + { + url += "/handle/" + dso.getHandle(); + } + if(!isHomePage) + { + url += "/recent-submissions"; + } + return url; + } + + protected int getOffset(Request request) { + int start = Util.getIntParameter(request, "offset"); + if(start == -1){ + start = 0; + } + return start; + } + + protected DSpaceObject getDSpaceObject() throws SQLException { + DSpaceObject dso = HandleUtil.obtainHandle(objectModel); + if(dso == null) + { + return Site.find(context, Site.SITE_ID); + }else{ + return dso; + } + } +} diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/discovery/recentSubmissions/RecentSubmissionUtils.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/discovery/recentSubmissions/RecentSubmissionUtils.java new file mode 100644 index 0000000..701af85 --- /dev/null +++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/discovery/recentSubmissions/RecentSubmissionUtils.java @@ -0,0 +1,79 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.xmlui.aspect.discovery.recentSubmissions; + +import org.apache.log4j.Logger; +import org.dspace.content.DSpaceObject; +import org.dspace.core.Constants; +import org.dspace.core.Context; +import org.dspace.discovery.*; +import org.dspace.discovery.configuration.DiscoveryConfiguration; +import org.dspace.discovery.configuration.DiscoveryRecentSubmissionsConfiguration; + +import java.util.List; + +/** + * Class containing utility methods used to render recent submissions + * + * @author Kevin Van de Velde (kevin at atmire dot com) + */ +public class RecentSubmissionUtils { + + private static final Logger log = Logger.getLogger(RecentSubmissionUtils.class); + + /** + * Retrieves the recent submitted items of the given scope + * + * @param dso the DSpace object can either be null (indicating home page), a collection or a community + */ + public static DiscoverResult getRecentlySubmittedItems(Context context, DSpaceObject dso, int offset) { + try { + DiscoverQuery queryArgs = new DiscoverQuery(); + + //Add the default filter queries + DiscoveryConfiguration discoveryConfiguration = getDiscoveryConfiguration(dso); + List<String> defaultFilterQueries = discoveryConfiguration.getDefaultFilterQueries(); + queryArgs.addFilterQueries(defaultFilterQueries.toArray(new String[defaultFilterQueries.size()])); + queryArgs.setDSpaceObjectFilter(Constants.ITEM); + + DiscoveryRecentSubmissionsConfiguration recentSubmissionConfiguration = getRecentSubmissionConfiguration(discoveryConfiguration); + if(recentSubmissionConfiguration != null){ + queryArgs.setMaxResults(recentSubmissionConfiguration.getMax()); + queryArgs.setStart(offset); + String sortField = SearchUtils.getSearchService().toSortFieldIndex(recentSubmissionConfiguration.getMetadataSortField(), recentSubmissionConfiguration.getType()); + if(sortField != null){ + queryArgs.setSortField( + sortField, + DiscoverQuery.SORT_ORDER.desc + ); + } + SearchService service = SearchUtils.getSearchService(); + return service.search(context, dso, queryArgs); + }else{ + //No configuration, no results + return null; + } + }catch (SearchServiceException se){ + log.error("Caught SearchServiceException while retrieving recent submission for: " + (dso == null ? "home page" : dso.getHandle()), se); + return null; + } + } + + public static DiscoveryRecentSubmissionsConfiguration getRecentSubmissionConfiguration(DSpaceObject dso) { + return getRecentSubmissionConfiguration(getDiscoveryConfiguration(dso)); + + } + public static DiscoveryRecentSubmissionsConfiguration getRecentSubmissionConfiguration(DiscoveryConfiguration discoveryConfiguration) { + return discoveryConfiguration.getRecentSubmissionConfiguration(); + } + + public static DiscoveryConfiguration getDiscoveryConfiguration(DSpaceObject dso) { + return SearchUtils.getDiscoveryConfiguration(dso); + } + +} diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/general/ConfigurationMatcher.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/general/ConfigurationMatcher.java new file mode 100644 index 0000000..11b68fe --- /dev/null +++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/general/ConfigurationMatcher.java @@ -0,0 +1,87 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.xmlui.aspect.general; + +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; + +import org.apache.avalon.framework.logger.AbstractLogEnabled; +import org.apache.avalon.framework.parameters.Parameters; +import org.apache.cocoon.matching.Matcher; +import org.apache.cocoon.sitemap.PatternException; +import org.apache.cocoon.util.ConfigurationUtil; +import org.apache.commons.lang.StringUtils; +import org.dspace.app.xmlui.utils.ContextUtil; +import org.dspace.app.xmlui.utils.HandleUtil; +import org.dspace.authorize.AuthorizeManager; +import org.dspace.content.DSpaceObject; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Constants; +import org.dspace.core.Context; + +/** + * Use the configuration in Dspace.cfg to select paths in sitemap.xmap + * + * Original Concept, JSPUI version: Universidade do Minho at www.uminho.pt + * Sponsorship of XMLUI version: Instituto Oceanográfico de España at www.ieo.es + * + * @author Adán Román Ruiz at arvo.es + */ + +public class ConfigurationMatcher extends AbstractLogEnabled implements Matcher +{ + /** + * Format "keyInDspace.cfg,value,value" + * "Only property" check if it is defined(not empty), + * "property,value" check if property has this value, + * "property, value,value..." check that property has one of the following values. + * operator ! is alowed: "!property, value, value2" property has not value 1 nor value 2 + * @param pattern + * name of sitemap parameter to find + * @param objectModel + * environment passed through via cocoon + * @return null or map containing value of sitemap parameter 'pattern' + */ + public Map match(String pattern, Map objectModel, Parameters parameters) throws PatternException + { + boolean not = false; + boolean itMatch = false; + if (pattern.startsWith("!")) { + not = true; + pattern = pattern.substring(1); + } + String[] expressions = pattern.split(","); + String propertyValue = ConfigurationManager.getProperty(expressions[0]); + if (expressions.length == 1) { + if (StringUtils.isNotEmpty(propertyValue)) { + itMatch = true; + } else { + itMatch = false; + } + } else { + for (int i = 1; i < expressions.length; i++) { + if (StringUtils.equalsIgnoreCase(expressions[i], propertyValue)) { + itMatch = true; + break; + } + } + itMatch = false; + } + if (itMatch && !not) { + return new HashMap(); + } else if (itMatch && not) { + return null; + } else if (!itMatch && !not) { + return null; + } else if (!itMatch && not) { + return new HashMap(); + } + return null; + } +} diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/handle/HandleResolverReader.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/handle/HandleResolverReader.java new file mode 100644 index 0000000..3b0cb65 --- /dev/null +++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/handle/HandleResolverReader.java @@ -0,0 +1,162 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.xmlui.aspect.handle; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import com.google.gson.Gson; + +import java.util.Map; + +import javax.servlet.http.HttpServletResponse; + +import org.apache.avalon.excalibur.pool.Recyclable; +import org.apache.avalon.framework.parameters.Parameters; +import org.apache.cocoon.ProcessingException; +import org.apache.cocoon.environment.ObjectModelHelper; +import org.apache.cocoon.environment.Request; +import org.apache.cocoon.environment.Response; +import org.apache.cocoon.environment.SourceResolver; +import org.apache.cocoon.reading.AbstractReader; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.xml.sax.SAXException; +import org.dspace.app.xmlui.utils.ContextUtil; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Context; +import org.dspace.handle.HandleManager; + + +/** + * + * @author Pascal-Nicolas Becker (p dot becker at tu hyphen berlin dot de) + */ +public class HandleResolverReader extends AbstractReader implements Recyclable { + + private static final Logger log = Logger.getLogger(HandleResolverReader.class); + + public static final String CONTENTTYPE = "application/json; charset=utf-8"; + + private Request req; + private Response resp; + private String action; + private String handle; + private String prefix; + + + public void setup(SourceResolver resolver, Map objectModel, String src, + Parameters par) throws ProcessingException, SAXException, + IOException + { + this.req = ObjectModelHelper.getRequest(objectModel); + this.resp = ObjectModelHelper.getResponse(objectModel); + this.action = par.getParameter("action", "listprefixes"); + this.handle = par.getParameter("handle", null); + this.prefix = par.getParameter("prefix", null); + + super.setup(resolver, objectModel, src, par); + } + + @Override + public void generate() throws IOException, SAXException, ProcessingException { + Context context = null; + try { + context = ContextUtil.obtainContext(objectModel); + } catch (SQLException ex) { + log.error(ex); + throw new ProcessingException("Error in database conncetion.", ex); + } + + Gson gson = new Gson(); + String jsonString = null; + + try { + if (action.equals("resolve")) + { + if (StringUtils.isBlank(handle)) + { + resp.sendError(HttpServletResponse.SC_BAD_REQUEST); + return; + } + String url = HandleManager.resolveToURL(context, handle); + // Only an array or an abject is valid JSON. A simple string + // isn't. An object always uses key value pairs, so we use an + // array. + if (url != null) + { + jsonString = gson.toJson(new String[] {url}); + } + else + { + jsonString = gson.toJson(null); + } + } + else if (action.equals("listprefixes")) + { + List<String> prefixes = new ArrayList<String>(); + prefixes.add(HandleManager.getPrefix()); + String additionalPrefixes = ConfigurationManager + .getProperty("handle.additional.prefixes"); + if (StringUtils.isNotBlank(additionalPrefixes)) + { + for (String apref : additionalPrefixes.split(",")) + { + prefixes.add(apref.trim()); + } + } + jsonString = gson.toJson(prefixes); + } + else if (action.equals("listhandles")) + { + if (ConfigurationManager.getBooleanProperty( + "handle.hide.listhandles", true)) + { + resp.sendError(HttpServletResponse.SC_NOT_FOUND); + return; + } + + if (StringUtils.isBlank(prefix)) + { + resp.sendError(HttpServletResponse.SC_BAD_REQUEST); + return; + } + + List<String> handlelist = HandleManager.getHandlesForPrefix( + context, prefix); + String[] handles = handlelist.toArray(new String[handlelist.size()]); + jsonString = gson.toJson(handles); + } + } catch (SQLException e) { + log.error("SQLException: ", e); + return; + } + + try { + ObjectModelHelper.getResponse(objectModel).setHeader("Content-Type", CONTENTTYPE); + ByteArrayInputStream inputStream = new ByteArrayInputStream(jsonString.getBytes("UTF-8")); + IOUtils.copy(inputStream, out); + out.flush(); + } catch (Exception e) { + log.error("Error: ", e); + } + } + + public void recycle() { + this.req = null; + this.resp = null; + this.action = null; + this.handle = null; + this.prefix = null; + super.recycle(); + } +} \ No newline at end of file diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/viewArtifacts/ContainerHomePageMatcher.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/viewArtifacts/ContainerHomePageMatcher.java new file mode 100644 index 0000000..b03b06f --- /dev/null +++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/viewArtifacts/ContainerHomePageMatcher.java @@ -0,0 +1,66 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.xmlui.aspect.viewArtifacts; + +import org.apache.avalon.framework.parameters.Parameters; +import org.apache.cocoon.matching.Matcher; +import org.apache.cocoon.sitemap.PatternException; +import org.apache.log4j.Logger; +import org.dspace.app.xmlui.utils.HandleUtil; +import org.dspace.discovery.SearchUtils; +import org.dspace.discovery.configuration.DiscoveryConfiguration; + +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; + +/** + * Matcher used to determine which transformers are used to render the home page for a community/collection + * + * @author Kevin Van de Velde (kevin at atmire dot com) + */ +public class ContainerHomePageMatcher implements Matcher { + + private static final Logger log = Logger.getLogger(ContainerHomePageMatcher.class); + + @Override + public Map match(String pattern, Map objectModel, Parameters parameters) throws PatternException { + boolean not = false; + int action = -1; // the action to check + + if (pattern.startsWith("!")) + { + not = true; + pattern = pattern.substring(1); + } + + if(pattern.equals("discoveryRecentSubmissions") || pattern.equals("metadata")) + { + try { + boolean isHomePageActive; + DiscoveryConfiguration discoveryConfiguration = SearchUtils.getDiscoveryConfiguration(HandleUtil.obtainHandle(objectModel)); + if(discoveryConfiguration.getRecentSubmissionConfiguration() != null && discoveryConfiguration.getRecentSubmissionConfiguration().getUseAsHomePage()) + { + isHomePageActive = !pattern.equals("metadata"); + } else{ + isHomePageActive = pattern.equals("metadata"); + } + if(isHomePageActive ^ not) + { + return new HashMap(); + }else{ + return null; + } + } catch (SQLException e) { + log.error("SQL exception while determining home page", e); + + } + } + throw new IllegalArgumentException(); + } +} diff --git a/dspace-xmlui/src/main/java/org/dspace/utils/DSpaceWebapp.java b/dspace-xmlui/src/main/java/org/dspace/utils/DSpaceWebapp.java new file mode 100644 index 0000000..25a1df7 --- /dev/null +++ b/dspace-xmlui/src/main/java/org/dspace/utils/DSpaceWebapp.java @@ -0,0 +1,31 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +package org.dspace.utils; + +import org.dspace.app.util.AbstractDSpaceWebapp; + +/** + * An MBean to identify this web application. + * + * @author mwood + */ +public class DSpaceWebapp + extends AbstractDSpaceWebapp +{ + public DSpaceWebapp() + { + super("XMLUI"); + } + + @Override + public boolean isUI() + { + return true; + } +} diff --git a/dspace-xmlui/src/main/webapp/static/icons/lock.gif b/dspace-xmlui/src/main/webapp/static/icons/lock.gif new file mode 100644 index 0000000000000000000000000000000000000000..3bfcaca23c4073db4c292e3fab4df5adacffc7da GIT binary patch literal 667 zcmZ?wbhEHb6k!lycvi~r|2@P1`wagtGdy0;@c)15`#lW*|L=YF?AekfOKvS^`2OwN z-Me>xy><Ne(dGX$|1&d<)6&weFJ}1v(&fyVGrw*-9G$86|8@NTAF2Nz*}i}O{>+)9 z>(;G%xs~DGYKARaw!Avw`u}zG|1WDl+;lj+I=Hp9_5a`4w>udQ9z1yeXwLtyN*6b% z-P&V%eyQo_GwL&Erv3l_|MOMXUw0XPKHb<|uD^Xl?X!zBpKj&)e%18e>80N<GEA+M zytylIZ@<F#s}^_mhiva={_%w2&$Ct6cH|$PB=GC$+W$|z-rtQ}-^u&y@sbZO?|gZ7 z<>7JnZ?7-@|5|_RQ0KjM-0x55e!gJz|Np9|SGWCsw&3qmwa+ir4o}y)voqz#qxG*2 zN<F_46crWq?G4l7d6`vZ`TzbduCA`WxhwJS^A(Q|tNp*L{p<bBw^vK<KYae<I>Y4^ znwL&&a`OzUZCU*DC_{I5_qA)+&dg-^|KIrke}<VeXa4{Hp8+pW{K>+|z);Gd15yQw z69)Dl4W&)ZO<e2+!UbF{JuU6(avUWb1-+&E&D;gj`EyH3@~2KKmE`7FD9J87S7mW2 zyHsNL%zOd%#oW>*y(I#RdJ8x>_6TGwmMV!8=M%9FlrM?Np5|+kt0yid<|+}8pW`0U zqbQ^tZyc?_$0w1hWo0kg6A~(vqU~)UVy+uyCRi9@;B?8st5bv_=}AFw!{G)#K{*4d z%Lf=3EsGgg1P&B9G+797vaYN!e0;1=-kDG7&;cd4UK#F+9_9WCJ=0VZ7xfgk28zwm z_dnHgqIsgEU_#NnlEaDz1!Q_>%rQ(_%00m(&&MWES*253)imJ84aH+8r$jb0F)~;K E0PM;~B>(^b literal 0 HcmV?d00001 diff --git a/dspace-xmlui/src/main/webapp/static/icons/lock24.png b/dspace-xmlui/src/main/webapp/static/icons/lock24.png new file mode 100644 index 0000000000000000000000000000000000000000..89ebada2f32e22a93763fb904adccb7d9d2da16f GIT binary patch literal 904 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSc;uILpV4%IBGajIv5xj zI14-?iy0WWK7cTz(;AZ*ARQ&H5hcO-X(i=}MX3yqDfvmM3T~N2spa`a*~R{w<^32K znAtpC978-hw@y2s9TO^Y-2VAJbNe`}PS1Kx6J0LXTZ@_`E=`@yvc%-wk=7kKf4F0& zG)W7#K3c?ab4Q_KS3nF$(#A5cll-o`0yn&J%3jgEP3*GI<dbKr-|wsL?>0Gkro_l6 zXwT{Lcb4;u&;7kuJb#7O|K~>5H)Hnxxf>k5`s!gNrN6&C>_v6XoZl~a{NwGUCzVr} zHq1!9x!hPh?cVP<kDfo=$Z%g@rzSu{>|APQTQMI)w(irSnF5EdO7FjCVQTv~Y~S4a z^I~Vup7ZOPSgg$-mSHyeeuMFW*XMSw&)zC^@At{a$NTp0e$Dml`LlhVm%o&7Bo<br zJZb&-@#C+ywN+0~O~3d1`Xh_DbDwKUl8QEMe9SdT#d2b*<N@`y2N`<|<*VL%PD(lA zc5&j{B$vGmk<&U?J(}}-`Q>MO<9QWx=6ENDH`tsP6m&UKcFT!Ft)-Ol>m*Nq2V?mU zO_N?VZuPr;UVC|#|LoHYHYeiV-1<MS;YoY*@p-Z}#Q__8ME=h^weEjN;1vcAp>r}; zCRN#`JS==u?4+8#&37MtxoT0$w+|xQeuOsup7`M8R-X&sVp<#ynlK(T>{+!ZxUTZ! z-+c_duU_=On&$UNIH6W+h1OJw4Hq&RULD&KFo8q!U4BA4KcCN^d)Lmb)8+blOF)rf z=~;!=picdDyoJxtX<ZK1ymlZguPe>8JC}!{mO;p7m#WOc$?ncIH7n1^*Q?H{JNfy{ z<i;yocQ3rD{PqQ(hi=B{10jbKGJ7YV57l@k>HeK7yYzPOJX^+DGs+5AA99$u+w}a~ zrw+T)0`K2iB+KNKwM0}wal(?+e|u&ZWk>G(zCJOYb<X=UZvr2giAH4J)yi6NKilZD z*8$%t8mk{jUHB%j!bM2*w>9(Y#re+XI=9_jC39D~qtin+W1nJzfJo2Yeed7AU3xAe z_q&3SCWC*EtmK{IhgX06xfgM)QbRrT#kT;ifbu(gestSc|GRZ*QESz@Svl+)jK6I~ z8by|T5=gk|Rk2x3p@HRsRl=KJ+kfwT^(^+qYu~y#TNm%|y1V8-!$Yaur~BVW&S79+ OVDNPHb6Mw<&;$UoBeAyt literal 0 HcmV?d00001 diff --git a/dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-by-nc-nd.png b/dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-by-nc-nd.png new file mode 100644 index 0000000000000000000000000000000000000000..49f272f828c17c9f52b64c27fa6a3c399bee9344 GIT binary patch literal 5281 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 literal 0 HcmV?d00001 diff --git a/dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-by-nc-sa.png b/dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-by-nc-sa.png new file mode 100644 index 0000000000000000000000000000000000000000..0f2a0f10722d3fabffe8af5d5eed09866e25909a GIT binary patch literal 5460 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 literal 0 HcmV?d00001 diff --git a/dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-by-nc.png b/dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-by-nc.png new file mode 100644 index 0000000000000000000000000000000000000000..5f982147075ad08691e3b3c53e92633ca0ddcb2f GIT binary patch literal 5145 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 Lu6{1-oD!M<SKqzR literal 0 HcmV?d00001 diff --git a/dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-by-nd.png b/dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-by-nd.png new file mode 100644 index 0000000000000000000000000000000000000000..8f317035e677affa946516c82baa17f896e8a866 GIT binary patch literal 4880 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 literal 0 HcmV?d00001 diff --git a/dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-by-sa.png b/dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-by-sa.png new file mode 100644 index 0000000000000000000000000000000000000000..f0a944e0b89642ae282047846e55393007b04686 GIT binary patch literal 5083 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 literal 0 HcmV?d00001 diff --git a/dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-by.png b/dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-by.png new file mode 100644 index 0000000000000000000000000000000000000000..822491edb993b072fc183a2ce23adfa8c94cee7c GIT binary patch literal 4739 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 literal 0 HcmV?d00001 diff --git a/dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-generic.png b/dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-generic.png new file mode 100644 index 0000000000000000000000000000000000000000..4590b0a7a047efa3c7ec5d724c79434390444bf4 GIT binary patch literal 1798 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 literal 0 HcmV?d00001 diff --git a/dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-mark.png b/dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-mark.png new file mode 100644 index 0000000000000000000000000000000000000000..f1eafe1d83d45cda9b5cf69c7fc680156fc8422f GIT binary patch literal 1047 zcmeAS@N?(olHy`uVBq!ia0y~yV2EH~V36lvW?*0l5&LzCfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84Fdzi=K!A&*ZuqVzkmNeK0cnGpI=^He*XOV`uh6! z@83Uv{(OFZ{`&Rn{r&y>`}=?X{Q39q-_+F9r%#`rJ9qBYt5+XCe*FIZ`^y(E_U+sE z`}gnO-rmQLAK$!rbNTY+XV0Fks;c_(<;&;KpJQTTK7IP+=jW%ato-%s*SmM`K6~~o zE-sFThsVs!OifK~?b@|hu3R~K^ys5Uk94%P#l^)#Lqq@l`zI+WX=rE|9UXn*#EI?O zx6hk5udJ+W#*7(n-n{AS>$`gO>b-mS-oAZ%`SRrn6DD+bcfWi0?)2%?!NI{?+?)>| zKD>7AT31)ssZ*z(KYw0dUvF=3|Mu0x|Ns9pFfhEk?;*;-z_iQL#WAGf)|P3{i*6eT zwD8O7OnQ3n?U#Gi<yFRd2Y%c8zGIlR$vCO*hLFjX4Gr?0dt(~}E;~iFd`VZ-b?oBK z{NG^PFyA^tLg$l-TA#bUTwK5txtuFsmh7uGs4Ps^OHiB{ewCs0sQ->Fb?={Et!(gQ zP4#oh<osK6`+ePcTZ5K_$$YcSec6LlC4YDws1g0oye?={(yBe1HQ(mz?>}ej^seDc z&aDaj3XWy<JS%%kqK!G)`m}lW3fy*jG3A~8jp~pCo~|zr&e-$fpjOpV7M`X`k9F(i zr@6;Q?%fxEU}5hv_G)ooemA+-8;;q%7rk52-tK+$&d!a22SNg`Hfy)6Se~%U^OT}N z?3KHT4PMh$EZOq)+hX0IfXy3^Sw*p3pLnC=gcSEh52=F;5-+z+;=B4yHRR>9hwaC0 zEv~-#suMh|>9A|Ul7D{ujk$8Qf!?8dWo$>bp1ibjp4i)--=dE;96K7ME~L&WTT!y7 zWMjjPkkSXc&K`Cu<~qap&?Jes%~|M&$W`y@_E#33{5W%^q4#w$XOWGjhO?N|!Yww* zyD<h%u-4$8_f}#D--&Y_vuur-eO?vuZqlxKyKwXQ-4{P@URUv?-D-N1kVNk}yYeQR z$O8rp>$*?Oy*{;H&)?;A_T*^U9g6Kg&+YUJx%iP|$!FG_7v{n;r9nwv$C8p|<oCT) z@|A81c;a<v%NI3<lP>xZ%vR3Z<QSyu)cJ~9Z+uWuKM^Utc<OESiDG>zE41gUbBn7s z2+f-$#}&cf_;ZWR)^!}S)<1dnD$joR)h`OC`jP`T_HsECy_l<=Aa^mxVE@9m;noip zFV22H|6DTb#>$P0uk3td{yTNcr8B8#h0~wy|B&+e({@YUWhx2V=V-lrRFV7q>hkmZ z&)wa2t}dKmt%91jt=)`2cYgo+eJ8i_g?ENcRBWWZU467a_n)%pfZy5&7~)Sq*dDcb SasdMa1B0ilpUXO@geCy@Hwtb5 literal 0 HcmV?d00001 diff --git a/dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-zero.png b/dspace-xmlui/src/main/webapp/themes/Mirage/images/creativecommons/cc-zero.png new file mode 100644 index 0000000000000000000000000000000000000000..59f27f3000045e384fbf45b8b436c5b9935f683b GIT binary patch literal 1124 zcmeAS@N?(olHy`uVBq!ia0y~yV2EH~V36lvW?*0l5&LzCfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzihX9`tSABi`_wV1IKYw0cUY?(y|JTp&@$vEf z{r&gv-=9B!etv$wzrX+b_3MBB{CV%*z0}mySFc|E{rmU%^XE^WKK=gv`^S$T4Gj%{ z|Nh<A*LU{p*_$_Se*XNqrKRQHzkg4jJo)zZ^UD`6?Ck6&Oqg)@?%h`}pC3JXw7a|e z(xpq!o;~~W<%^@E<D*B9u3o+R=FOXZ`}XPR=$t-%`qiuF^XAPvckbMeA3r{Q`czd_ z_4Vu5pFh6s+O>;|oAdJJ%hRV%-@bkOwQJWNK782Q+xzX?x8UGlNl8gxU*Fu^+^(*! z`uh4)r%t_i{&fHT{r2|uZ(lw9|NlP&1H=FS|2w3f>|kJE2q+2i3;s`Cz#v?_tdfC& zX`QEwV@SoVEz_Qt-8SH9wG5dkRrV&$Vt4iXz26hK#ZLU*@5`8_@^a&!!&?jcgn3^n z7nC}B&Akxy$mQbvtt^^{wjQb6z|OZfYlD8SazAgC)voU^>|Ng-e0b()&iB(PF>6`Y zh{}hzI-0mXIsATpU;awbhSt?S>Rcyoe*1Cuwuw@kK+(11r_O)k^q#i-7t`_y;+hi` z3(hG&+0Q7jCrz@>=br2`LB@m09TJ`Og1wFk4m%Hjviu^o+OgoQ5r_U+*`s1}KDR%% zz1q-e^5ubt+xLXilT#kB9h|ml+O!i%6MNR>^v9b$2uQftY}q9zvoU7LMn$bl6^nu% zT$qtkU$l5CQ`Z{y=^Ncjxt`^8AMB|N^V}iSu_Dmxl*?}R$8*ED<k}Tn7@He@s&*ZV z3r{_jp=Yt|m7(&d3z-LZJ&B$zZEJD$$*gF-t1V1n^SIBo9q5vu))+Hqk;cuXe;&Vh zbnNE3&d-cl5y`I(vfe!6uk@ceZjqy(@wO0WZP)pQ=eUC(q-ZxpO=OY_=sLXSPv8XY z1Xl;$Ycu#Cggj<Dv(6xAPRG5>+{Go6zi@nKvll!n`N{8bQuu`FY9iqoWk;{2J?Hx7 ze0GLbVpccPw|Vk82htdFE`90kpXt5q<HxPdh1V-Z-6kqnUQc*%?YZ|(bKV<?w(>Un zKR<eLFp<5C=N;Gcs;qfS9Ts0)rd^ZIaOc&nHKJ4V!gjZx&wu|#_ig1wBgKhIr&%X_ zT<LthVXYiP_l850ub$n$I>YjI-F&wWZLWJUP42-bf9oq2>oF~UrL@y&qwkduRXGcz z`?HTdxg7p||Jo$>i9u7C*B(51ZMuA~T6y@E=W{b}tg)N5_s6b9XGKag$}^vu_-+3- zKW^{O;+H>a{_S@9eqZ#m^=$d?a{r^O<{4I$CHn2zw`6|Izr8gv%T4Qcuhsm=Wx!x+ Ybne|k{i!Dy7#J8lUHx3vIVCg!0A2-fHUIzs literal 0 HcmV?d00001 diff --git a/dspace/config/crosswalks/DIM2DataCite.xsl b/dspace/config/crosswalks/DIM2DataCite.xsl new file mode 100644 index 0000000..0c25adf --- /dev/null +++ b/dspace/config/crosswalks/DIM2DataCite.xsl @@ -0,0 +1,439 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + Document : DIM2DataCite.xsl + Created on : January 23, 2013, 1:26 PM + Author : pbecker, ffuerste + Description: Converts metadata from DSpace Intermediat Format (DIM) into + metadata following the DataCite Schema for the Publication and + Citation of Research Data, Version 2.2 +--> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:dspace="http://www.dspace.org/xmlns/dspace/dim" + xmlns="http://datacite.org/schema/kernel-2.2" + version="1.0"> + + <!-- CONFIGURATION --> + <!-- The content of the following variable will be used as element publisher. --> + <xsl:variable name="publisher">My University</xsl:variable> + <!-- The content of the following variable will be used as element contributor with contributorType datamanager. --> + <xsl:variable name="datamanager"><xsl:value-of select="$publisher" /></xsl:variable> + <!-- The content of the following variable will be used as element contributor with contributorType hostingInstitution. --> + <xsl:variable name="hostinginstitution"><xsl:value-of select="$publisher" /></xsl:variable> + <!-- Please take a look into the DataCite schema documentation if you want to know how to use these elements. + http://schema.datacite.org --> + + + <!-- DO NOT CHANGE ANYTHING BELOW THIS LINE EXCEPT YOU REALLY KNOW WHAT YOU ARE DOING! --> + + <xsl:output method="xml" indent="yes" encoding="utf-8" /> + + <!-- Don't copy everything by default! --> + <xsl:template match="@* | text()" /> + + <xsl:template match="/dspace:dim[@dspaceType='ITEM']"> + <!-- + org.dspace.identifier.doi.DataCiteConnector uses this XSLT to + transform metadata for the DataCite metadata store. This crosswalk + should only be used, when it is ensured that all mandatory + properties are in the metadata of the item to export. + The classe named above respects this. + --> + <resource xmlns="http://datacite.org/schema/kernel-2.2" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://datacite.org/schema/kernel-2.2 http://schema.datacite.org/meta/kernel-2.2/metadata.xsd"> + + <!-- + MANDATORY PROPERTIES + --> + + <!-- + DataCite (1) + Template Call for DOI identifier. + --> + <xsl:apply-templates select="//dspace:field[@mdschema='dc' and @element='identifier' and starts-with(., 'http://dx.doi.org/')]" /> + + <!-- + DataCite (2) + Add creator information. + --> + <creators> + <xsl:choose> + <xsl:when test="//dspace:field[@mdschema='dc' and @element='contributor' and @qualifier='author']"> + <xsl:apply-templates select="//dspace:field[@mdschema='dc' and @element='contributor' and @qualifier='author']" /> + </xsl:when> + <xsl:otherwise> + <creator> + <creatorName>(:unkn) unknown</creatorName> + </creator> + </xsl:otherwise> + </xsl:choose> + </creators> + + <!-- + DataCite (3) + Add Title information. + --> + <titles> + <xsl:choose> + <xsl:when test="//dspace:field[@mdschema='dc' and @element='title']"> + <xsl:apply-templates select="//dspace:field[@mdschema='dc' and @element='title']" /> + </xsl:when> + <xsl:otherwise> + <title>(:unas) unassigned</title> + </xsl:otherwise> + </xsl:choose> + </titles> + + <!-- + DataCite (4) + Add Publisher information from configuration above + --> + <publisher> + <xsl:value-of select="$publisher" /> + </publisher> + + <!-- + DataCite (5) + Add PublicationYear information + --> + <publicationYear> + <xsl:choose> + <xsl:when test="//dspace:field[@mdschema='dc' and @element='date' and @qualifier='issued']"> + <xsl:value-of select="substring(//dspace:field[@mdschema='dc' and @element='date' and @qualifier='issued'], 1, 4)" /> + </xsl:when> + <xsl:when test="//dspace:field[@mdschema='dc' and @element='date' and @qualifier='available']"> + <xsl:value-of select="substring(//dspace:field[@mdschema='dc' and @element='date' and @qualifier='issued'], 1, 4)" /> + </xsl:when> + <xsl:when test="//dspace:field[@mdschema='dc' and @element='date']"> + <xsl:value-of select="substring(//dspace:field[@mdschema='dc' and @element='date'], 1, 4)" /> + </xsl:when> + <xsl:otherwise>0000</xsl:otherwise> + </xsl:choose> + </publicationYear> + + <!-- + OPTIONAL PROPERTIES + --> + + <!-- + DataCite (6) + Template Call for subjects. + --> + <xsl:if test="//dspace:field[@mdschema='dc' and @element='subject']"> + <subjects> + <xsl:apply-templates select="//dspace:field[@mdschema='dc' and @element='subject']" /> + </subjects> + </xsl:if> + + <!-- + DataCite (7) + Add contributorType from configuration above. + Template Call for Contributors + --> + <contributors> + <xsl:element name="contributor"> + <xsl:attribute name="contributorType">DataManager</xsl:attribute> + <xsl:element name="contributorName"> + <xsl:value-of select="$datamanager"/> + </xsl:element> + </xsl:element> + <xsl:element name="contributor"> + <xsl:attribute name="contributorType">HostingInstitution</xsl:attribute> + <contributorName> + <xsl:value-of select="$hostinginstitution" /> + </contributorName> + </xsl:element> + <xsl:apply-templates select="//dspace:field[@mdschema='dc' and @element='contributor'][not(@qualifier='author')]" /> + </contributors> + + <!-- + DataCite (8) + Template Call for Dates + --> + <xsl:if test="//dspace:field[@mdschema='dc' and @element='date']" > + <dates> + <xsl:apply-templates select="//dspace:field[@mdschema='dc' and @element='date']" /> + </dates> + </xsl:if> + + <!-- Add language(s). --> + <xsl:apply-templates select="//dspace:field[@mdschema='dc' and @element='language' and (@qualifier='iso' or @qualifier='rfc3066')]" /> + + <!-- Add resource type. --> + <xsl:apply-templates select="//dspace:field[@mdschema='dc' and @element='type']" /> + + <!-- + Add alternativeIdentifiers. + This element is important as it is used to recognize for which + DSpace object a DOI is reserved for. See below for further + information. + --> + <xsl:if test="//dspace:field[@mdschema='dc' and @element='identifier' and not(starts-with(., 'http://dx.doi.org/'))]"> + <xsl:element name="alternateIdentifiers"> + <xsl:apply-templates select="//dspace:field[@mdschema='dc' and @element='identifier' and not(starts-with(., 'http://dx.doi.org/'))]" /> + </xsl:element> + </xsl:if> + + <!-- Add sizes. --> + <!-- + <xsl:if test="//dspace:field[@mdschema='dc' and @element='format' and @qualifier='extent']"> + <sizes> + <xsl:apply-templates select="//dspace:field[@mdschema='dc' and @element='format' and @qualifier='extent']" /> + </sizes> + </xsl:if> + --> + + <!-- Add formats. --> + <!-- + <xsl:if test="//dspace:field[@mdschema='dc' and @element='format']"> + <formats> + <xsl:apply-templates select="//dspace:field[@mdschema='dc' and @element='format']" /> + </formats> + </xsl:if> + --> + + <!-- Add rights. --> + <xsl:apply-templates select="//dspace:field[@mdschema='dc' and @element='rights']" /> + + <!-- Add descriptions. --> + <xsl:if test="//dspace:field[@mdschema='dc' and @element='description'][not(@qualifier='provenance')]"> + <xsl:element name="descriptions"> + <xsl:apply-templates select="//dspace:field[@mdschema='dc' and @element='description'][not(@qualifier='provenance')]" /> + </xsl:element> + </xsl:if> + + </resource> + </xsl:template> + + + <!-- Add doi identifier information. --> + <xsl:template match="dspace:field[@mdschema='dc' and @element='identifier' and starts-with(., 'http://dx.doi.org/')]"> + <identifier identifierType="DOI"> + <xsl:value-of select="substring(., 19)"/> + </identifier> + </xsl:template> + + <!-- DataCite (2) :: Creator --> + <xsl:template match="//dspace:field[@mdschema='dc' and @element='contributor' and @qualifier='author']"> + <creator> + <creatorName> + <xsl:value-of select="." /> + </creatorName> + </creator> + </xsl:template> + + <!-- DataCite (3) :: Title --> + <xsl:template match="dspace:field[@mdschema='dc' and @element='title']"> + <xsl:element name="title"> + <xsl:if test="@qualifier='alternative'"> + <xsl:attribute name="titleType">AlternativeTitle</xsl:attribute> + </xsl:if> + <xsl:value-of select="." /> + </xsl:element> + </xsl:template> + + <!-- + DataCite (6), DataCite (6.1) + Adds subject and subjectScheme information + + "This term is intended to be used with non-literal values as defined in the + DCMI Abstract Model (http://dublincore.org/documents/abstract-model/). + As of December 2007, the DCMI Usage Board is seeking a way to express + this intention with a formal range declaration." + (http://dublincore.org/documents/dcmi-terms/#terms-subject) + --> + <xsl:template match="//dspace:field[@mdschema='dc' and @element='subject']"> + <xsl:element name="subject"> + <xsl:if test="@qualifier"> + <xsl:attribute name="subjectScheme"><xsl:value-of select="@qualifier" /></xsl:attribute> + </xsl:if> + <xsl:value-of select="." /> + </xsl:element> + </xsl:template> + + <!-- + DataCite (7), DataCite (7.1) + Adds contributor and contributorType information + --> + <xsl:template match="//dspace:field[@mdschema='dc' and @element='contributor'][not(@qualifier='author')]"> + <xsl:if test="@qualifier='editor'"> + <xsl:element name="contributor"> + <xsl:attribute name="contributorType">Editor</xsl:attribute> + <contributorName> + <xsl:value-of select="." /> + </contributorName> + </xsl:element> + </xsl:if> + </xsl:template> + + <!-- + DataCite (8), DataCite (8.1) + Adds Date and dateType information + --> + <xsl:template match="//dspace:field[@mdschema='dc' and @element='date']"> + <xsl:element name="date"> + <xsl:if test="@qualifier='accessioned'"> + <xsl:attribute name="dateType">Issued</xsl:attribute> + </xsl:if> + <xsl:if test="@qualifier='submitted'"> + <xsl:attribute name="dateType">Issued</xsl:attribute> + </xsl:if> + <!-- part of DublinCore DSpace to mapping but not part of DSpace default fields + <xsl:if test="@qualifier='dateAccepted'"> + <xsl:attribute name="dateType">Issued</xsl:attribute> + </xsl:if> + --> + <xsl:if test="@qualifier='issued'"> + <xsl:attribute name="dateType">Issued</xsl:attribute> + </xsl:if> + <xsl:if test="@qualifier='available'"> + <xsl:attribute name="dateType">Available</xsl:attribute> + </xsl:if> + <xsl:if test="@qualifier='copyright'"> + <xsl:attribute name="dateType">Copyrighted</xsl:attribute> + </xsl:if> + <xsl:if test="@qualifier='created'"> + <xsl:attribute name="dateType">Created</xsl:attribute> + </xsl:if> + <xsl:if test="@qualifier='updated'"> + <xsl:attribute name="dateType">Updated</xsl:attribute> + </xsl:if> + <xsl:value-of select="substring(., 1, 10)" /> + </xsl:element> + </xsl:template> + + <!-- + DataCite (9) + Adds Language information + Transforming the language flags according to ISO 639-2/B & ISO 639-3 + --> + <xsl:template match="//dspace:field[@mdschema='dc' and @element='language' and (@qualifier='iso' or @qualifier='rfc3066')]"> + <xsl:for-each select="."> + <xsl:element name="language"> + <xsl:choose> + <xsl:when test="contains(string(text()), '_')"> + <xsl:value-of select="translate(string(text()), '_', '-')"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="string(text())"/> + </xsl:otherwise> + </xsl:choose> + </xsl:element> + </xsl:for-each> + </xsl:template> + + <!-- + DataCite (10), DataCite (10.1) + Adds resourceType and resourceTypeGeneral information + --> + <xsl:template match="//dspace:field[@mdschema='dc' and @element='type']"> + <xsl:for-each select="."> + <!-- Transforming the language flags according to ISO 639-2/B & ISO 639-3 --> + <xsl:element name="resourceType"> + <xsl:attribute name="resourceTypeGeneral"> + <xsl:choose> + <xsl:when test="string(text())='Animation'">Image</xsl:when> + <xsl:when test="string(text())='Article'">Text</xsl:when> + <xsl:when test="string(text())='Book'">Text</xsl:when> + <xsl:when test="string(text())='Book chapter'">Text</xsl:when> + <xsl:when test="string(text())='Dataset'">Dataset</xsl:when> + <xsl:when test="string(text())='Learning Object'">InteractiveResource</xsl:when> + <xsl:when test="string(text())='Image'">Image</xsl:when> + <xsl:when test="string(text())='Image, 3-D'">Image</xsl:when> + <xsl:when test="string(text())='Map'">Image</xsl:when> + <xsl:when test="string(text())='Musical Score'">Sound</xsl:when> + <xsl:when test="string(text())='Plan or blueprint'">Image</xsl:when> + <xsl:when test="string(text())='Preprint'">Text</xsl:when> + <xsl:when test="string(text())='Presentation'">Image</xsl:when> + <xsl:when test="string(text())='Recording, acoustical'">Sound</xsl:when> + <xsl:when test="string(text())='Recording, musical'">Sound</xsl:when> + <xsl:when test="string(text())='Recording, oral'">Sound</xsl:when> + <xsl:when test="string(text())='Software'">Software</xsl:when> + <xsl:when test="string(text())='Technical Report'">Text</xsl:when> + <xsl:when test="string(text())='Thesis'">Text</xsl:when> + <xsl:when test="string(text())='Video'">Film</xsl:when> + <xsl:when test="string(text())='Working Paper'">Text</xsl:when> + <!-- FIXME --> + <xsl:when test="string(text())='Other'">Collection</xsl:when> + <!-- FIXME --> + <xsl:otherwise>Collection</xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <xsl:value-of select="." /> + </xsl:element> + </xsl:for-each> + </xsl:template> + + <!-- + DataCite (11), DataCite (11.1) + Adds AlternativeIdentifier and alternativeIdentifierType information + Adds all identifiers except the doi. + + This element is important as it is used to recognize for which DSpace + objet a DOI is reserved for. The DataCiteConnector will test all + AlternativeIdentifiers by using HandleManager. + resolveUrlToHandle(context, altId) until one is recognized or all have + been tested. + --> + <xsl:template match="//dspace:field[@mdschema='dc' and @element='identifier' and not(starts-with(., 'http://dx.doi.org/'))]"> + <xsl:element name="alternateIdentifier"> + <xsl:if test="@qualifier"> + <xsl:attribute name="alternateIdentifierType"><xsl:value-of select="@qualifier" /></xsl:attribute> + </xsl:if> + <xsl:value-of select="." /> + </xsl:element> + </xsl:template> + + <!-- + DataCite (12), DataCite (12.1) + Adds RelatedIdentifier and relatedIdentifierType information + --> + + <!-- + DataCite (13) + Adds Size information + --> + <xsl:template match="//dspace:field[@mdschema='dc' and @element='format' and @qualifier='extent']"> + <xsl:element name="format"> + <xsl:value-of select="." /> + </xsl:element> + </xsl:template> + + <!-- + DataCite (14) + Adds Format information + --> + <xsl:template match="//dspace:field[@mdschema='dc' and @element='format']"> + <xsl:element name="format"> + <xsl:value-of select="." /> + </xsl:element> + </xsl:template> + + <!-- + DataCite (16) + Adds Rights information + --> + <xsl:template match="//dspace:field[@mdschema='dc' and @element='rights']"> + <xsl:element name="rights"> + <xsl:value-of select="." /> + </xsl:element> + </xsl:template> + + <!-- + DataCite (17) + Description + --> + <xsl:template match="//dspace:field[@mdschema='dc' and @element='description'][not(@qualifier='provenance')]"> + <xsl:element name="description"> + <xsl:attribute name="descriptionType"> + <xsl:choose> + <xsl:when test="@qualifier='abstract'">Abstract</xsl:when> + <xsl:otherwise>Other</xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <xsl:value-of select="." /> + </xsl:element> + </xsl:template> + +</xsl:stylesheet> diff --git a/dspace/config/crosswalks/mapConverter-arxivSubject.properties b/dspace/config/crosswalks/mapConverter-arxivSubject.properties new file mode 100644 index 0000000..d6b8a25 --- /dev/null +++ b/dspace/config/crosswalks/mapConverter-arxivSubject.properties @@ -0,0 +1,127 @@ +stat.AP = Statistics - Applications +stat.CO = Statistics - Computation +stat.ML = Statistics - Machine Learning +stat.ME = Statistics - Methodology +stat.TH = Statistics - Theory +q-bio.BM = Quantitative Biology - Biomolecules +q-bio.CB = Quantitative Biology - Cell Behavior +q-bio.GN = Quantitative Biology - Genomics +q-bio.MN = Quantitative Biology - Molecular Networks +q-bio.NC = Quantitative Biology - Neurons and Cognition +q-bio.OT = Quantitative Biology - Other +q-bio.PE = Quantitative Biology - Populations and Evolution +q-bio.QM = Quantitative Biology - Quantitative Methods +q-bio.SC = Quantitative Biology - Subcellular Processes +q-bio.TO = Quantitative Biology - Tissues and Organs +cs.AR = Computer Science - Architecture +cs.AI = Computer Science - Artificial Intelligence +cs.CL = Computer Science - Computation and Language +cs.CC = Computer Science - Computational Complexity +cs.CE = Computer Science - Computational Engineering; Finance; and Science +cs.CG = Computer Science - Computational Geometry +cs.GT = Computer Science - Computer Science and Game Theory +cs.CV = Computer Science - Computer Vision and Pattern Recognition +cs.CY = Computer Science - Computers and Society +cs.CR = Computer Science - Cryptography and Security +cs.DS = Computer Science - Data Structures and Algorithms +cs.DB = Computer Science - Databases +cs.DL = Computer Science - Digital Libraries +cs.DM = Computer Science - Discrete Mathematics +cs.DC = Computer Science - Distributed; Parallel; and Cluster Computing +cs.GL = Computer Science - General Literature +cs.GR = Computer Science - Graphics +cs.HC = Computer Science - Human-Computer Interaction +cs.IR = Computer Science - Information Retrieval +cs.IT = Computer Science - Information Theory +cs.LG = Computer Science - Learning +cs.LO = Computer Science - Logic in Computer Science +cs.MS = Computer Science - Mathematical Software +cs.MA = Computer Science - Multiagent Systems +cs.MM = Computer Science - Multimedia +cs.NI = Computer Science - Networking and Internet Architecture +cs.NE = Computer Science - Neural and Evolutionary Computing +cs.NA = Computer Science - Numerical Analysis +cs.OS = Computer Science - Operating Systems +cs.OH = Computer Science - Other +cs.PF = Computer Science - Performance +cs.PL = Computer Science - Programming Languages +cs.RO = Computer Science - Robotics +cs.SE = Computer Science - Software Engineering +cs.SD = Computer Science - Sound +cs.SC = Computer Science - Symbolic Computation +nlin.AO = Nonlinear Sciences - Adaptation and Self-Organizing Systems +nlin.CG = Nonlinear Sciences - Cellular Automata and Lattice Gases +nlin.CD = Nonlinear Sciences - Chaotic Dynamics +nlin.SI = Nonlinear Sciences - Exactly Solvable and Integrable Systems +nlin.PS = Nonlinear Sciences - Pattern Formation and Solitons +math.AG = Mathematics - Algebraic Geometry +math.AT = Mathematics - Algebraic Topology +math.AP = Mathematics - Analysis of PDEs +math.CT = Mathematics - Category Theory +math.CA = Mathematics - Classical Analysis and ODEs +math.CO = Mathematics - Combinatorics +math.AC = Mathematics - Commutative Algebra +math.CV = Mathematics - Complex Variables +math.DG = Mathematics - Differential Geometry +math.DS = Mathematics - Dynamical Systems +math.FA = Mathematics - Functional Analysis +math.GM = Mathematics - General Mathematics +math.GN = Mathematics - General Topology +math.GT = Mathematics - Geometric Topology +math.GR = Mathematics - Group Theory +math.HO = Mathematics - History and Overview +math.IT = Mathematics - Information Theory +math.KT = Mathematics - K-Theory and Homology +math.LO = Mathematics - Logic +math.MP = Mathematics - Mathematical Physics +math.MG = Mathematics - Metric Geometry +math.NT = Mathematics - Number Theory +math.NA = Mathematics - Numerical Analysis +math.OA = Mathematics - Operator Algebras +math.OC = Mathematics - Optimization and Control +math.PR = Mathematics - Probability +math.QA = Mathematics - Quantum Algebra +math.RT = Mathematics - Representation Theory +math.RA = Mathematics - Rings and Algebras +math.SP = Mathematics - Spectral Theory +math.ST = Mathematics - Statistics +math.SG = Mathematics - Symplectic Geometry +astro-ph = Astrophysics +cond-mat.dis-nn = Physics - Disordered Systems and Neural Networks +cond-mat.mes-hall = Physics - Mesoscopic Systems and Quantum Hall Effect +cond-mat.mtrl-sci = Physics - Materials Science +cond-mat.other = Physics - Other +cond-mat.soft = Physics - Soft Condensed Matter +cond-mat.stat-mech = Physics - Statistical Mechanics +cond-mat.str-el = Physics - Strongly Correlated Electrons +cond-mat.supr-con = Physics - Superconductivity +gr-qc = General Relativity and Quantum Cosmology +hep-ex = High Energy Physics - Experiment +hep-lat = High Energy Physics - Lattice +hep-ph = High Energy Physics - Phenomenology +hep-th = High Energy Physics - Theory +math-ph = Mathematical Physics +nucl-ex = Nuclear Experiment +nucl-th = Nuclear Theory +physics.acc-ph = Physics - Accelerator Physics +physics.ao-ph = Physics - Atmospheric and Oceanic Physics +physics.atom-ph = Physics - Atomic Physics +physics.atm-clus = Physics - Atomic and Molecular Clusters +physics.bio-ph = Physics - Biological Physics +physics.chem-ph = Physics - Chemical Physics +physics.class-ph = Physics - Classical Physics +physics.comp-ph = Physics - Computational Physics +physics.data-an = Physics - Data Analysis; Statistics and Probability +physics.flu-dyn = Physics - Fluid Dynamics +physics.gen-ph = Physics - General Physics +physics.geo-ph = Physics - Geophysics +physics.hist-ph = Physics - History of Physics +physics.ins-det = Physics - Instrumentation and Detectors +physics.med-ph = Physics - Medical Physics +physics.optics = Physics - Optics +physics.ed-ph = Physics - Physics Education +physics.soc-ph = Physics - Physics and Society +physics.plasm-ph = Physics - Plasma Physics +physics.pop-ph = Physics - Popular Physics +physics.space-ph = Physics - Space Physics +quant-ph = Quantum Physics \ No newline at end of file diff --git a/dspace/config/crosswalks/mapConverter-pubstatusPubmed.properties b/dspace/config/crosswalks/mapConverter-pubstatusPubmed.properties new file mode 100644 index 0000000..43d4d65 --- /dev/null +++ b/dspace/config/crosswalks/mapConverter-pubstatusPubmed.properties @@ -0,0 +1,2 @@ +ppublish = Published +epublish = Published \ No newline at end of file diff --git a/dspace/config/emails/bte_batch_import_error b/dspace/config/emails/bte_batch_import_error new file mode 100644 index 0000000..11657f2 --- /dev/null +++ b/dspace/config/emails/bte_batch_import_error @@ -0,0 +1,19 @@ +# Email sent to DSpace users when they BTE batch import fails. +# +# Parameters: {0} the export error +# {1} the URL to the feedback page +# +# +# See org.dspace.core.Email for information on the format of this file. +# +Subject: DSpace - The batch import was not completed. +The batch import you initiated from the DSpace UI was not completed, due to the following reason: + {0} + +For more information you may contact your system administrator: + {1} + + + +The DSpace Team + diff --git a/dspace/config/emails/bte_batch_import_success b/dspace/config/emails/bte_batch_import_success new file mode 100644 index 0000000..930ccd8 --- /dev/null +++ b/dspace/config/emails/bte_batch_import_success @@ -0,0 +1,15 @@ +# Email sent to DSpace users when they successfully batch import items via BTE. +# +# Parameters: {0} the filepath to the mapfile created by the batch import +# +# +# See org.dspace.core.Email for information on the format of this file. +# +Subject: DSpace - Batch import successfully completed +The batch item import you initiated from the DSpace UI has completed successfully. + +You may find the mapfile for the import in the following path: {0} + + +The DSpace Team + diff --git a/dspace/config/emails/doi_maintenance_error b/dspace/config/emails/doi_maintenance_error new file mode 100644 index 0000000..be60904 --- /dev/null +++ b/dspace/config/emails/doi_maintenance_error @@ -0,0 +1,18 @@ +# E-mail sent to designated address when a metadata update, registration +# or reserveration of a doi fails +# +# Parameters: {0} action (updating metadata of, registering or reserving) +# {1} Date & Time +# {2} resource type text +# {3} resource id +# {4} doi +# {5} reason +# +# See org.dspace.core.Email for information on the format of this file. +# +Subject: DSpace: Error {0} DOI {3} + +Date: {1} + +{0} DOI {4} for {2} with ID {3} failed: +{5} diff --git a/dspace/config/emails/request_item.admin b/dspace/config/emails/request_item.admin new file mode 100644 index 0000000..7611efb --- /dev/null +++ b/dspace/config/emails/request_item.admin @@ -0,0 +1,8 @@ +Subject: Request for Open Access + +{3}, with address {4}, +requested the following document/file to be in Open Access: + +Document Handle:{1} +File ID: {0} +Token:{2} \ No newline at end of file diff --git a/dspace/config/emails/request_item.author b/dspace/config/emails/request_item.author new file mode 100644 index 0000000..3ea529f --- /dev/null +++ b/dspace/config/emails/request_item.author @@ -0,0 +1,17 @@ +Subject: Request copy of document + +Dear {7}, + +A user of {9}, named {0} and using the email {1}, requested a copy of the file(s) associated with the document: "{4}" ({3}) submitted by you. + +This request came along with the following message: + +"{5}" + +To answer, click {6}. Whether you choose to grant or deny the request, we think that it''s in your best interest to respond. + +IF YOU ARE NOT AN AUTHOR OF THIS DOCUMENT, and only submitted the document on the author''s behalf, PLEASE REDIRECT THIS MESSAGE TO THE AUTHOR(S). Only the author(s) should answer the request to send a copy. + +IF YOU ARE AN AUTHOR OF THE REQUESTED DOCUMENT, thank you for your cooperation! + +If you have any questions concerning this request, please contact {10}. \ No newline at end of file diff --git a/dspace/config/log4j-solr.properties b/dspace/config/log4j-solr.properties new file mode 100644 index 0000000..675d37d --- /dev/null +++ b/dspace/config/log4j-solr.properties @@ -0,0 +1,24 @@ +# Logging level +solr.log=logs/ +log4j.rootLogger=INFO, file, CONSOLE + +log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender + +log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout +log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n + +#- size rotation with log cleanup. +log4j.appender.file=org.apache.log4j.DailyRollingFileAppender +# Set this to yyyy-MM-DD for daily log files, or yyyy-MM for monthly files +log4j.appender.file.DatePattern='.'yyyy-MM-dd + +#- File to log to and log format +log4j.appender.file.File=${dspace.dir}/log/solr.log +log4j.appender.file.layout=org.apache.log4j.PatternLayout +log4j.appender.file.layout.ConversionPattern=%d %-5p %c @ %m%n + +log4j.logger.org.apache.zookeeper=WARN +log4j.logger.org.apache.hadoop=WARN + +# set to INFO to enable infostream log messages +log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF diff --git a/dspace/config/modules/rest.cfg b/dspace/config/modules/rest.cfg new file mode 100644 index 0000000..0c2dd2a --- /dev/null +++ b/dspace/config/modules/rest.cfg @@ -0,0 +1,8 @@ +#---------------------------------------------------------------# +#--------------------REST CONFIGURATIONS------------------------# +#---------------------------------------------------------------# +# These configs are used by the REST module # +#---------------------------------------------------------------# + +# record stats in DSpace statistics module +stats = true \ No newline at end of file diff --git a/dspace/config/registries/dcterms-types.xml b/dspace/config/registries/dcterms-types.xml new file mode 100644 index 0000000..17a4eca --- /dev/null +++ b/dspace/config/registries/dcterms-types.xml @@ -0,0 +1,369 @@ +<?xml version="1.0"?> + +<!-- + - dcterms-types.xml + - + - Version: $Revision$ + - + - Date: $Date$ + - + - DCTerms registry contributed to eventually replace dublin-core-types.xml + - + - <dc-type> + - <schema></schema> + - <element></element> + - + - <scope_note></scope_note> + - </dc-type> + --> + +<!-- start of XML --> + +<dspace-dc-types> + + <dspace-header> + <title>DCTerms Types Registry</title> + <contributor.author>Maureen Walsh</contributor.author> + <contributor.author>Sarah Potvin</contributor.author> + <contributor.author>Bram Luyten</contributor.author> + <contributor.editor>$Author$</contributor.editor> + <date.created>$Date$</date.created> + <description>$Log$</description> + <description.version>$Revision$</description.version> + </dspace-header> + + <dc-schema> + <name>dcterms</name> + <namespace>http://purl.org/dc/terms/</namespace> + </dc-schema> + + <dc-type> + <schema>dcterms</schema> + <element>abstract</element> + <scope_note>A summary of the resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>accessRights</element> + <scope_note>Information about who can access the resource or an indication of its security status. May include information regarding access or restrictions based on privacy, security, or other policies.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>accrualMethod</element> + <scope_note>The method by which items are added to a collection.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>accrualPeriodicity</element> + <scope_note>The frequency with which items are added to a collection.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>accrualPolicy</element> + <scope_note>The policy governing the addition of items to a collection.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>alternative</element> + <scope_note>An alternative name for the resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>audience</element> + <scope_note>A class of entity for whom the resource is intended or useful.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>available</element> + <scope_note>Date (often a range) that the resource became or will become available.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>bibliographicCitation</element> + <scope_note>Recommended practice is to include sufficient bibliographic detail to identify the resource as unambiguously as possible.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>comformsTo</element> + <scope_note>An established standard to which the described resource conforms.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>contributor</element> + <scope_note>An entity responsible for making contributions to the resource. Examples of a Contributor include a person, an organization, or a service.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>coverage</element> + <scope_note>The spatial or temporal topic of the resource, the spatial applicability of the resource, or the jurisdiction under which the resource is relevant.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>created</element> + <scope_note>Date of creation of the resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>creator</element> + <scope_note>An entity primarily responsible for making the resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>date</element> + <scope_note>A point or period of time associated with an event in the lifecycle of the resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>dateAccepted</element> + <scope_note>Date of acceptance of the resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>dateCopyrighted</element> + <scope_note>Date of copyright.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>dateSubmitted</element> + <scope_note>Date of submission of the resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>description</element> + <scope_note>An account of the resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>educationLevel</element> + <scope_note>A class of entity, defined in terms of progression through an educational or training context, for which the described resource is intended.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>extent</element> + <scope_note>The size or duration of the resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>format</element> + <scope_note>The file format, physical medium, or dimensions of the resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>hasFormat</element> + <scope_note>A related resource that is substantially the same as the pre-existing described resource, but in another format.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>hasPart</element> + <scope_note>A related resource that is included either physically or logically in the described resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>hasVersion</element> + <scope_note>A related resource that is a version, edition, or adaptation of the described resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>identifier</element> + <scope_note>An unambiguous reference to the resource within a given context.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>instructionalMethod</element> + <scope_note>A process, used to engender knowledge, attitudes and skills, that the described resource is designed to support.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>isFormatOf</element> + <scope_note>A related resource that is substantially the same as the described resource, but in another format.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>isPartOf</element> + <scope_note>A related resource in which the described resource is physically or logically included.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>isReferencedBy</element> + <scope_note>A related resource that references, cites, or otherwise points to the described resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>isReplacedBy</element> + <scope_note>A related resource that supplants, displaces, or supersedes the described resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>isRequiredBy</element> + <scope_note>A related resource that requires the described resource to support its function, delivery, or coherence.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>issued</element> + <scope_note>Date of formal issuance (e.g., publication) of the resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>isVersionOf</element> + <scope_note>A related resource of which the described resource is a version, edition, or adaptation.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>language</element> + <scope_note>A language of the resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>license</element> + <scope_note>A legal document giving official permission to do something with the resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>mediator</element> + <scope_note>An entity that mediates access to the resource and for whom the resource is intended or useful.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>medium</element> + <scope_note>The material or physical carrier of the resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>modified</element> + <scope_note>Date on which the resource was changed.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>provenance</element> + <scope_note>A statement of any changes in ownership and custody of the resource since its creation that are significant for its authenticity, integrity, and interpretation.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>publisher</element> + <scope_note>An entity responsible for making the resource available.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>references</element> + <scope_note>A related resource that is referenced, cited, or otherwise pointed to by the described resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>relation</element> + <scope_note>A related resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>replaces</element> + <scope_note>A related resource that is supplanted, displaced, or superseded by the described resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>requires</element> + <scope_note>A related resource that is required by the described resource to support its function, delivery, or coherence.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>rights</element> + <scope_note>Information about rights held in and over the resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>rightsHolder</element> + <scope_note>A person or organization owning or managing rights over the resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>source</element> + <scope_note>A related resource from which the described resource is derived.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>spatial</element> + <scope_note>Spatial characteristics of the resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>subject</element> + <scope_note>The topic of the resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>tableOfContents</element> + <scope_note>A list of subunits of the resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>temporal</element> + <scope_note>Temporal characteristics of the resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>title</element> + <scope_note>A name given to the resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>type</element> + <scope_note>The nature or genre of the resource.</scope_note> + </dc-type> + + <dc-type> + <schema>dcterms</schema> + <element>valid</element> + <scope_note>Date (often a range) of validity of a resource.</scope_note> + </dc-type> +</dspace-dc-types> diff --git a/dspace/config/spiders/agents/example b/dspace/config/spiders/agents/example new file mode 100644 index 0000000..01fa707 --- /dev/null +++ b/dspace/config/spiders/agents/example @@ -0,0 +1,224 @@ +# example spider filter by agent string regular expressions courtesy of OSU Libraries +# https://raw.github.com/osulibraries/DSpace/osukb/dspace/config/Spiders-UserAgent.txt +Alexandria(\s|\+)prototype(\s|\+)project +AllenTrack +Arachmo +Brutus\/AET +China\sLocal\sBrowse\s2\.6 +Code\sSample\sWeb\sClient +ContentSmartz +DSurf +DataCha0s\/2\.0 +Demo\sBot +EmailSiphon +EmailWolf +FDM(\s|\+)1 +Fetch(\s|\+)API(\s|\+)Request +GetRight +Goldfire(\s|\+)Server +Googlebot +HTTrack +LOCKSS +LWP\:\:Simple +MSNBot +Microsoft(\s|\+)URL(\s|\+)Control +Milbot +MuscatFerre +NABOT +NaverBot +Offline(\s|\+)Navigator +OurBrowser +Python\-urllib +Readpaper +Strider +T\-H\-U\-N\-D\-E\-R\-S\-T\-O\-N\-E +Teleport(\s|\+)Pro +Teoma +Wanadoo +Web(\s|\+)Downloader +WebCloner +WebCopier +WebReaper +WebStripper +WebZIP +Webinator +Webmetrics +Wget +Xenu(\s|\+)Link(\s|\+)Sleuth +[+:,\.\;\/\\-]bot +[^a]fish +^voyager\/ +acme\.spider +alexa +almaden +appie +architext +archive\.org_bot +arks +asterias +atomz +autoemailspider +awbot +baiduspider +bbot +biadu +biglotron +bjaaland +blaiz\-bee +bloglines +blogpulse +boitho\.com\-dc +bookmark\-manager +bot +bot[+:,\.\;\/\\-] +bspider +bwh3_user_agent +celestial +cfnetwork|checkbot +combine +commons\-httpclient +contentmatch +core +crawl +crawler +cursor +custo +daumoa +docomo +dtSearchSpider +dumbot +easydl +exabot +fast-webcrawler +favorg +feedburner +feedfetcher\-google +ferret +findlinks +gaisbot +geturl +gigabot +girafabot +gnodspider +google +grub +gulliver +harvest +heritrix +hl_ftien_spider +holmes +htdig +htmlparser +httpget\-5\.2\.2 +httpget\?5\.2\.2 +httrack +iSiloX +ia_archiver +ichiro +iktomi +ilse +internetseer +intute +java +java\/ +jeeves +jobo +kyluka +larbin +libwww +libwww\-perl +lilina +linkbot +linkcheck +linkchecker +linkscan +linkwalker +livejournal\.com +lmspider +lwp +lwp\-request +lwp\-tivial +lwp\-trivial +lycos[_+] +mail.ru +mediapartners\-google +megite +milbot +mimas +mj12bot +mnogosearch +moget +mojeekbot +momspider +motor +msiecrawler +msnbot +myweb +nagios +netcraft +netluchs +ng\/2\. +no_user_agent +nomad +nutch +ocelli +onetszukaj +perman +pioneer +playmusic\.com +playstarmusic\.com +powermarks +psbot +python +qihoobot +rambler +redalert|robozilla +robot +robots +rss +scan4mail +scientificcommons +scirus +scooter +seekbot +seznambot +shoutcast +slurp +sogou +speedy +spider +spiderman +spiderview +sunrise +superbot +surveybot +tailrank +technoratibot +titan +turnitinbot +twiceler +ucsd +ultraseek +urlaliasbuilder +urllib +virus[_+]detector +voila +w3c\-checklink +webcollage +weblayers +webmirror +webreaper +wordpress +worm +xenu +y!j +yacy +yahoo +yahoo\-mmcrawler +yahoofeedseeker +yahooseeker +yandex +yodaobot +zealbot +zeus +zyborg diff --git a/dspace/config/spiders/domains/example b/dspace/config/spiders/domains/example new file mode 100644 index 0000000..bf82d6d --- /dev/null +++ b/dspace/config/spiders/domains/example @@ -0,0 +1,12 @@ +# example spider filder by domain regular expressions courtesy of OSU Libraries +# https://raw.github.com/osulibraries/DSpace/osukb/dspace/config/Spiders-DomainName.txt +(.*)\.fastsearch\.net\. +(.*)\.scoutjet\.com\. +(.*)\.yahoo\.com\. +crawl(.*)\.exabot\.com\. +crawl-(.*)-googlebot\.com\. +crawler(.*)\.ask\.com\. +discobot-(.*)\.discoveryengine\.com\. +localhost\. +spider(.*)\.yandex\.ru\. +spider-(.*)\.yandex\.com\. diff --git a/dspace/config/spring/api/requestitem.xml b/dspace/config/spring/api/requestitem.xml new file mode 100644 index 0000000..c7e5c6f --- /dev/null +++ b/dspace/config/spring/api/requestitem.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:context="http://www.springframework.org/schema/context" + xsi:schemaLocation="http://www.springframework.org/schema/beans + http://www.springframework.org/schema/beans/spring-beans-2.5.xsd + http://www.springframework.org/schema/context + http://www.springframework.org/schema/context/spring-context-2.5.xsd" + default-autowire-candidates="*Service,*DAO,javax.sql.DataSource"> + + <context:annotation-config /> <!-- allows us to use spring annotations in beans --> + + <bean class="org.dspace.app.requestitem.RequestItemMetadataStrategy" + id="org.dspace.app.requestitem.RequestItemAuthorExtractor"> + <!-- + Uncomment these properties if you want lookup in metadata the email and the name of the author to contact for request copy. + If you don't configure that or if the requested item doesn't have these metadata the submitter data are used as fail over + + <property name="emailMetadata" value="schema.element.qualifier" /> + <property name="fullNameMatadata" value="schema.element.qualifier" /> + + --> + </bean> + +</beans> diff --git a/dspace/config/spring/api/sherpa.xml b/dspace/config/spring/api/sherpa.xml new file mode 100644 index 0000000..00bf02a --- /dev/null +++ b/dspace/config/spring/api/sherpa.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:context="http://www.springframework.org/schema/context" + xsi:schemaLocation="http://www.springframework.org/schema/beans + http://www.springframework.org/schema/beans/spring-beans-2.5.xsd + http://www.springframework.org/schema/context + http://www.springframework.org/schema/context/spring-context-2.5.xsd" + default-autowire-candidates="*Service,*DAO,javax.sql.DataSource"> + + <context:annotation-config /> <!-- allows us to use spring annotations in beans --> + + <bean class="org.dspace.app.sherpa.submit.SHERPASubmitConfigurationService" + id="org.dspace.app.sherpa.submit.SHERPASubmitConfigurationService"> + <property name="issnItemExtractors"> + <list> + <bean class="org.dspace.app.sherpa.submit.MetadataValueISSNExtractor"> + <property name="metadataList"> + <list> + <value>dc.identifier.issn</value> + </list> + </property> + </bean> + <!-- Use the follow if you have the SHERPARoMEOJournalTitle enabled + <bean class="org.dspace.app.sherpa.submit.MetadataAuthorityISSNExtractor"> + <property name="metadataList"> + <list> + <value>dc.title.alternative</value> + </list> + </property> + </bean> --> + </list> + </property> + </bean> + +</beans> diff --git a/dspace/etc/oracle/database_schema_3-4.sql b/dspace/etc/oracle/database_schema_3-4.sql new file mode 100644 index 0000000..8fcd86f --- /dev/null +++ b/dspace/etc/oracle/database_schema_3-4.sql @@ -0,0 +1,90 @@ +-- +-- database_schema_3-4.sql +-- +-- Version: $Revision$ +-- +-- Date: $Date: 2012-05-29 +-- +-- The contents of this file are subject to the license and copyright +-- detailed in the LICENSE and NOTICE files at the root of the source +-- tree and available online at +-- +-- http://www.dspace.org/license/ +-- + +-- +-- SQL commands to upgrade the database schema of a live DSpace 3.0 or 3.x +-- to the DSpace 4 database schema +-- +-- DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. +-- DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. +-- DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. +-- + +------------------------------------------- +-- Add support for DOIs (table and seq.) -- +------------------------------------------- + +CREATE TABLE Doi +( + doi_id INTEGER PRIMARY KEY, + doi VARCHAR2(256) UNIQUE, + resource_type_id INTEGER, + resource_id INTEGER, + status INTEGER +); + +CREATE SEQUENCE doi_seq; + +-- index by resource id and resource type id +CREATE INDEX doi_resource_id_type_idx ON doi(resource_id, resource_type_id); + +------------------------------------------- +-- Table of running web applications for 'dspace version' -- +------------------------------------------- + +CREATE TABLE Webapp +( + webapp_id INTEGER NOT NULL PRIMARY KEY, + AppName VARCHAR2(32), + URL VARCHAR2(1000), + Started TIMESTAMP, + isUI NUMBER(1) +); + +CREATE SEQUENCE webapp_seq; + +------------------------------------------------------- +-- DS-824 RequestItem table +------------------------------------------------------- + +CREATE TABLE requestitem +( + requestitem_id INTEGER NOT NULL, + token varchar(48), + item_id INDEX, + bitstream_id INTEGER, + allfiles NUMBER(1), + request_email VARCHAR2(64), + request_name VARCHAR2(64), + request_date TIMESTAMP, + accept_request NUMBER(1), + decision_date TIMESTAMP, + expires TIMESTAMP, + CONSTRAINT requestitem_pkey PRIMARY KEY (requestitem_id), + CONSTRAINT requestitem_token_key UNIQUE (token) +); + +CREATE SEQUENCE requestitem_seq; + +------------------------------------------------------- +-- DS-1655 Disable "Initial Questions" page in Submission UI by default +------------------------------------------------------- +update workspaceitem set multiple_titles=1, published_before=1, multiple_files=1; +update workflowitem set multiple_titles=1, published_before=1, multiple_files=1; + +------------------------------------------------------- +-- DS-1811 Removing a collection fails if non-Solr DAO has been used before for item count +------------------------------------------------------- +delete from collection_item_count; +delete from community_item_count; \ No newline at end of file diff --git a/dspace/etc/postgres/database_schema_3-4.sql b/dspace/etc/postgres/database_schema_3-4.sql new file mode 100644 index 0000000..93fe342 --- /dev/null +++ b/dspace/etc/postgres/database_schema_3-4.sql @@ -0,0 +1,93 @@ +-- +-- database_schema_18-3.sql +-- +-- Version: $Revision$ +-- +-- Date: $Date: 2012-05-29 +-- +-- The contents of this file are subject to the license and copyright +-- detailed in the LICENSE and NOTICE files at the root of the source +-- tree and available online at +-- +-- http://www.dspace.org/license/ +-- + +-- +-- SQL commands to upgrade the database schema of a live DSpace 1.8 or 1.8.x +-- to the DSpace 3 database schema +-- +-- DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. +-- DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. +-- DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. +-- + +------------------------------------------- +-- Add support for DOIs (table and seq.) -- +------------------------------------------- + +CREATE SEQUENCE doi_seq; + +CREATE TABLE Doi +( + doi_id INTEGER PRIMARY KEY, + doi VARCHAR(256) UNIQUE, + resource_type_id INTEGER, + resource_id INTEGER, + status INTEGER +); + +-- index by handle, commonly looked up +CREATE INDEX doi_doi_idx ON Doi(doi); +-- index by resource id and resource type id +CREATE INDEX doi_resource_id_and_type_idx ON Doi(resource_id, resource_type_id); + +------------------------------------------- +-- DS-1456 table of currently running webapps +------------------------------------------- + +CREATE SEQUENCE webapp_seq; + +CREATE TABLE Webapp +( + webapp_id INTEGER NOT NULL PRIMARY KEY, + AppName VARCHAR(32), + URL VARCHAR, + Started TIMESTAMP, + isUI INTEGER +); + + +------------------------------------------------------- +-- DS-824 RequestItem table +------------------------------------------------------- + +CREATE SEQUENCE requestitem_seq; + +CREATE TABLE requestitem +( + requestitem_id int4 NOT NULL, + token varchar(48), + item_id int4, + bitstream_id int4, + allfiles bool, + request_email varchar(64), + request_name varchar(64), + request_date timestamp, + accept_request bool, + decision_date timestamp, + expires timestamp, + CONSTRAINT requestitem_pkey PRIMARY KEY (requestitem_id), + CONSTRAINT requestitem_token_key UNIQUE (token) +); + +------------------------------------------------------- +-- DS-1655 Disable "Initial Questions" page in Submission UI by default +------------------------------------------------------- +update workspaceitem set multiple_titles=true, published_before=true, multiple_files=true; +update workflowitem set multiple_titles=true, published_before=true, multiple_files=true; + +------------------------------------------------------- +-- DS-1811 Removing a collection fails if non-Solr DAO has been used before for item count +------------------------------------------------------- +delete from collection_item_count; +delete from community_item_count; \ No newline at end of file diff --git a/dspace/modules/additions/src/main/java/org/dspace/app/util/SyndicationFeed.java b/dspace/modules/additions/src/main/java/org/dspace/app/util/SyndicationFeed.java new file mode 100644 index 0000000..12ed245 --- /dev/null +++ b/dspace/modules/additions/src/main/java/org/dspace/app/util/SyndicationFeed.java @@ -0,0 +1,640 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.util; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.commons.lang.ArrayUtils; +import org.apache.commons.lang.StringUtils; +import org.w3c.dom.Document; + +import org.dspace.content.Bitstream; +import org.dspace.content.Collection; +import org.dspace.content.Community; +import org.dspace.content.DCDate; +import org.dspace.content.DCValue; +import org.dspace.content.DSpaceObject; +import org.dspace.content.Item; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Constants; +import org.dspace.core.Context; +import org.dspace.handle.HandleManager; + +import com.sun.syndication.feed.synd.SyndFeed; +import com.sun.syndication.feed.synd.SyndFeedImpl; +import com.sun.syndication.feed.synd.SyndEntry; +import com.sun.syndication.feed.synd.SyndEntryImpl; +import com.sun.syndication.feed.synd.SyndEnclosure; +import com.sun.syndication.feed.synd.SyndEnclosureImpl; +import com.sun.syndication.feed.synd.SyndImage; +import com.sun.syndication.feed.synd.SyndImageImpl; +import com.sun.syndication.feed.synd.SyndPerson; +import com.sun.syndication.feed.synd.SyndPersonImpl; +import com.sun.syndication.feed.synd.SyndContent; +import com.sun.syndication.feed.synd.SyndContentImpl; +import com.sun.syndication.feed.module.DCModuleImpl; +import com.sun.syndication.feed.module.DCModule; +import com.sun.syndication.feed.module.Module; +import com.sun.syndication.feed.module.itunes.*; +import com.sun.syndication.feed.module.itunes.types.Duration; +import com.sun.syndication.io.SyndFeedOutput; +import com.sun.syndication.io.FeedException; + +import org.apache.log4j.Logger; +import org.dspace.content.Bundle; + +import org.dspace.content.Thumbnail; +import org.dspace.content.service.ItemService; + +/** + * Invoke ROME library to assemble a generic model of a syndication + * for the given list of Items and scope. Consults configuration for the + * metadata bindings to feed elements. Uses ROME's output drivers to + * return any of the implemented formats, e.g. RSS 1.0, RSS 2.0, ATOM 1.0. + * + * The feed generator and OpenSearch call on this class so feed contents are + * uniform for both. + * + * @author Larry Stone + */ +public class SyndicationFeed +{ + private static final Logger log = Logger.getLogger(SyndicationFeed.class); + + + /** i18n key values */ + public static final String MSG_UNTITLED = "notitle"; + public static final String MSG_LOGO_TITLE = "logo.title"; + public static final String MSG_FEED_TITLE = "feed.title"; + public static final String MSG_FEED_DESCRIPTION = "general-feed.description"; + public static final String MSG_METADATA = "metadata."; + public static final String MSG_UITYPE = "ui.type"; + + // UI keywords + public static final String UITYPE_XMLUI = "xmlui"; + public static final String UITYPE_JSPUI = "jspui"; + + // default DC fields for entry + private static String defaultTitleField = "dc.title"; + private static String defaultAuthorField = "dc.contributor.author"; + private static String defaultDateField = "dc.date.issued"; + private static String defaultDescriptionFields = "dc.description.abstract, dc.description, dc.title.alternative, dc.title"; + private static String defaultExternalMedia = "dc.source.uri"; + + // metadata field for Item title in entry: + private static String titleField = + getDefaultedConfiguration("webui.feed.item.title", defaultTitleField); + + // metadata field for Item publication date in entry: + private static String dateField = + getDefaultedConfiguration("webui.feed.item.date", defaultDateField); + + // metadata field for Item description in entry: + private static String descriptionFields[] = + getDefaultedConfiguration("webui.feed.item.description", defaultDescriptionFields).split("\\s*,\\s*"); + + private static String authorField = + getDefaultedConfiguration("webui.feed.item.author", defaultAuthorField); + + // metadata field for Podcast external media source url + private static String externalSourceField = getDefaultedConfiguration("webui.feed.podcast.sourceuri", defaultExternalMedia); + + // metadata field for Item dc:creator field in entry's DCModule (no default) + private static String dcCreatorField = ConfigurationManager.getProperty("webui.feed.item.dc.creator"); + + // metadata field for Item dc:date field in entry's DCModule (no default) + private static String dcDateField = ConfigurationManager.getProperty("webui.feed.item.dc.date"); + + // metadata field for Item dc:author field in entry's DCModule (no default) + private static String dcDescriptionField = ConfigurationManager.getProperty("webui.feed.item.dc.description"); + + // List of available mimetypes that we'll add to podcast feed. Multiple values separated by commas + private static String podcastableMIMETypes = getDefaultedConfiguration("webui.feed.podcast.mimetypes", "audio/x-mpeg"); + + // -------- Instance variables: + + // the feed object we are building + private SyndFeed feed = null; + + // memory of UI that called us, "xmlui" or "jspui" + // affects Bitstream retrieval URL and I18N keys + private String uiType = null; + + private HttpServletRequest request = null; + + /** + * Constructor. + * @param ui either "xmlui" or "jspui" + */ + public SyndicationFeed(String ui) + { + feed = new SyndFeedImpl(); + uiType = ui; + } + + /** + * Returns list of metadata selectors used to compose the description element + * + * @return selector list - format 'schema.element[.qualifier]' + */ + public static String[] getDescriptionSelectors() + { + return (String[]) ArrayUtils.clone(descriptionFields); + } + + + /** + * Fills in the feed and entry-level metadata from DSpace objects. + */ + public void populate(HttpServletRequest request, DSpaceObject dso, + DSpaceObject items[], Map<String, String> labels) + { + String logoURL = null; + String objectURL = null; + String thumbnailURL = null; + String defaultTitle = null; + boolean podcastFeed = false; + this.request = request; + + // dso is null for the whole site, or a search without scope + if (dso == null) + { + defaultTitle = ConfigurationManager.getProperty("dspace.name"); + feed.setDescription(localize(labels, MSG_FEED_DESCRIPTION)); + objectURL = resolveIframeURL(request, null); + logoURL = ConfigurationManager.getProperty("webui.feed.logo.url"); + } + else + { + Bitstream logo = null; + if (dso.getType() == Constants.COLLECTION) + { + Collection col = (Collection)dso; + defaultTitle = col.getMetadata("name"); + feed.setDescription(col.getMetadata("short_description")); + logo = col.getLogo(); + String cols = ConfigurationManager.getProperty("webui.feed.podcast.collections"); + if(cols != null && cols.length() > 1 && cols.contains(col.getHandle()) ) { + podcastFeed = true; + } + } + else if (dso.getType() == Constants.COMMUNITY) + { + Community comm = (Community)dso; + defaultTitle = comm.getMetadata("name"); + feed.setDescription(comm.getMetadata("short_description")); + logo = comm.getLogo(); + String comms = ConfigurationManager.getProperty("webui.feed.podcast.communities"); + if(comms != null && comms.length() > 1 && comms.contains(comm.getHandle()) ){ + podcastFeed = true; + } + } + objectURL = resolveIframeURL(request, dso); + if (logo != null) + { + logoURL = urlOfBitstream(request, logo); + } + } + feed.setTitle(labels.containsKey(MSG_FEED_TITLE) ? + localize(labels, MSG_FEED_TITLE) : defaultTitle); + feed.setLink(objectURL); + feed.setPublishedDate(new Date()); + feed.setUri(objectURL); + + // add logo if we found one: + if (logoURL != null) + { + // we use the path to the logo for this, the logo itself cannot + // be contained in the rdf. Not all RSS-viewers show this logo. + SyndImage image = new SyndImageImpl(); + image.setLink(objectURL); + if (StringUtils.isNotBlank(feed.getTitle())) { + image.setTitle(feed.getTitle()); + } else { + image.setTitle(localize(labels, MSG_LOGO_TITLE)); + } + image.setUrl(logoURL); + feed.setImage(image); + } + + // add entries for items + if (items != null) + { + List<SyndEntry> entries = new ArrayList<SyndEntry>(); + for (DSpaceObject itemDSO : items) + { + if (itemDSO.getType() != Constants.ITEM) + { + continue; + } + Item item = (Item)itemDSO; + boolean hasDate = false; + SyndEntry entry = new SyndEntryImpl(); + entries.add(entry); + + String entryURL = resolveIframeURL(request, item); + entry.setLink(entryURL); + entry.setUri(entryURL); + + String title = getOneDC(item, titleField); + entry.setTitle(title == null ? localize(labels, MSG_UNTITLED) : title); + + // "published" date -- should be dc.date.issued + String pubDate = getOneDC(item, dateField); + if (pubDate != null) + { + entry.setPublishedDate((new DCDate(pubDate)).toDate()); + hasDate = true; + } + // date of last change to Item + entry.setUpdatedDate(item.getLastModified()); + + //create StringBuffer to store item's description + StringBuffer db = new StringBuffer(); + + //add item's thumbnail at begin of description + thumbnailURL = urlOfItemThumbnail(request, item); + if (thumbnailURL != null) + { + db.append("<img src=\""+thumbnailURL+"\" >"); + } + + //populate item's description + for (String df : descriptionFields) + { + db.append("<p>"); + + // Special Case: "(date)" in field name means render as date + boolean isDate = df.indexOf("(date)") > 0; + if (isDate) + { + df = df.replaceAll("\\(date\\)", ""); + } + + DCValue dcv[] = item.getMetadata(df); + if (dcv.length > 0) + { + String fieldLabel = labels.get(MSG_METADATA + df); + if (fieldLabel != null && fieldLabel.length()>0) + { + db.append(fieldLabel).append(": "); + } + boolean first = true; + for (DCValue v : dcv) + { + if (first) + { + first = false; + } + else + { + db.append("; "); + } + db.append(isDate ? new DCDate(v.value).toString() : v.value); + } + db.append("\n"); + } + + db.append("</p>"); + } + if (db.length() > 0) + { + SyndContent desc = new SyndContentImpl(); + desc.setType("text/plain"); + desc.setValue(db.toString()); + entry.setDescription(desc); + } + + // This gets the authors into an ATOM feed + DCValue authors[] = item.getMetadata(authorField); + if (authors.length > 0) + { + List<SyndPerson> creators = new ArrayList<SyndPerson>(); + for (DCValue author : authors) + { + SyndPerson sp = new SyndPersonImpl(); + sp.setName(author.value); + creators.add(sp); + } + entry.setAuthors(creators); + } + + // only add DC module if any DC fields are configured + if (dcCreatorField != null || dcDateField != null || + dcDescriptionField != null) + { + DCModule dc = new DCModuleImpl(); + if (dcCreatorField != null) + { + DCValue dcAuthors[] = item.getMetadata(dcCreatorField); + if (dcAuthors.length > 0) + { + List<String> creators = new ArrayList<String>(); + for (DCValue author : dcAuthors) + { + creators.add(author.value); + } + dc.setCreators(creators); + } + } + if (dcDateField != null && !hasDate) + { + DCValue v[] = item.getMetadata(dcDateField); + if (v.length > 0) + { + dc.setDate((new DCDate(v[0].value)).toDate()); + } + } + if (dcDescriptionField != null) + { + DCValue v[] = item.getMetadata(dcDescriptionField); + if (v.length > 0) + { + StringBuffer descs = new StringBuffer(); + for (DCValue d : v) + { + if (descs.length() > 0) + { + descs.append("\n\n"); + } + descs.append(d.value); + } + dc.setDescription(descs.toString()); + } + } + entry.getModules().add(dc); + } + + //iTunes Podcast Support - START + if (podcastFeed) + { + // Add enclosure(s) + List<SyndEnclosure> enclosures = new ArrayList(); + try { + Bundle[] bunds = item.getBundles("ORIGINAL"); + if (bunds[0] != null) { + Bitstream[] bits = bunds[0].getBitstreams(); + for (int i = 0; (i < bits.length); i++) { + String mime = bits[i].getFormat().getMIMEType(); + if(podcastableMIMETypes.contains(mime)) { + SyndEnclosure enc = new SyndEnclosureImpl(); + enc.setType(bits[i].getFormat().getMIMEType()); + enc.setLength(bits[i].getSize()); + enc.setUrl(urlOfBitstream(request, bits[i])); + enclosures.add(enc); + } else { + continue; + } + } + } + //Also try to add an external value from dc.identifier.other + // We are assuming that if this is set, then it is a media file + DCValue[] externalMedia = item.getMetadata(externalSourceField); + if(externalMedia.length > 0) + { + for(int i = 0; i< externalMedia.length; i++) + { + SyndEnclosure enc = new SyndEnclosureImpl(); + enc.setType("audio/x-mpeg"); //We can't determine MIME of external file, so just picking one. + enc.setLength(1); + enc.setUrl(externalMedia[i].value); + enclosures.add(enc); + } + } + + } catch (Exception e) { + System.out.println(e.getMessage()); + } + entry.setEnclosures(enclosures); + + // Get iTunes specific fields: author, subtitle, summary, duration, keywords + EntryInformation itunes = new EntryInformationImpl(); + + String author = getOneDC(item, authorField); + if (author != null && author.length() > 0) { + itunes.setAuthor(author); // <itunes:author> + } + + itunes.setSubtitle(title == null ? localize(labels, MSG_UNTITLED) : title); // <itunes:subtitle> + + if (db.length() > 0) { + itunes.setSummary(db.toString()); // <itunes:summary> + } + + String extent = getOneDC(item, "dc.format.extent"); // assumed that user will enter this field with length of song in seconds + if (extent != null && extent.length() > 0) { + extent = extent.split(" ")[0]; + Integer duration = Integer.parseInt(extent); + itunes.setDuration(new Duration(duration)); // <itunes:duration> + } + + String subject = getOneDC(item, "dc.subject"); + if (subject != null && subject.length() > 0) { + String[] subjects = new String[1]; + subjects[0] = subject; + itunes.setKeywords(subjects); // <itunes:keywords> + } + + entry.getModules().add(itunes); + } + } + feed.setEntries(entries); + } + } + + /** + * Sets the feed type for XML delivery, e.g. "rss_1.0", "atom_1.0" + * Must match one of ROME's configured generators, see rome.properties + * (currently rss_1.0, rss_2.0, atom_1.0, atom_0.3) + */ + public void setType(String feedType) + { + feed.setFeedType(feedType); + // XXX FIXME: workaround ROME 1.0 bug, it puts invalid image element in rss1.0 + if ("rss_1.0".equals(feedType)) + { + feed.setImage(null); + } + } + + /** + * @return the feed we built as DOM Document + */ + public Document outputW3CDom() + throws FeedException + { + try + { + SyndFeedOutput feedWriter = new SyndFeedOutput(); + return feedWriter.outputW3CDom(feed); + } + catch (FeedException e) + { + log.error(e); + throw e; + } + } + + /** + * @return the feed we built as serialized XML string + */ + public String outputString() + throws FeedException + { + SyndFeedOutput feedWriter = new SyndFeedOutput(); + return feedWriter.outputString(feed); + } + + /** + * send the output to designated Writer + */ + public void output(java.io.Writer writer) + throws FeedException, IOException + { + SyndFeedOutput feedWriter = new SyndFeedOutput(); + feedWriter.output(feed, writer); + } + + /** + * Add a ROME plugin module (e.g. for OpenSearch) at the feed level. + */ + public void addModule(Module m) + { + feed.getModules().add(m); + } + + // utility to get config property with default value when not set. + private static String getDefaultedConfiguration(String key, String dfl) + { + String result = ConfigurationManager.getProperty(key); + return (result == null) ? dfl : result; + } + + // returns absolute URL to download content of bitstream (which might not belong to any Item) + private String urlOfBitstream(HttpServletRequest request, Bitstream logo) + { + String name = logo.getName(); + return resolveURL(request,null) + + (uiType.equalsIgnoreCase(UITYPE_XMLUI) ?"/bitstream/id/":"/retrieve/") + + logo.getID()+"/"+(name == null?"":name); + } + + //returns absolute URL of Item's Thumbnail + private String urlOfItemThumbnail(HttpServletRequest request, Item item){ + try + { + Thumbnail thumbnail = ItemService.getThumbnail(new Context(), item.getID(), false); + if (thumbnail != null) + { + return urlOfBitstream(request, thumbnail.getThumb()); + } + else + { + return null; + } + } + catch (SQLException e) + { + log.error("caught exception: ", e); + return null; + } + } + + /** + * Return a url to the DSpace object, either use the official + * handle for the item or build a url based upon the current server. + * + * If the dspaceobject is null then a local url to the repository is generated. + * + * @param dso The object to reference, null if to the repository. + * @return + */ + private String baseURL = null; // cache the result for null + private String iframeBaseURL = null; // cache the result for null + + private String resolveIframeURL(HttpServletRequest request, DSpaceObject dso) + { + // If no object given then just link to the whole repository, + // since no offical handle exists so we have to use local resolution. + if (dso == null) + { + if (iframeBaseURL == null) + { + if (request == null) + { + iframeBaseURL = ConfigurationManager.getProperty("dspace.url"); + } + else + { + iframeBaseURL = ConfigurationManager.getProperty("dspace.iframeBaseURL"); + iframeBaseURL += "/" + "#" + request.getContextPath(); + } + } + return iframeBaseURL; + } + + // return a link to handle in repository + return resolveIframeURL(request, null) + "/handle/" + dso.getHandle(); + } + + private String resolveURL(HttpServletRequest request, DSpaceObject dso) + { + // If no object given then just link to the whole repository, + // since no offical handle exists so we have to use local resolution. + if (dso == null) + { + if (baseURL == null) + { + if (request == null) + { + baseURL = ConfigurationManager.getProperty("dspace.url"); + } + else + { + baseURL = (request.isSecure()) ? "https://" : "http://"; + baseURL += ConfigurationManager.getProperty("dspace.hostname"); + baseURL += ":" + request.getServerPort(); + baseURL += request.getContextPath(); + } + } + return baseURL; + } + + // return a link to handle in repository + else if (ConfigurationManager.getBooleanProperty("webui.feed.localresolve")) + { + return resolveURL(request, null) + "/handle/" + dso.getHandle(); + } + + // link to the Handle server or other persistent URL source + else + { + return HandleManager.getCanonicalForm(dso.getHandle()); + } + } + + // retrieve text for localization key, or mark untranslated + private String localize(Map<String, String> labels, String s) + { + return labels.containsKey(s) ? labels.get(s) : ("Untranslated:"+s); + } + + // spoonful of syntactic sugar when we only need first value + private String getOneDC(Item item, String field) + { + DCValue dcv[] = item.getMetadata(field); + return (dcv.length > 0) ? dcv[0].value : null; + } +} diff --git a/dspace/modules/additions/src/main/resources/Messages.properties b/dspace/modules/additions/src/main/resources/Messages.properties new file mode 100644 index 0000000..5ef2c9a --- /dev/null +++ b/dspace/modules/additions/src/main/resources/Messages.properties @@ -0,0 +1,1849 @@ +# +# The contents of this file are subject to the license and copyright +# detailed in the LICENSE and NOTICE files at the root of the source +# tree and available online at +# +# http://www.dspace.org/license/ +# + +browse.page-title = Browsing DSpace +browse.et-al = et al + +browse.type.metadata.author = Author +browse.type.metadata.subject = Subject +browse.type.item.title = Title +browse.type.item.dateissued = Issue Date +browse.type.item.dateaccessioned = Submit Date + +browse.nav.jump = Jump to: +browse.nav.enter = or enter first few letters: +browse.nav.go = Go! +browse.nav.date.jump = Jump to a point in the index: +browse.nav.month = (Choose month) +browse.nav.year = (Choose year) +browse.nav.type-year = Or type in a year: + +browse.full.header = Browsing {0} by +browse.full.sort-by = Sort by: +browse.full.order = In order: +browse.full.rpp = Results/Page +browse.full.range = Showing results {0} to {1} of {2} +browse.full.prev = < previous +browse.full.next = next > +browse.full.etal = Authors/Record: +browse.full.etal.unlimited = All + +browse.single.header = Browsing {0} by +browse.single.order = Order: +browse.single.rpp = Results/Page +browse.single.range = Showing results {0} to {1} of {2} +browse.single.prev = < previous +browse.single.next = next > + +browse.no-results.col = There are no entries in the index for Collection "{0}". +browse.no-results.com = There are no entries in the index for Community "{0}". +browse.no-results.genericScope = There are no entries in the index for "All of DSpace". +browse.no-results.title = No Entries in Index + +browse.menu.author = Author +browse.menu.subject = Subject +browse.menu.title = Title +browse.menu.dateissued = Issue Date +browse.menu.dateaccessioned = Submit Date + +browse.sort-by.title = title +browse.sort-by.dateissued = issue date +browse.sort-by.dateaccessioned = submit date + +browse.order.asc = Ascending +browse.order.desc = Descending + +feedback.error.forbidden = The feedback mail page may only be invoked from another DSpace page + +help.collection-admin = /help/collection-admin.html +help.index = /help/index.html +help.site-admin = /help/site-admin.html +help.formats = /help/formats.jsp + +itemlist.dc.contributor.* = Author(s) +itemlist.dc.contributor.author = Author(s) +itemlist.dc.creator = Author(s) +itemlist.dc.date.defense = Defense Date +itemlist.dc.date.issued = Issue Date +itemlist.dc.title = Title +itemlist.dc.type = Type +itemlist.dc.type.* = Type +itemlist.dc.type.course = Course +itemlist.dc.type.degree = Degree +itemlist.et-al = et al +itemlist.thumbnail = Preview + +itemlist.title.undefined = Undefined + +jsp.adminhelp = <span class="glyphicon glyphicon-question-sign"></span> +jsp.administer = Administer +jsp.admintools = Admin Tools +jsp.actiontools = Actions +jsp.browse.authors.enter = or enter first few letters: +jsp.browse.authors.jump = Jump to: +jsp.browse.authors.show = Showing authors {0}-{1} of {2}. +jsp.browse.authors.title = Browse by Author +jsp.browse.general.go = Go! +jsp.browse.general.next = Next page +jsp.browse.general.previous = Previous page +jsp.browse.items-by-author.heading1 = Items for Author +jsp.browse.items-by-author.return = Return to Browse by Author +jsp.browse.items-by-author.show = Showing {0} items. +jsp.browse.items-by-author.sort1 = Sorting by Title +jsp.browse.items-by-author.sort2 = Sort by Date +jsp.browse.items-by-author.sort3 = Sort by Title +jsp.browse.items-by-author.sort4 = Sorting by Date +jsp.browse.items-by-author.title = Items for Author +jsp.browse.items-by-date.jump = Jump to a point in the index: +jsp.browse.items-by-date.month = (Choose month) +jsp.browse.items-by-date.old = Show Oldest First +jsp.browse.items-by-date.order1 = Ordering With Most Recent First +jsp.browse.items-by-date.order2 = Ordering With Oldest First +jsp.browse.items-by-date.recent = Show Most Recent First +jsp.browse.items-by-date.show = Showing items {0}-{1} of {2}. +jsp.browse.items-by-date.title = Browsing by Date +jsp.browse.items-by-date.type = Or type in a year: +jsp.browse.items-by-date.year = (Choose year) +jsp.browse.items-by-subject.heading1 = Items for Subject +jsp.browse.items-by-subject.return = Return to Browse by Subject +jsp.browse.items-by-subject.show = Showing {0} items. +jsp.browse.items-by-subject.sort1 = Sorting by Title +jsp.browse.items-by-subject.sort2 = Sort by Date +jsp.browse.items-by-subject.sort3 = Sort by Title +jsp.browse.items-by-subject.sort4 = Sorting by Date +jsp.browse.items-by-subject.title = Items for Subject +jsp.browse.items-by-title.enter = or enter first few letters: +jsp.browse.items-by-title.jump = Jump to: +jsp.browse.items-by-title.show = Showing items {0}-{1} of {2}. +jsp.browse.items-by-title.title = Browse by Title +jsp.browse.no-results.col = There are no entries in the index for Collection "{0}". +jsp.browse.no-results.com = There are no entries in the index for Community "{0}". +jsp.browse.no-results.genericScope = There are no entries in the index for "All of DSpace". +jsp.browse.no-results.title = No Entries in Index +jsp.browse.subject.enter = or enter first few letters: +jsp.browse.subject.jump = Jump to: +jsp.browse.subject.show = Showing subjects {0}-{1} of {2}. +jsp.browse.subject.title = Browse by Subject +jsp.collection-home.editsub.button = Edit Submitters +jsp.collection-home.content.range = Collection's Items (Sorted by {0} in {1} order): {2} to {3} of {4} +jsp.collection-home.feeds = RSS Feeds +jsp.collection-home.heading1 = Collection home page +jsp.collection-home.info = See Subscriptions +jsp.collection-home.item.button = Item Mapper +jsp.collection-home.recentsub = Recent Submissions +jsp.collection-home.submit.button = Submit to This Collection +jsp.collection-home.subscribe = Subscribe +jsp.collection-home.subscribe.msg = Subscribe to this collection to receive daily e-mail notification of new additions +jsp.collection-home.subscribed = You are subscribed to this collection. +jsp.collection-home.unsub = Unsubscribe +jsp.collection-home.display-statistics = <span class="glyphicon glyphicon-stats"></span> +jsp.community-home.create1.button = Create collection +jsp.community-home.create2.button = Create Sub-community +jsp.community-home.feeds = RSS Feeds +jsp.community-home.heading1 = Community home page +jsp.community-home.heading2 = Collections in this community +jsp.community-home.heading3 = Sub-communities within this community +jsp.community-home.recentsub = Recent Submissions +jsp.community-home.display-statistics = <span class="glyphicon glyphicon-stats"></span> +jsp.community-list.create.button = Create Top-Level Community... +jsp.community-list.text1 = Shown below is a list of communities and the collections and sub-communities within them. Click on a name to view that community or collection home page. +jsp.community-list.title = Communities and Collections +jsp.components.contact-info.details = Leave a message for the {0} administrators. +jsp.components.ldap-form.enter = Please enter your username and password into the form below. +jsp.components.ldap-form.login.button = Log In +jsp.components.ldap-form.newuser = New user? Click here to register. +jsp.components.ldap-form.password = Password: +jsp.components.ldap-form.username-or-email = Username <br/>or Email address: +jsp.components.login-form.email = E-mail Address: +jsp.components.login-form.enter = Please enter your e-mail address and password into the form below. +jsp.components.login-form.forgot = Have you forgotten your password? +jsp.components.login-form.login = Log In +jsp.components.login-form.newuser = New user? Click here to register. +jsp.components.login-form.password = Password: +jsp.controlledvocabulary.controlledvocabulary.clearbutton = Clear +jsp.controlledvocabulary.controlledvocabulary.closebutton = Close +jsp.controlledvocabulary.controlledvocabulary.filter = Filter: +jsp.controlledvocabulary.controlledvocabulary.help-link = (Help on Subject Categories...) +jsp.controlledvocabulary.controlledvocabulary.title = Subject Categories +jsp.controlledvocabulary.controlledvocabulary.trimbutton = Apply +jsp.controlledvocabulary.controlledvocabulary.trimmessage = Find a subject in the controlled vocabulary: +jsp.controlledvocabulary.controlledvocabularytag.noresults = No results +jsp.controlledvocabulary.results.newsearch = Search other subject... +jsp.controlledvocabulary.search.clearbutton = Clear +jsp.controlledvocabulary.search.filter = Filter: +jsp.controlledvocabulary.search.heading = Subject Search +jsp.controlledvocabulary.search.on-page-help.para1 = Check the boxes next to the categories that you wish to search under, then hit "Search...". Categories can be expanded to refine the search terms, and as many categories can be selected as required. +jsp.controlledvocabulary.search.on-page-help.para2 = Filtering the list of categories will remove from the list below any categories that do not match the filter term. Expanding each category will show you which terms did match the filter. +jsp.controlledvocabulary.search.searchbutton = Search... +jsp.controlledvocabulary.search.title = Subject Search +jsp.controlledvocabulary.search.trimbutton = Apply +jsp.controlledvocabulary.search.trimmessage = Find a subject in the controlled vocabulary: +jsp.display-item.back_to_workspace = Back to Workspace +jsp.display-item.copyright = Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated. +jsp.display-item.identifier = Please use this identifier to cite or link to this item: +jsp.display-item.license = Creative Commons License +jsp.display-item.suggest = Recommend this item +jsp.display-item.text1 = Show simple item record +jsp.display-item.text2 = Show full item record +jsp.display-item.text3 = This item is licensed under a +jsp.display-item.display-statistics = <span class="glyphicon glyphicon-stats"></span> +jsp.dspace-admin.authorize-advanced.add = Add Policy +jsp.dspace-admin.authorize-advanced.advanced = Advanced Policy Manager +jsp.dspace-admin.authorize-advanced.clear = Clear Policies +jsp.dspace-admin.authorize-advanced.col = Collection: +jsp.dspace-admin.authorize-advanced.text = Allows you to do wildcard additions to and clearing of policies for items or bitstreams contained in a collection. Warning, dangerous - removing READ permissions from items will make them not viewable! +jsp.dspace-admin.authorize-advanced.type = Content Type: +jsp.dspace-admin.authorize-advanced.type1 = item +jsp.dspace-admin.authorize-advanced.type2 = bitstream +jsp.dspace-admin.authorize-advanced.warning = (warning: clears all policies for a given set of objects) +jsp.dspace-admin.authorize-collection-edit.policies = Policies for Collection "{0}" ({1}, DB ID {2}) +jsp.dspace-admin.authorize-collection-edit.title = Edit collection policies +jsp.dspace-admin.authorize-community-edit.policies = Policies for Community "{0}" ({1}, DB ID {2}) +jsp.dspace-admin.authorize-community-edit.title = Edit community policies +jsp.dspace-admin.authorize-item-edit.bitstream = Bitstream {0} ({1}) +jsp.dspace-admin.authorize-item-edit.bundle = Policies for Bundle {0} ({1}) +jsp.dspace-admin.authorize-item-edit.eperson = EPerson +jsp.dspace-admin.authorize-item-edit.item = Item Policies +jsp.dspace-admin.authorize-item-edit.policies = Policies for Item {0} (ID={1}) +jsp.dspace-admin.authorize-item-edit.text1 = With this editor you can view and alter the policies of an item, plus alter policies of individual item components: bundles and bitstreams. Briefly, an item is a container of bundles, and bundles, are containers of bitstreams. Containers usually have ADD/REMOVE/READ/WRITE policies, while bitstreams only have READ/WRITE policies. +jsp.dspace-admin.authorize-item-edit.text2 = You will notice an extra bundle and bitstream for each item, and those contain the license text for the item. +jsp.dspace-admin.authorize-item-edit.title = Edit item policies +jsp.dspace-admin.authorize-main.adm = Administer Authorization Policies +jsp.dspace-admin.authorize-main.advanced = Advanced/Item Wildcard Policy Admin Tool +jsp.dspace-admin.authorize-main.choose = Choose a resource to manage policies for: +jsp.dspace-admin.authorize-main.manage1 = Manage a Community's Policies +jsp.dspace-admin.authorize-main.manage2 = Manage Collection's Policies +jsp.dspace-admin.authorize-main.manage3 = Manage An Item's Policies +jsp.dspace-admin.authorize-main.title = Administer Authorization Policies +jsp.dspace-admin.authorize-policy-edit.heading = Edit Policy for {0}: +jsp.dspace-admin.authorize-policy-edit.title = Edit Policy +jsp.dspace-admin.collection-select.col = Collections: +jsp.dspace-admin.collection-select.title = Select Collection +jsp.dspace-admin.community-select.com = Communities: +jsp.dspace-admin.community-select.title = Select Community +jsp.dspace-admin.confirm-delete-format.confirm = Are you sure the format <strong>{0}</strong> should be deleted? +jsp.dspace-admin.confirm-delete-format.heading = Delete Bitstream Format: {0} +jsp.dspace-admin.confirm-delete-format.returntoedit = Return to the Administer EPeople page +jsp.dspace-admin.confirm-delete-format.title = Delete Bitstream Format +jsp.dspace-admin.confirm-delete-format.warning = Any existing bitstreams of this format will be reverted to the <em>unknown</em> bitstream format. +jsp.dspace-admin.confirm-delete-mdfield.confirm = Are you sure the field <strong>{0}</strong> should be deleted? +jsp.dspace-admin.confirm-delete-mdfield.failed = Unable to delete this metadata field. This is most likely to be because it is referenced by at least one item. +jsp.dspace-admin.confirm-delete-mdfield.heading = Delete Metadata Field: <code>{0}</code> +jsp.dspace-admin.confirm-delete-mdfield.title = Delete Metadata Field +jsp.dspace-admin.confirm-delete-mdfield.warning = This will result in an error if any items have values for this metadata field. +jsp.dspace-admin.confirm-delete-mdschema.confirm = Are you sure the schema <strong>{0}</strong> should be deleted? +jsp.dspace-admin.confirm-delete-mdschema.heading = Delete Metadata Schema: <code>{0}</code> +jsp.dspace-admin.confirm-delete-mdschema.title = Delete Metadata Schema +jsp.dspace-admin.confirm-delete-mdschema.warning = This will result in an error if any metadata fields exist within this schema +jsp.dspace-admin.curate.main.title = Curation Tasks +jsp.dspace-admin.curate.main.heading = System Curation Tasks +jsp.dspace-admin.curate.main.info1 = Handle of DSpace Object +jsp.dspace-admin.curate.main.info2 = Hint: Enter [your-handle-prefix]/0 to run a task across entire site (not all tasks may support this capability) +jsp.dspace-admin.eperson-browse.canlogin = Can Log In? +jsp.dspace-admin.eperson-browse.email = E-mail Address +jsp.dspace-admin.eperson-browse.heading = Browse EPeople {0}-{1} of {2} +jsp.dspace-admin.eperson-browse.mustusecert = Must Use Cert? +jsp.dspace-admin.eperson-browse.phone = Telephone +jsp.dspace-admin.eperson-browse.self = Self Registered +jsp.dspace-admin.eperson-browse.title = E-People +jsp.dspace-admin.eperson-confirm-delete.confirm = Are you sure this e-person should be deleted? +jsp.dspace-admin.eperson-confirm-delete.heading = Delete e-person: {0} ({1}) +jsp.dspace-admin.eperson-confirm-delete.title = Delete E-Person +jsp.dspace-admin.eperson-deletion-error.errormsg = The EPerson {0} cannot be deleted because a reference to it exists in the following table(s): +jsp.dspace-admin.eperson-deletion-error.heading = Cannot Delete EPerson +jsp.dspace-admin.eperson-deletion-error.title = EPerson deletion error +jsp.dspace-admin.eperson-edit.can = Can Log In: +jsp.dspace-admin.eperson-edit.email = Email: +jsp.dspace-admin.eperson-edit.emailexists = That email address is in use by another EPerson. Emails must be unique. +jsp.dspace-admin.eperson-edit.groups = Groups EPerson is Member of: +jsp.dspace-admin.eperson-edit.heading = Edit EPerson {0}: +jsp.dspace-admin.eperson-edit.phone = Phone: +jsp.dspace-admin.eperson-edit.require = Require Certificate: +jsp.dspace-admin.eperson-edit.title = Edit EPerson +jsp.dspace-admin.eperson-main.add = Add EPerson... +jsp.dspace-admin.eperson-main.choose = Choose an action: +jsp.dspace-admin.eperson-main.heading = Administer EPeople +jsp.dspace-admin.eperson-main.noepersonselected = No EPerson selected! +jsp.dspace-admin.eperson-main.or = OR +jsp.dspace-admin.eperson-main.then = then +jsp.dspace-admin.eperson-main.title = EPerson Administrations +jsp.dspace-admin.eperson.general.firstname = First Name +jsp.dspace-admin.eperson.general.lastname = Last Name +jsp.dspace-admin.general.abort = Abort +jsp.dspace-admin.general.abort-w-confirm = Abort... +jsp.dspace-admin.general.action = Action +jsp.dspace-admin.general.action-colon = Action: +jsp.dspace-admin.general.addnew = Add New +jsp.dspace-admin.general.addpolicy = Add New Policy +jsp.dspace-admin.general.cancel = Cancel +jsp.dspace-admin.general.delete = Delete +jsp.dspace-admin.general.delete-w-confirm = Delete... +jsp.dspace-admin.general.edit = Edit +jsp.dspace-admin.general.editpolicy = Edit Policies +jsp.dspace-admin.general.eperson = EPerson +jsp.dspace-admin.general.group = Group +jsp.dspace-admin.general.group-colon = Group: +jsp.dspace-admin.general.next.button = Next > +jsp.dspace-admin.general.remove = Remove +jsp.dspace-admin.general.save = Save +jsp.dspace-admin.general.update = Update +jsp.dspace-admin.general.upload = Upload +jsp.dspace-admin.group-confirm-delete.confirm = Are you sure this group should be deleted? Note: Deleting this group will remove all resource policies associated with this group. +jsp.dspace-admin.group-confirm-delete.heading = Delete Group: {0} +jsp.dspace-admin.group-confirm-delete.title = Delete Group +jsp.dspace-admin.group-eperson-select.add = Add EPerson +jsp.dspace-admin.group-eperson-select.heading = Select EPerson to Add to Group {0} +jsp.dspace-admin.group-eperson-select.title = Select EPerson +jsp.dspace-admin.group-group-select.add = Add Group +jsp.dspace-admin.group-group-select.heading = Select Group to Add to Group {0} +jsp.dspace-admin.group-group-select.title = Select Group +jsp.dspace-admin.batchmetadataimport.title = Batch import metadata (BTE) +jsp.dspace-admin.batchmetadataimport.success = The job was taken over, an email will be sent to the end of work +jsp.dspace-admin.batchmetadataimport.genericerror = An error occured! Please, try again! +jsp.dspace-admin.batchmetadataimport.selectfile = Select data file to upload +jsp.dspace-admin.batchmetadataimport.selectinputfile = Select the type of the input data +jsp.dspace-admin.batchmetadataimport.selectcollection = Select the collection the items will be imported to +jsp.dspace-admin.metadataimport.title = Import metadata +jsp.dspace-admin.metadataimport.apply = Apply changes +jsp.dspace-admin.metadataimport.unknownerror = An unknown error has occurred +jsp.dspace-admin.metadataimport.badheadingschema = Unknown metadata schema in heading +jsp.dspace-admin.metadataimport.badheadingelement = Unknown metadata element in heading +jsp.dspace-admin.metadataimport.changesforitem = Changes for item +jsp.dspace-admin.metadataimport.newitem = New item +jsp.dspace-admin.metadataimport.addtocollection = Map to collection +jsp.dspace-admin.metadataimport.addedtocollection = Mapped to collection +jsp.dspace-admin.metadataimport.removefromcollection = Un-map from collection +jsp.dspace-admin.metadataimport.removedfromcollection = Un-mapped from collection +jsp.dspace-admin.metadataimport.addtoownercollection = Add to new owning collection +jsp.dspace-admin.metadataimport.addedtoownercollection = Added to new owning collection +jsp.dspace-admin.metadataimport.removefromownercollection = Remove from owning collection +jsp.dspace-admin.metadataimport.removedfromownercollection = Removed from owning collection +jsp.dspace-admin.metadataimport.add = Add +jsp.dspace-admin.metadataimport.added = Added +jsp.dspace-admin.metadataimport.remove = Remove +jsp.dspace-admin.metadataimport.removed = Removed +jsp.dspace-admin.metadataimport.delete = Expunge Item +jsp.dspace-admin.metadataimport.deleted = Item Expunged +jsp.dspace-admin.metadataimport.withdraw = Withdraw Item +jsp.dspace-admin.metadataimport.withdrawn = Item Withdrawn +jsp.dspace-admin.metadataimport.reinstate = Reinstate Item +jsp.dspace-admin.metadataimport.reinstated = Item Reinstated +jsp.dspace-admin.metadataimport.toomany = There are too many changes. Please import fewer changes, adjust the limit, or perform the input directly on the server. +jsp.dspace-admin.metadataimport.finished = {0} changes completed successfully. +jsp.dspace-admin.index.heading = Administration Tools +jsp.dspace-admin.index.text = Please select an operation from the main menu. +jsp.dspace-admin.item-select.enter = Enter the Handle or internal item ID of the item you wish to select. +jsp.dspace-admin.item-select.find = Find +jsp.dspace-admin.item-select.handle = Handle: +jsp.dspace-admin.item-select.heading = Select an Item +jsp.dspace-admin.item-select.id = Internal ID: +jsp.dspace-admin.item-select.text = <strong>The ID you entered isn't a valid item ID.</strong> If you're trying to edit a community or collection, you need to use the <a href="{0}">communities/collections admin page</a>. +jsp.dspace-admin.item-select.title = Select Item +jsp.dspace-admin.license-edit.description = Edit the default license by using the text box below. The license cannot be empty. <br />Please ensure the license meets the legal conditions of your country. <br />Changing this license will not affect those items already published and collections with their own licenses. <br/>There are some substitution variables that can be used to create personalized licenses, check the help pages for details.<br/>It is recommended to use a dummy submission to check the license change: <b>check the resulting license in the Accept/reject Licence step.</b> +jsp.dspace-admin.license-edit.edited = The Default License has been updated +jsp.dspace-admin.license-edit.empty = You must enter a license! +jsp.dspace-admin.license-edit.heading = Default License Editor +jsp.dspace-admin.license-edit.title = Edit Default License +jsp.dspace-admin.list-formats.description = Long Description +jsp.dspace-admin.list-formats.extensions = Extensions +jsp.dspace-admin.list-formats.internal = Internal? +jsp.dspace-admin.list-formats.known = Known +jsp.dspace-admin.list-formats.mime = MIME Type +jsp.dspace-admin.list-formats.name = Name +jsp.dspace-admin.list-formats.support = Support Level +jsp.dspace-admin.list-formats.supported = Supported +jsp.dspace-admin.list-formats.text1 = <strong>Extensions</strong> are comma-separated lists of filename extensions used to automatically identify the formats of uploaded files. Do not include the dot. +jsp.dspace-admin.list-formats.text2 = When you add a bitstream format, it is initially made "internal" so that it does not appear in the submission UI before you've finished editing the format metadata. Be sure to uncheck "internal" if the format should appear in the submission UI list of formats. +jsp.dspace-admin.list-formats.title = Bitstream Format Registry +jsp.dspace-admin.list-formats.unknown = Unknown +jsp.dspace-admin.list-metadata-fields.addfield = Add Metadata Field +jsp.dspace-admin.list-metadata-fields.addfieldnote = To create a new field you must provide a unique element and qualifier pair. The qualifier may be left blank if desired and the element and qualifier cannot contain spaces, underscores or periods. +jsp.dspace-admin.list-metadata-fields.element = Element +jsp.dspace-admin.list-metadata-fields.move = Move Field +jsp.dspace-admin.list-metadata-fields.moveformnote = If you have more than one schema a form would appear here allowing you to move fields between schemas. +jsp.dspace-admin.list-metadata-fields.movenote = To move one or more field, select the desired fields (use control-key to select multiple) and the target schema. If the target schema already has fields with identical names the fields will not be moved. +jsp.dspace-admin.list-metadata-fields.movesubmit = Move +jsp.dspace-admin.list-metadata-fields.note = Note: Adding a new field to the registry does not add a corresponding input field to the submit forms! +jsp.dspace-admin.list-metadata-fields.qualifier = Qualifier +jsp.dspace-admin.list-metadata-fields.schema = Schema +jsp.dspace-admin.list-metadata-fields.schemas = Schemas +jsp.dspace-admin.list-metadata-fields.scope = Scope Note +jsp.dspace-admin.list-metadata-fields.title = Metadata Field Registry +jsp.dspace-admin.list-metadata-schemas.instruction = Create a new schema by entering a namespace/name or edit an existing one by clicking the update button. The schema name must be less than 32 characters and cannot include spaces, periods or underscores. +jsp.dspace-admin.list-metadata-schemas.name = Name +jsp.dspace-admin.list-metadata-schemas.namespace = Namespace +jsp.dspace-admin.list-metadata-schemas.title = Metadata Schema Registry +jsp.dspace-admin.news-edit.heading = News Editor +jsp.dspace-admin.news-edit.news = News: +jsp.dspace-admin.news-edit.text.sidebar = Add or edit text in the box below to have it appear in the <strong>sidebar</strong> of the DSpace home page. +jsp.dspace-admin.news-edit.text.topbox = Add or edit text in the box below to have it appear in the <strong>top box</strong> of the DSpace home page. +jsp.dspace-admin.news-edit.text3 = You may format the text using HTML tags, but please note that the HTML will not be validated here. +jsp.dspace-admin.news-edit.title = News Edit Form +jsp.dspace-admin.news-main.heading = News Editor +jsp.dspace-admin.news-main.news.sidebar = Sidebar News +jsp.dspace-admin.news-main.news.top = Top News +jsp.dspace-admin.news-main.title = News Editor +jsp.dspace-admin.supervise-confirm-remove.authorheader = Author +jsp.dspace-admin.supervise-confirm-remove.confirm = Are you sure you wish to remove this supervision order? +jsp.dspace-admin.supervise-confirm-remove.heading = Confirm Remove +jsp.dspace-admin.supervise-confirm-remove.subheading = You have requested that the following supervision order be removed: +jsp.dspace-admin.supervise-confirm-remove.supervisorgroupheader = Supervisor Group +jsp.dspace-admin.supervise-confirm-remove.title = Administer Supervision Orders +jsp.dspace-admin.supervise-confirm-remove.titleheader = Title +jsp.dspace-admin.supervise-duplicate.errormsg = The supervision order could not be applied to the WorkSpace item as your selected group is already supervising your selected item. +jsp.dspace-admin.supervise-duplicate.heading = Operation Failed +jsp.dspace-admin.supervise-duplicate.return = Return to the Supervisor Admin page +jsp.dspace-admin.supervise-duplicate.title = Administer Supervision Orders +jsp.dspace-admin.supervise-link.choose = Choose a Group, WorkSpace Item, and Initial Policy Setting to apply: +jsp.dspace-admin.supervise-link.group = Group: +jsp.dspace-admin.supervise-link.heading = Administer Supervision Orders +jsp.dspace-admin.supervise-link.id = ID +jsp.dspace-admin.supervise-link.policy = Initial Policy Setting: +jsp.dspace-admin.supervise-link.policyeditor = Editor +jsp.dspace-admin.supervise-link.policynone = None +jsp.dspace-admin.supervise-link.policyobserver = Observer +jsp.dspace-admin.supervise-link.select = Select +jsp.dspace-admin.supervise-link.submit.button = Submit Supervision Order +jsp.dspace-admin.supervise-link.submittedby = Submitted By +jsp.dspace-admin.supervise-link.submittedto = Submitted To +jsp.dspace-admin.supervise-link.title = Title +jsp.dspace-admin.supervise-link.workspace = WorkSpace to be Supervised: +jsp.dspace-admin.supervise-list.add.button = Add a Supervision Order +jsp.dspace-admin.supervise-list.author = Item Author +jsp.dspace-admin.supervise-list.back.button = Go Back +jsp.dspace-admin.supervise-list.group = Supervising Group +jsp.dspace-admin.supervise-list.heading = Current Supervision Orders +jsp.dspace-admin.supervise-list.policies.button = Policies +jsp.dspace-admin.supervise-list.subheading = This page lists all current supervisory settings, with the option to remove any setting +jsp.dspace-admin.supervise-list.title = Item Title +jsp.dspace-admin.supervise-no-workspaceitem.no-wsitems = The supervision order could not be appliled because no workspace item exists. +jsp.dspace-admin.supervise-no-workspaceitem.unselected = The supervision order could not be applied because no workspace item was selected. +jsp.dspace-admin.supervise-no-workspaceitem.heading = Operation Failed +jsp.dspace-admin.supervise-no-workspaceitem.return = Return to the Supervisor Admin page +jsp.dspace-admin.supervise-no-workspaceitem.title = Administer Supervision Orders +jsp.dspace-admin.supervise-main.add.button = Add a Supervision Order +jsp.dspace-admin.supervise-main.clean.button = Clean Supervision Order Database +jsp.dspace-admin.supervise-main.heading = Administer Supervision Orders +jsp.dspace-admin.supervise-main.subheading = Select one of the options on this page +jsp.dspace-admin.supervise-main.title = Administer Supervision Orders +jsp.dspace-admin.supervise-main.view.button = View Current Supervision Orders +jsp.dspace-admin.upload-logo.select.col = Select the logo to upload for collection <strong>{0}</strong> +jsp.dspace-admin.upload-logo.select.com = Select the logo to upload for community <strong>{0}</strong> +jsp.dspace-admin.upload-logo.title = Upload Logo +jsp.dspace-admin.wizard-basicinfo.choose = Choose a JPEG or GIF logo for the collection home page. Should be quite small. +jsp.dspace-admin.wizard-basicinfo.copyright = Copyright text: +jsp.dspace-admin.wizard-basicinfo.description = Short Description: +jsp.dspace-admin.wizard-basicinfo.html1 = HTML, shown in center of collection home page. Be sure to enclose in <P> </P> tags! +jsp.dspace-admin.wizard-basicinfo.html2 = HTML, shown on right-hand side of collection home page. Be sure to enclose in <P> </P> tags! +jsp.dspace-admin.wizard-basicinfo.intro = Introductory text: +jsp.dspace-admin.wizard-basicinfo.license1 = License that submitters must grant. Leave this blank to use the default license. +jsp.dspace-admin.wizard-basicinfo.license2 = License: +jsp.dspace-admin.wizard-basicinfo.logo = Logo: +jsp.dspace-admin.wizard-basicinfo.name = Name: +jsp.dspace-admin.wizard-basicinfo.plain = Plain text, shown at bottom of collection home page +jsp.dspace-admin.wizard-basicinfo.plain2 = Plain text, any provenance information about this collection. Not shown on collection pages. +jsp.dspace-admin.wizard-basicinfo.provenance = Provenance: +jsp.dspace-admin.wizard-basicinfo.shown = Shown in list on community home page +jsp.dspace-admin.wizard-basicinfo.side = Side bar text: +jsp.dspace-admin.wizard-basicinfo.title = Describe the Collection +jsp.dspace-admin.wizard-default-item.dcore = Metadata Field +jsp.dspace-admin.wizard-default-item.enter = Enter Default Item Metadata +jsp.dspace-admin.wizard-default-item.language = Language +jsp.dspace-admin.wizard-default-item.select = Select field... +jsp.dspace-admin.wizard-default-item.text1 = Whenever a new submission is started in this collection, it will have the metadata you entered below already filled out. +jsp.dspace-admin.wizard-default-item.text2 = You can leave as many fields blank as you like. +jsp.dspace-admin.wizard-default-item.title = Enter Default Metadata +jsp.dspace-admin.wizard-default-item.value = Value +jsp.dspace-admin.wizard-permissions.change = You can change this later using the relevant sections of the DSpace admin UI. +jsp.dspace-admin.wizard-permissions.click = Click on the 'Select E-people' button to choose e-people to add to the list. +jsp.dspace-admin.wizard-permissions.click2 = Click on the 'Select Groups' button to choose groups to add to the list. +jsp.dspace-admin.wizard-permissions.heading1 = Authorization to Read +jsp.dspace-admin.wizard-permissions.heading2 = Authorization to Submit +jsp.dspace-admin.wizard-permissions.heading3 = Submission Workflow Accept/Reject Step +jsp.dspace-admin.wizard-permissions.heading4 = Submission Workflow Accept/Reject/Edit Metadata Step +jsp.dspace-admin.wizard-permissions.heading5 = Submission Workflow Edit Metadata Step +jsp.dspace-admin.wizard-permissions.heading6 = Delegated Collection Administrators +jsp.dspace-admin.wizard-permissions.mit = All MIT users +jsp.dspace-admin.wizard-permissions.or = OR +jsp.dspace-admin.wizard-permissions.text1 = Who has (by default) permission to read new items submitted to this collection? +jsp.dspace-admin.wizard-permissions.text2 = Who has permission to submit new items to this collection? +jsp.dspace-admin.wizard-permissions.text3 = Who is responsible for performing the <strong>accept/reject</strong> step? They will be able to accept or reject incoming submissions. They will not be able to edit the submission's metadata, however. Only one of the group need perform the step for each submission. +jsp.dspace-admin.wizard-permissions.text4 = Who is responsible for performing the <strong>accept/reject/edit metadata</strong> step? They will be able to edit the metadata of incoming submissions, and then accept or reject them. Only one of the group need perform the step for each submission. +jsp.dspace-admin.wizard-permissions.text5 = Who is responsible for performing the <strong>edit metadata</strong> step? They will be able to edit the metadata of incoming submissions, but will not be able to reject them. +jsp.dspace-admin.wizard-permissions.text6 = Who are the collection administrators for this collection? They will be able to decide who can submit items to the collection, withdraw items, edit item metadata (after submission), and add (map) existing items from other collections to this collection (subject to authorization from that collection). +jsp.dspace-admin.wizard-permissions.title = Collection Authorization +jsp.dspace-admin.wizard-questions.check1 = New items should be publicly readable +jsp.dspace-admin.wizard-questions.check1-disabled = Only System Admin can change this +jsp.dspace-admin.wizard-questions.check2 = Some users will be able to submit to this collection +jsp.dspace-admin.wizard-questions.check3 = The submission workflow will include an <em>accept/reject</em> step +jsp.dspace-admin.wizard-questions.check4 = The submission workflow will include an <em>accept/reject/edit metadata</em> step +jsp.dspace-admin.wizard-questions.check5 = The submission workflow will include an <em>edit metadata</em> step +jsp.dspace-admin.wizard-questions.check6 = This collection will have delegated collection administrators +jsp.dspace-admin.wizard-questions.check7 = New submissions will have some metadata already filled out with defaults +jsp.dspace-admin.wizard-questions.text = Please check the boxes next to the statements that apply to the collection. +jsp.dspace-admin.wizard-questions.title = Describe the Collection +jsp.dspace-admin.workflow-abort-confirm.button = Abort +jsp.dspace-admin.workflow-abort-confirm.collection = Collection: {0} +jsp.dspace-admin.workflow-abort-confirm.heading = Delete Workflow: {0} +jsp.dspace-admin.workflow-abort-confirm.item-title = Title: {0} +jsp.dspace-admin.workflow-abort-confirm.submitter = Submitter: {0} +jsp.dspace-admin.workflow-abort-confirm.title = Abort Workflow +jsp.dspace-admin.workflow-abort-confirm.warning = Are you sure you want to abort this workflow? It will return to the user's personal workspace +jsp.dspace-admin.workflow-list.collection = Collection +jsp.dspace-admin.workflow-list.heading = Currently Active Workflows +jsp.dspace-admin.workflow-list.item-title = Title +jsp.dspace-admin.workflow-list.submitter = Submitter +jsp.dspace-admin.workflow-list.title = Workflow Abort +jsp.error.404.text1 = The document you are trying to access has not been found on the server. +jsp.error.404.text2 = If you got here by following a link or bookmark provided by someone else, the link may be incorrect or you mistyped the link. Please check the link and try again. If you still get this error, then try going to the <a href="{0}">DSpace home page</a> and looking for what you want from there. +jsp.error.404.text3 = If you got to this error by clicking in a link on the DSpace site, please let us know so we can fix it! +jsp.error.404.title = Error: Document Not Found +jsp.error.authorize.text1 = You do not have permission to perform the action you just attempted. +jsp.error.authorize.text2 = If you think you should have authorization, please feel free to contact the DSpace administrators: +jsp.error.authorize.title = Authorization Required +jsp.error.exceeded-size.text1 = Sorry, but the file you have tried to upload ({0} bytes) exceeds the maximum file size limit of ({1} bytes). You can contact the repository manager with questions about this limit. +jsp.error.exceeded-size.title = Exceeded Maximum File Size Error +jsp.error.integrity.heading = System Error: Malformed Request +jsp.error.integrity.list1 = Sometimes, if you used your browser's "back" button during an operation like a submission, clicking on a button may try and do something that's already been done, such as commit the submission to the archive. Clicking your browsers "reload" or "refresh" button may have similar results. +jsp.error.integrity.list2 = If you got here by following a link or bookmark provided by someone else, the link may be incorrect or you mistyped the link. Please check the link and try again. +jsp.error.integrity.list3 = If you have more than one browser window open with DSpace, this can cause a similar problem whereby a button clicked in one window may make a button click in the other window invalid. +jsp.error.integrity.list4 = Of course, you may have uncovered a problem with the system! All of these errors are logged, and we'll be checking them regularly to see if there is a problem. +jsp.error.integrity.text1 = There was an inconsistency in the data received from your browser. This may be due to one of several things: +jsp.error.integrity.text2 = If the problem persists, please contact the DSpace site administrators: +jsp.error.integrity.title = Malformed Request +jsp.error.internal.text1 = The system has experienced an internal error. Please try to do what you were doing again, and if the problem persists, please contact us so we can fix the problem. +jsp.error.internal.title = Internal System Error +jsp.error.invalid-id.constants.type.0 = Bitstream +jsp.error.invalid-id.constants.type.1 = Bundle +jsp.error.invalid-id.constants.type.2 = Item +jsp.error.invalid-id.constants.type.3 = Collection +jsp.error.invalid-id.constants.type.4 = Community +jsp.error.invalid-id.constants.type.5 = Site +jsp.error.invalid-id.constants.type.6 = Group +jsp.error.invalid-id.constants.type.7 = EPerson +jsp.error.invalid-id.list1 = The URL of the current page is incorrect - if you followed a link from outside of DSpace it may be mistyped or corrupt. +jsp.error.invalid-id.list2 = You entered an invalid ID into a form - please try again. +jsp.error.invalid-id.text1 = The identifier {0} does not correspond to a valid {1} in DSpace. This may be because of one of the following reasons: +jsp.error.invalid-id.text2 = If you're having problems, or you expected the ID to work, feel free to contact the site administrators. +jsp.error.invalid-id.title = Invalid Identifier +jsp.error.invalid-id.type.object = Object +jsp.error.require-certificate.text = The configuration of this DSpace site means that you need a valid Web certificate to log in. If you are having problems with this, please contact us. +jsp.error.require-certificate.title = Certificate Required +jsp.feedback.acknowledge.text = Your comments have been received. +jsp.feedback.acknowledge.title = Thank you for your comments +jsp.feedback.form.comment = Your Comments: +jsp.feedback.form.email = Your Email Address: +jsp.feedback.form.send = Send +jsp.feedback.form.text1 = Thanks for taking the time to share your feedback about the DSpace system. Your comments are appreciated! +jsp.feedback.form.text2 = Please fill out all of the information below. +jsp.feedback.form.title = Feedback Form +jsp.general.authors.button = Authors +jsp.general.browse = Browse +jsp.general.date.button = By Date +jsp.general.edit.button = Edit... +jsp.general.genericScope = All of DSpace +jsp.general.go = Go +jsp.general.gohome = Go to the DSpace home page +jsp.general.goto = Go to +jsp.general.home = DSpace Home +jsp.general.id = ID +jsp.general.location = In: +jsp.general.metadataexport.button = Export metadata +jsp.general.mydspace = My DSpace +jsp.general.orbrowse = or <strong>browse</strong> +jsp.general.search.button = Go +jsp.general.searchfor = <strong>Search</strong> for +jsp.general.subjects.button = Subjects +jsp.general.titles.button = Titles +jsp.general.untitled = Untitled +jsp.general.update = Update +jsp.general.without-contributor = Anonymous +jsp.general.without-date = No date given +jsp.help = <span class="glyphicon glyphicon-question-sign"></span> +jsp.help.formats.contact1 = Please contact your +jsp.help.formats.contact2 = DSpace Administrator +jsp.help.formats.contact3 = if you have questions about a particular format. +jsp.help.formats.extensions = Extensions +jsp.help.formats.here = (Your Site's Format Support Policy Here) +jsp.help.formats.mime = MIME Type +jsp.help.formats.name = Name +jsp.help.formats.policy = Format Support Policy +jsp.help.formats.return = return to main help +jsp.help.formats.support = Support Level +jsp.help.formats.support-levels = Format Support Levels +jsp.help.formats.support.known = known +jsp.help.formats.support.supported = supported +jsp.help.formats.support.unknown = unknown +jsp.help.formats.title = DSpace Supported Formats +jsp.help.formats.top = top +jsp.help.formats.whattodo = What To Do If Your Format Isn't Listed +jsp.home.com1 = Communities in DSpace +jsp.home.com2 = Choose a community to browse its collections. +jsp.home.feeds = RSS Feeds +jsp.home.search1 = Search +jsp.home.search2 = Enter some text in the box below to search DSpace. +jsp.home.title = Home +jsp.layout.footer-default.feedback = Feedback +jsp.layout.footer-default.text = <a target="_blank" href="http://www.dspace.org/">DSpace Software</a> Copyright © 2002-2013 <a target="_blank" href="http://www.duraspace.org/">Duraspace</a> +jsp.layout.footer-default.theme-by = Theme by +jsp.layout.header-default.about = About DSpace Software +jsp.layout.header-default.alt = DSpace +jsp.layout.header-default.brand.heading = Digital Library of Participatory +jsp.layout.header-default.brand.description = <h4>The Digital Library of Participatory is part of the worldwide movement for open access to scientific-technical production. The adoption of this new management model for electronic documents provides better dissemination and access to publications on youth policies and other institutional collections related to the theme such as the National Youth Secretariat (SNJ).</h4> <a href="http://www.dspace.org"><button class="btn btn-primary">Learn More</button></a> +jsp.layout.navbar-admin.authorization = Authorization +jsp.layout.navbar-admin.communities-collections = Communities & Collections +jsp.layout.navbar-admin.curate = Curation Tasks +jsp.layout.navbar-admin.editlicense = Edit Default<br />License +jsp.layout.navbar-admin.editnews = Edit News +jsp.layout.navbar-admin.epeople = E-people +jsp.layout.navbar-admin.formatregistry = Bitstream Format<br/>Registry +jsp.layout.navbar-admin.groups = Groups +jsp.layout.navbar-admin.help = Help +jsp.layout.navbar-admin.items = Items +jsp.layout.navbar-admin.logout = Log Out +jsp.layout.navbar-admin.privateitems = Private Items +jsp.layout.navbar-admin.metadataimport = Import metadata +jsp.layout.navbar-admin.batchmetadataimport = Batch import metadata (BTE) +jsp.layout.navbar-admin.metadataregistry = Metadata<br/>Registry +jsp.layout.navbar-admin.statistics = Statistics +jsp.layout.navbar-admin.supervisors = Supervisors +jsp.layout.navbar-admin.withdrawn = Withdrawn Items +jsp.layout.navbar-admin.workflow = Workflow +jsp.layout.navbar-default.about = About DSpace +jsp.layout.navbar-default.advanced = Advanced Search +jsp.layout.navbar-default.authors = Authors +jsp.layout.navbar-default.browse = Browse +jsp.layout.navbar-default.communities-collections = Communities<br/>& Collections +jsp.layout.navbar-default.date = By Date +jsp.layout.navbar-default.edit = Edit Profile +jsp.layout.navbar-default.go = Go +jsp.layout.navbar-default.help = Help +jsp.layout.navbar-default.home = Home +jsp.layout.navbar-default.loggedin = Logged in as {0} +jsp.layout.navbar-default.logout = Logout +jsp.layout.navbar-default.receive = Receive email<br/>updates +jsp.layout.navbar-default.search = Search DSpace +jsp.layout.navbar-default.sign = Sign on to: +jsp.layout.navbar-default.subjects = Subjects +jsp.layout.navbar-default.subjectsearch = Subject Search +jsp.layout.navbar-default.titles = Titles +jsp.layout.navbar-default.users = My DSpace +jsp.layout.navbar-default.users-authorized = <small>authorized users</small> +jsp.layout.navbar-default.display-statistics = View Statistics +jsp.login.chooser.chooseyour = Choose one of these ways to login: +jsp.login.chooser.heading = Choose a Login Method +jsp.login.chooser.title = Choose Login Method +jsp.login.incorrect.heading = Log In to DSpace +jsp.login.incorrect.text = The e-mail address and password you supplied were not valid. Please try again, or have you <a href="{0}">forgotten your password</a>? +jsp.login.incorrect.title = Log In +jsp.login.ldap-incorrect.errormsg = The username and password you supplied were not valid. Please try again. +jsp.login.ldap-incorrect.heading = Log In to DSpace +jsp.login.ldap-incorrect.title = Log In +jsp.login.ldap.heading = Log In to DSpace +jsp.login.ldap.title = Log In +jsp.login.logged-out.thank = Thank you for remembering to log out! +jsp.login.logged-out.title = Logged Out +jsp.login.no-valid-cert.heading = Log In to DSpace +jsp.login.no-valid-cert.text = <strong>You do not seem to have a valid Web certificate.</strong> Please try again. +jsp.login.no-valid-cert.title = Log In +jsp.login.not-in-records.register = Register with DSpace +jsp.login.not-in-records.text = You have a valid Web certificate, but the DSpace system does not have a record of you. You will need to <a href="{0}">register with the Repository</a> before using those areas of the system that require a user account. +jsp.login.not-in-records.title = No User Record Available +jsp.login.password.heading = Log In to DSpace +jsp.login.password.title = Log In +jsp.morehelp = <span class="glyphicon glyphicon-question-sign"></span> +jsp.mydspace = My DSpace +jsp.mydspace.general.approve = Approve +jsp.mydspace.general.backto-mydspace = Back to My DSpace +jsp.mydspace.general.cancel = Cancel +jsp.mydspace.general.goto-mydspace = Go to My DSpace +jsp.mydspace.general.open = Open +jsp.mydspace.general.reject = Reject +jsp.mydspace.general.remove = Remove +jsp.mydspace.general.returnto-mydspace = Return to My DSpace +jsp.mydspace.in-archive.heading1 = Thank You +jsp.mydspace.in-archive.return.link = Return to My DSpace +jsp.mydspace.in-archive.text1 = The submission has been placed in the main archive. It has been assigned the following identifier: +jsp.mydspace.in-archive.text2 = Notification has been sent to the appropriate people. +jsp.mydspace.in-archive.title = Submission Archived +jsp.mydspace.main.authoring = Authoring +jsp.mydspace.main.elem1 = Title +jsp.mydspace.main.elem2 = Submitted to +jsp.mydspace.main.export.archive.title = Export file +jsp.mydspace.main.export.error.title = Error with export +jsp.mydspace.main.export.error.toolarge = The overall size of this export is too large. Please contact your administrator for more information. +jsp.mydspace.main.heading2 = Owned Tasks +jsp.mydspace.main.heading3 = Tasks in the Pool +jsp.mydspace.main.heading4 = Unfinished Submissions +jsp.mydspace.main.heading5 = Submissions In Workflow Process +jsp.mydspace.main.heading6 = Authorization Groups I'm a Member Of +jsp.mydspace.main.heading7 = Exported Resources +jsp.mydspace.main.item = Item +jsp.mydspace.main.link = See Your Subscriptions +jsp.mydspace.main.perform.button = Perform This Task +jsp.mydspace.main.return.button = Return to Pool +jsp.mydspace.main.start.button = Start a New Submission +jsp.mydspace.main.sub1 = Review Submission +jsp.mydspace.main.sub2 = Check Submission +jsp.mydspace.main.sub3 = Final Edit of Submission +jsp.mydspace.main.subby = Submitted By +jsp.mydspace.main.subto = Submitted To +jsp.mydspace.main.supervising = Supervising +jsp.mydspace.main.take.button = Take Task +jsp.mydspace.main.task = Task +jsp.mydspace.main.text1 = Below are the current tasks that you have chosen to do. +jsp.mydspace.main.text2 = Below are tasks in the task pool that have been assigned to you. +jsp.mydspace.main.text4 = This section is for use in the continued authoring of your document. +jsp.mydspace.main.view.button = View Accepted Submissions +jsp.mydspace.own-submissions.text1 = There are no items in the main archive that have been submitted by you. +jsp.mydspace.own-submissions.text2 = Below are listed your previous submissions that have been accepted into the archive. +jsp.mydspace.own-submissions.text3 = There is <strong>1</strong> item in the main archive that was submitted by you. +jsp.mydspace.own-submissions.text4 = There are <strong>{0}</strong> items in the main archive that were submitted by you. +jsp.mydspace.own-submissions.title = Your Submissions +jsp.mydspace.perform-task.commit.button = Commit to Archive +jsp.mydspace.perform-task.edit.button = Edit Metadata +jsp.mydspace.perform-task.instruct1 = If you have reviewed the item and it is suitable for inclusion in the collection, select "Approve". +jsp.mydspace.perform-task.instruct2 = Once you've edited the item, use this option to commit the item to the archive. +jsp.mydspace.perform-task.instruct3 = If you have reviewed the item and found it is <strong>not</strong> suitable for inclusion in the collection, select "Reject". You will then be asked to enter a message indicating why the item is unsuitable, and whether the submitter should change something and re-submit. +jsp.mydspace.perform-task.instruct4 = Select this option to correct, amend or otherwise edit the item's metadata. +jsp.mydspace.perform-task.instruct5 = If you wish to leave this task for now, and return to your "My DSpace", use this option. +jsp.mydspace.perform-task.instruct6 = To return the task to the pool so that another user can perform the task, use this option. +jsp.mydspace.perform-task.later.button = Do Later +jsp.mydspace.perform-task.return.button = Return Task to Pool +jsp.mydspace.perform-task.text1 = The following item has been submitted to collection <strong>{0}</strong>. Please review the item, check that it meets the criteria for entry into the collection. After reviewing the item, please approve or reject the item using the controls at the bottom of the page. +jsp.mydspace.perform-task.text3 = The following item has been submitted to collection <strong>{0}</strong>. Please review the item, check that it meets the criteria for entry into the collection. After reviewing the item, you may edit the metadata with the item, and then approve or reject the item using the controls at the bottom of the page. +jsp.mydspace.perform-task.text4 = The following item has been accepted for inclusion in collection <strong>{0}</strong>. Please perform any necessary edits of the metadata to conform with the standards of the collection, and then commit the item to the archive using the controls at the bottom of the page. +jsp.mydspace.perform-task.title = Perform Task +jsp.mydspace.preview-task.accept.button = Accept This Task +jsp.mydspace.preview-task.text1 = The following item has been submitted to collection <strong>{0}</strong>. In order to accept the task of reviewing this item, please click "Accept This Task" below. +jsp.mydspace.preview-task.text3 = The following item has been submitted to collection <strong>{0}</strong>. In order to accept the task of checking this item, please click "Accept This Task" below. +jsp.mydspace.preview-task.text4 = The following item has been accepted for inclusion in collection <strong>{0}</strong>. In order to accept the task of the final edit of this item, please click "Accept This Task" below. +jsp.mydspace.preview-task.title = Preview Task +jsp.mydspace.reject-reason.cancel.button = Cancel Rejection +jsp.mydspace.reject-reason.reject.button = Reject Item +jsp.mydspace.reject-reason.text1 = Please enter the reason you are rejecting the submission into the box below. Please indicate in your message whether the submitter should fix a problem and resubmit. +jsp.mydspace.reject-reason.title = Enter Reason for Rejection +jsp.mydspace.remove-item.cancel.button = Cancel Removal +jsp.mydspace.remove-item.confirmation = Are you sure you want to remove the following incomplete item? +jsp.mydspace.remove-item.remove.button = Remove the Item +jsp.mydspace.remove-item.title = Remove Item +jsp.mydspace.request.export.community = Export Community +jsp.mydspace.request.export.collection = Export Collection +jsp.mydspace.request.export.item = Export Item +jsp.mydspace.request.export.migratecommunity = Export (migrate) Community +jsp.mydspace.request.export.migratecollection = Export (migrate) Collection +jsp.mydspace.request.export.migrateitem = Export (migrate) Item +jsp.mydspace.subscriptions.info1 = Your subscriptions have been updated. +jsp.mydspace.subscriptions.info2 = To subscribe to a collection, visit the collection's home page, and click on the "Subscribe" button. +jsp.mydspace.subscriptions.select_collection = ( Select Collection ) +jsp.mydspace.subscriptions.info3 = Below are the collections you are subscribed to. You will be sent an e-mail each day detailing new items that have become available in these collections. On days that no new items have appeared, no e-mail will be sent. +jsp.mydspace.subscriptions.info4 = You are not currently subscribed to any collections. +jsp.mydspace.subscriptions.remove.button = Remove All Subscriptions +jsp.mydspace.subscriptions.title = Your Subscriptions +jsp.mydspace.subscriptions.unsub.button = Unsubscribe +jsp.mydspace.task-complete.text1 = The task is complete, and notification has been sent to the appropriate people. +jsp.mydspace.task-complete.title = Thank You +jsp.register.already-registered.info1 = Our records show that you've already registered with DSpace and have an active account with us. +jsp.register.already-registered.info2 = You can <a href="{0}">set a new password if you've forgotten it</a>. +jsp.register.already-registered.info4 = If you're having trouble logging in, please contact us. +jsp.register.already-registered.title = Already Registered +jsp.register.cannot-register.msg = The configuration of this DSpace site does not allow you to register yourself. Please feel free to contact us with any queries. +jsp.register.cannot-register.title = Cannot Register +jsp.register.edit-profile.confirm.field = Again to Confirm: +jsp.register.edit-profile.info1 = Please fill out all of the required fields. +jsp.register.edit-profile.info2 = The passwords you enter below must match, and need to be at least 6 characters long. +jsp.register.edit-profile.info3 = Please enter or amend the following information. The fields marked with a * are required. +jsp.register.edit-profile.info5 = <strong>Optionally</strong>, you can choose a new password and enter it into the box below, and confirm it by typing it again into the second box for verification. It should be at least six characters long. +jsp.register.edit-profile.pswd.field = New Password: +jsp.register.edit-profile.title = Edit Your Profile +jsp.register.edit-profile.update.button = Update Profile +jsp.register.forgot-password.email.field = E-mail Address: +jsp.register.forgot-password.forgot.button = I Forgot My Password +jsp.register.forgot-password.info1 = The e-mail address you entered was not recognized. Please try again. +jsp.register.forgot-password.info2 = Please enter your e-mail address in the box below and click "I Forgot My Password". You'll be sent an e-mail which will allow you to set a new password. +jsp.register.forgot-password.title = Forgotten Password +jsp.register.general.return-home = Return to DSpace Home +jsp.register.inactive-account.info = The e-mail address you entered corresponds to an inactive account. Perhaps you haven't yet <a href="{0}">registered</a>. Please feel free to contact the site administrators with any queries. +jsp.register.inactive-account.title = Inactive Account +jsp.register.invalid-token.info1 = The registration or forgotten password "token" in the URL is invalid. This may be because of one of the following reason: +jsp.register.invalid-token.info2 = The token might be incorrectly copied into the URL. Some e-mail programs will "wrap" long lines of text in an email, so maybe it split your special URL up into two lines, like this: +jsp.register.invalid-token.info3 = If it has, you should copy and paste the first line into your browser's address bar, then copy the second line, and paste into the address bar just on the end of the first line, making sure there are no spaces. The address bar should then contain something like: +jsp.register.invalid-token.info4 = Then press return in the address bar, and the URL should work fine. +jsp.register.invalid-token.info5 = If you're still having trouble, please contact us. +jsp.register.invalid-token.title = Invalid Token +jsp.register.new-ldap-user.button.register = Register +jsp.register.new-ldap-user.heading = User Registration +jsp.register.new-ldap-user.info1 = The username, password, or e-mail address you entered was invalid. Please try again. +jsp.register.new-ldap-user.info2 = If you've never logged on to DSpace before, please enter your username, password, and e-mail address in the fields below and click "Register". If you do not already have a username you may register by just entering your e-mail address. +jsp.register.new-ldap-user.info3 = If you or your department are interested in registering with DSpace, please contact the DSpace site administrators. +jsp.register.new-ldap-user.label.email = E-mail Address: +jsp.register.new-ldap-user.label.password = Password: +jsp.register.new-ldap-user.label.username = Username: +jsp.register.new-ldap-user.title = User Registration +jsp.register.new-password.confirm.field = Again to Confirm: +jsp.register.new-password.hello = Hello {0}, +jsp.register.new-password.info1 = The passwords you enter below must match, and need to be at least 6 characters long. +jsp.register.new-password.info2 = Please enter a new password into the box below, and confirm it by typing it again into the second box. It should be at least six characters long. +jsp.register.new-password.pswd.field = New Password: +jsp.register.new-password.set.button = Set New Password +jsp.register.new-password.title = Enter New Password +jsp.register.new-user.email.field = E-mail Address: +jsp.register.new-user.info1 = <strong>The e-mail address you entered was invalid.</strong> Please try again. +jsp.register.new-user.info2 = If you've never logged on to DSpace before, please enter your e-mail address in the box below and click "Register". +jsp.register.new-user.info3 = If you or your department are interested in registering with DSpace, please contact the DSpace site administrators. +jsp.register.new-user.register.button = Register +jsp.register.new-user.title = User Registration +jsp.register.password-changed.info = Thank you, your new password has been set and is active immediately. +jsp.register.password-changed.link = Go to DSpace Home +jsp.register.password-changed.title = Password Changed +jsp.register.password-token-sent.info = You have been sent an e-mail containing a special URL. When you visit this URL, you will be able to set a new password to carry on using DSpace. +jsp.register.password-token-sent.title = New Password E-mail Sent +jsp.register.profile-form.fname.field = First name*: +jsp.register.profile-form.language.field = Language: +jsp.register.profile-form.lname.field = Last name*: +jsp.register.profile-form.phone.field = Contact telephone: +jsp.register.profile-updated.info1 = Thank you, your profile information and you password have been updated. +jsp.register.profile-updated.info2 = Thank you, your profile information has been updated. +jsp.register.profile-updated.title = Profile Updated +jsp.register.registered.info = You're now registered to use the DSpace system. You can subscribe to collections to receive e-mail updates about new items. +jsp.register.registered.thank = Thank you {0}, +jsp.register.registered.title = Registration Complete +jsp.register.registration-form.complete.button = Complete Registration +jsp.register.registration-form.confirm.field = Again to Confirm: +jsp.register.registration-form.instruct1 = Please fill out all of the required fields. +jsp.register.registration-form.instruct2 = The passwords you enter below must match, and need to be at least 6 characters long. +jsp.register.registration-form.instruct3 = Please enter the following information. The fields marked with a * are required. +jsp.register.registration-form.instruct4 = Please choose a password and enter it into the box below, and confirm it by typing it again into the second box. It should be at least six characters long. +jsp.register.registration-form.pswd.field = Password: +jsp.register.registration-form.title = Registration Information +jsp.register.registration-sent.info = You have been sent an e-mail containing a special URL, or "token". When you visit this URL, you will need to fill out some simple information. After that, you'll be ready to log into DSpace! +jsp.register.registration-sent.title = Registration E-mail Sent +jsp.search.advanced.clear = Clear +jsp.search.advanced.logical.and = AND +jsp.search.advanced.logical.not = NOT +jsp.search.advanced.logical.or = OR +jsp.search.advanced.search = Search: +jsp.search.advanced.search2 = Search +jsp.search.advanced.searchfor = Search for: +jsp.search.advanced.title = Advanced Search +jsp.search.advanced.type = Search type: +jsp.search.advanced.type.abstract = Abstract +jsp.search.advanced.type.author = Author +jsp.search.advanced.type.identifier = Identifier +jsp.search.advanced.type.ANY = Keyword +jsp.search.advanced.type.language = Language (ISO) +jsp.search.advanced.type.series = Series +jsp.search.advanced.type.sponsor = Sponsor +jsp.search.advanced.type.keyword = Subject +jsp.search.advanced.type.title = Title +jsp.search.didyoumean = Did you mean: <b><i>{0}</i></b> +jsp.search.error.invalid-search-string = Invalid search string +jsp.search.error.number-format-exception = Number format exception +jsp.search.error.query-too-broad = Your query was too broad. Try a narrower query. +jsp.search.general.new-search = Start a new search +jsp.search.general.next = next +jsp.search.general.noresults = Search produced no results. +jsp.search.general.previous = previous +jsp.search.results.colhits = Collection hits: +jsp.search.results.comhits = Community Hits: +jsp.search.results.itemhits = Item hits: +jsp.search.results.results = Results {0}-{1} of {2} (Search time: {3} seconds). +jsp.search.results.searchfor = for +jsp.search.results.searchin = Search: +jsp.search.results.title = Search Results +jsp.search.title = Search +jsp.search.error.discovery = An error has occured. Your query is invalid or the search engine is down. +jsp.search.facet.refine = Discover +jsp.search.facet.refine.author = Author +jsp.search.facet.refine.subject = Subject +jsp.search.facet.refine.dateIssued = Date issued +jsp.search.facet.refine.previous = < previous +jsp.search.facet.refine.next = next > +jsp.search.facet.narrow = Filter by {0} +jsp.search.filter.heading = Add filters: +jsp.search.filter.hint = Use filters to refine the search results. +jsp.search.filter.add = Add +jsp.search.filter.applied = Current filters: +jsp.search.filter.any = Any fields +jsp.search.filter.title = Title +jsp.search.filter.author = Author +jsp.search.filter.subject = Subject +jsp.search.filter.dateIssued = Date Issued +jsp.search.filter.op.equals = Equals +jsp.search.filter.op.notequals = Not Equals +jsp.search.filter.op.contains = Contains +jsp.search.filter.op.notcontains = Not Contains +jsp.search.filter.op.authority = ID +jsp.search.filter.op.notauthority = Not ID +jsp.sherpa.title = SHERPA/RoMEO Publisher Policy Database +jsp.sherpa.loading = <p>Fetching policy information from the SHERPA/RoMEO database</p><img alt="loading" src="{0}/sherpa/image/ajax-loader-big.gif" /> +jsp.sherpa.heading = <p class="sherpaDisclaimer"><a href="http://www.sherpa.ac.uk/romeo.php" target="_blank"><img align="left" src="{0}/sherpa/image/romeosmall.gif" width="100" height="54" alt="SHERPA/RoMEO Database" border="0"></a> All SHERPA/RoMEO information is correct to the best of our knowledge but should not be relied upon for legal advice. SHERPA cannot be held responsible for the re-use of RoMEO data, or for alternative interpretations which are derived from this information.</p> +jsp.sherpa.error = <p class="sherpaError">Sorry, we have had trouble querying the SHERPA/RoMEO Database. No data are availables, try later or check directly the <a href="http://www.sherpa.ac.uk/romeo.php" target="_blank">SHERPA/RoMEO WebSite</a>.</p> +jsp.sherpa.noresult = <p class="sherpaNoResult">Sorry, there are not data in the <a href="http://www.sherpa.ac.uk/romeo.php" target="_blank">SHERPA/RoMEO Database</a> for the ISSNs that you have entered.</p> +jsp.sherpa.oneresult = <p>The <a href="http://www.sherpa.ac.uk/romeo.php" target="_blank">SHERPA/RoMEO</a> Database provide the following data for the journal that you have entered.</p> +jsp.sherpa.moreresults = <p>The ISSNs that you have entered match with multiple journals, please review them. For any journals you can find below the publisher policy.</p> +jsp.sherpa.jornaltitle = <p><b>Journal:</b> {0} +jsp.sherpa.jornalissn = (ISSN\: {0})</p> +jsp.sherpa.publisher = <p><b>Publisher:</b> <a href="{1}" target="_blank">{0}</a></p> +jsp.sherpa.publisher.onlyname = <p><b>Publisher:</b> {0}</p> +jsp.sherpa.publisher.unknow = <p><b>Publisher:</b> Unknow</p> +jsp.sherpa.publisher.nodata = <p>Sorry, there are not data about this publisher in the <a href="http://www.sherpa.ac.uk/romeo.php" target="_blank">SHERPA/RoMEO</a> Database. If you know its policies or you want suggest to add the Publisher to the SHERPA/RoMEO Database you can use <a href="http://www.sherpa.ac.uk/romeoupdate.php" target="_blank">this form</a></p> +jsp.sherpa.pre-print.can = <p><b>Author''s Pre-prints:</b><img src="{0}/sherpa/image/can.gif" alt="can" border="0" /> Author <b>can</b> archive pre-print (ie pre-refereeing)</p> +jsp.sherpa.pre-print.cannot = <p><b>Author''s Pre-prints:</b><img src="{0}/sherpa/image/cannot.gif" alt="cannot" border="0" /> Author <b>cannot</b> archive pre-print (ie pre-refereeing)</p> +jsp.sherpa.pre-print.restricted = <p><b>Author''s Pre-prints:</b><img src="{0}/sherpa/image/restricted.gif" alt="restricted" border="0" /> <b>Subject to Restrictions below</b>, author <b>can</b> archive pre-print (ie pre-refereeing)</p> +jsp.sherpa.pre-print.unclear = <p><b>Author''s Pre-prints:</b><img src="{0}/sherpa/image/unclear.gif" alt="unclear" border="0" /> Archiving status unclear</p> +jsp.sherpa.pre-print.unknown = <p><b>Author''s Pre-prints:</b> - No information</p> +jsp.sherpa.post-print.can = <p><b>Author''s Post-prints:</b><img src="{0}/sherpa/image/can.gif" alt="can" border="0" /> Author <b>can</b> archive post-print (ie final draft post-refereeing)</p> +jsp.sherpa.post-print.cannot = <p><b>Author''s Post-prints:</b><img src="{0}/sherpa/image/cannot.gif" alt="cannot" border="0" /> Author <b>cannot</b> archive post-print (ie final draft post-refereeing)</p> +jsp.sherpa.post-print.restricted = <p><b>Author''s Post-prints:</b><img src="{0}/sherpa/image/restricted.gif" alt="restricted" border="0" /> <b>Subject to Restrictions below</b>, author <b>can</b> archive post-print (ie final draft post-refereeing)</p> +jsp.sherpa.post-print.unclear = <p><b>Author''s Post-prints:</b><img src="{0}/sherpa/image/unclear.gif" alt="unclear" border="0" /> Archiving status unclear</p> +jsp.sherpa.post-print.unknown = <p><b>Author''s Post-prints:</b> - No information</p> +jsp.sherpa.publisher-version.can = <p><b>Publisher''s Version:</b><img src="{0}/sherpa/image/can.gif" alt="can" border="0" /> Author <b>can</b> archive publisher''s version/PDF</p> +jsp.sherpa.publisher-version.cannot = <p><b>Publisher''s Version:</b><img src="{0}/sherpa/image/cannot.gif" alt="cannot" border="0" /> Author <b>cannot</b> archive publisher''s version/PDF</p> +jsp.sherpa.publisher-version.restricted = <p><b>Publisher''s Version:</b><img src="{0}/sherpa/image/restricted.gif" alt="restricted" border="0" /> <b>Subject to Restrictions below</b>, author <b>can</b> archive publisher''s version/PDF</p> +jsp.sherpa.publisher-version.unclear = <p><b>Publisher''s Version:</b><img src="{0}/sherpa/image/unclear.gif" alt="unclear" border="0" /> Archiving status unclear</p> +jsp.sherpa.publisher-version.unknown = <p><b>Publisher''s Version:</b> - No information</p> + +jsp.sherpa.generalconditions = <p><b>General conditions:</b></p> +jsp.sherpa.paidoption = <p><b>Paid open access:</b> <a href="{1}" target="_blank">{0}</a>. {2}</p> +jsp.sherpa.copyright = <p><b>Copyright:</b></p> +jsp.sherpa.publisher.romeocolour = <p><b>RoMEO:</b> This is a RoMEO {0} publisher</p> +jsp.sherpa.legend = <div class="sherpaLegend"><table class="romeoColour table"><thead><tr><th>ROMEO colour</th><th>Archiving policy</th></tr></thead><tbody><tr><td class="greenRomeoPublisher">green</td><td>can archive pre-print <i>and</i> post-print or publisher's version/PDF</td></tr><tr><td class="blueRomeoPublisher">blue</td><td>can archive post-print (ie final draft post-refereeing) or publisher's version/PDF</td></tr><tr><td class="yellowRomeoPublisher">yellow</td><td>can archive pre-print (ie pre-refereeing)</td></tr><tr><td class="grayRomeoPublisher">gray</td><td>publishers found in DOAJ that have not yet been analyzed by RoMEO</td></tr><tr><td class="whiteRomeoPublisher">white</td><td>archiving not formally supported</td></tr></tbody></table></div> +jsp.statistics.title = Statistics +jsp.statistics.heading.visits = Total Visits +jsp.statistics.heading.monthlyvisits = Total Visits per Month +jsp.statistics.heading.filedownloads = File Downloads +jsp.statistics.heading.countryvisits = Top Country Views +jsp.statistics.heading.cityvisits = Top City Views +jsp.statistics.heading.views = Views +jsp.statistics.no-report.info1 = There are currently no reports available for this service. Please check back later. +jsp.statistics.no-report.title = No reports currently available +jsp.statistics.report.info1 = Most recent general report +jsp.statistics.report.info2 = Monthly reports: +jsp.statistics.report.title = Statistical Summary +jsp.submit.access.title = Access +jsp.submit.access.error_1 = Invalid Start Date Format +jsp.submit.access.error_2 = Missing Start Date +jsp.submit.access.error_3 = Invalid Group Selected +jsp.submit.access.error_4 = Duplicate Policy +jsp.submit.access.error_5 = Duplicate Policy +jsp.submit.access.plist.heading = Group policies +jsp.submit.access.access_setting.heading = Access Setting +jsp.submit.access.private_setting.heading = Private Item +jsp.submit.access.private_setting.help = If selected, the item won't be searchable. +jsp.submit.access.private_setting.label = Private\: +jsp.submit.access.private_setting.review.discoverable = The item will be searchable +jsp.submit.access.private_setting.review.notdiscoverable = The item will <b>not</b> be searchable +jsp.submit.access.review.button = Edit access settings +jsp.submit.access.review.embargoed = Access is allowed from {0} +jsp.submit.access.embargo_setting.heading = Embargo +jsp.submit.access.policy_setting.help = Policies listed in this section override any default policies for the collection you're submitting to. If you wish to set an embargo but the target collection allows access for any user, you must set a policy that allows access for the Anonymous group only from a specific date onwards. +jsp.submit.access.policy_setting.label_name = Name\: +jsp.submit.access.policy_setting.label_group = Group\: +jsp.submit.access.policy_setting.label_date = Embargo Access until Specific Date\: +jsp.submit.access.policy_setting.label_date.help = Accepted format: yyyy, yyyy-mm, yyyy-mm-dd +jsp.submit.access.policy_setting.label_reason = Reason\: +jsp.submit.access.submit_add_policy.button = Confirm Policy & add another +jsp.submit.access.edit_policy.heading = Edit Policy +jsp.submit.cancel.continue.button = Oops, continue submission +jsp.submit.cancel.info = Do you want the half-finished submission removed, or do you want to keep it so you can carry on working on it later? You can also return to where you where during the submission process if you clicked Cancel by accident. +jsp.submit.cancel.remove.button = Remove the submission +jsp.submit.cancel.save.button = Save it, I'll work on it later +jsp.submit.cancel.title = Cancel or Save Submission +jsp.submit.cancelled-removed.info = Your submission has been cancelled, and the incomplete item removed from the system. +jsp.submit.cancelled-removed.title = Submission Cancelled +jsp.submit.change-file-description.file = File +jsp.submit.change-file-description.filedescr = File Description: +jsp.submit.change-file-description.format = File Format +jsp.submit.change-file-description.heading = Submit: Change File Description +jsp.submit.change-file-description.info1 = Here are the details of the file. +jsp.submit.change-file-description.info2 = Enter the correct description of the file in the box below: +jsp.submit.change-file-description.size = Size +jsp.submit.change-file-description.title = Change File Description +jsp.submit.choose-file.document = Document File: +jsp.submit.choose-file.filedescr = File Description: +jsp.submit.choose-file.heading = Submit: Upload a File +jsp.submit.choose-file.info1 = Please enter the name of the file on your local hard drive corresponding to your item. If you click "Browse...", a new window will appear in which you can locate and select the file on your local hard drive. +jsp.submit.choose-file.info6 = Please also note that the DSpace system is able to preserve the content of certain types of files better than other types. +jsp.submit.choose-file.info7 = Information about file types and levels of support for each are available. +jsp.submit.choose-file.info9 = Please give a brief description of the contents of this file, for example "Main article", or "Experiment data readings". +jsp.submit.choose-file.title = Upload a File +jsp.submit.choose-file.skip = Skip file upload > +jsp.submit.choose-file.upload-ajax.button.cancel = Cancel +jsp.submit.choose-file.upload-ajax.button.select-file = Select a file... +jsp.submit.choose-file.upload-ajax.dialog.close = Ok +jsp.submit.choose-file.upload-ajax.fileRequired.title = File required +jsp.submit.choose-file.upload-ajax.fileRequired.info = You must upload at least one file for this item +jsp.submit.choose-file.upload-ajax.uploadInit = Upload is starting... +jsp.submit.choose-file.upload-ajax.uploadInProgress = Upload in progress... <b>{0}%</b> [{1} bytes of {2}] +jsp.submit.choose-file.upload-ajax.uploadCompleted = Upload completed. +jsp.submit.complete.heading = Submit: Submission Complete! +jsp.submit.complete.info = Your submission will now go through the workflow process designated for the collection to which you are submitting. You will receive e-mail notification as soon as your submission has become a part of the collection, or if for some reason there is a problem with your submission. You can also check on the status of your submission by going to the My DSpace page. +jsp.submit.complete.again = Submit another item to the same collection +jsp.submit.complete.link = Go to My DSpace +jsp.submit.complete.title = Submission Complete! +jsp.submit.creative-commons.choice1 = Press the 'Next' button below to <em>keep</em> the license previously chosen. +jsp.submit.creative-commons.choice2 = Press the 'Skip Creative Commons' button below to <em>remove</em> the current choice, and forego a Creative Commons license. +jsp.submit.creative-commons.choice3 = Complete the selection process below to <em>replace</em> the current choice. +jsp.submit.creative-commons.heading = Submit: Use a Creative Commons License +jsp.submit.creative-commons.info1 = You have already chosen a Creative Commons license and added it to this item. You may: +jsp.submit.creative-commons.info2 = To license your Item under Creative Commons, follow the instructions below. You will be given an opportunity to review your selection. Follow the 'proceed' link to add the license. If you wish to omit a Creative Commons license, press the 'Skip Creative Commons' button. +jsp.submit.creative-commons.info3 = Your browser must support IFrames to use this feature +jsp.submit.creative-commons.skip.button = Skip Creative Commons > +jsp.submit.creative-commons.title = Use a Creative Commons License +jsp.submit.edit-bitstream-access.title = Edit Bitstream Access +jsp.submit.edit-bitstream-access.heading = Edit Bitstream Access +jsp.submit.edit-bitstream-access.save.button = Save +jsp.submit.edit-metadata.button.add = Add More +jsp.submit.edit-metadata.button.remove = Remove Entry +jsp.submit.edit-metadata.button.remove2 = Remove +jsp.submit.edit-metadata.cancelsave = Cancel/Save +jsp.submit.edit-metadata.controlledvocabulary = Subject Categories +jsp.submit.edit-metadata.day = Day: +jsp.submit.edit-metadata.firstname = First name(s) + "Jr", e.g. Donald Jr +jsp.submit.edit-metadata.heading = Submit: Describe this Item +jsp.submit.edit-metadata.help = <span class="glyphicon glyphicon-question-sign"></span> +jsp.submit.edit-metadata.info1 = Please fill in the requested information about this submission below. In most browsers, you can use the tab key to move the cursor to the next input box or button, to save you having to use the mouse each time. +jsp.submit.edit-metadata.info2 = Please fill further information about this submission below. +jsp.submit.edit-metadata.lastname = Last name, e.g. Smith +jsp.submit.edit-metadata.month = Month: +jsp.submit.edit-metadata.next = Next > +jsp.submit.edit-metadata.no_month = (No Month) +jsp.submit.edit-metadata.paperno = Report or Paper No. +jsp.submit.edit-metadata.previous = < Previous +jsp.submit.edit-metadata.seriesname = Series Name +jsp.submit.edit-metadata.title = Describe this Item +jsp.submit.edit-metadata.year = Year: +jsp.submit.general.cancel-or-save.button = Cancel/Save +jsp.submit.general.next = Next > +jsp.submit.general.previous = < Previous +jsp.submit.general.submit = Submit +jsp.submit.general.cancel = Cancel +jsp.submit.general.save = Save +jsp.submit.get-file-format.choose.button = Choose automatically-recognized type +jsp.submit.get-file-format.format = File Format: +jsp.submit.get-file-format.heading = Submit: Select File Format +jsp.submit.get-file-format.info1 = Uploaded file: <code>{0}</code> ({1} bytes) +jsp.submit.get-file-format.info2 = DSpace could not identify the format of this file. +jsp.submit.get-file-format.info3 = DSpace recognized the file format as {0}. <strong>Please be sure before you change this!</strong> +jsp.submit.get-file-format.info5 = Select the format of the file from the list below, for example "Adobe PDF" or "Microsoft Word", <strong>OR</strong> if the format is not in the list, please describe the format file in the input box below the list. +jsp.submit.get-file-format.info6 = Format Not in List +jsp.submit.get-file-format.info7 = <strong>If the format is not in the above list</strong>, describe it in the format below. Enter the name of the application used to create the file, and the version number of the application (for example, "ACMESoft SuperApp version 1.5"). +jsp.submit.get-file-format.known = (known) +jsp.submit.get-file-format.supported = (supported) +jsp.submit.get-file-format.title = Select File Format +jsp.submit.initial-questions.elem1 = The item has more than one title, e.g. a translated title +jsp.submit.initial-questions.elem2 = The item has been published or publicly distributed before +jsp.submit.initial-questions.elem3 = The item consists of <em>more than one</em> file +jsp.submit.initial-questions.elem4 = The item is a thesis +jsp.submit.initial-questions.heading = Submit: Describe this Item +jsp.submit.initial-questions.info = Please check the boxes next to the statements that apply to this submission. +jsp.submit.initial-questions.title = Describe this Item +jsp.submit.license-rejected.heading = Submit: License Rejected +jsp.submit.license-rejected.info1 = You have chosen not to grant the license to distribute your submission via the DSpace system. Your submission has not been deleted and can be accessed from the My DSpace page. +jsp.submit.license-rejected.info2 = If you wish to contact us to discuss the license, please use one of the methods below: +jsp.submit.license-rejected.title = License Rejected +jsp.submit.no-theses.info1 = DSpace does not currently accept individually-submitted theses, but you are encouraged to use the separate electronic thesis submission site supported by the Libraries and by MIT Information Systems to submit your thesis to the <a href="http://thesis.mit.edu">Digital Library of MIT Theses</a>. To learn how to submit your thesis to that system, see <a href="http://web.mit.edu/etheses/www/etheses-home.html">Submitting an Electronic Thesis at MIT</a>. +jsp.submit.no-theses.info2 = Because DSpace does not accept individually-submitted theses, your submission will not proceed; any files you have uploaded for the current item will not be stored. +jsp.submit.no-theses.info3 = Please note that printed copies of your thesis are still the official requirement for your degree. Due to important legal and record-keeping reasons, it is likely that in the future DSpace will work directly with the electronic thesis system to load groups of theses which have been officially vetted and approved. Thanks for understanding. +jsp.submit.no-theses.info4 = For more information please <strong>contact the DSpace site administrators</strong>: +jsp.submit.no-theses.info5 = Thank you for your interest in DSpace! +jsp.submit.no-theses.title = Theses Not Accepted in DSpace +jsp.submit.progressbar.access = Access +jsp.submit.progressbar.complete = Complete +jsp.submit.progressbar.CClicense = License +jsp.submit.progressbar.describe = Describe +jsp.submit.progressbar.initial-questions = Describe +jsp.submit.progressbar.license = License +jsp.submit.progressbar.select = Select +jsp.submit.progressbar.upload = Upload +jsp.submit.progressbar.verify = Verify +jsp.submit.review.button.cancelsave = Cancel/Save +jsp.submit.review.button.correct = Correct one of these +jsp.submit.review.button.edit = Edit File Details +jsp.submit.review.button.next = Next > +jsp.submit.review.button.previous = < Previous +jsp.submit.review.button.upload1 = Add or Remove a File +jsp.submit.review.button.upload2 = Upload a different file +jsp.submit.review.heading = Submit: Verify Submission +jsp.submit.review.info1 = <strong>Not quite there yet,</strong> but nearly! +jsp.submit.review.info2 = Please spend a few minutes to examine what you've just submitted below. If anything is wrong, please go back and correct it by using the buttons next to the error, or by clicking on the progress bar at the top of the page. +jsp.submit.review.info3 = <strong>If everything is OK,</strong> please click the "Next" button at the bottom of the page. +jsp.submit.review.info4 = You can safely check the files which have been uploaded - a new window will be opened to display them. +jsp.submit.review.init-question1 = Item has more than one title: +jsp.submit.review.init-question2 = Previously published item: +jsp.submit.review.init-question3 = Item consists of more than one file: +jsp.submit.review.known = (Known) +jsp.submit.review.no_md = <em>None</em> +jsp.submit.review.state1 = Yes +jsp.submit.review.state2 = No +jsp.submit.review.supported = (Supported) +jsp.submit.review.title = Verify Submission +jsp.submit.review.unknown = (Unknown) +jsp.submit.review.upload1 = Uploaded Files: +jsp.submit.review.upload2 = Uploaded File: +jsp.submit.review.policies.founded = Found {0} access settings +jsp.submit.review.policies.openaccess = Open Access +jsp.submit.review.policies.embargoed = Access is allowed from {0} +jsp.submit.saved.info = Your submission has been saved for you to finish later. You can continue the submission by going to your "My DSpace" page and clicking on the relevant "Resume" button. +jsp.submit.saved.title = Submission Saved +jsp.submit.select-collection.collection = Collection +jsp.submit.select-collection.heading = Submit: Choose Collection +jsp.submit.select-collection.info1 = Select the collection you wish to submit an item to from the list below, then click "Next". +jsp.submit.select-collection.none-authorized = You are not authorized to submit to any collections +jsp.submit.select-collection.title = Select Collection to Submit to +jsp.submit.select-collection.no-collection = You must select a collection for this item. +jsp.submit.select-collection.cancel = Cancel +jsp.submit.show-license.grant.button = I Grant the License +jsp.submit.show-license.heading1 = Submit: Grant DSpace Distribution License +jsp.submit.show-license.info1 = <strong>There is one last step:</strong> In order for DSpace to reproduce, translate and distribute your submission worldwide, your agreement to the following terms is necessary. Please take a moment to read the terms of this license, and click on one of the buttons at the bottom of the page. By clicking on the "Grant License" button, you indicate that you grant the following terms of the license. +jsp.submit.show-license.info2 = <strong>Not granting the license will not delete your submission.</strong> Your item will remain in your "My DSpace" page. You can then either remove the submission from the system, or agree to the license later once any queries you might have are resolved. +jsp.submit.show-license.notgrant.button = I Do Not Grant the License +jsp.submit.show-license.title = DSpace Distribution License +jsp.submit.show-uploaded-file.checksum = Checksum +jsp.submit.show-uploaded-file.click1.button = Change format +jsp.submit.show-uploaded-file.click2.button = Change file +jsp.submit.show-uploaded-file.click3.button = Embargo settings +jsp.submit.show-uploaded-file.file = File +jsp.submit.show-uploaded-file.format = File Format +jsp.submit.show-uploaded-file.heading1 = Submit: File Uploaded Successfully +jsp.submit.show-uploaded-file.heading2 = Submit: Uploaded File +jsp.submit.show-uploaded-file.info1 = Your file was successfully uploaded. +jsp.submit.show-uploaded-file.info2 = Here are the details of the file you have uploaded. Please check the details before going to the next step. +jsp.submit.show-uploaded-file.info3 = You can verify that the file has been uploaded correctly by: +jsp.submit.show-uploaded-file.info4 = Clicking on the filename above. This will download the file in a new browser window, so that you can check the contents. +jsp.submit.show-uploaded-file.info5 = Comparing the checksum displayed above with a checksum worked out on your local computer. They should be exactly the same. +jsp.submit.show-uploaded-file.info6 = Click here to find out how to do this. +jsp.submit.show-uploaded-file.info7 = The system can calculate a checksum you can verify. +jsp.submit.show-uploaded-file.info8 = Click here for more information. +jsp.submit.show-uploaded-file.known = known +jsp.submit.show-uploaded-file.notSupported = unsupported +jsp.submit.show-uploaded-file.show.button = Show checksums +jsp.submit.show-uploaded-file.size = Size +jsp.submit.show-uploaded-file.size-in-bytes = {0} bytes +jsp.submit.show-uploaded-file.supported = Supported +jsp.submit.show-uploaded-file.title = Uploaded File +jsp.submit.thesis-removed-workaround.heading = Submission Stopped: Theses Not Accepted in DSpace +jsp.submit.thesis-removed-workaround.info = Since DSpace does not accept theses, your submission has been stopped. To start submitting something else click below. +jsp.submit.thesis-removed-workaround.link = Start a new submission +jsp.submit.thesis-removed-workaround.title = Submission Stopped +jsp.submit.upload-error.heading = Submit: Error Uploading File +jsp.submit.upload-error.info = There was a problem uploading your file. Either the filename you entered was incorrect, there was a network problem which prevented the file from reaching us correctly, or you have attempted to upload a file format marked for internal system use only. Please try again. +jsp.submit.virus-error.info = The file has not been uploaded as it appears to contain a virus. Please contact the system administrator. +jsp.submit.virus-checker-error.info = A technical problem was encountered whilst attempting to scan the file for viruses. Please contact the system administrator. +jsp.submit.upload-error.retry.button = Retry Upload +jsp.submit.upload-error.title = Error Uploading File +jsp.submit.upload-file-list.button1 = Change +jsp.submit.upload-file-list.button2 = Remove +jsp.submit.upload-file-list.button3 = Show checksums +jsp.submit.upload-file-list.button4 = Add Another File +jsp.submit.upload-file-list.button5 = < Previous +jsp.submit.upload-file-list.button6 = Next > +jsp.submit.upload-file-list.button7 = Cancel/Save +jsp.submit.upload-file-list.button8 = Policies +jsp.submit.upload-file-list.empty1 = <em>None</em> +jsp.submit.upload-file-list.heading1 = Submit: File Uploaded Successfully +jsp.submit.upload-file-list.heading2 = Submit: Uploaded Files +jsp.submit.upload-file-list.help1 = Click here to find out how to do this. +jsp.submit.upload-file-list.help2 = Click here for more information. +jsp.submit.upload-file-list.info1 = <strong>Your file was successfully uploaded.</strong> +jsp.submit.upload-file-list.info2 = The table below shows the files which have uploaded for this item. +jsp.submit.upload-file-list.info3 = You can verify that the file(s) have been uploaded correctly by: +jsp.submit.upload-file-list.info4 = Clicking on the filenames above. This will download the file in a new browser window, so that you can check the contents. +jsp.submit.upload-file-list.info5 = Comparing checksums displayed above with checksums worked out on your local computer. They should be exactly the same. +jsp.submit.upload-file-list.info6 = The system can calculate a checksum you can verify. +jsp.submit.upload-file-list.supportlevel1 = supported +jsp.submit.upload-file-list.supportlevel2 = known +jsp.submit.upload-file-list.supportlevel3 = unsupported +jsp.submit.upload-file-list.tableheading1 = Primary<br/>bitstream +jsp.submit.upload-file-list.tableheading2 = File +jsp.submit.upload-file-list.tableheading3 = Size +jsp.submit.upload-file-list.tableheading4 = Description +jsp.submit.upload-file-list.tableheading5 = File Format +jsp.submit.upload-file-list.tableheading6 = Checksum +jsp.submit.upload-file-list.tableheading7 = Access Settings +jsp.submit.upload-file-list.title = Uploaded Files +jsp.submit.verify-prune.heading = Submit: Caution +jsp.submit.verify-prune.info1 = The changes you've made to the first "Describe Your Item" page will affect your submission: +jsp.submit.verify-prune.info2 = You've indicated that your submission does not have alternative titles, but you've already entered some. If you proceed with this change, the alternative titles you've entered will be removed. +jsp.submit.verify-prune.info3 = You've indicated that your submission has not been published or publicly distributed before, but you've already entered an issue date, publisher and/or citation. If you proceed, this information will be removed, and DSpace will assign an issue date. +jsp.submit.verify-prune.info4 = You've indicated that the item you're submitting consists of only a single file, but you've already uploaded more than one file. If you proceed, only the first file you uploaded will be kept, and the rest will be discarded by the system. (The files on your local hard drive will not be affected.) +jsp.submit.verify-prune.notproceed.button = Do Not Make the Changes +jsp.submit.verify-prune.proceed.button = Proceed With Changes +jsp.submit.verify-prune.question = Are you sure you want to proceed with the changes? +jsp.submit.verify-prune.title = Answers to Initial Questions Changed +jsp.suggest.button.cancel = Cancel +jsp.suggest.button.send = Send Recommendation +jsp.suggest.heading = Recommended Item: +jsp.suggest.invitation = To recommend this item to someone, complete the form below. Fields marked with a '*' are required. +jsp.suggest.message = Personal message: +jsp.suggest.recipemail = E-mail of recipient*: +jsp.suggest.recipname = Name of recipient: +jsp.suggest.senderemail = Your e-mail address: +jsp.suggest.sendername = Your name: +jsp.suggest.title = Recommend an Item +jsp.suggest.warning = Please fill in all required fields +jsp.suggestok.button.close = Close +jsp.suggestok.heading = Your recommendation was successfully sent! +jsp.suggestok.title = Recommendation Sent +jsp.tombstone.text = The item you are trying to access has been withdrawn from DSpace. If have any questions, please contact the administrators. +jsp.tombstone.title = Item Withdrawn +jsp.tools.confirm-delete-collection.confirm = Are you sure the collection <strong>{0}</strong> should be deleted? This will delete: +jsp.tools.confirm-delete-collection.heading = Delete Collection: {0} +jsp.tools.confirm-delete-collection.info1 = Any items and incomplete submissions in this collection that aren't contained in other collections +jsp.tools.confirm-delete-collection.info2 = The contents of those items +jsp.tools.confirm-delete-collection.info3 = All associated authorisation policies +jsp.tools.confirm-delete-collection.title = Delete Collection +jsp.tools.confirm-delete-community.confirm = Are you sure the community <strong>{0}</strong> should be deleted? This will delete: +jsp.tools.confirm-delete-community.heading = Delete Community: {0} +jsp.tools.confirm-delete-community.info1 = Any collections in the community that are not contained in other communities +jsp.tools.confirm-delete-community.info2 = Any items and incomplete submissions in those collections that aren't contained in other collections +jsp.tools.confirm-delete-community.info3 = The contents of those items +jsp.tools.confirm-delete-community.info4 = All associated authorisation policies +jsp.tools.confirm-delete-community.title = Delete Community +jsp.tools.confirm-delete-item.info = Are you sure this item should be completely deleted? Caution: At present, no tombstone would be left. +jsp.tools.confirm-delete-item.title = Delete Item +jsp.tools.confirm-withdraw-item.question = Are you sure this item should be withdrawn from the archive? +jsp.tools.confirm-withdraw-item.title = Withdraw Item +jsp.tools.confirm-withdraw-item.withdraw.button = Withdraw +jsp.tools.confirm-privating-item.question = Are you sure this item should be made private? +jsp.tools.confirm-privating-item.title = Make item Private +jsp.tools.confirm-privating-item.privating.button = Make item Private +jsp.tools.creative-commons-edit.heading1 = Add or Replace Creative Commons License +jsp.tools.creative-commons-edit.title = DSpace Distribution License +jsp.tools.curate.collection.title = Curate Collection +jsp.tools.curate.collection.heading = Curate Collection: {0} +jsp.tools.curate.community.title = Curate Community +jsp.tools.curate.community.heading = Curate Community: {0} +jsp.tools.curate.item.title = Curate Item +jsp.tools.curate.item.heading = Curate Item: {0} +jsp.tools.curate.perform.button = Perform +jsp.tools.curate.perform.failure = The task exited unexpectedly or failed. For more information, please contact the site administrator or check your system logs. +jsp.tools.curate.perform.message.failure = STATUS: Failure, RESULT: {1} +jsp.tools.curate.perform.message.success = STATUS: {0}, RESULT: {1} +jsp.tools.curate.perform.success = The task was completed successfully. +jsp.tools.curate.queue.button = Queue +jsp.tools.curate.queue.failure = The task could not be queued. An error occurred. For more information, please contact the site administrator or check your system logs. +jsp.tools.curate.queue.message.failure = RESULT: FAILED to queue Object ''{0}'' in ''{1}'' Queue +jsp.tools.curate.queue.message.success = RESULT: Object ''{0}'' queued in ''{1}'' Queue +jsp.tools.curate.queue.success = The task was queued successfully. +jsp.tools.curate.return.collection.button = Return to Edit Collection Page +jsp.tools.curate.return.community.button = Return to Edit Community Page +jsp.tools.curate.return.item.button = Return to Edit Item Page +jsp.tools.curate.select-group.tag = Choose from the following groups +jsp.tools.curate.select-task.tag = Task +jsp.tools.curate.task.name = Task: {0} +jsp.tools.edit-collection.button.delete = Delete this Collection... +jsp.tools.edit-collection.form.basic-metadata = Collection's Metadata +jsp.tools.edit-collection.form.collection-settings = Collection's settings +jsp.tools.edit-collection.form.button.add-logo = Upload new logo... +jsp.tools.edit-collection.form.button.cancel = Cancel +jsp.tools.edit-collection.form.button.create = Create... +jsp.tools.edit-collection.form.button.create2 = Create +jsp.tools.edit-collection.form.button.delete = Delete +jsp.tools.edit-collection.form.button.delete-logo = Delete (no logo) +jsp.tools.edit-collection.form.button.edit = Edit... +jsp.tools.edit-collection.form.button.set-logo = Upload a logo... +jsp.tools.edit-collection.form.button.update = Update +jsp.tools.edit-collection.form.button.curate = Curate... +jsp.tools.edit-collection.form.label1 = Name: +jsp.tools.edit-collection.form.label10 = Submitters: +jsp.tools.edit-collection.form.label11 = Step: +jsp.tools.edit-collection.form.label12 = Collection Administrators: +jsp.tools.edit-collection.form.label13 = Item template: +jsp.tools.edit-collection.form.label14 = Collection's Authorizations: +jsp.tools.edit-collection.form.label15 = Harvesting Settings +jsp.tools.edit-collection.form.label16 = Content<br/> Source +jsp.tools.edit-collection.form.label17 = This is a standard DSpace collection +jsp.tools.edit-collection.form.label18 = This collection harvests its content from an external source +jsp.tools.edit-collection.form.label19 = OAI Provider +jsp.tools.edit-collection.form.label20 = OAI Set Id +jsp.tools.edit-collection.form.label21 = Metadata Format +jsp.tools.edit-collection.form.label21.select.qdc = Qualified Dublin Core +jsp.tools.edit-collection.form.label21.select.dc = Dublin Core +jsp.tools.edit-collection.form.label21.select.dim = DSpace Intermediate Format +jsp.tools.edit-collection.form.label22 = Content<br/> being<br/> Harvested +jsp.tools.edit-collection.form.label23 = Harvest metadata only. +jsp.tools.edit-collection.form.label24 = Harvest metadata and references to bitstreams (requires ORE support). +jsp.tools.edit-collection.form.label25 = Harvest metadata and bitstreams (requires ORE support). +jsp.tools.edit-collection.form.label26 = Last Harvest Result +jsp.tools.edit-collection.form.label27 = Collection's Curations: +jsp.tools.edit-collection.form.label2 = Short Description +jsp.tools.edit-collection.form.label3 = Introductory text (HTML): +jsp.tools.edit-collection.form.label4 = Copyright text (plain text): +jsp.tools.edit-collection.form.label5 = Side bar text (HTML): +jsp.tools.edit-collection.form.label6 = License: +jsp.tools.edit-collection.form.label7 = Provenance: +jsp.tools.edit-collection.form.label8 = Logo: +jsp.tools.edit-collection.form.label9 = Submission Workflow +jsp.tools.edit-collection.heading1 = Create Collection +jsp.tools.edit-collection.heading2 = Edit Collection {0} +jsp.tools.edit-collection.title = Edit Collection +jsp.tools.edit-collection.wf-role1 = Accept/Reject +jsp.tools.edit-collection.wf-role2 = Accept/Reject/Edit Metadata +jsp.tools.edit-collection.wf-role3 = Edit Metadata +jsp.tools.edit-community.button.delete = Delete this Community... +jsp.tools.edit-community.form.basic-metadata = Community's metadata +jsp.tools.edit-community.form.community-settings = Community's settings +jsp.tools.edit-community.form.button.add-logo = Upload new logo... +jsp.tools.edit-community.form.button.cancel = Cancel +jsp.tools.edit-community.form.button.create = Create +jsp.tools.edit-community.form.button.remove = Remove +jsp.tools.edit-community.form.button.delete-logo = Delete (no logo) +jsp.tools.edit-community.form.button.edit = Edit... +jsp.tools.edit-community.form.button.set-logo = Upload a logo... +jsp.tools.edit-community.form.button.update = Update +jsp.tools.edit-community.form.button.curate = Curate... +jsp.tools.edit-community.form.label1 = Name: +jsp.tools.edit-community.form.label2 = Short Description +jsp.tools.edit-community.form.label3 = Introductory text (HTML): +jsp.tools.edit-community.form.label4 = Copyright text (plain text): +jsp.tools.edit-community.form.label5 = Side bar text (HTML): +jsp.tools.edit-community.form.label6 = Logo: +jsp.tools.edit-community.form.label7 = Community's Authorizations: +jsp.tools.edit-community.form.label8 = Community Administrators: +jsp.tools.edit-community.form.label9 = Community's Curations: +jsp.tools.edit-community.heading1 = Create Community +jsp.tools.edit-community.heading2 = Edit Community {0} +jsp.tools.edit-community.title = Edit Community +jsp.tools.edit-item-form.addbit.button = Add Bitstream +jsp.tools.edit-item-form.addcc.button = Add Creative Commons License +jsp.tools.edit-item-form.form.button.curate = Curate... +jsp.tools.edit-item-form.collections = In Collections: +jsp.tools.edit-item-form.delete-w-confirm.button = Delete (Expunge)... +jsp.tools.edit-item-form.elem0 = Schema +jsp.tools.edit-item-form.elem1 = Element +jsp.tools.edit-item-form.elem10 = Format +jsp.tools.edit-item-form.elem11 = User Format Description +jsp.tools.edit-item-form.elem2 = Qualifier +jsp.tools.edit-item-form.elem3 = Value +jsp.tools.edit-item-form.elem4 = Language +jsp.tools.edit-item-form.elem5 = Primary<br/>Bitstream +jsp.tools.edit-item-form.elem7 = Name +jsp.tools.edit-item-form.elem8 = Source +jsp.tools.edit-item-form.elem9 = Description +jsp.tools.edit-item-form.elem12 = Order +jsp.tools.edit-item-form.form.label1 = Item's Curations: +jsp.tools.edit-item-form.handle = Handle: +jsp.tools.edit-item-form.heading = Bitstreams +jsp.tools.edit-item-form.details = Item's Details +jsp.tools.edit-item-form.item = Authorizations... +jsp.tools.edit-item-form.itemID = Item internal ID: +jsp.tools.edit-item-form.itempage = Item page: +jsp.tools.edit-item-form.modified = Last modified: +jsp.tools.edit-item-form.move-item.button = Move Item +jsp.tools.edit-item-form.msg = This item was withdrawn from DSpace +jsp.tools.edit-item-form.na = N/A +jsp.tools.edit-item-form.note = PLEASE NOTE: These changes are not validated in any way. You are responsible for entering the data in the correct format. If you are not sure what the format is, please do NOT make changes. +jsp.tools.edit-item-form.note3 = Note that if the "user format description" field isn't empty, the format will always be set to "Unknown", so clear the user format description before changing the format field. +jsp.tools.edit-item-form.reinstate.button = Reinstate +jsp.tools.edit-item-form.replacecc.button = Replace Creative Commons License +jsp.tools.edit-item-form.title = Edit Item +jsp.tools.edit-item-form.withdraw-w-confirm.button = Withdraw... +jsp.tools.edit-item-form.unlock = Unlock the authority key value for manual editing, or toggle it locked again +jsp.tools.edit-item-form.move-up = Move up +jsp.tools.edit-item-form.move-down = Move down +jsp.tools.edit-item-form.order-update = Update bitstream order +jsp.tools.edit-item-form.privating-w-confirm.button = Make item Private... +jsp.tools.edit-item-form.publicize.button = Make item Public +jsp.tools.eperson-list.close.button = Close +jsp.tools.eperson-list.heading = E-people {0}-{1} of {2} +jsp.tools.eperson-list.info1 = Clicking on the 'Add' button next to an e-person will add that e-person to the list on the main form. +jsp.tools.eperson-list.jump.first = First +jsp.tools.eperson-list.jump.five-back = < 5 Pages +jsp.tools.eperson-list.jump.five-forward = 5 Pages > +jsp.tools.eperson-list.jump.last = Last +jsp.tools.eperson-list.jump.one-back = < 1 Page +jsp.tools.eperson-list.jump.one-forward = 1 Page > +jsp.tools.eperson-list.search.query = Query +jsp.tools.eperson-list.search.return-browse = return to e-person full list +jsp.tools.eperson-list.search.submit = Search +jsp.tools.eperson-list.th.email = E-mail +jsp.tools.eperson-list.th.email.sortedby = E-mail ↑ +jsp.tools.eperson-list.th.firstname = First Name +jsp.tools.eperson-list.th.id = ID +jsp.tools.eperson-list.th.id.sortedby = ID ↑ +jsp.tools.eperson-list.th.language = Language +jsp.tools.eperson-list.th.language.sortedby = Language ↑ +jsp.tools.eperson-list.th.lastname = Last Name +jsp.tools.eperson-list.th.lastname.sortedby = Last Name ↑ +jsp.tools.eperson-list.title = Select E-people +jsp.tools.general.add = Add +jsp.tools.general.cancel = Cancel +jsp.tools.general.delete = Delete +jsp.tools.general.delete-w-confirm = Delete... +jsp.tools.general.edit = Edit +jsp.tools.general.remove = Remove +jsp.tools.general.select = Select +jsp.tools.general.update = Update +jsp.tools.general.view = View +jsp.tools.get-item-id.find.button = Find +jsp.tools.get-item-id.handle = Handle: +jsp.tools.get-item-id.heading = Edit or Delete Item +jsp.tools.get-item-id.info1 = <strong>The ID you entered isn't a valid item ID.</strong> If you're trying to edit a community or collection, you need to use the <a href="{0}">communities/collections admin page</a>. +jsp.tools.get-item-id.info2 = Enter the Handle or internal item ID of the item you want to edit or delete. +jsp.tools.get-item-id.internal = Internal ID: +jsp.tools.get-item-id.title = Edit Item +jsp.tools.group-edit.eperson = EPerson Members +jsp.tools.group-edit.group = Group Members +jsp.tools.group-edit.heading = After making changes to this group you must click the "Update Group" button below. +jsp.tools.group-edit.name = Name: +jsp.tools.group-edit.title = Edit Group +jsp.tools.group-edit.update.button = Update Group +jsp.tools.group-list.create.button = Create New Group +jsp.tools.group-list.id = ID +jsp.tools.group-list.name = Name +jsp.tools.group-list.note1 = Note that you do not need to manually add users to the "anonymous" group - all users are members implicitly. +jsp.tools.group-list.note2 = Warning - if you try to delete a group that is referred to by an authorization policy or is a workflow group you will get an internal server error. +jsp.tools.group-list.title = Group Editor +jsp.tools.group-select-list.close.button = Close +jsp.tools.group-select-list.heading = Groups {0}-{1} of {2} +jsp.tools.group-select-list.info1 = Clicking on the 'Add' button next to a group will add that group to the list on the main form. +jsp.tools.group-select-list.jump.first = First +jsp.tools.group-select-list.jump.five-back = < 5 Pages +jsp.tools.group-select-list.jump.five-forward = 5 Pages > +jsp.tools.group-select-list.jump.last = Last +jsp.tools.group-select-list.jump.one-back = < 1 Page +jsp.tools.group-select-list.jump.one-forward = 1 Page > +jsp.tools.group-select-list.th.id = ID +jsp.tools.group-select-list.th.id.sortedby = ID ↑ +jsp.tools.group-select-list.th.name = Name +jsp.tools.group-select-list.th.name.sortedby = Name ↑ +jsp.tools.group-select-list.title = Select Groups +jsp.tools.itemmap-browse.add = Check the box next to items you wish to add to {0}, and choose ''Add''. +jsp.tools.itemmap-browse.heading-search = Browse Items matching query: ''{0}'' +jsp.tools.itemmap-browse.heading-collection = Items Mapped to Collection {1} from Collection {0} +jsp.tools.itemmap-browse.remove = Check the box next to items you wish to unmap from {0}, and choose ''Remove''. +jsp.tools.itemmap-browse.th.action = Action +jsp.tools.itemmap-browse.th.author = First Author +jsp.tools.itemmap-browse.th.date = Date +jsp.tools.itemmap-browse.th.remove = Unmap +jsp.tools.itemmap-browse.th.title = Title +jsp.tools.itemmap-browse.title = Browse Items +jsp.tools.itemmap-browse.info.change-page = Your query return lot of results. You can navigate your result with the following buttons. Please note that checked items will be mapped only clicking on the Add button. +jsp.tools.itemmap-browse.previous.button = Previous page +jsp.tools.itemmap-browse.next.button = Next page +jsp.tools.itemmap-info.button.continue = Continue +jsp.tools.itemmap-info.heading = Item Map Info +jsp.tools.itemmap-info.msg.added = Add item {0} +jsp.tools.itemmap-info.msg.none-selected = No items selected, none added. +jsp.tools.itemmap-info.msg.none-removed = No items selected, none unmapped. +# In the following 2 messages the only parameter is an item ID +jsp.tools.itemmap-info.msg.remove = Unmap item {0} +jsp.tools.itemmap-info.title = Item Map Info +jsp.tools.itemmap-main.collection = Collection: "{0}" +jsp.tools.itemmap-main.heading = Item Mapper - Map Items from Other Collections +jsp.tools.itemmap-main.info1 = There are {0} items owned by this collection, and {1} items mapped in from other collections. +jsp.tools.itemmap-main.info4 = Import By Search +jsp.tools.itemmap-main.info5 = Enter a search query for a list of matching items +jsp.tools.itemmap-main.info6 = Browse Items Imported From Collections: +jsp.tools.itemmap-main.info7 = Click on collection names to browse for items to remove that were mapped in from that collection. +jsp.tools.itemmap-main.info8 = This collection has no items mapped into it. +jsp.tools.itemmap-main.search.button = Search +jsp.tools.itemmap-main.title = Item Mapper +jsp.tools.move-item.button = Move +jsp.tools.move-item.collection.from.msg = Collection to move from +jsp.tools.move-item.collection.to.msg = Collection to move to +jsp.tools.move-item.item.name.msg = Name of the item to be moved +jsp.tools.move-item.title = Moving an item +jsp.tools.move-item.inheritpolicies = Inherit default policies of destination collection +jsp.tools.upload-bitstream.info = Select the bitstream to upload +jsp.tools.upload-bitstream.title = Upload Bitstream +jsp.tools.upload-bitstream.upload = Upload +jsp.workspace.ws-error.errormsg1 = The system was unable to process your request correctly. You must specify an item. +jsp.workspace.ws-error.errormsg2 = Go back to "My DSpace", and select "Open" for the WorkSpace Item that you wish to work with. If you are still experiencing problems please do not hesitate to contact us and we will do our best to solve the problem. +jsp.workspace.ws-error.heading = Error - Workspace Item +jsp.workspace.ws-error.title = My DSpace - Workspace Error +jsp.workspace.ws-main.button.edit = Edit +jsp.workspace.ws-main.button.remove = Remove +jsp.workspace.ws-main.button.view = View +jsp.workspace.ws-main.descheading = Description +jsp.workspace.ws-main.editmsg = Open the item up for editing and file management. +jsp.workspace.ws-main.optionheading = Option +jsp.workspace.ws-main.removemsg = Remove the item all together. +jsp.workspace.ws-main.submitmsg = This item is being submitted to the collection: +jsp.workspace.ws-main.title = My DSpace +jsp.workspace.ws-main.viewmsg = View the item record as it stands at this stage of submission. +jsp.workspace.ws-main.wsitem = WorkSpace Item +jsp.workspace.wsv-error.errormsg1 = The system was unable to process your request correctly. You must specify an item. +jsp.workspace.wsv-error.errormsg2 = Go back to "My DSpace", and select "Open" for the WorkSpace Item that you wish to work with, then select "View" from the list of options. If you are still experiencing problems please do not hesitate to contact us and we will do our best to solve the problem. +jsp.workspace.wsv-error.heading = Error - View Workspace Item +jsp.workspace.wsv-error.title = My DSpace - View Workspace Item Error + +metadata.dc.contributor.* = Authors +metadata.dc.contributor.author = Authors +metadata.dc.contributor.editor = Editors +metadata.dc.date.issued = Issue Date +metadata.dc.description = Description +metadata.dc.description.abstract = Abstract +metadata.dc.identifier = Other Identifiers +metadata.dc.identifier.citation = Citation +metadata.dc.identifier.govdoc = Gov't Doc # +metadata.dc.identifier.isbn = ISBN +metadata.dc.identifier.ismn = ISMN +metadata.dc.identifier.issn = ISSN +metadata.dc.identifier.uri = URI +metadata.dc.publisher = Publisher +metadata.dc.relation.ispartofseries = Series/Report no. +metadata.dc.subject = Keywords +metadata.dc.title = Title +metadata.dc.title.alternative = Other Titles + +news-side.html = news-side.html + +news-top.html = news-top.html + +org.dspace.app.itemexport.no-result = The DSpaceObject that you specified has no items. +org.dspace.app.webui.jsptag.CollectionListTag.collectionName = Collection Name +org.dspace.app.webui.jsptag.CommunityListTag.communityName = Community Name +org.dspace.app.webui.jsptag.ItemListTag.authors = Authors +org.dspace.app.webui.jsptag.ItemListTag.issueDate = Date of Issue +org.dspace.app.webui.jsptag.ItemListTag.title = Title +org.dspace.app.webui.jsptag.ItemTag.appears = Appears in Collections: +org.dspace.app.webui.jsptag.ItemTag.dcfield = DC Field +org.dspace.app.webui.jsptag.ItemTag.description = Description +org.dspace.app.webui.jsptag.ItemTag.file = File +org.dspace.app.webui.jsptag.ItemTag.fileformat = Format +org.dspace.app.webui.jsptag.ItemTag.files = Files in This Item: +org.dspace.app.webui.jsptag.ItemTag.files.no = There are no files associated with this item. +org.dspace.app.webui.jsptag.ItemTag.filesize = Size +org.dspace.app.webui.jsptag.ItemTag.full = Full metadata record +org.dspace.app.webui.jsptag.ItemTag.itemprotected = This item is protected by original copyright +org.dspace.app.webui.jsptag.ItemTag.lang = Language +org.dspace.app.webui.jsptag.ItemTag.submitted = Submitted to Collection: +org.dspace.app.webui.jsptag.ItemTag.thumbnail = Thumbnail +org.dspace.app.webui.jsptag.ItemTag.value = Value +org.dspace.app.webui.jsptag.ItemTag.view = View/Open +org.dspace.app.webui.jsptag.ItemTag.viewlicence = View License +org.dspace.app.webui.jsptag.SelectEPersonTag.removeSelected = Remove Selected +org.dspace.app.webui.jsptag.SelectEPersonTag.selectPeople = Select E-people... +org.dspace.app.webui.jsptag.SelectEPersonTag.selectPerson = Select E-person... +org.dspace.app.webui.jsptag.SelectGroupTag.removeSelected = Remove Selected +org.dspace.app.webui.jsptag.SelectGroupTag.selectGroup = Select Group... +org.dspace.app.webui.jsptag.SelectGroupTag.selectGroups = Select Groups... +#there are two more types of feeds: Collection and Community level feeds +org.dspace.app.webui.servlet.FeedServlet.feed-type.collection = Collection +org.dspace.app.webui.servlet.FeedServlet.feed-type.community = Community +# In the following takes in feed type and the title of the collection/community +org.dspace.app.webui.servlet.FeedServlet.feed.title = DSpace {0}: {1} +#the general-feed is the feed for all of DSpace +org.dspace.app.webui.servlet.FeedServlet.general-feed.description = The DSpace digital repository system captures, stores, indexes, preserves, and distributes digital research material. +org.dspace.app.webui.servlet.FeedServlet.logo.title = The Channel Image +org.dspace.app.webui.servlet.FeedServlet.notitle = no title +org.dspace.app.webui.servlet.FeedServlet.search.description = Search the Channel +org.dspace.app.webui.servlet.FeedServlet.search.name = search +# The following takes in the feed type (collection or community) +org.dspace.app.webui.servlet.FeedServlet.search.title = The {0}''s search engine +org.dspace.app.webui.servlet.FeedServlet.search.title.default = The DSpace search engine +org.dspace.app.webui.servlet.SuggestServlet.recipient = colleague +org.dspace.app.webui.servlet.SuggestServlet.sender = A DSpace user +org.dspace.app.webui.servlet.admin.CurationServlet.null-result = Nothing to do for this DSpace object. +org.dspace.app.webui.servlet.admin.MetadataFieldRegistryServlet.badelemchar = The element cannot contain periods, underscores or spaces. +org.dspace.app.webui.servlet.admin.MetadataFieldRegistryServlet.badqualchar = The qualifier cannot contain periods, underscores or spaces. +org.dspace.app.webui.servlet.admin.MetadataFieldRegistryServlet.createfailed = The requested field could not be created due to an already existing field with an identical name. +org.dspace.app.webui.servlet.admin.MetadataFieldRegistryServlet.elemempty = The element cannot be empty. +org.dspace.app.webui.servlet.admin.MetadataFieldRegistryServlet.elemtoolong = The element must be shorter than 64 characters. +org.dspace.app.webui.servlet.admin.MetadataFieldRegistryServlet.movearguments = Please select both a field to move and a destination schema. +org.dspace.app.webui.servlet.admin.MetadataFieldRegistryServlet.movefailed = The requested field(s) could not be moved due to an identical field in the destination schema. +org.dspace.app.webui.servlet.admin.MetadataFieldRegistryServlet.qualtoolong = The qualifier must be shorter than 64 characters. +org.dspace.app.webui.servlet.admin.MetadataSchemaRegistryServlet.emptyname = The short name cannot be empty. +org.dspace.app.webui.servlet.admin.MetadataSchemaRegistryServlet.emptynamespace = The namespace cannot be empty. +org.dspace.app.webui.servlet.admin.MetadataSchemaRegistryServlet.illegalchar = The short name cannot contain spaces, underscores or periods. +org.dspace.app.webui.servlet.admin.MetadataSchemaRegistryServlet.nametolong = The short name must be 32 characters or less. +org.dspace.checker.ResultsLogger.bitstream-format = Bitstream format +org.dspace.checker.ResultsLogger.bitstream-found = Bitstream found +org.dspace.checker.ResultsLogger.bitstream-id = Bitstream ID +org.dspace.checker.ResultsLogger.bitstream-info-found = Bitstream info found +org.dspace.checker.ResultsLogger.bitstream-marked-deleted = Bitstream marked deleted +org.dspace.checker.ResultsLogger.checksum-algorithm = Checksum algorithm +org.dspace.checker.ResultsLogger.checksum-comparison-result = Checksum comparison result +org.dspace.checker.ResultsLogger.internal-id = Internal Id +org.dspace.checker.ResultsLogger.name = Name +org.dspace.checker.ResultsLogger.new-checksum = New checksum +org.dspace.checker.ResultsLogger.previous-checksum = Previous checksum +org.dspace.checker.ResultsLogger.previous-checksum-data = Previous checksum data +org.dspace.checker.ResultsLogger.previous-checksum-date = Previous checksum date +org.dspace.checker.ResultsLogger.run-start-time = Run start time +org.dspace.checker.ResultsLogger.size = Size +org.dspace.checker.ResultsLogger.source = Source +org.dspace.checker.ResultsLogger.store-number = Store number +org.dspace.checker.ResultsLogger.to-be-processed = To be processed +org.dspace.checker.ResultsLogger.user-format-description = User format description +org.dspace.checker.SimpleReporterImpl.bitstream-id = Bitstream Id +org.dspace.checker.SimpleReporterImpl.bitstream-not-found-report = The following is a BITSTREAM NOT FOUND report for +org.dspace.checker.SimpleReporterImpl.bitstream-will-no-longer-be-processed = The following is a BITSTREAM WILL NO LONGER BE PROCESSED report for +org.dspace.checker.SimpleReporterImpl.check-id = Check Id +org.dspace.checker.SimpleReporterImpl.checksum = Checksum +org.dspace.checker.SimpleReporterImpl.checksum-algorithm = Checksum Algorithm +org.dspace.checker.SimpleReporterImpl.checksum-calculated = Checksum Calculated +org.dspace.checker.SimpleReporterImpl.checksum-did-not-match = The following is a CHECKSUM DID NOT MATCH report for +org.dspace.checker.SimpleReporterImpl.checksum-expected = Checksum Expected +org.dspace.checker.SimpleReporterImpl.date-range-to = to +org.dspace.checker.SimpleReporterImpl.deleted = Deleted +org.dspace.checker.SimpleReporterImpl.deleted-bitstream-intro = The following is a BITSTREAM SET DELETED report for +org.dspace.checker.SimpleReporterImpl.description = Description +org.dspace.checker.SimpleReporterImpl.format-id = Format Id +org.dspace.checker.SimpleReporterImpl.howto-add-unchecked-bitstreams = To add these bitstreams to be checked run the checksum checker with the -u option +org.dspace.checker.SimpleReporterImpl.internal-id = Internal Id +org.dspace.checker.SimpleReporterImpl.name = Name +org.dspace.checker.SimpleReporterImpl.no-bitstreams-changed = There were no bitstreams found with changed checksums +org.dspace.checker.SimpleReporterImpl.no-bitstreams-to-delete = There were NO bitstreams found to be set as deleted today +org.dspace.checker.SimpleReporterImpl.no-bitstreams-to-no-longer-be-processed = There were no bitstreams set to no longer be processed +org.dspace.checker.SimpleReporterImpl.no-changed-bitstreams = There were no bitstreams found with changed checksums +org.dspace.checker.SimpleReporterImpl.no-unchecked-bitstreams = There are no bitstreams that are not checked by the checker +org.dspace.checker.SimpleReporterImpl.process-end-date = Process End Date +org.dspace.checker.SimpleReporterImpl.process-start-date = Process Start Date +org.dspace.checker.SimpleReporterImpl.result = Result +org.dspace.checker.SimpleReporterImpl.size = Size +org.dspace.checker.SimpleReporterImpl.source = Source +org.dspace.checker.SimpleReporterImpl.store-number = Store Number +org.dspace.checker.SimpleReporterImpl.unchecked-bitstream-report = The following is a UN-CHECKED BITSTREAM REPORT report for +org.dspace.content.Collection.untitled = Untitled +org.dspace.content.Community.untitled = Untitled +org.dspace.eperson.LDAPAuthentication.title = Enter LDAP Netid and Password +org.dspace.eperson.PasswordAuthentication.title = Enter DSpace Username and Password +org.dspace.eperson.X509Authentication.title = Enter DSpace using Web Certificate +org.dspace.authenticate.ShibAuthentication.title = Login via Shibboleth +org.dspace.eperson.Subscribe.authors = Authors: +org.dspace.eperson.Subscribe.id = ID: +org.dspace.eperson.Subscribe.new-items = New Items: +org.dspace.eperson.Subscribe.title = Title: +org.dspace.statistics.util.LocationUtils.unknown-continent = Unknown Continent +org.dspace.statistics.util.LocationUtils.unknown-country = Unknown Country +org.dspace.workflow.WorkflowManager.step1 = It requires reviewing. +org.dspace.workflow.WorkflowManager.step2 = The submission must be checked before inclusion in the archive. +org.dspace.workflow.WorkflowManager.step3 = The metadata needs to be checked to ensure compliance with the collection's standards, and edited if necessary. +org.dspace.workflow.WorkflowManager.untitled = Untitled + +search.order.asc = Ascending +search.order.desc = Descending +search.results.etal = Authors/record +search.results.order = In order +search.results.perpage = Results/Page +search.results.sort-by = Sort items by +search.sort-by.relevance = Relevance +search.sort-by.title = Title +search.sort-by.dateissued = Issue Date +search.sort-by.dateaccessioned = Submit Date +# used by discovery (standard sort index <metadata>_sort) +search.sort-by.dc.title_sort = Title +# used by discovery (date sort index <metadata>_dt) +search.sort-by.dc.date.issued_dt = Issue Date +search.update = Update + +# authority-control confidence levels, descriptions: +jsp.authority.confidence.description.unset = Confidence was never recorded for this value +jsp.authority.confidence.description.novalue = No reasonable confidence value was returned from the authority +jsp.authority.confidence.description.rejected = The authority recommends this submission be rejected +jsp.authority.confidence.description.failed = The authority encountered an internal failure +jsp.authority.confidence.description.notfound = There are no matching answers in the authority +jsp.authority.confidence.description.ambiguous = There are multiple matching authority values of equal validity +jsp.authority.confidence.description.uncertain = Value is singular and valid but has not been seen and accepted by a human so it is still uncertain +jsp.authority.confidence.description.accepted = This authority value has been confirmed as accurate by an interactive user + +jsp.tools.lookup.title = DSpace Value Lookup +jsp.tools.lookup.heading = Looking Up Value +jsp.tools.lookup.accept = Accept +jsp.tools.lookup.add = Add +jsp.tools.lookup.cancel = Cancel +jsp.tools.lookup.more = See More Results +jsp.tools.lookup.fail = Failed to load choice data: +jsp.tools.lookup.results = Results @1@ to @2@ of @3@ for "@4@" +jsp.tools.lookup.lookup = Lookup this value + +# choice lookup example for dc.publisher +jsp.tools.lookup.field.dc_publisher.help = Name of Publisher +jsp.tools.lookup.field.dc_publisher.title = Look up Publisher +jsp.tools.lookup.field.dc_publisher.nonauthority = Non-authority value: @1@ + +# choice lookup example for dc.contributor.author +jsp.tools.lookup.field.dc_contributor_author.help = Name in "Last, First" format +jsp.tools.lookup.field.dc_contributor_author.help.last = Last name, e.g. "Smith" +jsp.tools.lookup.field.dc_contributor_author.help.first = First name(s) e.g. "Fred" +jsp.tools.lookup.field.dc_contributor_author.title = LC Name Authority author lookup +jsp.tools.lookup.field.dc_contributor_author.nonauthority = Local value '@1@' (not in Naming Authority) + +# reset password +jsp.dspace-admin.eperson-main.ResetPassword.title = Reset password +jsp.dspace-admin.eperson-main.ResetPassword.head = Reset password +jsp.dspace-admin.eperson-main.ResetPassword.submit = Reset password +jsp.dspace-admin.eperson-main.ResetPassword.success_notice = An email message has been sent to the user containing a token that may be used to choose a new password. +jsp.dspace-admin.eperson-main.ResetPassword-error.errormsg = Sorry, an error has occurred when the system try to send email with instructions. +jsp.dspace-admin.eperson-main.ResetPassword.returntoedit = Return to the Administer EPeople page + +# login as +jsp.dspace-admin.eperson-main.LoginAs.submit = Login As +jsp.dspace-admin.eperson-main.loginAs.authorize.errormsg = Reason: you may not assume the login as another administrator. +jsp.dspace-admin.eperson-main.loginAs.authorize.title = Authorization Error +jsp.dspace-admin.eperson-main.loginAs.backtoeditpeople = Back to E-people Admin page + +org.dspace.app.webui.jsptag.access-setting.legend = Embargo +org.dspace.app.webui.jsptag.access-setting.label_name = Name\: +org.dspace.app.webui.jsptag.access-setting.label_group = Groups\: +org.dspace.app.webui.jsptag.access-setting.label_embargo = Access for selected group: +org.dspace.app.webui.jsptag.access-setting.label_reason = Reason\: +org.dspace.app.webui.jsptag.access-setting.label_date = Embargo Date\: +org.dspace.app.webui.jsptag.access-setting.radio0 = Allow access once item is accepted into archive +org.dspace.app.webui.jsptag.access-setting.radio1 = Embargo until specific date +org.dspace.app.webui.jsptag.access-setting.radio_help = The first day from which access is allowed. Accepted format: yyyy, yyyy-mm, yyyy-mm-dd +org.dspace.app.webui.jsptag.access-setting.button_confirm = Confirm Policy & another +org.dspace.app.webui.jsptag.policies-list.label_name = Name +org.dspace.app.webui.jsptag.policies-list.label_action = Action +org.dspace.app.webui.jsptag.policies-list.label_group = Group +org.dspace.app.webui.jsptag.policies-list.label_sdate = Start Date +org.dspace.app.webui.jsptag.policies-list.label_edate = End Date +org.dspace.app.webui.jsptag.policies-list.no_policies = No group policies have been set up for this item + +org.dspace.app.webui.jsptag.access-setting.name_help = A short, descriptive name for the policy (up to 30 characters). May be shown to end users. Example: "Staff-only". Optional but recommended. +org.dspace.app.webui.jsptag.access-setting.reason_help = The reason for the embargo, typically for internal use only. Optional. + +jsp.layout.navbar-admin.accesscontrol = Access Control +jsp.layout.navbar-admin.contents = Content +jsp.layout.navbar-admin.settings = General Settings + +jsp.submit.start-lookup-submission.title = New submission +jsp.submit.start-lookup-submission.heading = New submission: get data from bibliographic external service +jsp.submit.start-lookup-submission.tabs.search = Search Form +jsp.submit.start-lookup-submission.tabs.result = Results +jsp.submit.start-lookup-submission.identifiers = Search for identifier + +jsp.submit.start-lookup-submission.identifiers.hints = Fill in publication identifiers (DOI is preferable) and then press "Search". A list of all matching publications will be shown to you to select in order to proceed with the submission process. +jsp.submit.start-lookup-submission.identifier-doi = DOI (Digital Object Identifier) +jsp.submit.start-lookup-submission.identifier-doi.hint = e.g. 10.1021/ac0354342 +jsp.submit.start-lookup-submission.identifier-pubmed = PubMed ID +jsp.submit.start-lookup-submission.identifier-pubmed.hint = e.g. 20524090 +jsp.submit.start-lookup-submission.identifier-arxiv = arXiv ID +jsp.submit.start-lookup-submission.identifier-arxiv.hint = e.g. arXiv:1302.1497 +jsp.submit.start-lookup-submission.identifier-cinii = CiNii NAID +jsp.submit.start-lookup-submission.identifier-cinii.hint = e.g. 110004744915 +jsp.submit.start-lookup-submission.search = Free search + +jsp.submit.start-lookup-submission.search.hints = Insert base info about publication: either <b>title</b> or <b>author/year</b> is required.<br/>If you know any unique identifier about publication like <b>DOI</b>, <b>Pubmed</b>, or <b>arXiv</b> you can switch on the <span id="link-ricerca-identificatore">identifier search mode</span>. +jsp.submit.start-lookup-submission.search.title = Title +jsp.submit.start-lookup-submission.search.year = Year +jsp.submit.start-lookup-submission.search.authors = Authors/Publishers +jsp.submit.start-lookup-submission.identifier.lookup = Search +jsp.submit.start-lookup-submission.search-go = Search +jsp.submit.start-lookup-submission.exit = Exit +jsp.submit.start-lookup-submission.search-loading.title = Loading... +jsp.submit.start-lookup-submission.search-loading.hint = Quering the external service to retrieve the requested publications. Please, wait for the request to complete. if you close this window, the request will be aborted. +jsp.submit.edit-metadata.affiliation.select = Multiple possible matches, please select one to proceed! +jsp.submit.edit-metadata.affiliation.other = Other +jsp.submit.start-lookup-submission.no-collection = No collection selected +jsp.submit.start-lookup-submission.no-collection-warn.title = Warning, no collection +jsp.submit.start-lookup-submission.no-collection-warn.hint = The collection of the publication is required. +jsp.submit.start-lookup-submission.manual-submission = Default mode Submission +jsp.submit.start-lookup-submission.button.manual-submission = Manual submission +jsp.submit.start-lookup-submission.select.collection.label = Select collections: +jsp.submit.start-lookup-submission.select.collection.defaultoption = Select... +jsp.submit.start-lookup-submission.noresult = No results available! + +jsp.submit.start-lookup-submission.js.errormessage = Sorry, an error occurred. Try again. If this message shows again, please, contact administrators and continue to insert the submission manually. Thank you! +jsp.submit.start-lookup-submission.js.detailsbuttonmessage = See details & import the record +jsp.submit.start-lookup-submission.js.filldataandstartbuttonmessage = Fill data and start submission +jsp.submit.start-lookup-submission.js.titlepopupmessage = Publication details +jsp.submit.start-lookup-submission.no-collection.dialog.return = I understand + +jsp.submit.start-lookup-submission.byfile = Upload a file +jsp.submit.start-lookup-submission.byfile.process = Process +jsp.submit.start-lookup-submission.byfile.hints = Select a file to upload and its type from the drop-down menu. If "Preview Mode" is enabled, the list of the publications in the file will be shown to you to select the one for submission. If it is disabled, all publications will be imported in your MyDSpace page as "Unfinished Submissions" while the first one will go through the submission process. +jsp.submit.start-lookup-submission.byfile.chooseprovider = Select data type +jsp.submit.start-lookup-submission.byfile.file = File +jsp.submit.start-lookup-submission.byfile.filepreview = Preview mode +jsp.submit.start-lookup-submission.byfile.filecollection = Collection + +#Versioning +jsp.general.version.button = Create version of this item +jsp.general.version.history.button = Show version history + +jsp.dspace-admin.version-summary.title = Create Version +jsp.dspace-admin.version-summary.heading = Version +jsp.dspace-admin.version-summary.text3 = Create new version of item: {0} +jsp.version.version-summary.submit_version = Version + +jsp.dspace-admin.version-summary.text = Reason for creating new version + +jsp.version.history.delete.success.message = Ok, version/versions has been removed +jsp.version.history.delete.warning.head1 = Confirm Deletion(s) +jsp.version.history.delete.warning.para1 = Are you sure you want to delete these versions? +jsp.version.history.delete.warning.para2 = PLEASE NOTE: That by deleting these versions, the associated items will no longer be accessible. + +jsp.version.history.title = Version History +jsp.version.history.head2 = Version History +jsp.version.history.column1 = Version +jsp.version.history.column2 = Item +jsp.version.history.column3 = Editor +jsp.version.history.column4 = Date +jsp.version.history.column5 = Summary +jsp.version.history.restore = Restore +jsp.version.history.update = Edit +jsp.version.history.legend = <span class="glyphicon glyphicon-asterisk"></span> Selected version +jsp.version.history.delete = Delete Versions +jsp.version.history.return = Return +jsp.version.history.popup.delete = Yes +jsp.version.history.popup.close = No + +jsp.version.notice.new_version_head = Notice +jsp.version.notice.new_version_help = This is not the latest version of this item. The latest version can be found at: +jsp.version.notice.workflow_version_head = Notice +jsp.version.notice.workflow_version_help = A more recent version of this item is in the Workflow. + +itemRequest.all = All files +itemRequest.response.subject.approve = Request copy of document +itemRequest.response.body.approve = Dear {0},\n\ +In response to your request I have the pleasure to send you in attachment a copy of the file(s) concerning the document: "{2}" ({1}), of which I am author (or co-author).\n\n\ +Best regards,\n\ +{3} <{4}> + +itemRequest.response.subject.reject = Request copy of document +itemRequest.response.body.reject = Dear {0},\n\ +In response to your request I regret to inform you that it''s not possible to send you a copy of the file(s) you have requested, concerning the document: "{2}" ({1}), of which I am author (or co-author).\n\n\ +Best regards,\n\ +{3} <{4}> +jsp.request.item.request-form.info2 = Request a document copy: {0} +jsp.request.item.request-form.problem = You must fill all the missing fields. +jsp.request.item.request-form.reqname = Requester name: +jsp.request.item.request-form.email = Requester e-mail: +jsp.request.item.request-form.coment = Message: +jsp.request.item.request-form.go = Send +jsp.request.item.request-form.cancel = Cancel +jsp.request.item.request-form.allfiles = Files: +jsp.request.item.request-form.yes = all files (of this document) in restricted access +jsp.request.item.request-form.no = the file(s) you requested +jsp.request.item.request-form.title = Request a document copy +jsp.request.item.request-information.info1 = Subject: Request a document copy +jsp.request.item.request-information.info2 = IF YOU ARE AN AUTHOR OF THE DOCUMENT, {0}, use one of the buttons below to answer the request for a copy made by the user, {1}. +jsp.request.item.request-information.note = This repository will propose an appropriate model reply, which you may edit. +jsp.request.item.request-information.yes = Send a copy +jsp.request.item.request-information.no = Don’t send a copy +jsp.request.item.request-information.title = Request a document copy +jsp.request.item.request-letter.accept.heading = Accept the request +jsp.request.item.request-letter.accept.info = This is the email that will be sent to the requester along with the file(s). +jsp.request.item.request-letter.reject.heading = Reject the request +jsp.request.item.request-letter.reject.info = This is the email that will be sent to the requester. +jsp.request.item.request-letter.subject = Subject: +jsp.request.item.request-letter.message = Message: +jsp.request.item.request-letter.title = Copy of the requested document +jsp.request.item.request-letter.next = Send +jsp.request.item.request-letter.back = Back +jsp.request.item.return-item = Return to the item +jsp.request.item.response-send.info1 = Your answer was sent successfully! +jsp.request.item.response-send.info2 = Your answer was sent successfully to the e-mail indicated by the requester.<br><br>Thank you. +jsp.request.item.response-send.title = Request a document copy +jsp.request.item.request-send.info1 = Your request was sent successfully! +jsp.request.item.request-send.info2 = Your request was sent successfully to the author(s).<br><br>Thank you. +jsp.request.item.request-send.title = Request a document copy +jsp.request.item.request-free-acess.title = Your answer was sent successfully! +jsp.request.item.request-free-acess.info1 = Your answer was sent successfully to the e-mail indicated by the requester. Thank you. +jsp.request.item.request-free-acess.info2 = You may use this occasion to reconsider the access restrictions on the document (to avoid having to respond to these requests), if there is no reason to keep it restricted. To do so, after inserting your name and e-mail (for authentication), click the button "Change to Open Access". +jsp.request.item.request-free-acess.close = Close. +jsp.request.item.request-free-acess.free = Change to Open Access +jsp.request.item.request-free-acess.name = Name: +jsp.request.item.request-free-acess.email = E-mail: +org.dspace.app.requestitem.RequestItemMetadataStrategy.unnamed = Corresponding Author +org.dspace.app.webui.jsptag.ItemTag.restrict = <span class="glyphicon glyphicon-lock"> </span> Request a copy diff --git a/dspace/modules/additions/src/main/resources/Messages_pt_BR.properties b/dspace/modules/additions/src/main/resources/Messages_pt_BR.properties new file mode 100644 index 0000000..51bec54 --- /dev/null +++ b/dspace/modules/additions/src/main/resources/Messages_pt_BR.properties @@ -0,0 +1,1843 @@ +# +# The contents of this file are subject to the license and copyright +# detailed in the LICENSE and NOTICE files at the root of the source +# tree and available online at +# +# http://www.dspace.org/license/ +# + +browse.page-title = Buscando no reposit\u00f3rio +browse.et-al = et al + +browse.type.metadata.author = Autor +browse.type.metadata.subject = Assunto +browse.type.item.title = T\u00edtulo +browse.type.item.dateissued = Data do documento +browse.type.item.dateaccessioned = Data de dep\u00f3sito + +browse.nav.jump = Ir para: +browse.nav.enter = ou entre com as primeiras letras: +browse.nav.go = Ir +browse.nav.date.jump = Ir para a p\u00e1gina inicial +browse.nav.month = (Escolha o m\u00eas) +browse.nav.year = (Escolha o ano) +browse.nav.type-year = Ou digite o ano: + +browse.full.header = Navegando {0} por +browse.full.sort-by = Classificar por: +browse.full.order = Em ordem: +browse.full.rpp = Resultados/P\u00e1gina +browse.full.range = Mostrando resultados {0} a {1} de {2} +browse.full.prev = Anterior +browse.full.next = Pr\u00f3ximo +browse.full.etal = Registro(s): +browse.full.etal.unlimited = Todos + +browse.single.header = Navegando {0} por +browse.single.order = Ordem: +browse.single.rpp = Resultados/P\u00e1gina +browse.single.range = Mostrando resultados {0} a {1} de {2} +browse.single.prev = Anterior +browse.single.next = Pr\u00f3ximo + +browse.no-results.col = N\u00e3o h\u00e1 documentos nesta cole\u00e7\u00e3o "{0}". +browse.no-results.com = N\u00e3o h\u00e1 documentos nesta comunidade "{0}". +browse.no-results.genericScope = N\u00e3o h\u00e1 documentos dispon\u00edveis no reposit\u00f3rio de acordo com a sua solicita\u00e7\u00e3o. +browse.no-results.title = N\u00e3o h\u00e1 documentos + +browse.menu.author = Todos os autores +browse.menu.subject = Assunto +browse.menu.title = T\u00edtulo +browse.menu.dateissued = Data do documento +browse.menu.dateaccessioned = Data de dep\u00f3sito + +browse.sort-by.title = T\u00edtulo +browse.sort-by.dateissued = Data do documento +browse.sort-by.dateaccessioned = Data de dep\u00f3sito + +browse.order.asc = Ascendente +browse.order.desc = Descendente + +feedback.error.forbidden = O e-mail de feedback s\u00f3 poder\u00e1 ser chamado por uma outra p\u00e1gina do DSpace. + +help.collection-admin = /help/collection-admin.html +help.index = /help/index.html +help.site-admin = /help/site-admin.html +help.formats = /help/formats.jsp + +itemlist.dc.contributor.* = Autor(es) itemlist.dc.contributor.author = Autor(es) +itemlist.dc.contributor.author = Autor(es) +itemlist.dc.creator = Autor(es) +itemlist.dc.date.defense = Data de defesa +itemlist.dc.date.issued = Data do documento +itemlist.dc.title = T\u00edtulo +itemlist.dc.type = Tipo +itemlist.dc.type = Tipo itemlist.dc.type.* = Tipo itemlist.dc.type.course = Curso itemlist.dc.type.degree = Grau +itemlist.dc.type.course = Curso +itemlist.dc.type.degree = Grau +itemlist.et-al = et al +itemlist.thumbnail = Pr\u00e9-visualiza\u00e7\u00e3o + +itemlist.title.undefined = N\u00e3o definido + +jsp.adminhelp = <span class="glyphicon glyphicon-question-sign"></span> +jsp.administer = Administrador +jsp.admintools = Ferramentas do administrador +jsp.actiontools = A\u00e7\u00f5es +jsp.browse.authors.enter = ou insira as primeiras letras: +jsp.browse.authors.jump = Ir para: +jsp.browse.authors.show = Mostrando autores {0}-{1} de {2}. +jsp.browse.authors.title = Busca por autor +jsp.browse.general.go = Ir +jsp.browse.general.next = Pr\u00f3xima p\u00e1gina +jsp.browse.general.previous = P\u00e1gina anterior +jsp.browse.items-by-author.heading1 = Itens por autor +jsp.browse.items-by-author.return = Retornar a busca por autor +jsp.browse.items-by-author.show = Mostrando {0} itens. +jsp.browse.items-by-author.sort1 = Ordenado por t\u00edtulo +jsp.browse.items-by-author.sort2 = Ordenado por data +jsp.browse.items-by-author.sort3 = Ordenado por t\u00edtulo +jsp.browse.items-by-author.sort4 = Ordenado por data +jsp.browse.items-by-author.title = Itens por autor +jsp.browse.items-by-date.jump = Ir para a p\u00e1gina inicial do reposit\u00f3rio: +jsp.browse.items-by-date.month = (Escolha o m\u00eas) +jsp.browse.items-by-date.old = Mostrar o mais antigo primeiro +jsp.browse.items-by-date.order1 = Ordenado pelo mais recente primeiro +jsp.browse.items-by-date.order2 = Ordenado pelo mais antigo primeiro +jsp.browse.items-by-date.recent = Mostrar o mais recente primeiro +jsp.browse.items-by-date.show = Mostrando itens {0}-{1} de {2}. +jsp.browse.items-by-date.title = Busca por data +jsp.browse.items-by-date.type = Ou insira o ano: +jsp.browse.items-by-date.year = (Escolha o ano) +jsp.browse.items-by-subject.heading1 = Itens por assunto +jsp.browse.items-by-subject.return = Voltar a busca por assunto +jsp.browse.items-by-subject.show = Mostrando {0} itens. +jsp.browse.items-by-subject.sort1 = Ordenado por t\u00edtulo +jsp.browse.items-by-subject.sort2 = Ordenado por data +jsp.browse.items-by-subject.sort3 = Ordenado por t\u00edtulo +jsp.browse.items-by-subject.sort4 = Ordenado por data +jsp.browse.items-by-subject.title = Itens por assunto +jsp.browse.items-by-title.enter = ou insira as primeiras letras: +jsp.browse.items-by-title.jump = Ir para: +jsp.browse.items-by-title.show = Mostrando itens{0}-{1} de {2}. +jsp.browse.items-by-title.title = Navegar por t\u00edtulo +jsp.browse.no-results.col = N\u00e3o existem itens novos nesta cole\u00e7\u00e3o"{0}". +jsp.browse.no-results.com = N\u00e3o existem itens novos nesta comunidade"{0}". +jsp.browse.no-results.genericScope = N\u00e3o existem itens novos na p\u00e1gina inicial +jsp.browse.no-results.title = N\u00e3o existem itens novos na p\u00e1gina inicial +jsp.browse.subject.enter = ou insira as primeiras letras +jsp.browse.subject.jump = Ir para: +jsp.browse.subject.show = Mostrando assuntos {0}-{1} de {2}. +jsp.browse.subject.title = Navegar por assunto +jsp.collection-home.editsub.button = Editar depositantes +jsp.collection-home.content.range = Cole\u00e7\u00e3o +jsp.collection-home.feeds = RSS Feeds +jsp.collection-home.heading1 = P\u00e1gina principal da cole\u00e7\u00e3o +jsp.collection-home.info = Ver Assinaturas +jsp.collection-home.item.button = Item mapeado +jsp.collection-home.recentsub = Submiss\u00f5es Recentes +jsp.collection-home.submit.button = Submeter a esta cole\u00e7\u00e3o +jsp.collection-home.subscribe = Assinar +jsp.collection-home.subscribe.msg = Assinar esta cole\u00e7\u00e3o para receber notifica\u00e7\u00f5es por e-mail de cada item inserido +jsp.collection-home.subscribed = Voc\u00ea assinou esta cole\u00e7\u00e3o. +jsp.collection-home.unsub = Cancelar assinatura +jsp.collection-home.display-statistics = Visualizar estat\u00edsticas +jsp.community-home.create1.button = Criar cole\u00e7\u00e3o +jsp.community-home.create2.button = Criar subcomunidade +jsp.community-home.feeds = RSS Feeds +jsp.community-home.heading1 = P\u00e1gina inicial da comunidade +jsp.community-home.heading2 = Cole\u00e7\u00f5es desta comunidade +jsp.community-home.heading3 = Subcomunidades desta comunidade +jsp.community-home.recentsub = Novos documentos depositados +jsp.community-home.display-statistics = Visualizar estat\u00edsticas +jsp.community-list.create.button = Criar comunidades +jsp.community-list.text1 = Voc\u00ea encontrar\u00e1 abaixo uma lista de comunidades, subcomunidades e cole\u00e7\u00f5es presentes neste reposit\u00f3rio +jsp.community-list.title = Comunidades e cole\u00e7\u00f5es +jsp.components.contact-info.details = Deixe uma mensagem para os administradores do {0}. +jsp.components.ldap-form.enter = Insira seu nome de usu\u00e1rio e senha no espa\u00e7o abaixo +jsp.components.ldap-form.login.button = Entrar +jsp.components.ldap-form.newuser = Usu\u00e1rio novo? Clique aqui para se registrar +jsp.components.ldap-form.password = Senha: +jsp.components.ldap-form.username-or-email = Nome de usu\u00e1rio <br/>ou endere\u00e7o de e-mail: +jsp.components.login-form.email = Endere\u00e7o de e-mail: +jsp.components.login-form.enter = Digite seu endere\u00e7o de e-mail e senha nos espa\u00e7os abaixo +jsp.components.login-form.forgot = Esqueceu sua senha? +jsp.components.login-form.login = Entrar +jsp.components.login-form.newuser = Usu\u00e1rio novo? Clique aqui para se registrar +jsp.components.login-form.password = Senha: +jsp.controlledvocabulary.controlledvocabulary.clearbutton = Excluir +jsp.controlledvocabulary.controlledvocabulary.closebutton = Fechar +jsp.controlledvocabulary.controlledvocabulary.filter = Filtrar: +jsp.controlledvocabulary.controlledvocabulary.help-link = (Ajuda no preenchimento) +jsp.controlledvocabulary.controlledvocabulary.title = Selecionar valor +jsp.controlledvocabulary.controlledvocabulary.trimbutton = Aplicar +jsp.controlledvocabulary.controlledvocabulary.trimmessage = Buscar um assunto em um vocabul\u00e1rio controlado: +jsp.controlledvocabulary.controlledvocabularytag.noresults = Nenhum resultado +jsp.controlledvocabulary.results.newsearch = Buscar outro assunto +jsp.controlledvocabulary.search.clearbutton = Limpar busca +jsp.controlledvocabulary.search.filter = Filtrar: +jsp.controlledvocabulary.search.heading = Busca por assunto +jsp.controlledvocabulary.search.on-page-help.para1 = Marque ao lado as categorias que voc\u00ea deseja buscar e, em seguida, clique em "Buscar". Categorias podem ser expandidas afim de refinar os termos de busca. Caso seja necess\u00e1rio, voc\u00ea pode selecionar mais de uma. +jsp.controlledvocabulary.search.on-page-help.para2 = Ao filtrar a lista de categorias, ser\u00e3o removidas da lista abaixo qualquer categoria que n\u00e3o se adequar ao filtro do termo. Expandindo cada categoria ser\u00e3o mostrados quais termos se adequam ao filtro. +jsp.controlledvocabulary.search.searchbutton = Buscar +jsp.controlledvocabulary.search.title = Buscar por assunto +jsp.controlledvocabulary.search.trimbutton = Aplicar +jsp.controlledvocabulary.search.trimmessage = Buscar um assunto em um vocabul\u00e1rio controlado: +jsp.display-item.back_to_workspace = Voltar a \u00e1rea de trabalho +jsp.display-item.copyright = Os itens no reposit\u00f3rio est\u00e3o protegidos por copyright, com todos os direitos reservados, salvo quando \u00e9 indicado o contr\u00e1rio. +jsp.display-item.identifier = Use este identificador para citar ou linkar para este item: +jsp.display-item.license = Licen\u00e7a Creative Commons +jsp.display-item.suggest = Recomendar este item +jsp.display-item.text1 = Mostrar registro simples do item +jsp.display-item.text2 = Mostrar registro completo do item +jsp.display-item.text3 = Este item est\u00e1 licenciada sob uma +jsp.display-item.display-statistics = Visualizar estat\u00edsticas +jsp.dspace-admin.authorize-advanced.add = Adicionar pol\u00edtica +jsp.dspace-admin.authorize-advanced.advanced = Gerenciar pol\u00edticas avan\u00e7adas +jsp.dspace-admin.authorize-advanced.clear = Deletar pol\u00edticas +jsp.dspace-admin.authorize-advanced.col = Cole\u00e7\u00e3o: +jsp.dspace-admin.authorize-advanced.text = Permite que voc\u00ea acrescente "curingas" para complementa\u00e7\u00e3o de pol\u00edticas e tipos de conte\u00fado contidos em uma cole\u00e7\u00e3o. Aten\u00e7\u00e3o, excluir as permiss\u00f5es de leitura dos itens far\u00e1 com que eles n\u00e3o estejam vis\u00edveis +jsp.dspace-admin.authorize-advanced.type = Tipo de conte\u00fado: +jsp.dspace-admin.authorize-advanced.type1 = item +jsp.dspace-admin.authorize-advanced.type2 = arquivo bin\u00e1rio +jsp.dspace-admin.authorize-advanced.warning = (aviso: ao deletar o sistema apagar\u00e1 todas as pol\u00edticas de um determinado conjunto de objetos) +jsp.dspace-admin.authorize-collection-edit.policies = Pol\u00edticas de cole\u00e7\u00e3o "{0}" ({1}, DB ID {2}) +jsp.dspace-admin.authorize-collection-edit.title = Editar pol\u00edticas de cole\u00e7\u00e3o +jsp.dspace-admin.authorize-community-edit.policies = Pol\u00edticas por comunidade "{0}" ({1}, DB ID {2}) +jsp.dspace-admin.authorize-community-edit.title = Editar pol\u00edticas de comunidades +jsp.dspace-admin.authorize-item-edit.bitstream = Bitstream {0} ({1}) +jsp.dspace-admin.authorize-item-edit.bundle = Pol\u00edticas por Bundle {0} ({1}) +jsp.dspace-admin.authorize-item-edit.eperson = Usu\u00e1rio +jsp.dspace-admin.authorize-item-edit.item = Pol\u00edticas por item +jsp.dspace-admin.authorize-item-edit.policies = Pol\u00edticas por item {0} (ID = {1}) +jsp.dspace-admin.authorize-item-edit.text1 = Com este editor voc\u00ea pode visualizar e alterar as pol\u00edticas de um item, al\u00e9m de alterar as pol\u00edticas de componentes de itens individuais: pacotes e arquivos bin\u00e1rios. Resumidamente, um item \u00e9 um recipiente de pacotes e pacotes s\u00e3o recipientes de arquivos bin\u00e1rios. Recipientes geralmente t\u00eam pol\u00edticas para Adicionar / Excluir / Ler / Escrever, enquanto arquivos bin\u00e1rios s\u00f3 pol\u00edticas de leitura/escrita. +jsp.dspace-admin.authorize-item-edit.text2 = Voc\u00ea vai notar um bundle e arquivos bin\u00e1rios extras para cada item, e aqueles que cont\u00eam o texto da licen\u00e7a para o item. +jsp.dspace-admin.authorize-item-edit.title = Editar pol\u00edticas de de itens +jsp.dspace-admin.authorize-main.adm = Administrar pol\u00edticas de autoriza\u00e7\u00e3o +jsp.dspace-admin.authorize-main.advanced = Ferramenta de administra\u00e7\u00e3o de pol\u00edtica +jsp.dspace-admin.authorize-main.choose = Escolha um recurso de gest\u00e3o de pol\u00edticas para: +jsp.dspace-admin.authorize-main.manage1 = Gerenciar pol\u00edticas de uma comunidade +jsp.dspace-admin.authorize-main.manage2 = Gerenciar pol\u00edticas de uma cole\u00e7\u00e3o +jsp.dspace-admin.authorize-main.manage3 = Gerenciar pol\u00edticas de um item +jsp.dspace-admin.authorize-main.title = Administrar pol\u00edticas de autoriza\u00e7\u00e3o +jsp.dspace-admin.authorize-policy-edit.heading = Editar pol\u00edtica por {0}: +jsp.dspace-admin.authorize-policy-edit.title = Editar pol\u00edtica +jsp.dspace-admin.collection-select.col = Cole\u00e7\u00f5es +jsp.dspace-admin.collection-select.title = Selecionar cole\u00e7\u00e3o +jsp.dspace-admin.community-select.com = Comunidades\: +jsp.dspace-admin.community-select.title = Selecionar comunidade +jsp.dspace-admin.confirm-delete-format.confirm = Tem certeza que o campo <strong>{0}</strong> deve ser deletado? +jsp.dspace-admin.confirm-delete-format.heading = Deletar formato Bitstream: {0} +jsp.dspace-admin.confirm-delete-format.returntoedit = Voltar a p\u00e1gina de usu\u00e1rio administrador +jsp.dspace-admin.confirm-delete-format.title = Deletar formato Bitstream +jsp.dspace-admin.confirm-delete-format.warning = Quaisquer arquivos bin\u00e1rios existentes neste formato ser\u00e3o revertidos para um formato de arquivo bin\u00e1rio <em>desconhecido</em> +jsp.dspace-admin.confirm-delete-mdfield.confirm = Tem certeza que o campo <strong>{0}</strong> deve ser deletado? +jsp.dspace-admin.confirm-delete-mdfield.failed = N\u00e3o foi poss\u00edvel deletar este campo de metadados. Isto acontece porque est\u00e1 referenciado por, pelo menos, um item. +jsp.dspace-admin.confirm-delete-mdfield.heading = Deletar campo de metadados: <code>{0}</code> +jsp.dspace-admin.confirm-delete-mdfield.title = Deletar campo de metadados +jsp.dspace-admin.confirm-delete-mdfield.warning = Isso resultar\u00e1 em um erro se todos os itens t\u00eam refer\u00eancias a esse campo de metadados. +jsp.dspace-admin.confirm-delete-mdschema.confirm = Tem certeza que o esquema <strong>{0}</strong> deve ser deletado? +jsp.dspace-admin.confirm-delete-mdschema.heading = Deletar esquema de metadados: <code>{0}</code> +jsp.dspace-admin.confirm-delete-mdschema.title = Deletar esquema de metadados +jsp.dspace-admin.confirm-delete-mdschema.warning = Isso resultar\u00e1 em um erro se todos os itens t\u00eam refer\u00eancias a esse esquema. +jsp.dspace-admin.curate.main.title = Tarefas de curadoria +jsp.dspace-admin.curate.main.heading = Tarefas do sistema de curadoria +jsp.dspace-admin.curate.main.info1 = Handle do objeto do reposit\u00f3rio +jsp.dspace-admin.curate.main.info2 = Ajuda: Informe [seu-handle-prefix]/0 para executar a tarefa sobre todo o site (algumas tarefas n\u00e3o podem ser executadas desta forma) +jsp.dspace-admin.eperson-browse.canlogin = Consigo entrar? +jsp.dspace-admin.eperson-browse.email = Endere\u00e7o de e-mail +jsp.dspace-admin.eperson-browse.heading = Buscar Usu\u00e1rios {0}-{1} de {2} +jsp.dspace-admin.eperson-browse.mustusecert = Necess\u00e1rio usar certificados? +jsp.dspace-admin.eperson-browse.phone = Telefone +jsp.dspace-admin.eperson-browse.self = Auto-registro +jsp.dspace-admin.eperson-browse.title = Usu\u00e1rios +jsp.dspace-admin.eperson-confirm-delete.confirm = Voc\u00ea tem certeza que essa usu\u00e1rio deve ser exclu\u00eddo? +jsp.dspace-admin.eperson-confirm-delete.heading = Deletar usu\u00e1rio: {0} ({1}) +jsp.dspace-admin.eperson-confirm-delete.title = Deletar usu\u00e1rio +jsp.dspace-admin.eperson-deletion-error.errormsg = O usu\u00e1rio {0} n\u00e3o pode ser exclu\u00edda porque existe uma refer\u00eancia a ela na(s) tabela(s) seguinte(s): +jsp.dspace-admin.eperson-deletion-error.heading = N\u00e3o \u00e9 poss\u00edvel deletar usu\u00e1rio +jsp.dspace-admin.eperson-deletion-error.title = Erro ao deletar usu\u00e1rio +jsp.dspace-admin.eperson-edit.can = Pode entrar: +jsp.dspace-admin.eperson-edit.email = E-mail: +jsp.dspace-admin.eperson-edit.emailexists = Este endere\u00e7o de e-mail est\u00e1 em uso por outra usu\u00e1rio.Os e-mails devem ser exclusivos. +jsp.dspace-admin.eperson-edit.groups = O usu\u00e1rio selecionado \u00e9 membro do(s) grupo(s): +jsp.dspace-admin.eperson-edit.heading = Editar usu\u00e1rio {0}: +jsp.dspace-admin.eperson-edit.phone = Telefone: +jsp.dspace-admin.eperson-edit.require = Exigir certificado: +jsp.dspace-admin.eperson-edit.title = Editar usu\u00e1rio +jsp.dspace-admin.eperson-main.add = Adicionar usu\u00e1rio +jsp.dspace-admin.eperson-main.choose = Escolha uma a\u00e7\u00e3o +jsp.dspace-admin.eperson-main.heading = Administrar usu\u00e1rios +jsp.dspace-admin.eperson-main.noepersonselected = Nenhuma usu\u00e1rio selecionado +jsp.dspace-admin.eperson-main.or = OU +jsp.dspace-admin.eperson-main.then = depois +jsp.dspace-admin.eperson-main.title = Administra\u00e7\u00f5es de usu\u00e1rio +jsp.dspace-admin.eperson.general.firstname = Primeiro nome +jsp.dspace-admin.eperson.general.lastname = \u00daltimo nome +jsp.dspace-admin.general.abort = Excluir +jsp.dspace-admin.general.abort-w-confirm = Excluir +jsp.dspace-admin.general.action = A\u00e7\u00e3o +jsp.dspace-admin.general.action-colon = A\u00e7\u00e3o: +jsp.dspace-admin.general.addnew = Adicionar novo +jsp.dspace-admin.general.addpolicy = Adicionar nova pol\u00edtica +jsp.dspace-admin.general.cancel = Cancelar +jsp.dspace-admin.general.delete = Excluir +jsp.dspace-admin.general.delete-w-confirm = Excluir +jsp.dspace-admin.general.edit = Editar +jsp.dspace-admin.general.editpolicy = Editar pol\u00edticas +jsp.dspace-admin.general.eperson = Usu\u00e1rio +jsp.dspace-admin.general.group = Grupo +jsp.dspace-admin.general.group-colon = Grupo: +jsp.dspace-admin.general.next.button = Pr\u00f3ximo +jsp.dspace-admin.general.remove = Excluir +jsp.dspace-admin.general.save = Salvar +jsp.dspace-admin.general.update = Atualizar +jsp.dspace-admin.general.upload = Carregar +jsp.dspace-admin.group-confirm-delete.confirm = Tem certeza que este grupo deve ser deletado? Nota: Deletar este grupo ir\u00e1 excluir todas as pol\u00edticas associadas ao seu grupo. +jsp.dspace-admin.group-confirm-delete.heading = Excluir grupo: {0} +jsp.dspace-admin.group-confirm-delete.title = Excluir grupo +jsp.dspace-admin.group-eperson-select.add = Adicionar usu\u00e1rio +jsp.dspace-admin.group-eperson-select.heading = Selecionar usu\u00e1rio para adicionar ao grupo {0} +jsp.dspace-admin.group-eperson-select.title = Selecionar usu\u00e1rio +jsp.dspace-admin.group-group-select.add = Adicionar grupo +jsp.dspace-admin.group-group-select.heading = Selecionar grupo to Add to Group {0} +jsp.dspace-admin.group-group-select.title = Selecionar grupo +jsp.dspace-admin.batchmetadataimport.title = Importa\u00e7\u00e3o de metadados em lote (BTE) +jsp.dspace-admin.batchmetadataimport.success = O processo foi iniciado, ser\u00e1 enviado um e-mail quando o processo terminar +jsp.dspace-admin.batchmetadataimport.genericerror = Ocorreu um erro! Tente novamente! +jsp.dspace-admin.batchmetadataimport.selectfile = Selecione o arquivo de dados para o upload +jsp.dspace-admin.batchmetadataimport.selectinputfile = Selecione o tipo de dado que ser\u00e1 enviado +jsp.dspace-admin.batchmetadataimport.selectcollection = Selecione a cole\u00e7\u00e3o em que os itens ser\u00e3o importados +jsp.dspace-admin.metadataimport.title = Importar metadados +jsp.dspace-admin.metadataimport.apply = Aceitar altera\u00e7\u00f5es +jsp.dspace-admin.metadataimport.unknownerror = Ocorreu um erro desconhecido +jsp.dspace-admin.metadataimport.badheadingschema = Esquema de metadados desconhecido +jsp.dspace-admin.metadataimport.badheadingelement = Elemento de metadados desconhecido +jsp.dspace-admin.metadataimport.changesforitem = Mudan\u00e7as por item +jsp.dspace-admin.metadataimport.newitem = Novo item +jsp.dspace-admin.metadataimport.addtocollection = Mapear para cole\u00e7\u00e3o +jsp.dspace-admin.metadataimport.addedtocollection = Mapeado para cole\u00e7\u00e3o +jsp.dspace-admin.metadataimport.removefromcollection = Cancelar o mapeamento da cole\u00e7\u00e3o +jsp.dspace-admin.metadataimport.removedfromcollection = Desmapeado da cole\u00e7\u00e3o +jsp.dspace-admin.metadataimport.addtoownercollection = Adicionar a nova cole\u00e7\u00e3o propriet\u00e1ria +jsp.dspace-admin.metadataimport.addedtoownercollection = Adicionado a nova cole\u00e7\u00e3o propriet\u00e1ria +jsp.dspace-admin.metadataimport.removefromownercollection = Excluir de cole\u00e7\u00e3o propriet\u00e1ria +jsp.dspace-admin.metadataimport.removedfromownercollection = Removido de cole\u00e7\u00e3o propriet\u00e1ria +jsp.dspace-admin.metadataimport.add = Adicionar +jsp.dspace-admin.metadataimport.added = Adicionado +jsp.dspace-admin.metadataimport.remove = Excluir +jsp.dspace-admin.metadataimport.removed = Removido +jsp.dspace-admin.metadataimport.delete = Excluir item definitivamente +jsp.dspace-admin.metadataimport.deleted = Item exclu\u00eddo definitivamente +jsp.dspace-admin.metadataimport.withdraw = Retirar item +jsp.dspace-admin.metadataimport.withdrawn = Item retirado +jsp.dspace-admin.metadataimport.reinstate = Reintegrar item +jsp.dspace-admin.metadataimport.reinstated = Item reintegrado +jsp.dspace-admin.metadataimport.toomany = H\u00e1 muitas mudan\u00e7as. Submeta menos mudan\u00e7as, ajuste o limite, ou execute-as diretamente no servidor. +jsp.dspace-admin.metadataimport.finished = {0} mudan\u00e7as conclu\u00eddas com sucesso. +jsp.dspace-admin.index.heading = Ferramentas de administra\u00e7\u00e3o +jsp.dspace-admin.index.text = Selecione uma opera\u00e7\u00e3o nos menus superiores. +jsp.dspace-admin.item-select.enter = Insira o Handle ou ID interno do item que deseja selecionar. +jsp.dspace-admin.item-select.find = Buscar +jsp.dspace-admin.item-select.handle = Handle: +jsp.dspace-admin.item-select.heading = Selecionar um item +jsp.dspace-admin.item-select.id = ID interno: +jsp.dspace-admin.item-select.text = <strong>O ID inserido n\u00e3o \u00e9 v\u00e1lido.</strong> Se voc\u00ea est\u00e1 tentando editar uma comunidade ou cole\u00e7\u00e3o, \u00e9 necess\u00e1rio usar o <a href= +jsp.dspace-admin.item-select.title = Selecionar item +jsp.dspace-admin.license-edit.description = Edite a licen\u00e7a padr\u00e3o tomando por base o texto abaixo. <br> A licen\u00e7a n\u00e3o pode estar vazia. <br/> Certifique-se que a licen\u00e7a a ser utilizada cumpre os requisitos legais do seu pa\u00eds.<br/>As altera\u00e7\u00f5es na licen\u00e7a padr\u00e3o n\u00e3o afetar\u00e3o os itens e cole\u00e7\u00f5es que possuem licen\u00e7as pr\u00f3prias, definidas anteriormente.<br/> Existem algumas vari\u00e1veis de substitui\u00e7\u00e3o que podem ser usadas para criar licen\u00e7as personalizadas, para maiores detalhes, verifique as p\u00e1ginas de ajuda.<br/>Recomenda-se fazer um dep\u00f3sito fict\u00edcio para verificar a altera\u00e7\u00e3o de licen\u00e7a:<b>Verifique a vers\u00e3o final da licen\u00e7a na etapa aceitar/rejeitar licen\u00e7a.</b> +jsp.dspace-admin.license-edit.edited = A licen\u00e7a padr\u00e3o foi atualizada +jsp.dspace-admin.license-edit.empty = Voc\u00ea deve inserir uma licen\u00e7a +jsp.dspace-admin.license-edit.heading = Editor de licen\u00e7a padr\u00e3o +jsp.dspace-admin.license-edit.title = Editar licen\u00e7a padr\u00e3o +jsp.dspace-admin.list-formats.description = Descri\u00e7\u00e3o longa +jsp.dspace-admin.list-formats.extensions = Extens\u00f5es +jsp.dspace-admin.list-formats.internal = Interno? +jsp.dspace-admin.list-formats.known = Conhecido +jsp.dspace-admin.list-formats.mime = MIME Type +jsp.dspace-admin.list-formats.name = Nome +jsp.dspace-admin.list-formats.support = N\u00edvel de suporte +jsp.dspace-admin.list-formats.supported = Apoiado +jsp.dspace-admin.list-formats.text1 = As extens\u00f5es s\u00e3o listas separadas por v\u00edrgulas das extens\u00f5es de arquivo usados para identificar automaticamente os formatos de arquivos enviados. N\u00e3o incluir o ponto. +jsp.dspace-admin.list-formats.text2 = Ao adicionar um formato de arquivo bin\u00e1rio, este n\u00e3o estar\u00e1 vis\u00edvel na interface de dep\u00f3sito do usu\u00e1rio antes do t\u00e9rmino da edi\u00e7\u00e3o dos formatos de metadados. Certifique-se de desmarcar a op\u00e7\u00e3o "vis\u00edvel" se o formato deve aparecer na interface de dep\u00f3sito do usu\u00e1rio. +jsp.dspace-admin.list-formats.title = Registro de formato de arquivos bin\u00e1rios +jsp.dspace-admin.list-formats.unknown = Desconhecido +jsp.dspace-admin.list-metadata-fields.addfield = Adicionar campo de metadado +jsp.dspace-admin.list-metadata-fields.addfieldnote = Para criar um novo campo voc\u00ea deve fornecer um elemento \u00fanico e um par qualificador. O qualificador pode ser deixado em branco se desejar. O mesmo n\u00e3o pode conter espa\u00e7os ou sublinhados. +jsp.dspace-admin.list-metadata-fields.element = Elemento +jsp.dspace-admin.list-metadata-fields.move = Mover campo +jsp.dspace-admin.list-metadata-fields.moveformnote = Caso tenha mais de um esquema aparecendo aqui, voc\u00ea pode mover os campos entre os esquemas. jsp.dspace-admin.list-metadata-fields.moveformnote = Caso tenha mais de um esquema aparecendo aqui, voc\u00ea pode mover os campos entre os esquemas. +jsp.dspace-admin.list-metadata-fields.movenote = Para mover um ou mais campos, selecione os campos desejados (use a tecla control para selecionar v\u00e1rios) e os esquemas de destino. Caso o esquema de destino j\u00e1 tenha campos com nomes id\u00eanticos, os campos n\u00e3o ser\u00e3o movidos. +jsp.dspace-admin.list-metadata-fields.movesubmit = Mover +jsp.dspace-admin.list-metadata-fields.note = Nota: Incluir um novo campo para o registro n\u00e3o adiciona um campo de entrada correspondente \u00e0s formas de dep\u00f3sito. +jsp.dspace-admin.list-metadata-fields.qualifier = Qualificador +jsp.dspace-admin.list-metadata-fields.schema = Esquema +jsp.dspace-admin.list-metadata-fields.schemas = Esquemas +jsp.dspace-admin.list-metadata-fields.scope = Nota de escopo +jsp.dspace-admin.list-metadata-fields.title = Campo de metadados do registro +jsp.dspace-admin.list-metadata-schemas.instruction = Crie um novo esquema inserindo um espa\u00e7o para nome / nome ou para editar um j\u00e1 existente, clicando no bot\u00e3o atualizar. O nome do esquema deve ser inferior a 32 caracteres e n\u00e3o pode ter espa\u00e7os ou sublinhados. +jsp.dspace-admin.list-metadata-schemas.name = Nome +jsp.dspace-admin.list-metadata-schemas.namespace = Espa\u00e7o para nome +jsp.dspace-admin.list-metadata-schemas.title = Registro de esquema de metadados +jsp.dspace-admin.news-edit.heading = Editor de not\u00edcias +jsp.dspace-admin.news-edit.news = Not\u00edcias: +jsp.dspace-admin.news-edit.text.sidebar = Adicione ou edite o texto que aparecer\u00e1 na <strong>barra lateral</strong> da p\u00e1gina principal do reposit\u00f3rio no espa\u00e7o abaixo. +jsp.dspace-admin.news-edit.text.topbox = Adicione ou edite o texto que aparecer\u00e1 na <strong>barra superior</strong> da p\u00e1gina principal do reposit\u00f3rio no espa\u00e7o abaixo. +jsp.dspace-admin.news-edit.text3 = Voc\u00ea pode formatar o texto usando tags HTML, mas note que o HTML n\u00e3o ser\u00e1 validado aqui. +jsp.dspace-admin.news-edit.title = Formul\u00e1rio de edi\u00e7\u00e3o de revistas +jsp.dspace-admin.news-main.heading = Editor de not\u00edcias +jsp.dspace-admin.news-main.news.sidebar = Not\u00edcias da barra lateral +jsp.dspace-admin.news-main.news.top = Not\u00edcias do cabe\u00e7alho +jsp.dspace-admin.news-main.title = Editor de not\u00edcias +jsp.dspace-admin.supervise-confirm-remove.authorheader = Autor +jsp.dspace-admin.supervise-confirm-remove.confirm = Tem certeza que deseja excluir este pedido de supervis\u00e3o? +jsp.dspace-admin.supervise-confirm-remove.heading = Confirmar remo\u00e7\u00e3o +jsp.dspace-admin.supervise-confirm-remove.subheading = Voc\u00ea pediu que a ordem de supervis\u00e3o seguinte fosse removida: +jsp.dspace-admin.supervise-confirm-remove.supervisorgroupheader = Supervisor do grupo +jsp.dspace-admin.supervise-confirm-remove.title = Administrar pedidos de Supervis\u00e3o +jsp.dspace-admin.supervise-confirm-remove.titleheader = T\u00edtulo +jsp.dspace-admin.supervise-duplicate.errormsg = O pedido de supervis\u00e3o n\u00e3o pode ser encaminhado a \u00e1rea de trabalho, pois o grupo que voc\u00ea selecionou j\u00e1 est\u00e1 supervisionando o item selecionado. +jsp.dspace-admin.supervise-duplicate.heading = Falha na opera\u00e7\u00e3o +jsp.dspace-admin.supervise-duplicate.return = Voltar a p\u00e1gina de adiministra\u00e7\u00e3o de supervis\u00e3o +jsp.dspace-admin.supervise-duplicate.title = Administrar pedidos de revis\u00e3o +jsp.dspace-admin.supervise-link.choose = Escolha um grupo, um item na \u00e1rea de trabalho e a defini\u00e7\u00e3o de pol\u00edtica inicial para aplicar: +jsp.dspace-admin.supervise-link.group = Grupo: +jsp.dspace-admin.supervise-link.heading = Administrar pedidos de supervis\u00e3o +jsp.dspace-admin.supervise-link.id = ID +jsp.dspace-admin.supervise-link.policy = Defini\u00e7\u00e3o de pol\u00edtica inicial: +jsp.dspace-admin.supervise-link.policyeditor = Editor +jsp.dspace-admin.supervise-link.policynone = Nenhum +jsp.dspace-admin.supervise-link.policyobserver = Observador +jsp.dspace-admin.supervise-link.select = Selecionar +jsp.dspace-admin.supervise-link.submit.button = Submeter pedido de supervis\u00e3o +jsp.dspace-admin.supervise-link.submittedby = Submetido por +jsp.dspace-admin.supervise-link.submittedto = Submetido para +jsp.dspace-admin.supervise-link.title = T\u00edtulo +jsp.dspace-admin.supervise-link.workspace = \u00c1rea de trabalho a ser supervisionada +jsp.dspace-admin.supervise-list.add.button = Adicionar um pedido de supervis\u00e3o +jsp.dspace-admin.supervise-list.author = Autor do item +jsp.dspace-admin.supervise-list.back.button = Voltar +jsp.dspace-admin.supervise-list.group = Grupo de supervis\u00e3o +jsp.dspace-admin.supervise-list.heading = Atuais pedidos de supervis\u00e3o +jsp.dspace-admin.supervise-list.policies.button = Pol\u00edticas +jsp.dspace-admin.supervise-list.subheading = Esta p\u00e1gina lista todas as configura\u00e7\u00f5es atuais de supervis\u00e3o, com a op\u00e7\u00e3o de excluir qualquer configura\u00e7\u00e3o +jsp.dspace-admin.supervise-list.title = T\u00edtulo do item +jsp.dspace-admin.supervise-no-workspaceitem.no-wsitems = A ordem de supervis\u00e3o n\u00e3o pode ser aplicada porque n\u00e3o existe nenhum item na \u00e1rea de trabalho. +jsp.dspace-admin.supervise-no-workspaceitem.unselected = A ordem de supervis\u00e3o n\u00e3o pode ser aplicada porquenenhum item foi selecionado na \u00e1rea de trabalho. +jsp.dspace-admin.supervise-no-workspaceitem.heading = Falha na opera\u00e7\u00e3o +jsp.dspace-admin.supervise-no-workspaceitem.return = Retornar a p\u00e1gina de administra\u00e7\u00e3o do supervisor +jsp.dspace-admin.supervise-no-workspaceitem.title = Ordens de administra\u00e7\u00e3o do supervisor +jsp.dspace-admin.supervise-main.add.button = Adicionar pedidos de supervis\u00e3o +jsp.dspace-admin.supervise-main.clean.button = Limpar pedidos de supervis\u00e3o da base de dados +jsp.dspace-admin.supervise-main.heading = Administrar pedidos de supervis\u00e3o +jsp.dspace-admin.supervise-main.subheading = Selecione uma das op\u00e7\u00f5es nesta p\u00e1gina +jsp.dspace-admin.supervise-main.title = Administrar pedidos de supervis\u00e3o +jsp.dspace-admin.supervise-main.view.button = Ver atuais pedidos de supervis\u00e3o +jsp.dspace-admin.upload-logo.select.col = Selecione a imagem e fa\u00e7a a carga para a cole\u00e7\u00e3o <strong>{0}</strong> +jsp.dspace-admin.upload-logo.select.com = Selecione uma imagem e fa\u00e7a o upload para adicion\u00e1-la \u00e0 comunidade <strong>{0}</strong> +jsp.dspace-admin.upload-logo.title = Fazer upload de logotipo +jsp.dspace-admin.wizard-basicinfo.choose = Escolha um logotipo em formato JPEG ou GIF para a p\u00e1gina inicial da cole\u00e7\u00e3o. A imagem deve ser muito pequena. +jsp.dspace-admin.wizard-basicinfo.copyright = Texto de copyright: +jsp.dspace-admin.wizard-basicinfo.description = Descri\u00e7\u00e3o curta: +jsp.dspace-admin.wizard-basicinfo.html1 = HTML, mostrado no centro da p\u00e1gina principal cole\u00e7\u00e3o. Certifique-se de colocar nas tags. <P> </P> +jsp.dspace-admin.wizard-basicinfo.html2 = HTML, mostrado do lado direito da p\u00e1gina principal cole\u00e7\u00e3o. Certifique-se de colocar em tags. <P> </P> +jsp.dspace-admin.wizard-basicinfo.intro = Texto introdut\u00f3rio: +jsp.dspace-admin.wizard-basicinfo.license1 = Licen\u00e7a que depositantes devem conceder. Deixe em branco para utilizar a licen\u00e7a padr\u00e3o. +jsp.dspace-admin.wizard-basicinfo.license2 = Licen\u00e7a +jsp.dspace-admin.wizard-basicinfo.logo = Logo: +jsp.dspace-admin.wizard-basicinfo.name = Nome: +jsp.dspace-admin.wizard-basicinfo.plain = Texto simples, mostrado na parte inferior da p\u00e1gina inicial da cole\u00e7\u00e3o. +jsp.dspace-admin.wizard-basicinfo.plain2 = Texto simples, onde ser\u00e3o registradas todas as informa\u00e7\u00f5es sobre a proveni\u00eancia da cole\u00e7\u00e3o. Este n\u00e3o \u00e9 mostrado nas p\u00e1ginas da cole\u00e7\u00e3o. +jsp.dspace-admin.wizard-basicinfo.provenance = Proveni\u00eancia: +jsp.dspace-admin.wizard-basicinfo.shown = Mostrar na p\u00e1gina inicial da comunidade. +jsp.dspace-admin.wizard-basicinfo.side = Texto da barra lateral: +jsp.dspace-admin.wizard-basicinfo.title = Descreva a cole\u00e7\u00e3o +jsp.dspace-admin.wizard-default-item.dcore = Campo de metadados +jsp.dspace-admin.wizard-default-item.enter = Insira o item padr\u00e3o dos metadados +jsp.dspace-admin.wizard-default-item.language = Idioma +jsp.dspace-admin.wizard-default-item.select = Selecionar campo +jsp.dspace-admin.wizard-default-item.text1 = Sempre que um novo dep\u00f3sito \u00e9 adicionada a esta cole\u00e7\u00e3o, os metadados que voc\u00ea inseriu abaixo j\u00e1 estar\u00e3o preenchidos. +jsp.dspace-admin.wizard-default-item.text2 = Voc\u00ea pode deixar v\u00e1rios campos em branco caso prefira +jsp.dspace-admin.wizard-default-item.title = Insira metadado padr\u00e3o +jsp.dspace-admin.wizard-default-item.value = Valor +jsp.dspace-admin.wizard-permissions.change = Voc\u00ea poder\u00e1 alterar isso posteriormente utilizando as se\u00e7\u00f5es adequadas da p\u00e1gina inicial do administrador do reposit\u00f3rio. +jsp.dspace-admin.wizard-permissions.click = Clique no bot\u00e3o "Selecionar usu\u00e1rios" para escolher as pessoas que gostaria adicionar \u00e0 lista. +jsp.dspace-admin.wizard-permissions.click2 = Clique no bot\u00e3o 'Selecionar grupos' para escolher grupos que gostaria de adicionar \u00e0 lista. +jsp.dspace-admin.wizard-permissions.heading1 = Autoriza\u00e7\u00e3o para ler +jsp.dspace-admin.wizard-permissions.heading2 = Autoriza\u00e7\u00e3o para depositar +jsp.dspace-admin.wizard-permissions.heading3 = \u00e1rea de trabalho de dep\u00f3sito. Passo Aceitar/Rejeitar +jsp.dspace-admin.wizard-permissions.heading4 = \u00e1rea de trabalho de dep\u00f3sito. Passo Aceitar/Rejeitar/Editar metadados +jsp.dspace-admin.wizard-permissions.heading5 = \u00e1rea de trabalho de dep\u00f3sito. Passo Editar metadados +jsp.dspace-admin.wizard-permissions.heading6 = Administrar cole\u00e7\u00f5es delegadas +jsp.dspace-admin.wizard-permissions.mit = Todos usu\u00e1rios do MIT +jsp.dspace-admin.wizard-permissions.or = OU +jsp.dspace-admin.wizard-permissions.text1 = Quem (por defini\u00e7\u00e3o padr\u00e3o) tem permiss\u00e3o para ler os arquivos novos desta cole\u00e7\u00e3o? +jsp.dspace-admin.wizard-permissions.text2 = Quem tem permiss\u00e3o para depositar novos itens a esta cole\u00e7\u00e3o? +jsp.dspace-admin.wizard-permissions.text3 = Quem \u00e9 respons\u00e1vel por executar o passo<strong>aceitar/rejeitar</strong>? Eles poder\u00e3o de aceitar ou rejeitar dep\u00f3sitos recebidos. No entanto, eles n\u00e3o poder\u00e3o editar os metadados do dep\u00f3sito. Apenas um do grupo precisa executar o passo para cada dep\u00f3sito. +jsp.dspace-admin.wizard-permissions.text4 = Quem \u00e9 respons\u00e1vel por executar o passo <strong>aceitar/rejeitar/editar metadados</strong>? Eles poder\u00e3o editar os metadados do dep\u00f3sito, e depois aceit\u00e1-los ou rejeit\u00e1-los. Apenas um do grupo precisa executar o passo para cada dep\u00f3sito. +jsp.dspace-admin.wizard-permissions.text5 = Quem \u00e9 respons\u00e1vel por executar o passo <strong>editar metadados</strong> ? Eles poder\u00e3o editar os metadados do dep\u00f3sito, n\u00e3o poder\u00e3o rejeit\u00e1-los. +jsp.dspace-admin.wizard-permissions.text6 = Quem s\u00e3o os administradores desta cole\u00e7\u00e3o? Eles poder\u00e3o escolher quem poder\u00e1 depositar itens, revisar itens, editar metadados dos itens (ap\u00f3s o dep\u00f3sito), e adicionar(mapear) itens existentes em outras cole\u00e7\u00f5es para esta cole\u00e7\u00e3o (sujeito \u00e0s autoriza\u00e7\u00f5es da outra cole\u00e7\u00e3o). +jsp.dspace-admin.wizard-permissions.title = Autoriza\u00e7\u00e3o de cole\u00e7\u00e3o +jsp.dspace-admin.wizard-questions.check1 = Novos itens est\u00e3o dispon\u00edveis +jsp.dspace-admin.wizard-questions.check1-disabled = Apenas o administrador do sistema pode fazer essa altera\u00e7\u00e3o +jsp.dspace-admin.wizard-questions.check2 = Alguns usu\u00e1rios poder\u00e3o depositar nesta cole\u00e7\u00e3o +jsp.dspace-admin.wizard-questions.check3 = Ser\u00e1 incluido um passo <em>aceitar/rejeitar</em> durante o preenchimento dos itens +jsp.dspace-admin.wizard-questions.check4 = Ser\u00e1 incluido um passo <em>aceitar/rejeitar/editar metadados</em> durante o preenchimento dos itens +jsp.dspace-admin.wizard-questions.check5 = Ser\u00e1 incluido um passo <em>editar metadados</em> durante o preenchimento dos itens +jsp.dspace-admin.wizard-questions.check6 = Esta cole\u00e7\u00e3o ter\u00e1 administradores +jsp.dspace-admin.wizard-questions.check7 = Novos dep\u00f3sitos ter\u00e3o alguns metadados previamente preenchidos com respostas padr\u00e3o +jsp.dspace-admin.wizard-questions.text = Marque ao lado as afirma\u00e7\u00f5es que se aplicam \u00e0 cole\u00e7\u00e3o. +jsp.dspace-admin.wizard-questions.title = Descreva a cole\u00e7\u00e3o +jsp.dspace-admin.workflow-abort-confirm.button = Abortar +jsp.dspace-admin.workflow-abort-confirm.collection = Cole\u00e7\u00e3o: {0} +jsp.dspace-admin.workflow-abort-confirm.heading = Deletar \u00e1rea de trabalho: {0} +jsp.dspace-admin.workflow-abort-confirm.item-title = T\u00edtulo: {0} +jsp.dspace-admin.workflow-abort-confirm.submitter = Submetedor: {0} +jsp.dspace-admin.workflow-abort-confirm.title = Abortar \u00e1rea de trabalho: {0} +jsp.dspace-admin.workflow-abort-confirm.warning = Tem certeza que quer abortar \u00e1rea de trabalho? Ele ir\u00e1 retornar a \u00e1rea de trabalho pessoal do usu\u00e1rio. +jsp.dspace-admin.workflow-list.collection = Cole\u00e7\u00e3o +jsp.dspace-admin.workflow-list.heading = \u00c1reas de trabalho atualmente ativas +jsp.dspace-admin.workflow-list.item-title = T\u00edtulo +jsp.dspace-admin.workflow-list.submitter = Depositante +jsp.dspace-admin.workflow-list.title = Abortar \u00e1rea de trabalho +jsp.error.404.text1 = O documento que voc\u00ea est\u00e1 tentando acessar n\u00e3o foi encontrado no servidor. +jsp.error.404.text2 = Se voc\u00ea chegou aqui seguindo uma liga\u00e7\u00e3o ou bookmark fornecida por algu\u00e9m, a liga\u00e7\u00e3o pode estar incorreta ou digitado incorretamente o link. Verifique o link e tente novamente. Se voc\u00ea ainda receber esse erro, tente ir para o Meu espa\u00e7o <a href= +jsp.error.404.text3 = Se voc\u00ea chegou a este erro ao clicar em um link no reposit\u00f3rio, nos avise para que possamos corrig\u00ed-lo +jsp.error.404.title = Erro: Documento n\u00e3o encontrado +jsp.error.authorize.text1 = Voc\u00ea n\u00e3o tem permiss\u00e3o para executar esta a\u00e7\u00e3o. +jsp.error.authorize.text2 = Se voc\u00ea acha que deveria ter esta permiss\u00e3o, entre em contato com os administradores do reposit\u00f3rio: +jsp.error.authorize.title = Autoriza\u00e7\u00e3o obrigat\u00f3ria +jsp.error.exceeded-size.text1 = Desculpe, mas o arquivo que voc\u00ea tentou enviar ({0} bytes) excede o limite m\u00e1ximo de tamanho de ({1} bytes). Voc\u00ea pode contatar o administrador do reposit\u00f3rio para perguntar sobre este limite. +jsp.error.exceeded-size.title = Erro: Excede o tamanho m\u00e1ximo de arquivo +jsp.error.integrity.heading = Erro do sistema: Solicita\u00e7\u00e3o mal formada +jsp.error.integrity.list1 = \u00e0s vezes, se voc\u00ea clicar no bot\u00e3o "voltar" de seu navegador durante um processo como o de dep\u00f3sito, pode estar tentando fazer algo que j\u00e1 est\u00e1 feito, como comprometer o dep\u00f3sito do arquivo. Clicando nos bot\u00f5es "reiniciar" ou "atualizar" podem gerar resultados semelhantes. +jsp.error.integrity.list2 = Se voc\u00ea chegou aqui atrav\u00e9s de um link fornecido por algu\u00e9m, o mesmo pode estar incorreto ou ter sido digitado incorretamente. Verifique o link e tente novamente. +jsp.error.integrity.list3 = Se tiver mais de uma janela do navegador aberta com DSpace, isso pode causar um problema semelhante em que um bot\u00e3o clicado em uma janela pode fazer um clique de bot\u00e3o na janela de outro inv\u00e1lido. +jsp.error.integrity.list4 = Voc\u00ea pode ter descoberto um problema no sistema. Todos esses erros s\u00e3o registrados, e n\u00f3s os verificamos regularmente para ver se h\u00e1 um problema. +jsp.error.integrity.text1 = Houve uma inconsist\u00eancia nos dados recebidos a partir de seu navegador. Isto pode ser devido a uma de v\u00e1rias coisas: +jsp.error.integrity.text2 = Se o problema persistir, entre em contato com os administradores do reposit\u00f3rio: +jsp.error.integrity.title = Pedido malformado +jsp.error.internal.text1 = O sistema apresentou um erro interno. Repita a opera\u00e7\u00e3o e se o problema persistir, entre em contato conosco para que possamos corrig\u00ed-lo. +jsp.error.internal.title = Erro interno do sistema +jsp.error.invalid-id.constants.type.0 = Bitstream +jsp.error.invalid-id.constants.type.1 = Bundle +jsp.error.invalid-id.constants.type.2 = Item +jsp.error.invalid-id.constants.type.3 = Cole\u00e7\u00e3o +jsp.error.invalid-id.constants.type.4 = Comunidade +jsp.error.invalid-id.constants.type.5 = Site +jsp.error.invalid-id.constants.type.6 = Grupo +jsp.error.invalid-id.constants.type.7 = Usu\u00e1rio +jsp.error.invalid-id.list1 = A URL da p\u00e1gina atual est\u00e1 incorreta - Se voc\u00ea clicou em um link externo,ele pode ter sido digitado incorretamente ou estar corrompido. +jsp.error.invalid-id.list2 = Voc\u00ea digitou um ID inv\u00e1lido em um formul\u00e1rio. Tente novamente. +jsp.error.invalid-id.text1 = O identificador {0} n\u00e3o se apresenta como um valido {1} no reposit\u00f3rio. Isto pode ser devido a uma das seguintes raz\u00f5es: +jsp.error.invalid-id.text2 = Se voc\u00ea est\u00e1 tendo problemas, por favor entre em contato com os administradores do reposit\u00f3rio. +jsp.error.invalid-id.title = Identificador inv\u00e1lido +jsp.error.invalid-id.type.object = Objetivo +jsp.error.require-certificate.text = A configura\u00e7\u00e3o deste sistema exige que voc\u00ea tenha um certificado Web v\u00e1lido. Se voc\u00ea est\u00e1 tendo problemas com isso, entre em contato conosco. +jsp.error.require-certificate.title = Certificado exigido +jsp.feedback.acknowledge.text = Seus coment\u00e1rios foram recebidos. +jsp.feedback.acknowledge.title = Obrigado por comentar +jsp.feedback.form.comment = Coment\u00e1rios: +jsp.feedback.form.email = Seu endere\u00e7o de e-mail: +jsp.feedback.form.send = Enviar +jsp.feedback.form.text1 = Obrigado por compartilhar seus coment\u00e1rios sobre o reposit\u00f3rio. Seus coment\u00e1rios s\u00e3o bem-vindos! +jsp.feedback.form.text2 = Preencha todas as informa\u00e7\u00f5es abaixo. +jsp.feedback.form.title = Formul\u00e1rio de contato com a administra\u00e7\u00e3o +jsp.general.authors.button = Autor +jsp.general.browse = Navegar +jsp.general.date.button = Por data +jsp.general.edit.button = Editar +jsp.general.genericScope = Todo o reposit\u00f3rio +jsp.general.go = Ir +jsp.general.gohome = Ir para a p\u00e1gina inicial do reposit\u00f3rio +jsp.general.goto = Ir para +jsp.general.home = P\u00e1gina inicial do reposit\u00f3rio +jsp.general.id = ID +jsp.general.location = Em: +jsp.general.metadataexport.button = Exportar metadados +jsp.general.mydspace = Meu espa\u00e7o +jsp.general.orbrowse = ou <strong>navegar</strong> +jsp.general.search.button = Buscar +jsp.general.searchfor = <strong>Buscar</strong> por +jsp.general.subjects.button = Assuntos +jsp.general.titles.button = T\u00edtulos +jsp.general.untitled = Sem t\u00edtulo +jsp.general.update = Atualizar +jsp.general.without-contributor = An\u00f4nimo +jsp.general.without-date = Sem data determinada +jsp.help = <span class="glyphicon glyphicon-question-sign"></span> +jsp.help.formats.contact1 = Entre em contato com os +jsp.help.formats.contact2 = adminstradores do reposit\u00f3rio +jsp.help.formats.contact3 = caso tenha d\u00favidas sobre um formato em particular. +jsp.help.formats.extensions = Extens\u00f5es +jsp.help.formats.here = (Aqio \u00e0 pol\u00edtica de formatos aceitos pelo site) +jsp.help.formats.mime = MIME Type +jsp.help.formats.name = Nome +jsp.help.formats.policy = Pol\u00edtica de formatos aceitos +jsp.help.formats.return = Retorno \u00e0 ajuda principal +jsp.help.formats.support = N\u00edvel de apoio jsp.help.formats.support = N\u00edvel de apoio +jsp.help.formats.support-levels = Nivel de formatos suportados jsp.help.formats.support-levels = Nivel de formatos aceitos +jsp.help.formats.support.known = Conhecido +jsp.help.formats.support.supported = suportado +jsp.help.formats.support.unknown = desconhecido +jsp.help.formats.title = Formatos aceitos pelo reposit\u00f3rio +jsp.help.formats.top = Acima +jsp.help.formats.whattodo = O que fazer caso o formato desejado n\u00e3o est\u00e1 listado +jsp.home.com1 = Comunidades do reposit\u00f3rio +jsp.home.com2 = Clique em uma comunidade para ver suas cole\u00e7\u00f5es +jsp.home.feeds = RSS Feeds +jsp.home.search1 = Buscar +jsp.home.search2 = Utilize o espa\u00e7o abaixo para fazer buscas no reposit\u00f3rio +jsp.home.title = P\u00e1gina inicial +jsp.layout.footer-default.feedback = Contato com a administra\u00e7\u00e3o +jsp.layout.footer-default.text = <a target= +jsp.layout.footer-default.theme-by = Tema criado por +jsp.layout.header-default.about = Sobre o software DSpace +jsp.layout.header-default.alt = DSpace +jsp.layout.header-default.brand.heading = Biblioteca Digital do Participat\u00f3rio +jsp.layout.header-default.brand.description = <h4>A Biblioteca Digital est\u00e1 inserida no movimento mundial de acesso aberto \u00e0 produ\u00e7\u00e3o t\u00e9cnica-cient\u00edfica. A ado\u00e7\u00e3o desse novo modelo de gest\u00e3o para documentos eletr\u00f4nicos possibilitar\u00e1 uma melhor dissemina\u00e7\u00e3o e acesso \u00e0s publica\u00e7\u00f5es sobre juventude e pol\u00edticas p\u00fablicas, seja da pr\u00f3pria Secretaria Nacional de Juventude (SNJ), quanto de outros acervos institucionais ligados \u00e0 tem\u00e1tica.</h4> +jsp.layout.navbar-admin.authorization = Autoriza\u00e7\u00e3o +jsp.layout.navbar-admin.communities-collections = Comunidades e cole\u00e7\u00f5es +jsp.layout.navbar-admin.curate = Tarefas de curadoria +jsp.layout.navbar-admin.editlicense = Editar licen\u00e7a padr\u00e3o +jsp.layout.navbar-admin.editnews = Editar not\u00edcias +jsp.layout.navbar-admin.epeople = Usu\u00e1rios +jsp.layout.navbar-admin.formatregistry = Registrar formato de arquivo +jsp.layout.navbar-admin.groups = Grupos +jsp.layout.navbar-admin.help = <span class="glyphicon glyphicon-question-sign"></span> +jsp.layout.navbar-admin.items = Itens +jsp.layout.navbar-admin.logout = Sair +jsp.layout.navbar-admin.privateitems = Itens privados +jsp.layout.navbar-admin.metadataimport = Importar metadados +jsp.layout.navbar-admin.batchmetadataimport = Importa\u00e7\u00e3o de metados em lote (BTE) +jsp.layout.navbar-admin.metadataregistry = Registrar metadados +jsp.layout.navbar-admin.statistics = Estat\u00edsticas +jsp.layout.navbar-admin.supervisors = Supervisores +jsp.layout.navbar-admin.withdrawn = Itens retirados +jsp.layout.navbar-admin.workflow = Gerenciar dep\u00f3sitos +jsp.layout.navbar-default.about = Sobre o DSpace +jsp.layout.navbar-default.advanced = Busca avan\u00e7ada +jsp.layout.navbar-default.authors = Autor +jsp.layout.navbar-default.browse = Navegar +jsp.layout.navbar-default.communities-collections = Comunidades e cole\u00e7\u00f5es +jsp.layout.navbar-default.date = Por data +jsp.layout.navbar-default.edit = Editar perfil +jsp.layout.navbar-default.go = Ir +jsp.layout.navbar-default.help = Ajuda +jsp.layout.navbar-default.home = P\u00e1gina inicial +jsp.layout.navbar-default.loggedin = Logado como: {0} +jsp.layout.navbar-default.logout = Sair +jsp.layout.navbar-default.receive = Receber atualiza\u00e7\u00f5es<br/> por e-mail +jsp.layout.navbar-default.search = Buscar no reposit\u00f3rio +jsp.layout.navbar-default.sign = Entrar em: +jsp.layout.navbar-default.subjects = Assuntos +jsp.layout.navbar-default.subjectsearch = Buscar assuntos +jsp.layout.navbar-default.titles = T\u00edtulos +jsp.layout.navbar-default.users = Meu espa\u00e7o +jsp.layout.navbar-default.users-authorized = <small>usu\u00e1rios autorizados</small> +jsp.layout.navbar-default.display-statistics = Ver estat\u00edsticas +jsp.login.chooser.chooseyour = Escolha uma das maneiras para logar: +jsp.login.chooser.heading = Escolha um m\u00e9todo de entrar +jsp.login.chooser.title = Escolha um m\u00e9todo de entrar +jsp.login.incorrect.heading = Entrar no reposit\u00f3rio +jsp.login.incorrect.text = O e-mail e senha fornecidos n\u00e3o s\u00e3o v\u00e1lidos. Tente novamente ou clique em <a href= +jsp.login.incorrect.title = Entrar +jsp.login.ldap-incorrect.errormsg = O nome de usu\u00e1rio e senha que voc\u00ea forneceu n\u00e3o eram v\u00e1lidos. Tente novamente. +jsp.login.ldap-incorrect.heading = Entrar no reposit\u00f3rio +jsp.login.ldap-incorrect.title = Entrar +jsp.login.ldap.heading = Entrar no reposit\u00f3rio +jsp.login.ldap.title = Entrar jsp.login.ldap.title = Entrar +jsp.login.logged-out.thank = Obrigado por se lembrar de sair +jsp.login.logged-out.title = Sair +jsp.login.no-valid-cert.heading = Sair do reposit\u00f3rio +jsp.login.no-valid-cert.text = <strong>Voc\u00ea n\u00e3o parece ter um certificado da Web v\u00e1lido.</strong> Tente novamente. +jsp.login.no-valid-cert.title = Entrar +jsp.login.not-in-records.register = Registrar-se no reposit\u00f3rio +jsp.login.not-in-records.text = Voc\u00ea tem um certificado web v\u00e1lido, mas o reposit\u00f3rio n\u00e3o tem seu registro. Voc\u00ea ter\u00e1 que <a href= +jsp.login.not-in-records.title = Nenhum registro de usu\u00e1rio dispon\u00edvel +jsp.login.password.heading = Entrar no reposit\u00f3rio +jsp.login.password.title = Entrar +jsp.morehelp = Ajuda +jsp.mydspace = Meu espa\u00e7o +jsp.mydspace.general.approve = Aprovar +jsp.mydspace.general.backto-mydspace = Voltar para Meu espa\u00e7o +jsp.mydspace.general.cancel = Cancelar +jsp.mydspace.general.goto-mydspace = Ir para Meu espa\u00e7o +jsp.mydspace.general.open = Abrir +jsp.mydspace.general.reject = Rejeitar +jsp.mydspace.general.remove = Excluir +jsp.mydspace.general.returnto-mydspace = Voltar para o espa\u00e7o +jsp.mydspace.in-archive.heading1 = Obrigado +jsp.mydspace.in-archive.return.link = Voltar para o "Meu espa\u00e7o" +jsp.mydspace.in-archive.text1 = O dep\u00f3sito foi aceito no reposit\u00f3rio. O registro recebeu o seguinte identificador: +jsp.mydspace.in-archive.text2 = Notifica\u00e7\u00e3o sobre o registro no reposit\u00f3rio foi enviada para as pessoas apropriadas. +jsp.mydspace.in-archive.title = Submiss\u00e3o arquivada +jsp.mydspace.main.authoring = Autoria +jsp.mydspace.main.elem1 = T\u00edtulo +jsp.mydspace.main.elem2 = Submetido para: +jsp.mydspace.main.export.archive.title = Exportar arquivo +jsp.mydspace.main.export.error.title = Erro na exporta\u00e7\u00e3o +jsp.mydspace.main.export.error.toolarge = Esta exporta\u00e7\u00e3o \u00e9 muito grande. Entre em contato com o administrador para mais informa\u00e7\u00f5es. +jsp.mydspace.main.heading2 = Tarefas priorit\u00e1rias +jsp.mydspace.main.heading3 = Conjunto de tarefas +jsp.mydspace.main.heading4 = Submiss\u00f5es n\u00e3o conclu\u00eddas +jsp.mydspace.main.heading5 = Fluxo de dep\u00f3sito +jsp.mydspace.main.heading6 = Authorization Groups I'm a Member Of +jsp.mydspace.main.heading7 = Recursos exportados +jsp.mydspace.main.item = Item +jsp.mydspace.main.link = Ver suas assinaturas +jsp.mydspace.main.perform.button = Executar esta tarefa +jsp.mydspace.main.return.button = Voltar +jsp.mydspace.main.start.button = Iniciar um novo dep\u00f3sito +jsp.mydspace.main.sub1 = Revisar dep\u00f3sito +jsp.mydspace.main.sub2 = Checar dep\u00f3sito +jsp.mydspace.main.sub3 = Edi\u00e7\u00e3o final de dep\u00f3sito +jsp.mydspace.main.subby = Submetido por +jsp.mydspace.main.subto = Submetido a +jsp.mydspace.main.supervising = Supervisionar +jsp.mydspace.main.take.button = Executar uma tarefa +jsp.mydspace.main.task = Tarefas +jsp.mydspace.main.text1 = Abaixo est\u00e3o as tarefas que voc\u00ea escolheu fazer. +jsp.mydspace.main.text2 = Abaixo est\u00e3o o conjunto de tarefas que foram atribu\u00eddas a voc\u00ea. +jsp.mydspace.main.text4 = Nesta se\u00e7\u00e3o est\u00e3o os documentos cujo o dep\u00f3sito n\u00e3o foi conclu\u00eddo. +jsp.mydspace.main.view.button = Ver dep\u00f3sito(s) aceito(s) +jsp.mydspace.own-submissions.text1 = N\u00e3o h\u00e1 itens no reposit\u00f3rio enviados por voc\u00ea. +jsp.mydspace.own-submissions.text2 = Abaixo est\u00e3o listados seus envios anteriores que foram aceitos no reposit\u00f3rio. +jsp.mydspace.own-submissions.text3 = H\u00e1 <strong>1</strong> item no reposit\u00f3rio enviado por voc\u00ea +jsp.mydspace.own-submissions.text4 = H\u00e1 <strong>{0}</strong> itens no reposit\u00f3rio enviados por voc\u00ea +jsp.mydspace.own-submissions.title = Seu(s) dep\u00f3sito(s) aceito(s) +jsp.mydspace.perform-task.commit.button = Enviar ao arquivo +jsp.mydspace.perform-task.edit.button = Editar metadados +jsp.mydspace.perform-task.instruct1 = Se voc\u00ea revisou o item e o considera adequado para esta cole\u00e7\u00e3o, clique em "Aprovar". +jsp.mydspace.perform-task.instruct2 = Uma vez que voc\u00ea editou o item, utilize esta op\u00e7\u00e3o para enviar o item para o arquivo. +jsp.mydspace.perform-task.instruct3 = Se voc\u00ea revisou o item e considera que ele <strong>n\u00e3o</strong> \u00e9 adequado para esta cole\u00e7\u00e3o, clique em "Rejeitar". Em seguida, ser\u00e1 solicitada uma mensagem indicando por que o item n\u00e3o \u00e9 adequado e se o solicitante deve mudar alguma coisa para voltar a depositar. +jsp.mydspace.perform-task.instruct4 = Selecione esta op\u00e7\u00e3o para corrigir, alterar ou editar os metadados do item. +jsp.mydspace.perform-task.instruct5 = Caso queira deixar essa tarefa para mais tarde e retornar ao "Meu espa\u00e7o", clique em "Fazer depois". +jsp.mydspace.perform-task.instruct6 = Para retornar ao conjunto de tarefas e deixar que outro usu\u00e1rio execute esta tarefa, clique em "Voltar ao conjunto de tarefas". +jsp.mydspace.perform-task.later.button = Fazer depois +jsp.mydspace.perform-task.return.button = Voltar ao conjunto de tarefas +jsp.mydspace.perform-task.text1 = O item a seguir foi submetido \u00e0 cole\u00e7\u00e3o <strong>{0}</strong>. Cheque se o item se adequa a esta cole\u00e7\u00e3o. Ap\u00f3s revisar o item, aceite-o ou rejeite-o usando os comandos que est\u00e3o no fim da p\u00e1gina. +jsp.mydspace.perform-task.text3 = O item a seguir foi submetido \u00e0 cole\u00e7\u00e3o <strong>{0}</strong>. Cheque se o item se adequa a esta cole\u00e7\u00e3o. Ap\u00f3s revisar o item, voc\u00ea pode editar seus metadados e em seguida, aceita-lo ou rejeita-lo usando os comandos que est\u00e3o no fim da p\u00e1gina. +jsp.mydspace.perform-task.text4 = O item a seguir foi aceito na cole\u00e7\u00e3o <strong>{0}</strong>. Edite o que for necess\u00e1rio para que o item se adeque aos padr\u00f5es da cole\u00e7\u00e3o, e depois enviar item ao arquivo usando os comandos que est\u00e3o no fim da p\u00e1gina. +jsp.mydspace.perform-task.title = Executar tarefa +jsp.mydspace.preview-task.accept.button = Aceitar esta tarefa +jsp.mydspace.preview-task.text1 = O item a seguir foi submetido \u00e0 cole\u00e7\u00e3o <strong>{0}</strong>. Para aceitar a tarefa de revisar este item, clique no bot\u00e3o "Aceitar esta tarefa". +jsp.mydspace.preview-task.text3 = O item a seguir foi submetido \u00e0 cole\u00e7\u00e3o <strong>{0}</strong>. Para aceitar a tarefa de revisar este item, clique no bot\u00e3o "Aceitar esta tarefa". +jsp.mydspace.preview-task.text4 = O item a seguir foi aceito na cole\u00e7\u00e3o <strong>{0}</strong>. Para aceitar a tarefa de editar este item, clique no bot\u00e3o "Aceitar esta tarefa". +jsp.mydspace.preview-task.title = Tarefa anterior +jsp.mydspace.reject-reason.cancel.button = Cancelar rejei\u00e7\u00e3o +jsp.mydspace.reject-reason.reject.button = Rejeitar item +jsp.mydspace.reject-reason.text1 = Insira abaixo os motivos pelos quais voc\u00ea rejeitou o dep\u00f3sito. Indique em sua mensagem se o solicitante deve resolver o problema e refazer o dep\u00f3sito. +jsp.mydspace.reject-reason.title = Insira o motivo da rejei\u00e7\u00e3o +jsp.mydspace.remove-item.cancel.button = Cancelar exclus\u00e3o +jsp.mydspace.remove-item.confirmation = Tem certeza que deseja excluir este item incompleto? +jsp.mydspace.remove-item.remove.button = Excluir o item +jsp.mydspace.remove-item.title = Excluir item +jsp.mydspace.request.export.community = Exportar comunidade +jsp.mydspace.request.export.collection = Exportar cole\u00e7\u00e3o +jsp.mydspace.request.export.item = Exportar item +jsp.mydspace.request.export.migratecommunity = Exportar (migrar) comunidade +jsp.mydspace.request.export.migratecollection = Exportar (migrar) cole\u00e7\u00e3o +jsp.mydspace.request.export.migrateitem = Exportar (migrar) item +jsp.mydspace.subscriptions.info1 = Suas assinaturas foram atualizadas +jsp.mydspace.subscriptions.info2 = Assinar uma cole\u00e7\u00e3o significa receber em sua caixa de e-mail informa\u00e7\u00f5es sobre os novos itens depositados. Para assinar uma cole\u00e7\u00e3o, visite a p\u00e1gina principal da cole\u00e7\u00e3o e clique no bot\u00e3o "Assinar". +jsp.mydspace.subscriptions.select_collection = ( Selecionar cole\u00e7\u00e3o ) +jsp.mydspace.subscriptions.info3 = Abaixo est\u00e3o as cole\u00e7\u00f5es que voc\u00ea assinou. Todos os dias ser\u00e1 enviado a voc\u00ea um e-mail detalhando novos itens dispon\u00edveis nessas cole\u00e7\u00f5es. Quando n\u00e3o houver novidades, nenhum e-mail ser\u00e1 enviado. +jsp.mydspace.subscriptions.info4 = Voc\u00ea n\u00e3o assinou nenhuma cole\u00e7\u00e3o. +jsp.mydspace.subscriptions.remove.button = Excluir todas assinaturas +jsp.mydspace.subscriptions.title = Suas assinaturas +jsp.mydspace.subscriptions.unsub.button = Cancelar assinatura +jsp.mydspace.task-complete.text1 = A tarefa foi conclu\u00edda. As pessoas apropriadas receber\u00e3o notifica\u00e7\u00f5es a respeito disso. +jsp.mydspace.task-complete.title = Obrigada +jsp.register.already-registered.info1 = Nossos registros mostram que voc\u00ea j\u00e1 se registrou no reposit\u00f3rio e tem uma conta ativa. +jsp.register.already-registered.info2 = Voc\u00ea pode <a href= +jsp.register.already-registered.info4 = Caso tenha problemas para entrar, entre em contato conosco +jsp.register.already-registered.title = J\u00e1 registado +jsp.register.cannot-register.msg = A configura\u00e7\u00e3o deste reposit\u00f3rio n\u00e3o permite que voc\u00ea cadastre a si mesmo. Entre em contato conosco caso haja qualquer d\u00favida. +jsp.register.cannot-register.title = N\u00e3o \u00e9 poss\u00edvel registrar +jsp.register.edit-profile.confirm.field = Confirmar senha: +jsp.register.edit-profile.info1 = Preencha todos campos obrigat\u00f3rios +jsp.register.edit-profile.info2 = As senhas inseridas abaixo devem coincidir e ter pelo menos 6 caracteres. +jsp.register.edit-profile.info3 = Insira ou altere as informa\u00e7\u00f5es abaixo. Os campos marcados com (*) s\u00e3o obrigat\u00f3rios. +jsp.register.edit-profile.info5 = <strong>Opcionalmente</strong> voc\u00ea pode escolher uma nova senha, inseri-la no campo abaixo e confirm\u00e1-la digitando-a novamente. A senha deve conter pelo menos 6 caracteres. +jsp.register.edit-profile.pswd.field = Nova senha: +jsp.register.edit-profile.title = Editar seu perfil +jsp.register.edit-profile.update.button = Atualizar perfil +jsp.register.forgot-password.email.field = Endere\u00e7o de e-mail: +jsp.register.forgot-password.forgot.button = Esqueci minha senha +jsp.register.forgot-password.info1 = O endere\u00e7o de e-mail inserido n\u00e3o foi reconhecido. Tente novamente. +jsp.register.forgot-password.info2 = Insira seu endere\u00e7o de e-mail abaixo e clique em "Esqueci minha senha" . Voc\u00ea receber\u00e1 um e-mail para configurar uma nova senha. +jsp.register.forgot-password.title = Recuperar senha +jsp.register.general.return-home = Voltar a p\u00e1gina inicial do reposit\u00f3rio +jsp.register.inactive-account.info = O endere\u00e7o de e-mail inserido corresponde a uma conta inativa. Caso voc\u00ea ainda n\u00e3o tenha se <a href= +jsp.register.inactive-account.title = Conta inativa +jsp.register.invalid-token.info1 = O registro ou a URL de senha esquecida s\u00e3o inv\u00e1lidos. Isto pode ter acontecido pelos seguintes motivos: +jsp.register.invalid-token.info2 = A URL pode estar incorreta. Alguns servidores de e-mail v\u00e3o "quebrar" longas linhas de texto em um e-mail. Talvez por isso, tenha dividido a sua URL em duas linhas, como neste exemplo: +jsp.register.invalid-token.info3 = Caso isso tenha acontecido, voc\u00ea dever\u00e1 copiar e colar a primeira linha na barra de endere\u00e7o do seu navegador, depois copiar a segunda linha e colar na barra de endere\u00e7o do navegador ao final da primeira linha, conferindo se n\u00e3o h\u00e1 espa\u00e7os entre elas. A barra de endere\u00e7o do navegador deve conter algo parecido com isso: +jsp.register.invalid-token.info4 = Depois, aperte "voltar" na barra de endere\u00e7o do navegador e funcionar\u00e1 bem. +jsp.register.invalid-token.info5 = URL inv\u00e1lida +jsp.register.invalid-token.title = Palavra inv\u00e1lida +jsp.register.new-ldap-user.button.register = Registrar +jsp.register.new-ldap-user.heading = Registro de usu\u00e1rio +jsp.register.new-ldap-user.info1 = O nome de usu\u00e1rio, senha ou e-mail s\u00e3o inv\u00e1lidos. Tente novamente. +jsp.register.new-ldap-user.info2 = Caso nunca tenha entrado no reposit\u00f3rio, insira seu nome de usu\u00e1rio, senha e endere\u00e7o de e-mail nos campos abaixo e clique em "Registrar". Caso ainda n\u00e3o tenha um nome de usu\u00e1rio, voc\u00ea pode se registrar inserindo seu endere\u00e7o de e-mail. +jsp.register.new-ldap-user.info3 = Caso seu departamento/coordena\u00e7\u00e3o/divis\u00e3o esteja interessado em se registrar no reposit\u00f3rio, entre em contato com os administradores do sistema +jsp.register.new-ldap-user.label.email = Endere\u00e7o de e-mail: +jsp.register.new-ldap-user.label.password = Senha: +jsp.register.new-ldap-user.label.username = Nome de usu\u00e1rio: +jsp.register.new-ldap-user.title = Registro de usu\u00e1rio +jsp.register.new-password.confirm.field = Confirmar senha: +jsp.register.new-password.hello = Ol\u00e1 {0}, +jsp.register.new-password.info1 = As senhas que inserir abaixo devem coincidir, e precisam ser de pelo menos 6 caracteres. +jsp.register.new-password.info2 = Insira uma nova senha abaixo e confirme-a digitando novamente. A senha deve ser de pelo menos 6 caracteres. +jsp.register.new-password.pswd.field = Nova senha: +jsp.register.new-password.set.button = Configurar nova senha +jsp.register.new-password.title = Inserir nova senha +jsp.register.new-user.email.field = Endere\u00e7o de e-mail: +jsp.register.new-user.info1 = <strong>O endere\u00e7o de e-mail que voc\u00ea inseriu n\u00e3o \u00e9 v\u00e1lido.</strong> Please try again. +jsp.register.new-user.info2 = Caso ainda n\u00e3o tenha se registrado no reposit\u00f3rio, informe o endere\u00e7o de e-mail e clique em "Registrar". +jsp.register.new-user.info3 = Caso seu departamento/coordena\u00e7\u00e3o/divis\u00e3o esteja interessado em se registrar no reposit\u00f3rio, entre em contato com os administradores do sistema +jsp.register.new-user.register.button = Registrar +jsp.register.new-user.title = Registro de usu\u00e1rio +jsp.register.password-changed.info = Obrigado, sua senha foi configurada e ser\u00e1 validada imediatamente +jsp.register.password-changed.link = Ir para a p\u00e1gina inicial do reposit\u00f3rio +jsp.register.password-changed.title = Senha alterada +jsp.register.password-token-sent.info = Foi enviado ao seu e-mail uma URL especial. Ao clicar nesta URL, voc\u00ea ser\u00e1 capaz de configurar uma nova senha para continuar usando o reposit\u00f3rio. +jsp.register.password-token-sent.title = E-mail de nova senha enviado +jsp.register.profile-form.fname.field = Primeiro nome*: +jsp.register.profile-form.language.field = Idioma: +jsp.register.profile-form.lname.field = \u00daltimo nome*: +jsp.register.profile-form.phone.field = Telefone para contato: +jsp.register.profile-updated.info1 = Obrigado, suas informa\u00e7\u00f5es de perfil e sua senha foram atualizadas. +jsp.register.profile-updated.info2 = Obrigado, suas informa\u00e7\u00f5es de perfil foram atualizadas. +jsp.register.profile-updated.title = Atualiza\u00e7\u00e3o de perfil +jsp.register.registered.info = Voc\u00ea est\u00e1 registrado para usar o sistema DSpace. Voc\u00ea pode assinar cole\u00e7\u00f5es para receber atualiza\u00e7\u00f5es quando um novo item for inserido. +jsp.register.registered.thank = Obrigado {0}, +jsp.register.registered.title = Registro completo +jsp.register.registration-form.complete.button = Complete o registro +jsp.register.registration-form.confirm.field = Confirmar senha: +jsp.register.registration-form.instruct1 = Preencha todos os campos obrigat\u00f3rios +jsp.register.registration-form.instruct2 = As senhas que inserir abaixo devem coincidir, e precisam ser de pelo menos 6 caracteres. +jsp.register.registration-form.instruct3 = Insira as informa\u00e7\u00f5es a seguir. Os campos marcados com copia.sh Messages.properties Messages_pt_BR.properties Messages_pt_BR.properties_V1 Messages_pt_BR.properties_V2 spring s\u00e3o obrigat\u00f3rios. +jsp.register.registration-form.instruct4 = Escolha uma senha e digite-a no campo abaixo. Confirme-a digitando novamente. A senha deve conter, pelo menos, seis caracteres. +jsp.register.registration-form.pswd.field = Senha: +jsp.register.registration-form.title = Informa\u00e7\u00f5es de registro +jsp.register.registration-sent.info = Foi enviado ao seu e-mail uma URL especial. Ao clicar nesta URL, voc\u00ea precisar\u00e1 preencher algumas informa\u00e7\u00f5es simples. Depois disso, voc\u00ea estar\u00e1 pronto para entrar no reposit\u00f3rio. +jsp.register.registration-sent.title = E-mail de registro enviado +jsp.search.advanced.clear = Limpar +jsp.search.advanced.logical.and = E +jsp.search.advanced.logical.not = N\u00c3O +jsp.search.advanced.logical.or = OU +jsp.search.advanced.search = Busca: +jsp.search.advanced.search2 = Busca +jsp.search.advanced.searchfor = Busca por: +jsp.search.advanced.title = Busca avan\u00e7ada +jsp.search.advanced.type = Tipo de busca: +jsp.search.advanced.type.abstract = Resumo +jsp.search.advanced.type.author = Autor +jsp.search.advanced.type.identifier = Identificador +jsp.search.advanced.type.ANY = Palavra-chave +jsp.search.advanced.type.language = Idioma (ISO) +jsp.search.advanced.type.series = S\u00e9rie +jsp.search.advanced.type.sponsor = Financiador +jsp.search.advanced.type.keyword = Assunto +jsp.search.advanced.type.title = T\u00edtulo +jsp.search.didyoumean = Voc\u00ea quis dizer? <b><i>{0}</i></b> +jsp.search.error.invalid-search-string = Sequ\u00eancia de busca inv\u00e1lida +jsp.search.error.number-format-exception = Exce\u00e7\u00e3o formato de n\u00famero +jsp.search.error.query-too-broad = Sua busca era muito ampla. Tente uma busca mais restrita. +jsp.search.general.new-search = Retornar valores +jsp.search.general.next = P\u00f3ximo +jsp.search.general.noresults = N\u00e3o h\u00e1 resultados para sua busca. +jsp.search.general.previous = Anterior +jsp.search.results.colhits = Conjunto de cole\u00e7\u00f5es: +jsp.search.results.comhits = Conjunto de comunidades: +jsp.search.results.itemhits = Conjunto de itens: +jsp.search.results.results = Resultado {0}-{1} de {2}. +jsp.search.results.searchfor = por +jsp.search.results.searchin = Buscar em: +jsp.search.results.title = Resultados da busca +jsp.search.title = P\u00e1gina de Busca +jsp.search.error.discovery = Um erro ocorreu. Seu argumento de busca \u00e9 inv\u00e1lido ou o motor de busca est\u00e1 desativado. +jsp.search.facet.refine = Descubra +jsp.search.facet.refine.author = Autor +jsp.search.facet.refine.subject = Assunto +jsp.search.facet.refine.dateIssued = Data de Publica\u00e7\u00e3o +jsp.search.facet.refine.previous = anterior +jsp.search.facet.refine.next = pr\u00f3ximo +jsp.search.facet.narrow = Filtrado por {0} +jsp.search.filter.heading = Adicionar filtros: +jsp.search.filter.hint = Utilizar filtros para refinar o resultado de busca. +jsp.search.filter.add = Adicionar +jsp.search.filter.applied = Filtros correntes: +jsp.search.filter.any = Todos os campos +jsp.search.filter.title = T\u00edtulo +jsp.search.filter.author = Autor +jsp.search.filter.subject = Assunto +jsp.search.filter.dateIssued = Data de publica\u00e7\u00e3o +jsp.search.filter.op.equals = Iguais +jsp.search.filter.op.notequals = Diferentes +jsp.search.filter.op.contains = Cont\u00e9m +jsp.search.filter.op.notcontains = N\u00e3o cont\u00e9m +jsp.search.filter.op.authority = Identificado +jsp.search.filter.op.notauthority = N\u00e3o identificado +jsp.sherpa.title = Base SHERPA/RoMEO de pol\u00edticas para Editoras +jsp.sherpa.loading = <p>Buscando informa\u00e7\u00f5es sobre a pol\u00edtica da base de dados SHERPA/RoMEO</p><img alt="loading" src="{0}/sherpa/image/ajax-loader-big.gif" /> +jsp.sherpa.heading = <p class="sherpaDisclaimer"><a href="http://www.sherpa.ac.uk/romeo.php" target="_blank"><img align="left" src="{0}/sherpa/image/romeosmall.gif" width="100" height="54" alt="SHERPA/RoMEO Database" border="0"></a> Toda informa\u00e7\u00e3o do SHERPA/RoMEO est\u00e1 correta de acordo com nosso conhecimento, mas n\u00e3o se deve tomar esse fato como verdade devido a quest\u00f5es. SHERPA n\u00e3o pode se responsabilizar pela reutiliza\u00e7\u00e3o dos dados do RoMEO, ou por interpreta\u00f5es alternativas derivadas desta informa\u00e7\u00e3o.</p> +jsp.sherpa.error = <p class="sherpaError">Houve erro durante a consulta \u00e0 base do SHERPA/RoMEO. Nenhuma data dispon\u00edvel, tente mais tarde ou verifique diretamente no site <a href="http://www.sherpa.ac.uk/romeo.php" target="_blank">SHERPA/RoMEO WebSite</a>.</p> +jsp.sherpa.noresult = <p class="sherpaNoResult">Desculpe-me, n\u00e3o existe informa\u00e7\u00e3o na <a href="http://www.sherpa.ac.uk/romeo.php" target="_blank">base SHERPA/RoMEO</a> para os ISSNs fornecidos.</p> +jsp.sherpa.oneresult = <p>A base <a href="http://www.sherpa.ac.uk/romeo.php" target="_blank">SHERPA/RoMEO</a> possui as informa\u00e7\u00f5es para a revista selecionada.</p> +jsp.sherpa.moreresults = <p>Os ISSNs fornecidos correspondem a mais de uma revista, por favor reveja-o. Para qualque revista, \u00e9 poss\u00edvel encontrar abaixo a pol\u00edtica editorial.</p> +jsp.sherpa.jornaltitle = <p><b>Revista:</b> {0} +jsp.sherpa.jornalissn = (ISSN\: {0})</p> +jsp.sherpa.publisher = <p><b>Editora:</b> <a href="{1}" target="_blank">{0}</a></p> +jsp.sherpa.publisher.onlyname = <p><b>Editora:</b> {0}</p> +jsp.sherpa.publisher.unknow = <p><b>Editora:</b> desconhecida</p> +jsp.sherpa.publisher.nodata =<p>Desculpe-me, n\u00e3o existe informa\u00e7\u00e3o na <a href="http://www.sherpa.ac.uk/romeo.php" target="_blank">base SHERPA/RoMEO</a> para a Editora fornecida. Se desejar, poder\u00e1 sugerir que se adicione esta editora a base SHERPA/RoMEO por meio <a href="http://www.sherpa.ac.uk/romeoupdate.php" target="_blank">deste formul\u00e1rio</a></p> +jsp.sherpa.pre-print.can =<p><b>Pr\u00e9-prints do autor:</b><img src="{0}/sherpa/image/can.gif" alt="can" border="0" /> O autor <b>pode</b> arquivar pre-print (ie pre-refereeing)</p> +jsp.sherpa.pre-print.cannot =<p><b>Pr\u00e9-prints do autor:</b><img src="{0}/sherpa/image/cannot.gif" alt="cannot" border="0" /> O autor <b>n\u00e3o pode</b> arquivar pre-print (ie pre-refereeing)</p> +jsp.sherpa.pre-print.restricted =<p><b>Pr\u00e9-prints do autor:</b><img src="{0}/sherpa/image/restricted.gif" alt="restricted" border="0" /> <b>Assunto das restri\u00e7\u00f5es abaixo</b>, o autor <b>pode</b> arquivar o pre-print (ie pre-refereeing)</p> +jsp.sherpa.pre-print.unclear =<p><b>Pr\u00e9-prints do autor:</b><img src="{0}/sherpa/image/unclear.gif" alt="unclear" border="0" /> Estatus de arquivamento n\u00e3o claro</p> +jsp.sherpa.pre-print.unknown =<p><b>Pr\u00e9-prints do autor:</b> - Sem informa\u00e7\u00e3o</p> +jsp.sherpa.post-print.can =<p><b>Post-prints do autor:</b><img src="{0}/sherpa/image/can.gif" alt="can" border="0" /> O author <b>pode</b> arquivar o post-print (ie vers\u00e3o final post-refereeing)</p> +jsp.sherpa.post-print.cannot =<p><b>Post-prints do autor:</b><img src="{0}/sherpa/image/cannot.gif" alt="cannot" border="0" /> O autor <b>n\u00e3o pode </b> arquivar o post-print (ie vers\u00e3o final post-refereeing)</p> +jsp.sherpa.post-print.restricted =<p><b>Post-prints do autor:</b><img src="{0}/sherpa/image/restricted.gif" alt="restricted" border="0" /> <b>Assunto das restri\u00e7\u00f5es abaixo</b>, o author <b>pode</b> arquivar o post-print (ie vers\u00e3o final post-refereeing)</p> +jsp.sherpa.post-print.unclear =<p><b>Author''s Post-prints:</b><img src="{0}/sherpa/image/unclear.gif" alt="unclear" border="0" /> Archiving status unclear</p> +jsp.sherpa.post-print.unknown =<p><b>Author''s Post-prints:</b> - No information</p> +jsp.sherpa.publisher-version.can =<p><b>Vers\u00e3o da Editora:</b><img src="{0}/sherpa/image/can.gif" alt="can" border="0" /> O author <b>pode</b> arquivar a vers\u00e3o da editora/PDF</p> +jsp.sherpa.publisher-version.cannot =<p><b>Vers\u00e3o da Editora:</b><img src="{0}/sherpa/image/cannot.gif" alt="cannot" border="0" /> o autor <b>n\u00e3o pode</b> arquivar a vers\u00e3o da editora/PDF</p> +jsp.sherpa.publisher-version.restricted =<p><b>Vers\u00e3o da Editora:</b><img src="{0}/sherpa/image/restricted.gif" alt="restricted" border="0" /> <b>Assunto das restri\u00e7\u00f5es abaixo</b>, o autor <b>pode</b> arquivar a vers\u00e3o da editora/PDF</p> +jsp.sherpa.publisher-version.unclear =<p><b>Vers\u00e3o da Editora:</b><img src="{0}/sherpa/image/unclear.gif" alt="unclear" border="0" /> Estatus de arquivamento n\u00e3o claro</p> +jsp.sherpa.publisher-version.unknown =<p><b>Vers\u00e3o da Editora:</b> - sem informa\u00e7\u00e3o</p> + +jsp.sherpa.generalconditions = <p><b>Condi\u00e7\u00f5es gerais:</b></p> +jsp.sherpa.paidoption = <p><b>Acesso aberto pago:</b> <a href="{1}" target="_blank">{0}</a>. {2}</p> +jsp.sherpa.copyright = <p><b>Copyright:</b></p> +jsp.sherpa.publisher.romeocolour = <p><b>RoMEO:</b> Esta \u00e9 editora RoMEO {0}</p> +jsp.sherpa.legend = <div class="sherpaLegend"><table class="romeoColour table"><thead><tr><th>ROMEO colour</th><th>Archiving policy</th></tr></thead><tbody><tr><td class="greenRomeoPublisher">green</td><td>can archive pre-print <i>and</i> post-print or publisher's version/PDF</td></tr><tr><td class="blueRomeoPublisher">blue</td><td>can archive post-print (ie final draft post-refereeing) or publisher's version/PDF</td></tr><tr><td class="yellowRomeoPublisher">yellow</td><td>can archive pre-print (ie pre-refereeing)</td></tr><tr><td class="grayRomeoPublisher">gray</td><td>publishers found in DOAJ that have not yet been analyzed by RoMEO</td></tr><tr><td class="whiteRomeoPublisher">white</td><td>archiving not formally supported</td></tr></tbody></table></div> +jsp.statistics.title = Estat\u00edsticas +jsp.statistics.heading.visits = Total de visitas +jsp.statistics.heading.monthlyvisits = Total de visitas por m\u00eas +jsp.statistics.heading.filedownloads = Download de arquivos +jsp.statistics.heading.countryvisits = Ranking de visitas por pa\u00edses +jsp.statistics.heading.cityvisits = Ranking de visitas por cidades +jsp.statistics.heading.views = Visualiza\u00e7\u00f5es +jsp.statistics.no-report.info1 = Atualmente n\u00e3o h\u00e1 relat\u00f3rios dispon\u00edveis para este servi\u00e7o. Verifique novamente mais tarde. +jsp.statistics.no-report.title = Nenhum relat\u00f3rio est\u00e1 atualmente dispon\u00edvel +jsp.statistics.report.info1 = Relat\u00edsito seja exclu\u00eddo +jsp.statistics.report.info2 = Relat\u00f3rios mensais\: +jsp.statistics.report.title = Resumo estat\u00edstico +jsp.submit.access.title = Acesso +jsp.submit.access.error_1 = Formato da data de in\u00edcio inv\u00e1lido +jsp.submit.access.error_2 = Faltando a data de \u00ednicio +jsp.submit.access.error_3 = Grupo selecionado \u00e9 inv\u00e1lido +jsp.submit.access.error_4 = Pol\u00edtica de acesso duplicada +jsp.submit.access.error_5 = Pol\u00edtica de acesso duplicada +jsp.submit.access.plist.heading = Grupo pol\u00edticas +jsp.submit.access.access_setting.heading = Configura\u00e7\u00f5es de acesso +jsp.submit.access.private_setting.heading = Item privado +jsp.submit.access.private_setting.help = Se selecionado, o item n\u00e3o poder\u00e1 ser recuperado na busca. +jsp.submit.access.private_setting.label = Item privado\: +jsp.submit.access.private_setting.review.discoverable = O item ser\u00e1 recuper\u00e1vel +jsp.submit.access.private_setting.review.notdiscoverable = O item <b>n\u00e3o</b> ser\u00e1 recuper\u00e1vel +jsp.submit.access.review.button = Editar configura\u00e7\u00f5es de acesso +jsp.submit.access.review.embargoed = Acesso ser\u00e1 permitido a partir de {0} +jsp.submit.access.embargo_setting.heading = Embargo +jsp.submit.access.policy_setting.help = Pol\u00edticas listadas nesta se\u00e7\u00e3o sobrescrever\u00e3o as pol\u00edticas padr\u00e3o da cole\u00e7\u00e3o que voc\u00ea est\u00e1 submetendo o item. Se voc\u00ea quer configurar um embargo mas a cole\u00e7\u00e3o permite acesso para qualquer usu\u00e1rio, voc\u00ea precisa configurar uma pol\u00edtica que permita o acesso ao grupo Anonymous somente a partir de data espec\u00edfica. +jsp.submit.access.policy_setting.label_name = Nome\: +jsp.submit.access.policy_setting.label_group = Grupo\: +jsp.submit.access.policy_setting.label_date = Acesso embargado at\u00e9 a data\: +jsp.submit.access.policy_setting.label_date.help = Formatos aceitos: aaaa, aaaa-mm, aaaa-mm-dd +jsp.submit.access.policy_setting.label_reason = Raz\u00e3o\: +jsp.submit.access.submit_add_policy.button = Confirmar pol\u00edtica +jsp.submit.access.edit_policy.heading = Editar pol\u00edtica de acesso +jsp.submit.cancel.continue.button = Continuar dep\u00f3sito +jsp.submit.cancel.info = Voc\u00ea deseja excluir o dep\u00f3sito que ainda n\u00e3o foi finalizado ou voc\u00ea deseja mant\u00ea-lo para continuar a trabalhar nele mais tarde? Voc\u00ea tamb\u00e9m pode retornar para onde estava durante o processo de dep\u00f3sito, se clicou em <Cancelar> por acidente. +jsp.submit.cancel.remove.button = Deletar o dep\u00f3sito +jsp.submit.cancel.save.button = Salv\u00e1-lo, eu vou trabalhar nisto mais tarde +jsp.submit.cancel.title = Cancelar ou salvar o dep\u00f3sito +jsp.submit.cancelled-removed.info = Seu dep\u00f3sito foi cancelado e o item incompleto removido do sistema. +jsp.submit.cancelled-removed.title = Dep\u00f3sito cancelado +jsp.submit.change-file-description.file = Arquivo +jsp.submit.change-file-description.filedescr = Descri\u00e7\u00e3o de arquivo: +jsp.submit.change-file-description.format = Formato do arquivo +jsp.submit.change-file-description.heading = Dep\u00f3sito: Alterar descri\u00e7\u00e3o do arquivo +jsp.submit.change-file-description.info1 = Aqui est\u00e3o os detalhes do arquivo. +jsp.submit.change-file-description.info2 = Digite a descri\u00e7\u00e3o correta do arquivo na caixa abaixo: +jsp.submit.change-file-description.size = Tamanho +jsp.submit.change-file-description.title = Alterar descri\u00e7\u00e3o do arquivo +jsp.submit.choose-file.document = Arquivo do documento: +jsp.submit.choose-file.filedescr = Descri\u00e7\u00e3o do arquivo: +jsp.submit.choose-file.heading = Dep\u00f3sito: fazer upload do arquivo +jsp.submit.choose-file.info1 = Insira o arquivo do seu disco r\u00edgido local correspondente ao item que est\u00e1 sendo submetido. Se voc\u00ea clicar em "Selecionar arquivo...", uma nova janela aparecer\u00e1 na qual voc\u00ea poder\u00e1 localizar e selecionar o arquivo no seu disco r\u00edgido local. +jsp.submit.choose-file.info6 = Observe tamb\u00e9m que o sistema \u00e9 capaz de preservar o conte\u00fado de certos tipos de arquivos. +jsp.submit.choose-file.info7 = Informa\u00e7\u00f5es sobre tipos de arquivos e n\u00edveis de apoio. +jsp.submit.choose-file.info9 = Digite uma breve descri\u00e7\u00e3o do conte\u00fado deste arquivo, por exemplo "Artigo principal", ou "leitura de dados". +jsp.submit.choose-file.title = Carga do arquivo +jsp.submit.choose-file.skip = Ir para o arquivo enviado +jsp.submit.choose-file.upload-ajax.button.cancel = Cancelar +jsp.submit.choose-file.upload-ajax.button.select-file = Selecione um </br> arquivo... +jsp.submit.choose-file.upload-ajax.dialog.close = Ok +jsp.submit.choose-file.upload-ajax.fileRequired.title = Arquivo obrigat\u00f3rio +jsp.submit.choose-file.upload-ajax.fileRequired.info = Voc\u00ea precisa enviar ao menos um arquivo file para este item +jsp.submit.choose-file.upload-ajax.uploadInit = Envio est\u00e1 come\u00e7ando... +jsp.submit.choose-file.upload-ajax.uploadInProgress = Envio em progresso... <b>{0}%</b> [{1} bytes de {2}] +jsp.submit.choose-file.upload-ajax.uploadCompleted = Envio completado. +jsp.submit.complete.heading = Dep\u00f3sito: dep\u00f3sito completo +jsp.submit.complete.info = Seu dep\u00f3sito passar\u00e1 pelo processo de fluxo de dep\u00f3sito designado para a cole\u00e7\u00e3o \u00e0 qual voc\u00ea est\u00e1 enviando. Voc\u00ea receber\u00e1 uma notifica\u00e7\u00e3o por e-mail assim que seu dep\u00f3sito se tornar parte da cole\u00e7\u00e3o, ou se por alguma raz\u00e3o, houver problemas com o seu envio. Voc\u00ea tamb\u00e9m poder\u00e1 verificar o status de seu dep\u00f3sito, indo para o "Meu espa\u00e7o". +jsp.submit.complete.again = Submeter outro item para a mesma cole\u00e7\u00e3o +jsp.submit.complete.link = Ir para o Meu espa\u00e7o +jsp.submit.complete.title = Submiss\u00e3o completa +jsp.submit.creative-commons.choice1 = Pressione o bot\u00e3o 'Next' abaixo para <em> manter </em> a licen\u00e7a anteriormente escolhida. +jsp.submit.creative-commons.choice2 = Pressione a tecla 'Skip Creative Commons', bot\u00e3o abaixo, para <em>excluir </em> a escolha atual e abrir m\u00e3o de uma licen\u00e7a Creative Commons. +jsp.submit.creative-commons.choice3 = Complete o processo de sele\u00e7\u00e3o abaixo para <em> substituir </ em> a escolha atual. +jsp.submit.creative-commons.heading = Dep\u00f3sito: Use uma Licen\u00e7a Creative Commons +jsp.submit.creative-commons.info1 = Voc\u00ea j\u00e1 escolheu uma licen\u00e7a Creative Commons e acrescentou para este item. Voc\u00ea pode: +jsp.submit.creative-commons.info2 = Para licenciar o seu artigo em Creative Commons, siga as instru\u00e7\u00f5es abaixo. Ser\u00e1 dada \u00e0 voc\u00ea a oportunidade de rever sua sele\u00e7\u00e3o. Clique no link 'Prosseguir' para adicionar a licen\u00e7a. Se voc\u00ea deseja omitir uma licen\u00e7a Creative Commons, pressione o bot\u00e3o 'Skip Creative Commons ". +jsp.submit.creative-commons.info3 = Seu browser deve suportar IFrames para usar este recurso +jsp.submit.creative-commons.skip.button = N\u00e3o aderir +jsp.submit.creative-commons.title = Usar a licen\u00e7a Creative Commons +jsp.submit.edit-bitstream-access.title = Editar acesso ao arquivo +jsp.submit.edit-bitstream-access.heading = Editar acesso ao Bitstream +jsp.submit.edit-bitstream-access.save.button = Salvar +jsp.submit.edit-metadata.button.add = Adicionar mais +jsp.submit.edit-metadata.button.remove = Excluir esta entrada +jsp.submit.edit-metadata.button.remove2 = Excluir +jsp.submit.edit-metadata.cancelsave = Cancelar/Salvar +jsp.submit.edit-metadata.controlledvocabulary = Categorais de assuntos +jsp.submit.edit-metadata.day = Dia: +jsp.submit.edit-metadata.firstname = Primeiro(s) nome(s) <br/> ex. <strong>Jo\u00e3o</strong> +jsp.submit.edit-metadata.heading = Dep\u00f3sito: descreva este item +jsp.submit.edit-metadata.help = (Ajuda) +jsp.submit.edit-metadata.info1 = Preencha as informa\u00e7\u00f5es solicitadas sobre o dep\u00f3sito abaixo. Na maioria dos navegadores, voc\u00ea pode usar a tecla Tab para mover o cursor para a pr\u00f3xima caixa de entrada. +jsp.submit.edit-metadata.info2 = Preencha mais informa\u00e7\u00f5es sobre o dep\u00f3sito abaixo. +jsp.submit.edit-metadata.lastname = \u00faltimo nome + "Jr" <br/>ex. <strong>Silva</strong> +jsp.submit.edit-metadata.month = M\u00eas: +jsp.submit.edit-metadata.next = Pr\u00f3ximo +jsp.submit.edit-metadata.no_month = (Sem m\u00eas) +jsp.submit.edit-metadata.paperno = N\u00famero de relat\u00f3rio +jsp.submit.edit-metadata.previous = Anterior +jsp.submit.edit-metadata.seriesname = N\u00famero de s\u00e9rie +jsp.submit.edit-metadata.title = Descrever este item +jsp.submit.edit-metadata.year = Ano: +jsp.submit.general.cancel-or-save.button = Cancelar/Salvar +jsp.submit.general.next = Pr\u00f3ximo +jsp.submit.general.previous = Anterior +jsp.submit.general.submit = Submeter +jsp.submit.general.cancel = Cancelar +jsp.submit.general.save = Salvar +jsp.submit.get-file-format.choose.button = Escolha o tipo automaticamente reconhecido +jsp.submit.get-file-format.format = Formato do arquivo: +jsp.submit.get-file-format.heading = Dep\u00f3sito: Selecione o formato do arquivo +jsp.submit.get-file-format.info1 = Arquivo enviado: <code>{0}</code> ({1} bytes) +jsp.submit.get-file-format.info2 = DSpace n\u00e3o conseguiu identificar o formato do arquivo. +jsp.submit.get-file-format.info3 = DSpace reconheceu o formato de arquivo como {0}. <strong> Tenha certeza antes de mudar isso. </ strong> +jsp.submit.get-file-format.info5 = Selecione o formato do arquivo a partir da lista abaixo, por exemplo "Adobe PDF" ou "Microsoft Word", OU se o formato n\u00e3o est\u00e1 na lista, descreva o formato de arquivo na caixa de entrada, abaixo da lista. +jsp.submit.get-file-format.info6 = Formato n\u00e3o consta na lista +jsp.submit.get-file-format.info7 = <strong> Se o formato n\u00e3o est\u00e1 na lista acima </ strong>, descreva o formato adequado no espa\u00e7o abaixo. Digite o nome do aplicativo usado para criar o arquivo, e o n\u00famero da vers\u00e3o do aplicativo (por exemplo, "ACMESoft vers\u00e3o SuperApp 1.5"). +jsp.submit.get-file-format.known = (conhecido) +jsp.submit.get-file-format.supported = (suportada) +jsp.submit.get-file-format.title = Selecionar formato do arquivo +jsp.submit.initial-questions.elem1 = O item tem mais de um t\u00edtulo, por exemplo, um t\u00edtulo em outro idioma +jsp.submit.initial-questions.elem2 = O artigo j\u00e1 foi publicado ou distribu\u00eddo publicamente +jsp.submit.initial-questions.elem3 = O item \u00e9 composto por <em>mais de um</ em> arquivo +jsp.submit.initial-questions.elem4 = O item \u00e9 uma tese +jsp.submit.initial-questions.heading = Dep\u00f3sito: Descreva este item +jsp.submit.initial-questions.info = Marque as afirma\u00e7\u00f5es que se aplicam a este dep\u00f3sito. +jsp.submit.initial-questions.title = Descreva este item +jsp.submit.license-rejected.heading = Dep\u00f3sito: Licen\u00e7a Rejeitada +jsp.submit.license-rejected.info1 = Voc\u00ea optou por n\u00e3o conceder a licen\u00e7a para distribui\u00e7\u00e3o do documento entregue por meio do reposit\u00f3rio. Sua apresenta\u00e7\u00e3o n\u00e3o foi exclu\u00eddo e pode ser acessado a partir do reposit\u00f3rio no Meu Espa\u00e7o. +jsp.submit.license-rejected.info2 = Se voc\u00ea deseja entrar em contato conosco para discutir a licen\u00e7a, use um dos m\u00e9todos abaixo: +jsp.submit.license-rejected.title = Licen\u00e7a rejeitada +jsp.submit.no-theses.info1 = O reposit\u00f3rio n\u00e3o teses submetidas individualmente, por essa raz\u00e3o, incentiva-se o uso do site de submiss\u00e3o eletr\u00f4nica apoiado pela biblioteca da intitui\u00e7\u00e3o. +jsp.submit.no-theses.info2 = O reposit\u00f3rio n\u00e3o aceita teses submetidas individualmente, por essa raz\u00e3o, a submiss\u00e3o n\u00e3o ser\u00e1 processada> alguns arquivos n\u00e3o ser\u00e3o carregados. +jsp.submit.no-theses.info3 = Observe requisito para o seu grau. Devido \u00e0s importantes raz\u00f5es legais e de manuten\u00e7\u00e3o de registros, \u00e9 prov\u00e1vel que no futuro o reposit\u00f3rio ir\u00e1 trabalhar diretamente com o sistema eletr\u00f4nico tese para atualizar grupos de teses que tenham sido analisados \u00e2\u20ac\u2039\u00e2\u20ac\u2039e aprovados oficialmente. Obrigado pela compreens\u00e3o. +jsp.submit.no-theses.info4 = Para mais informa\u00e7\u00f5es <strong>entre em contato com os administradores do sistema</strong>: +jsp.submit.no-theses.info5 = Obrigado pelo seu interesse em nosso reposit\u00f3rio +jsp.submit.no-theses.title = Tese n\u00e3o aceita no reposit\u00f3rio +jsp.submit.progressbar.access = Acesso +jsp.submit.progressbar.complete = Completo +jsp.submit.progressbar.CClicense = Licen\u00e7a +jsp.submit.progressbar.describe = Descri\u00e7\u00e3o +jsp.submit.progressbar.initial-questions = Descri\u00e7\u00e3o +jsp.submit.progressbar.license = Licen\u00e7a +jsp.submit.progressbar.select = sele\u00e7\u00e3o +jsp.submit.progressbar.upload = Upload +jsp.submit.progressbar.verify = Verificar +jsp.submit.review.button.cancelsave = Cancelar/Salvar +jsp.submit.review.button.correct = Corre\u00e7\u00e3o de um campo +jsp.submit.review.button.edit = Editar detalhes do arquivo +jsp.submit.review.button.next = Pr\u00f3ximo +jsp.submit.review.button.previous = Anterior +jsp.submit.review.button.upload1 = Adicionar ou excluir arquivo +jsp.submit.review.button.upload2 = Upload de um arquivo diferente +jsp.submit.review.heading = Dep\u00f3sito: Verifique a submiss\u00e3o +jsp.submit.review.info1 = <strong>O processo de submiss\u00e3o ainda n\u00e3o est\u00e1 finalizado, por\u00e9m esta \u00e9 a etapa final.</strong> +jsp.submit.review.info2 = Gaste alguns minutos para examinar o que voc\u00ea acabou de depositar. Se algo estiver errado, volte e corrija-o usando os bot\u00f5es ao lado do erro ou clicando na barra "Fluxo de dep\u00f3sito" no topo da p\u00e1gina. +jsp.submit.review.info3 = <strong>Se estiver tudo certo,</strong> clique em "Pr\u00f3ximo" na parte inferior da p\u00e1gina. +jsp.submit.review.info4 = Clicando sobre o link, uma nova janela ser\u00e1 aberta e voc\u00ea poder\u00e1 verificar os arquivos que foram enviados. +jsp.submit.review.init-question1 = O item tem mais de um t\u00edtulo: +jsp.submit.review.init-question2 = Artigo publicado anteriormente: +jsp.submit.review.init-question3 = O item \u00e9 composto por mais de um arquivo: +jsp.submit.review.known = (conhecido) +jsp.submit.review.no_md = <em>Nenhum</em> +jsp.submit.review.state1 = Sim +jsp.submit.review.state2 = N\u00e3o +jsp.submit.review.supported = (Suportado) +jsp.submit.review.title = Verificar dep\u00f3sito +jsp.submit.review.unknown = (Desconhecido) +jsp.submit.review.upload1 = Arquivo carregado: +jsp.submit.review.upload2 = Arquivo carregado: +jsp.submit.review.policies.founded = Econtrada(s) {0} configura\u00e7\u00f5es de acesso +jsp.submit.review.policies.openaccess = Acesso livre +jsp.submit.review.policies.embargoed = Acesso \u00e9 permitido a partir de {0} +jsp.submit.saved.info = Sua apresenta\u00e7\u00e3o foi salva por voc\u00ea para terminar mais tarde. Voc\u00ea pode continuar a apresenta\u00e7\u00e3o, indo para a p\u00e1gina "Meu espa\u00e7o" e clicando no bot\u00e3o "Continuar". +jsp.submit.saved.title = Submiss\u00e3o aceita +jsp.submit.select-collection.collection = Cole\u00e7\u00e3o +jsp.submit.select-collection.heading = Dep\u00f3sito: Escolha uma cole\u00e7\u00e3o +jsp.submit.select-collection.info1 = Selecione a cole\u00e7\u00e3o que voc\u00ea deseja enviar um item a partir da lista abaixo e clique em "Pr\u00f3ximo". +jsp.submit.select-collection.none-authorized = Voc\u00ea n\u00e3o est\u00e1 autorizado a depositar em nenhuma cole\u00e7\u00e3o. +jsp.submit.select-collection.title = Selecione a cole\u00e7\u00e3o para depositar +jsp.submit.select-collection.no-collection = Voc\u00ea deve selecionar uma cole\u00e7\u00e3o para este item. +jsp.submit.select-collection.cancel = Cancelar +jsp.submit.show-license.grant.button = Eu concedo a licen\u00e7a +jsp.submit.show-license.heading1 = Dep\u00f3sito: Concess\u00e3o de Licen\u00e7a de Distribui\u00e7\u00e3o do reposit\u00f3rio +jsp.submit.show-license.info1 = <strong> Esta \u00e9 a \u00faltima etapa:</strong> Para que o reposit\u00f3rio possa reproduzir, traduzir e distribuir sua apresenta\u00e7\u00e3o a n\u00edvel mundial, \u00e9 necess\u00e1rio que voc\u00ea concorde com os termos a seguir. Dedique um momento para ler os termos desta licen\u00e7a, e clique em um dos bot\u00f5es na parte inferior da p\u00e1gina. Ao clicar sobre o bot\u00e3o "Concess\u00e3o de Licen\u00e7a", voc\u00ea indica que concede os seguintes termos da licen\u00e7a. +jsp.submit.show-license.info2 = <strong>A n\u00e3o concess\u00e3o da licen\u00e7a n\u00e3o excluir\u00e1 o seu dep\u00f3sito.</strong> O item permanecer\u00e1 na p\u00e1gina "Meu espa\u00e7o" . Voc\u00ea pode excluir o dep\u00f3sito do sistema ou concordar com a licen\u00e7a mais tarde, uma vez que suas d\u00favidas foram resolvidas. +jsp.submit.show-license.notgrant.button = Eu n\u00e3o concedo a licen\u00e7a +jsp.submit.show-license.title = Licen\u00e7a de distribui\u00e7\u00e3o do DSpace +jsp.submit.show-uploaded-file.checksum = Checagem de erros no envio do arquivo +jsp.submit.show-uploaded-file.click1.button = Clique aqui se este formato estiver errado +jsp.submit.show-uploaded-file.click2.button = Clique aqui se este arquivo estiver errado +jsp.submit.show-uploaded-file.click3.button = Configura\u00e7\u00f5es de embargo +jsp.submit.show-uploaded-file.file = Arquivo +jsp.submit.show-uploaded-file.format = Formato do arquivo +jsp.submit.show-uploaded-file.heading1 = Dep\u00f3sito: Arquivo carregado com sucesso +jsp.submit.show-uploaded-file.heading2 = Dep\u00f3sito: Arquivo carregado +jsp.submit.show-uploaded-file.info1 = Seu arquivo foi enviado com sucesso. +jsp.submit.show-uploaded-file.info2 = Aqui est\u00e3o os detalhes do arquivo que voc\u00ea enviou. Verifique-os antes de ir para a pr\u00f3xima etapa. +jsp.submit.show-uploaded-file.info3 = Voc\u00ea pode verificar se o arquivo foi carregado corretamente: +jsp.submit.show-uploaded-file.info4 = Clicando sobre o nome do arquivo acima. Voc\u00ea far\u00e1 o download do arquivo em uma nova janela do navegador, de modo que voc\u00ea possa verificar o conte\u00fado. +jsp.submit.show-uploaded-file.info5 = Comparando checagem de erros exibido acima com uma checagem elaborada em seu computador local. Eles devem ser exatamente o mesmo. +jsp.submit.show-uploaded-file.info6 = Clique aqui para saber como fazer isso. +jsp.submit.show-uploaded-file.info7 = O sistema pode calcular uma checagem e voc\u00ea pode verific\u00e1-la. +jsp.submit.show-uploaded-file.info8 = Clique aqui para mais informa\u00e7\u00f5es. +jsp.submit.show-uploaded-file.known = conhecido +jsp.submit.show-uploaded-file.notSupported = n\u00e3o suportado +jsp.submit.show-uploaded-file.show.button = Exibi\u00e7\u00e3o da checagem de erros no envio do arquivo +jsp.submit.show-uploaded-file.size = Tamanho jsp.submit.show-uploaded-file.size = Tamanho +jsp.submit.show-uploaded-file.size-in-bytes = {0} bytes +jsp.submit.show-uploaded-file.supported = Suportado +jsp.submit.show-uploaded-file.title = Upload de arquivo +jsp.submit.thesis-removed-workaround.heading = Submiss\u00e3o parada: Teses n\u00e3o aceitas no reposit\u00f3rio +jsp.submit.thesis-removed-workaround.info = Seu dep\u00f3sito foi interrompido. Para come\u00e7ar depositar novamente, clique abaixo. +jsp.submit.thesis-removed-workaround.link = Come\u00e7ar um novo dep\u00f3sito. +jsp.submit.thesis-removed-workaround.title = Submiss\u00e3o parada +jsp.submit.upload-error.heading = Submiss\u00e3o: Erro no upload do arquivo +jsp.submit.upload-error.info = Um problema na rede pode ter impedido o upload correto do arquivo ou voc\u00ea tentou carregar um formato de arquivo marcado para uso interno. Tente novamente. +jsp.submit.virus-error.info = O arquivo n\u00e3o foi carregado, pois parece conter um v\u00edrus. Entre em contato com o administrador do sistema. +jsp.submit.virus-checker-error.info = Um problema t\u00e9cnico foi encontrado enquanto tentando verificar o v\u00edrus do arquivo. Entre em contato com o administrador do sistema. +jsp.submit.upload-error.retry.button = Repetir Upload +jsp.submit.upload-error.title = Erro no upload do arquivo +jsp.submit.upload-file-list.button1 = Alterar +jsp.submit.upload-file-list.button2 = Deletar +jsp.submit.upload-file-list.button3 = Mostrar checagem de erros no envio do arquivo +jsp.submit.upload-file-list.button4 = Adicionar outro arquivo +jsp.submit.upload-file-list.button5 = Anterior +jsp.submit.upload-file-list.button6 = Pr\u00f3ximo +jsp.submit.upload-file-list.button7 = Cancelar/Salvar +jsp.submit.upload-file-list.button8 = Pol\u00edticas +jsp.submit.upload-file-list.empty1 = <em>Nenhum</em> +jsp.submit.upload-file-list.heading1 = Dep\u00f3sito: Arquivo carregado com sucesso +jsp.submit.upload-file-list.heading2 = Dep\u00f3sito: Envio de arquivos +jsp.submit.upload-file-list.help1 = Clique aqui para saber como fazer isso. +jsp.submit.upload-file-list.help2 = Clque aqui para obter mais informa\u00e7\u00f5es. +jsp.submit.upload-file-list.info1 = <strong>Seu arquivo foi carregado com sucesso.</strong> +jsp.submit.upload-file-list.info2 = A tabela abaixo mostra os arquivos que foram carregados para este item. +jsp.submit.upload-file-list.info3 = Voc\u00ea pode verificar se o(s) arquivo (s) foram enviados corretamente: +jsp.submit.upload-file-list.info4 = Clicando nos nomes acima ir\u00e1 ser feito o download do arquivo em uma nova janela do navegador, de modo que voc\u00ea possa verificar o conte\u00fado. +jsp.submit.upload-file-list.info5 = Checagem de erros comparando o exibido acima com a checagem elaborada em seu computador local. Elas devem ser exatamente a mesma. +jsp.submit.upload-file-list.info6 = O sistema pode calcular uma checagem e voc\u00ea pode verifica-la. +jsp.submit.upload-file-list.supportlevel1 = V\u00e1lido +jsp.submit.upload-file-list.supportlevel2 = Conhecido +jsp.submit.upload-file-list.supportlevel3 = N\u00e3o v\u00e1lido +jsp.submit.upload-file-list.tableheading1 = Prim\u00e1rio<br/>arquivo bin\u00e1rio +jsp.submit.upload-file-list.tableheading2 = Arquivo +jsp.submit.upload-file-list.tableheading3 = Tamanho +jsp.submit.upload-file-list.tableheading4 = Descri\u00e7\u00e3o +jsp.submit.upload-file-list.tableheading5 = Formato do arquivo +jsp.submit.upload-file-list.tableheading6 = Checagem de erros no envio do arquivo +jsp.submit.upload-file-list.tableheading7 = Configura\u00e7\u00f5es de acesso +jsp.submit.upload-file-list.title = Arquivos carregados +jsp.submit.verify-prune.heading = Dep\u00f3sito: cuidado +jsp.submit.verify-prune.info1 = As mudan\u00e7as que voc\u00ea fez na primeira p\u00e1gina "Descreva seu item" ir\u00e1 afetar a seu dep\u00f3sito: +jsp.submit.verify-prune.info2 = Voc\u00ea indicou que o envio n\u00e3o tem t\u00edtulos alternativos, mas adicionou t\u00edtulo alternativo. Se continuar com esta indica\u00e7\u00e3o, os t\u00edtulos alternativos que voc\u00ea inseriu ser\u00e3o removidos. +jsp.submit.verify-prune.info3 = Voc\u00ea indicou que o envio n\u00e3o foi publicado ou distribu\u00eddo publicamente antes, mas voc\u00ea j\u00e1 inseriu uma data de publica\u00e7\u00e3o, editor e/ou cita\u00e7\u00e3o. Se continuar, essas informa\u00e7\u00f5es ser\u00e3o removidas, e DSpace ir\u00e1 atribuir uma data de documento. +jsp.submit.verify-prune.info4 = Voc\u00ea indicou que o item que est\u00e1 submetendo consistem em apenas um \u00fanico arquivo, mas voc\u00ea j\u00e1 enviou mais de um arquivo. Se continuar, s\u00f3 o primeiro arquivo que voc\u00ea carregou ser\u00e1 mantido, e o restante ser\u00e1 descartado pelo sistema. (Os arquivos em seu disco r\u00edgido local n\u00e3o ser\u00e3o afetados.) +jsp.submit.verify-prune.notproceed.button = N\u00e3o fazer altera\u00e7\u00f5es +jsp.submit.verify-prune.proceed.button = Continuar com os altera\u00e7\u00f5es +jsp.submit.verify-prune.question = Voc\u00ea tem certeza que deseja continuar com as altera\u00e7\u00f5es? +jsp.submit.verify-prune.title = Answers to Initial Questions Changed +jsp.suggest.button.cancel = Cancelar +jsp.suggest.button.send = Enviar recomenda\u00e7\u00e3o +jsp.suggest.heading = Item recomendado: +jsp.suggest.invitation = Para recomendar este item a algu\u00e9m, preencha o formul\u00e1rio abaixo. Os campos marcados com '*' s\u00e3o obrigat\u00f3rios +jsp.suggest.message = Messagem pessoal: +jsp.suggest.recipemail = E-mail do destinat\u00e1rio*: +jsp.suggest.recipname = Nome do destinat\u00e1rio: +jsp.suggest.senderemail = Seu endere\u00e7o de e-mail: +jsp.suggest.sendername = Seu nome: +jsp.suggest.title = Recomendar um item +jsp.suggest.warning = Preencha todos os campos obrigat\u00f3rios +jsp.suggestok.button.close = Fechar +jsp.suggestok.heading = Sua recomenda\u00e7\u00e3o foi enviada com sucesso +jsp.suggestok.title = Recomenda\u00e7\u00e3o enviada +jsp.tombstone.text = O item que voc\u00ea est\u00e1 tentando acessar foi removido do reposit\u00f3rio. Se tiver d\u00favidas, entre em contato com os administradores. +jsp.tombstone.title = Item removido +jsp.tools.confirm-delete-collection.confirm = Voc\u00ea tem certeza que a cole\u00e7\u00e3o <strong>{0}</strong> deve ser exclu\u00edda? Ao deletar a cole\u00e7\u00e3o voc\u00ea tamb\u00e9m excluir\u00e1: +jsp.tools.confirm-delete-collection.heading = Deletar cole\u00e7\u00e3o: {0} +jsp.tools.confirm-delete-collection.info1 = Todos os itens e dep\u00f3sitos incompletos destas cole\u00e7\u00f5es que n\u00e3o est\u00e3o contidos em outras cole\u00e7\u00f5es> +jsp.tools.confirm-delete-collection.info2 = O conte\u00fado destes itens> +jsp.tools.confirm-delete-collection.info3 = Todas as pol\u00edticas de autoriza\u00e7\u00e3o associadas. +jsp.tools.confirm-delete-collection.title = Deletar cole\u00e7\u00e3o +jsp.tools.confirm-delete-community.confirm = Voc\u00ea tem certeza que a comunidade <strong>{0}</strong> deve ser exclu\u00edda? Ao deletar a comunidade voc\u00ea tamb\u00e9m excluir\u00e1: +jsp.tools.confirm-delete-community.heading = Deletar comunidade: {0} +jsp.tools.confirm-delete-community.info1 = Todas as cole\u00e7\u00f5es da comunidade que n\u00e3o est\u00e3o contidas em outras comunidades> +jsp.tools.confirm-delete-community.info2 = Todos os itens e dep\u00f3sitos incompletos destas cole\u00e7\u00f5es que n\u00e3o est\u00e3o contidos em outras cole\u00e7\u00f5es> +jsp.tools.confirm-delete-community.info3 = O conte\u00fado destes itens> +jsp.tools.confirm-delete-community.info4 = Todas as pol\u00edticas de autoriza\u00e7\u00e3o associadas. +jsp.tools.confirm-delete-community.title = Deletar comunidade +jsp.tools.confirm-delete-item.info = Voc\u00ea tem certeza que este item deve ser completamente eliminado? Aten\u00e7\u00e3o: No momento, nenhum vest\u00edgio ser\u00e1 deixado. +jsp.tools.confirm-delete-item.title = Deletar item +jsp.tools.confirm-withdraw-item.question = Tem certeza que o item deve ser retirado? +jsp.tools.confirm-withdraw-item.title = Retirar item +jsp.tools.confirm-withdraw-item.withdraw.button = Retirar +jsp.tools.confirm-privating-item.question = Tem certeza que este item deve possuir acesso restrito? +jsp.tools.confirm-privating-item.title = Restringir acesso ao item +jsp.tools.confirm-privating-item.privating.button = Restringir acesso ao item +jsp.tools.creative-commons-edit.heading1 = Adcionar ou substituir a licen\u00e7a Creative Commons License +jsp.tools.creative-commons-edit.title = Licen\u00e7a de distribui\u00e7\u00e3o do DSpace +jsp.tools.curate.collection.title = Curadoria da cole\u00e7\u00e3o +jsp.tools.curate.collection.heading = Curadoria da cole\u00e7\u00e3o: {0} +jsp.tools.curate.community.title = Curadoria da comunidade +jsp.tools.curate.community.heading = Curadoria da comunidade: {0} +jsp.tools.curate.item.title = Curadoria do item +jsp.tools.curate.item.heading = Curadoria do item: {0} +jsp.tools.curate.perform.button = Efetuar +jsp.tools.curate.perform.failure = A tarefa foi finalizada de forma inesperada. Para mais informa\u00e7\u00f5es, acione o(s) administrador(es) do reposit\u00f3rio ou verifique os logs do sistema. +jsp.tools.curate.perform.message.failure = ESTATUS: Falha, RESULTADO: {1} +jsp.tools.curate.perform.message.success = ESTATUS: {0}, RESULTADO: {1} +jsp.tools.curate.perform.success = Tarefa realizada com sucesso. +jsp.tools.curate.queue.button = Fila +jsp.tools.curate.queue.failure = Ocorreu um erro na execu\u00e7\u00e3o da tarefa. Para mais informa\u00e7\u00f5es, acione o(s) administrador(es) do reposit\u00f3rio ou verifique os logs do sistema. +jsp.tools.curate.queue.message.failure = RESULTADO: FALHA no enfileiramento do objeto ''{0}'' em ''{1}'' +jsp.tools.curate.queue.message.success = RESULTADO: Objeto ''{0}'' enfileirado em ''{1}'' +jsp.tools.curate.queue.success = Tarefa enfileirado como sucesso. +jsp.tools.curate.return.collection.button = Rertornar para a p\u00e1gina edi\u00e7\u00e3o de cole\u00e7\u00e3o +jsp.tools.curate.return.community.button = Rertornar para a p\u00e1gina edi\u00e7\u00e3o de comunidade +jsp.tools.curate.return.item.button = Rertornar para a p\u00e1gina edi\u00e7\u00e3o de item +jsp.tools.curate.select-group.tag = Escolher nos seguintes grupos +jsp.tools.curate.select-task.tag = Tarefa +jsp.tools.curate.task.name = Tarefa: {0} +jsp.tools.edit-collection.button.delete = Excluir esta cole\u00e7\u00e3o... +jsp.tools.edit-collection.form.basic-metadata = Metadados da cole\u00e7\u00e3o +jsp.tools.edit-collection.form.collection-settings = Configura\u00e7\u00f5es da cole\u00e7\u00e3o +jsp.tools.edit-collection.form.button.add-logo = Carregar novo logotipo +jsp.tools.edit-collection.form.button.cancel = Cancelar +jsp.tools.edit-collection.form.button.create = Criar +jsp.tools.edit-collection.form.button.create2 = Criar +jsp.tools.edit-collection.form.button.delete = Deletar +jsp.tools.edit-collection.form.button.delete-logo = Deletar (logotipo) +jsp.tools.edit-collection.form.button.edit = Editar +jsp.tools.edit-collection.form.button.set-logo = Carregar um logotipo +jsp.tools.edit-collection.form.button.update = Atualizar +jsp.tools.edit-collection.form.button.curate = Curadoria... +jsp.tools.edit-collection.form.label1 = Nome: +jsp.tools.edit-collection.form.label10 = Depositantes: +jsp.tools.edit-collection.form.label11 = Passo: +jsp.tools.edit-collection.form.label12 = Administradores da cole\u00e7\u00e3o: +jsp.tools.edit-collection.form.label13 = Modelo do item: +jsp.tools.edit-collection.form.label14 = Autoriza\u00e7\u00f5es das cole\u00e7\u00f5es: +jsp.tools.edit-collection.form.label15 = Configura\u00e7\u00f5es da coleta +jsp.tools.edit-collection.form.label16 = Fonte do conte\u00fado +jsp.tools.edit-collection.form.label17 = Esta \u00e9 uma cole\u00e7\u00e3o padr\u00e3o do DSpace +jsp.tools.edit-collection.form.label18 = Esta cole\u00e7\u00e3o coleta conte\u00fados de uma fonte externa +jsp.tools.edit-collection.form.label19 = Provedor OAI +jsp.tools.edit-collection.form.label20 = OAI Set Id +jsp.tools.edit-collection.form.label21 = Formato metadado +jsp.tools.edit-collection.form.label21.select.qdc = Dublin Core qualificado +jsp.tools.edit-collection.form.label21.select.dc = Dublin Core +jsp.tools.edit-collection.form.label21.select.dim = DSpace Intermediate Format +jsp.tools.edit-collection.form.label22 = Conte\u00fado sendo coletado +jsp.tools.edit-collection.form.label23 = Coletar metadados apenas. +jsp.tools.edit-collection.form.label24 = Coletar metadados e refer\u00eancias para seus arquivos bin\u00e1rios (requer ORE). +jsp.tools.edit-collection.form.label25 = Coletar metadados e arquivos bin\u00e1rios (requer ORE). +jsp.tools.edit-collection.form.label26 = Resultado do \u00faltimo harvest +jsp.tools.edit-collection.form.label27 = Curadoria da cole\u00e7\u00e3o: +jsp.tools.edit-collection.form.label2 = Breve descri\u00e7\u00e3o: +jsp.tools.edit-collection.form.label3 = Texto introdut\u00f3rio (HTML): +jsp.tools.edit-collection.form.label4 = Texto de direitos autorais (texto simples): +jsp.tools.edit-collection.form.label5 = Texto da barra lateral (HTML): +jsp.tools.edit-collection.form.label6 = Licen\u00e7a: +jsp.tools.edit-collection.form.label7 = Proveni\u00eancia: +jsp.tools.edit-collection.form.label8 = Logo: +jsp.tools.edit-collection.form.label9 = Fluxo de dep\u00f3sito +jsp.tools.edit-collection.heading1 = Criar cole\u00e7\u00e3o +jsp.tools.edit-collection.heading2 = Editar cole\u00e7\u00e3o {0} +jsp.tools.edit-collection.title = Editar cole\u00e7\u00e3o +jsp.tools.edit-collection.wf-role1 = Aceitar/Rejeitar +jsp.tools.edit-collection.wf-role2 = Aceitar/Rejeitar/Editar metadado +jsp.tools.edit-collection.wf-role3 = Editar metadado +jsp.tools.edit-community.button.delete = Deletar esta comunidade +jsp.tools.edit-community.form.basic-metadata = Metadados da comunidade +jsp.tools.edit-community.form.community-settings = Configura\u00e7\u00f5es da comunidade +jsp.tools.edit-community.form.button.add-logo = Carregar novo logotipo +jsp.tools.edit-community.form.button.cancel = Cancelar +jsp.tools.edit-community.form.button.create = Criar +jsp.tools.edit-community.form.button.remove = Deletar +jsp.tools.edit-community.form.button.delete-logo = Deletar (logotipo) +jsp.tools.edit-community.form.button.edit = Editar +jsp.tools.edit-community.form.button.set-logo = Carregar um logotipo +jsp.tools.edit-community.form.button.update = Atualizar +jsp.tools.edit-community.form.button.curate = Curadoria... +jsp.tools.edit-community.form.label1 = Nome: +jsp.tools.edit-community.form.label2 = Breve descri\u00e7\u00e3o: +jsp.tools.edit-community.form.label3 = Texto introdut\u00f3rio (HTML): +jsp.tools.edit-community.form.label4 = Texto sobre direitos autorais (texto simples): +jsp.tools.edit-community.form.label5 = Texto da barra lateral (HTML): +jsp.tools.edit-community.form.label6 = Logo: +jsp.tools.edit-community.form.label7 = Autoriza\u00e7\u00f5es da comunidade: +jsp.tools.edit-community.form.label8 = Administradores da comunidade: +jsp.tools.edit-community.form.label9 = Curadores da comunidade: +jsp.tools.edit-community.heading1 = Criar comunidade +jsp.tools.edit-community.heading2 = Editar comunidade {0} +jsp.tools.edit-community.title = Editar comunidade +jsp.tools.edit-item-form.addbit.button = Adicionar Bitstream +jsp.tools.edit-item-form.addcc.button = Adicionar licen\u00e7a Creative Commons +jsp.tools.edit-item-form.form.button.curate = Curadoria +jsp.tools.edit-item-form.collections = Nas cole\u00e7\u00f5es: +jsp.tools.edit-item-form.delete-w-confirm.button = Excluir definitivamente +jsp.tools.edit-item-form.elem0 = Esquema +jsp.tools.edit-item-form.elem1 = Elemento +jsp.tools.edit-item-form.elem10 = Formato +jsp.tools.edit-item-form.elem11 = Formato de descri\u00e7\u00e3o do usu\u00e1rio +jsp.tools.edit-item-form.elem2 = Qualificador +jsp.tools.edit-item-form.elem3 = Valor +jsp.tools.edit-item-form.elem4 = Idioma +jsp.tools.edit-item-form.elem5 = Prim\u00e1rio<br/>Bitstream +jsp.tools.edit-item-form.elem7 = Nome +jsp.tools.edit-item-form.elem8 = Fonte +jsp.tools.edit-item-form.elem9 = Descri\u00e7\u00e3o +jsp.tools.edit-item-form.elem12 = Ordem +jsp.tools.edit-item-form.form.label1 = Curadoria do item: +jsp.tools.edit-item-form.handle = Handle: +jsp.tools.edit-item-form.heading = Bitstreams +jsp.tools.edit-item-form.details = Detalhes do item +jsp.tools.edit-item-form.item = Autoriza\u00e7\u00f5es dos itens: +jsp.tools.edit-item-form.itemID = Item\u00a0interno\u00a0ID: +jsp.tools.edit-item-form.itempage = P\u00e1gina do item: +jsp.tools.edit-item-form.modified = \u00daltima modifica\u00e7\u00e3o: +jsp.tools.edit-item-form.move-item.button = Mover item +jsp.tools.edit-item-form.msg = Este item foi removido do reposit\u00f3rio +jsp.tools.edit-item-form.na = N/A +jsp.tools.edit-item-form.note = ATEN\u00c7\u00c3O: Estas mudan\u00e7as n\u00e3o s\u00e3o validados de forma alguma. Voc\u00ea \u00e9 respons\u00e1vel por inserir os dados no formato correto. Se voc\u00ea n\u00e3o tem certeza sobre o formato, n\u00e3o fa\u00e7a altera\u00e7\u00f5es. +jsp.tools.edit-item-form.note3 = Note que o campo \u201cformato de descri\u00e7\u00e3o do usu\u00e1rio\u201d n\u00e3o est\u00e1 vazio. O formato ser\u00e1 sempre definido como \u201cDesconhecido\u201d. Portanto, limpe-o antes de alterar o campo. +jsp.tools.edit-item-form.reinstate.button = Restabelecer +jsp.tools.edit-item-form.replacecc.button = Substituir Licen\u00e7a Creative Commons +jsp.tools.edit-item-form.title = Editar item +jsp.tools.edit-item-form.withdraw-w-confirm.button = Excluir +jsp.tools.edit-item-form.unlock = Desbloqueie a chave de autoridades para editar manualmente ou bloqueie novamente +jsp.tools.edit-item-form.move-up = Mover para cima +jsp.tools.edit-item-form.move-down = Mover para baixo +jsp.tools.edit-item-form.order-update = Atualizar arquivo bin\u00e1rio +jsp.tools.edit-item-form.privating-w-confirm.button = Tornar item privado... +jsp.tools.edit-item-form.publicize.button = Tornar item p\u00fablico +jsp.tools.eperson-list.close.button = Fechar +jsp.tools.eperson-list.heading = Usu\u00e1rio {0}-{1} de {2} +jsp.tools.eperson-list.info1 = Clicando no bot\u00e3o "Adicionar" situado ao lado do usu\u00e1rio ir\u00e1 mover o usu\u00e1rio para a lista do formul\u00e1rio principal. +jsp.tools.eperson-list.jump.first = Primeira +jsp.tools.eperson-list.jump.five-back = 5 p\u00e1ginas +jsp.tools.eperson-list.jump.five-forward = 5 p\u00e1ginas +jsp.tools.eperson-list.jump.last = \u00daltima +jsp.tools.eperson-list.jump.one-back = 1 p\u00e1gina +jsp.tools.eperson-list.jump.one-forward = 1 p\u00e1gina +jsp.tools.eperson-list.search.query = Termo de busca +jsp.tools.eperson-list.search.return-browse = Retornar para lista completa do usu\u00e1rio +jsp.tools.eperson-list.search.submit = Buscar +jsp.tools.eperson-list.th.email = E-mail +jsp.tools.eperson-list.th.email.sortedby = E-mail \u2018! +jsp.tools.eperson-list.th.firstname = Primeiro nome +jsp.tools.eperson-list.th.id = ID +jsp.tools.eperson-list.th.id.sortedby = ID \u2018! +jsp.tools.eperson-list.th.language = Idioma +jsp.tools.eperson-list.th.language.sortedby = Idioma \u2018! +jsp.tools.eperson-list.th.lastname = \u00daltimo nome +jsp.tools.eperson-list.th.lastname.sortedby = \u00daltimo nome \u2018! +jsp.tools.eperson-list.title = Selecionar usu\u00e1rios +jsp.tools.general.add = Adicionar +jsp.tools.general.cancel = Cancelar +jsp.tools.general.delete = Excluir +jsp.tools.general.delete-w-confirm = Excluir +jsp.tools.general.edit = Editar +jsp.tools.general.remove = Excluir +jsp.tools.general.select = Selecionar +jsp.tools.general.update = Atualizar +jsp.tools.general.view = Ver +jsp.tools.get-item-id.find.button = Buscar +jsp.tools.get-item-id.handle = Handle: +jsp.tools.get-item-id.heading = Editar ou deletar item +jsp.tools.get-item-id.info1 = <strong>O ID inserido n\u00e3o \u00e9 um ID de item v\u00e1lido.</strong> Se voc\u00ea est\u00e1 tentando editar uma comunidade ou cole\u00e7\u00e3o, voc\u00ea precisa usar o <a href= +jsp.tools.get-item-id.info2 = Insira o identificador Handle ou ID interno do item que deseja editar ou exluir. +jsp.tools.get-item-id.internal = ID interno: +jsp.tools.get-item-id.title = Editar item +jsp.tools.group-edit.eperson = Membros usu\u00e1rios +jsp.tools.group-edit.group = Membros do grupo +jsp.tools.group-edit.heading = Depois de realizar altera\u00e7\u00f5es neste grupo, clique no bot\u00e3o "Atualizar grupo" +jsp.tools.group-edit.name = Nome: +jsp.tools.group-edit.title = Editar grupo +jsp.tools.group-edit.update.button = Atualizar grupo +jsp.tools.group-list.create.button = Criar novo grupo +jsp.tools.group-list.id = ID +jsp.tools.group-list.name = Nome +jsp.tools.group-list.note1 = Note que voc\u00ea n\u00e3o precisa adicionar manualmente os usu\u00e1rios ao grupo "an\u00f4nimo" - todos os usu\u00e1rios s\u00e3o inicialmente membros deste grupo. +jsp.tools.group-list.note2 = Aten\u00e7\u00e3o: ao tentar excluir um grupo que \u00e9 regido por uma pol\u00edtica de autoriza\u00e7\u00e3o ou \u00e9 um grupo de fluxo de dep\u00f3sito, voc\u00ea receber\u00e1 uma notifica\u00e7\u00e3o de erro interno do servidor. +jsp.tools.group-list.title = Editar grupo +jsp.tools.group-select-list.close.button = Fechar +jsp.tools.group-select-list.heading = Grupos {0}-{1} of {2} +jsp.tools.group-select-list.info1 = Clicando no bot\u00e3o 'Adicionar' ao lado de um grupo, voc\u00ea adicionar\u00e1 esse grupo para uma lista no formul\u00e1rio principal +jsp.tools.group-select-list.jump.first = Primeira +jsp.tools.group-select-list.jump.five-back = 5 p\u00e1ginas +jsp.tools.group-select-list.jump.five-forward = 5 p\u00e1ginas +jsp.tools.group-select-list.jump.last = \u00faltima +jsp.tools.group-select-list.jump.one-back = 1 p\u00e1gina +jsp.tools.group-select-list.jump.one-forward = 1 p\u00e1gina +jsp.tools.group-select-list.th.id = ID +jsp.tools.group-select-list.th.id.sortedby = ID \u2018! +jsp.tools.group-select-list.th.name = Nome +jsp.tools.group-select-list.th.name.sortedby = Nome \u2018! +jsp.tools.group-select-list.title = Selecionar grupos +jsp.tools.itemmap-browse.add = Verifique na caixa de itens ao lado que voc\u00ea deseja adicionar para {0}, e escolha ''Adicionar''. +jsp.tools.itemmap-browse.heading-search = Itens que casam com a busca: ''{0}'' +jsp.tools.itemmap-browse.heading-collection = Itens mapeados da cole\u00e7\u00e3o {1} para cole\u00e7\u00e3o {0} +jsp.tools.itemmap-browse.remove = Verifique na caixa de itens ao lado que voc\u00ea deseja desmapear de {0}, e clique em "Deletar". +jsp.tools.itemmap-browse.th.action = A\u00e7\u00e3o +jsp.tools.itemmap-browse.th.author = Primeiro autor +jsp.tools.itemmap-browse.th.date = Data +jsp.tools.itemmap-browse.th.remove = Desmapeado +jsp.tools.itemmap-browse.th.title = T\u00edtulo +jsp.tools.itemmap-browse.title = Buscar itens +jsp.tools.itemmap-browse.info.change-page = A busca n\u00e3o retornou nenhum item. \u00c9 poss\u00edvel navegar no resultado por meio dos seguintes bot\u00f5es. Note que os itens ser\u00e3o mapeados somente ao se clicar no bot\u00e3 Adcionar. +jsp.tools.itemmap-browse.previous.button = P\u00e1gina anterior +jsp.tools.itemmap-browse.next.button = Pr\u00f3xima p\u00e1gina +jsp.tools.itemmap-info.button.continue = Continuar +jsp.tools.itemmap-info.heading = Informa\u00e7\u00f5es do item mapeado +jsp.tools.itemmap-info.msg.added = Adicionar item {0} +jsp.tools.itemmap-info.msg.none-selected = Nenhum item selecionado, nenhum adicionado. +jsp.tools.itemmap-info.msg.none-removed = Nenhum item selecionado, nenhum desmapeado. +# In the following 2 messages the only parameter is an item ID +jsp.tools.itemmap-info.msg.remove = Item n\u00e3o mapeado {0} +jsp.tools.itemmap-info.title = Informa\u00e7\u00e3o do item mapeado +jsp.tools.itemmap-main.collection = Cole\u00e7\u00e3o: "{0}" +jsp.tools.itemmap-main.heading = Mapear item - itens mapeados de outras cole\u00e7\u00f5es +jsp.tools.itemmap-main.info1 = Existem {0} itens pertencentes a esta cole\u00e7\u00e3o, e {1} itens mapeados de outras cole\u00e7\u00f5es. +jsp.tools.itemmap-main.info4 = Importar autor +jsp.tools.itemmap-main.info5 = Digite parte do nome de um autor para selecion\u00e1-lo em uma lista de correspondentes +jsp.tools.itemmap-main.info6 = Buscar itens importados das cole\u00e7\u00f5es: +jsp.tools.itemmap-main.info7 = Clique nos nomes da cole\u00e7\u00f5es para buscar por itens e deletar os que foram mapeados a partir dessa cole\u00e7\u00e3o. +jsp.tools.itemmap-main.info8 = Esta cole\u00e7\u00e3o n\u00e3o possui itens mapeados. +jsp.tools.itemmap-main.search.button = Buscar autor +jsp.tools.itemmap-main.title = Mapear item +jsp.tools.move-item.button = Mover +jsp.tools.move-item.collection.from.msg = Mover da cole\u00e7\u00e3o +jsp.tools.move-item.collection.to.msg = Mover para cole\u00e7\u00e3o +jsp.tools.move-item.item.name.msg = Nome do item a ser movido +jsp.tools.move-item.title = Mover um item +jsp.tools.move-item.inheritpolicies = Manter o padr\u00e3o de pol\u00edticas da cole\u00e7\u00e3o de destino +jsp.tools.upload-bitstream.info = Selecionar o arquivo bin\u00e1rio para carregar +jsp.tools.upload-bitstream.title = Carregar Bitstream +jsp.tools.upload-bitstream.upload = Carregar +jsp.workspace.ws-error.errormsg1 = O sistema n\u00e3o conseguiu processar a sua solicita\u00e7\u00e3o corretamente. Voc\u00ea deve especificar um item. +jsp.workspace.ws-error.errormsg2 = Volte para o "Meu espa\u00e7o" e clique em "Abrir" para o item de trabalho que voc\u00ea deseja trabalhar. Se voc\u00ea ainda estiver com problemas, entre em contato. +jsp.workspace.ws-error.heading = Erro - Workspace Item +jsp.workspace.ws-error.title = Meu espa\u00c3\u00a7o - Workspace Error +jsp.workspace.ws-main.button.edit = Editar +jsp.workspace.ws-main.button.remove = Excluir +jsp.workspace.ws-main.button.view = Ver +jsp.workspace.ws-main.descheading = Descri\u00e7\u00e3o +jsp.workspace.ws-main.editmsg = Abrir item para para editar e gerenciar arquivos. +jsp.workspace.ws-main.optionheading = Op\u00e7\u00e3o +jsp.workspace.ws-main.removemsg = Excluir os itens permanentemente. +jsp.workspace.ws-main.submitmsg = Este item est\u00e1 sendo submetido \u00e0 cole\u00e7\u00e3o: +jsp.workspace.ws-main.title = Meu espa\u00e7o +jsp.workspace.ws-main.viewmsg = Ver o registro do item como ele se encontra na fase de dep\u00f3sito. +jsp.workspace.ws-main.wsitem = \u00c1rea de trabalho do item +jsp.workspace.wsv-error.errormsg1 = O sistema n\u00e3o conseguiu processar a sua solicita\u00e7\u00e3o corretamente. Voc\u00ea deve especificar um item. +jsp.workspace.wsv-error.errormsg2 = Volte para o "Meu espa\u00e7o" e clique em "Abrir" para o item de trabalho que voc\u00ea deseja trabalhar. Se voc\u00ea ainda estiver com problemas, entre em contato. +jsp.workspace.wsv-error.heading = Erro - Ver \u00edtem da \u00e1rea de trabalho +jsp.workspace.wsv-error.title = Meu espa\u00e7o - Ver erro do item da \u00e1rea de trabalho + +metadata.dc.contributor.* = Autor(es) metadata.dc.contributor.author = Autor(es) metadata.dc.contributor.editor = Editor(es) +metadata.dc.contributor.author = Autor(es) +metadata.dc.contributor.editor = Editor(es) +metadata.dc.date.issued = Data do documento +metadata.dc.description = Descri\u00e7\u00e3o +metadata.dc.description.abstract = Resumo +metadata.dc.identifier = Outros identificadores +metadata.dc.identifier.citation = Cita\u00e7\u00e3o +metadata.dc.identifier.govdoc = Gov't Doc # +metadata.dc.identifier.isbn = ISBN +metadata.dc.identifier.ismn = ISMN +metadata.dc.identifier.issn = ISSN +metadata.dc.identifier.uri = URI +metadata.dc.publisher = Editora / Evento / Institui\u00e7\u00e3o metadata.dc.publisher = Editor +metadata.dc.relation.ispartofseries = S\u00e9rie/Relat\u00f3rio no. +metadata.dc.subject = Palavras-chave +metadata.dc.title = T\u00edtulo +metadata.dc.title.alternative = T\u00edtulo(s) alternativo(s) + +news-side.html = noticias-lado.html + +news-top.html = noticias-topo.html + +org.dspace.app.itemexport.no-result = O objeto que voc\u00ea especificou n\u00e3o possui items. +org.dspace.app.webui.jsptag.CollectionListTag.collectionName = Nome da cole\u00e7\u00e3o +org.dspace.app.webui.jsptag.CommunityListTag.communityName = Nome da comunidade +org.dspace.app.webui.jsptag.ItemListTag.authors = Autores +org.dspace.app.webui.jsptag.ItemListTag.issueDate = Data de publica\u00e7\u00e3o +org.dspace.app.webui.jsptag.ItemListTag.title = T\u00edtulo +org.dspace.app.webui.jsptag.ItemTag.appears = Aparece nas cole\u00e7\u00f5es: +org.dspace.app.webui.jsptag.ItemTag.dcfield = Campo DC +org.dspace.app.webui.jsptag.ItemTag.description = Descri\u00e7\u00e3o +org.dspace.app.webui.jsptag.ItemTag.file = Arquivo +org.dspace.app.webui.jsptag.ItemTag.fileformat = Formato +org.dspace.app.webui.jsptag.ItemTag.files = Arquivos associados a este item: +org.dspace.app.webui.jsptag.ItemTag.files.no = N\u00e3o existem arquivos associados a este item. +org.dspace.app.webui.jsptag.ItemTag.filesize = Tamanho +org.dspace.app.webui.jsptag.ItemTag.full = Registro completo de metadados +org.dspace.app.webui.jsptag.ItemTag.itemprotected = Este arquivo \u00e9 protegido por direitos autorais +org.dspace.app.webui.jsptag.ItemTag.lang = Idioma +org.dspace.app.webui.jsptag.ItemTag.submitted = Submeter para cole\u00e7\u00e3o: +org.dspace.app.webui.jsptag.ItemTag.thumbnail = Thumbnail +org.dspace.app.webui.jsptag.ItemTag.value = Valor +org.dspace.app.webui.jsptag.ItemTag.view = Visualizar/Abrir +org.dspace.app.webui.jsptag.ItemTag.viewlicence = Ver licen\u00e7a +org.dspace.app.webui.jsptag.SelectEPersonTag.removeSelected = Excluir selecionado +org.dspace.app.webui.jsptag.SelectEPersonTag.selectPeople = Selecionar usu\u00e1rios +org.dspace.app.webui.jsptag.SelectEPersonTag.selectPerson = Selecionar usu\u00e1rio +org.dspace.app.webui.jsptag.SelectGroupTag.removeSelected = Excluir selecionado +org.dspace.app.webui.jsptag.SelectGroupTag.selectGroup = Selecionar grupo +org.dspace.app.webui.jsptag.SelectGroupTag.selectGroups = Selecionar grupos +#there are two more types of feeds: Collection and Community level feeds +org.dspace.app.webui.servlet.FeedServlet.feed-type.collection = Cole\u00e7\u00e3o +org.dspace.app.webui.servlet.FeedServlet.feed-type.community = Communidade +# In the following takes in feed type and the title of the collection/community +org.dspace.app.webui.servlet.FeedServlet.feed.title = DSpace {0}: {1} +#the general-feed is the feed for all of DSpace +org.dspace.app.webui.servlet.FeedServlet.general-feed.description = O sistema DSpace de reposit\u00f3rio digital captura, armazena, indexa, preserva e distribui material de pesquisa digital. +org.dspace.app.webui.servlet.FeedServlet.logo.title = Imagem +org.dspace.app.webui.servlet.FeedServlet.notitle = Sem t\u00edtulo +org.dspace.app.webui.servlet.FeedServlet.search.description = Buscar o canal +org.dspace.app.webui.servlet.FeedServlet.search.name = Buscar +# The following takes in the feed type (collection or community) +org.dspace.app.webui.servlet.FeedServlet.search.title = O {0}''s motor(es) de busca +org.dspace.app.webui.servlet.FeedServlet.search.title.default = Motor de busca do reposit\u00f3rio +org.dspace.app.webui.servlet.SuggestServlet.recipient = Colega +org.dspace.app.webui.servlet.SuggestServlet.sender = Um usu\u00e1rio do reposit\u00f3rio +org.dspace.app.webui.servlet.admin.CurationServlet.null-result = Nada a fazer para este objeto. +org.dspace.app.webui.servlet.admin.MetadataFieldRegistryServlet.badelemchar = o elemento n\u00e3o pode conter per\u00edodos, sublinhados ou espa\u00e7os. +org.dspace.app.webui.servlet.admin.MetadataFieldRegistryServlet.badqualchar = O qualificador n\u00e3o pode conter per\u00edodos, sublinhados ou espa\u00e7os. +org.dspace.app.webui.servlet.admin.MetadataFieldRegistryServlet.createfailed = O campo solicitado n\u00e3o pode ser criado devido a um campo j\u00e1 existente com um nome id\u00eantico. +org.dspace.app.webui.servlet.admin.MetadataFieldRegistryServlet.elemempty = O elemento n\u00e3o pode ser vazio. +org.dspace.app.webui.servlet.admin.MetadataFieldRegistryServlet.elemtoolong = O elemento deve ser menor que 64 caracteres. +org.dspace.app.webui.servlet.admin.MetadataFieldRegistryServlet.movearguments = Selecione um campo para mover e definir destino do esquema. +org.dspace.app.webui.servlet.admin.MetadataFieldRegistryServlet.movefailed = O campo solicitado n\u00e3o pode ser movido devido a um campo id\u00eantico no esquema de destino. +org.dspace.app.webui.servlet.admin.MetadataFieldRegistryServlet.qualtoolong = O qualificador deve ser menor do que 64 caracteres +org.dspace.app.webui.servlet.admin.MetadataSchemaRegistryServlet.emptyname = O nome curto n\u00e3o pode ser vazio +org.dspace.app.webui.servlet.admin.MetadataSchemaRegistryServlet.emptynamespace = O nome de usu\u00e1rio n\u00e3o pode ser vazio +org.dspace.app.webui.servlet.admin.MetadataSchemaRegistryServlet.illegalchar = O nome abreviado n\u00e3o pode conter espa\u00c3\u00a7os, sublinhados ou espa\u00e7os +org.dspace.app.webui.servlet.admin.MetadataSchemaRegistryServlet.nametolong = O nome curto deve ter 32 caracteres ou menos +org.dspace.checker.ResultsLogger.bitstream-format = Formatado arquivo bin\u00e1rio +org.dspace.checker.ResultsLogger.bitstream-found = Encontrado arquivo bin\u00e1rio +org.dspace.checker.ResultsLogger.bitstream-id = ID do arquivo bin\u00e1rio +org.dspace.checker.ResultsLogger.bitstream-info-found = Informa\u00e7\u00e3o de arquivo bin\u00e1rio +org.dspace.checker.ResultsLogger.bitstream-marked-deleted = Arquivo bin\u00e1rio exclu\u00eddo +org.dspace.checker.ResultsLogger.checksum-algorithm = Verificar soma dos algoritmos +org.dspace.checker.ResultsLogger.checksum-comparison-result = Resultado da checagem de erros no envio do arquivo +org.dspace.checker.ResultsLogger.internal-id = Id interno +org.dspace.checker.ResultsLogger.name = Nome +org.dspace.checker.ResultsLogger.new-checksum = Nova verifica\u00e7\u00e3o +org.dspace.checker.ResultsLogger.previous-checksum = Verifica\u00e7\u00e3o anterior +org.dspace.checker.ResultsLogger.previous-checksum-data = Dados de verifica\u00e7\u00e3o anteriores +org.dspace.checker.ResultsLogger.previous-checksum-date = Dados de verifica\u00e7\u00e3o anteriores +org.dspace.checker.ResultsLogger.run-start-time = Executar a hora de in\u00edcio +org.dspace.checker.ResultsLogger.size = Tamanho +org.dspace.checker.ResultsLogger.source = Fonte +org.dspace.checker.ResultsLogger.store-number = N\u00famero de registro +org.dspace.checker.ResultsLogger.to-be-processed = Para ser processado +org.dspace.checker.ResultsLogger.user-format-description = Descri\u00e7\u00e3o do formato do usu\u00e1rio +org.dspace.checker.SimpleReporterImpl.bitstream-id = ID Bitstream +org.dspace.checker.SimpleReporterImpl.bitstream-not-found-report = A lista seguinte trata de intes cujos BITSTREAM n\u00e3o foram encontrados para +org.dspace.checker.SimpleReporterImpl.bitstream-will-no-longer-be-processed = A lista seguinte trata de itens cujos BITSTREAM n\u00e3o foram verificados para +org.dspace.checker.SimpleReporterImpl.check-id = Verificar Id +org.dspace.checker.SimpleReporterImpl.checksum = Vericar a soma +org.dspace.checker.SimpleReporterImpl.checksum-algorithm = Verificar a soma dos algoritmos +org.dspace.checker.SimpleReporterImpl.checksum-calculated = Verificar a soma calculada +org.dspace.checker.SimpleReporterImpl.checksum-did-not-match = A lista seguinte trata de itens cuja checagem de erros falhou para +org.dspace.checker.SimpleReporterImpl.checksum-expected = Verificar a soma esperada +org.dspace.checker.SimpleReporterImpl.date-range-to = para +org.dspace.checker.SimpleReporterImpl.deleted = Excluir +org.dspace.checker.SimpleReporterImpl.deleted-bitstream-intro = Os itens seguintes comp\u00f5e relat\u00f3rio de um conjunto de BITSTREAM deletados para +org.dspace.checker.SimpleReporterImpl.description = Descri\u00e7\u00e3o +org.dspace.checker.SimpleReporterImpl.format-id = Formatar Id +org.dspace.checker.SimpleReporterImpl.howto-add-unchecked-bitstreams = Para adcionar esses arquivos bin\u00e1rios para serem checados, rode o checksum com a op\u00e7\u00e3o -u +org.dspace.checker.SimpleReporterImpl.internal-id = Id interno +org.dspace.checker.SimpleReporterImpl.name = Nome +org.dspace.checker.SimpleReporterImpl.no-bitstreams-changed = Os arquivos bin\u00e1rios n\u00e3o foram encontrados com a altera\u00e7\u00e3o das somas de verifica\u00e7\u00e3o +org.dspace.checker.SimpleReporterImpl.no-bitstreams-to-delete = N\u00e3o foram encontrados arquivos bin\u00e1rios definidos como exclu\u00eddos hoje +org.dspace.checker.SimpleReporterImpl.no-bitstreams-to-no-longer-be-processed = N\u00e3o foram encontrados arquivos bin\u00e1rios configurados para n\u00e3o serem processados +org.dspace.checker.SimpleReporterImpl.no-changed-bitstreams = N\u00e3o for\u00e3o encontrados arquivos bin\u00e1rios com a mudan\u00e7 de checagem +org.dspace.checker.SimpleReporterImpl.no-unchecked-bitstreams = N\u00e3o h\u00e1 arquivos bin\u00e1rios que n\u00e3o foram verificados +org.dspace.checker.SimpleReporterImpl.process-end-date = Processar data final +org.dspace.checker.SimpleReporterImpl.process-start-date = Processar data de in\u00edcio +org.dspace.checker.SimpleReporterImpl.result = Resultado +org.dspace.checker.SimpleReporterImpl.size = Tamanho +org.dspace.checker.SimpleReporterImpl.source = Fonte +org.dspace.checker.SimpleReporterImpl.store-number = Store Number +org.dspace.checker.SimpleReporterImpl.unchecked-bitstream-report = Segue relat\u00f3 de BITSTREAM n\u00e3o checado para +org.dspace.content.Collection.untitled = Sem t\u00edtulo +org.dspace.content.Community.untitled = Sem t\u00edtulo +org.dspace.eperson.LDAPAuthentication.title = Insira LDAP NetID e Senha +org.dspace.eperson.PasswordAuthentication.title = Insira Nome de usu\u00e1rio e Senha +org.dspace.eperson.X509Authentication.title = Entrar no reposit\u00f3rio usando certificado da Web +org.dspace.authenticate.ShibAuthentication.title = Entrar via Shibboleth +org.dspace.eperson.Subscribe.authors = Autor: +org.dspace.eperson.Subscribe.id = Identificador: +org.dspace.eperson.Subscribe.new-items = Novos itens: +org.dspace.eperson.Subscribe.title = T\u00edtulo: +org.dspace.statistics.util.LocationUtils.unknown-continent = Continente desconhecido +org.dspace.statistics.util.LocationUtils.unknown-country = Pa\u00eds desconhecido +org.dspace.workflow.WorkflowManager.step1 = Este dep\u00f3sito exige revis\u00e3o. +org.dspace.workflow.WorkflowManager.step2 = O dep\u00f3sito deve ser verificado antes da inclus\u00e3o no reposit\u00f3rio. +org.dspace.workflow.WorkflowManager.step3 = Os metadados devem ser verificados para garantir a conformidade com os padr\u00f5es da cole\u00e7\u00e3o e editados, caso seja necess\u00e1rio. +org.dspace.workflow.WorkflowManager.untitled = Sem t\u00edtulo + +search.order.asc = Crescente +search.order.desc = Descendente +search.results.etal = Registro(s) +search.results.order = Ordenar +search.results.perpage = Resultados/P\u00e1gina +search.results.sort-by = Ordenar registros por +search.sort-by.relevance = Relev\u00e2ncia +search.sort-by.title = T\u00edtulo +search.sort-by.dateissued = Data do documento +search.sort-by.dateaccessioned = Data de dep\u00f3sito +# used by discovery (standard sort index <metadata>_sort) +search.sort-by.dc.title_sort = T\u00edtulo +# used by discovery (date sort index <metadata>_dt) +search.sort-by.dc.date.issued_dt = Data de Publica\u00e7\u00e3o +search.update = Atualizar + +# authority-control confidence levels, descriptions: +jsp.authority.confidence.description.unset = Este valor n\u00e3o tem confian\u00e7a associada +jsp.authority.confidence.description.novalue = Nenhum valor confi\u00e1vel foi retornado por parte da autoridade +jsp.authority.confidence.description.rejected = A autoridade recomenda que esta submiss\u00e3o seja rejeitada +jsp.authority.confidence.description.failed = O administrador encontrou uma falha interna +jsp.authority.confidence.description.notfound = N\u00e3o h\u00e1 resultados correspondentes \u00e0 autoridade +jsp.authority.confidence.description.ambiguous = Existem v\u00e1rios resultados correspondentes e igualmente v\u00e1lidos +jsp.authority.confidence.description.uncertain = O resultado \u00e9 singular \u00e9 v\u00e1lido, mas n\u00e3o foi revisado e aceito. Por isso ainda \u00e9 incerto. +jsp.authority.confidence.description.accepted = Esta autoridade foi confirmada por um usu\u00e1rio interativo + +jsp.tools.lookup.title = DSpace Valor Lookup +jsp.tools.lookup.heading = Buscar por valor +jsp.tools.lookup.accept = Aceitar +jsp.tools.lookup.add = Adicionar +jsp.tools.lookup.cancel = Cancelar +jsp.tools.lookup.more = Ver mais resultados +jsp.tools.lookup.fail = Falha ao carregar os dados: +jsp.tools.lookup.results = Resultados @1@ at\u00e9 @2@ do @3@ at\u00e9 "@4@" +jsp.tools.lookup.lookup = Buscar este resultado + +# choice lookup example for dc.publisher +jsp.tools.lookup.field.dc_publisher.help = Nome do editor +jsp.tools.lookup.field.dc_publisher.title = Buscar por editor +jsp.tools.lookup.field.dc_publisher.nonauthority = Valor da n\u00e3o-autoridade: @1@ + +# choice lookup example for dc.contributor.author +jsp.tools.lookup.field.dc_contributor_author.help = Formato do nome "\u00daltimo, Primeiro" +jsp.tools.lookup.field.dc_contributor_author.help.last = \u00daltimo nome, por exemplo, "Silva" +jsp.tools.lookup.field.dc_contributor_author.help.first = Primeiro(s) nome(s), por exemplo, "Maria" +jsp.tools.lookup.field.dc_contributor_author.title = Buscar autor na base LC Names +jsp.tools.lookup.field.dc_contributor_author.nonauthority = Valor local '@1@' (n\u00e3o em Nome de autoridade) + +# reset password +jsp.dspace-admin.eperson-main.ResetPassword.title = Redefinir senha +jsp.dspace-admin.eperson-main.ResetPassword.head = Redefinir senha +jsp.dspace-admin.eperson-main.ResetPassword.submit = Redefinir senha +jsp.dspace-admin.eperson-main.ResetPassword.success_notice = Um email foi enviado para o usu\u00e1rio contendo um token que pode ser usado para a cria\u00e7\u00e3o de uma nova senha. +jsp.dspace-admin.eperson-main.ResetPassword-error.errormsg = Ocorreu um erro no envio do email com as instru\u00e7\u00f5es. +jsp.dspace-admin.eperson-main.ResetPassword.returntoedit = Retornar \u00e0 p\u00e1gina de administra\u00e7\u00e3o de usu\u00e1rios + +# login as +jsp.dspace-admin.eperson-main.LoginAs.submit = Login como +jsp.dspace-admin.eperson-main.loginAs.authorize.errormsg = Raz\u00e3o: voc\u00ea n\u00e3o pode assumir o login de outro administrador. +jsp.dspace-admin.eperson-main.loginAs.authorize.title = Erro de autoriza\u00e7\u00e3o +jsp.dspace-admin.eperson-main.loginAs.backtoeditpeople = Voltar para a p\u00e1gina de administra\u00e7\u00e3o de usu\u00e1rios + +org.dspace.app.webui.jsptag.access-setting.legend = Embargo +org.dspace.app.webui.jsptag.access-setting.label_name = Nome\: +org.dspace.app.webui.jsptag.access-setting.label_group = Grupos\: +org.dspace.app.webui.jsptag.access-setting.label_embargo = Acesso para o grupo selecionado: +org.dspace.app.webui.jsptag.access-setting.label_reason = Raz\u00e3o\: +org.dspace.app.webui.jsptag.access-setting.label_date = Data de Embargo\: +org.dspace.app.webui.jsptag.access-setting.radio0 = Permitir acesso imediato ao arquivo assim que o item for aceito +org.dspace.app.webui.jsptag.access-setting.radio1 = Embargo at\u00e9 a data +org.dspace.app.webui.jsptag.access-setting.radio_help = O primeiro dia em que o acesso \u00e9 permitido. Formatos aceitos: aaaa, aaaa-mm, aaaa-mm-dd +org.dspace.app.webui.jsptag.access-setting.button_confirm = Confirmar pol\u00edtica +org.dspace.app.webui.jsptag.policies-list.label_name = Nome +org.dspace.app.webui.jsptag.policies-list.label_action = A\u00e7\u00e3o +org.dspace.app.webui.jsptag.policies-list.label_group = Grupo +org.dspace.app.webui.jsptag.policies-list.label_sdate = Data de in\u00edcio +org.dspace.app.webui.jsptag.policies-list.label_edate = Data final +org.dspace.app.webui.jsptag.policies-list.no_policies = Nenhum grupo de pol\u00edticas est\u00e1 configurado para este item + +org.dspace.app.webui.jsptag.access-setting.name_help = Um nome descritivo curto para a pol\u00edtica (at\u00e9 30 caracteres). Pode ser exibido para os usu\u00e1rios finais. Exemplo: "Somente funcion\u00e1rios". Opcional mas recomendado. +org.dspace.app.webui.jsptag.access-setting.reason_help = A raz\u00e3o para o embargo, tipicamente somente para uso interno. Opcional. + +jsp.layout.navbar-admin.accesscontrol = Controle de Acesso +jsp.layout.navbar-admin.contents = Conte\u00fado +jsp.layout.navbar-admin.settings = Configura\u00e7\u00f5es gerais + +jsp.submit.start-lookup-submission.title = Nova submiss\u00e3o +jsp.submit.start-lookup-submission.heading = Nova submiss\u00e3o: recupere dados de servi\u00e7os bibliogr\u00e1ficos externos +jsp.submit.start-lookup-submission.tabs.search = Formul\u00e1rio de busca +jsp.submit.start-lookup-submission.tabs.result = Resultados +jsp.submit.start-lookup-submission.identifiers = Buscar por identificador + +jsp.submit.start-lookup-submission.identifiers.hints = Pesquise por identificador de publica\u00e7\u00e3o (DOI \u00e9 preferido). Uma lista de todas as publica\u00e7\u00f5es encontradas ser\u00e1 exibida e voc\u00ea poder\u00e1 selecionar a mais adequada para aproveitar estes dados no processo de submiss\u00e3o. +jsp.submit.start-lookup-submission.identifier-doi = DOI (Indentificador de Objeto Digital) +jsp.submit.start-lookup-submission.identifier-doi.hint = e.g. 10.1021/ac0354342 +jsp.submit.start-lookup-submission.identifier-pubmed = PubMed ID +jsp.submit.start-lookup-submission.identifier-pubmed.hint = e.g. 20524090 +jsp.submit.start-lookup-submission.identifier-arxiv = arXiv ID +jsp.submit.start-lookup-submission.identifier-arxiv.hint = e.g. arXiv:1302.1497 +jsp.submit.start-lookup-submission.identifier-cinii = CiNii NAID +jsp.submit.start-lookup-submission.identifier-cinii.hint = e.g. 110004744915 +jsp.submit.start-lookup-submission.search = Busca livre + +jsp.submit.start-lookup-submission.search.hints = Entre com as informa\u00e7\u00f5es b\u00e1sicas sobre a publica\u00e7\u00e3o: <b>t\u00edtulo</b> ou <b>autor/ano</b> s\u00e3o obrigat\u00f3rios.<br/>Se um identificador \u00fanico \u00e9 conhecido como: <b>DOI</b>, <b>Pubmed</b>, or <b>arXiv</b>, \u00e9 poss\u00ecvel selecionar o <span id="link-ricerca-identificatore">Modo de busca de identificador</span>. +jsp.submit.start-lookup-submission.search.title = T\u00edtulo +jsp.submit.start-lookup-submission.search.year = Ano +jsp.submit.start-lookup-submission.search.authors = Autores/Editores +jsp.submit.start-lookup-submission.identifier.lookup = Buscar +jsp.submit.start-lookup-submission.search-go = Buscar +jsp.submit.start-lookup-submission.exit = Sair +jsp.submit.start-lookup-submission.search-loading.title = Carregando... +jsp.submit.start-lookup-submission.search-loading.hint = Conectando com o servi\u00e7o externo para recuperar as publica\u00e7\u00f5es solicitadas. Por favor, aguarde um momento. Se esta janela for fechada, a requisi\u00e7\u00e3o ser\u00e1 abortada. +jsp.submit.edit-metadata.affiliation.select = Muitas escolhas poss\u00edveis, favor escolha uma para continuar! +jsp.submit.edit-metadata.affiliation.other = Outro +jsp.submit.start-lookup-submission.no-collection = Nenhuma cole\u00e7\u00e3o selecionada +jsp.submit.start-lookup-submission.no-collection-warn.title = Aten\u00e7\u00e3o, nenhuma cole\u00e7\u00e3o +jsp.submit.start-lookup-submission.no-collection-warn.hint = A cole\u00e7\u00e3o da publica\u00e7\u00e3o \u00e9 obrigat\u00f3ria. +jsp.submit.start-lookup-submission.manual-submission = Modo de submiss\u00e3o por formul\u00e1rio +jsp.submit.start-lookup-submission.button.manual-submission = Submiss\u00e3o manual +jsp.submit.start-lookup-submission.select.collection.label = Selecione a cole\u00e7\u00e3o: +jsp.submit.start-lookup-submission.select.collection.defaultoption = Selecione... +jsp.submit.start-lookup-submission.noresult = Nenhum resultado dispon\u00edvel! + +jsp.submit.start-lookup-submission.js.errormessage = Erro, tente novamente. Se esta mensagem aparecer novamente, por favor, acione o(s) administrador(es) do reposit\u00f3rio e continue com a submiss\u00e3o em modo manual. Obrigado! +jsp.submit.start-lookup-submission.js.detailsbuttonmessage = Ver detalhes +jsp.submit.start-lookup-submission.js.filldataandstartbuttonmessage = Entre com os dados e inicie a submiss\u00e3o +jsp.submit.start-lookup-submission.js.titlepopupmessage = Detalhes da publica\u00e7\u00e3o +jsp.submit.start-lookup-submission.no-collection.dialog.return = Eu entendo + +jsp.submit.start-lookup-submission.byfile = Fazer upload de arquivo jsp.submit.start-lookup-submission.byfile = Submiss\u00e3o utilizando um arquivo de refer\u00eancia bibliogr\u00e1fica +jsp.submit.start-lookup-submission.byfile.process = Processar +jsp.submit.start-lookup-submission.byfile.hints = Selecione um arquivo para efetuar upload e tamb\u00e9m seu tipo no menu drop-down. Se o modo de pr\u00e9-vizualiza\u00e7\u00e3o estiver ativo, a lista de publica\u00e7\u00f5es ser\u00e1 exibida de modo que selecione uma para submiss\u00e3o. Caso contr\u00e1rio (modo de pr\u00e9-vizualiza\u00e7\u00e3o desabilitado), todas as publica\u00e7\u00f5es ser\u00e3o importadas para seu espa\u00e7o como "Publica\u00e7\u00f5es n\u00e3o finalizadas" e a primeira da lista ser\u00e1 colocada no processo de submiss\u00e3o. +jsp.submit.start-lookup-submission.byfile.chooseprovider = Selecionar um tipo +jsp.submit.start-lookup-submission.byfile.file = Arquivo +jsp.submit.start-lookup-submission.byfile.filepreview = Pr\u00e9-visualiza\u00e7\u00e3o +jsp.submit.start-lookup-submission.byfile.filecollection = Cole\u00e7\u00e3o + +#Versioning +jsp.general.version.button = Criar vers\u00e3o deste item +jsp.general.version.history.button = Mostar hist\u00f3rico da vers\u00e3o + +jsp.dspace-admin.version-summary.title = Criar vers\u00e3o +jsp.dspace-admin.version-summary.heading = Vers\u00e3o +jsp.dspace-admin.version-summary.text3 = Criar nova vers\u00e3o para o item: {0} +jsp.version.version-summary.submit_version = Vers\u00e3o + +jsp.dspace-admin.version-summary.text = Raz\u00e3o para cria\u00e7\u00e3o de uma nova vers\u00e3o + +jsp.version.history.delete.success.message = Vers\u00e3o(\u00f5es) remvidas +jsp.version.history.delete.warning.head1 = Confirmar exclus\u00e3o(\u00f5es) +jsp.version.history.delete.warning.para1 = Tem certeza que quer deletar essas vers\u00f5es? +jsp.version.history.delete.warning.para2 = Por favor observe: Ao deletar essas vers\u00f5es, os itens associados n\u00e3o estar\u00e3o mais acess\u00edveis. + +jsp.version.history.title = Hist\u00f3rico da vers\u00e3o +jsp.version.history.head2 = Hist\u00f3rico da vers\u00e3o +jsp.version.history.column1 = Vers\u00e3o +jsp.version.history.column2 = Item +jsp.version.history.column3 = Editor +jsp.version.history.column4 = Data +jsp.version.history.column5 = Sum\u00e1rio +jsp.version.history.restore = Restaurar +jsp.version.history.update = Editar +jsp.version.history.legend = <span class="glyphicon glyphicon-asterisk"></span> Vers\u00f5es selecionadas +jsp.version.history.delete = Vers\u00f5es +jsp.version.history.return = Retornar +jsp.version.history.popup.delete = Sim +jsp.version.history.popup.close = N\u00e3o + +jsp.version.notice.new_version_head = Aviso +jsp.version.notice.new_version_help = Esta n\u00e3o \u00e9 a \u00faltima vers\u00e3o deste item. Esta poder\u00e1 ser encontrada em: +jsp.version.notice.workflow_version_head = Aviso +jsp.version.notice.workflow_version_help = Uma vers\u00e3o mais recente deste item est\u00e1 em fluxo de dep\u00f3sito. + +itemRequest.all = Todos os arquivos +itemRequest.response.subject.approve = Solicita\u00e7\u00e3o de c\u00f3pia de documento +itemRequest.response.body.approve = Prezado(a) Sr(a). {0},\n\ Em resposta \u00e0 sua solicita\u00e7\u00e3o com respeito ao item: "{2}" ({1}), do qual sou autor (ou co-autor), tenho o prazer de inform\u00e1-lo que segue(m) anexa(s) c\u00f3pia(s) do(s) documento(s) solicitado(s).\n\n\ Cordialmente,\n\ {3} <{4}> + +itemRequest.response.subject.reject = Solicita\u00e7\u00e3o de c\u00f3pia de documento +itemRequest.response.body.reject = Prezado(a) Sr(a). {0},\n\ Em resposta \u00e0 sua solicita\u00e7\u00e3o com respeito ao item: "{2}" ({1}), do qual sou autor (ou co-autor), sinto informar que n\u00e3o \u00e9 permitido fornecer c\u00f3pia(s) do(s) documento(s) solicitado(s).\n\n\ Cordialmente,\n\ {3} <{4}> +jsp.request.item.request-form.info2 = Solicitar uma c\u00f3pia: {0} +jsp.request.item.request-form.problem = Voc\u00ea procisa preencher os campos restantes. +jsp.request.item.request-form.reqname = Nome do requisitante: +jsp.request.item.request-form.email = E-mail do requisitante: +jsp.request.item.request-form.coment = Mensagem: +jsp.request.item.request-form.go = Enviar +jsp.request.item.request-form.cancel = Cancelar +jsp.request.item.request-form.allfiles = Documentos: +jsp.request.item.request-form.yes = todos os documentos (deste item) est\u00e3o em acesso restrito +jsp.request.item.request-form.no = o(s) documento(s) que voc\u00ea solicitou +jsp.request.item.request-form.title = Solicitar uma c\u00f3pia +jsp.request.item.request-information.info1 = Assunto: Solicita\u00e7\u00e3o de c\u00f3pia de documento +jsp.request.item.request-information.info2 = SE VOC\u00ca \u00c9 AUTOR DO DOCUMENTO, {0}, utilize um dos seguintes bot\u00f5es para responder \u00e0 solicita\u00e7\u00e3o efetuada pelo usu\u00e1rio {1}. +jsp.request.item.request-information.note = Ser\u00e1 proposto um modelo de texto para a resposta, o qual poder\u00e1 ser editado. +jsp.request.item.request-information.yes = Enviar c\u00f3pia +jsp.request.item.request-information.no = N\u00e3o enviar c\u00f3pia +jsp.request.item.request-information.title = Solicita\u00e7\u00e3o de c\u00f3pia de documento. +jsp.request.item.request-letter.accept.heading = Aceitar a solicita\u00e7\u00e3o +jsp.request.item.request-letter.accept.info = Este \u00e9 o e-mail que ser\u00e1 enviado ao requisitante com respeito ao(s) documento(s). +jsp.request.item.request-letter.reject.heading = Rejeitar a solicita\u00e7\u00e3o +jsp.request.item.request-letter.reject.info = Este \u00e9 o e-mail que ser\u00e1 enviado para o requisitante. +jsp.request.item.request-letter.subject = Assunto: +jsp.request.item.request-letter.message = Menssagem: +jsp.request.item.request-letter.title = Copia do documento solicitado +jsp.request.item.request-letter.next = Enviar +jsp.request.item.request-letter.back = Voltar +jsp.request.item.return-item = Voltar para o item +jsp.request.item.response-send.info1 = Sua solicita\u00e7\u00e3o foi enviada. +jsp.request.item.response-send.info2 = Sua reposta foi encaminhada para o e-mail indicado pelo requisitante.<br><br>Obrigado. +jsp.request.item.response-send.title = Solcitar uma c\u00f3pia. +jsp.request.item.request-send.info1 = Sua solicita\u00e7\u00e3o foi enviada. +jsp.request.item.request-send.info2 = Sua solicita\u00e7\u00e3o foi enviada para o(s) autor(es) do documento.<br><br>Obrigado. +jsp.request.item.request-send.title = Solicita\u00e7\u00e3o de c\u00f3pia de documento. +jsp.request.item.request-free-acess.title = Sua resposta foi enviada. +jsp.request.item.request-free-acess.info1 = Sua reposta foi encaminhada para o e-mail indicado pelo requisitante. Obrigado! +jsp.request.item.request-free-acess.info2 = Voc\u00ea pode aproveitar esta ocasi\u00e3o para reconsiderar as restri\u00e7\u00f5es de acesso sobre este documento (evitando responder novas solicita\u00e7\u00f5es), se n\u00e3o h\u00e0 nenhuma raz\u00e3o para mant\u00ea-lo em acesso restrito. Para faz\u00ea-lo, ap\u00f3a inserir seu nome e e-mail (para autentica\u00e7\u00e3o), clique no bot\u00e3o "Alterar para Acesso Aberto". +jsp.request.item.request-free-acess.close = Fechado. +jsp.request.item.request-free-acess.free = Alterar para acesso aberto +jsp.request.item.request-free-acess.name = Nome: +jsp.request.item.request-free-acess.email = E-mail: +org.dspace.app.requestitem.RequestItemMetadataStrategy.unnamed = Autor correspondente +org.dspace.app.webui.jsptag.ItemTag.restrict = <span class="glyphicon glyphicon-lock"> </span> diff --git a/dspace/modules/rest/pom.xml b/dspace/modules/rest/pom.xml new file mode 100644 index 0000000..75e2876 --- /dev/null +++ b/dspace/modules/rest/pom.xml @@ -0,0 +1,108 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>org.dspace.modules</groupId> + <artifactId>rest</artifactId> + <packaging>war</packaging> + <name>DSpace REST (JAX RS 1 - Jersey) :: Local Customizations</name> + <description> + Overlay REST customizations + </description> + + <parent> + <groupId>org.dspace</groupId> + <artifactId>modules</artifactId> + <version>4.1</version> + <relativePath>..</relativePath> + </parent> + + <properties> + <!-- This is the path to the root [dspace-src] directory. --> + <root.basedir>${basedir}/../../..</root.basedir> + </properties> + + <build> + <filters> + <!-- Filter using the properties file defined by dspace-parent POM --> + <filter>${filters.file}</filter> + </filters> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-war-plugin</artifactId> + <configuration> + <archiveClasses>false</archiveClasses> + <webResources> + <resource> + <filtering>true</filtering> + <directory>${basedir}/src/main/webapp</directory> + <includes> + <include>WEB-INF/web.xml</include> + </includes> + </resource> + </webResources> + <overlays> + <!-- + the priority of overlays is determined here + 1.) default: anything in the current project has highest + 2.) anything defined here has precedence in the order defined + 3.) any war found transitively in the dependencies will be applied + next. the order is unpredictable. + --> + <overlay> + <groupId>org.dspace</groupId> + <artifactId>dspace-rest</artifactId> + </overlay> + </overlays> + </configuration> + <executions> + <execution> + <phase>prepare-package</phase> + </execution> + </executions> + </plugin> + + </plugins> + </build> + + <profiles> + <profile> + <id>oracle-support</id> + <activation> + <property> + <name>db.name</name> + <value>oracle</value> + </property> + </activation> + <dependencies> + <dependency> + <groupId>com.oracle</groupId> + <artifactId>ojdbc6</artifactId> + </dependency> + </dependencies> + </profile> + </profiles> + + <dependencies> + + <dependency> + <groupId>org.dspace.modules</groupId> + <artifactId>additions</artifactId> + </dependency> + + <!-- DSpace REST Webapp --> + <dependency> + <groupId>org.dspace</groupId> + <artifactId>dspace-rest</artifactId> + <type>war</type> + <version>4.1</version> + </dependency> + + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>servlet-api</artifactId> + <scope>provided</scope> + </dependency> + + </dependencies> + +</project> diff --git a/dspace/modules/rest/src/main/webapp/.gitignore b/dspace/modules/rest/src/main/webapp/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/Participatorio-desktop.xsl b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/Participatorio-desktop.xsl new file mode 100644 index 0000000..bba87ce --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/Participatorio-desktop.xsl @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<!-- + TODO: Describe this XSL file + Author: Alexey Maslov + +--> + +<xsl:stylesheet xmlns:i18n="http://apache.org/cocoon/i18n/2.1" + xmlns:dri="http://di.tamu.edu/DRI/1.0/" + xmlns:mets="http://www.loc.gov/METS/" + xmlns:xlink="http://www.w3.org/TR/xlink/" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:dim="http://www.dspace.org/xmlns/dspace/dim" + xmlns:xhtml="http://www.w3.org/1999/xhtml" + xmlns:mods="http://www.loc.gov/mods/v3" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns="http://www.w3.org/1999/xhtml" + exclude-result-prefixes="i18n dri mets xlink xsl dim xhtml mods dc"> + + <xsl:import href="../dri2xhtml-alt/dri2xhtml.xsl"/> + <xsl:import href="lib/xsl/core/global-variables.xsl"/> + <xsl:import href="lib/xsl/core/page-structure.xsl"/> + <xsl:import href="lib/xsl/core/navigation.xsl"/> + <xsl:import href="lib/xsl/core/elements.xsl"/> + <xsl:import href="lib/xsl/core/forms.xsl"/> + <xsl:import href="lib/xsl/core/attribute-handlers.xsl"/> + <xsl:import href="lib/xsl/core/utils.xsl"/> + <xsl:import href="lib/xsl/aspect/general/choice-authority-control.xsl"/> + <xsl:import href="lib/xsl/aspect/administrative/administrative.xsl"/> + <xsl:import href="lib/xsl/aspect/artifactbrowser/item-list.xsl"/> + <xsl:import href="lib/xsl/aspect/artifactbrowser/item-view.xsl"/> + <xsl:import href="lib/xsl/aspect/artifactbrowser/community-list.xsl"/> + <xsl:import href="lib/xsl/aspect/artifactbrowser/collection-list.xsl"/> + <xsl:output indent="yes"/> + + +</xsl:stylesheet> diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/@mirelogo-small.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/@mirelogo-small.png new file mode 100644 index 0000000000000000000000000000000000000000..777bf343dd6879b525597877255e25dd9e5ce773 GIT binary patch literal 6022 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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/Crystal_Clear_action_lock3_64px.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/Crystal_Clear_action_lock3_64px.png new file mode 100644 index 0000000000000000000000000000000000000000..2a1412bb93b23a885ae97ce3a1f509ebda62f2f5 GIT binary patch literal 4289 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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/apple-touch-icon.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cb944d4236dd56db15dbf8abb30f61b09ff79038 GIT binary patch literal 3808 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 KelF{r5}E*J(c!WH literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/arrow_down_ffffff_16x16.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/arrow_down_ffffff_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..213e364252df54dcc571c33e94145adafec7c9ad GIT binary patch literal 3125 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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/arrow_up_ffffff_16x16.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/arrow_up_ffffff_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..2d9ce05f87760356a3553b76327a22083bef0967 GIT binary patch literal 3125 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QU<L*T&H|6fVg?3oVGw3ym^DX& zfq~06)7d#7AS1sdzc?emK*7`5S)rgPKP@vSm4Tt+*4*Ioh{@l@?CyV0<qvbZ@nPfi zoJIyE<ux291R@s+OkzlE5fE}X+S<VtCL$_0$0PJe(^W2yxgC!dXzWOL?COZ>4vn#R zCx2)8*4nD~Z{PmD{(H~!InV!`t31!&ASk3Z@!6s*2FsvU8><`g{r(<DPVQ}B67_h% zq9E|>^r3XtqYMlmm@6ylN;cU4VO*cjz{F5+RZm6e_{0Cry8_h085AZmJWvvP&doR> zh~b1@$O#dK6A}y?f;XpdF-&1#$f>MxQes%e%kbulryVQ9jg^z{h%?++B(su(p_h?i zriQx;lf!O?gwVzy9i{_^7#6H?P|{;Lu#T}Ia+{GmQ^Q_XhO)kh3H%NT3=K1#bj~m+ zSTHd-%L$)lR`6k7U~p;wgO%|Gtvfsz84jGDdUm?^C1a5tQ!hxBfBNv?k>aC6IUAi4 z#We-eIG-rZnLb-t*yA~~&p93j2C1JH5B{^TpYZ(IlZVgJp69&(a&*zZ><{@$c8VYG z|J&2U#KIupcmDmY_@_^=F&7+X+)%nddu24ktuTg+`#)oiZ*wk);<`}vv%AvbkAvL2 zg#jmQWM#Oxx!<ZLE!=DHxZCc(@x%NF-F4soILQ6GUG;&XaF)Z&wFeeA|1C_+D_a-T z_xv=AlVRTX=gR+%x7Ppd)4ce|WMhnuXxGPx&K&_tzQ-$f22FHPJUR7|(93$GkMh(0 za!xMiWmwbZf52}W`_|Jr2kPE2GIjGsTq<L5sQawjBgH+DK_K14sPa1l!{q%x`yI3y z8O}~$@|b~P&kKo|6;s50j&U$BxGZSY+Th5}b5LZ>0lqm0W%nEqXG&yqao|xoU?bqf z_M}0EYoWw6N6C-_RySC-ZeW&LAUNxxz?OrC7QD|N2*otME)Zu+keGK!Vow_<i{l9n z;Y3BN4#A|p8%pOm#Ao)gC?$HBOlnx7@UlZBQ0eH2q9sf#ow6pzdMJO=EfTTpjdA!j z;r0myqpm+)d)y7DG;RuHzQR=MuycjHRM)Wu#TQFV_+uNUEy}(qwMEXhVcVkR7rkGU zmN3+I^(8l4G~`R`xtSQ#)9#wk86l;1TrBx%glSm6X|imDd6}s6fq9AVIaHXs8-(9* z#I*<<%4wP~!9Bt!!g+=28|5uRyEwu*n_CPIsVhxh;lD+-O6cd2iX^Lz6C&K!sJ&B^ zQ=F$7r_LuFKiNZt@8qN>eq4&G6O25$J+nP-d+06+USfAiAajn7+Up6qC+|Js*wnB_ zVfw`F6Zj|iPx^iG@RRK#R!2J?`EV{$30g8m$jda<{wd4S`9@AN7pw|AyK>$Yj#V92 z^P@a-7nB9)2e+>jHYuH@dUm#$^XVnJi?3dom6@LTJwyLx$u7>j&2p~OFHFCb{eu1F z^OwzE%6WL(c$<%VBxy)yOIAxRm)I_;KhtL!>*eV)PlOm;H<F&2K7)ToerSZ&H?11c ziKm37T1^d`S~vCis*up)Q2VQutGGi}hw`tE3#(n`7P>j$@k-7sVymyNlnvdz(rn$i zpz@&pfb)Uzi}%I<ZTgkWyQ!_!Z9$vI;*jL+$0U0d#f}-JevELsRusnkS|@vkZ&LK8 zpKpB1Sbs~G=~w#%I~T7?Taz|1ZSJ$evy6PlHa_@Zd2^1}ImL6l=c;v?b?tRGUdvjW zwzh7q`K_v3`)(z@EqW{V_Vumzr3G^x=IYG-YL#pCy_9p8*{;A{t-EfQo_}R`Ir(+v zOU|#SzVf}id(r)C?w7@1#b3R@_Wq*0xq%6X*#yZPLyP1OXC@@S$exk8<Kl;whbsh6 zXY87IBxCVK&&BFH)ZVqHKQ^rpw@X`-FO#&!<X-BXY@5WSOrzUNjx0I)WS{2QDcQ5q zc3s?Zx#Y~56FPU++*ot+O`qk}Iob0P_ubrc`%iD{Qr9_0y}Hf1k59Wbt>!fAG~a38 z*USjB3#$zK8g_k+=e3yEI<IrDh35oFhtKAjZ8iJ!wiRn<uRT&WJNLfGBawd1OPXJU z^KKcw`SXVB&8#<UZ!NziepCIH`|Z5!85tqjYt|*!HAN+*XUcL4_Pk#5(B$ySBP$QT z3{RI%Usyc%v#Izp?+K@crk70@56)fQwLEWr)#<5ErQYqjwDt1W#j|(MzO(jb?v=Y| zY>(Ei{_U$bTl!?|VcYkPUp{<~cvN`i@!aLJmmm5(;kkZXSzKh?@4a&Vo9C#_yJnDk z;`Wi~2YXLfCs^6prv5tjlG*N<9n<`(`R)6b?NhpMyHC09THVY#_CND}TmL%!xBtif zhn1hiKKijHFdk%l%DA^ts&O-OHnTj-OqQkWrmVfJyV>-4>_nY-IC&%GizeqE5dS3o zGuik~y3VYNqNh0KibhHQGB~5=BX>=(ukAd?eSy0CWj}php4rCH@xVQ&V~2dE<V^9O zwIZ5YMyvE*1#Ss0DJ=P}b8XF&$lvLE`#$!s?Ad93J8N4}S^Ao+oS>ZKH?wy%>{zv< zv7-Hl>&NLrCBiD4Z#$nHxpBm{^KmiL^PE}6bDqo!nO2g#?&+OHJH?;9Ja>9txlN>L z<b)cF))_+6H`zaJR&WZ?m+*hOJkM8F_*2X5R)5!hi+UFYZrr}Z%VyHExnWbkS=_a* zb^evn=I>T|%$U<ZNV{^P<fNU-pMAqzuH9R6{$}A#UCSwRrp#F!#G5&7i}rPc?Hb$t z)3miG^FFD3mU~Kia{H<8Pn3Taf4(i6)9Q0^@s^-<0eoUU`YW_6q9vj$c6jXdh`M5Y zKkeVEpUT`#Vl{gwYzWw~Ve^e06_FnwDD8LMEvDQZEMBf>7#p-Jr6TjgrP|XOr#DUe z8}KM1DD+cS<(*G`LCu$zE_K#!3OAX$a>~imdF#GJ?MxO;oSG8)K5P2b=&*V%@u~4^ z3f8Px_hW<Gj%Sa;{o=3Ie67sAb?ctj_ET?Pd%RxqI&aPQ$o=cR_GUR=z0mf7cdhit z-lx*>xnB257FK0_?K`{W?5VTNrirF+qt9$xbNkamv&G-4=GMoa4*R=y_4a)?)oxwe zf498)Ghef;sP(<~Q{L>^s$CJDz1Ow&Yu=@IO?UgHlB9R-e^z&QhkLpI(RuyVORL$x zxxRm$Rg#}`XZ`;Dn>cfW%zEWKtO}maZpgni`|Ygqtp!n9e1{yL9#p@-tfu;Lz>9_F z4&OO^_WsQJ?O!=wdsJ#)vf5v|Mt5=U0^5aq-@oWtJXbbO)_vdh|8?&TA19X{H|-Cf zw_vV@?Z=-_nkGM9p0a%2Tt9o;D>Ls@e)st^Gdnggc5k}#`FZx@CGUK;$A3Th`QG#X z*bjROz9@Z9x~;n1d#&v{TlczxzYjguN9Vsz{eJpwxXrqfFTSs>FTTHA|10aj)#B?v zuIt6luiX3o*c<8Xd1`lMcBt<9`lIaITk&$PcRqJwtNJU}|Jirz?<@9S{IBY_{M(p% zAoszKgaZlZ4@dI9=i_Xj_ixJo%k2*@xu0>rs_drR+do%cUYb{G@28Y=lOHbMv|RZ7 zsk*TLm9L9eKfnL?(Qohb5r1xc;QrZte*e14m7j~=uU@&{>bUZ8`90?<Z9gviv-aHW z+V?x&@4A0{ul!7nKMwx_K41Kme0=!@|L=CsYySPw|K9TXx9X+&#taM$Ea{HEjtmSN z`)Ym%PG(?WP)PO&@?~JCQe|LhXl7ve`JaKI;Uxn@sR0ASs{{rHs~HRo;`x)}kGe51 zFuV=$332`N@6X6V8@TKDFfcGMmIV0)GdMiEk;cHl;N$7y7$PCrd+;D<gMkR^!L`b| z5iKiNK5qIu{c*h_OaHk8`sed*$}c<oGT}yy*`pFmPG+7%P8$WZn!SEF-qAC^7$fCe i{>ta=rkLLNxaFZruSF_mCNVHDFnGH9xvX<aXaWGG$6i|i literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/2-errortriangle.gif b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/2-errortriangle.gif new file mode 100644 index 0000000000000000000000000000000000000000..77ecac66969b515012f75bda1d7b690d478015ae GIT binary patch literal 587 zcmZ?wbhEHb6krfwNMm47{K>+|z`($u10q0T%NQ9L{{R2~&RqARo8QMMhxd+#9}`^O z8EJ197XOsw_TJIxq<g?!N1xX^hOfjKKAGr#DNXoNn(|gf?U<+kYYx$8h50{9(musH z%;e<xnCf;?M&XUI)Ymlkh1`O_mQVZh=*}Aj&JCJ+pVR#=$SJ-tlsGCX`gPvKA4~c_ zs%m^pbon;F^{Jcx#~6ptxe@Pebw37MeM)qDtEurpQ{z*T%g0EE$8pJTGz5=J%6*J? zd2cQEIV13m3h!-sm3NvNdqk!7xOm?RkN6M~@G;%}=gL|CzJB?X;qyyZ`-Onadl&Wh zmU2%NRksO?e>K&7EvoRjHs`&O_UGE%w??whoqQfDsl7GQp2NxezPRvvXVH6esW%$J zU%RtjsA+ukGyPJM_%YJ^TWQ+ISf8(LMVIAOKBarVx7Yp{Y5%o2{eXnb`{cMA^2+a2 z)IP>|J}oNz;G_-;QqnQ|iUx+J=9bpBCT8aLHfGVBuI^^jSV4!0O+3y4e(~HBdE}HB z856|jwQGl4EzV98ZVysR)Lons=V;#+rY?}XSV7N6wUt>$hb3aMH7gUpVl#7wxF(C| zVzV>;{2WcZQJie4`h0xSTukh4cX+joAFy~V4m`tdq`@H~>H6MsapV`<D<PRmDLgzf mCOc{roF2(cl@Kyuu-N2!QbaEENY90W$36Y3vJ5Ot4AuZmxz}p| literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/2-lightning.gif b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/2-lightning.gif new file mode 100644 index 0000000000000000000000000000000000000000..5f4582668679437fba6ad34276756e282f092163 GIT binary patch literal 320 zcmZ?wbhEHb6krfw2xVYU{K>+|z`($u10q0TOBop$K2;PP=Hx#pB>u!d@Ue{QDt4~# zHL1TQl^&FoexDHiv#<DjTj3WOx!+Ujf0`Jc;1m8kv+EI$=r?_XV;sD<_{A5par~O! zaD_+oM}67@E}_TVLT`19e$J@A%_FpgjdKwj#|93bAN3humE?adYx_}{@UyGnTT||z zNtHiavoG+9{OT@P%*J_}SL}+g)X)B+UtRg%%yoZ>NIl{g`)aK5OkU$G7vFJV@t=*E zU!!AwPOmyEB>rAj=9j9@N)hoNGV*M(4h;nsYjQh07Cmv&QkgibVcp>ZJH~kjvKupE z8K*Lw*<w}8D8Zzq?6vb8L(}7i;JKO;CovU?y~!|Ss<q@-wkcp{7Us2AEa0>?7As(o WF;bXfXQnfS!CZbW8(V=RgEas`HhM1r literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/2-warntriangle.gif b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/2-warntriangle.gif new file mode 100644 index 0000000000000000000000000000000000000000..03f658fd18ec14f5f6218bdf9d08248c29134392 GIT binary patch literal 595 zcmZ?wbhEHb6krfwNMm47{K>+|z`($u10q0T%NQ9LK5f$ea^CsN8T-$>^gpfBJX9=n zv)cFT1=q&LrVCR&zg;c-d|37M5?6IqwNDF`GcvM1uh;y%%i#M}w+l1)H8nIhM)SX4 zpmnE9?$u2Dk4x2-#c~=M82^60;Oj-_V}0VEmZ@Et=<{I%&&PF|@B2k=6#D+WSN`Ra z>*oUjuiJRPZ&&}Yp7VH_$eTruZ|AEN7ngtCr2XZB^S3L>UrzXZIc@iOpVY6*nJ+gc zeAq0Yr>m!>srB`|tBHx(=RKMlY8uJOX}_M&_<X$VL7$wqmiCvEmS0ZWe>v&-<%-+c zKG$E*mt0$>^kIkO;uy}4+ho38^10b1`|Wc2lUWXH;<(JsEWSU^JKreswv+$I^WN_d zW?gKM_;SqT`836^m%JaXjrg)y`Sro#)79dy50rhsUH<(-)}wy8AD1)Vw{d*Cn)G?O z+Lv?o-!A%nyAW(+ZTsb@_qU6YpLc41-Y5HegXXIl3LmzMe?4!1xkVZj)VMMGh6aYF z=9bpBCRO(KHum_$uI^@Yqk!0nO@W@=+^LEad1bRWIgQP@x_Q;I_3hn~m$&IgB<1A< z+vaL`v^hGY^VrB}=WB(wN(yH(n>vdsu`n8lHERl&7%~^w@mX9D6uitJ9>T$7;vypA zEyT!L$o42)?kO{mfPn7>){Ho|G<ClhnkN@NZnhKPH=AH_D7C#oDN4&?#^Jn{Hg+F| ah(g75Zb?Onc~?#{wY4&8GB7bRSOWlwA^`9J literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/3-circleslash.gif b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/3-circleslash.gif new file mode 100644 index 0000000000000000000000000000000000000000..c834095ba81096e161a428b5f3feb7b21c0ed72b GIT binary patch literal 626 zcmZ?wbhEHb6krfwNMm47{K>+|z`($u10q0T%NQ9LPH^%(Vq(9-&G%JM_`8PmHyP0% z4r>4BHh<<7+|SJU+g<;gisTnw!5@OcUnE4ot4jULkNm1G^;JdkcSi6oHqI~7qDPHQ z|1a(PYAE|FBjjIK<`ZuI{~KriYfU}O$o_x(yuY0}e@mmjsY>i)<NPiu@`#1|i-6Eo ze*W)*Lf?3WUWp0+DUSSC6!E7b_MMge@BHweQeuB<OU|+LelwN-*Oq>piSutw(pyEv zpLQxgY*k*$ioFvP`DyF0mX-Y=3-_PO_zO(zUnNENvvR%S5d2dV@mxXT|Bi*<P2~QB zS^nR?@SB<ZF$T63ENnk46n?5p-Dl%|sibt9mFtP9@H+{Sm#n-u*?C_pN&b)(`(~x` zrz-BNneu%$-uGIvZ<HkWvT*)%P<_S3`MaU`gM!$TywumM-2WO=-?H-jj&nH9#CeU8 z^G|u)86Lhj)%pKxlmApFyp)#!g)PyT{d@yMQxj97ni>;Rb2me(zL%_ogsi)`PY+X) zf})(Xw49<su6%R4kzT%mOLM4cRLT+tTaIjpjL2?_G!AiwAak8SPj>d`?iiiC05eym ztYAy4gxGE+UB@sH!KQFO6YscYK@odnDeh)BNlA}_CT^)rE@jqkYgQp4jd)gNE)@X@ zo=B6lLoMnW5)KNC39XDeIbwl^2?v`RMVpwW2nZcMzCg`J&PGEp;X;E5i=RNj0|nJa h5oQV22MZQCHnH%A6lk3ExX{4G$Q07CQ$v8k8USd_&tm`p literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/3-flag.gif b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/3-flag.gif new file mode 100644 index 0000000000000000000000000000000000000000..35857f994003c7bf2b15de407f28f5079b30041b GIT binary patch literal 546 zcmZ?wbhEHb6krfwNMm47{K>+|z`($u10q0T%NQ9LzFMe$b<+AICwpI5=vQy~rx5cW z)sbl#Ip1S!Uz;j^Pq6z@8TK*I<eR_##{k1`!6q-vOy4<ae@}DWclhY{1lzBk+SRp< zy%VNn<rIAMH!3Qr_~xneBi{O+u+aB-+x&u(tvh#r&v5-7WA*aHsTp$?JlwqFdy2#N zM7!^4F5lDLzIy9^Pj`J|s`xF;{Kw1JJNE9oFC^I1)c!rv`bVzU=Nors%$oP%^7SPv z*OXP({-}w3cHr2L?DRKgN}n~<m#<jU(=*}Qod^359ero3*4aH__QIu~WM#5*3qOZj ze)ZH@x@`5&dClL$%)ff;>_2v@wXJK_hRvU3q(R;v9GJbnfx*F^q1Bs})uy$()k$Ag z-9(v*(N0i^-=|x|kxz$5eu|r+vxjlFfvL8p755Zo7A`i<ZbfrnVRnu68#i|csEBE? zuVdVx%d6LIVeP5JBRVBe&Q?mG+f_}b=T48R-`$4{5?+t)`kOtwBkuC5$I|Fsw}SMi PR!R473>+Na8X2qs6fCho literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/3-thumb1.gif b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/3-thumb1.gif new file mode 100644 index 0000000000000000000000000000000000000000..8fec573875f5f0c0f87cd30bf7cc6823cbd2450a GIT binary patch literal 1074 zcmZ?wbhEHb6krfwC}&_${K>+|z`)9&!@$7601{jN|NsC0fB*mI68!t=`QJBp7#SFT zD~kP=68WPh@x3<kKeyn|OGj=9i2dgj_}`oHUsmLgqS$W{!QUc6zk~(<D~n$f5c@A8 z^t>eStDwMje$lTL!54+Z?o=m!zjyiF-0GYBV*h*6{%cFTEe-h0&-$}F@$H^XAD7I0 zGN<ilL-c=cp&u;F|BYp@3W$9!@_AR{_qiwIS4-@NITf$8<o>Ekye{<lzo6=Qoa0|5 zv2W#mPh}*(6#9Os&HODa_{Pik=gqU9+moJ4vHYx$`g&~F6(O<bY9h}|gZ};b^GHVW z-{1dFW;cBI)P3cs{Y6;l<>J1d%`vZJ#lDGiy`DSikC4ER+ZTV{zw$st^o0P!yRCEX z=6HR5a`(^A?~huO|EP&w6BK*dp7ysX=5J@pUk=_M4bfjp{Qqf5{n$9^Syk9oL9y!s zVsB(c|Eo(ro6`D6TI4#9@Vg`1?n{WD6O#DbmiW6d_7fM=mty~yb6Q`O1bnND{8Hfe ztv>pXyy%bC*uUMW|2tFe3XA@g7kMfz`F8EhhY}KR)=&R<Wc%ahln=#zKOWw=8EyIN z?uGaJ*WF2TeksiP=fkJhHBs;OZu+e*euH1^zqZtK8L20&X}={!ezzt3*OYuylzu^2 z{J(+JugBN_=}UdRclqVgu50PuueId<|NHk(RpNsr@5?RAU&LDfpI!1xko8Nk-xnU% zUoG+fe*OL}CHzN0^pCXgm-L8_#l9~kn7@?xz1+F(e|O3sDUm-7QEygE{?t?Xa%tyt zVYZi+ivN4lA2%k0lF-n{9RC@(zZ5=b5a)>6_Tq$8vlsJx3)X#mG>Q&h<kyKVs+1~G z?VKr9bl^tdm6ZaEbfOqoBn%P`Dh037*=fPDAY7Qi!g;5nX*V;cx&coq!vj|izp2`s zHMg3bcyzQFY<^f|wOm*%r0&Avc_B%-L4vz)omW)5Ta&fLGLub-k1`rGwlf84O=a(& zWa2L&=-Fc25YLod_L4!gY4S4BfN4Ao4JW;H6n5=6F{6Z2h>0cT*&BunkEg7V%u-=I z<+yMvBeTH29;c@4BfK1J8Zv@k9vo=&S`%Z)7@!uaYsN0OXJt}jdkcr~k_3ehUPnK2 tiv8gcbckjA%2svAL?FTTXdBZ^I~V>{2O1b>nMv-NlNiY8*Vw>d4FDN>q7DE6 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/3-thumb2.gif b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/3-thumb2.gif new file mode 100644 index 0000000000000000000000000000000000000000..ee6aea8f2184abe04685ba5e9afb5ede09080f73 GIT binary patch literal 599 zcmZ?wbhEHb6krfwNMm47{K>+|z`($u10q0T%NQ9LE^`U~THN((Mc-#3nJ+f>KPscY zJE(v2)cLi3$~SkN-y5cUvsL@Gdg3<+^<PVSz8Wk3bkX?XsQ!gt^aY#X@2xX`E$;rc zp#3JV&}I(q>zsnGgvEZXpYe!K;)jF!H+!`Y`X=v%q*t?XzEza|>8x>ASn}7#DPJ5l zKC$tB7Lk1@F7Z)V<|UWN&lwHh4V6A{iJs>YcrGG-RY2&whTN|u-M`mQex)dLh=cEy zpwwr1={=mhkHw^Ka|*s-6S~AH@Ipr7I5+<{Cynn8YHtOlJ{X%n7m|J>CjL}L;@8xw z8{9&_x6ZoBEBxNb<c)~fPZjxFf+8P-f<CYdJr|XIEH3fGQRADP`e$L84?@y+xdgvh z+kLUL`MqZ1HxKP!GSaKqIA02j?%?Ek&oB0YTlCkuiC^^<zuT!F<KqA3sQ%4f<(s=U zC>SZj>{}XGn^+lyHNsdrJ2izFv_(Z*WYl=4a!%)rWKd*gj!I0PJJ&Q&KPjBSnTg3o zVfA_w?oD0{7UJSQ0Zd~2{9@6zA|g5ruDWdT$}t>gIM~j!c?8L3I2xL9-Q>ztXS~N~ z9U&+fY?IFSLf(n}4ZEthl$3;oN+{3wR3Ra`5Ko5x|Cv@aFg)z&&u3)NYI)dnMz~c# o^wf-x%pONN%!@1xiv^V=lw(UuLS`&H*~X(RS|uoGD8OJ101o!UNdN!< literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/4-question.gif b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/4-question.gif new file mode 100644 index 0000000000000000000000000000000000000000..7b20d616f67eda899aaf3234a2cee87fb52746a3 GIT binary patch literal 537 zcmZ?wbhEHb6krfwNMm47{K>+|z`($u10q0T%NQ9L*rU(pT=>agJm=h}|JB$3q+j^C z<i-ER&;Qq6_$E<uW8RDZA-g|0o&2r8`;XSnpHaI%O0WLHkZ_iv@x|_U|K-;FuwDAf zY1!-6n}3uy{_x)MNwoaV<FEgDitq8{-DPNbz2VuP=mVb?y!^lD#s4MG|9kBF8g~8< zL-qaH&;FNQ{}Xun4};y7rkj6eJ^Mf5@&ERR|6>k)V({H1HRn^ugZ~}(|J$AXtG@BO z%gMh>U;giX{9kVE4~C%AhFy0UD(~@^+-1nRKJoE?2A`dIr@!dz{4SPz4dkyOh1ts* z7@8PZS=rh-Ih(s%WJK6GIJmi;dYU9yRM;()HFT8}r>QD1Nii@v=vf*}W8mRw);Bg0 zSli9SqN8cEtx1eU&D>=#gS8evpWP7#X-PAq(+pgqR*V<9WaX}1ywfD^EU0~&kyl>W Vp7{u)sk*Ju%U6zuAG#YEtN}D7rfUEI literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/4-star.gif b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/4-star.gif new file mode 100644 index 0000000000000000000000000000000000000000..da6654c3fcc22c6522821652b113107b6ccbe023 GIT binary patch literal 579 zcmZ?wbhEHb6krfwNMm47{K>+|z`($u10q0T%NQ9L{{H>@|NsA__|#v&etr860-ryB z{`2S0zkmNaS|`k(yYTzZpI^RxtFEYPY3ORGYu>tL*Uz6nQ{vM9|Noa1o7&RY`RD)N zrkeKtp2@FYzkTuQ)wOFkK79Q6?d#X?-@nbAHmAL*D<`w?=kMRIUcG+*;r-8FzkdDv zIep6P%U7-!<(Gc{{`2FfkMrj){`B?Rhfkk={P_9e)$1R>f6bmbzo)JL+Vz`Ho<6&O z|Ngyu_x}C=f93ME+KR@%fB&@9^}Kxb^8Wn?_a8i}u4wxC=lAbFe-|%W1@hOB!t4tg z7@C?}THBfgUE13OWp((wTLk6VCQM|omE++to7N&GA!*Fc$;ikgrC{P{&7fgr&dIcN z8K(#nlf5Pvm!2w{+Oi$XSlINPxEOSu*;tnEU}6;F6<2B&U{dBd&&VOfB+x2g$#Q!c z2a{-<q75q#3yV6d$g5Uvc6MG?R$g{(zBaK3Hx!Z&Fi5C0Fl;$~@HmU3R??LSkBkE? MjH0}JTr3RM01qI{)Bpeg literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/5-pinion.gif b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/5-pinion.gif new file mode 100644 index 0000000000000000000000000000000000000000..e48a5e035e4735cb70a8c9a1734d6a874b57de31 GIT binary patch literal 628 zcmZ?wbhEHb6krfwNMm47{K>+|z`($u10q0T%NQ9L4!rznwDifY7vIg+K0oy8r`?Lj zhu-}5+xha)s~^srURbSsDjT<D-nI9KUjEc+zgT?gUEi5kDwQX;J^jAr$+r!UzVCba z!)nIujSs&~J^w~5VEO#(A7)<rxaILTy(N#mw!E}i|3bayv~0mq(ZH1{i!LV|ekWUb zYR>f!I!)&_7d~{}_DVi!r{S!-5eMIRZ-06E{cpqNPs4Y=j6U>EDQlnV+y{&9d@-MU zZ`s|?TONPi|NQ5PcfYijJQ9!F=CS2@$hPOxF1(eD-=VYUp~u!2q5IyffA}?E_bb_X zk2NY!&Aaun|J+;Si8too{#?KNp~L!Tp@-kL9ey_F%KL@aKS&fFoqgwv+WZIY$6mA^ zdb;!3H^ubbldpVmTK#n4?N2+Ne3vgdX0`0GLh{b0{ZINYzE@iCNGf@!O8<?H)32R3 zzmSaDwC4U-mExmnrN@@t{<QGUr(I9Kna;X9;oO^TkH5)JzBBXc`<+j}ufF$1ZRWk~ z6*r2Hz1jZcoB#HgpkPPE>=zptnwq_HqGg&pn?yT2`1pz#^0T`l^%>2>85u34E5t&Z zGpzU+Sy^W@Gt0_~1T?9OF><o9Z(AiSQR3e$ZOJK`%FA08C@dn_<Y_PA!kNh3B%~rJ z$Q$M(S)6NHP~ItIC-68yGA7tr_hK^-8yA;vEWekbs=TdP6ORxZcV1=$OYDS?jE!O< zS#lB#j7moqC|7nVI3&0=xOU6EG7xxiq*Z{G#Yw1PV{?~;aPz(uAB37(+Z9q=ju<X- cyx1(tkhWxjAzK5RW|z=h#zV<27aSO@0p3S6H2?qr literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/5-star.gif b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/5-star.gif new file mode 100644 index 0000000000000000000000000000000000000000..55e8b079a353ac5ea326a9ec878b5ca003ba9964 GIT binary patch literal 558 zcmZ?wbhEHb6krfwNMm47{K>+|z`($u10q0T%NQ9L{{R1f@%-g&n|Iz_(?50M%zuyl z7cW@;?}`84XTE=*yZ$-H`1>Nmn|=C6B9yLAFJ8Z9<FNp)i!Bk)_OJYVg`vE%{qGCE z-{%;9eE;$1G*f(3(&;RPKWCUu<Olr!wd&7t#=j>R|GoD6^V;wKeTILp9RFWt?CYMo zc<JWf7a9NmU-kE;Uw8YYe@}cLu8;Wj^VfyOpg%_${~c%i|NrE#pFhvVay;4){{Lsd zzej=pUplrnc3q!n_UAm~YD1nGQ)ZuU2>kan^#22fzt4mI-(>jrgd-+A{@)$z`s${? z-!`4C4*dJp{_j1`AG?`Bo*k^1y}N;-shL4vy``grhpDqy$bwP3w?kNmv1f9VhdT$O zv08^6Kg$w1E;dF+Jtk&mc6NRvO-~gr&J`<nO0Y7Rnki{<a+vSjxu;22QOwca^(f=< zW-DhNafPD-oqS#z-10{)J7pcLWekqmc1kOAOB&wj<P}l%78GS#$^6mDM6k(?SugYP N#Ey<O$3_MQYXF&nydnSq literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/6-greencheck.gif b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/6-greencheck.gif new file mode 100644 index 0000000000000000000000000000000000000000..91f949b40ce4afe8c1f64d8d879e54bb6bc24bb9 GIT binary patch literal 1057 zcmZ?wbhEHb6krfwC}&_${K>+|z`($u10q0T%NZFMbS7&2|Nr0Pxa5+DvEJw8ywA!l zdl;uQlQ-ak{Mv_=ffwW%(ij+07&vN}e9p@UT$EpaH~0LTX%&Zpv=;MSc|YCtq^x3| zqGE%h;X3|h596=Co5hg8V7yUKe+%EVTfU1P#_#-GEY!}m>_Ob|dnc>TdRiXf-S8~U z<D{tHd3nFnBKvL~OxWS?dsa4Kmxu8RW#`RW5nDYHE~q~H^lHVE#G)H|={MEaK27$& zq_FjAS=1RxgZ&I=UQMxBrDk=2+i<y>+6tk~Pa3TciiDgOuHRqs`qR7g%POARthQg> zbLrK&m9NrQJx&U{AnkHoa`mI+7oXk*pO=~cAUtMM#GY&W3l7DGT#~>3VJ>GS^Y$l` z|Nr>!cR_yX!{{q-E?j*-C*Yj?(+{r#&&xX<;+lHf=l{q5)9?7{u8=<edYb1sxts5< zU4MJoXPfTQdx<x{EnWMr!1f^f)z1rzc5`k2Seki5<@(3DORlcG{QCUa_cQj~-GAow zw39C<`CXEqddnx`l3e6vxhwDIn5<Ba+wOb$^##)v%5n?1ldegGo|oot;97DwdEuqG z%U`CX-c$*{qTqE_&TYLpLk7e8$NB$%{a^hw@&E7tyIypp?nzwwFmB%S<i!u7-Hr+S zo|9YpAa3RJq-Bp1f-fq(`SMABjm(lqv7opf#W+HM;~xVfhls=jr)D;BCY~6M2ImGY zX%&wf0g4RlZH!70FO%Bb<!tJnxddoTXlydKoYrGe;BdLqy-dVFz@m}2Lt{F}iyoI_ ztfD%?3@kIYaEhq&N@?A_!Th3|!OM{;A;8J`%rw*XIW-9%T^xiYIt^kvgPS^}lub*H z%url#j$cwyrgMWzDvuDqbzg<hfv2s~mbpBZ0U>E#VnQWd92{TNc@`>~$*?3WO1i-1 zIe}$~;FHDtB6h7Jd=V|2CuA8js%9K0T;@8Jkx5YHMav`MMQ%=CL=srk7@HcI6?8r@ pE$^J>qbcUluy;aJD?2NXgvN&hOss9p%q1r#EMz{}$jHcG4FJ?DUvdBd literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/6-star.gif b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/6-star.gif new file mode 100644 index 0000000000000000000000000000000000000000..de8f2fa587c77fd346c9322a67fef6c27f423a55 GIT binary patch literal 588 zcmZ?wbhEHb6krfwNMm47{K>+|z`($u10q0T%NQ9LZq2Q|yQcr@l&S|4O`mTI-RvO# z|1rat+Y?S#25)xK{QtpouMhX{vkd<qC0}X||G$Uj?P0~MS$uy^G5vku{O>`~-@T0g z_cQ+A%=G^_!=JlMS0+^bKf?I`Fw>v&4F8^o|Nnpd-xK@)Uw!_6%l?0z;qm5(zq=U! zKJohhIOPAYsQ<4U_j+*uf8_V)8ppqf5q}Od{JZ1(cP-1QIF7&P#cr*b_~#76=>Uem zCm6roYP-M8dyyR9mrcx1wmJU4V*mf8`2R}`|F$vzdlK+>H^c99jQ^ho{@uj<|B=hz zn@s=zAN}_@;O{Z^f43w5?qm4>f8yVx4FBH<o~cQ_HMequ5%2$3L3_Qp|L<h}`_g}r z65sb%yZ+se`2XMj|89oAI~e}IiTQie;8Ymr-%AX8qs2Cu@cw<~^Y2Oc-)8|gv$_7= z5BR@}>HmB8Ydxxe4m1A$-S+1M<6(b+BT35tzXbd{%=l&k@4qYVf8Tlhf9?4Hw#EPL z4F5ke{eNZm|9{Z`vkc!Bvw*@MjM-N<Ff=tYFf+GwbZ~HV_DU;Pa`twx7I3ppZVt#% zbP1l+!q3Ra#1v8LnC@n=)PymR(Zg3$DO253)IdjrPfLM?!6vFCIaNMIFVef%w(LNY zYE^8QNSv`(OnJ0fhozk^ub;k;lXzMumsEmjZnjv41ltRLIbricH3xxD9r^6eDs^v8 t1}y2C?UMCD=ElY*E_ps#6_u_6mo`4f@O?)nOxEa`;Swal!^Og24FGN-ANv3R literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/6-thumb1.gif b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/6-thumb1.gif new file mode 100644 index 0000000000000000000000000000000000000000..3233f650bd69272ef00c864f42f9b35415b0ed66 GIT binary patch literal 1063 zcmZ?wbhEHb6krfwC}&_${K>+|z`)3$!@$7601{jN|NnnR28LyKYBxTtSbe{0@3U&l zX~w4>o;q^>$odE6TOL*HyS4Aj=MRTpR_}UNtvf+WyG>*1o!Wgbs^%P>>Au3)beHt% z2Ng?hRXfZ#+3>Xb_?zluZz|V5sAxHuYcb34|Ih!{vyANL885t1?Xtpn`lZSRH!AkN zteJ4KV(XI%%b7+=>w`BvEH^K<oq4rr-Tlf5CrdQvOUyX5V8w%C_1QxGXG<g31;lUm zUv{r>$J43_XDYfc!~|b63R>>kbu!g<uJN8*YZl$j7wh2(y=xq|!E?^lv<*+H*W9l> z_@esIi^}=~Njsi5oPJYnx=LZqy^2NGtLI%S-*Ii*=7$yeTf_IhZaws(+G(kodaLTz zCsmWS_F3+iE!!Pev!&?P^E(C;wR`rrZn$63v_I4Jl=8LbC%=FHqd!q=%aaPj$=Vjv zjg~(w-}StD-^*&FU3|-K*GxHA=|A7wb(M+rehI7n(k%zGHa@BT|NH;iJ0+W+R5>5h z)Ssv`?QH$(`!y5JlutZeas9!4`-94}Zzr$1TW&qw<p00_lTKC6yjZdEarKHjwe|~* z_dTn&Tc@-ANyW@dr4hR<rk=^&@~mR&xr)!9KibaG^;%=F;^K<-J(V2?>h0zk^q)&# z^{{f)z1rM)1<P(#+Z~Wz^Pp<V*_u`NE0T_x8C00-cj(y7Hmf-h-FQ55$=>A_Q;Zf} zYoB|$YSqzYjz?7M_Gg@aeq{d9x!aypzIprN@ayWiS1TP`TtilSI~>sRxv2N+*U#1W z>pp+^y5x4P#Z==>7q{%XyG?(BmQJUZUZ?i9Cso(pT%3BQ8kDGp8s_-Vz}#V=vLJya zM%8HJ#nQyflNofUnK(E-?P#-_B9-e9vcO@DtKXG9yB2vgcB+&l32>SvG%!c5yrj{w z=}|XJQ1Xs14igm|C52iF3JMYzb}DN!RK#kzG#r>?*8ir)h{?lKQ-fjKpNWht!Gd;{ zMt5GAxVDQkFsPl7e8R~yOZf1Y1&b6lFX?W{U}b!9S@Aq~z)pq_Gg`zCFtM;Z8QyYE z<W*saiV{7RopnswdyWJ{g6f(N51D7pkl|u<|2!dX^2JRY#;4rp@H2#jXuaX;UKP2T zsqw>S=bm1L4MEWxOP^iu(-F<O+i19mi!I9Zj*1YIB7*_*@-oQ}32i>&@%$f_un34M IC@@$90F7V1X8-^I literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/6-thumb2.gif b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/6-thumb2.gif new file mode 100644 index 0000000000000000000000000000000000000000..7fdc37091acda8899440a364889d54e99e385983 GIT binary patch literal 599 zcmZ?wbhEHb6krfwNMm47{K>+|z`($u10q0T%NQ9L;`iDpCu?bB>csD}S%0_NsoySo zk4?;8+cmelj9PV6Q?=IK>DqL^H}$A()GnKtJtlDnZB4p$*WI1uILT(+-LBXJw#sQ* z+a66^eY4A<*JjhbuDy@D6ZYDew;JizYNc!qh}~<Zl%QeKWMtcE8@tCea;u|inpW%{ z6Xhh0-V@b^^?C=M_A4i9B<!=<^SFQa<NmD=x^1Q!OuUk3-C?F*rKg^*t)8tNxX5AF zwQ{92t&R7(QdUMp%nLg7yw7==!HQd58d=)LwMG{8Ru)Z`6HZn%?k(PMcT)6T8>MuO zRd>2$_t~z$H(4!Hd+nWW;|7CcFZwp#?_GJjC+Udonmdy`R+wZQwvXFqW7};$>uSaN zdlT2+nPS|o8?xE9`Fyl#qmko${ot)u#`XFh^R4$knP}BytCFG>x6aS1*U+$Df9s<O zppc{hvu|l&XlibXRcq;JvDZln?d(j@4^ZguNH(xbpV}fMBWX0dNyt!IQe<I_mbA62 z2-kWp201Ay6ZtGro?W7Wy!+TxBqVH<{Wy<vvYt8>@8S?->n7}O=_MS(c9YG?IXW`J zLO?@NRUj<R*e5F0Je<WpgXPnwU~zFPPX=E`#w1hOKR<RBI2158u(I>5*&xX1d5Bri oWs65*K_e@7CPPc)rv=JQ{Tyrz5)MHr6NH(9R+%Up2{2d#02;B)H~;_u literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/bug.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/bug.png new file mode 100644 index 0000000000000000000000000000000000000000..2d5fb90ec6ee08f53947e0266a87b03f75893446 GIT binary patch literal 774 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfoX=Pi(`nz>A90n`UeM! z9Q!F9!z>#Yz2L^GlB)NjU8)@1Ig%>Vv?jA^iD^wSvRc5%l^ImP(IK=<tZU0QF)o%~ zHkM?Ai!Y8HY4t8wQ%f*0Ir8DBT&Kpe)Q69}-<{n1y!>2wk-tpCj)+q+%O>vh$h=v6 zEIBl=%3<f<_p_NBzs;QW!}?l_XG%**;^~HY>%VDcy^#F5-I-DSW|w!!=l2%2E4o(v zJ+=OswB@~~xT@K5liyCeapl|$hO<mNXBzsueT(9o5dCEh)0A+&Q@ZZYtAwxFw_kX- zs$relT2-xvk1Kuam$V#n&wIw|r}!gL#^25_`N2}=Nzo@)M4W5?|JA_ni~P~Tbgd<P zhQX!t?j+T`t4^<ZmsX{DX5a4KdCS#ec&9Hgjp00Nz}accx-64<6SvF!Z`KJl?+ol5 z?L#U|;y#_enZURw|94^WN||p7cBhtYO86pv=zAKA^J?Y^Wy>9MMcVix7A$)zy(F5g zD5mYeZ^sh7X^S)$xX+B{KHMYs{kqJC^HLuYmWogEGdv=@=)LAzr`L^=6BcjkxERiI zy;xi7uhkU4l!Z5nrM`#lPMoXday3Gaxxnd;n$xD(4YRL!IE0-4Z|rb2;8y>w1)Sw! zw*t&&_8JRU7U*s}{OICglUdxy_we#g7E`&&;;~M>Z-Zsa%<5cuhx?&lmhMz}5tZfq zaR=YJR=$WkRv~>)7NnnJd$mhw(P^KnR*S5j*-!W?8?8KRr$n`3$GQMpJ);HlcDlvP z%xv7y$M2}i@4{<-$h>gYVx|bs^<CGO$R?TW$WHuz#W73xy(-t)Jy~jjr&oL2c`{9{ zp;&KT2Uo(>Eb*O_*Zi5^<n7~XEdEF9-0BE!@$wsHn;ykK$oX(e_@M24hd<&CqQ@on hPtNGL-&OXVd%I4dFh^n2F9rq%22WQ%mvv4FO#t0BR~i5S literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/readme.txt b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/readme.txt new file mode 100644 index 0000000..c91e09d --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/confidence/readme.txt @@ -0,0 +1,53 @@ +==== + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ +==== +16x16 Free Application Icons + +This icon set is free for use in personal and commercial projects. + +License Agreement + +By purchasing icons from Aha-Soft, You (the purchaser) +agree to the terms of this agreement, as detailed below. + +You may use the icons from Aha-Soft in commercial and +personal design projects, software or Internet products. +Icons can be displayed in documentation, help files, and +advertising materials. You are free to sell and distribute +products and projects using purchased icons without further +royalty fees. + +All icon files are provided 'as is'. Aha-Soft cannot be +held liable for any negative issues that may occur as a +result of using the icons. + +You agree that all ownership and copyright of the icons +remains the property of Aha-Soft. You may not resell, +distribute, lease, license or sub-license the icons or +modified icons (or a subset of the icons), to any third +party unless they are incorporated into your software or +design products. + +If you have any questions regarding copyright or licensing, +including whether another license is required for icon use +within products, please contact us here: www.aha-soft.com/support.htm + +Product page: http://www.small-icons.com/stock-icons/16x16-free-application-icons.htm + +Icon Design Service + +We can design custom icons for you. Please find the basic information +about ordering icons, pricing and the portfolio here: +www.aha-soft.com/customdev/design.htm + + +Notice +Web-site small-icons.com belongs to Aha-Soft. + +Support page: http://www.aha-soft.com/support.htm + +Copyright � 2009 Aha-Soft. All rights reserved. \ No newline at end of file diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/invisible.gif b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/invisible.gif new file mode 100644 index 0000000000000000000000000000000000000000..17d43908d5e11c5b86aee7d90287efdcc27877b2 GIT binary patch literal 43 ucmZ?wbhEHbWMp7uXkcVuU|{(F|G(l-7DfgJMg|=aA0*?z#N@-sU=0Al#Ro$G literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/lock24.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/lock24.png new file mode 100644 index 0000000000000000000000000000000000000000..89ebada2f32e22a93763fb904adccb7d9d2da16f GIT binary patch literal 904 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSc;uILpV4%IBGajIv5xj zI14-?iy0WWK7cTz(;AZ*ARQ&H5hcO-X(i=}MX3yqDfvmM3T~N2spa`a*~R{w<^32K znAtpC978-hw@y2s9TO^Y-2VAJbNe`}PS1Kx6J0LXTZ@_`E=`@yvc%-wk=7kKf4F0& zG)W7#K3c?ab4Q_KS3nF$(#A5cll-o`0yn&J%3jgEP3*GI<dbKr-|wsL?>0Gkro_l6 zXwT{Lcb4;u&;7kuJb#7O|K~>5H)Hnxxf>k5`s!gNrN6&C>_v6XoZl~a{NwGUCzVr} zHq1!9x!hPh?cVP<kDfo=$Z%g@rzSu{>|APQTQMI)w(irSnF5EdO7FjCVQTv~Y~S4a z^I~Vup7ZOPSgg$-mSHyeeuMFW*XMSw&)zC^@At{a$NTp0e$Dml`LlhVm%o&7Bo<br zJZb&-@#C+ywN+0~O~3d1`Xh_DbDwKUl8QEMe9SdT#d2b*<N@`y2N`<|<*VL%PD(lA zc5&j{B$vGmk<&U?J(}}-`Q>MO<9QWx=6ENDH`tsP6m&UKcFT!Ft)-Ol>m*Nq2V?mU zO_N?VZuPr;UVC|#|LoHYHYeiV-1<MS;YoY*@p-Z}#Q__8ME=h^weEjN;1vcAp>r}; zCRN#`JS==u?4+8#&37MtxoT0$w+|xQeuOsup7`M8R-X&sVp<#ynlK(T>{+!ZxUTZ! z-+c_duU_=On&$UNIH6W+h1OJw4Hq&RULD&KFo8q!U4BA4KcCN^d)Lmb)8+blOF)rf z=~;!=picdDyoJxtX<ZK1ymlZguPe>8JC}!{mO;p7m#WOc$?ncIH7n1^*Q?H{JNfy{ z<i;yocQ3rD{PqQ(hi=B{10jbKGJ7YV57l@k>HeK7yYzPOJX^+DGs+5AA99$u+w}a~ zrw+T)0`K2iB+KNKwM0}wal(?+e|u&ZWk>G(zCJOYb<X=UZvr2giAH4J)yi6NKilZD z*8$%t8mk{jUHB%j!bM2*w>9(Y#re+XI=9_jC39D~qtin+W1nJzfJo2Yeed7AU3xAe z_q&3SCWC*EtmK{IhgX06xfgM)QbRrT#kT;ifbu(gestSc|GRZ*QESz@Svl+)jK6I~ z8by|T5=gk|Rk2x3p@HRsRl=KJ+kfwT^(^+qYu~y#TNm%|y1V8-!$Yaur~BVW&S79+ OVDNPHb6Mw<&;$UoBeAyt literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/lookup-indicator.gif b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/lookup-indicator.gif new file mode 100644 index 0000000000000000000000000000000000000000..3288d1035d70bb86517e2c233f1a904e41f06b29 GIT binary patch literal 3208 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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/suggest-indicator.gif b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/suggest-indicator.gif new file mode 100644 index 0000000000000000000000000000000000000000..d0bce1542342e912da81a2c260562df172f30d73 GIT binary patch literal 673 zcmZ?wbhEHb6krfw_{6~Q|Nnmm28Kh24mmkFF)%PBB_%aAHBFi{N%23opKD04vtxj( zk)8oFBLf42;y)?pqSVBa)D(sC%#sX+#H_@MoczQTz0AC{d<MmzESy{n3=BF93=9k) z!x@;3Id<LoXK>0hTR54+ibHY^yWfm7PS=fwhjxj~Jh)9S;mD!F3%bz~mUox2TT1Y- zdu2cOV8CXM3CJA39z_M|7M|T3o^`ntIt7L#7)mN6__#((t*DXNT6+I&q6B+`!gYy9 zZO)RLR8_Quuo+~=vCBwV`;_B}31_B+>9e&a%kX`X^!w=PlsIE`fy@W4Gn@Cy99yBy z6!}*C4`cITexsEsQuFt-U^B{?V^@-@_9>&biErkF#kY1Z<7`#rVKH=RPm~c{<<_*} zqC9g_Q0!-0c>@a_ss0m7iY$Gw`pt-ASCP85*YgyS4-%h!8hO;p4kyGUg-mH}*(sM1 z>7;r7l!E}X+)Eqz!)jo2f+k@##+YN5!l4P4;*U$7@3}S4K=QcE14TWjZF5hBuUTZs z!^SOAoVa^~>G!FOjRqSyJ9p2|)%3z@ju9xRKX3}(oD&*5i}Bs9!h)#@9d{Gw+%=ij z>gaaVKx9I~>}`y^EQcHfW*asfx^`|NZet8id9F@%x-v)ex*P|`VTHcqg?ucA1}jf( gSQj91C{cnv?AB5yh0-L6rg_nV6Brn*K?w(p0qpM50{{R3 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/unlock24.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/authority_control/unlock24.png new file mode 100644 index 0000000000000000000000000000000000000000..fae950dcd32f1da2c3b2f9e0ddb2abbf61c00e46 GIT binary patch literal 905 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSc;uILpV4%IBGajIv5xj zI14-?iy0WWK7cTz(;AZ*ARQ&H5hcO-X(i=}MX3yqDfvmM3T~N2spa`a*~R{w<^32K znAtsD978-hw@y8q9g`|@tp52u>zT8CjAt4}d2X4#D|4erj7X2#O789nt<r*bcNHqH zP}o)U&~4#rCvmYa@hi5tdUNZU2s&zTWGUvVh=`g`n)NO1S>0aw<404L84FvN3ROMG zyZ3p|^UC?3=NuLdeH!TY!DBV^#X7zC-BoKN*ZbSQo#QPweOlf>akp=m7M&K?H%)t< zcD^m}$EsC++)M?^r#JPBi;3^QBYtq|`hDxn<@5ioi0gk^+4o(p!E33L%yEh2dsT^v z54-j1a`>g#rRPs`t<>=pdOW9E+(Jp|bLG7H`6`?o^Vin=z8f6-Cqiz`x^>6y?KJ;n zqt4OPA7@qj>yF>6Z?8_BI-NNyFD28=+R*T$R6$t|>$O?Vl@rbPeqZsb_1~RKD}!gQ zstcZ`>KZ6>b8^#`xooStIuw-ZEZ)yK9U}U^_WX^F962JDn%)7e22&pH`EDmAH)~^5 ziTW(fwWSfSBjV%sna?Rd=X%a^PVv-tHyfJ1{uEyCvh`Ip$7PMfpI7U*CC<4n&2gyn zbNadae~Lf9UA*1Q?6<-5J>R9;9zMU@d{6Grr$3wBnYU)AS-Z|{KKDsrg-}<5Rl*Ue z0FE?10l#D6^M5{k{xon^HP@$2Gt51u({+V7G&-7AyWJ^nTh`pSnu%%GRVA%6#n=7i z*3a8hx41&U@qF`c&*<oL6FVnpZ3*ps#Hn}w$e#S7YXLG7m{vN8aomo4xb5Fg>r2Py zHHjn^Ftl8-TDB%3cxg~`?g68Yn@_Jaa~O%(_iURsi{oCU(t_4a*+1lkzKd%7`1gye zFy`U*OP}1epMPIDW2eS}H?!7W6#5nAV&Ty6XzlX}XDjx`IX6ygl3pX;cJ-A<+wbat zm49YQ8(&zm&CrI;CUW(pm7CUj<=2Wf8Ql2s;o938k;WBT6Fsg9y1bXEdo+302Q`C} z9KTr%PQ_=p{(Nxi{%m{J0LDA#(i?<4)?{5&ol$au;nd;F?9b9#W`&BreG|E0MTy+y zn@oZizplA)=%!K2%6*T@+7+0$t;yQ9JU-2QmeQTd6Mt(3|IGg(-g{x9PQ&}_G7Jn1 N44$rjF6*2UngHQBrFsAW literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/button_minus.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/button_minus.png new file mode 100644 index 0000000000000000000000000000000000000000..45ad7c36d863dd1dfea17841d594d44d8a8db649 GIT binary patch literal 3388 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4mJh`26+$Niwq15oCO|{#S9GG!XV7ZFl&wk z0|S?Trn7TEKt_H^esM;Afr6*AvqC{pep+TuDg#5st+~PJA;B-jY`@?8;^f`YFvUAR zNR&e%$f>(QWTKjuBBy{?hvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQ zu2a7sRxi%Jw&(k^v;VeUw|l<k^W4qn*$;5=O!F`fG;QEn=_Dukp!xWbV-KI`IW%&q z6fg*IY)(-u{;SN$@T1PgMqB9s`#uK7ip$&_3<rE?A25(<|Ih!*X=V&#Lkr`9l8F}H z91S824pn_l%NQKo7#rr!Pzz>Qz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5C zB7=f(YKIF$hBd>Q^I=`C3=swlB5B@7EE#U-G8lM<r+F}J*v@d^oB;PG1`ZwugTRhf zO$L@~hJ+K!$`uSPGZ{qOK84$S)Ltj>T#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy| z%o3RrXF2E{s+=il)M�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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/button_plus.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/button_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..2da6ee744a8df82ed7a7ce5c4f2831874963c14f GIT binary patch literal 3455 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4mJh`26+$Niwq15oCO|{#S9GG!XV7ZFl&wk z0|S?Trn7TEKt_H^esM;Afr6*AvqC{pep+TuDg#5st+~PJA;B-jY`@?8;^f`YFvUAR zNR&e%$f>(QWTKjuBBy{?hvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQ zu2a7sRxi%Jw&(k^v;VeUw|l<k^W4qn*$;5=O!F`fG;QEn=_Dukp!xWbV-KI`IW%&q z6fg*IY)(-u{;SN$@T1PgMqB9s`#uK7ip$&_3<rE?A25(<|Ih!*X=V&#Lkr`9l8F}H z91S824pn_l%NQKo7#rr!Pzz>Qz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5C zB7=f(YKIF$hBd>Q^I=`C3=swlB5B@7EE#U-G8lM<r+F}J*v@d^oB;PG1`ZwugTRhf zO$L@~hJ+K!$`uSPGZ{qOK84$S)Ltj>T#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy| z%o3RrXF2E{s+=il)M�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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/cc-ship.gif b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/cc-ship.gif new file mode 100644 index 0000000000000000000000000000000000000000..0f53bce152b0a68bffdaeee666f224637eb3feff GIT binary patch literal 1376 zcmZ?wbhEHboW@|pu$h73|NsB*-@m_q|Nf~{r*`eywQAL>S+iz!b#;}NmZqkrhK7c^ zy1JU0nkpzL2nYx;Ffb_oWMN=u_|Krjz`(!&GJ}ETzrYF4)q5>opWXdGL8C7vb6&=( zbvdv173iEV$-Q5(?tRVs{|6Qnc<4y=pIEZVwZek`^oth{Y6MiyE-(4L&}x0d8|G7I z1<o<AydL$8L!c*XYNNmoVczA+jAlCjn3*{^gc#Wi{kRf@S-6UL*clm^*ttVF*;$zD zx!I=HceBh%sVio)W$G(h?Z;gv!N#|Se|h#aer^WFj@8SB*f#U?FeVkv3}t5xZ4u%K zWo6*p%xS%`n4K+s-kvSu%&YIPW{2+F!^2$}FSLoD@8&uG*)I>xO$vC!BizBq@PVI~ zyJF%_MxBe=+)PU>7lu8&#@xpAXouAE1jcPz`xx$=O3!x^Wfl5=t>NX04~<J0rnAJ% z3J99i+r+mZSK&Zk;zBK64IYNgZjIidmg*YCMFmWTMT)C?T-Xv`FlYE34J};By|`D0 z?^21x0lmc%X=2w-uo&pi(0As(p~$Kr#2w7=hU4Jla3hHbNyd~^)`MH`uI>}R<;9W4 z)37yi=MAmW)vB{5*K}}L@=U8}o8BnjX2c>>_Ax=7m#;%kcUD6%JI8{xqC7WNdZ}m1 zOj4U`=oXi#lIQvB+m1up2N?udMSposWnQ(~ws;-quE?p2tmCa#`Z{c3T*bU5SoT%+ zJtZwpjmmfFp-k^TNK2}Qi$7bNY<Xr5AJ2sJgNr1%G_Ty<9k1Qs;u%}i@LwyLLA@c0 zL!yDfnvdf_Ko<A9@BX&$ELmsUO|N()%PZtt5UHFjGNn^FA#zebOX*2R-hwvP&C^@g zs2r0vnscyqvR~HMpl0EOql}aE%4S$N2L7y!n8uv4LBcI^$B*)cD33$Mi;_%sxy$v7 z<}jVBH8S~jUqbXsd!xA6n-aG8bODE{ftgtf4zpZaKRlBxJojL!PI+d_=^1_z0kLY? zeg+K|tUt;R&Yl?%Fqg3{sNqFzw^`Oa3zjRMjD{y!xDGJP3$bd_F|)jMAn%)J@f<y# zo>WeIxo1BZm~I>1JP`5Z$LI5Ysk#cDYl}=8R?F;?+Syerd}7&R7FL6k4!N=%ne+b3 zZI>xXu+H3T)i^_g&Df{=pn*$-^=5~UYghL!)o9nByfKNrN2}?<QAd_H&TZ4)@_dmp zX5HG{nUnOU(19syWtgk$oePV@^oj&{{I;$QxXH)#|CHeE1NA2ueXUN1O+UU({=>9% zaq&r^t@T_c1zpbn&d%tUIlA^r++pVbPc}*HT(Vhwll)7`P4<tHEDx3{-AQ`Mww={9 zId#_^mIZa^*FH5^YhW((AXsjzQS!V!Fa9)CMV(maut+7v@G1MMA3@636M_^bT|S_A z^jpOfmrzGfzOY6!k(X+Rma?z9ai!5|>fEytx8$_GnpMZYtF(}w|8UU~`$acwEkqcf z*v{qHt+V9ie^#!!Ry*!D=>;FW6=c1q<Mz_+cTe5q3)TC1x+S>DeZ8`e_L+NDZ<AkS z|BsRC?A;q|;Qwgq%5@d53br5m-QT)l@?_`o<cAs8lvD0`F=n#`Ff{Ubyb54aUn{lo z*{&%rXCEzh-~0T^%lDemiY$-*?y{ZP9-dRI!jka1<;5DN)#mr54&=t9uzv}CTk+cX zE@SaU@mx=)s>!QQTRv-?DadmmM(fbs^CzD2eKz1Ui84%hEYN0iWbM+%2NkR=iQ=7q zE#I;*eqd48Y1+%T$I;@Ov6t$JkJg+8OgeQ8E*t+TNGkp75&rjcAz$T1PA-K8;ig9| m`gtqZSq)b6Mx0qBw*ACWJ>II1-3dI4C60TzskksOSOWn207(J> literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/check_606060_15x15.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/check_606060_15x15.png new file mode 100644 index 0000000000000000000000000000000000000000..8648de74b2edf7f76b2025ccec11d7d33f36fce5 GIT binary patch literal 2972 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 GLK6UcRfXjM literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/controlledvocabulary/voc_closed_222222.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/controlledvocabulary/voc_closed_222222.png new file mode 100644 index 0000000000000000000000000000000000000000..e7ab014d4a0157c873bbeea87f24ce58f0d5afea GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp@3=9lB9Bd2>3_G`*-(+B5U`coMb!1>zf5M!#>m>sN zgJg+oL`iUdT1k0gQ7VIDN`6wRf@f}GdTLN=VoGJ<$y6H#28J+C7srr_TS*~7K}iat z28@La0{`6){a%=4!N@JJp8b)N!afF3;fAh6<{krI9uFyp2Mhw-LYp{ag*o=9A5*L0 w+Q`NdxzPNFiKKG7oO02L3uh`B7}*%|eRw3*_vUYBU|?YIboFyt=akR{0QG4&D*ylh literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/controlledvocabulary/voc_doc_222222.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/controlledvocabulary/voc_doc_222222.png new file mode 100644 index 0000000000000000000000000000000000000000..5a6f9d61ccf699d9d5f7e5880f79de067af5f896 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0y~yVBlw9VBq0kV_;y|>-78y0|Ns~x}&cn1H<|g=B!;W z85kHOOI#yLg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+AuIMM0&b7hE&{23JeNL zQV=&#+&H`OhrO83lxI>3X)cEpCiI<WP*aL&zsw+JV#h93uVxqgF;mPXX}@}?@d@w$ z9vf$NPg${O)-y4MeLc>x+-8n$SxXHjF*-CbGF(5#7kwmlMH>SH1B0ilpUXO@geCwm CD?k|l literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/controlledvocabulary/voc_open_222222.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/controlledvocabulary/voc_open_222222.png new file mode 100644 index 0000000000000000000000000000000000000000..0912becd1303cf688dad0cf27871b9c212013738 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0y~yVBlw9VBq0kV_;y|>-78y0|Ns~x}&cn1H<|g=B!;W z85kHOOI#yLg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+AuIMq<FeGhE&{23JD5I zQV=&V3}BdG%Fghy-bALs-<Vsd+EzfE=_9K~JcCvnA0NX;<y~oPD!t|nKiCDhg|dyA zXC3>_vggbRmt}5q7W($MxfLz$5}Z9>a^XeiDQ-E8$2_)+un8nEaODeq?>m?Jmw|zS N!PC{xWt~$(699b7Kt%um literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-by-nc-nd.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-by-nc-nd.png new file mode 100644 index 0000000000000000000000000000000000000000..49f272f828c17c9f52b64c27fa6a3c399bee9344 GIT binary patch literal 5281 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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-by-nc-sa.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-by-nc-sa.png new file mode 100644 index 0000000000000000000000000000000000000000..0f2a0f10722d3fabffe8af5d5eed09866e25909a GIT binary patch literal 5460 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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-by-nc.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-by-nc.png new file mode 100644 index 0000000000000000000000000000000000000000..5f982147075ad08691e3b3c53e92633ca0ddcb2f GIT binary patch literal 5145 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 Lu6{1-oD!M<SKqzR literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-by-nd.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-by-nd.png new file mode 100644 index 0000000000000000000000000000000000000000..8f317035e677affa946516c82baa17f896e8a866 GIT binary patch literal 4880 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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-by-sa.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-by-sa.png new file mode 100644 index 0000000000000000000000000000000000000000..f0a944e0b89642ae282047846e55393007b04686 GIT binary patch literal 5083 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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-by.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-by.png new file mode 100644 index 0000000000000000000000000000000000000000..822491edb993b072fc183a2ce23adfa8c94cee7c GIT binary patch literal 4739 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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-generic.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-generic.png new file mode 100644 index 0000000000000000000000000000000000000000..4590b0a7a047efa3c7ec5d724c79434390444bf4 GIT binary patch literal 1798 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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-mark.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-mark.png new file mode 100644 index 0000000000000000000000000000000000000000..f1eafe1d83d45cda9b5cf69c7fc680156fc8422f GIT binary patch literal 1047 zcmeAS@N?(olHy`uVBq!ia0y~yV2EH~V36lvW?*0l5&LzCfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84Fdzi=K!A&*ZuqVzkmNeK0cnGpI=^He*XOV`uh6! z@83Uv{(OFZ{`&Rn{r&y>`}=?X{Q39q-_+F9r%#`rJ9qBYt5+XCe*FIZ`^y(E_U+sE z`}gnO-rmQLAK$!rbNTY+XV0Fks;c_(<;&;KpJQTTK7IP+=jW%ato-%s*SmM`K6~~o zE-sFThsVs!OifK~?b@|hu3R~K^ys5Uk94%P#l^)#Lqq@l`zI+WX=rE|9UXn*#EI?O zx6hk5udJ+W#*7(n-n{AS>$`gO>b-mS-oAZ%`SRrn6DD+bcfWi0?)2%?!NI{?+?)>| zKD>7AT31)ssZ*z(KYw0dUvF=3|Mu0x|Ns9pFfhEk?;*;-z_iQL#WAGf)|P3{i*6eT zwD8O7OnQ3n?U#Gi<yFRd2Y%c8zGIlR$vCO*hLFjX4Gr?0dt(~}E;~iFd`VZ-b?oBK z{NG^PFyA^tLg$l-TA#bUTwK5txtuFsmh7uGs4Ps^OHiB{ewCs0sQ->Fb?={Et!(gQ zP4#oh<osK6`+ePcTZ5K_$$YcSec6LlC4YDws1g0oye?={(yBe1HQ(mz?>}ej^seDc z&aDaj3XWy<JS%%kqK!G)`m}lW3fy*jG3A~8jp~pCo~|zr&e-$fpjOpV7M`X`k9F(i zr@6;Q?%fxEU}5hv_G)ooemA+-8;;q%7rk52-tK+$&d!a22SNg`Hfy)6Se~%U^OT}N z?3KHT4PMh$EZOq)+hX0IfXy3^Sw*p3pLnC=gcSEh52=F;5-+z+;=B4yHRR>9hwaC0 zEv~-#suMh|>9A|Ul7D{ujk$8Qf!?8dWo$>bp1ibjp4i)--=dE;96K7ME~L&WTT!y7 zWMjjPkkSXc&K`Cu<~qap&?Jes%~|M&$W`y@_E#33{5W%^q4#w$XOWGjhO?N|!Yww* zyD<h%u-4$8_f}#D--&Y_vuur-eO?vuZqlxKyKwXQ-4{P@URUv?-D-N1kVNk}yYeQR z$O8rp>$*?Oy*{;H&)?;A_T*^U9g6Kg&+YUJx%iP|$!FG_7v{n;r9nwv$C8p|<oCT) z@|A81c;a<v%NI3<lP>xZ%vR3Z<QSyu)cJ~9Z+uWuKM^Utc<OESiDG>zE41gUbBn7s z2+f-$#}&cf_;ZWR)^!}S)<1dnD$joR)h`OC`jP`T_HsECy_l<=Aa^mxVE@9m;noip zFV22H|6DTb#>$P0uk3td{yTNcr8B8#h0~wy|B&+e({@YUWhx2V=V-lrRFV7q>hkmZ z&)wa2t}dKmt%91jt=)`2cYgo+eJ8i_g?ENcRBWWZU467a_n)%pfZy5&7~)Sq*dDcb SasdMa1B0ilpUXO@geCy@Hwtb5 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-zero.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/creativecommons/cc-zero.png new file mode 100644 index 0000000000000000000000000000000000000000..59f27f3000045e384fbf45b8b436c5b9935f683b GIT binary patch literal 1124 zcmeAS@N?(olHy`uVBq!ia0y~yV2EH~V36lvW?*0l5&LzCfq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzihX9`tSABi`_wV1IKYw0cUY?(y|JTp&@$vEf z{r&gv-=9B!etv$wzrX+b_3MBB{CV%*z0}mySFc|E{rmU%^XE^WKK=gv`^S$T4Gj%{ z|Nh<A*LU{p*_$_Se*XNqrKRQHzkg4jJo)zZ^UD`6?Ck6&Oqg)@?%h`}pC3JXw7a|e z(xpq!o;~~W<%^@E<D*B9u3o+R=FOXZ`}XPR=$t-%`qiuF^XAPvckbMeA3r{Q`czd_ z_4Vu5pFh6s+O>;|oAdJJ%hRV%-@bkOwQJWNK782Q+xzX?x8UGlNl8gxU*Fu^+^(*! z`uh4)r%t_i{&fHT{r2|uZ(lw9|NlP&1H=FS|2w3f>|kJE2q+2i3;s`Cz#v?_tdfC& zX`QEwV@SoVEz_Qt-8SH9wG5dkRrV&$Vt4iXz26hK#ZLU*@5`8_@^a&!!&?jcgn3^n z7nC}B&Akxy$mQbvtt^^{wjQb6z|OZfYlD8SazAgC)voU^>|Ng-e0b()&iB(PF>6`Y zh{}hzI-0mXIsATpU;awbhSt?S>Rcyoe*1Cuwuw@kK+(11r_O)k^q#i-7t`_y;+hi` z3(hG&+0Q7jCrz@>=br2`LB@m09TJ`Og1wFk4m%Hjviu^o+OgoQ5r_U+*`s1}KDR%% zz1q-e^5ubt+xLXilT#kB9h|ml+O!i%6MNR>^v9b$2uQftY}q9zvoU7LMn$bl6^nu% zT$qtkU$l5CQ`Z{y=^Ncjxt`^8AMB|N^V}iSu_Dmxl*?}R$8*ED<k}Tn7@He@s&*ZV z3r{_jp=Yt|m7(&d3z-LZJ&B$zZEJD$$*gF-t1V1n^SIBo9q5vu))+Hqk;cuXe;&Vh zbnNE3&d-cl5y`I(vfe!6uk@ceZjqy(@wO0WZP)pQ=eUC(q-ZxpO=OY_=sLXSPv8XY z1Xl;$Ycu#Cggj<Dv(6xAPRG5>+{Go6zi@nKvll!n`N{8bQuu`FY9iqoWk;{2J?Hx7 ze0GLbVpccPw|Vk82htdFE`90kpXt5q<HxPdh1V-Z-6kqnUQc*%?YZ|(bKV<?w(>Un zKR<eLFp<5C=N;Gcs;qfS9Ts0)rd^ZIaOc&nHKJ4V!gjZx&wu|#_ig1wBgKhIr&%X_ zT<LthVXYiP_l850ub$n$I>YjI-F&wWZLWJUP42-bf9oq2>oF~UrL@y&qwkduRXGcz z`?HTdxg7p||Jo$>i9u7C*B(51ZMuA~T6y@E=W{b}tg)N5_s6b9XGKag$}^vu_-+3- zKW^{O;+H>a{_S@9eqZ#m^=$d?a{r^O<{4I$CHn2zw`6|Izr8gv%T4Qcuhsm=Wx!x+ Ybne|k{i!Dy7#J8lUHx3vIVCg!0A2-fHUIzs literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/dspace-logo-only.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/dspace-logo-only.png new file mode 100644 index 0000000000000000000000000000000000000000..2a9ea1dc3ec953bf5848a0e051a2c672f9fb906a GIT binary patch literal 3119 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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/favicon.ico b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..213423e15b685d1e2bf9d97b4f59edc045ec5939 GIT binary patch literal 318 zcmZQzU}Ruq5D*Yx009j~1_m((1_liV1_qFb0s}~%1ti6A08By%kQ|7`#=^=lyR(hq z(#hit5w6Y*+m|n8Xv#=oc>n4pgQmJV!^#;m7>Xmp7@RCE8G0+r7>@7Q#vm^%$?)LD z4Tc}ze=r<UdiN~t|NsAIl=R-E<^TVGrcqGBFYW(-pH_w)yXNKpcR9kW^v+i8zl#gA zlHP%3`7IvIhm@W(rFD2PpHb3cNt5W{I&(;i<=MtYE}t_8nBMIc<Z?L^FzH?BZY~#Z vu0wiLZF!B$_Z(8PoVr`E#pjHY@ziLE7MC-J7F&jH>~Qfp!@%(WKP4Cdfv<F< literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/gear_6D859C_25x25.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/gear_6D859C_25x25.png new file mode 100644 index 0000000000000000000000000000000000000000..089d864b45f346dbd5720cfba32a1d5abcf06773 GIT binary patch literal 3200 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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/gear_ffffff_25x25.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/gear_ffffff_25x25.png new file mode 100644 index 0000000000000000000000000000000000000000..97d7e566446e9d88cd2670de767d9d4ceeb2b036 GIT binary patch literal 3135 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 Urc1tF3=9kmp00i_>zopr0R6VgS^xk5 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/information.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/information.png new file mode 100644 index 0000000000000000000000000000000000000000..12cd1aef900803abba99b26920337ec01ad5c267 GIT binary patch literal 778 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfoYDXi(`nz>7|oTXI}}I zIci_-vnIty&5&zmr&<5S6&e`}JA-sMj`}JFS%)|-(u*mXnkyRfQ=Ws%E^Ob1r6sf0 zwMNaF(spi<^vq)hSC5$VUz9LDsq**io%egczjpGd*&=OwT0h=S#^Sj|=+oMe&(9Q# zOHFhS%7%;kg{|FU!K<;5<KeRMhvy#L^q1TBD?hIE!_lb|d$tyBR9<*;-ZnR>YwH*j z6pMI7=M~gfRkAJqyYut>)cZ^_`{ta#;gKhED@^?U-Kg_d<}BSI@UVH(ifCu8jeUnU z8!_A4$1H0L-pSp*S-at$_jha8I~NwN{dncuw5p<H)j7i7wwN|*)%TrEPHKxi`Sp)+ z{Ilh|TQf~+X6-Kf63FAw^!jzig)4n2%!gZ_-#DRk)#3ed&#K+Q9l|+RC(YNnxX;k> z`n9$xZkN~vm^a*;f8+YSGZBTHf{snc*^l=h7EWnb-;lKN+$Is%p7VM|3Hj2;ZV78^ z-Z-(%?CSM^8JZ9GxbIn@c%giQFl(FpvWo%?&V_js*Ih}w;=Xn@-zqWQuHX&pygtkm znDXaw<-fHSdrB)lS`=DnuVCDh&dN}imABKWc#qg(LlcdI)p2S|DhgQyn<9ih@>gt% zI5xvzE7yj1*AnU`ZSyVUV4PEwQg3Z-pR*`0R`;*_Hw7gNL8~Ys9^SvaFV<dF3tMzs zng3M$^2xm`=dJVoGj0Bp-|_B0zuk*pVG+XI_37d_-Ja=Ul~eS6q<8#{nz+lqe)`3t zr^lYhzw0Z{Tl4(j<H)r6(>e7vEZo?a8$C->U$^jmd;B!Rt;>s;@2A{fRrG!1Yso8d zKJUHM_}_S6-czT$z$SKu!H?e>!aoo77;gM`=fKQ2^?8g7p0C!<46T>pRp*>4W|GjO o$z;x3^t`{Z_`m(K@{8On?3=11w<+#qU|?YIboFyt=akR{07JHBGXMYp literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_flat_0_aaaaaa_40x100.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..e425e6e46ebdfe12ca1ef41e6bb245ca73c9b368 GIT binary patch literal 87 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U`SzPW?*1Ax9Wi<0|NtdfKQ0)s#U85>wf=a rU|`_)ba4!kkW5aHU|rnsi-CbDf`Rd=wnsh#0|SGntDnm{r-UW|K6e!> literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_flat_100_b6c8d9_40x100.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_flat_100_b6c8d9_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..3cafcbe1d8bc4ef4c428bdc929684fac3ae36a11 GIT binary patch literal 87 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U`SzPW?*1Ax9Wi<0|NtdfKQ0)wi7pJwRZS1 rFfj0Yx;TbNNG2ypur6-+#lXN6!NB-b+asTWfq}u()z4*}Q$iB}IR6y( literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_flat_100_fff2f2_40x100.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_flat_100_fff2f2_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..71faf2d122ee2cc94adac6f57afed11539acd84f GIT binary patch literal 87 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U`SzPW?*1Ax9Wi<0|NtdfKQ0)|4*NCZcAD) rFfj0Yx;TbNNG2ypur6-+#lXN6!NB-b+asTWfq}u()z4*}Q$iB}LiQCU literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_flat_100_ffffff_40x100.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_flat_100_ffffff_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..72d4757363cd56508fb5c0c903a1d24a483cb5fe GIT binary patch literal 87 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U`SzPW?*1Ax9Wi<0|NtdfKQ0)|NsA&ACW%6 rz`(%o>Eak7A(@;Y!MeEN7Xt%R1Oww!ZI65g1_lOCS3j3^P6<r_WN;Pr literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_flat_70_000000_40x100.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_flat_70_000000_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..12e01c1042f2b7527539878dca460fd8f47f41c7 GIT binary patch literal 87 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U`SzPW?*1Ax9Wi<0|NtdfKP}k0|UeID%)EO r3=I69E{-7*lF11Ytcx3dF)%PiFfcyV_Q+>oU|{fc^>bP0l+XkK+6EHh literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_flat_75_1f3f5e_40x100.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_flat_75_1f3f5e_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..c84652deb3cc11a4e47aaa7e9c8c88b90429faa4 GIT binary patch literal 87 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U`SzPW?*1Ax9Wi<0|NtdfKQ04ynS2>Z+`>> r0|UROi(`m{WO9N8>*9uA3=B*W42(~;J@OeC7#KWV{an^LB{Ts5)`Akg literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_flat_75_f0f2f5_40x100.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_flat_75_f0f2f5_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..e1b2d11ec9717f2c717201dcb1c9768356b91238 GIT binary patch literal 87 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U`SzPW?*1Ax9Wi<0|NtdfKQ0)hfiOBK0dvS rfq{YF)5S4FLNYl)f^~7jF9rst2nNQd+8+4~3=9mOu6{1-oD!M<hj|vx literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_glass_55_fbf9ee_1x400.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..ad3d6346e00f246102f72f2e026ed0491988b394 GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4T3g#=yXkAHj8-fq}u^)5S5wqWA52L#_h` z3{Dr<f8U>T{ZhhoGv@`x3wGGB#6Gd=msl|6Q}m>dY6qMonj9rKh373vHNTznKhW#v b6Skvs1lR&2PiQePFfe$!`njxgN@xNAU9c$Q literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_glass_65_ffffff_1x400.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..8569c1bc9f4bf246dc663bca9d4b74971abbbc3b GIT binary patch literal 99 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4T3n%)r19I&H=b1_lPU0G|-ofB*jd|Nme5 zPlgNw1A~O8i(`mJaB^aTWNS008G~ZS5j{JumpqKq7IPdl<J;1~z`(%Z>FVdQ&MBb@ E0NQaI;s5{u literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-icons_2e83ff_256x240.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..7a3c7790da5690cf66112921ad6f65d89a718d67 GIT binary patch literal 4193 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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-icons_444444_256x240.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-icons_444444_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..cfd1eaffaae0f5fe30d8e86d2e54b990d2a1ccd0 GIT binary patch literal 4193 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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-icons_c22121_256x240.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-icons_c22121_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..df725f9ed25e47acf29b9692a8fcf29664fa043a GIT binary patch literal 5103 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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-icons_ffffff_256x240.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/jquery_ui/ui-icons_ffffff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..99c18f789a8da9698c4c95411833ab2d1c4d94b0 GIT binary patch literal 4193 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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/mime.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/mime.png new file mode 100644 index 0000000000000000000000000000000000000000..92668ab5ea1b0c317687432c0dc785b8c0b5a416 GIT binary patch literal 3082 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 OFnGH9xvX<aXaWH78=PPO literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/search_icon_ffffff_20x20.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/images/search_icon_ffffff_20x20.png new file mode 100644 index 0000000000000000000000000000000000000000..e652b5536e891d6c16fea1b255d59bfb7970869f GIT binary patch literal 3100 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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/HTML5Doctor_CSS_Reset.LICENSE b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/HTML5Doctor_CSS_Reset.LICENSE new file mode 100644 index 0000000..02cee61 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/HTML5Doctor_CSS_Reset.LICENSE @@ -0,0 +1,6 @@ +HTML5Doctor CSS Reset Stylesheet (reset.css) is released in the public domain. +http://html5doctor.com/html-5-reset-stylesheet/ + +-- + +Copyright (C) 2010 Richard Clark, http://richclarkdesign.com/ diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/authority-control.css b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/authority-control.css new file mode 100644 index 0000000..7ce4b88 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/authority-control.css @@ -0,0 +1,83 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +/** Additions for Authority Control elements **/ +/* for scriptaculous autocomplete */ +div.autocomplete { + display: none; +} + +div.autocomplete, ul.ui-menu { + position:absolute; + width:250px; + background-color:white; + border:1px solid #888; + margin:0; + padding:0; +} +div.autocomplete ul, ul.ui-menu { + list-style-type:none; + margin:0; + padding:0; +} +div.autocomplete ul li.selected { background-color: #ffb;} +div.autocomplete ul li, ul.ui-menu li { + list-style-type:none; + display:block; + margin:0; + padding:2px; +/* height:32px; */ + cursor:pointer; +} +div.autocomplete ul li span.value { display:none; } +ul.ui-menu li a { + display: block; +} +ul.ui-menu li a.ui-state-hover { + background-color: #ffb; +} +/* this magic gets the 16x16 icon to show up.. setting height/width didn't + do it, but adding padding actually made it show up. */ +img.ds-authority-confidence +{ width: 16px; height: 16px; margin: 0px 2px; padding: 0px; vertical-align: bottom; display: inline-block;} + +img.ds-authority-confidence.cf-unset + { background: transparent url(../../images/authority_control/confidence/bug.png); } +img.ds-authority-confidence.cf-novalue + /* { background: transparent } */ + { background: transparent url(../../images/authority_control/confidence/3-circleslash.gif); } +img.ds-authority-confidence.cf-rejected, +img.ds-authority-confidence.cf-failed + { background: transparent url(../../images/authority_control/confidence/2-errortriangle.gif); } +img.ds-authority-confidence.cf-notfound + { background: transparent url(../../images/authority_control/confidence/3-thumb2.gif); } +img.ds-authority-confidence.cf-ambiguous + { background: transparent url(../../images/authority_control/confidence/4-question.gif); } +img.ds-authority-confidence.cf-uncertain + { background: transparent url(../../images/authority_control/confidence/5-pinion.gif); } +img.ds-authority-confidence.cf-accepted + { background: transparent url(../../images/authority_control/confidence/6-thumb2.gif); } + +/* hide authority-value inputs in forms */ +input.ds-authority-value { display:none; } +/** XXX Change to this to get the authority value to show up for debugging: + input.ds-authority-value { display:inline; } +**/ + +/* ..except, show authority-value inputs in on the Item EditMetadata page */ +input.ds-authority-value.ds-authority-visible { display: inline; } + +/* for lock button */ +input.ds-authority-lock + { vertical-align: bottom; height: 24px; width: + 24px; background-repeat: no-repeat; background-color: transparent; } +input.ds-authority-lock.is-locked + { background-image: url(../../images/authority_control/lock24.png); } +input.ds-authority-lock.is-unlocked + { background-image: url(../../images/authority_control/unlock24.png); } + +#aspect_general_ChoiceLookupTransformer_div_lookup select {height: auto;} diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/base.css b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/base.css new file mode 100644 index 0000000..968e29c --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/base.css @@ -0,0 +1,81 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +/* + * base.css + * + * minimal base styles + */ + + +/* #444 looks better than black: twitter.com/H_FJ/statuses/11800719859 */ +body, select, input, textarea { color:#444; } + +/* www.aestheticallyloyal.com/public/optimize-legibility/ */ +h1,h2,h3,h4,h5,h6 { font-weight: bold; text-rendering: optimizeLegibility; } + +/* maxvoltar.com/archive/-webkit-font-smoothing */ +html { -webkit-font-smoothing: antialiased; } + + +/* Accessible focus treatment: people.opera.com/patrickl/experiments/keyboard/test */ +a:hover, a:active { outline: none; } + +a, a:active, a:visited { color:#607890; } +a:hover { color:#036; } + + +ul { margin-left:30px; } +ol { margin-left:30px; list-style-type: decimal; } + +small { font-size:85%; } +.bold, strong, th { font-weight: bold; } + +td, td img { vertical-align:top; } + +sub { vertical-align: sub; font-size: smaller; } +sup { vertical-align: super; font-size: smaller; } + +pre { + padding: 15px; + + /* www.pathf.com/blogs/2008/05/formatting-quoted-code-in-blog-posts-css21-white-space-pre-wrap/ */ + white-space: pre; /* CSS2 */ + white-space: pre-wrap; /* CSS 2.1 */ + white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */ + word-wrap: break-word; /* IE */ +} + +/* align checkboxes, radios, text inputs with their label + by: Thierry Koblentz tjkdesign.com/ez-css/css/base.css */ +input[type="radio"] { vertical-align: text-bottom; } +input[type="checkbox"] { vertical-align: bottom; *vertical-align: baseline; } +.ie6 input { vertical-align: text-bottom; } + +/* hand cursor on clickable input elements */ +label, input[type=button], input[type=submit], button { cursor: pointer; } + + +/* These selection declarations have to be separate. + No text-shadow: twitter.com/miketaylr/status/12228805301 */ +::-moz-selection{ background: #5e9fff; color:#fff; text-shadow: none; } +::selection { background:#5e9fff; color:#fff; text-shadow: none; } + +/* j.mp/webkit-tap-highlight-color */ +a:link { -webkit-tap-highlight-color: #5e9fff; } + + +/* always force a scrollbar in non-IE */ +html { overflow-y: scroll; } + +/* make buttons play nice in IE: + www.viget.com/inspire/styling-the-button-element-in-internet-explorer/ */ +button { width: auto; overflow: visible; } + +/* bicubic resizing for non-native sized IMG: + code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/ */ +.ie7 img { -ms-interpolation-mode: bicubic; } \ No newline at end of file diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/handheld.css b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/handheld.css new file mode 100644 index 0000000..c96ee48 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/handheld.css @@ -0,0 +1,14 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +* { + float: none; /* Screens are not big enough to account for floats */ + font-size: 80%; /* Slightly reducing font size to reduce need to scroll */ + background: #fff; /* As much contrast as possible */ + color: #000; +} \ No newline at end of file diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/helper.css b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/helper.css new file mode 100644 index 0000000..46aff7a --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/helper.css @@ -0,0 +1,35 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +/* + * helper.css + * + * Non-semantic helper classes + */ + +/* for image replacement */ +.ir { display:block; text-indent:-999em; overflow:hidden; background-repeat: no-repeat; } + +/* Hide for both screenreaders and browsers + css-discuss.incutio.com/wiki/Screenreader_Visibility */ +.hidden { display:none; visibility:hidden; } + +/* Hide only visually, but have it available for screenreaders + www.webaim.org/techniques/css/invisiblecontent/ + Solution from: j.mp/visuallyhidden - Thanks Jonathan Neal! */ +.visuallyhidden { position:absolute !important; + clip: rect(1px 1px 1px 1px); /* IE6, IE7 */ + clip: rect(1px, 1px, 1px, 1px); } + +/* Hide visually and from screenreaders, but maintain layout */ +.invisible { visibility: hidden; } + +/* >> The Magnificent CLEARFIX << */ +.clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.clearfix { display: inline-block; } +* html .clearfix { height: 1%; } /* Hides from IE-mac \*/ +.clearfix { display: block; } \ No newline at end of file diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/jquery-ui-1.8.15.custom.css b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/jquery-ui-1.8.15.custom.css new file mode 100644 index 0000000..b5cc06c --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/jquery-ui-1.8.15.custom.css @@ -0,0 +1,568 @@ +/* + * jQuery UI CSS Framework 1.8.15 + * + * 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/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,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: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 1.8.15 + * + * 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/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ctl=themeroller&ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=0&bgColorHeader=f0f2f5&bgTextureHeader=01_flat.png&bgImgOpacityHeader=75&borderColorHeader=d8e8eb&fcHeader=444444&iconColorHeader=444444&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=100&borderColorContent=9cacba&fcContent=444444&iconColorContent=444444&bgColorDefault=B6C8D9&bgTextureDefault=01_flat.png&bgImgOpacityDefault=100&borderColorDefault=9cacba&fcDefault=444444&iconColorDefault=444444&bgColorHover=1f3f5e&bgTextureHover=01_flat.png&bgImgOpacityHover=75&borderColorHover=1f3f5e&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=9cacba&fcActive=444444&iconColorActive=444444&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fff2f2&bgTextureError=01_flat.png&bgImgOpacityError=100&borderColorError=c22121&fcError=c22121&iconColorError=c22121&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=75&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=70&opacityShadow=0&thicknessShadow=0px&offsetTopShadow=12px&offsetLeftShadow=8px&cornerRadiusShadow=5px + */ + + +/* 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 #9cacba; background: #ffffff url(../../images/jquery_ui/ui-bg_flat_100_ffffff_40x100.png) 50% 50% repeat-x; color: #444444; } +.ui-widget-content a { color: #444444; } +.ui-widget-header { border: 1px solid #d8e8eb; background: #f0f2f5 url(../../images/jquery_ui/ui-bg_flat_75_f0f2f5_40x100.png) 50% 50% repeat-x; color: #444444; font-weight: bold; } +.ui-widget-header a { color: #444444; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #9cacba; background: #b6c8d9 url(../../images/jquery_ui/ui-bg_flat_100_b6c8d9_40x100.png) 50% 50% repeat-x; font-weight: normal; color: #444444; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #444444; 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 #1f3f5e; background: #1f3f5e url(../../images/jquery_ui/ui-bg_flat_75_1f3f5e_40x100.png) 50% 50% repeat-x; font-weight: normal; color: #ffffff; } +.ui-state-hover a, .ui-state-hover a:hover { color: #ffffff; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #9cacba; background: #ffffff url(../../images/jquery_ui/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #444444; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #444444; 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/jquery_ui/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 #c22121; background: #fff2f2 url(../../images/jquery_ui/ui-bg_flat_100_fff2f2_40x100.png) 50% 50% repeat-x; color: #c22121; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #c22121; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #c22121; } +.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/jquery_ui/ui-icons_444444_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(../../images/jquery_ui/ui-icons_444444_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(../../images/jquery_ui/ui-icons_444444_256x240.png); } +.ui-state-default .ui-icon { background-image: url(../../images/jquery_ui/ui-icons_444444_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(../../images/jquery_ui/ui-icons_ffffff_256x240.png); } +.ui-state-active .ui-icon {background-image: url(../../images/jquery_ui/ui-icons_444444_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(../../images/jquery_ui/ui-icons_2e83ff_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(../../images/jquery_ui/ui-icons_c22121_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-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 0; -webkit-border-top-left-radius: 0; -khtml-border-top-left-radius: 0; border-top-left-radius: 0; } +.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 0; -webkit-border-top-right-radius: 0; -khtml-border-top-right-radius: 0; border-top-right-radius: 0; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; -khtml-border-bottom-left-radius: 0; border-bottom-left-radius: 0; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; -khtml-border-bottom-right-radius: 0; border-bottom-right-radius: 0; } + +/* Overlays */ +.ui-widget-overlay { background: #aaaaaa url(../../images/jquery_ui/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .75;filter:Alpha(Opacity=75); } +.ui-widget-shadow { margin: 12px 0 0 8px; padding: 0px; background: #000000 url(../../images/jquery_ui/ui-bg_flat_70_000000_40x100.png) 50% 50% repeat-x; opacity: 0;filter:Alpha(Opacity=0); -moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* + * jQuery UI Resizable 1.8.15 + * + * 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/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 1.8.15 + * + * 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/Selectable#theming + */ +.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } +/* + * jQuery UI Accordion 1.8.15 + * + * 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/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 1.8.15 + * + * 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/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 1.8.15 + * + * 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 1.8.15 + * + * 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/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 1.8.15 + * + * 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/Dialog#theming + */ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 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 1.8.15 + * + * 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/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 1.8.15 + * + * 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#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 1.8.15 + * + * 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/Datepicker#theming + */ +.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 { 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%; font-size:0em; } + +/* 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 1.8.15 + * + * 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#theming + */ +.ui-progressbar { height:2em; text-align: left; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/media.css b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/media.css new file mode 100644 index 0000000..bb5a42e --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/media.css @@ -0,0 +1,29 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +/* + * Media queries for responsive design + */ + +@media all and (orientation:portrait) { + /* Style adjustments for portrait mode goes here */ + +} + +@media all and (orientation:landscape) { + /* Style adjustments for landscape mode goes here */ + +} + +/* Grade-A Mobile Browsers (Opera Mobile, iPhone Safari, Android Chrome) + Consider this: www.cloudfour.com/css-media-query-for-mobile-is-fools-gold/ */ +@media screen and (max-device-width: 480px) { + + + /* Prevent iOS, WinMobile from adjusting font size */ + html { -webkit-text-size-adjust:none; -ms-text-size-adjust:none; } +} \ No newline at end of file diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/print.css b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/print.css new file mode 100644 index 0000000..96eada2 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/print.css @@ -0,0 +1,34 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +/* + * print.css + * + * print styles + */ +* { background: transparent !important; color: #444 !important; text-shadow: none; } + +a, a:visited { color: #444 !important; text-decoration: underline; } + +a:after { content: " (" attr(href) ")"; } + +abbr:after { content: " (" attr(title) ")"; } + +.ir a:after { content: ""; } /* Don't show links for images */ + +pre, blockquote { border: 1px solid #999; page-break-inside: avoid; } + +img { page-break-inside: avoid; } + +@page { margin: 0.5cm; } + +p, h2, h3 { orphans: 3; widows: 3; } + +h2, h3{ page-break-after: avoid; } + +#no-js-warning-wrapper{ display: none; visibility: hidden; } + diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/reset.css b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/reset.css new file mode 100644 index 0000000..ff36bc8 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/reset.css @@ -0,0 +1,87 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +/* + reset.css +*/ + + + +/* + html5doctor.com Reset Stylesheet (Eric Meyer's Reset Reloaded + HTML5 baseline) + v1.4 2009-07-27 | Authors: Eric Meyer & Richard Clark + html5doctor.com/html-5-reset-stylesheet/ +*/ +html, body, div, span, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +abbr, address, cite, code, +del, dfn, em, img, ins, kbd, q, samp, +small, strong, sub, sup, var, +b, i, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, figure, footer, header, +hgroup, menu, nav, section, menu, +time, mark, audio, video { + margin:0; + padding:0; + border:0; + outline:0; + font-size:100%; + vertical-align:baseline; + background:transparent; +} + +article, aside, figure, footer, header, +hgroup, nav, section { display:block; } + +nav ul { list-style:none; } + +blockquote, q { quotes:none; } + +blockquote:before, blockquote:after, +q:before, q:after { content:''; content:none; } + +a { margin:0; padding:0; font-size:100%; vertical-align:baseline; background:transparent; } + +ins { background-color:#ff9; color:#000; text-decoration:none; } + +mark { background-color:#ff9; color:#000; font-style:italic; font-weight:bold; } + +del { text-decoration: line-through; } + +abbr[title], dfn[title] { border-bottom:1px dotted #000; cursor:help; } + +/* tables still need cellspacing="0" in the markup */ +table { border-collapse:collapse; border-spacing:0; } + +hr { display:block; height:1px; border:0; border-top:1px solid #ccc; margin:1em 0; padding:0; } + +input, select { vertical-align:middle; } + + +/* +fonts.css from the YUI Library: developer.yahoo.com/yui/ + Please refer to developer.yahoo.com/yui/fonts/ for font sizing percentages + +There are three custom edits: + * remove arial, helvetica from explicit font stack + * make the line-height relative and unit-less + * remove the pre, code styles +*/ +body { font:13px sans-serif; *font-size:small; *font:x-small; line-height:1.22; } + +table { font-size:inherit; font:100%; } + +select, input, textarea { font:99% sans-serif; } + + +/* normalize monospace sizing + * en.wikipedia.org/wiki/MediaWiki_talk:Common.css/Archive_11#Teletype_style_fix_for_Chrome + */ +pre, code, kbd, samp { font-family: monospace, sans-serif; } \ No newline at end of file diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/style.css b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/style.css new file mode 100644 index 0000000..b9c4b2c --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/style.css @@ -0,0 +1,1395 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +/* + * style.css + * + * Primary Styles + */ + +/*Font size percentages based on the tables at developer.yahoo.com/yui/fonts/ */ +h1 { + font-size: 182%; + color: #1F3F5E; + text-align: justify; +} + +h2{ + font-size: 123.1%; +} + +h3 { + font-size: 116%; +} + +h4 { + font-size: 108%; +} + +h5, h6 { + font-size: 100%; +} + +/*fix for firefox in os x, where selects get the incorrect +height if it's not explicitly set this shouldn't be noticeable in +other browsers*/ +select { + height: 20px; +} + +select.multiple { + height: auto; +} + +#ds-header-wrapper { + background-color: #1F3F5E; + color: white; + min-width: 950px; +} + +#ds-header-logo-link { + text-decoration: none; + cursor: pointer; +} + +#ds-header-logo { + float:left; + width: 48px; + height: 50px; + margin-top: 10px; + background: url('../../images/dspace-logo-only.png'); + background-repeat: no-repeat; + background-color: transparent; + margin-right: 15px; +} + +#ds-header-logo-text { + font-size: 400%; + color: white; + line-height: 70px; + font-weight: normal; + vertical-align: middle; + float: left; +} + +#ds-user-box { + right: 0; + top: 17px; + position: absolute; + color: white; +} + +#ds-language-selection { + right: 0; + top: 40px; + position: absolute; + color: white; +} + +#ds-user-box a, #ds-language-selection a { + color: white; +} + +#ds-trail-wrapper { + background-color: #b6c8d9; + margin: 0; + padding: 0; + border-top: 1px solid #9cacba; + border-bottom: 1px solid #9cacba; + min-width: 950px; +} + +#ds-trail { + list-style: none; + line-height: 138.5%; + margin: 0; + padding: 3px 0; +} + +#ds-trail li { + display: inline; + color: #1F3F5E; + margin-right: 5px; +} + +#ds-trail a { + color: #1F3F5E; +} + +#no-js-warning, +#ds-trail, +#ds-header, +#ds-footer, +#ds-content { + width: 950px; + margin: auto; + position: relative; +} + +/*ie6 uses quirks mode for strict xhtml pages, and in quirks mode margin: auto; doesn't center things*/ +.ie6 #no-js-warning-wrapper, +.ie6 #ds-trail-wrapper, +.ie6 #ds-header-wrapper, +.ie6 #ds-footer-wrapper, +.ie6 #ds-content-wrapper { + text-align: center; +} + +.ie6 #ds-trail, +.ie6 #ds-header, +.ie6 #ds-footer, +.ie6 #ds-content { + margin: 0; + text-align: left; +} + +#ds-footer-wrapper { + margin-top: 40px; +} + +#ds-footer { + border-top: 1px solid #9CACBA; + padding-top: 10px; + font-size: 93%; + line-height: 1.6em; +} + +#ds-footer-left { + float: left; +} + +#ds-footer-right { + float:right; +} + +#ds-footer-right span.theme-by{ + display: inline-block; + vertical-align: top; +} + +#ds-footer-logo-link { + text-decoration:none; + line-height: 40px; + cursor: pointer; +} + +#ds-footer-logo { + display: inline-block; + background: url('../../images/@mirelogo-small.png'); + background-repeat: no-repeat; + width: 79px; + height: 40px; +} + +#ds-footer-links { + clear: left; +} + +.ie6 #ds-footer-links { + display: inline; +} + +/*make transparent PNGs invisible in IE6 until PNG-fix is applied*/ +.ie6 #ds-header-logo, +.ie6 #ds-footer-logo { + visibility: hidden; +} + + +#ds-body { + float: left; + width: 675px; + padding-top: 10px; +} + +#ds-options-wrapper { + float: right; + width: 249px; + padding-top:10px; +} + +#ds-options { + padding: 0; +} + +h1.ds-option-set-head { + margin-top: 20px; + background-color: #f0f2f5; + padding: 3px 10px; + border: 1px solid #d8e8eb; + border-bottom: none; + font-size: 108%; +} + +#ds-search-option-head{ + margin-top: 0; +} + +div.ds-option-set { + border: 1px solid #d8e8eb; + border-top: none; +} + +div.ds-option-set ul { + list-style: none; + margin-left: 10px; + padding-top: 5px; + padding-bottom: 5px; +} + +div.ds-option-set .ds-sublist-head { + font-weight: normal; + font-size: 100%; +} + +div.ds-option-set ul.sublist { + margin-left: 20px; + padding-top: 0; + padding-bottom: 0; +} + +div#ds-feed-option li +{ + padding-top: 4px; +} + +div#ds-feed-option a +{ + padding: 0px 0px 2px 20px; +} + +#ds-search-option { + padding: 10px; +} + +#ds-search-form { + margin-bottom: 10px; +} + +#ds-search-form input.ds-text-field{ + width: 169px; +} + +#ds-search-form input.ds-button-field { + margin-left: 6px; +} + +#ds-search-form input.ds-text-field, +#ds-search-form input.ds-button-field{ + margin-bottom: 10px; +} + +p { + margin-bottom: 10px; +} + +#aspect_eperson_EditProfile_list_form, +.submission fieldset.ds-form-list, +.administrative fieldset.ds-form-list { + margin-bottom: 25px; +} + +.primary { + margin-top: 10px; + margin-bottom: 30px; +} + +ol { + margin: 0; + list-style: none; +} + +th, +td { + padding: 5px; + vertical-align: middle; +} + +.ds-button-field, +#aspect_eperson_StartRegistration_list_registration-progress li { + background-color: #6d859c; + border: 1px solid #1F3F5E; + padding: 2px 5px; + color: #FFFFFF; + font-weight: bold; + cursor: pointer; +} + +.ds-button-field[disabled="disabled"], +.ds-button-field.disabled, +li.button.disabled input { + opacity: 0.35; + cursor: auto; +} + +#aspect_eperson_StartRegistration_list_registration-progress li { + cursor: default; +} + +#aspect_eperson_StartRegistration_list_registration-progress li.arrow { + background-color: inherit; + border: none; + color: inherit; + font-weight: normal; +} + +.ie6 #aspect_eperson_StartRegistration_list_registration-progress li.arrow, +.ie7 #aspect_eperson_StartRegistration_list_registration-progress li.arrow { + background-color: #FFFFFF; + color: #444444; +} + +.ie6 #aspect_eperson_StartRegistration_list_registration-progress li.arrow { + padding-top: 5px; +} + +ul.ds-progress-list { + margin: 0 0 10px 0; + padding: 2px 0; + text-align: center; +} + +ul.ds-progress-list li { + font-weight: bold; + overflow: hidden; + display: inline; + padding: 0; + margin: 0; + max-width: 400px; +} + +ul.ds-progress-list li.button { + padding: 0; +} + +ul.ds-progress-list li.button input.ds-button-field { + font-size: 77%; +} + +.ie6 ul.ds-progress-list li.button input.ds-button-field, +.ie7 ul.ds-progress-list li.button input.ds-button-field { + padding-left: 0; + padding-right: 0; +} + +ul.ds-progress-list li.current input.ds-button-field, +#aspect_eperson_StartRegistration_list_registration-progress li.current { + background-color: #499c73; + border: 1px solid #1f5e3f; +} + +ul.ds-progress-list li.disabled input.ds-button-field +#aspect_eperson_StartRegistration_list_registration-progress li.disabled { + background-color: #F0F2F5; + border: 1px solid #D8E8EB; + color: #444444; + cursor: default; +} + +.ie6 .disabled, +.ie6 li.disabled input, +.ie7 .ds-button-field.disabled, +.ie7 li.button.disabled input, +.ie8 .ds-button-field.disabled, +.ie8 li.button.disabled input { + filter: progid:DXImageTransform.Microsoft.Alpha(opacity = 50); + zoom: 1; + cursor: auto; +} + + +ul.ds-progress-list li.arrow { + border: none; + background: none; + font-size: 116%; + font-weight: normal; + margin-left: 3px; + margin-right: 3px; +} + +.ie6 ul.ds-progress-list li.arrow { + height: 25px; + width: 25px; + margin: 0; +} + +textarea.ds-textarea-field, +input.ds-text-field, +input.ds-file-field, +input.ds-button-field, +input.ds-password-field { + margin-bottom: 5px; + margin-top: 5px; + font-size: 93%; +} + +textarea.ds-textarea-field, +input.ds-text-field, +input.ds-password-field { + padding: 3px; + border: 1px solid #AAAAAA; +} + +.ie6 input.ds-text-field, +.ie6 input.ds-password-field { + font-size: 85%; + height: 22px; +} + +.submission .ds-form-list input.ds-text-field, +.administrative .ds-form-list input.ds-text-field, +textarea.ds-textarea-field { + width: 500px; +} + +table textarea.ds-textarea-field { + width: 400px; +} + +#aspect_administrative_item_EditItemMetadataForm_field_value { + width: 570px; +} + +#aspect_administrative_registries_EditMetadataSchema_list_edit-schema-new-field-form .ds-text-field, +#aspect_administrative_item_EditItemMetadataForm_field_language, +.ds-composite-component input.ds-text-field { + width: auto; +} + +textarea.ds-textarea-field:focus, +input.ds-text-field:focus, +input.input.ds-password-field:focus { + border-color: #5F9DE4; +} + +/* + * Show a blue glow around a focused text field + * only target browsers that support rgba colors and boxshadows + * see http://www.modernizr.com/docs/ + */ +.rgba.boxshadow textarea.ds-textarea-field:focus, +.rgba.boxshadow input.ds-text-field:focus, +.rgba.boxshadow input.ds-password-field:focus { + -moz-box-shadow:0 0 8px rgba(95, 158, 212, 0.5); + -webkit-box-shadow:0 0 8px rgba(95, 158, 212, 0.5); + box-shadow:0 0 8px rgba(95, 158, 212, 0.5); + border-color:rgba(95, 158, 212, 0.75); + outline:medium none; +} + +span.error { + clear: both; + display: block; + color: #c22121; + font-size: 0.9em; + margin-top: 3px; +} + +textarea.ds-textarea-field.error, +input.ds-text-field.error, +input.ds-password-field.error { + border-color: #c22121; + background-color: #fff2f2; +} + +.rgba.boxshadow textarea.ds-textarea-field.error:focus, +.rgba.boxshadow input.ds-text-field.error:focus, +.rgba.boxshadow input.ds-password-field.error:focus { + -moz-box-shadow:0 0 8px rgba(194, 33, 33, 0.5); + -webkit-box-shadow:0 0 8px rgba(194, 33, 33, 0.5); + box-shadow:0 0 8px rgba(194, 33, 33, 0.5); + border-color:rgba(194, 33, 33, 0.75) !important; + outline:medium none; +} + + +.ds-form-list { + margin-top: 15px; +} + +.submission h2, +.ds-form-list legend{ + font-size: 182%; + margin-bottom: 15px; + color: #1F3F5E; +} + +.ds-form-item legend { + font-size: 100%; + margin:0; + color: inherit; +} + +fieldset ol { + margin: 0; +} + +li.ds-form-item { + list-style: none; + margin-bottom: 35px; + vertical-align: middle !important; + position: relative; + clear: left; +} + +li.ds-form-item.last { + margin-bottom: 0; +} + +li.ds-form-item .ds-form-label{ + font-weight: bold; + font-size: 123.1%; +} + +li.ds-form-item label.ds-composite-component{ + display: block; + float: left; + font-size: 93%; + padding:0 8px 0 0; +} + +li.ds-form-item label.ds-composite-component input.ds-text-field{ + font-size: 100%; + width: 242px; +} + +li.ds-form-item .ds-select-field { + margin-top: 5px; +} + +.ds-add-button, +label.ds-composite-component .ds-select-field { + margin-top: 6px; + margin-bottom: 6px; +} + +li.ds-form-item label.ds-composite-component.last{ + padding:0; +} + +.ds-add-button { + vertical-align: top; + margin-left: 8px; +} + + +.ds-form-content input.ds-button-field { + font-size: 93%; +} + +select#aspect_submission_submit_SelectCollectionStep_field_handle { + max-width: 350px; +} + +#aspect_submission_StepTransformer_field_dc_date_issued_year, +#aspect_submission_StepTransformer_field_dc_date_issued_day { + width: 50px; +} + +#aspect_submission_StepTransformer_field_dc_identifier_value { + width: 130px; + margin-bottom: 0; +} + +span.composite-help, +span.field-help { + display: block; + font-size: 93%; + margin-top: 3px; + width: 506px; + text-align: justify; +} + +.ds-checkbox-field input, +.ds-radio-field input { + margin-left: 0; +} + +.ds-checkbox-field label, +.ds-radio-field label { + margin-right: 3px; +} +/*hide the double label for checkboxes & radio buttons*/ +.ds-checkbox-field legend, +.ds-radio-field legend { + display: none; +} + +.ds-previous-values { + margin-top: 10px; + clear: both; +} + +#aspect_submission_Submissions_div_submissions .ds-static-div, +.submission .ds-form-sublist ol { + background-color: #fafafa; + border: 1px solid #ebebeb; + margin-top: 3px; + margin-bottom: 30px; + padding: 10px; +} + +#aspect_submission_Submissions_div_submissions table, +#aspect_submission_Submissions_div_submissions table tr, +#aspect_submission_Submissions_div_submissions table td, +#aspect_submission_Submissions_div_submissions table th { + background-color: #FFFFFF; + border: 1px solid #9CACBA; +} + +#aspect_submission_Submissions_div_submissions table tr.ds-table-header-row, +#aspect_submission_Submissions_div_submissions table tr.ds-table-header-row th { + background-color: #B6C8D9; + border: 1px solid #9CACBA; + +} + +.submission .ds-form-sublist li.ds-form-item { + margin-bottom: 5px; +} + +.submission .ds-form-sublist .ds-form-label { + font-weight: bold; +} + + +.administrative.tabbed ul.horizontal { + list-style: none; + margin: 15px 0 0; + border-bottom: 1px solid #9cacba; +} + +.administrative.tabbed ul.horizontal li{ + float: left; + border: 1px solid #9cacba; + padding: 5px; + margin-bottom: -1px; + margin-right: 7px; + border-bottom: none; +} + +.administrative.tabbed ul.horizontal li a{ + text-decoration: none; + color: #444444; +} + +.administrative.tabbed ul.horizontal li.active-tab{ + background-color: #fafafa; + z-index: 1; + font-weight: bold; +} + +.pane { + padding: 10px; + clear: both; + background-color: #fafafa; + border: 1px solid #9cacba; + margin-bottom: 25px; + margin-top: 0; +} + +.pane .ds-form-list { + margin-top: 0; +} + +.administrative.tabbed .pane { + border-top: none; +} + +.pagination, +.pagination-masked { + padding: 7px; + background-color: #fafafa; + border: 1px solid #ebebeb; + line-height: 1em; + vertical-align:middle; +} + +.pagination-links { + list-style: none; + float: right; + margin: 0; +} + +.pagination-links li { + display: inline; + padding-left: 2px; + padding-right: 2px; +} + +.current-page-link { + font-weight: bold; + color: #1F3F5E; +} + +.current-page-link a{ + color: #1F3F5E; +} + +.pagination-info { + float: left; + margin:0; +} + +.pagination-masked.top { + margin-top: 5px; +} + +.ds-artifact-list { + list-style: none; + margin: 0; + line-height: 153.9%; +} + +.file-wrapper, +.ds-artifact-item { + padding-top: 15px; + padding-bottom: 15px; +} + +.ds-artifact-item.collection, +.ds-artifact-item.community { + padding-top: 1px; + padding-bottom: 1px; +} + +.community .artifact-title a { + font-weight: bold; +} + +.collection .artifact-title a { + font-weight: normal; +} + +#aspect_artifactbrowser_CommunityBrowser_div_comunity-browser .short-description, #aspect_discovery_SiteRecentSubmissions_div_site-home .short-description { + display: none; +} + +#aspect_artifactbrowser_SimpleSearch_div_search-results li, #aspect_discovery_SimpleSearch_div_search-results li, #aspect_artifactbrowser_AdvancedSearch_div_search-results li { + padding-top: 15px; + padding-bottom: 15px; +} + +#aspect_artifactbrowser_SimpleSearch_div_search-results ul, #aspect_discovery_SimpleSearch_div_search-results ul, #aspect_artifactbrowser_AdvancedSearch_div_search-results ul { + margin-bottom: 25px; +} + +.artifact-title { + font-size: 123.1%; +} + +.result-query, +.artifact-info { + color: gray; +} + +.artifact-abstract { + text-align: justify; +} + +ul.alphabet { + list-style: none; + margin: 0; +} + +ul.alphabet li { + display:inline; +} + +#aspect_eperson_PasswordLogin_list_password-login .ds-form-item { + float: left; + margin: 0; + margin-right: 25px; +} + +#aspect_eperson_PasswordLogin_list_password-login .ds-form-item a { + margin-left: 20px; +} + +#aspect_eperson_PasswordLogin_list_password-login .ds-form-item.last { + clear: left; +} + + +#aspect_eperson_PasswordLogin_list_password-login .ds-form-item.last .ds-form-label{ + display: none; +} + +td select.ds-select-field { + margin-left: 5px; +} + +form.search, +div.discoverySearchBox +{ + background-color: #fafafa; + border: 1px solid #ebebeb; + padding: 10px; + margin-bottom: 15px; +} + +form.search label, +div.discoverySearchBox label +{ + font-weight: bold; +} + +form.search p.ds-paragraph.button-list, +div.discoverySearchBox p.ds-paragraph.button-list +{ + text-align: center; + margin: 0; +} + +form.search fieldset, +div.discoverySearchBox fieldset { + margin: 0; +} + +form.search .ds-form-item, +div.discoverySearchBox .ds-form-item +{ + margin: 0; + padding-bottom: 5px; +} + +form.search .ds-form-item select, +div.discoverySearchBox .ds-form-item select +{ + margin-top: 0; +} + +form.search label.ds-composite-component .ds-select-field, +div.discoverySearchBox label.ds-composite-component .ds-select-field +{ + margin-top: 6px; +} + +form.search .ds-form-item label, +div.discoverySearchBox .ds-form-item label +{ + font-size: 100%; +} + +form.search .ds-form-content, +div.discoverySearchBox .ds-form-content +{ + display: inline; +} + +form.search table input.ds-text-field, +div.discoverySearchBox table input.ds-text-field +{ + margin: 0; +} + +form.search .field-help, +div.discoverySearchBox .field-help +{ + margin: 3px 0; +} + +.collection .search, +.community .search { + margin-top: 25px; +} + +#aspect_discovery_CollectionSearch_p_search-query, +#aspect_discovery_CommunitySearch_p_search-query{ + margin-bottom:0; +} + +.result-query { + margin-bottom: 30px; +} + +#aspect_administrative_registries_EditMetadataSchema_table_metadata-schema-edit-existing-fields, +#aspect_administrative_registries_MetadataRegistryMain_table_metadata-registry-main-table, +#aspect_administrative_registries_FormatRegistryMain_table_bitstream-format-registry, +#aspect_submission_Submissions_table_unfinished-submissions, +#aspect_submission_Submissions_table_submissions-inprogress, +#aspect_submission_Submissions_table_completed-submissions, +table.detailtable { + margin-top: 10px; + margin-bottom: 10px; + border-collapse: collapse; +} + +#aspect_administrative_registries_EditMetadataSchema_table_metadata-schema-edit-existing-fields tr, +#aspect_administrative_registries_MetadataRegistryMain_table_metadata-registry-main-table tr, +#aspect_administrative_registries_FormatRegistryMain_table_bitstream-format-registry tr, +#aspect_submission_Submissions_table_unfinished-submissions tr, +#aspect_submission_Submissions_table_submissions-inprogress tr, +#aspect_submission_Submissions_table_completed-submissions tr, +table.detailtable tr { + line-height: 1.6em; + border: 1px solid #ebebeb; +} + +#aspect_administrative_registries_EditMetadataSchema_table_metadata-schema-edit-existing-fields tr.even, +#aspect_administrative_registries_MetadataRegistryMain_table_metadata-registry-main-table tr.even, +#aspect_administrative_registries_FormatRegistryMain_table_bitstream-format-registry tr.even, +#aspect_submission_Submissions_table_unfinished-submissions tr.even, +#aspect_submission_Submissions_table_submissions-inprogress tr.even, +#aspect_submission_Submissions_table_completed-submissions tr.even, +table.detailtable tr.even { + background-color: #fafafa; +} + +#aspect_administrative_registries_EditMetadataSchema_table_metadata-schema-edit-existing-fields td, +#aspect_administrative_registries_MetadataRegistryMain_table_metadata-registry-main-table td, +#aspect_administrative_registries_FormatRegistryMain_table_bitstream-format-registry td, +#aspect_submission_Submissions_table_unfinished-submissions td, +#aspect_submission_Submissions_table_submissions-inprogress td, +#aspect_submission_Submissions_table_completed-submissions td, +table.detailtable td { + padding: 5px 10px; + text-align: justify; + border: 1px solid #ebebeb; + vertical-align: top; +} + +#aspect_administrative_registries_EditMetadataSchema_table_metadata-schema-edit-existing-fields tr.ds-table-header-row, +#aspect_administrative_registries_MetadataRegistryMain_table_metadata-registry-main-table tr.ds-table-header-row, +#aspect_administrative_registries_FormatRegistryMain_table_bitstream-format-registry tr.ds-table-header-row, +#aspect_submission_Submissions_table_unfinished-submissions tr.ds-table-header-row, +#aspect_submission_Submissions_table_submissions-inprogress tr.ds-table-header-row, +#aspect_submission_Submissions_table_completed-submissions tr.ds-table-header-row { + border: none; +} + + +table.detailtable td.label-cell { + font-weight: bold; + text-align: left; + width: 100px; +} + +div.item-summary-view-metadata h1, +div.item-summary-view-metadata h2 { + line-height: normal; +} + +div.item-summary-view-metadata { + text-align: justify; + line-height: 161.6%; + margin-bottom: 30px; +} + +div.simple-item-view-authors { + font-size: 123.1%; + font-weight: bold; + border-bottom:1px solid #D8E8EB; + padding-bottom: 2px; + margin-bottom: 20px; + text-align: justify; +} + +div.simple-item-view-authors span{ + text-align: justify; +} + +#aspect_artifactbrowser_ItemViewer_div_item-view h2, +div.item-summary-view-metadata p.item-view-toggle-bottom, +div.simple-item-view-description { + margin-top: 20px; +} + +#aspect_artifactbrowser_ItemViewer_div_item-view h2, +div.simple-item-view-description h3{ + border-bottom:1px solid #D8E8EB; + margin-bottom: 3px; +} + +#aspect_artifactbrowser_ItemViewer_div_item-view h2 { + margin-bottom: 10px; +} + +div.spacer{ + height: 15px; +} + +.thumbnail-wrapper, +.file-metadata, +.file-link { + float: left; + margin-right: 15px; +} + +.item-metadata { + float: left; +} + +.file-metadata { + width: 300px; +} + +.file-metadata span, +.item-metadata span { + float: left; +} + +.item-metadata span.content span { + float: none; +} + +.file-metadata span.bold, +.item-metadata span.bold { + width: 80px; + clear: left; + text-align: right; + margin-right: 7px; +} + +#ds-system-wide-alert, +.notice { + padding: 10px; + margin: 10px 0; + border: 1px solid #bfc221; + background-color: #fffff2; +} + +.notice.success +{ + border-color: #21c221; + background-color: #f2fff2; +} + +#ds-system-wide-alert, +.notice.failure +{ + border-color: #c22121; + background-color: #fff2f2; +} + +#ds-system-wide-alert p { + margin: 0; +} + +#aspect_artifactbrowser_CommunityViewer_div_community-home h2, +#aspect_artifactbrowser_CollectionViewer_div_collection-home h2 { + margin-top: 30px; + border-bottom:1px solid #D8E8EB; + margin-bottom: 3px; +} + +.ds-logo-wrapper { + display: block; +} + +#aspect_administrative_item_FindItemForm_list_find-item-form .ds-form-item { + margin:0; +} + +#aspect_administrative_registries_EditMetadataSchema_div_edit-schema-new-field .ds-form-item.last { + margin-top: -25px; +} + +#no-js-warning { + margin-top: 15px; + margin-bottom: 10px; + text-align: center; +} + +form.discover-search-box{ + margin-bottom: 10px; +} + + +form.discover-sort-box select{ + margin: 0 4px; +} + +.hidden { + display:none; + visibility:hidden; +} + +.icon-button{ + padding:4px; + cursor: pointer; + margin: 2px; + background-color: #6D859C; + border: 1px solid #1F3F5E; + text-indent: -1000px; + width: 30px; + height: 30px; + display:block; + /*Required for IE*/ + font-size: 0; + line-height: 0; +} + +.icon-button.arrowUp{ + background-image: url(../../images/arrow_up_ffffff_16x16.png); + background-repeat: no-repeat; + background-position: center center; +} + +.icon-button.arrowDown{ + background-image: url(../../images/arrow_down_ffffff_16x16.png); + background-repeat: no-repeat; + background-position: center center; +} + +/* FOR CC License */ +span.floatleft { + border:none; + float:right; + display:inline; +} + +/* FOR CC PAGE to GROUP ITEMS horizontally */ +ul.horizontal li span.bold a { color: black; } + +/* group items horizontally in a list */ + +ul.horizontalVanilla +{ +font-weight: bold; +list-style-type: none; +padding: 0px; +padding-left: 0px; +padding-bottom: 15px; +border-left: 1px solid white; +border-right: 1px solid white; +margin: 10px -1px 5px -1px; +width: inherit; +} + +ul.horizontalVanilla li +{ +float: left; +height: 100%; +background-color: rgb(255, 255, 255); +margin: 2px 2px 0px 2px; +/* border: 1px solid rgb(240, 240, 210); */ +} + +/* Controlled vocabulary support css START*/ +ul.vocabulary { + margin-left: 0; +} + +ul.vocabulary, +ul.vocabulary ul, +ul.vocabulary li +{ + list-style: none; +} + +ul.vocabulary div.vocabulary-node-icon{ + cursor: pointer; + width: 15px; + height: 12px; + display: inline-block; +} + +ul.vocabulary div.vocabulary-node-icon.vocabulary-doc{ + background-image: url(../../images/controlledvocabulary/voc_doc_222222.png); +} + +ul.vocabulary div.vocabulary-node-icon.vocabulary-open{ + background-image: url(../../images/controlledvocabulary/voc_open_222222.png); +} + +ul.vocabulary div.vocabulary-node-icon.vocabulary-closed{ + background-image: url(../../images/controlledvocabulary/voc_closed_222222.png); + background-repeat: no-repeat; +} + +div.vocabulary-container li.error{ + color: #c22121; +} +/* Controlled vocabulary support css END*/ + +#aspect_administrative_authorization_EditPolicyForm_field_start_date{ + width: 100px; +} +#aspect_administrative_authorization_EditPolicyForm_field_end_date{ + width: 100px; +} +#aspect_administrative_authorization_EditItemPolicies_table_policies-confirm-delete tr, +#aspect_administrative_authorization_EditItemPolicies_table_policies-confirm-delete td +{ + border: 1px solid lightgray; +} + + +#aspect_administrative_authorization_AdvacedAuthorizationsForm_field_end_date{ + width: 100px; +} +#aspect_administrative_authorization_AdvacedAuthorizationsForm_field_start_date{ + width: 100px; +} +#aspect_submission_StepTransformer_field_embargo_until_date{ + width: 100px; +} + +#aspect_administrative_item_AddBitstreamForm_field_embargo_until_date{ + width: 100px; +} + +#aspect_administrative_item_EditBitstreamForm_field_embargo_until_date{ + width: 100px; +} + +#aspect_submission_StepTransformer_table_policies tr, +#aspect_submission_StepTransformer_table_policies td +{ + border: 1px solid lightgray; +} + +table.detailtable { + background-color: #D8E8EB; +} + +table.detailtable th{ + background-color: #F0F2F5; + word-wrap: normal; +} + +table.detailtable td{ + background-color: #FFFFFF; + text-align: right; +} + + +span.highlight{ + font-weight: bold; +} + +div.gear-icon{ + background-image: url('../../images/gear_6D859C_25x25.png'); +} + +ul.gear-selection li.gear-option-selected{ + background: url('../../images/check_606060_15x15.png') no-repeat 3px center; +} + +input#aspect_discovery_SimpleSearch_field_query{ + width: 565px; +} + +input.search-icon{ + background-image: url('../../images/search_icon_ffffff_20x20.png'); + background-repeat: no-repeat; + background-position: center center; + text-indent: -1000px; + /*Css props below are required for IE*/ + font-size: 0; + display:block; + line-height: 0; +} + +div#aspect_discovery_SimpleSearch_div_search p.pagination-info{ + display: none; +} + +div#aspect_discovery_SimpleSearch_div_search .pagination-links{ + float: left; +} + +table.discovery-filters{ + width: 100%; + background-color: #FFFFFF; +} + +table.discovery-filters tr{ + border-top: 1px solid #EBEBEB; +} +table.discovery-filters td{ + padding: 0; +} + +table.discovery-filters td.selection{ + width: 1%; +} + +table.discovery-filters th.new-filter-header{ + text-align: left; + padding-top: 20px; +} + + +table.discovery-filters td.discovery-filter-input-cell { + padding-left: 3px; +} + + +table.discovery-filters tr.apply-filter{ + background-color: #FAFAFA; +} + +table.discovery-filters tr.apply-filter input{ + width: 65px; + height: 25px; + margin-left: auto; + margin-right: auto; + font-size: 108%; + display: block; + margin-top: 10px; +} + + +table.discovery-filters td.filter-controls{ + width: 50px; +} + +table.discovery-filters input.filter-control { + margin-left: 5px; + text-indent: -1000px; + background-repeat: no-repeat; + background-position: center center; + height: 17px; + width: 17px; + float: left; + background-color: transparent; + border: none; + /*Css props below are required for IE*/ + font-size: 0; + display:block; + line-height: 0; +} + +table.discovery-filters input.filter-control.filter-remove{ + margin-left: 7px; + background-image: url('../../images/button_minus.png'); +} + +table.discovery-filters input.filter-control.filter-add{ + background-image: url('../../images/button_plus.png'); +} + +table.discovery-filters tr.search-filter.filler +{ + background-color: #FAFAFA; + height: 25px; +} + +table.discovery-filters th.new-filter-header +{ + padding-top: 5px; +} + + +.searchTime{ + color: #999999; +} + +.didYouMean{ + font-size: 18px; +} + +.didYouMean a{ + font-weight: bold; +} + +.recentSubmissionViewMore { + text-align: right; + font-size: 100%; +} diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/yui.LICENSE b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/yui.LICENSE new file mode 100644 index 0000000..7e24eda --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/css/yui.LICENSE @@ -0,0 +1,15 @@ +YUI Library is used under the terms of the BSD License +http://yuilibrary.com/license/ + +--- + +Copyright (c) 2010, Yahoo! Inc. +All rights reserved. + +Redistribution and use of this software in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +- Neither the name of Yahoo! Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission of Yahoo! Inc. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/DD_belatedPNG.LICENSE b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/DD_belatedPNG.LICENSE new file mode 100644 index 0000000..9a66484 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/DD_belatedPNG.LICENSE @@ -0,0 +1,24 @@ +DD_belatedPNG Javascript library is used under the terms of the MIT License +http://dillerdesign.com/experiment/DD_belatedPNG/#license + +-- + +Copyright (c) 2008 Drew Diller + +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. \ No newline at end of file diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/DD_belatedPNG_0.0.8a.js b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/DD_belatedPNG_0.0.8a.js new file mode 100644 index 0000000..31dd249 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/DD_belatedPNG_0.0.8a.js @@ -0,0 +1,329 @@ +/** +* DD_belatedPNG: Adds IE6 support: PNG images for CSS background-image and HTML <IMG/>. +* Author: Drew Diller +* Email: drew.diller@gmail.com +* URL: http://www.dillerdesign.com/experiment/DD_belatedPNG/ +* Version: 0.0.8a +* Licensed under the MIT License: http://dillerdesign.com/experiment/DD_belatedPNG/#license +* +* Example usage: +* DD_belatedPNG.fix('.png_bg'); // argument is a CSS selector +* DD_belatedPNG.fixPng( someNode ); // argument is an HTMLDomElement +**/ + +/* +PLEASE READ: +Absolutely everything in this script is SILLY. I know this. IE's rendering of certain pixels doesn't make sense, so neither does this code! +*/ + +var DD_belatedPNG = { + ns: 'DD_belatedPNG', + imgSize: {}, + delay: 10, + nodesFixed: 0, + createVmlNameSpace: function () { /* enable VML */ + if (document.namespaces && !document.namespaces[this.ns]) { + document.namespaces.add(this.ns, 'urn:schemas-microsoft-com:vml'); + } + }, + createVmlStyleSheet: function () { /* style VML, enable behaviors */ + /* + Just in case lots of other developers have added + lots of other stylesheets using document.createStyleSheet + and hit the 31-limit mark, let's not use that method! + further reading: http://msdn.microsoft.com/en-us/library/ms531194(VS.85).aspx + */ + var screenStyleSheet, printStyleSheet; + screenStyleSheet = document.createElement('style'); + screenStyleSheet.setAttribute('media', 'screen'); + document.documentElement.firstChild.insertBefore(screenStyleSheet, document.documentElement.firstChild.firstChild); + if (screenStyleSheet.styleSheet) { + screenStyleSheet = screenStyleSheet.styleSheet; + screenStyleSheet.addRule(this.ns + '\\:*', '{behavior:url(#default#VML)}'); + screenStyleSheet.addRule(this.ns + '\\:shape', 'position:absolute;'); + screenStyleSheet.addRule('img.' + this.ns + '_sizeFinder', 'behavior:none; border:none; position:absolute; z-index:-1; top:-10000px; visibility:hidden;'); /* large negative top value for avoiding vertical scrollbars for large images, suggested by James O'Brien, http://www.thanatopsic.org/hendrik/ */ + this.screenStyleSheet = screenStyleSheet; + + /* Add a print-media stylesheet, for preventing VML artifacts from showing up in print (including preview). */ + /* Thanks to R�mi Pr�vost for automating this! */ + printStyleSheet = document.createElement('style'); + printStyleSheet.setAttribute('media', 'print'); + document.documentElement.firstChild.insertBefore(printStyleSheet, document.documentElement.firstChild.firstChild); + printStyleSheet = printStyleSheet.styleSheet; + printStyleSheet.addRule(this.ns + '\\:*', '{display: none !important;}'); + printStyleSheet.addRule('img.' + this.ns + '_sizeFinder', '{display: none !important;}'); + } + }, + readPropertyChange: function () { + var el, display, v; + el = event.srcElement; + if (!el.vmlInitiated) { + return; + } + if (event.propertyName.search('background') != -1 || event.propertyName.search('border') != -1) { + DD_belatedPNG.applyVML(el); + } + if (event.propertyName == 'style.display') { + display = (el.currentStyle.display == 'none') ? 'none' : 'block'; + for (v in el.vml) { + if (el.vml.hasOwnProperty(v)) { + el.vml[v].shape.style.display = display; + } + } + } + if (event.propertyName.search('filter') != -1) { + DD_belatedPNG.vmlOpacity(el); + } + }, + vmlOpacity: function (el) { + if (el.currentStyle.filter.search('lpha') != -1) { + var trans = el.currentStyle.filter; + trans = parseInt(trans.substring(trans.lastIndexOf('=')+1, trans.lastIndexOf(')')), 10)/100; + el.vml.color.shape.style.filter = el.currentStyle.filter; /* complete guesswork */ + el.vml.image.fill.opacity = trans; /* complete guesswork */ + } + }, + handlePseudoHover: function (el) { + setTimeout(function () { /* wouldn't work as intended without setTimeout */ + DD_belatedPNG.applyVML(el); + }, 1); + }, + /** + * This is the method to use in a document. + * @param {String} selector - REQUIRED - a CSS selector, such as '#doc .container' + **/ + fix: function (selector) { + if (this.screenStyleSheet) { + var selectors, i; + selectors = selector.split(','); /* multiple selectors supported, no need for multiple calls to this anymore */ + for (i=0; i<selectors.length; i++) { + this.screenStyleSheet.addRule(selectors[i], 'behavior:expression(DD_belatedPNG.fixPng(this))'); /* seems to execute the function without adding it to the stylesheet - interesting... */ + } + } + }, + applyVML: function (el) { + el.runtimeStyle.cssText = ''; + this.vmlFill(el); + this.vmlOffsets(el); + this.vmlOpacity(el); + if (el.isImg) { + this.copyImageBorders(el); + } + }, + attachHandlers: function (el) { + var self, handlers, handler, moreForAs, a, h; + self = this; + handlers = {resize: 'vmlOffsets', move: 'vmlOffsets'}; + if (el.nodeName == 'A') { + moreForAs = {mouseleave: 'handlePseudoHover', mouseenter: 'handlePseudoHover', focus: 'handlePseudoHover', blur: 'handlePseudoHover'}; + for (a in moreForAs) { + if (moreForAs.hasOwnProperty(a)) { + handlers[a] = moreForAs[a]; + } + } + } + for (h in handlers) { + if (handlers.hasOwnProperty(h)) { + handler = function () { + self[handlers[h]](el); + }; + el.attachEvent('on' + h, handler); + } + } + el.attachEvent('onpropertychange', this.readPropertyChange); + }, + giveLayout: function (el) { + el.style.zoom = 1; + if (el.currentStyle.position == 'static') { + el.style.position = 'relative'; + } + }, + copyImageBorders: function (el) { + var styles, s; + styles = {'borderStyle':true, 'borderWidth':true, 'borderColor':true}; + for (s in styles) { + if (styles.hasOwnProperty(s)) { + el.vml.color.shape.style[s] = el.currentStyle[s]; + } + } + }, + vmlFill: function (el) { + if (!el.currentStyle) { + return; + } else { + var elStyle, noImg, lib, v, img, imgLoaded; + elStyle = el.currentStyle; + } + for (v in el.vml) { + if (el.vml.hasOwnProperty(v)) { + el.vml[v].shape.style.zIndex = elStyle.zIndex; + } + } + el.runtimeStyle.backgroundColor = ''; + el.runtimeStyle.backgroundImage = ''; + noImg = true; + if (elStyle.backgroundImage != 'none' || el.isImg) { + if (!el.isImg) { + el.vmlBg = elStyle.backgroundImage; + el.vmlBg = el.vmlBg.substr(5, el.vmlBg.lastIndexOf('")')-5); + } + else { + el.vmlBg = el.src; + } + lib = this; + if (!lib.imgSize[el.vmlBg]) { /* determine size of loaded image */ + img = document.createElement('img'); + lib.imgSize[el.vmlBg] = img; + img.className = lib.ns + '_sizeFinder'; + img.runtimeStyle.cssText = 'behavior:none; position:absolute; left:-10000px; top:-10000px; border:none; margin:0; padding:0;'; /* make sure to set behavior to none to prevent accidental matching of the helper elements! */ + imgLoaded = function () { + this.width = this.offsetWidth; /* weird cache-busting requirement! */ + this.height = this.offsetHeight; + lib.vmlOffsets(el); + }; + img.attachEvent('onload', imgLoaded); + img.src = el.vmlBg; + img.removeAttribute('width'); + img.removeAttribute('height'); + document.body.insertBefore(img, document.body.firstChild); + } + el.vml.image.fill.src = el.vmlBg; + noImg = false; + } + el.vml.image.fill.on = !noImg; + el.vml.image.fill.color = 'none'; + el.vml.color.shape.style.backgroundColor = elStyle.backgroundColor; + el.runtimeStyle.backgroundImage = 'none'; + el.runtimeStyle.backgroundColor = 'transparent'; + }, + /* IE can't figure out what do when the offsetLeft and the clientLeft add up to 1, and the VML ends up getting fuzzy... so we have to push/enlarge things by 1 pixel and then clip off the excess */ + vmlOffsets: function (el) { + var thisStyle, size, fudge, makeVisible, bg, bgR, dC, altC, b, c, v; + thisStyle = el.currentStyle; + size = {'W':el.clientWidth+1, 'H':el.clientHeight+1, 'w':this.imgSize[el.vmlBg].width, 'h':this.imgSize[el.vmlBg].height, 'L':el.offsetLeft, 'T':el.offsetTop, 'bLW':el.clientLeft, 'bTW':el.clientTop}; + fudge = (size.L + size.bLW == 1) ? 1 : 0; + /* vml shape, left, top, width, height, origin */ + makeVisible = function (vml, l, t, w, h, o) { + vml.coordsize = w+','+h; + vml.coordorigin = o+','+o; + vml.path = 'm0,0l'+w+',0l'+w+','+h+'l0,'+h+' xe'; + vml.style.width = w + 'px'; + vml.style.height = h + 'px'; + vml.style.left = l + 'px'; + vml.style.top = t + 'px'; + }; + makeVisible(el.vml.color.shape, (size.L + (el.isImg ? 0 : size.bLW)), (size.T + (el.isImg ? 0 : size.bTW)), (size.W-1), (size.H-1), 0); + makeVisible(el.vml.image.shape, (size.L + size.bLW), (size.T + size.bTW), (size.W), (size.H), 1 ); + bg = {'X':0, 'Y':0}; + if (el.isImg) { + bg.X = parseInt(thisStyle.paddingLeft, 10) + 1; + bg.Y = parseInt(thisStyle.paddingTop, 10) + 1; + } + else { + for (b in bg) { + if (bg.hasOwnProperty(b)) { + this.figurePercentage(bg, size, b, thisStyle['backgroundPosition'+b]); + } + } + } + el.vml.image.fill.position = (bg.X/size.W) + ',' + (bg.Y/size.H); + bgR = thisStyle.backgroundRepeat; + dC = {'T':1, 'R':size.W+fudge, 'B':size.H, 'L':1+fudge}; /* these are defaults for repeat of any kind */ + altC = { 'X': {'b1': 'L', 'b2': 'R', 'd': 'W'}, 'Y': {'b1': 'T', 'b2': 'B', 'd': 'H'} }; + if (bgR != 'repeat' || el.isImg) { + c = {'T':(bg.Y), 'R':(bg.X+size.w), 'B':(bg.Y+size.h), 'L':(bg.X)}; /* these are defaults for no-repeat - clips down to the image location */ + if (bgR.search('repeat-') != -1) { /* now let's revert to dC for repeat-x or repeat-y */ + v = bgR.split('repeat-')[1].toUpperCase(); + c[altC[v].b1] = 1; + c[altC[v].b2] = size[altC[v].d]; + } + if (c.B > size.H) { + c.B = size.H; + } + el.vml.image.shape.style.clip = 'rect('+c.T+'px '+(c.R+fudge)+'px '+c.B+'px '+(c.L+fudge)+'px)'; + } + else { + el.vml.image.shape.style.clip = 'rect('+dC.T+'px '+dC.R+'px '+dC.B+'px '+dC.L+'px)'; + } + }, + figurePercentage: function (bg, size, axis, position) { + var horizontal, fraction; + fraction = true; + horizontal = (axis == 'X'); + switch(position) { + case 'left': + case 'top': + bg[axis] = 0; + break; + case 'center': + bg[axis] = 0.5; + break; + case 'right': + case 'bottom': + bg[axis] = 1; + break; + default: + if (position.search('%') != -1) { + bg[axis] = parseInt(position, 10) / 100; + } + else { + fraction = false; + } + } + bg[axis] = Math.ceil( fraction ? ( (size[horizontal?'W': 'H'] * bg[axis]) - (size[horizontal?'w': 'h'] * bg[axis]) ) : parseInt(position, 10) ); + if (bg[axis] % 2 === 0) { + bg[axis]++; + } + return bg[axis]; + }, + fixPng: function (el) { + el.style.behavior = 'none'; + var lib, els, nodeStr, v, e; + if (el.nodeName == 'BODY' || el.nodeName == 'TD' || el.nodeName == 'TR') { /* elements not supported yet */ + return; + } + el.isImg = false; + if (el.nodeName == 'IMG') { + if(el.src.toLowerCase().search(/\.png(\?\d+)?$/) != -1) { + el.isImg = true; + el.style.visibility = 'hidden'; + } + else { + return; + } + } + else if (el.currentStyle.backgroundImage.toLowerCase().search('.png') == -1) { + return; + } + lib = DD_belatedPNG; + el.vml = {color: {}, image: {}}; + els = {shape: {}, fill: {}}; + for (v in el.vml) { + if (el.vml.hasOwnProperty(v)) { + for (e in els) { + if (els.hasOwnProperty(e)) { + nodeStr = lib.ns + ':' + e; + el.vml[v][e] = document.createElement(nodeStr); + } + } + el.vml[v].shape.stroked = false; + el.vml[v].shape.appendChild(el.vml[v].fill); + el.parentNode.insertBefore(el.vml[v].shape, el); + } + } + el.vml.image.shape.fillcolor = 'none'; /* Don't show blank white shapeangle when waiting for image to load. */ + /* If the height and width attributes are set, then scale to size, if not, display as per usual */ + if (el.height && el.width){el.vml.image.fill.type = 'frame';} else {el.vml.image.fill.type = 'tile';} + el.vml.color.fill.on = false; /* Actually going to apply vml element's style.backgroundColor, so hide the whiteness. */ + lib.attachHandlers(el); + lib.giveLayout(el); + lib.giveLayout(el.offsetParent); + el.vmlInitiated = true; + lib.applyVML(el); /* Render! */ + } +}; +try { + document.execCommand("BackgroundImageCache", false, true); /* TredoSoft Multiple IE doesn't like this, so try{} it */ +} catch(r) {} +DD_belatedPNG.createVmlNameSpace(); +DD_belatedPNG.createVmlStyleSheet(); \ No newline at end of file diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/choice-support.js b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/choice-support.js new file mode 100644 index 0000000..dae4db5 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/choice-support.js @@ -0,0 +1,562 @@ +/* + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +// Client-side scripting to support DSpace Choice Control + +// IMPORTANT NOTE: +// This version of choice-support.js has been rewritten to use jQuery +// instead of prototype & scriptaculous. The goal was not to change the +// way it works in any way, just to get the prototype dependency out. +// @Author Art Lowel (art.lowel at atmire.com) + +// Entry points: +// 1. DSpaceAutocomplete -- add autocomplete (suggest) to an input field +// +// 2. DSpaceChoiceLookup -- create popup window with authority choices +// +// @Author: Larry Stone <lcs@hulmail.harvard.edu> +// $Revision $ + +// -------------------- support for Autocomplete (Suggest) + +// Autocomplete utility: +// Arguments: +// formID -- ID attribute of form tag +// args properties: +// metadataField -- metadata field e.g. dc_contributor_author +// inputName -- input field name for text input, or base of "Name" pair +// authorityName -- input field name in which to set authority +// containerID -- ID attribute of DIV to hold the menu objects +// indicatorID -- ID attribute of element to use as a "loading" indicator +// confidenceIndicatorID -- ID of element on which to set confidence +// confidenceName - NAME of confidence input (not ID) +// contextPath -- URL path prefix (i.e. webapp contextPath) for DSpace. +// collection -- db ID of dspace collection to serve as context +// isClosed -- true if authority value is required, false = non-auth allowed +// XXX Can't really enforce "isClosed=true" with autocomplete, user can type anything +// +// NOTE: Successful autocomplete always sets confidence to 'accepted' since +// authority value (if any) *was* chosen interactively by a human. +function DSpaceSetupAutocomplete(formID, args) { + + $(function() { + if (args.authorityName == null) + args.authorityName = dspace_makeFieldInput(args.inputName, '_authority'); + var form = $('#' + formID)[0]; + var inputID = form.elements[args.inputName].id; + + var authorityID = null; + if (form.elements[args.authorityName] != null) + authorityID = form.elements[args.authorityName].id; + + // AJAX menu source, can add &query=TEXT + var choiceURL = args.contextPath + "/choices/" + args.metadataField; + var collID = args.collection == null ? -1 : args.collection; + choiceURL += '?collection=' + collID; + + var ac = $('#' + inputID); + ac.autocomplete({ + source: function(request, response) { + var reqUrl = choiceURL; + if(request && request.term) { + reqUrl += "&query=" + request.term; + } + $.get(reqUrl, function(xmldata) { + var options = []; + var authorities = []; + $(xmldata).find('Choice').each(function() { + // get value + var value = $(this).attr('value') ? $(this).attr('value') : null; + // get label, if empty set it to value + var label = $(this).text() ? $(this).text() : value; + // if value was empty but label was provided, set value to label + if(!value) { + value = label; + } + // if at this point either value or label == null, this means none of both were set and we shouldn't add it to the list of options + if (label != null) { + options.push({ + label: label, + value: value + }); + authorities['label: ' + label + ', value: ' + value] = $(this).attr('authority') ? $(this).attr('authority') : value; + } + }); + ac.data('authorities',authorities); + response(options); + }); + }, + select: function(event, ui) { + // NOTE: lookup element late because it might not be in DOM + // at the time we evaluate the function.. +// var authInput = document.getElementById(authorityID); +// var authValue = li == null ? "" : li.getAttribute("authority"); + var authInput = $('#' + authorityID); + if(authInput.length > 0) { + authInput = authInput[0]; + } + else { + authInput = null; + } + var authorities = ac.data('authorities'); + var authValue = authorities['label: ' + ui.item.label + ', value: ' + ui.item.value]; + if (authInput != null) { + authInput.value = authValue; + // update confidence input's value too if available. + if (args.confidenceName != null) { + var confInput = authInput.form.elements[args.confidenceName]; + if (confInput != null) + confInput.value = 'accepted'; + } + } + // make indicator blank if no authority value + DSpaceUpdateConfidence(document, args.confidenceIndicatorID, + authValue == null || authValue == '' ? 'blank' : 'accepted'); + } + }); + }); +} + +// -------------------- support for Lookup Popup + +// Create popup window with authority choices for value of an input field. +// This is intended to be called by onClick of a "Lookup" or "Add" button. +function DSpaceChoiceLookup(url, field, formID, valueInput, authInput, + confIndicatorID, collectionID, isName, isRepeating) { + // fill in parameters for URL of popup window + url += '?field=' + field + '&formID=' + formID + '&valueInput=' + valueInput + + '&authorityInput=' + authInput + '&collection=' + collectionID + + '&isName=' + isName + '&isRepeating=' + isRepeating + '&confIndicatorID=' + confIndicatorID + + '&limit=50'; //limit to 50 results at once (make configurable?) + + // primary input field - for positioning popup. + var inputFieldName = isName ? dspace_makeFieldInput(valueInput, '_last') : valueInput; + var inputField = $('input[name = ' + inputFieldName + ']'); + // sometimes a textarea is used, in which case the previous jQuery search delivered no results... + if(inputField.length == 0) { + // so search for a textarea + inputField = $('textarea[name = ' + inputFieldName + ']'); + } + var cOffset = 0; + if (inputField != null) + cOffset = inputField.offset(); + var width = 600; // XXX guesses! these should be params, or configured.. + var height = 470; + var left; + var top; + if (window.screenX == null) { + left = window.screenLeft + cOffset.left - (width / 2); + top = window.screenTop + cOffset.top - (height / 2); + } else { + left = window.screenX + cOffset.left - (width / 2); + top = window.screenY + cOffset.top - (height / 2); + } + if (left < 0) left = 0; + if (top < 0) top = 0; + var pw = window.open(url, 'ignoreme', + 'width=' + width + ',height=' + height + ',left=' + left + ',top=' + top + + ',toolbar=no,menubar=no,location=no,status=no,resizable'); + if (window.focus) pw.focus(); + return false; +} + +// Run this as the Lookup page is loaded to initialize DOM objects, load choices +function DSpaceChoicesSetup(form) { + // find the "LEGEND" in fieldset, which acts as page title, + var legend = $('#aspect_general_ChoiceLookupTransformer_list_choicesList :header:first'); + //save the template as a jQuery data field + legend.data('template', legend.html()); + legend.html("Loading..."); + DSpaceChoicesLoad(form); +} + + +// Populate the "select" (in popup window) with options from ajax request +// stash some parameters as properties of the "select" so we can add to +// the last start index to query for next set of results. +function DSpaceChoicesLoad(form) { + var field = $('*[name = paramField]').val(); + var value = $('*[name = paramValue]').val(); + if (!value) + value = ''; + var start = $('*[name = paramStart]').val(); + var limit = $('*[name = paramLimit]').val(); + var formID = $('*[name = paramFormID]').val(); + var collID = $('*[name = paramCollection]').val(); + var isName = $('*[name = paramIsName]').val() == 'true'; + var isRepeating = $('*[name = paramIsRepeating]').val() == 'true'; + var isClosed = $('*[name = paramIsClosed]').val() == 'true'; + var contextPath = $('*[name = contextPath]').val(); + var fail = $('*[name = paramFail]').val(); + var valueInput = $('*[name = paramValueInput]').val(); + var nonAuthority = ""; + var pNAInput = $('*[name = paramNonAuthority]'); + if (pNAInput.length > 0) + nonAuthority = pNAInput.val(); + + // get value from form inputs in opener if not explicitly supplied + if (value.length == 0) { + // This bit of javascript is accessing the form that opened the popup window, + // so that we can grab the value the user entered before pressing the "Lookup & Add" button + var of = $(window.opener.document).find('#' + formID); + if (isName) + value = makePersonName(of.find('*[name = ' + dspace_makeFieldInput(valueInput, '_last') + ']').val(), + of.find('*[name = ' + dspace_makeFieldInput(valueInput, '_first') + ']').val()); + else + value = of.find('*[name = ' + valueInput + ']').val(); + + // if this is a repeating input, clear the source value so that e.g. + // clicking "Next" on a submit-describe page will not *add* the proposed + // lookup text as a metadata value: + if (isRepeating) { + if (isName) { + of.find('*[name = ' + dspace_makeFieldInput(valueInput, '_last') + ']').val(''); + of.find('*[name = ' + dspace_makeFieldInput(valueInput, '_first') + ']').val(''); + } + else + of.find('*[name = ' + valueInput + ']').val(null); + } + + // Save passed-in value to hidden 'paramValue' field in the popup window + // (This will allow the user to get "more results" for the same query, + // if results are on more than one page.) + $('*[name = paramValue]').val(value); + } + + // start spinner + var indicator = $('#lookup_indicator_id'); + indicator.show('fast'); + + $(window).ajaxError(function(e, xhr, settings, exception) { + window.alert(fail + " Exception=" + e); + if (indicator != null) indicator.style.display = "none"; + }); + + // AJAX to send off the query to the "/choices" URL, and + // then parse the response based on whether it was successful or error occurred + // NOTE: you can send this same query manually to see result sample. + // Just enter the URL & pass all data values on query string. + $.ajax({ + url: contextPath + "/choices/" + field, + type: "GET", + data: {query: value, collection: collID, + start: start, limit: limit}, + error: function() { + window.alert(fail + " HTTP error resonse"); + if (indicator != null) indicator.style.display = "none"; + }, + success: function(data) { + var Choices = $(data).find('Choices'); + var err = Choices.attr('error'); + if (err != null && err == 'true') + window.alert(fail + " Server indicates error in response."); + var opts = Choices.find('Choice'); + + // update range message and update 'more' button + var oldStart = 1 * Choices.attr('start'); + var nextStart = oldStart + opts.length; + var lastTotal = Choices.attr('total'); + var resultMore = Choices.attr('more'); + //if no more results to display, then disable the "more" button + if(resultMore==null || resultMore == 'false') + $('*[name = more]').attr('disabled', 'true'); + else //otherwise, enable the "more" button + $('*[name = more]').removeAttr('disabled'); + // save next starting index to hidden field + $('*[name = paramStart]').val(nextStart); + + // clear select first + var select = $('select[name = chooser]:first'); + select.find('option:not(:last)').remove(); + var lastOption = select.find('option:last'); + + var selectedByValue = -1; // select by value match + var selectedByChoices = -1; // Choice says its selected + $.each(opts, function(index) { +// debugger; + var current = $(this); + if (current.attr('value') == value) + selectedByValue = index; + if(current.attr('selected') != undefined) + selectedByChoices = index; + + var newOption = $('<option value="' + current.attr('value') + '">' + current.text() + '</option>'); + newOption.data('authority', current.attr('authority')); + + if (lastOption.length > 0) + lastOption.insertBefore(newOption); + else + select.append(newOption); + }); + + + // add non-authority option if needed. + if (!isClosed) { + select.append(new Option(dspace_formatMessage(nonAuthority, value), value), null); + } + var defaultSelected = -1; + if (selectedByChoices >= 0) + defaultSelected = selectedByChoices; + else if (selectedByValue >= 0) + defaultSelected = selectedByValue; + else if (select[0].options.length == 1) + defaultSelected = 0; + + // load default-selected value + if (defaultSelected >= 0) { + select[0].options[defaultSelected].defaultSelected = true; + var so = select[0].options[defaultSelected]; + if (isName) { + $('*[name = text1]').val(lastNameOf(so.value)); + $('*[name = text2]').val(firstNameOf(so.value)); + } + else + $('*[name = text1]').val(so.value); + } + + // turn off spinner + indicator.hide('fast'); + + //If no results, make sure to display "0 to 0 of 0" + var startNum = (nextStart==0 ? 0 : oldStart+1); + //Fill out the counter values in the "Results x to y of z" line + var legend = $('#aspect_general_ChoiceLookupTransformer_list_choicesList :header:first'); + legend.html(dspace_formatMessage(legend.data('template'), + startNum, nextStart, lastTotal, value)); + } + }); +} + +// handler for change event on choice selector - load new values +function DSpaceChoicesSelectOnChange() { + // "this" is the window, + + var form = $('#aspect_general_ChoiceLookupTransformer_div_lookup'); + var select = form.find('*[name = chooser]'); + + var isName = form.find('*[name = paramIsName]').val() == 'true'; + + var selectedValue = select.val(); + + if (isName) { + form.find('*[name = text1]').val(lastNameOf(selectedValue)); + form.find('*[name = text2]').val(firstNameOf(selectedValue)); + } + else + form.find('*[name = text1]').val(selectedValue); +} + +// handler for lookup popup's accept (or add) button +// stuff values back to calling page, force an add if necessary, and close. +function DSpaceChoicesAcceptOnClick() { + var select = $('*[name = chooser]'); + var isName = $('*[name = paramIsName]').val() == 'true'; + var isRepeating = $('*[name = paramIsRepeating]').val() == 'true'; + var valueInput = $('*[name = paramValueInput]').val(); + var authorityInput = $('*[name = paramAuthorityInput]').val(); + var formID = $('*[name = paramFormID]').val(); + var confIndicatorID = $('*[name = paramConfIndicatorID]').length = 0 ? null : $('*[name = paramConfIndicatorID]').val(); + + // default the authority input if not supplied. + if (authorityInput.length == 0) + authorityInput = dspace_makeFieldInput(valueInput, '_authority'); + + // always stuff text fields back into caller's value input(s) + if (valueInput.length > 0) { + var of = $(window.opener.document).find('#' + formID); + if (isName) { + of.find('*[name = ' + dspace_makeFieldInput(valueInput, '_last') + ']').val($('*[name = text1]').val()); + of.find('*[name = ' + dspace_makeFieldInput(valueInput, '_first') + ']').val($('*[name = text2]').val()); + } + else + of.find('*[name = ' + valueInput + ']').val($('*[name = text1]').val()); + + if (authorityInput.length > 0 && of.find('*[name = ' + authorityInput + ']').length > 0) { + // conf input is auth input, substitute '_confidence' for '_authority' + // if conf fieldname is FIELD_confidence_NUMBER, then '_authority_' => '_confidence_' + var confInput = ""; + + var ci = authorityInput.lastIndexOf("_authority_"); + if (ci < 0) + confInput = authorityInput.substring(0, authorityInput.length - 10) + '_confidence'; + else + confInput = authorityInput.substring(0, ci) + "_confidence_" + authorityInput.substring(ci + 11); + // DEBUG: + // window.alert('Setting fields auth="'+authorityInput+'", conf="'+confInput+'"'); + + var authValue = null; + var selectedOption = select.find(':selected'); + if (selectedOption.length >= 0 && selectedOption.data('authority') != null) { + of.find('*[name = ' + authorityInput + ']').val(selectedOption.data('authority')); + } + of.find('*[name = ' + confInput + ']').val('accepted'); + // make indicator blank if no authority value + DSpaceUpdateConfidence(window.opener.document, confIndicatorID, + authValue == null || authValue == '' ? 'blank' : 'accepted'); + } + + // force the submit button -- if there is an "add" + if (isRepeating) { + var add = of.find('*[name = submit_' + valueInput + '_add]'); + if (add.length > 0) + add.click(); + else + alert('Sanity check: Cannot find button named "submit_' + valueInput + '_add"'); + } + } + window.close(); + return false; +} + +// handler for lookup popup's more button +function DSpaceChoicesMoreOnClick() { + //reload the window -- this should return the next results set + location.reload(); +} + +// handler for lookup popup's cancel button +function DSpaceChoicesCancelOnClick() { + window.close(); + return false; +} + +// -------------------- Utilities + +// DSpace person-name conventions, see DCPersonName +function makePersonName(lastName, firstName) { + return (firstName == null || firstName.length == 0) ? lastName : + lastName + ", " + firstName; +} + +// DSpace person-name conventions, see DCPersonName +function firstNameOf(personName) { + var comma = personName.indexOf(","); + return (comma < 0) ? "" : stringTrim(personName.substring(comma + 1)); +} + +// DSpace person-name conventions, see DCPersonName +function lastNameOf(personName) { + var comma = personName.indexOf(","); + return stringTrim((comma < 0) ? personName : personName.substring(0, comma)); +} + +// replicate java String.trim() +function stringTrim(str) { + var start = 0; + var end = str.length; + for (; str.charAt(start) == ' ' && start < end; ++start) ; + for (; end > start && str.charAt(end - 1) == ' '; --end) ; + return str.slice(start, end); +} + +// format utility - replace @1@, @2@ etc with args 1, 2, 3.. +// NOTE params MUST be monotonically increasing +// NOTE we can't use "{1}" like the i18n catalog because it elides them!! +// ...UNLESS maybe it were to be fixed not to when no params... +function dspace_formatMessage() { + var template = dspace_formatMessage.arguments[0]; + var i; + for (i = 1; i < arguments.length; ++i) { + var pattern = '@' + i + '@'; + if (template.search(pattern) >= 0) + { + var value = dspace_formatMessage.arguments[i]; + if (value == undefined) + value = ''; + template = template.replace(pattern, value); + } + } + return template; +} + +// utility to make sub-field name of input field, e.g. _last, _first, _auth.. +// if name ends with _1, _2 etc, put sub-name BEFORE the number +function dspace_makeFieldInput(name, sub) { + var i = name.search("_[0-9]+$"); + if (i < 0) + return name + sub; + else + return name.substr(0, i) + sub + name.substr(i); +} + +// update the class value of confidence-indicating element +function DSpaceUpdateConfidence(doc, confIndicatorID, newValue) { + // sanity checks - need valid ID and a real DOM object + if (confIndicatorID == null || confIndicatorID == "") + return; + var confElt = doc.getElementById(confIndicatorID); + if (confElt == null) + return; + + // add or update CSS class with new confidence value, e.g. "cf-accepted". + if (confElt.className == null) + confElt.className = "cf-" + newValue; + else { + var classes = confElt.className.split(" "); + var newClasses = ""; + var found = false; + for (var i = 0; i < classes.length; ++i) { + if (classes[i].match('^cf-[a-zA-Z0-9]+$')) { + newClasses += "cf-" + newValue + " "; + found = true; + } + else + newClasses += classes[i] + " "; + } + if (!found) + newClasses += "cf-" + newValue + " "; + confElt.className = newClasses; + } +} + +// respond to "onchanged" event on authority input field +// set confidence to 'accepted' if authority was changed by user. +function DSpaceAuthorityOnChange(self, confValueID, confIndicatorID) { + var confidence = 'accepted'; + if (confValueID != null && confValueID != '') { + var confValueField = document.getElementById(confValueID); + if (confValueField != null) + confValueField.value = confidence; + } + DSpaceUpdateConfidence(document, confIndicatorID, confidence); + return false; +} + +// respond to click on the authority-value lock button in Edit Item Metadata: +// "button" is bound to the image input for the lock button, "this" +function DSpaceToggleAuthorityLock(button, authInputID) { + // sanity checks - need valid ID and a real DOM object + if (authInputID == null || authInputID == '') + return false; + var authInput = document.getElementById(authInputID); + if (authInput == null) + return false; + + // look for is-locked or is-unlocked in class list: + var classes = button.className.split(' '); + var newClass = ''; + var newLocked = false; + var found = false; + for (var i = 0; i < classes.length; ++i) { + if (classes[i] == 'is-locked') { + newLocked = false; + found = true; + } + else if (classes[i] == 'is-unlocked') { + newLocked = true; + found = true; + } + else + newClass += classes[i] + ' '; + } + if (!found) + return false; + // toggle the image, and set readability + button.className = newClass + (newLocked ? 'is-locked' : 'is-unlocked') + ' '; + authInput.readOnly = newLocked; + return false; +} diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/jquery-ui-1.8.15.custom.min.js b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/jquery-ui-1.8.15.custom.min.js new file mode 100644 index 0000000..fbcceae --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/jquery-ui-1.8.15.custom.min.js @@ -0,0 +1,790 @@ +/*! + * jQuery UI 1.8.15 + * + * 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 + */ +(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.15", +keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,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,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({propAttr:c.fn.prop||c.fn.attr,_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d= +this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this, +"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart": +"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight, +outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a, +"tabindex"),d=isNaN(b);return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{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;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&& +c.ui.isOverAxis(b,e,i)}})}})(jQuery); +;/*! + * jQuery UI Widget 1.8.15 + * + * 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/Widget + */ +(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)b(d).triggerHandler("remove");k(a)}}else{var l=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 l.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(true,{},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.charAt(0)==="_")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!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():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){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options, +this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_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;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_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 Mouse 1.8.15 + * + * 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/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function(b){b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(c){return a._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(true===b.data(c.target,a.widgetName+".preventClickEvent")){b.removeData(c.target,a.widgetName+".preventClickEvent");c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(a){a.originalEvent= +a.originalEvent||{};if(!a.originalEvent.mouseHandled){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var c=this,e=a.which==1,f=typeof this.options.cancel=="string"?b(a.target).closest(this.options.cancel).length:false;if(!e||f||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=this._mouseStart(a)!== +false;if(!this._mouseStarted){a.preventDefault();return true}}true===b.data(a.target,this.widgetName+".preventClickEvent")&&b.removeData(a.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(d){return c._mouseMove(d)};this._mouseUpDelegate=function(d){return c._mouseUp(d)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return a.originalEvent.mouseHandled=true}},_mouseMove:function(a){if(b.browser.msie&& +!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted= +false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery); +;/* + * jQuery UI Position 1.8.15 + * + * 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/Position + */ +(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY, +left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+= +k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-= +m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left= +d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+= +a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b), +g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery); +;/* + * jQuery UI Draggable 1.8.15 + * + * 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/Draggables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(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(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b= +this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});return true},_mouseStart:function(a){var b=this.options;this.helper= +this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.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};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}); +this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);d.ui.ddmanager&&d.ui.ddmanager.dragStart(this,a);return true}, +_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.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";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b= +false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration, +10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},_mouseUp:function(a){this.options.iframeFix===true&&d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});d.ui.ddmanager&&d.ui.ddmanager.dragStop(this,a);return d.ui.mouse.prototype._mouseUp.call(this,a)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle|| +!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone().removeAttr("id"):this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&& +a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent= +this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"), +10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else 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 a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[a.containment=="document"?0:d(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,a.containment=="document"?0:d(window).scrollTop()-this.offset.relative.top-this.offset.parent.top, +(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){a=d(a.containment);var b=a[0];if(b){a.offset();var c=d(b).css("overflow")!= +"hidden";this.containment=[(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"), +10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=a}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+ +this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&& +!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,h=a.pageY;if(this.originalPosition){var g;if(this.containment){if(this.relative_container){g=this.relative_container.offset();g=[this.containment[0]+g.left,this.containment[1]+g.top,this.containment[2]+g.left,this.containment[3]+g.top]}else g=this.containment;if(a.pageX-this.offset.click.left<g[0])e=g[0]+this.offset.click.left; +if(a.pageY-this.offset.click.top<g[1])h=g[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>g[2])e=g[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>g[3])h=g[3]+this.offset.click.top}if(b.grid){h=b.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/b.grid[1])*b.grid[1]:this.originalPageY;h=g?!(h-this.offset.click.top<g[1]||h-this.offset.click.top>g[3])?h:!(h-this.offset.click.top<g[1])?h-b.grid[1]:h+b.grid[1]:h;e=b.grid[0]?this.originalPageX+Math.round((e-this.originalPageX)/ +b.grid[0])*b.grid[0]:this.originalPageX;e=g?!(e-this.offset.click.left<g[0]||e-this.offset.click.left>g[2])?e:!(e-this.offset.click.left<g[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version< +526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.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=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b, +c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.15"});d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var h=d.data(this,"sortable");if(h&&!h.options.disabled){c.sortables.push({instance:h,shouldRevert:h.options.revert}); +h.refreshPositions();h._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval= +false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=d(f).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true); +this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top; +c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&& +this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity= +a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!= +"x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-b.overflowOffset.left< +c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()- +c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,a)}});d.ui.plugin.add("draggable","snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this, +width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,h=b.offset.left,g=h+c.helperProportions.width,n=b.offset.top,o=n+c.helperProportions.height,i=c.snapElements.length-1;i>=0;i--){var j=c.snapElements[i].left,l=j+c.snapElements[i].width,k=c.snapElements[i].top,m=k+c.snapElements[i].height;if(j-e<h&&h<l+e&&k-e<n&&n<m+e||j-e<h&&h<l+e&&k-e<o&&o<m+e||j-e<g&&g<l+e&&k-e<n&&n<m+e||j-e<g&&g<l+e&&k-e<o&& +o<m+e){if(f.snapMode!="inner"){var p=Math.abs(k-o)<=e,q=Math.abs(m-n)<=e,r=Math.abs(j-g)<=e,s=Math.abs(l-h)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k-c.helperProportions.height,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l}).left-c.margins.left}var t= +p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(k-n)<=e;q=Math.abs(m-o)<=e;r=Math.abs(j-h)<=e;s=Math.abs(l-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m-c.helperProportions.height,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[i].snapping&& +(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=p||q||r||s||t}else{c.snapElements[i].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"), +10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery); +;/* + * jQuery UI Droppable 1.8.15 + * + * 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/Droppables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.mouse.js + * jquery.ui.draggable.js + */ +(function(d){d.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,b=a.accept;this.isover=0;this.isout=1;this.accept=d.isFunction(b)?b:function(c){return c.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};d.ui.ddmanager.droppables[a.scope]=d.ui.ddmanager.droppables[a.scope]||[];d.ui.ddmanager.droppables[a.scope].push(this); +a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=d.ui.ddmanager.droppables[this.options.scope],b=0;b<a.length;b++)a[b]==this&&a.splice(b,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,b){if(a=="accept")this.accept=d.isFunction(b)?b:function(c){return c.is(b)};d.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&& +this.element.addClass(this.options.activeClass);b&&this._trigger("activate",a,this.ui(b))},_deactivate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);b&&this._trigger("deactivate",a,this.ui(b))},_over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass); +this._trigger("over",a,this.ui(b))}},_out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",a,this.ui(b))}},_drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g= +d.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==c.options.scope&&g.accept.call(g.element[0],c.currentItem||c.element)&&d.ui.intersect(c,d.extend(g,{offset:g.element.offset()}),g.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop", +a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.15"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height; +switch(c){case "fit":return i<=e&&g<=k&&j<=f&&h<=l;case "intersect":return i<e+a.helperProportions.width/2&&g-a.helperProportions.width/2<k&&j<f+a.helperProportions.height/2&&h-a.helperProportions.height/2<l;case "pointer":return d.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,j,i,b.proportions.height,b.proportions.width);case "touch":return(f>=j&&f<=l||h>=j&&h<=l||f<j&&h>l)&&(e>= +i&&e<=k||g>=i&&g<=k||e<i&&g>k);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f<c.length;f++)if(!(c[f].options.disabled||a&&!c[f].accept.call(c[f].element[0],a.currentItem||a.element))){for(var h=0;h<g.length;h++)if(g[h]==c[f].element[0]){c[f].proportions.height=0;continue a}c[f].visible=c[f].element.css("display")!= +"none";if(c[f].visible){e=="mousedown"&&c[f]._activate.call(c[f],b);c[f].offset=c[f].element.offset();c[f].proportions={width:c[f].element[0].offsetWidth,height:c[f].element[0].offsetHeight}}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=c||this._drop.call(this,b);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem|| +a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},dragStart:function(a,b){a.element.parentsUntil("body").bind("scroll.droppable",function(){a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)})},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);if(c= +!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})},dragStop:function(a,b){a.element.parentsUntil("body").unbind("scroll.droppable"); +a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)}}})(jQuery); +;/* + * jQuery UI Resizable 1.8.15 + * + * 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/Resizables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function(e){e.widget("ui.resizable",e.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");e.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element, +_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&e.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').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("resizable",this.element.data("resizable"));this.elementIsWrapper=true;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=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{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"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d<c.length;d++){var f=e.trim(c[d]),g=e('<div class="ui-resizable-handle '+("ui-resizable-"+f)+'"></div>');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor== +String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),l=0;l=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,l);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection(); +this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){if(!a.disabled){e(this).removeClass("ui-resizable-autohide");b._handles.show()}},function(){if(!a.disabled)if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy(); +var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a= +false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"}); +this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff= +{width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis]; +if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false}, +_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;f=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.height()-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f, +{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",b);this._helper&&this.helper.remove();return false},_updateVirtualBoundaries:function(b){var a=this.options,c,d,f;a={minWidth:k(a.minWidth)?a.minWidth:0,maxWidth:k(a.maxWidth)?a.maxWidth:Infinity,minHeight:k(a.minHeight)?a.minHeight:0,maxHeight:k(a.maxHeight)?a.maxHeight: +Infinity};if(this._aspectRatio||b){b=a.minHeight*this.aspectRatio;d=a.minWidth/this.aspectRatio;c=a.maxHeight*this.aspectRatio;f=a.maxWidth/this.aspectRatio;if(b>a.minWidth)a.minWidth=b;if(d>a.minHeight)a.minHeight=d;if(c<a.maxWidth)a.maxWidth=c;if(f<a.maxHeight)a.maxHeight=f}this._vBoundaries=a},_updateCache:function(b){this.offset=this.helper.offset();if(k(b.left))this.position.left=b.left;if(k(b.top))this.position.top=b.top;if(k(b.height))this.size.height=b.height;if(k(b.width))this.size.width= +b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(k(b.height))b.width=b.height*this.aspectRatio;else if(k(b.width))b.height=b.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(d=="nw"){b.top=a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this._vBoundaries,c=this.axis,d=k(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=k(b.height)&&a.maxHeight&&a.maxHeight<b.height,g=k(b.width)&&a.minWidth&& +a.minWidth>b.width,h=k(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,l=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&l)b.left=i-a.minWidth;if(d&&l)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left= +null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var c=this._proportionallyResizeElements[a];if(!this.borderDif){var d=[c.css("borderTopWidth"),c.css("borderRightWidth"),c.css("borderBottomWidth"),c.css("borderLeftWidth")],f=[c.css("paddingTop"),c.css("paddingRight"),c.css("paddingBottom"),c.css("paddingLeft")];this.borderDif=e.map(d,function(g,h){g=parseInt(g,10)|| +0;h=parseInt(f[h],10)||0;return g+h})}e.browser.msie&&(e(b).is(":hidden")||e(b).parents(":hidden").length)||c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+ +a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+ +c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]); +b!="resize"&&this._trigger(b,a,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.extend(e.ui.resizable,{version:"1.8.15"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(), +10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top- +f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var l=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:l.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(l.css("position"))){c._revertToRelativePosition=true;l.css({position:"absolute",top:"auto",left:"auto"})}l.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType? +e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a= +e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing, +step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement= +e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top","Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset; +var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset,f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left: +a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top- +d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition, +f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25, +display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b= +e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height= +d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},k=function(b){return!isNaN(parseInt(b,10))}})(jQuery); +;/* + * jQuery UI Selectable 1.8.15 + * + * 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/Selectables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"), +selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX, +c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting", +c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d= +this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.right<b||a.top>i||a.bottom<g);else if(d.tolerance=="fit")k=a.left>b&&a.right<h&&a.top>g&&a.bottom<i;if(k){if(a.selected){a.$element.removeClass("ui-selected");a.selected=false}if(a.unselecting){a.$element.removeClass("ui-unselecting"); +a.unselecting=false}if(!a.selecting){a.$element.addClass("ui-selecting");a.selecting=true;f._trigger("selecting",c,{selecting:a.element})}}else{if(a.selecting)if(c.metaKey&&a.startselected){a.$element.removeClass("ui-selecting");a.selecting=false;a.$element.addClass("ui-selected");a.selected=true}else{a.$element.removeClass("ui-selecting");a.selecting=false;if(a.startselected){a.$element.addClass("ui-unselecting");a.unselecting=true}f._trigger("unselecting",c,{unselecting:a.element})}if(a.selected)if(!c.metaKey&& +!a.startselected){a.$element.removeClass("ui-selected");a.selected=false;a.$element.addClass("ui-unselecting");a.unselecting=true;f._trigger("unselecting",c,{unselecting:a.element})}}}});return false}},_mouseStop:function(c){var f=this;this.dragged=false;e(".ui-unselecting",this.element[0]).each(function(){var d=e.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=false;d.startselected=false;f._trigger("unselected",c,{unselected:d.element})});e(".ui-selecting",this.element[0]).each(function(){var d= +e.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");d.selecting=false;d.selected=true;d.startselected=true;f._trigger("selected",c,{selected:d.element})});this._trigger("stop",c);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.15"})})(jQuery); +;/* + * jQuery UI Sortable 1.8.15 + * + * 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/Sortables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function(d){d.widget("ui.sortable",d.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var a=this.options;this.containerCache={};this.element.addClass("ui-sortable"); +this.refresh();this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a=== +"disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&& +!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);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};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]}; +this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!= +document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a); +return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop+b.scrollSpeed;else if(a.pageY-this.overflowOffset.top< +b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop-b.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-a.pageX<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft+b.scrollSpeed;else if(a.pageX-this.overflowOffset.left<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft-b.scrollSpeed}else{if(a.pageY-d(document).scrollTop()<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()- +b.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()+b.scrollSpeed);if(a.pageX-d(document).scrollLeft()<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()-b.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()+b.scrollSpeed)}c!==false&&d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this, +a)}this.positionAbs=this._convertPositionTo("absolute");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";for(b=this.items.length-1;b>=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0], +e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset(); +c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;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 b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(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();d.extend(this,{helper:null, +dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")}, +toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+j<k&&b+l>g&&b+l<h;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers|| +this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?j:g<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<h&&i<e+this.helperProportions.height/2&&f-this.helperProportions.height/2<k},_intersectsWithPointer:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width);b=b&&a;a=this._getDragVerticalDirection(); +var c=this._getDragHorizontalDirection();if(!b)return false;return this.floating?c&&c=="right"||a=="down"?2:1:a&&(a=="down"?2:1)},_intersectsWithSides:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width);var c=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();return this.floating&&e?e=="right"&&a||e=="left"&&!a:c&&(c=="down"&&b||c=="up"&&!b)}, +_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith(); +if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), +this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var b=this.items,c=[[d.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):d(this.options.items,this.element), +this]],e=this._connectWith();if(e)for(var f=e.length-1;f>=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h<g;h++){i=d(e[h]);i.data("sortable-item",a);b.push({item:i,instance:a,width:0,height:0,left:0,top:0})}}},refreshPositions:function(a){if(this.offsetParent&& +this.helper)this.offset.parent=this._getParentOffset();for(var b=this.items.length-1;b>=0;b--){var c=this.items[b];if(!(c.instance!=this.currentContainer&&this.currentContainer&&c.item[0]!=this.currentItem[0])){var e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b= +this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f= +d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")|| +0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out", +a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h- +f)<b){b=Math.abs(h-f);e=this.items[g]}}if(e||this.options.dropOnEmpty){this.currentContainer=this.containers[c];e?this._rearrange(a,e,null,true):this._rearrange(a,null,this.containers[c].element,true);this._trigger("change",a,this._uiHash());this.containers[c]._trigger("change",a,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}}},_createHelper:function(a){var b= +this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a,this.currentItem])):b.helper=="clone"?this.currentItem.clone():this.currentItem;a.parents("body").length||d(b.appendTo!="parent"?b.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);if(a[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(a[0].style.width== +""||b.forceHelperSize)a.width(this.currentItem.width());if(a[0].style.height==""||b.forceHelperSize)a.height(this.currentItem.height());return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top= +this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a= +{top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"), +10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"? +document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var b=d(a.containment)[0];a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"), +10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(a,b){if(!b)b= +this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&& +this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset(); +var f=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])f=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g- +this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;f=this.originalPageX+Math.round((f-this.originalPageX)/b.grid[0])*b.grid[0];f=this.containment?!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:!(f-this.offset.click.left<this.containment[0])?f-b.grid[0]:f+b.grid[0]:f}}return{top:g- +this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_rearrange:function(a,b,c,e){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0], +this.direction=="down"?b.item[0]:b.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var f=this,g=this.counter;window.setTimeout(function(){g==f.counter&&f.refreshPositions(!e)},0)},_clear:function(a,b){this.reverting=false;var c=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var e in this._storedCSS)if(this._storedCSS[e]=="auto"||this._storedCSS[e]=="static")this._storedCSS[e]= +"";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!b&&c.push(function(f){this._trigger("receive",f,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!b)c.push(function(f){this._trigger("update",f,this._uiHash())});if(!d.ui.contains(this.element[0],this.currentItem[0])){b||c.push(function(f){this._trigger("remove", +f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this, +this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop", +a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()}, +_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});d.extend(d.ui.sortable,{version:"1.8.15"})})(jQuery); +;/* + * jQuery UI Accordion 1.8.15 + * + * 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/Accordion + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function(c){c.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix"); +a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom"); +if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var h=d.closest(".ui-accordion-header");a.active=h.length?h:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion", +function(f){return a._keydown(f)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(f){a._clickHandler.call(a,f,this);f.preventDefault()})},_createIcons:function(){var a= +this.options;if(a.icons){c("<span></span>").addClass("ui-icon "+a.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"); +this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons(); +b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,h=this.headers.index(a.target),f=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:f=this.headers[(h+1)%d];break;case b.LEFT:case b.UP:f=this.headers[(h-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target); +a.preventDefault()}if(f){c(a.target).attr("tabIndex",-1);c(f).attr("tabIndex",0);f.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+ +c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options; +if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){var h=this.active;j=a.next();g=this.active.next();e={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):j,oldContent:g};var f=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(j,g,e,b,f);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header); +if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);a.next().addClass("ui-accordion-content-active")}}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var g=this.active.next(), +e={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:g},j=this.active=c([]);this._toggle(j,g,e)}},_toggle:function(a,b,d,h,f){var g=this,e=g.options;g.toShow=a;g.toHide=b;g.data=d;var j=function(){if(g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data);g.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&h?{toShow:c([]),toHide:b,complete:j,down:f,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:f,autoHeight:e.autoHeight|| +e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;h=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!h[k]&&!c.easing[k])k="slide";h[k]||(h[k]=function(l){this.slide(l,{easing:k,duration:i||700})});h[k](d)}else{if(e.collapsible&&h)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false", +"aria-selected":"false",tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.15", +animations:{slide:function(a,b){a=c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),h=0,f={},g={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){g[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/); +f[i]={value:j[1],unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(g,{step:function(j,i){if(i.prop=="height")h=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=h*f[i.prop].value+f[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide", +paddingTop:"hide",paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery); +;/* + * jQuery UI Autocomplete 1.8.15 + * + * 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/Autocomplete + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.position.js + */ +(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.propAttr("readOnly"))){g= +false;var f=d.ui.keyCode;switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!= +a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)}; +this.menu=d("<ul></ul>").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&& +a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"); +d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&& +b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source= +this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==false)return this._search(a)},_search:function(a){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:a},this.response)},_response:function(a){if(!this.options.disabled&&a&&a.length){a=this._normalize(a);this._suggest(a);this._trigger("open")}else this.close(); +this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",a)}},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(a){if(a.length&&a[0].label&&a[0].value)return a;return d.map(a,function(b){if(typeof b==="string")return{label:b,value:b};return d.extend({label:b.label|| +b.value,value:b.value||b.label},b)})},_suggest:function(a){var b=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(b,a);this.menu.deactivate();this.menu.refresh();b.show();this._resizeMenu();b.position(d.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new d.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,b){var g=this; +d.each(b,function(c,f){g._renderItem(a,f)})},_renderItem:function(a,b){return d("<li></li>").data("item.autocomplete",b).append(d("<a></a>").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, +"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery); +(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", +-1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.scrollTop(),c=this.element.height();if(b<0)this.element.scrollTop(g+b);else b>=c&&this.element.scrollTop(g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id"); +this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b, +this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active|| +this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active|| +this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[d.fn.prop?"prop":"attr"]("scrollHeight")},select:function(e){this._trigger("selected",e,{item:this.active})}})})(jQuery); +;/* + * jQuery UI Button 1.8.15 + * + * 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/Button + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function(b){var h,i,j,g,l=function(){var a=b(this).find(":ui-button");setTimeout(function(){a.button("refresh")},1)},k=function(a){var c=a.name,e=a.form,f=b([]);if(c)f=e?b(e).find("[name='"+c+"']"):b("[name='"+c+"']",a.ownerDocument).filter(function(){return!this.form});return f};b.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",l);if(typeof this.options.disabled!== +"boolean")this.options.disabled=this.element.propAttr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var a=this,c=this.options,e=this.type==="checkbox"||this.type==="radio",f="ui-state-hover"+(!e?" ui-state-active":"");if(c.label===null)c.label=this.buttonElement.html();if(this.element.is(":disabled"))c.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",function(){if(!c.disabled){b(this).addClass("ui-state-hover"); +this===h&&b(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){c.disabled||b(this).removeClass(f)}).bind("click.button",function(d){if(c.disabled){d.preventDefault();d.stopImmediatePropagation()}});this.element.bind("focus.button",function(){a.buttonElement.addClass("ui-state-focus")}).bind("blur.button",function(){a.buttonElement.removeClass("ui-state-focus")});if(e){this.element.bind("change.button",function(){g||a.refresh()});this.buttonElement.bind("mousedown.button",function(d){if(!c.disabled){g= +false;i=d.pageX;j=d.pageY}}).bind("mouseup.button",function(d){if(!c.disabled)if(i!==d.pageX||j!==d.pageY)g=true})}if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(c.disabled||g)return false;b(this).toggleClass("ui-state-active");a.buttonElement.attr("aria-pressed",a.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(c.disabled||g)return false;b(this).addClass("ui-state-active");a.buttonElement.attr("aria-pressed","true"); +var d=a.element[0];k(d).not(d).map(function(){return b(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")});else{this.buttonElement.bind("mousedown.button",function(){if(c.disabled)return false;b(this).addClass("ui-state-active");h=this;b(document).one("mouseup",function(){h=null})}).bind("mouseup.button",function(){if(c.disabled)return false;b(this).removeClass("ui-state-active")}).bind("keydown.button",function(d){if(c.disabled)return false;if(d.keyCode==b.ui.keyCode.SPACE|| +d.keyCode==b.ui.keyCode.ENTER)b(this).addClass("ui-state-active")}).bind("keyup.button",function(){b(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(d){d.keyCode===b.ui.keyCode.SPACE&&b(this).click()})}this._setOption("disabled",c.disabled);this._resetButton()},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type=== +"radio"){var a=this.element.parents().filter(":last"),c="label[for="+this.element.attr("id")+"]";this.buttonElement=a.find(c);if(!this.buttonElement.length){a=a.length?a.siblings():this.element.siblings();this.buttonElement=a.filter(c);if(!this.buttonElement.length)this.buttonElement=a.find(c)}this.element.addClass("ui-helper-hidden-accessible");(a=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",a)}else this.buttonElement=this.element}, +widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());this.hasTitle||this.buttonElement.removeAttr("title"); +b.Widget.prototype.destroy.call(this)},_setOption:function(a,c){b.Widget.prototype._setOption.apply(this,arguments);if(a==="disabled")c?this.element.propAttr("disabled",true):this.element.propAttr("disabled",false);else this._resetButton()},refresh:function(){var a=this.element.is(":disabled");a!==this.options.disabled&&this._setOption("disabled",a);if(this.type==="radio")k(this.element[0]).each(function(){b(this).is(":checked")?b(this).button("widget").addClass("ui-state-active").attr("aria-pressed", +"true"):b(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false")},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var a=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"), +c=b("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(a.empty()).text(),e=this.options.icons,f=e.primary&&e.secondary,d=[];if(e.primary||e.secondary){if(this.options.text)d.push("ui-button-text-icon"+(f?"s":e.primary?"-primary":"-secondary"));e.primary&&a.prepend("<span class='ui-button-icon-primary ui-icon "+e.primary+"'></span>");e.secondary&&a.append("<span class='ui-button-icon-secondary ui-icon "+e.secondary+"'></span>");if(!this.options.text){d.push(f?"ui-button-icons-only": +"ui-button-icon-only");this.hasTitle||a.attr("title",c)}}else d.push("ui-button-text-only");a.addClass(d.join(" "))}}});b.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(a,c){a==="disabled"&&this.buttons.button("option",a,c);b.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var a=this.element.css("direction")=== +"ltr";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(a?"ui-corner-left":"ui-corner-right").end().filter(":last").addClass(a?"ui-corner-right":"ui-corner-left").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy"); +b.Widget.prototype.destroy.call(this)}})})(jQuery); +;/* + * jQuery UI Dialog 1.8.15 + * + * 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/Dialog + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.button.js + * jquery.ui.draggable.js + * jquery.ui.mouse.js + * jquery.ui.position.js + * jquery.ui.resizable.js + */ +(function(c,l){var m={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},n={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},o=c.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false, +position:{my:"center",at:"center",collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||" ",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+ +b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g), +h=c('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("<span></span>")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("<span></span>").addClass("ui-dialog-title").attr("id", +e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"); +a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d,e;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!== +b.uiDialog[0]){e=c(this).css("z-index");isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.scrollTop(),scrollLeft:d.element.scrollLeft()};c.ui.dialog.maxZ+=1; +d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target=== +f[0]&&e.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a, +function(){return!(d=true)});if(d){c.each(a,function(f,h){h=c.isFunction(h)?{click:h,text:f}:h;var i=c('<button type="button"></button>').click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.each(h,function(j,k){if(j!=="click")j in o?i[j](k):i.attr(j,k)});c.fn.button&&i.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close", +handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition, +originalSize:f.originalSize,position:f.position,size:f.size}}a=a===l?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize", +f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0],e;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "): +[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,f){if(+b[g]===b[g]){d[g]=b[g];b[g]=f}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(e=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(c.extend({of:window},a));e||this.uiDialog.hide()},_setOptions:function(a){var b=this,d={},e=false;c.each(a,function(g,f){b._setOption(g,f); +if(g in m)e=true;if(g in n)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"): +e.removeClass("ui-dialog-disabled");break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||" "));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a= +this.options,b,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();e||this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height- +b,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.15",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "), +create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()<c.ui.dialog.overlay.maxZ)return false})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("<div></div>").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<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie){a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<b?c(window).width()+"px":a+"px"}else return c(document).width()+"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,function(){a= +a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery); +;/* + * jQuery UI Slider 1.8.15 + * + * 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/Slider + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var a=this,b=this.options,c=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f=b.values&&b.values.length||1,e=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+ +this.orientation+" ui-widget ui-widget-content ui-corner-all"+(b.disabled?" ui-slider-disabled ui-disabled":""));this.range=d([]);if(b.range){if(b.range===true){if(!b.values)b.values=[this._valueMin(),this._valueMin()];if(b.values.length&&b.values.length!==2)b.values=[b.values[0],b.values[0]]}this.range=d("<div></div>").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<f;j+=1)e.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>"); +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&&c<f))c=f;if(c!==this.values(b)){f=this.values();f[b]=c;a=this._trigger("slide",a,{handle:this.handles[b],value:c,values:f});this.values(b?0:1);a!==false&&this.values(b,c,true)}}else if(c!==this.value()){a=this._trigger("slide",a,{handle:this.handles[b],value:c}); +a!==false&&this.value(c)}},_stop: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()}this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){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()}this._trigger("change",a,c)}},value:function(a){if(arguments.length){this.options.value= +this._trimAlignValue(a);this._refreshValue();this._change(null,0)}else return this._value()},values:function(a,b){var c,f,e;if(arguments.length>1){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<c.length;e+=1){c[e]=this._trimAlignValue(f[e]);this._change(null,e)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(a): +this.value();else return this._values()},_setOption:function(a,b){var c,f=0;if(d.isArray(this.options.values))f=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(a){case "disabled":if(b){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.propAttr("disabled",true);this.element.addClass("ui-disabled")}else{this.handles.propAttr("disabled",false);this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation(); +this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<f;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var a=this.options.value;return a=this._trimAlignValue(a)},_values:function(a){var b,c;if(arguments.length){b=this.options.values[a]; +return b=this._trimAlignValue(b)}else{b=this.options.values.slice();for(c=0;c<b.length;c+=1)b[c]=this._trimAlignValue(b[c]);return b}},_trimAlignValue:function(a){if(a<=this._valueMin())return this._valueMin();if(a>=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.15"})})(jQuery); +;/* + * jQuery UI Tabs 1.8.15 + * + * 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:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading…</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_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<this.anchors.length?1:-1));e.disabled=d.map(d.grep(e.disabled,function(h){return h!=b}),function(h){return h>=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.15"});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<a.anchors.length?k:0)},b);j&&j.stopPropagation()});e=a._unrotate||(a._unrotate=!e?function(j){j.clientX&& +a.rotate(null)}:function(){t=c.selected;h()});if(b){this.element.bind("tabsshow",h);this.anchors.bind(c.event+".tabs",e);h()}else{clearTimeout(a.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(c.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery); +;/* + * jQuery UI Datepicker 1.8.15 + * + * 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/Datepicker + * + * Depends: + * jquery.ui.core.js + */ +(function(d,C){function M(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass= +"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su", +"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10", +minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false,disabled:false};d.extend(this._defaults,this.regional[""]);this.dpDiv=N(d('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}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.15"}});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('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_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('<span class="'+this._appendClass+'">'+c+"</span>");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("<img/>").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('<button type="button"></button>').addClass(this._triggerClass).html(f==""?c:d("<img/>").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;g<f.length;g++)if(f[g].length>h){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('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');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<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return true;return false},_getInst:function(a){try{return d.data(a,"datepicker")}catch(b){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(a,b,c){var e=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?d.extend({},d.datepicker._defaults):e?b=="all"? +d.extend({},e.settings):this._get(e,b):null;var f=b||{};if(typeof b=="string"){f={};f[b]=c}if(e){this._curInst==e&&this._hideDatepicker();var h=this._getDateDatepicker(a,true),i=this._getMinMaxDate(e,"min"),g=this._getMinMaxDate(e,"max");H(e.settings,f);if(i!==null&&f.dateFormat!==C&&f.minDate===C)e.settings.minDate=this._formatDate(e,i);if(g!==null&&f.dateFormat!==C&&f.maxDate===C)e.settings.maxDate=this._formatDate(e,g);this._attachments(d(a),e);this._autoSize(e);this._setDate(e,h);this._updateAlternate(e); +this._updateDatepicker(e)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){(a=this._getInst(a))&&this._updateDatepicker(a)},_setDateDatepicker:function(a,b){if(a=this._getInst(a)){this._setDate(a,b);this._updateDatepicker(a);this._updateAlternate(a)}},_getDateDatepicker:function(a,b){(a=this._getInst(a))&&!a.inline&&this._setDateFromField(a,b);return a?this._getDate(a):null},_doKeyDown:function(a){var b=d.datepicker._getInst(a.target),c=true,e=b.dpDiv.is(".ui-datepicker-rtl"); +b._keyEvent=true;if(d.datepicker._datepickerShowing)switch(a.keyCode){case 9:d.datepicker._hideDatepicker();c=false;break;case 13:c=d("td."+d.datepicker._dayOverClass+":not(."+d.datepicker._currentClass+")",b.dpDiv);c[0]&&d.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,c[0]);if(a=d.datepicker._get(b,"onSelect")){c=d.datepicker._formatDate(b);a.apply(b.input?b.input[0]:null,[c,b])}else d.datepicker._hideDatepicker();return false;case 27:d.datepicker._hideDatepicker();break;case 33:d.datepicker._adjustDate(a.target, +a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 34:d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 35:if(a.ctrlKey||a.metaKey)d.datepicker._clearDate(a.target);c=a.ctrlKey||a.metaKey;break;case 36:if(a.ctrlKey||a.metaKey)d.datepicker._gotoToday(a.target);c=a.ctrlKey||a.metaKey;break;case 37:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?+1:-1,"D");c= +a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 38:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,-7,"D");c=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?-1:+1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b, +"stepMonths"),"M");break;case 40:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,+7,"D");c=a.ctrlKey||a.metaKey;break;default:c=false}else if(a.keyCode==36&&a.ctrlKey)d.datepicker._showDatepicker(this);else c=false;if(c){a.preventDefault();a.stopPropagation()}},_doKeyPress:function(a){var b=d.datepicker._getInst(a.target);if(d.datepicker._get(b,"constrainInput")){b=d.datepicker._possibleChars(d.datepicker._get(b,"dateFormat"));var c=String.fromCharCode(a.charCode==C?a.keyCode:a.charCode); +return a.ctrlKey||a.metaKey||c<" "||!b||b.indexOf(c)>-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");H(b.settings,c?c.apply(a,[a,b]):{});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];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<a.length&&a.charAt(A+1)==p)&&A++;return p},m=function(p){var D=o(p);p=new RegExp("^\\d{1,"+ +(p=="@"?14:p=="!"?20:p=="y"&&D?4:p=="o"?3:2)+"}");p=b.substring(q).match(p);if(!p)throw"Missing number at position "+q;q+=p[0].length;return parseInt(p[0],10)},n=function(p,D,K){p=d.map(o(p)?K:D,function(w,x){return[[x,w]]}).sort(function(w,x){return-(w[1].length-x[1].length)});var E=-1;d.each(p,function(w,x){w=x[1];if(b.substr(q,w.length).toLowerCase()==w.toLowerCase()){E=x[0];q+=w.length;return false}});if(E!=-1)return E+1;else throw"Unknown name at position "+q;},s=function(){if(b.charAt(q)!=a.charAt(A))throw"Unexpected literal at position "+ +q;q++},q=0,A=0;A<a.length;A++)if(k)if(a.charAt(A)=="'"&&!o("'"))k=false;else s();else switch(a.charAt(A)){case "d":l=m("d");break;case "D":n("D",f,h);break;case "o":u=m("o");break;case "m":j=m("m");break;case "M":j=n("M",i,g);break;case "y":c=m("y");break;case "@":var v=new Date(m("@"));c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "!":v=new Date((m("!")-this._ticksTo1970)/1E4);c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "'":if(o("'"))s();else k=true;break;default:s()}if(q< +b.length)throw"Extra/unparsed characters found in date: "+b.substring(q);if(c==-1)c=(new Date).getFullYear();else if(c<100)c+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c<=e?0:-100);if(u>-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<a.length&& +a.charAt(k+1)==o)&&k++;return o},g=function(o,m,n){m=""+m;if(i(o))for(;m.length<n;)m="0"+m;return m},j=function(o,m,n,s){return i(o)?s[m]:n[m]},l="",u=false;if(b)for(var k=0;k<a.length;k++)if(u)if(a.charAt(k)=="'"&&!i("'"))u=false;else l+=a.charAt(k);else switch(a.charAt(k)){case "d":l+=g("d",b.getDate(),2);break;case "D":l+=j("D",b.getDay(),e,f);break;case "o":l+=g("o",Math.round(((new Date(b.getFullYear(),b.getMonth(),b.getDate())).getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864E5),3); +break;case "m":l+=g("m",b.getMonth()+1,2);break;case "M":l+=j("M",b.getMonth(),h,c);break;case "y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case "@":l+=b.getTime();break;case "!":l+=b.getTime()*1E4+this._ticksTo1970;break;case "'":if(i("'"))l+="'";else u=true;break;default:l+=a.charAt(k)}return l},_possibleChars:function(a){for(var b="",c=false,e=function(h){(h=f+1<a.length&&a.charAt(f+1)==h)&&f++;return h},f=0;f<a.length;f++)if(c)if(a.charAt(f)=="'"&&!e("'"))c= +false;else b+=a.charAt(f);else switch(a.charAt(f)){case "d":case "m":case "y":case "@":b+="0123456789";break;case "D":case "M":return null;case "'":if(e("'"))b+="'";else c=true;break;default:b+=a.charAt(f)}return b},_get:function(a,b){return a.settings[b]!==C?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),e=a.lastVal=a.input?a.input.val():null,f,h;f=h=this._getDefaultDate(a);var i=this._getFormatConfig(a);try{f=this.parseDate(c, +e,i)||h}catch(g){this.log(g);e=b?"":e}a.selectedDay=f.getDate();a.drawMonth=a.selectedMonth=f.getMonth();a.drawYear=a.selectedYear=f.getFullYear();a.currentDay=e?f.getDate():0;a.currentMonth=e?f.getMonth():0;a.currentYear=e?f.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var e=function(h){var i=new Date;i.setDate(i.getDate()+h);return i},f=function(h){try{return d.datepicker.parseDate(d.datepicker._get(a, +"dateFormat"),h,d.datepicker._getFormatConfig(a))}catch(i){}var g=(h.toLowerCase().match(/^c/)?d.datepicker._getDate(a):null)||new Date,j=g.getFullYear(),l=g.getMonth();g=g.getDate();for(var u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,k=u.exec(h);k;){switch(k[2]||"d"){case "d":case "D":g+=parseInt(k[1],10);break;case "w":case "W":g+=parseInt(k[1],10)*7;break;case "m":case "M":l+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break;case "y":case "Y":j+=parseInt(k[1],10);g=Math.min(g, +d.datepicker._getDaysInMonth(j,l));break}k=u.exec(h)}return new Date(j,l,g)};if(b=(b=b==null||b===""?c:typeof b=="string"?f(b):typeof b=="number"?isNaN(b)?c:e(b):new Date(b.getTime()))&&b.toString()=="Invalid Date"?c:b){b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0)}return this._daylightSavingAdjust(b)},_daylightSavingAdjust:function(a){if(!a)return null;a.setHours(a.getHours()>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));if(c=this._get(a,"onSelect")){e=this._formatDate(a);c.apply(a.input?a.input[0]:null,[e,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&&n<k?k:n;this._daylightSavingAdjust(new Date(m,g,1))>n;){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)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+B+".datepicker._adjustDate('#"+a.id+"', -"+j+", 'M');\" title=\""+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>":f?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>";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)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+B+".datepicker._adjustDate('#"+a.id+"', +"+j+", 'M');\" title=\""+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>":f?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>";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?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+B+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>":"";e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?h:"")+(this._isInRange(a,s)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+ +B+".datepicker._gotoToday('#"+a.id+"');\">"+j+"</button>":"")+(c?"":h)+"</div>":"";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;x<i[0];x++){var O= +"";this.maxRows=4;for(var G=0;G<i[1];G++){var P=this._daylightSavingAdjust(new Date(m,g,a.selectedDay)),t=" ui-corner-all",y="";if(l){y+='<div class="ui-datepicker-group';if(i[1]>1)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+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/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)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var z=j?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(t=0;t<7;t++){var r=(t+h)%7;z+="<th"+((t+h+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+s[r]+'">'+q[r]+"</span></th>"}y+=z+"</tr></thead><tbody>";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<z;Q++){y+="<tr>";var R=!j?"":'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(r)+"</td>";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&&r<k||o&&r>o;R+='<td class="'+((t+h+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(r.getTime()== +P.getTime()&&g==a.selectedMonth&&a._keyEvent||E.getTime()==r.getTime()&&E.getTime()==P.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!D?"":" "+I[1]+(r.getTime()==u.getTime()?" "+this._currentClass:"")+(r.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!F||D)&&I[2]?' title="'+I[2]+'"':"")+(L?"":' onclick="DP_jQuery_'+B+".datepicker._selectDay('#"+a.id+"',"+r.getMonth()+","+r.getFullYear()+', this);return false;"')+">"+(F&&!D?" ":L?'<span class="ui-state-default">'+ +r.getDate()+"</span>":'<a class="ui-state-default'+(r.getTime()==b.getTime()?" ui-state-highlight":"")+(r.getTime()==u.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+'" href="#">'+r.getDate()+"</a>")+"</td>";r.setDate(r.getDate()+1);r=this._daylightSavingAdjust(r)}y+=R+"</tr>"}g++;if(g>11){g=0;m++}y+="</tbody></table>"+(l?"</div>"+(i[0]>0&&G==i[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>': +"");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='<div class="ui-datepicker-title">',o="";if(h||!j)o+='<span class="ui-datepicker-month">'+i[b]+"</span>";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+B+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" >";for(var n=0;n<12;n++)if((!i||n>=e.getMonth())&& +(!m||n<=f.getMonth()))o+='<option value="'+n+'"'+(n==b?' selected="selected"':"")+">"+g[n]+"</option>";o+="</select>"}u||(k+=o+(h||!(j&&l)?" ":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+='<span class="ui-datepicker-year">'+c+"</span>";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+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+B+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" >";b<=g;b++)a.yearshtml+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";a.yearshtml+="</select>";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?" ":"")+o;k+="</div>";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&&b<c?c:b;return b=a&&b>a?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.15";window["DP_jQuery_"+B]=d})(jQuery); +;/* + * jQuery UI Progressbar 1.8.15 + * + * 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("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").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.15"})})(jQuery); +;/* + * jQuery UI Effects 1.8.15 + * + * 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.15",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a=="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,a){var b;switch(c[0]){case "top":b= +0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":c=0;break;case "center":c=0.5;break;case "right":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}); +c.wrap(b);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(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);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<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/ +h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic: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<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);if(a<1)return-0.5* +h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,a,b,d,e){return d-f.easing.easeOutBounce(c, +e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c,a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery); +;/* + * jQuery UI Effects Blind 1.8.15 + * + * 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/Blind + * + * Depends: + * jquery.effects.core.js + */ +(function(b){b.effects.blind=function(c){return this.queue(function(){var a=b(this),g=["position","top","bottom","left","right"],f=b.effects.setMode(a,c.options.mode||"hide"),d=c.options.direction||"vertical";b.effects.save(a,g);a.show();var e=b.effects.createWrapper(a).css({overflow:"hidden"}),h=d=="vertical"?"height":"width";d=d=="vertical"?e.height():e.width();f=="show"&&e.css(h,0);var i={};i[h]=f=="show"?d:0;e.animate(i,c.duration,c.options.easing,function(){f=="hide"&&a.hide();b.effects.restore(a, +g);b.effects.removeWrapper(a);c.callback&&c.callback.apply(a[0],arguments);a.dequeue()})})}})(jQuery); +;/* + * jQuery UI Effects Bounce 1.8.15 + * + * 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/Bounce + * + * Depends: + * jquery.effects.core.js + */ +(function(e){e.effects.bounce=function(b){return this.queue(function(){var a=e(this),l=["position","top","bottom","left","right"],h=e.effects.setMode(a,b.options.mode||"effect"),d=b.options.direction||"up",c=b.options.distance||20,m=b.options.times||5,i=b.duration||250;/show|hide/.test(h)&&l.push("opacity");e.effects.save(a,l);a.show();e.effects.createWrapper(a);var f=d=="up"||d=="down"?"top":"left";d=d=="up"||d=="left"?"pos":"neg";c=b.options.distance||(f=="top"?a.outerHeight({margin:true})/3:a.outerWidth({margin:true})/ +3);if(h=="show")a.css("opacity",0).css(f,d=="pos"?-c:c);if(h=="hide")c/=m*2;h!="hide"&&m--;if(h=="show"){var g={opacity:1};g[f]=(d=="pos"?"+=":"-=")+c;a.animate(g,i/2,b.options.easing);c/=2;m--}for(g=0;g<m;g++){var j={},k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing);c=h=="hide"?c*2:c/2}if(h=="hide"){g={opacity:0};g[f]=(d=="pos"?"-=":"+=")+c;a.animate(g,i/2,b.options.easing,function(){a.hide();e.effects.restore(a,l);e.effects.removeWrapper(a); +b.callback&&b.callback.apply(this,arguments)})}else{j={};k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing,function(){e.effects.restore(a,l);e.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments)})}a.queue("fx",function(){a.dequeue()});a.dequeue()})}})(jQuery); +;/* + * jQuery UI Effects Clip 1.8.15 + * + * 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/Clip + * + * Depends: + * jquery.effects.core.js + */ +(function(b){b.effects.clip=function(e){return this.queue(function(){var a=b(this),i=["position","top","bottom","left","right","height","width"],f=b.effects.setMode(a,e.options.mode||"hide"),c=e.options.direction||"vertical";b.effects.save(a,i);a.show();var d=b.effects.createWrapper(a).css({overflow:"hidden"});d=a[0].tagName=="IMG"?d:a;var g={size:c=="vertical"?"height":"width",position:c=="vertical"?"top":"left"};c=c=="vertical"?d.height():d.width();if(f=="show"){d.css(g.size,0);d.css(g.position, +c/2)}var h={};h[g.size]=f=="show"?c:0;h[g.position]=f=="show"?0:c/2;d.animate(h,{queue:false,duration:e.duration,easing:e.options.easing,complete:function(){f=="hide"&&a.hide();b.effects.restore(a,i);b.effects.removeWrapper(a);e.callback&&e.callback.apply(a[0],arguments);a.dequeue()}})})}})(jQuery); +;/* + * jQuery UI Effects Drop 1.8.15 + * + * 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/Drop + * + * Depends: + * jquery.effects.core.js + */ +(function(c){c.effects.drop=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right","opacity"],e=c.effects.setMode(a,d.options.mode||"hide"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a);var f=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var g=d.options.distance||(f=="top"?a.outerHeight({margin:true})/2:a.outerWidth({margin:true})/2);if(e=="show")a.css("opacity",0).css(f,b=="pos"?-g:g);var i={opacity:e== +"show"?1:0};i[f]=(e=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+g;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){e=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery); +;/* + * jQuery UI Effects Explode 1.8.15 + * + * 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/Explode + * + * Depends: + * jquery.effects.core.js + */ +(function(j){j.effects.explode=function(a){return this.queue(function(){var c=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3,d=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3;a.options.mode=a.options.mode=="toggle"?j(this).is(":visible")?"hide":"show":a.options.mode;var b=j(this).show().css("visibility","hidden"),g=b.offset();g.top-=parseInt(b.css("marginTop"),10)||0;g.left-=parseInt(b.css("marginLeft"),10)||0;for(var h=b.outerWidth(true),i=b.outerHeight(true),e=0;e<c;e++)for(var f= +0;f<d;f++)b.clone().appendTo("body").wrap("<div></div>").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.15 + * + * 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.15 + * + * 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.15 + * + * 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.15 + * + * 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<times;c++){b.animate({opacity:animateTo},duration,a.options.easing);animateTo=(animateTo+1)%2}b.animate({opacity:animateTo},duration, +a.options.easing,function(){animateTo==0&&b.hide();a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()}).dequeue()})}})(jQuery); +;/* + * jQuery UI Effects Scale 1.8.15 + * + * 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/Scale + * + * Depends: + * jquery.effects.core.js + */ +(function(c){c.effects.puff=function(b){return this.queue(function(){var a=c(this),e=c.effects.setMode(a,b.options.mode||"hide"),g=parseInt(b.options.percent,10)||150,h=g/100,i={height:a.height(),width:a.width()};c.extend(b.options,{fade:true,mode:e,percent:e=="hide"?g:100,from:e=="hide"?i:{height:i.height*h,width:i.width*h}});a.effect("scale",b.options,b.duration,b.callback);a.dequeue()})};c.effects.scale=function(b){return this.queue(function(){var a=c(this),e=c.extend(true,{},b.options),g=c.effects.setMode(a, +b.options.mode||"effect"),h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:g=="hide"?0:100),i=b.options.direction||"both",f=b.options.origin;if(g!="effect"){e.origin=f||["middle","center"];e.restore=true}f={height:a.height(),width:a.width()};a.from=b.options.from||(g=="show"?{height:0,width:0}:f);h={y:i!="horizontal"?h/100:1,x:i!="vertical"?h/100:1};a.to={height:f.height*h.y,width:f.width*h.x};if(b.options.fade){if(g=="show"){a.from.opacity=0;a.to.opacity=1}if(g=="hide"){a.from.opacity= +1;a.to.opacity=0}}e.from=a.from;e.to=a.to;e.mode=g;a.effect("size",e,b.duration,b.callback);a.dequeue()})};c.effects.size=function(b){return this.queue(function(){var a=c(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],g=["position","top","bottom","left","right","overflow","opacity"],h=["width","height","overflow"],i=["fontSize"],f=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],k=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"], +p=c.effects.setMode(a,b.options.mode||"effect"),n=b.options.restore||false,m=b.options.scale||"both",l=b.options.origin,j={height:a.height(),width:a.width()};a.from=b.options.from||j;a.to=b.options.to||j;if(l){l=c.effects.getBaseline(l,j);a.from.top=(j.height-a.from.height)*l.y;a.from.left=(j.width-a.from.width)*l.x;a.to.top=(j.height-a.to.height)*l.y;a.to.left=(j.width-a.to.width)*l.x}var d={from:{y:a.from.height/j.height,x:a.from.width/j.width},to:{y:a.to.height/j.height,x:a.to.width/j.width}}; +if(m=="box"||m=="both"){if(d.from.y!=d.to.y){e=e.concat(f);a.from=c.effects.setTransition(a,f,d.from.y,a.from);a.to=c.effects.setTransition(a,f,d.to.y,a.to)}if(d.from.x!=d.to.x){e=e.concat(k);a.from=c.effects.setTransition(a,k,d.from.x,a.from);a.to=c.effects.setTransition(a,k,d.to.x,a.to)}}if(m=="content"||m=="both")if(d.from.y!=d.to.y){e=e.concat(i);a.from=c.effects.setTransition(a,i,d.from.y,a.from);a.to=c.effects.setTransition(a,i,d.to.y,a.to)}c.effects.save(a,n?e:g);a.show();c.effects.createWrapper(a); +a.css("overflow","hidden").css(a.from);if(m=="content"||m=="both"){f=f.concat(["marginTop","marginBottom"]).concat(i);k=k.concat(["marginLeft","marginRight"]);h=e.concat(f).concat(k);a.find("*[width]").each(function(){child=c(this);n&&c.effects.save(child,h);var o={height:child.height(),width:child.width()};child.from={height:o.height*d.from.y,width:o.width*d.from.x};child.to={height:o.height*d.to.y,width:o.width*d.to.x};if(d.from.y!=d.to.y){child.from=c.effects.setTransition(child,f,d.from.y,child.from); +child.to=c.effects.setTransition(child,f,d.to.y,child.to)}if(d.from.x!=d.to.x){child.from=c.effects.setTransition(child,k,d.from.x,child.from);child.to=c.effects.setTransition(child,k,d.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){n&&c.effects.restore(child,h)})})}a.animate(a.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){a.to.opacity===0&&a.css("opacity",a.from.opacity);p=="hide"&&a.hide();c.effects.restore(a, +n?e:g);c.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery); +;/* + * jQuery UI Effects Shake 1.8.15 + * + * 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/Shake + * + * Depends: + * jquery.effects.core.js + */ +(function(d){d.effects.shake=function(a){return this.queue(function(){var b=d(this),j=["position","top","bottom","left","right"];d.effects.setMode(b,a.options.mode||"effect");var c=a.options.direction||"left",e=a.options.distance||20,l=a.options.times||3,f=a.duration||a.options.duration||140;d.effects.save(b,j);b.show();d.effects.createWrapper(b);var g=c=="up"||c=="down"?"top":"left",h=c=="up"||c=="left"?"pos":"neg";c={};var i={},k={};c[g]=(h=="pos"?"-=":"+=")+e;i[g]=(h=="pos"?"+=":"-=")+e*2;k[g]= +(h=="pos"?"-=":"+=")+e*2;b.animate(c,f,a.options.easing);for(e=1;e<l;e++)b.animate(i,f,a.options.easing).animate(k,f,a.options.easing);b.animate(i,f,a.options.easing).animate(c,f/2,a.options.easing,function(){d.effects.restore(b,j);d.effects.removeWrapper(b);a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()});b.dequeue()})}})(jQuery); +;/* + * jQuery UI Effects Slide 1.8.15 + * + * 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/Slide + * + * Depends: + * jquery.effects.core.js + */ +(function(c){c.effects.slide=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right"],f=c.effects.setMode(a,d.options.mode||"show"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a).css({overflow:"hidden"});var g=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var e=d.options.distance||(g=="top"?a.outerHeight({margin:true}):a.outerWidth({margin:true}));if(f=="show")a.css(g,b=="pos"?isNaN(e)?"-"+e:-e:e); +var i={};i[g]=(f=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+e;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){f=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery); +;/* + * jQuery UI Effects Transfer 1.8.15 + * + * 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/Transfer + * + * Depends: + * jquery.effects.core.js + */ +(function(e){e.effects.transfer=function(a){return this.queue(function(){var b=e(this),c=e(a.options.to),d=c.offset();c={top:d.top,left:d.left,height:c.innerHeight(),width:c.innerWidth()};d=b.offset();var f=e('<div class="ui-effects-transfer"></div>').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); +; diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/jquery-ui.LICENSE b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/jquery-ui.LICENSE new file mode 100644 index 0000000..e1f050a --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/jquery-ui.LICENSE @@ -0,0 +1,26 @@ +jQuery UI is used under the terms of the MIT License +http://jquery.org/license/ + +--- + +Copyright 2012 jQuery Foundation and other contributors +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. \ No newline at end of file diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/modernizr-1.7.min.js b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/modernizr-1.7.min.js new file mode 100644 index 0000000..5a06871 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/modernizr-1.7.min.js @@ -0,0 +1,2 @@ +// Modernizr v1.7 www.modernizr.com +window.Modernizr=function(a,b,c){function G(){e.input=function(a){for(var b=0,c=a.length;b<c;b++)t[a[b]]=!!(a[b]in l);return t}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)l.setAttribute("type",f=a[d]),e=l.type!=="text",e&&(l.value=m,l.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&l.style.WebkitAppearance!==c?(g.appendChild(l),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(l,null).WebkitAppearance!=="textfield"&&l.offsetHeight!==0,g.removeChild(l)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=l.checkValidity&&l.checkValidity()===!1:/^color$/.test(f)?(g.appendChild(l),g.offsetWidth,e=l.value!=m,g.removeChild(l)):e=l.value!=m)),s[a[d]]=!!e;return s}("search tel url email datetime date month week time datetime-local number range color".split(" "))}function F(a,b){var c=a.charAt(0).toUpperCase()+a.substr(1),d=(a+" "+p.join(c+" ")+c).split(" ");return!!E(d,b)}function E(a,b){for(var d in a)if(k[a[d]]!==c&&(!b||b(a[d],j)))return!0}function D(a,b){return(""+a).indexOf(b)!==-1}function C(a,b){return typeof a===b}function B(a,b){return A(o.join(a+";")+(b||""))}function A(a){k.cssText=a}var d="1.7",e={},f=!0,g=b.documentElement,h=b.head||b.getElementsByTagName("head")[0],i="modernizr",j=b.createElement(i),k=j.style,l=b.createElement("input"),m=":)",n=Object.prototype.toString,o=" -webkit- -moz- -o- -ms- -khtml- ".split(" "),p="Webkit Moz O ms Khtml".split(" "),q={svg:"http://www.w3.org/2000/svg"},r={},s={},t={},u=[],v,w=function(a){var c=b.createElement("style"),d=b.createElement("div"),e;c.textContent=a+"{#modernizr{height:3px}}",h.appendChild(c),d.id="modernizr",g.appendChild(d),e=d.offsetHeight===3,c.parentNode.removeChild(c),d.parentNode.removeChild(d);return!!e},x=function(){function d(d,e){e=e||b.createElement(a[d]||"div");var f=(d="on"+d)in e;f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=C(e[d],"function"),C(e[d],c)||(e[d]=c),e.removeAttribute(d))),e=null;return f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),y=({}).hasOwnProperty,z;C(y,c)||C(y.call,c)?z=function(a,b){return b in a&&C(a.constructor.prototype[b],c)}:z=function(a,b){return y.call(a,b)},r.flexbox=function(){function c(a,b,c,d){a.style.cssText=o.join(b+":"+c+";")+(d||"")}function a(a,b,c,d){b+=":",a.style.cssText=(b+o.join(c+";"+b)).slice(0,-b.length)+(d||"")}var d=b.createElement("div"),e=b.createElement("div");a(d,"display","box","width:42px;padding:0;"),c(e,"box-flex","1","width:10px;"),d.appendChild(e),g.appendChild(d);var f=e.offsetWidth===42;d.removeChild(e),g.removeChild(d);return f},r.canvas=function(){var a=b.createElement("canvas");return a.getContext&&a.getContext("2d")},r.canvastext=function(){return e.canvas&&C(b.createElement("canvas").getContext("2d").fillText,"function")},r.webgl=function(){return!!a.WebGLRenderingContext},r.touch=function(){return"ontouchstart"in a||w("@media ("+o.join("touch-enabled),(")+"modernizr)")},r.geolocation=function(){return!!navigator.geolocation},r.postmessage=function(){return!!a.postMessage},r.websqldatabase=function(){var b=!!a.openDatabase;return b},r.indexedDB=function(){for(var b=-1,c=p.length;++b<c;){var d=p[b].toLowerCase();if(a[d+"_indexedDB"]||a[d+"IndexedDB"])return!0}return!1},r.hashchange=function(){return x("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},r.history=function(){return !!(a.history&&history.pushState)},r.draganddrop=function(){return x("dragstart")&&x("drop")},r.websockets=function(){return"WebSocket"in a},r.rgba=function(){A("background-color:rgba(150,255,150,.5)");return D(k.backgroundColor,"rgba")},r.hsla=function(){A("background-color:hsla(120,40%,100%,.5)");return D(k.backgroundColor,"rgba")||D(k.backgroundColor,"hsla")},r.multiplebgs=function(){A("background:url(//:),url(//:),red url(//:)");return(new RegExp("(url\\s*\\(.*?){3}")).test(k.background)},r.backgroundsize=function(){return F("backgroundSize")},r.borderimage=function(){return F("borderImage")},r.borderradius=function(){return F("borderRadius","",function(a){return D(a,"orderRadius")})},r.boxshadow=function(){return F("boxShadow")},r.textshadow=function(){return b.createElement("div").style.textShadow===""},r.opacity=function(){B("opacity:.55");return/^0.55$/.test(k.opacity)},r.cssanimations=function(){return F("animationName")},r.csscolumns=function(){return F("columnCount")},r.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";A((a+o.join(b+a)+o.join(c+a)).slice(0,-a.length));return D(k.backgroundImage,"gradient")},r.cssreflections=function(){return F("boxReflect")},r.csstransforms=function(){return!!E(["transformProperty","WebkitTransform","MozTransform","OTransform","msTransform"])},r.csstransforms3d=function(){var a=!!E(["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"]);a&&"webkitPerspective"in g.style&&(a=w("@media ("+o.join("transform-3d),(")+"modernizr)"));return a},r.csstransitions=function(){return F("transitionProperty")},r.fontface=function(){var a,c,d=h||g,e=b.createElement("style"),f=b.implementation||{hasFeature:function(){return!1}};e.type="text/css",d.insertBefore(e,d.firstChild),a=e.sheet||e.styleSheet;var i=f.hasFeature("CSS2","")?function(b){if(!a||!b)return!1;var c=!1;try{a.insertRule(b,0),c=/src/i.test(a.cssRules[0].cssText),a.deleteRule(a.cssRules.length-1)}catch(d){}return c}:function(b){if(!a||!b)return!1;a.cssText=b;return a.cssText.length!==0&&/src/i.test(a.cssText)&&a.cssText.replace(/\r+|\n+/g,"").indexOf(b.split(" ")[0])===0};c=i('@font-face { font-family: "font"; src: url(data:,); }'),d.removeChild(e);return c},r.video=function(){var a=b.createElement("video"),c=!!a.canPlayType;if(c){c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"');var d='video/mp4; codecs="avc1.42E01E';c.h264=a.canPlayType(d+'"')||a.canPlayType(d+', mp4a.40.2"'),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"')}return c},r.audio=function(){var a=b.createElement("audio"),c=!!a.canPlayType;c&&(c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"'),c.mp3=a.canPlayType("audio/mpeg;"),c.wav=a.canPlayType('audio/wav; codecs="1"'),c.m4a=a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;"));return c},r.localstorage=function(){try{return!!localStorage.getItem}catch(a){return!1}},r.sessionstorage=function(){try{return!!sessionStorage.getItem}catch(a){return!1}},r.webWorkers=function(){return!!a.Worker},r.applicationcache=function(){return!!a.applicationCache},r.svg=function(){return!!b.createElementNS&&!!b.createElementNS(q.svg,"svg").createSVGRect},r.inlinesvg=function(){var a=b.createElement("div");a.innerHTML="<svg/>";return(a.firstChild&&a.firstChild.namespaceURI)==q.svg},r.smil=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"animate")))},r.svgclippaths=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"clipPath")))};for(var H in r)z(r,H)&&(v=H.toLowerCase(),e[v]=r[H](),u.push((e[v]?"":"no-")+v));e.input||G(),e.crosswindowmessaging=e.postmessage,e.historymanagement=e.history,e.addTest=function(a,b){a=a.toLowerCase();if(!e[a]){b=!!b(),g.className+=" "+(b?"":"no-")+a,e[a]=b;return e}},A(""),j=l=null,f&&a.attachEvent&&function(){var a=b.createElement("div");a.innerHTML="<elem></elem>";return a.childNodes.length!==1}()&&function(a,b){function p(a,b){var c=-1,d=a.length,e,f=[];while(++c<d)e=a[c],(b=e.media||b)!="screen"&&f.push(p(e.imports,b),e.cssText);return f.join("")}function o(a){var b=-1;while(++b<e)a.createElement(d[b])}var c="abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",d=c.split("|"),e=d.length,f=new RegExp("(^|\\s)("+c+")","gi"),g=new RegExp("<(/*)("+c+")","gi"),h=new RegExp("(^|[^\\n]*?\\s)("+c+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),i=b.createDocumentFragment(),j=b.documentElement,k=j.firstChild,l=b.createElement("body"),m=b.createElement("style"),n;o(b),o(i),k.insertBefore(m,k.firstChild),m.media="print",a.attachEvent("onbeforeprint",function(){var a=-1,c=p(b.styleSheets,"all"),k=[],o;n=n||b.body;while((o=h.exec(c))!=null)k.push((o[1]+o[2]+o[3]).replace(f,"$1.iepp_$2")+o[4]);m.styleSheet.cssText=k.join("\n");while(++a<e){var q=b.getElementsByTagName(d[a]),r=q.length,s=-1;while(++s<r)q[s].className.indexOf("iepp_")<0&&(q[s].className+=" iepp_"+d[a])}i.appendChild(n),j.appendChild(l),l.className=n.className,l.innerHTML=n.innerHTML.replace(g,"<$1font")}),a.attachEvent("onafterprint",function(){l.innerHTML="",j.removeChild(l),j.appendChild(n),m.styleSheet.cssText=""})}(a,b),e._enableHTML5=f,e._version=d,g.className=g.className.replace(/\bno-js\b/,"")+" js "+u.join(" ");return e}(this,this.document) diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/modernizr.LICENSE b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/modernizr.LICENSE new file mode 100644 index 0000000..4de3c2e --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/js/modernizr.LICENSE @@ -0,0 +1,24 @@ +Modernizer is used under the terms of the MIT License +http://modernizr.com/license/ + +--- + +Copyright (c) Faruk Ates, Paul Irish, Alex Sexton + +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. \ No newline at end of file diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/HTML5Boilerplate.LICENSE b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/HTML5Boilerplate.LICENSE new file mode 100644 index 0000000..00d2e13 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/HTML5Boilerplate.LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +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 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. + +For more information, please refer to <http://unlicense.org/> \ No newline at end of file diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/administrative/administrative.xsl b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/administrative/administrative.xsl new file mode 100644 index 0000000..2e627a8 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/administrative/administrative.xsl @@ -0,0 +1,131 @@ +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<!-- + Modifications to the rendering of elements in the administrative aspect. + + Author: art.lowel at atmire.com + Author: lieven.droogmans at atmire.com + Author: ben at atmire.com +--> + +<xsl:stylesheet xmlns:i18n="http://apache.org/cocoon/i18n/2.1" + xmlns:dri="http://di.tamu.edu/DRI/1.0/" + xmlns:mets="http://www.loc.gov/METS/" + xmlns:xlink="http://www.w3.org/TR/xlink/" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:dim="http://www.dspace.org/xmlns/dspace/dim" + xmlns:xhtml="http://www.w3.org/1999/xhtml" + xmlns:mods="http://www.loc.gov/mods/v3" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns="http://www.w3.org/1999/xhtml" + exclude-result-prefixes="i18n dri mets xlink xsl dim xhtml mods dc"> + + <xsl:output indent="yes"/> + + <!--Add the class 'tabbed' to the form for administrative pages containing tabs and wrap the tab content with a div with class 'pane', + the rest is just a copy of the default interactive div template--> + <xsl:template match="dri:div[contains(@rend, 'administrative') and dri:list[@rend = 'horizontal']]"> + <xsl:apply-templates select="dri:head"/> + <xsl:apply-templates select="@pagination"> + <xsl:with-param name="position">top</xsl:with-param> + </xsl:apply-templates> + <form> + <xsl:call-template name="standardAttributes"> + <xsl:with-param name="class">ds-interactive-div tabbed</xsl:with-param> + </xsl:call-template> + <xsl:attribute name="action"><xsl:value-of select="@action"/></xsl:attribute> + <xsl:attribute name="method"><xsl:value-of select="@method"/></xsl:attribute> + <xsl:if test="@method='multipart'"> + <xsl:attribute name="method">post</xsl:attribute> + <xsl:attribute name="enctype">multipart/form-data</xsl:attribute> + </xsl:if> + <xsl:attribute name="onsubmit">javascript:tSubmit(this);</xsl:attribute> + <!--For Item Submission process, disable ability to submit a form by pressing 'Enter'--> + <xsl:if test="starts-with(@n,'submit')"> + <xsl:attribute name="onkeydown">javascript:return disableEnterKey(event);</xsl:attribute> + </xsl:if> + <xsl:apply-templates select="dri:list[@rend = 'horizontal']"/> + <div class="pane"> + <xsl:apply-templates select="*[not(name()='head' or @rend = 'horizontal')]"/> + </div> + + </form> + <!-- JS to scroll form to DIV parent of "Add" button if jump-to --> + <xsl:if test="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='page'][@qualifier='jumpTo']"> + <script type="text/javascript"> + <xsl:text>var button = document.getElementById('</xsl:text> + <xsl:value-of select="translate(@id,'.','_')"/> + <xsl:text>').elements['</xsl:text> + <xsl:value-of select="concat('submit_',/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='page'][@qualifier='jumpTo'],'_add')"/> + <xsl:text>'];</xsl:text> + <xsl:text> + if (button != null) { + var n = button.parentNode; + for (; n != null; n = n.parentNode) { + if (n.tagName == 'DIV') { + n.scrollIntoView(false); + break; + } + } + } + </xsl:text> + </script> + </xsl:if> + <xsl:apply-templates select="@pagination"> + <xsl:with-param name="position">bottom</xsl:with-param> + </xsl:apply-templates> + </xsl:template> + + + <!--the tabs are floating, so give the ul the class 'clearfix' to ensure it has a height--> + <xsl:template match="dri:div[contains(@rend, 'administrative')]/dri:list[@rend = 'horizontal']"> + <xsl:apply-templates select="dri:head"/> + <ul> + <xsl:call-template name="standardAttributes"> + <xsl:with-param name="class">ds-simple-list clearfix</xsl:with-param> + </xsl:call-template> + <xsl:apply-templates select="*[not(name()='head')]" mode="nested"/> + </ul> + </xsl:template> + + <!--give the active tab the class 'active-tab'--> + <xsl:template match="dri:div[contains(@rend, 'administrative')]/dri:list[@rend = 'horizontal']/dri:item[dri:hi[@rend = 'bold']]" mode="nested"> + <li class="active-tab"> + <xsl:apply-templates /> + </li> + </xsl:template> + + <!--Template for the bitstream reordering--> + <xsl:template match="dri:cell[starts-with(@id, 'aspect.administrative.item.EditItemBitstreamsForm.cell.bitstream_order_')]" priority="2"> + <td> + <xsl:call-template name="standardAttributes"/> + <xsl:apply-templates select="*[not(@type='button')]" /> + <!--A div that will indicate the old & the new order--> + <div> + <span> + <!--Give this one an ID so that the javascript can change his value--> + <xsl:attribute name="id"> + <xsl:value-of select="dri:field/@id"/> + <xsl:text>_new</xsl:text> + </xsl:attribute> + <xsl:value-of select="dri:field/dri:value"/> + </span> + <xsl:text> (</xsl:text> + <i18n:text>xmlui.administrative.item.EditItemBitstreamsForm.previous_order</i18n:text> + <xsl:value-of select="dri:field/dri:value"/> + <xsl:text>)</xsl:text> + </div> + </td> + <td> + <xsl:apply-templates select="dri:field[@type='button']"/> + </td> + </xsl:template> + +</xsl:stylesheet> \ No newline at end of file diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/artifactbrowser/collection-list.xsl b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/artifactbrowser/collection-list.xsl new file mode 100644 index 0000000..560b6d5 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/artifactbrowser/collection-list.xsl @@ -0,0 +1,106 @@ +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<!-- + Rendering of a list of collections (e.g. on a community homepage, + or on the community-list page) + + Author: art.lowel at atmire.com + Author: lieven.droogmans at atmire.com + Author: ben at atmire.com + Author: Alexey Maslov + +--> + +<xsl:stylesheet + xmlns:i18n="http://apache.org/cocoon/i18n/2.1" + xmlns:dri="http://di.tamu.edu/DRI/1.0/" + xmlns:mets="http://www.loc.gov/METS/" + xmlns:dim="http://www.dspace.org/xmlns/dspace/dim" + xmlns:xlink="http://www.w3.org/TR/xlink/" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:atom="http://www.w3.org/2005/Atom" + xmlns:ore="http://www.openarchives.org/ore/terms/" + xmlns:oreatom="http://www.openarchives.org/ore/atom/" + xmlns="http://www.w3.org/1999/xhtml" + xmlns:xalan="http://xml.apache.org/xalan" + xmlns:encoder="xalan://java.net.URLEncoder" + xmlns:util="org.dspace.app.xmlui.utils.XSLUtils" + xmlns:confman="org.dspace.core.ConfigurationManager" + exclude-result-prefixes="xalan encoder i18n dri mets dim xlink xsl util confman"> + + <xsl:output indent="yes"/> + + <!-- A collection rendered in the summaryList pattern. Encountered on the community-list page --> + <xsl:template name="collectionSummaryList-DIM"> + <xsl:variable name="data" select="./mets:dmdSec/mets:mdWrap/mets:xmlData/dim:dim"/> + <div class="artifact-description"> + <div class="artifact-title"> + <a href="{@OBJID}"> + <span class="Z3988"> + <xsl:choose> + <xsl:when test="string-length($data/dim:field[@element='title'][1]) > 0"> + <xsl:value-of select="$data/dim:field[@element='title'][1]"/> + </xsl:when> + <xsl:otherwise> + <i18n:text>xmlui.dri2xhtml.METS-1.0.no-title</i18n:text> + </xsl:otherwise> + </xsl:choose> + </span> + </a> + <!--Display community strengths (item counts) if they exist--> + <xsl:if test="string-length($data/dim:field[@element='format'][@qualifier='extent'][1]) > 0"> + <xsl:text> [</xsl:text> + <xsl:value-of select="$data/dim:field[@element='format'][@qualifier='extent'][1]"/> + <xsl:text>]</xsl:text> + </xsl:if> + </div> + <xsl:variable name="abstract" select="$data/dim:field[@element = 'description' and @qualifier='abstract']/node()"/> + <xsl:if test="$abstract and string-length($abstract[1]) > 0"> + <div class="artifact-info"> + <span class="short-description"> + <xsl:value-of select="util:shortenString($abstract, 220, 10)"/> + </span> + </div> + </xsl:if> + </div> + </xsl:template> + + <!-- A collection rendered in the detailList pattern. Encountered on the item view page as + the "this item is part of these collections" list --> + <xsl:template name="collectionDetailList-DIM"> + <xsl:variable name="data" select="./mets:dmdSec/mets:mdWrap/mets:xmlData/dim:dim"/> + <a href="{@OBJID}"> + <xsl:choose> + <xsl:when test="string-length($data/dim:field[@element='title'][1]) > 0"> + <xsl:value-of select="$data/dim:field[@element='title'][1]"/> + </xsl:when> + <xsl:otherwise> + <i18n:text>xmlui.dri2xhtml.METS-1.0.no-title</i18n:text> + </xsl:otherwise> + </xsl:choose> + </a> + <!--Display collection strengths (item counts) if they exist--> + <xsl:if test="string-length($data/dim:field[@element='format'][@qualifier='extent'][1]) > 0"> + <xsl:text> [</xsl:text> + <xsl:value-of select="$data/dim:field[@element='format'][@qualifier='extent'][1]"/> + <xsl:text>]</xsl:text> + </xsl:if> + <br/> + <xsl:choose> + <xsl:when test="$data/dim:field[@element='description' and @qualifier='abstract']"> + <xsl:copy-of select="$data/dim:field[@element='description' and @qualifier='abstract']/node()"/> + </xsl:when> + <xsl:otherwise> + <xsl:copy-of select="$data/dim:field[@element='description'][1]/node()"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + +</xsl:stylesheet> diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/artifactbrowser/community-list.xsl b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/artifactbrowser/community-list.xsl new file mode 100644 index 0000000..e24f48d --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/artifactbrowser/community-list.xsl @@ -0,0 +1,108 @@ +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<!-- + Rendering of a list of communities (e.g. on a community homepage, + or on the community-list page) + + Author: art.lowel at atmire.com + Author: lieven.droogmans at atmire.com + Author: ben at atmire.com + Author: Alexey Maslov + +--> + +<xsl:stylesheet + xmlns:i18n="http://apache.org/cocoon/i18n/2.1" + xmlns:dri="http://di.tamu.edu/DRI/1.0/" + xmlns:mets="http://www.loc.gov/METS/" + xmlns:dim="http://www.dspace.org/xmlns/dspace/dim" + xmlns:xlink="http://www.w3.org/TR/xlink/" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:atom="http://www.w3.org/2005/Atom" + xmlns:ore="http://www.openarchives.org/ore/terms/" + xmlns:oreatom="http://www.openarchives.org/ore/atom/" + xmlns="http://www.w3.org/1999/xhtml" + xmlns:xalan="http://xml.apache.org/xalan" + xmlns:encoder="xalan://java.net.URLEncoder" + xmlns:util="org.dspace.app.xmlui.utils.XSLUtils" + xmlns:confman="org.dspace.core.ConfigurationManager" + exclude-result-prefixes="xalan encoder i18n dri mets dim xlink xsl util confman"> + + <xsl:output indent="yes"/> + + <!-- A community rendered in the summaryList pattern. Encountered on the community-list and on + on the front page. --> + <xsl:template name="communitySummaryList-DIM"> + <xsl:variable name="data" select="./mets:dmdSec/mets:mdWrap/mets:xmlData/dim:dim"/> + <div class="artifact-description"> + <div class="artifact-title"> + <a href="{@OBJID}"> + <span class="Z3988"> + <xsl:choose> + <xsl:when test="string-length($data/dim:field[@element='title'][1]) > 0"> + <xsl:value-of select="$data/dim:field[@element='title'][1]"/> + </xsl:when> + <xsl:otherwise> + <i18n:text>xmlui.dri2xhtml.METS-1.0.no-title</i18n:text> + </xsl:otherwise> + </xsl:choose> + </span> + </a> + <!--Display community strengths (item counts) if they exist--> + <xsl:if test="string-length($data/dim:field[@element='format'][@qualifier='extent'][1]) > 0"> + <xsl:text> [</xsl:text> + <xsl:value-of select="$data/dim:field[@element='format'][@qualifier='extent'][1]"/> + <xsl:text>]</xsl:text> + </xsl:if> + </div> + <xsl:variable name="abstract" select="$data/dim:field[@element = 'description' and @qualifier='abstract']/node()"/> + <xsl:if test="$abstract and string-length($abstract[1]) > 0"> + <div class="artifact-info"> + <span class="short-description"> + <xsl:value-of select="util:shortenString($abstract, 220, 10)"/> + </span> + </div> + </xsl:if> + </div> + </xsl:template> + + <!-- A community rendered in the detailList pattern. Not currently used. --> + <xsl:template name="communityDetailList-DIM"> + <xsl:variable name="data" select="./mets:dmdSec/mets:mdWrap/mets:xmlData/dim:dim"/> + <span class="bold"> + <a href="{@OBJID}"> + <xsl:choose> + <xsl:when test="string-length($data/dim:field[@element='title'][1]) > 0"> + <xsl:value-of select="$data/dim:field[@element='title'][1]"/> + </xsl:when> + <xsl:otherwise> + <i18n:text>xmlui.dri2xhtml.METS-1.0.no-title</i18n:text> + </xsl:otherwise> + </xsl:choose> + </a> + <!--Display community strengths (item counts) if they exist--> + <xsl:if test="string-length($data/dim:field[@element='format'][@qualifier='extent'][1]) > 0"> + <xsl:text> [</xsl:text> + <xsl:value-of select="$data/dim:field[@element='format'][@qualifier='extent'][1]"/> + <xsl:text>]</xsl:text> + </xsl:if> + <br/> + <xsl:choose> + <xsl:when test="$data/dim:field[@element='description' and @qualifier='abstract']"> + <xsl:copy-of select="$data/dim:field[@element='description' and @qualifier='abstract']/node()"/> + </xsl:when> + <xsl:otherwise> + <xsl:copy-of select="$data/dim:field[@element='description'][1]/node()"/> + </xsl:otherwise> + </xsl:choose> + </span> + </xsl:template> + +</xsl:stylesheet> diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/artifactbrowser/item-list.xsl b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/artifactbrowser/item-list.xsl new file mode 100644 index 0000000..4efbc00 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/artifactbrowser/item-list.xsl @@ -0,0 +1,268 @@ +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<!-- + Rendering of a list of items (e.g. in a search or + browse results page) + + Author: art.lowel at atmire.com + Author: lieven.droogmans at atmire.com + Author: ben at atmire.com + Author: Alexey Maslov + +--> + +<xsl:stylesheet + xmlns:i18n="http://apache.org/cocoon/i18n/2.1" + xmlns:dri="http://di.tamu.edu/DRI/1.0/" + xmlns:mets="http://www.loc.gov/METS/" + xmlns:dim="http://www.dspace.org/xmlns/dspace/dim" + xmlns:xlink="http://www.w3.org/TR/xlink/" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:atom="http://www.w3.org/2005/Atom" + xmlns:ore="http://www.openarchives.org/ore/terms/" + xmlns:oreatom="http://www.openarchives.org/ore/atom/" + xmlns="http://www.w3.org/1999/xhtml" + xmlns:xalan="http://xml.apache.org/xalan" + xmlns:encoder="xalan://java.net.URLEncoder" + xmlns:util="org.dspace.app.xmlui.utils.XSLUtils" + xmlns:confman="org.dspace.core.ConfigurationManager" + exclude-result-prefixes="xalan encoder i18n dri mets dim xlink xsl util confman"> + + <xsl:output indent="yes"/> + + <!--these templates are modfied to support the 2 different item list views that + can be configured with the property 'xmlui.theme.mirage.item-list.emphasis' in dspace.cfg--> + + <xsl:template name="itemSummaryList-DIM"> + <xsl:variable name="itemWithdrawn" select="./mets:dmdSec/mets:mdWrap[@OTHERMDTYPE='DIM']/mets:xmlData/dim:dim/@withdrawn" /> + + <xsl:variable name="href"> + <xsl:choose> + <xsl:when test="$itemWithdrawn"> + <xsl:value-of select="@OBJEDIT"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="@OBJID"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="emphasis" select="confman:getProperty('xmlui.theme.mirage.item-list.emphasis')"/> + <xsl:choose> + <xsl:when test="'file' = $emphasis"> + + + <div class="item-wrapper clearfix"> + <xsl:apply-templates select="./mets:fileSec" mode="artifact-preview"><xsl:with-param name="href" select="$href"/></xsl:apply-templates> + <xsl:apply-templates select="./mets:dmdSec/mets:mdWrap[@OTHERMDTYPE='DIM']/mets:xmlData/dim:dim" + mode="itemSummaryList-DIM-file"><xsl:with-param name="href" select="$href"/></xsl:apply-templates> + </div> + </xsl:when> + <xsl:otherwise> + <xsl:apply-templates select="./mets:dmdSec/mets:mdWrap[@OTHERMDTYPE='DIM']/mets:xmlData/dim:dim" + mode="itemSummaryList-DIM-metadata"><xsl:with-param name="href" select="$href"/></xsl:apply-templates> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <!--handles the rendering of a single item in a list in file mode--> + <xsl:template match="dim:dim" mode="itemSummaryList-DIM-file"> + <xsl:param name="href"/> + <xsl:variable name="metadataWidth" select="675 - $thumbnail.maxwidth - 30"/> + <div class="item-metadata" style="width: {$metadataWidth}px;"> + <span class="bold"><i18n:text>xmlui.dri2xhtml.pioneer.title</i18n:text><xsl:text>:</xsl:text></span> + <span class="content" style="width: {$metadataWidth - 110}px;"> + <xsl:element name="a"> + <xsl:attribute name="href"> + <xsl:value-of select="$href"/> + </xsl:attribute> + <xsl:choose> + <xsl:when test="dim:field[@element='title' and descendant::text()]"> + <xsl:value-of select="dim:field[@element='title'][1]/node()"/> + </xsl:when> + <xsl:otherwise> + <i18n:text>xmlui.dri2xhtml.METS-1.0.no-title</i18n:text> + </xsl:otherwise> + </xsl:choose> + </xsl:element> + </span> + <span class="Z3988"> + <xsl:attribute name="title"> + <xsl:call-template name="renderCOinS"/> + </xsl:attribute> +  <!-- non-breaking space to force separating the end tag --> + </span> + <span class="bold"><i18n:text>xmlui.dri2xhtml.pioneer.author</i18n:text><xsl:text>:</xsl:text></span> + <span class="content" style="width: {$metadataWidth - 110}px;"> + <xsl:choose> + <xsl:when test="dim:field[@element='contributor'][@qualifier='author']"> + <xsl:for-each select="dim:field[@element='contributor'][@qualifier='author']"> + <span> + <xsl:if test="@authority"> + <xsl:attribute name="class"> + <xsl:text>ds-dc_contributor_author-authority</xsl:text> + </xsl:attribute> + </xsl:if> + <xsl:copy-of select="node()"/> + </span> + <xsl:if test="count(following-sibling::dim:field[@element='contributor'][@qualifier='author']) != 0"> + <xsl:text>; </xsl:text> + </xsl:if> + </xsl:for-each> + </xsl:when> + <xsl:when test="dim:field[@element='creator']"> + <xsl:for-each select="dim:field[@element='creator']"> + <xsl:copy-of select="node()"/> + <xsl:if test="count(following-sibling::dim:field[@element='creator']) != 0"> + <xsl:text>; </xsl:text> + </xsl:if> + </xsl:for-each> + </xsl:when> + <xsl:when test="dim:field[@element='contributor']"> + <xsl:for-each select="dim:field[@element='contributor']"> + <xsl:copy-of select="node()"/> + <xsl:if test="count(following-sibling::dim:field[@element='contributor']) != 0"> + <xsl:text>; </xsl:text> + </xsl:if> + </xsl:for-each> + </xsl:when> + <xsl:otherwise> + <i18n:text>xmlui.dri2xhtml.METS-1.0.no-author</i18n:text> + </xsl:otherwise> + </xsl:choose> + </span> + <xsl:if test="dim:field[@element='date' and @qualifier='issued'] or dim:field[@element='publisher']"> + <span class="bold"><i18n:text>xmlui.dri2xhtml.pioneer.date</i18n:text><xsl:text>:</xsl:text></span> + <span class="content" style="width: {$metadataWidth - 110}px;"> + <xsl:value-of + select="substring(dim:field[@element='date' and @qualifier='issued']/node(),1,10)"/> + </span> + </xsl:if> + </div> + </xsl:template> + + <!--handles the rendering of a single item in a list in metadata mode--> + <xsl:template match="dim:dim" mode="itemSummaryList-DIM-metadata"> + <xsl:param name="href"/> + <div class="artifact-description"> + <div class="artifact-title"> + <xsl:element name="a"> + <xsl:attribute name="href"> + <xsl:value-of select="$href"/> + </xsl:attribute> + <xsl:choose> + <xsl:when test="dim:field[@element='title' and descendant::text()]"> + <xsl:value-of select="dim:field[@element='title'][1]/node()"/> + </xsl:when> + <xsl:otherwise> + <i18n:text>xmlui.dri2xhtml.METS-1.0.no-title</i18n:text> + </xsl:otherwise> + </xsl:choose> + </xsl:element> + <span class="Z3988"> + <xsl:attribute name="title"> + <xsl:call-template name="renderCOinS"/> + </xsl:attribute> +  <!-- non-breaking space to force separating the end tag --> + </span> + </div> + <div class="artifact-info"> + <span class="author"> + <xsl:choose> + <xsl:when test="dim:field[@element='contributor'][@qualifier='author']"> + <xsl:for-each select="dim:field[@element='contributor'][@qualifier='author']"> + <span> + <xsl:if test="@authority"> + <xsl:attribute name="class"><xsl:text>ds-dc_contributor_author-authority</xsl:text></xsl:attribute> + </xsl:if> + <xsl:copy-of select="node()"/> + </span> + <xsl:if test="count(following-sibling::dim:field[@element='contributor'][@qualifier='author']) != 0"> + <xsl:text>; </xsl:text> + </xsl:if> + </xsl:for-each> + </xsl:when> + <xsl:when test="dim:field[@element='creator']"> + <xsl:for-each select="dim:field[@element='creator']"> + <xsl:copy-of select="node()"/> + <xsl:if test="count(following-sibling::dim:field[@element='creator']) != 0"> + <xsl:text>; </xsl:text> + </xsl:if> + </xsl:for-each> + </xsl:when> + <xsl:when test="dim:field[@element='contributor']"> + <xsl:for-each select="dim:field[@element='contributor']"> + <xsl:copy-of select="node()"/> + <xsl:if test="count(following-sibling::dim:field[@element='contributor']) != 0"> + <xsl:text>; </xsl:text> + </xsl:if> + </xsl:for-each> + </xsl:when> + <xsl:otherwise> + <i18n:text>xmlui.dri2xhtml.METS-1.0.no-author</i18n:text> + </xsl:otherwise> + </xsl:choose> + </span> + <xsl:text> </xsl:text> + <xsl:if test="dim:field[@element='date' and @qualifier='issued'] or dim:field[@element='publisher']"> + <span class="publisher-date"> + <xsl:text>(</xsl:text> + <xsl:if test="dim:field[@element='publisher']"> + <span class="publisher"> + <xsl:copy-of select="dim:field[@element='publisher']/node()"/> + </span> + <xsl:text>, </xsl:text> + </xsl:if> + <span class="date"> + <xsl:value-of select="substring(dim:field[@element='date' and @qualifier='issued']/node(),1,10)"/> + </span> + <xsl:text>)</xsl:text> + </span> + </xsl:if> + </div> + <xsl:if test="dim:field[@element = 'description' and @qualifier='abstract']"> + <xsl:variable name="abstract" select="dim:field[@element = 'description' and @qualifier='abstract']/node()"/> + <div class="artifact-abstract"> + <xsl:value-of select="util:shortenString($abstract, 220, 10)"/> + </div> + </xsl:if> + </div> + </xsl:template> + + <xsl:template name="itemDetailList-DIM"> + <xsl:call-template name="itemSummaryList-DIM"/> + </xsl:template> + + + <xsl:template match="mets:fileSec" mode="artifact-preview"> + <xsl:param name="href"/> + <div class="thumbnail-wrapper" style="width: {$thumbnail.maxwidth}px;"> + <div class="artifact-preview"> + <a class="image-link" href="{$href}"> + <xsl:choose> + <xsl:when test="mets:fileGrp[@USE='THUMBNAIL']"> + <img alt="Thumbnail"> + <xsl:attribute name="src"> + <xsl:value-of + select="mets:fileGrp[@USE='THUMBNAIL']/mets:file/mets:FLocat[@LOCTYPE='URL']/@xlink:href"/> + </xsl:attribute> + </img> + </xsl:when> + <xsl:otherwise> + <img alt="Icon" src="{concat($theme-path, '/images/mime.png')}" style="height: {$thumbnail.maxheight}px;"/> + </xsl:otherwise> + </xsl:choose> + </a> + </div> + </div> + </xsl:template> + + +</xsl:stylesheet> diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/artifactbrowser/item-view.xsl b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/artifactbrowser/item-view.xsl new file mode 100644 index 0000000..55d437b --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/artifactbrowser/item-view.xsl @@ -0,0 +1,560 @@ +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<!-- + Rendering specific to the item display page. + + Author: art.lowel at atmire.com + Author: lieven.droogmans at atmire.com + Author: ben at atmire.com + Author: Alexey Maslov + +--> + +<xsl:stylesheet + xmlns:i18n="http://apache.org/cocoon/i18n/2.1" + xmlns:dri="http://di.tamu.edu/DRI/1.0/" + xmlns:mets="http://www.loc.gov/METS/" + xmlns:dim="http://www.dspace.org/xmlns/dspace/dim" + xmlns:xlink="http://www.w3.org/TR/xlink/" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:atom="http://www.w3.org/2005/Atom" + xmlns:ore="http://www.openarchives.org/ore/terms/" + xmlns:oreatom="http://www.openarchives.org/ore/atom/" + xmlns="http://www.w3.org/1999/xhtml" + xmlns:xalan="http://xml.apache.org/xalan" + xmlns:encoder="xalan://java.net.URLEncoder" + xmlns:util="org.dspace.app.xmlui.utils.XSLUtils" + xmlns:jstring="java.lang.String" + xmlns:rights="http://cosimo.stanford.edu/sdr/metsrights/" + exclude-result-prefixes="xalan encoder i18n dri mets dim xlink xsl util jstring rights"> + + <xsl:output indent="yes"/> + + <xsl:template name="itemSummaryView-DIM"> + <!-- Generate the info about the item from the metadata section --> + <xsl:apply-templates select="./mets:dmdSec/mets:mdWrap[@OTHERMDTYPE='DIM']/mets:xmlData/dim:dim" + mode="itemSummaryView-DIM"/> + + <xsl:copy-of select="$SFXLink" /> + <!-- Generate the bitstream information from the file section --> + <xsl:choose> + <xsl:when test="./mets:fileSec/mets:fileGrp[@USE='CONTENT' or @USE='ORIGINAL']/mets:file"> + <xsl:apply-templates select="./mets:fileSec/mets:fileGrp[@USE='CONTENT' or @USE='ORIGINAL']"> + <xsl:with-param name="context" select="."/> + <xsl:with-param name="primaryBitstream" select="./mets:structMap[@TYPE='LOGICAL']/mets:div[@TYPE='DSpace Item']/mets:fptr/@FILEID"/> + </xsl:apply-templates> + </xsl:when> + <!-- Special case for handling ORE resource maps stored as DSpace bitstreams --> + <xsl:when test="./mets:fileSec/mets:fileGrp[@USE='ORE']"> + <xsl:apply-templates select="./mets:fileSec/mets:fileGrp[@USE='ORE']"/> + </xsl:when> + <xsl:otherwise> + <h2><i18n:text>xmlui.dri2xhtml.METS-1.0.item-files-head</i18n:text></h2> + <table class="ds-table file-list"> + <tr class="ds-table-header-row"> + <th><i18n:text>xmlui.dri2xhtml.METS-1.0.item-files-file</i18n:text></th> + <th><i18n:text>xmlui.dri2xhtml.METS-1.0.item-files-size</i18n:text></th> + <th><i18n:text>xmlui.dri2xhtml.METS-1.0.item-files-format</i18n:text></th> + <th><i18n:text>xmlui.dri2xhtml.METS-1.0.item-files-view</i18n:text></th> + </tr> + <tr> + <td colspan="4"> + <p><i18n:text>xmlui.dri2xhtml.METS-1.0.item-no-files</i18n:text></p> + </td> + </tr> + </table> + </xsl:otherwise> + </xsl:choose> + + <!-- Generate the Creative Commons license information from the file section (DSpace deposit license hidden by default)--> + <xsl:apply-templates select="./mets:fileSec/mets:fileGrp[@USE='CC-LICENSE']"/> + + </xsl:template> + + + <xsl:template match="dim:dim" mode="itemSummaryView-DIM"> + <div class="item-summary-view-metadata"> + <xsl:call-template name="itemSummaryView-DIM-fields"/> + </div> + </xsl:template> + + <xsl:template name="itemSummaryView-DIM-fields"> + <xsl:param name="clause" select="'1'"/> + <xsl:param name="phase" select="'even'"/> + <xsl:variable name="otherPhase"> + <xsl:choose> + <xsl:when test="$phase = 'even'"> + <xsl:text>odd</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>even</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:choose> + <!-- Title row --> + <xsl:when test="$clause = 1"> + + <xsl:choose> + <xsl:when test="descendant::text() and (count(dim:field[@element='title'][not(@qualifier)]) > 1)"> + <!-- display first title as h1 --> + <h1> + <xsl:value-of select="dim:field[@element='title'][not(@qualifier)][1]/node()"/> + </h1> + <div class="simple-item-view-other"> + <span class="bold"><i18n:text>xmlui.dri2xhtml.METS-1.0.item-title</i18n:text>:</span> + <span> + <xsl:for-each select="dim:field[@element='title'][not(@qualifier)]"> + <xsl:value-of select="./node()"/> + <xsl:if test="count(following-sibling::dim:field[@element='title'][not(@qualifier)]) != 0"> + <xsl:text>; </xsl:text> + <br/> + </xsl:if> + </xsl:for-each> + </span> + </div> + </xsl:when> + <xsl:when test="dim:field[@element='title'][descendant::text()] and count(dim:field[@element='title'][not(@qualifier)]) = 1"> + <h1> + <xsl:value-of select="dim:field[@element='title'][not(@qualifier)][1]/node()"/> + </h1> + </xsl:when> + <xsl:otherwise> + <h1> + <i18n:text>xmlui.dri2xhtml.METS-1.0.no-title</i18n:text> + </h1> + </xsl:otherwise> + </xsl:choose> + <xsl:call-template name="itemSummaryView-DIM-fields"> + <xsl:with-param name="clause" select="($clause + 1)"/> + <xsl:with-param name="phase" select="$otherPhase"/> + </xsl:call-template> + </xsl:when> + + <!-- Author(s) row --> + <xsl:when test="$clause = 2 and (dim:field[@element='contributor'][@qualifier='author' and descendant::text()] or dim:field[@element='creator' and descendant::text()] or dim:field[@element='contributor' and descendant::text()])"> + <div class="simple-item-view-authors"> + <xsl:choose> + <xsl:when test="dim:field[@element='contributor'][@qualifier='author']"> + <xsl:for-each select="dim:field[@element='contributor'][@qualifier='author']"> + <span> + <xsl:if test="@authority"> + <xsl:attribute name="class"><xsl:text>ds-dc_contributor_author-authority</xsl:text></xsl:attribute> + </xsl:if> + <xsl:copy-of select="node()"/> + </span> + <xsl:if test="count(following-sibling::dim:field[@element='contributor'][@qualifier='author']) != 0"> + <xsl:text>; </xsl:text> + </xsl:if> + </xsl:for-each> + </xsl:when> + <xsl:when test="dim:field[@element='creator']"> + <xsl:for-each select="dim:field[@element='creator']"> + <xsl:copy-of select="node()"/> + <xsl:if test="count(following-sibling::dim:field[@element='creator']) != 0"> + <xsl:text>; </xsl:text> + </xsl:if> + </xsl:for-each> + </xsl:when> + <xsl:when test="dim:field[@element='contributor']"> + <xsl:for-each select="dim:field[@element='contributor']"> + <xsl:copy-of select="node()"/> + <xsl:if test="count(following-sibling::dim:field[@element='contributor']) != 0"> + <xsl:text>; </xsl:text> + </xsl:if> + </xsl:for-each> + </xsl:when> + <xsl:otherwise> + <i18n:text>xmlui.dri2xhtml.METS-1.0.no-author</i18n:text> + </xsl:otherwise> + </xsl:choose> + </div> + <xsl:call-template name="itemSummaryView-DIM-fields"> + <xsl:with-param name="clause" select="($clause + 1)"/> + <xsl:with-param name="phase" select="$otherPhase"/> + </xsl:call-template> + </xsl:when> + + <!-- identifier.uri row --> + <xsl:when test="$clause = 3 and (dim:field[@element='identifier' and @qualifier='uri' and descendant::text()])"> + <div class="simple-item-view-other"> + <span class="bold"><i18n:text>xmlui.dri2xhtml.METS-1.0.item-uri</i18n:text>:</span> + <span> + <xsl:for-each select="dim:field[@element='identifier' and @qualifier='uri']"> + <a> + <xsl:attribute name="href"> + <xsl:copy-of select="./node()"/> + </xsl:attribute> + <xsl:copy-of select="./node()"/> + </a> + <xsl:if test="count(following-sibling::dim:field[@element='identifier' and @qualifier='uri']) != 0"> + <br/> + </xsl:if> + </xsl:for-each> + </span> + </div> + <xsl:call-template name="itemSummaryView-DIM-fields"> + <xsl:with-param name="clause" select="($clause + 1)"/> + <xsl:with-param name="phase" select="$otherPhase"/> + </xsl:call-template> + </xsl:when> + + <!-- date.issued row --> + <xsl:when test="$clause = 4 and (dim:field[@element='date' and @qualifier='issued' and descendant::text()])"> + <div class="simple-item-view-other"> + <span class="bold"><i18n:text>xmlui.dri2xhtml.METS-1.0.item-date</i18n:text>:</span> + <span> + <xsl:for-each select="dim:field[@element='date' and @qualifier='issued']"> + <xsl:copy-of select="substring(./node(),1,10)"/> + <xsl:if test="count(following-sibling::dim:field[@element='date' and @qualifier='issued']) != 0"> + <br/> + </xsl:if> + </xsl:for-each> + </span> + </div> + <xsl:call-template name="itemSummaryView-DIM-fields"> + <xsl:with-param name="clause" select="($clause + 1)"/> + <xsl:with-param name="phase" select="$otherPhase"/> + </xsl:call-template> + </xsl:when> + + <!-- Abstract row --> + <xsl:when test="$clause = 5 and (dim:field[@element='description' and @qualifier='abstract' and descendant::text()])"> + <div class="simple-item-view-description"> + <h3><i18n:text>xmlui.dri2xhtml.METS-1.0.item-abstract</i18n:text>:</h3> + <div> + <xsl:if test="count(dim:field[@element='description' and @qualifier='abstract']) > 1"> + <div class="spacer"> </div> + </xsl:if> + <xsl:for-each select="dim:field[@element='description' and @qualifier='abstract']"> + <xsl:choose> + <xsl:when test="node()"> + <xsl:copy-of select="node()"/> + </xsl:when> + <xsl:otherwise> + <xsl:text> </xsl:text> + </xsl:otherwise> + </xsl:choose> + <xsl:if test="count(following-sibling::dim:field[@element='description' and @qualifier='abstract']) != 0"> + <div class="spacer"> </div> + </xsl:if> + </xsl:for-each> + <xsl:if test="count(dim:field[@element='description' and @qualifier='abstract']) > 1"> + <div class="spacer"> </div> + </xsl:if> + </div> + </div> + <xsl:call-template name="itemSummaryView-DIM-fields"> + <xsl:with-param name="clause" select="($clause + 1)"/> + <xsl:with-param name="phase" select="$otherPhase"/> + </xsl:call-template> + </xsl:when> + + <!-- Description row --> + <xsl:when test="$clause = 6 and (dim:field[@element='description' and not(@qualifier) and descendant::text()])"> + <div class="simple-item-view-description"> + <h3 class="bold"><i18n:text>xmlui.dri2xhtml.METS-1.0.item-description</i18n:text>:</h3> + <div> + <xsl:if test="count(dim:field[@element='description' and not(@qualifier)]) > 1 and not(count(dim:field[@element='description' and @qualifier='abstract']) > 1)"> + <div class="spacer"> </div> + </xsl:if> + <xsl:for-each select="dim:field[@element='description' and not(@qualifier)]"> + <xsl:copy-of select="./node()"/> + <xsl:if test="count(following-sibling::dim:field[@element='description' and not(@qualifier)]) != 0"> + <div class="spacer"> </div> + </xsl:if> + </xsl:for-each> + <xsl:if test="count(dim:field[@element='description' and not(@qualifier)]) > 1"> + <div class="spacer"> </div> + </xsl:if> + </div> + </div> + <xsl:call-template name="itemSummaryView-DIM-fields"> + <xsl:with-param name="clause" select="($clause + 1)"/> + <xsl:with-param name="phase" select="$otherPhase"/> + </xsl:call-template> + </xsl:when> + + <xsl:when test="$clause = 7 and $ds_item_view_toggle_url != ''"> + <p class="ds-paragraph item-view-toggle item-view-toggle-bottom"> + <a> + <xsl:attribute name="href"><xsl:value-of select="$ds_item_view_toggle_url"/></xsl:attribute> + <i18n:text>xmlui.ArtifactBrowser.ItemViewer.show_full</i18n:text> + </a> + </p> + </xsl:when> + + <!-- recurse without changing phase if we didn't output anything --> + <xsl:otherwise> + <!-- IMPORTANT: This test should be updated if clauses are added! --> + <xsl:if test="$clause < 8"> + <xsl:call-template name="itemSummaryView-DIM-fields"> + <xsl:with-param name="clause" select="($clause + 1)"/> + <xsl:with-param name="phase" select="$phase"/> + </xsl:call-template> + </xsl:if> + </xsl:otherwise> + </xsl:choose> + + <!-- Generate the Creative Commons license information from the file section (DSpace deposit license hidden by default) --> + <xsl:apply-templates select="mets:fileSec/mets:fileGrp[@USE='CC-LICENSE']"/> + </xsl:template> + + + <xsl:template match="dim:dim" mode="itemDetailView-DIM"> + <table class="ds-includeSet-table detailtable"> + <xsl:apply-templates mode="itemDetailView-DIM"/> + </table> + <span class="Z3988"> + <xsl:attribute name="title"> + <xsl:call-template name="renderCOinS"/> + </xsl:attribute> +  <!-- non-breaking space to force separating the end tag --> + </span> + <xsl:copy-of select="$SFXLink" /> + </xsl:template> + + <xsl:template match="dim:field" mode="itemDetailView-DIM"> + <tr> + <xsl:attribute name="class"> + <xsl:text>ds-table-row </xsl:text> + <xsl:if test="(position() div 2 mod 2 = 0)">even </xsl:if> + <xsl:if test="(position() div 2 mod 2 = 1)">odd </xsl:if> + </xsl:attribute> + <td class="label-cell"> + <xsl:value-of select="./@mdschema"/> + <xsl:text>.</xsl:text> + <xsl:value-of select="./@element"/> + <xsl:if test="./@qualifier"> + <xsl:text>.</xsl:text> + <xsl:value-of select="./@qualifier"/> + </xsl:if> + </td> + <td> + <xsl:copy-of select="./node()"/> + <xsl:if test="./@authority and ./@confidence"> + <xsl:call-template name="authorityConfidenceIcon"> + <xsl:with-param name="confidence" select="./@confidence"/> + </xsl:call-template> + </xsl:if> + </td> + <td><xsl:value-of select="./@language"/></td> + </tr> + </xsl:template> + + <!-- don't render the item-view-toggle automatically in the summary view, only when it gets called --> + <xsl:template match="dri:p[contains(@rend , 'item-view-toggle') and + (preceding-sibling::dri:referenceSet[@type = 'summaryView'] or following-sibling::dri:referenceSet[@type = 'summaryView'])]"> + </xsl:template> + + <!-- don't render the head on the item view page --> + <xsl:template match="dri:div[@n='item-view']/dri:head" priority="5"> + </xsl:template> + + <xsl:template match="mets:fileGrp[@USE='CONTENT']"> + <xsl:param name="context"/> + <xsl:param name="primaryBitstream" select="-1"/> + + <h2><i18n:text>xmlui.dri2xhtml.METS-1.0.item-files-head</i18n:text></h2> + <div class="file-list"> + <xsl:choose> + <!-- If one exists and it's of text/html MIME type, only display the primary bitstream --> + <xsl:when test="mets:file[@ID=$primaryBitstream]/@MIMETYPE='text/html'"> + <xsl:apply-templates select="mets:file[@ID=$primaryBitstream]"> + <xsl:with-param name="context" select="$context"/> + </xsl:apply-templates> + </xsl:when> + <!-- Otherwise, iterate over and display all of them --> + <xsl:otherwise> + <xsl:apply-templates select="mets:file"> + <!--Do not sort any more bitstream order can be changed--> + <!--<xsl:sort data-type="number" select="boolean(./@ID=$primaryBitstream)" order="descending" />--> + <!--<xsl:sort select="mets:FLocat[@LOCTYPE='URL']/@xlink:title"/>--> + <xsl:with-param name="context" select="$context"/> + </xsl:apply-templates> + </xsl:otherwise> + </xsl:choose> + </div> + </xsl:template> + + <xsl:template match="mets:file"> + <xsl:param name="context" select="."/> + <div class="file-wrapper clearfix"> + <div class="thumbnail-wrapper" style="width: {$thumbnail.maxwidth}px;"> + <a class="image-link"> + <xsl:attribute name="href"> + <xsl:value-of select="mets:FLocat[@LOCTYPE='URL']/@xlink:href"/> + </xsl:attribute> + <xsl:choose> + <xsl:when test="$context/mets:fileSec/mets:fileGrp[@USE='THUMBNAIL']/ + mets:file[@GROUPID=current()/@GROUPID]"> + <img alt="Thumbnail"> + <xsl:attribute name="src"> + <xsl:value-of select="$context/mets:fileSec/mets:fileGrp[@USE='THUMBNAIL']/ + mets:file[@GROUPID=current()/@GROUPID]/mets:FLocat[@LOCTYPE='URL']/@xlink:href"/> + </xsl:attribute> + </img> + </xsl:when> + <xsl:otherwise> + <img alt="Icon" src="{concat($theme-path, '/images/mime.png')}" style="height: {$thumbnail.maxheight}px;"/> + </xsl:otherwise> + </xsl:choose> + <xsl:if test="contains(mets:FLocat[@LOCTYPE='URL']/@xlink:href,'isAllowed=n')"> + <img> + <xsl:attribute name="src"> + <xsl:value-of select="$context-path"/> + <xsl:text>/static/icons/lock24.png</xsl:text> + </xsl:attribute> + <xsl:attribute name="alt">xmlui.dri2xhtml.METS-1.0.blocked</xsl:attribute> + <xsl:attribute name="attr" namespace="http://apache.org/cocoon/i18n/2.1">alt</xsl:attribute> + </img> + </xsl:if> + </a> + </div> + <div class="file-metadata" style="height: {$thumbnail.maxheight}px;"> + <div> + <span class="bold"> + <i18n:text>xmlui.dri2xhtml.METS-1.0.item-files-name</i18n:text> + <xsl:text>:</xsl:text> + </span> + <span> + <xsl:attribute name="title"><xsl:value-of select="mets:FLocat[@LOCTYPE='URL']/@xlink:title"/></xsl:attribute> + <xsl:value-of select="util:shortenString(mets:FLocat[@LOCTYPE='URL']/@xlink:title, 17, 5)"/> + </span> + </div> + <!-- File size always comes in bytes and thus needs conversion --> + <div> + <span class="bold"> + <i18n:text>xmlui.dri2xhtml.METS-1.0.item-files-size</i18n:text> + <xsl:text>:</xsl:text> + </span> + <span> + <xsl:choose> + <xsl:when test="@SIZE < 1024"> + <xsl:value-of select="@SIZE"/> + <i18n:text>xmlui.dri2xhtml.METS-1.0.size-bytes</i18n:text> + </xsl:when> + <xsl:when test="@SIZE < 1024 * 1024"> + <xsl:value-of select="substring(string(@SIZE div 1024),1,5)"/> + <i18n:text>xmlui.dri2xhtml.METS-1.0.size-kilobytes</i18n:text> + </xsl:when> + <xsl:when test="@SIZE < 1024 * 1024 * 1024"> + <xsl:value-of select="substring(string(@SIZE div (1024 * 1024)),1,5)"/> + <i18n:text>xmlui.dri2xhtml.METS-1.0.size-megabytes</i18n:text> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="substring(string(@SIZE div (1024 * 1024 * 1024)),1,5)"/> + <i18n:text>xmlui.dri2xhtml.METS-1.0.size-gigabytes</i18n:text> + </xsl:otherwise> + </xsl:choose> + </span> + </div> + <!-- Lookup File Type description in local messages.xml based on MIME Type. + In the original DSpace, this would get resolved to an application via + the Bitstream Registry, but we are constrained by the capabilities of METS + and can't really pass that info through. --> + <div> + <span class="bold"> + <i18n:text>xmlui.dri2xhtml.METS-1.0.item-files-format</i18n:text> + <xsl:text>:</xsl:text> + </span> + <span> + <xsl:call-template name="getFileTypeDesc"> + <xsl:with-param name="mimetype"> + <xsl:value-of select="substring-before(@MIMETYPE,'/')"/> + <xsl:text>/</xsl:text> + <xsl:value-of select="substring-after(@MIMETYPE,'/')"/> + </xsl:with-param> + </xsl:call-template> + </span> + </div> + <!----> + <!-- Display the contents of 'Description' only if bitstream contains a description --> + <xsl:if test="mets:FLocat[@LOCTYPE='URL']/@xlink:label != ''"> + <div> + <span class="bold"> + <i18n:text>xmlui.dri2xhtml.METS-1.0.item-files-description</i18n:text> + <xsl:text>:</xsl:text> + </span> + <span> + <xsl:attribute name="title"><xsl:value-of select="mets:FLocat[@LOCTYPE='URL']/@xlink:label"/></xsl:attribute> + <!--<xsl:value-of select="mets:FLocat[@LOCTYPE='URL']/@xlink:label"/>--> + <xsl:value-of select="util:shortenString(mets:FLocat[@LOCTYPE='URL']/@xlink:label, 17, 5)"/> + </span> + </div> + </xsl:if> + </div> + <div class="file-link" style="height: {$thumbnail.maxheight}px;"> + <xsl:choose> + <xsl:when test="@ADMID"> + <xsl:call-template name="display-rights"/> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="view-open"/> + </xsl:otherwise> + </xsl:choose> + </div> + </div> + </xsl:template> + + <xsl:template name="view-open"> + <a> + <xsl:attribute name="href"> + <xsl:value-of select="mets:FLocat[@LOCTYPE='URL']/@xlink:href"/> + </xsl:attribute> + <i18n:text>xmlui.dri2xhtml.METS-1.0.item-files-viewOpen</i18n:text> + </a> + </xsl:template> + + <xsl:template name="display-rights"> + <xsl:variable name="file_id" select="jstring:replaceAll(jstring:replaceAll(string(@ADMID), '_METSRIGHTS', ''), 'rightsMD_', '')"/> + <xsl:variable name="rights_declaration" select="../../../mets:amdSec/mets:rightsMD[@ID = concat('rightsMD_', $file_id, '_METSRIGHTS')]/mets:mdWrap/mets:xmlData/rights:RightsDeclarationMD"/> + <xsl:variable name="rights_context" select="$rights_declaration/rights:Context"/> + <xsl:variable name="users"> + <xsl:choose> + <xsl:when test="not ($rights_context)"> + <xsl:text>administrators only</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:for-each select="$rights_declaration/*"> + <xsl:value-of select="rights:UserName"/> + <xsl:choose> + <xsl:when test="rights:UserName/@USERTYPE = 'GROUP'"> + <xsl:text> (group)</xsl:text> + </xsl:when> + <xsl:when test="rights:UserName/@USERTYPE = 'INDIVIDUAL'"> + <xsl:text> (individual)</xsl:text> + </xsl:when> + </xsl:choose> + <xsl:if test="position() != last()">, </xsl:if> <!-- TODO fix ending comma --> + </xsl:for-each> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="alt-text"><i18n:text>xmlui.dri2xhtml.METS-1.0.item-files-access-rights</i18n:text> <xsl:value-of select="$users"/></xsl:variable> + + <xsl:choose> + <xsl:when test="(not ($rights_context/@CONTEXTCLASS = 'GENERAL PUBLIC') and ($rights_context/rights:Permissions/@DISPLAY = 'true')) or not ($rights_context)"> + <a href="{mets:FLocat[@LOCTYPE='URL']/@xlink:href}"> + <img width="64" height="64" src="{concat($theme-path,'/images/Crystal_Clear_action_lock3_64px.png')}"> + <xsl:attribute name="title"><xsl:value-of select="$alt-text"/></xsl:attribute> + <xsl:attribute name="alt"><xsl:value-of select="$alt-text"/></xsl:attribute> + </img> + <!-- icon source: http://commons.wikimedia.org/wiki/File:Crystal_Clear_action_lock3.png --> + </a> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="view-open"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + +</xsl:stylesheet> diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/general/choice-authority-control.xsl b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/general/choice-authority-control.xsl new file mode 100644 index 0000000..cb5db51 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/aspect/general/choice-authority-control.xsl @@ -0,0 +1,410 @@ +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<!-- + Rendering of the authority control related pages. + + Author: art.lowel at atmire.com + Author: lieven.droogmans at atmire.com + Author: ben at atmire.com + Author: Alexey Maslov + +--> + +<xsl:stylesheet xmlns:i18n="http://apache.org/cocoon/i18n/2.1" + xmlns:dri="http://di.tamu.edu/DRI/1.0/" + xmlns:mets="http://www.loc.gov/METS/" + xmlns:xlink="http://www.w3.org/TR/xlink/" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:dim="http://www.dspace.org/xmlns/dspace/dim" + xmlns:xhtml="http://www.w3.org/1999/xhtml" + xmlns:mods="http://www.loc.gov/mods/v3" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns="http://www.w3.org/1999/xhtml" + exclude-result-prefixes="i18n dri mets xlink xsl dim xhtml mods dc"> + + <xsl:output indent="yes"/> + + <!-- =============================================================== --> + <!-- - - - - - New templates for Choice/Authority control - - - - - --> + + <!-- choose 'hidden' for invisible auth, 'text' lets CSS control it. --> + <xsl:variable name="authorityInputType" select="'text'"/> + + <!-- add button to invoke Choices lookup popup.. assume + - that the context is a dri:field, where dri:params/@choices is true. + --> + <xsl:template name="addLookupButton"> + <xsl:param name="isName" select="'missing value'"/> + <!-- optional param if you want to send authority value to diff field --> + <xsl:param name="authorityInput" select="concat(@n,'_authority')"/> + <!-- optional param for confidence indicator ID --> + <xsl:param name="confIndicator" select="''"/> + <input type="button" name="{concat('lookup_',@n)}" class="ds-button-field ds-add-button" > + <xsl:attribute name="value"> + <xsl:text>Lookup</xsl:text> + <xsl:if test="contains(dri:params/@operations,'add')"> + <xsl:text> & Add</xsl:text> + </xsl:if> + </xsl:attribute> + <xsl:attribute name="onClick"> + <xsl:text>javascript:DSpaceChoiceLookup('</xsl:text> + <!-- URL --> + <xsl:value-of select="concat($context-path,'/admin/lookup')"/> + <xsl:text>', '</xsl:text> + <!-- field --> + <xsl:value-of select="dri:params/@choices"/> + <xsl:text>', '</xsl:text> + <!-- formID --> + <xsl:value-of select="translate(ancestor::dri:div[@interactive='yes']/@id,'.','_')"/> + <xsl:text>', '</xsl:text> + <!-- valueInput --> + <xsl:value-of select="@n"/> + <xsl:text>', '</xsl:text> + <!-- authorityInput, name of field to get authority --> + <xsl:value-of select="$authorityInput"/> + <xsl:text>', '</xsl:text> + <!-- Confidence Indicator's ID so lookup can frob it --> + <xsl:value-of select="$confIndicator"/> + <xsl:text>', </xsl:text> + <!-- Collection ID for context --> + <xsl:choose> + <xsl:when test="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='choice'][@qualifier='collection']"> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='choice'][@qualifier='collection']"/> + </xsl:when> + <xsl:otherwise> + <xsl:text>-1</xsl:text> + </xsl:otherwise> + </xsl:choose> + <xsl:text>, </xsl:text> + <!-- isName --> + <xsl:value-of select="$isName"/> + <xsl:text>, </xsl:text> + <!-- isRepating --> + <xsl:value-of select="boolean(contains(dri:params/@operations,'add'))"/> + <xsl:text>);</xsl:text> + </xsl:attribute> + </input> + </xsl:template> + + <!-- Fragment to display an authority confidence icon. + - Insert an invisible 1x1 image which gets "covered" by background + - image as dictated by the CSS, so icons are easily adjusted in CSS. + - "confidence" param is confidence _value_, i.e. symbolic name + --> + <xsl:template name="authorityConfidenceIcon"> + <!-- default confidence value won't show any image. --> + <xsl:param name="confidence" select="'blank'"/> + <xsl:param name="id" select="''"/> + <xsl:variable name="lcConfidence" select="translate($confidence,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')"/> + <img i18n:attr="title"> + <xsl:if test="string-length($id) > 0"> + <xsl:attribute name="id"> + <xsl:value-of select="$id"/> + </xsl:attribute> + </xsl:if> + <xsl:attribute name="src"> + <xsl:value-of select="concat($theme-path,'/images/authority_control/invisible.gif')"/> + </xsl:attribute> + <xsl:attribute name="class"> + <xsl:text>ds-authority-confidence </xsl:text> + <xsl:choose> + <xsl:when test="string-length($lcConfidence) > 0"> + <xsl:value-of select="concat('cf-',$lcConfidence,' ')"/> + </xsl:when> + <xsl:otherwise> + <xsl:text>cf-blank </xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:text>xmlui.authority.confidence.description.cf_</xsl:text> + <xsl:value-of select="$lcConfidence"/> + </xsl:attribute> + </img> + </xsl:template> + + <!-- Fragment to include an authority confidence hidden input + - assumes @n is the name of the field. + - param is confidence _value_, i.e. integer 0-6 + --> + <xsl:template name="authorityConfidenceInput"> + <xsl:param name="confidence"/> + <xsl:param name="name"/> + <input class="ds-authority-confidence-input" type="hidden"> + <xsl:attribute name="name"> + <xsl:value-of select="$name"/> + </xsl:attribute> + <xsl:attribute name="value"> + <xsl:value-of select="$confidence"/> + </xsl:attribute> + </input> + </xsl:template> + + + <!-- insert fields needed by Scriptaculous autocomplete --> + <xsl:template name="addAuthorityAutocompleteWidgets"> + <!-- "spinner" indicator to signal "loading", managed by autocompleter --> + <!-- put it next to input field --> + <span style="display:none;"> + <xsl:attribute name="id"> + <xsl:value-of select="concat(translate(@id,'.','_'),'_indicator')"/> + </xsl:attribute> + <img alt="Loading..."> + <xsl:attribute name="src"> + <xsl:value-of select="concat($theme-path,'/images/authority_control/suggest-indicator.gif')"/> + </xsl:attribute> + </img> + </span> + <!-- This is the anchor for autocomplete popup, div id="..._container" --> + <!-- put it below input field, give ID to autocomplete below --> + <div class="autocomplete"> + <xsl:attribute name="id"> + <xsl:value-of select="concat(translate(@id,'.','_'),'_container')"/> + </xsl:attribute> + <xsl:text> </xsl:text> + </div> + </xsl:template> + + <!-- adds autocomplete fields and setup script to "normal" submit input --> + <xsl:template name="addAuthorityAutocomplete"> + <xsl:param name="confidenceIndicatorID" select="''"/> + <xsl:param name="confidenceName" select="''"/> + <xsl:call-template name="addAuthorityAutocompleteWidgets"/> + <xsl:call-template name="autocompleteSetup"> + <xsl:with-param name="formID" select="translate(ancestor::dri:div[@interactive='yes']/@id,'.','_')"/> + <xsl:with-param name="metadataField" select="@n"/> + <xsl:with-param name="inputName" select="@n"/> + <xsl:with-param name="authorityName" select="concat(@n,'_authority')"/> + <xsl:with-param name="containerID" select="concat(translate(@id,'.','_'),'_container')"/> + <xsl:with-param name="indicatorID" select="concat(translate(@id,'.','_'),'_indicator')"/> + <xsl:with-param name="isClosed" select="contains(dri:params/@choicesClosed,'true')"/> + <xsl:with-param name="confidenceIndicatorID" select="$confidenceIndicatorID"/> + <xsl:with-param name="confidenceName" select="$confidenceName"/> + <xsl:with-param name="collectionID"> + <xsl:choose> + <xsl:when test="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='choice'][@qualifier='collection']"> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='choice'][@qualifier='collection']"/> + </xsl:when> + <xsl:otherwise> + <xsl:text>-1</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:with-param> + </xsl:call-template> + </xsl:template> + + <!-- generate the script that sets up autocomplete feature on input field --> + <!-- ..it has lots of params --> + <xsl:template name="autocompleteSetup"> + <xsl:param name="formID" select="'missing value'"/> + <xsl:param name="metadataField" select="'missing value'"/> + <xsl:param name="inputName" select="'missing value'"/> + <xsl:param name="authorityName" select="''"/> + <xsl:param name="containerID" select="'missing value'"/> + <xsl:param name="collectionID" select="'-1'"/> + <xsl:param name="indicatorID" select="'missing value'"/> + <xsl:param name="confidenceIndicatorID" select="''"/> + <xsl:param name="confidenceName" select="''"/> + <xsl:param name="isClosed" select="'false'"/> + <script type="text/javascript"> + <xsl:text>runAfterJSImports.add(function() {</xsl:text> + <xsl:text>$(document).ready(function() {</xsl:text> + <xsl:text>var gigo = DSpaceSetupAutocomplete('</xsl:text> + <xsl:value-of select="$formID"/> + <xsl:text>', { metadataField: '</xsl:text> + <xsl:value-of select="$metadataField"/> + <xsl:text>', isClosed: '</xsl:text> + <xsl:value-of select="$isClosed"/> + <xsl:text>', inputName: '</xsl:text> + <xsl:value-of select="$inputName"/> + <xsl:text>', authorityName: '</xsl:text> + <xsl:value-of select="$authorityName"/> + <xsl:text>', containerID: '</xsl:text> + <xsl:value-of select="$containerID"/> + <xsl:text>', indicatorID: '</xsl:text> + <xsl:value-of select="$indicatorID"/> + <xsl:text>', confidenceIndicatorID: '</xsl:text> + <xsl:value-of select="$confidenceIndicatorID"/> + <xsl:text>', confidenceName: '</xsl:text> + <xsl:value-of select="$confidenceName"/> + <xsl:text>', collection: </xsl:text> + <xsl:value-of select="$collectionID"/> + <xsl:text>, contextPath: '</xsl:text> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='contextPath'][not(@qualifier)]"/> + <xsl:text>'});</xsl:text> + <xsl:text>});</xsl:text> + <xsl:text>});</xsl:text> + </script> + </xsl:template> + + <!-- add the extra _authority{_n?} and _confidence input fields --> + <xsl:template name="authorityInputFields"> + <xsl:param name="name" select="''"/> + <xsl:param name="id" select="''"/> + <xsl:param name="position" select="''"/> + <xsl:param name="authValue" select="''"/> + <xsl:param name="confValue" select="''"/> + <xsl:param name="confIndicatorID" select="''"/> + <xsl:param name="unlockButton" select="''"/> + <xsl:param name="unlockHelp" select="''"/> + <xsl:variable name="authFieldID" select="concat(translate(@id,'.','_'),'_authority')"/> + <xsl:variable name="confFieldID" select="concat(translate(@id,'.','_'),'_confidence')"/> + <!-- the authority key value --> + <input> + <xsl:attribute name="class"> + <xsl:text>ds-authority-value </xsl:text> + <xsl:if test="$unlockButton"> + <xsl:text>ds-authority-visible </xsl:text> + </xsl:if> + </xsl:attribute> + <xsl:attribute name="type"><xsl:value-of select="$authorityInputType"/></xsl:attribute> + <xsl:attribute name="readonly"><xsl:text>readonly</xsl:text></xsl:attribute> + <xsl:attribute name="name"> + <xsl:value-of select="concat($name,'_authority')"/> + <xsl:if test="$position"> + <xsl:value-of select="concat('_', $position)"/> + </xsl:if> + </xsl:attribute> + <xsl:if test="$id"> + <xsl:attribute name="id"> + <xsl:value-of select="$authFieldID"/> + </xsl:attribute> + </xsl:if> + <xsl:attribute name="value"> + <xsl:value-of select="$authValue"/> + </xsl:attribute> + <!-- this updates confidence after a manual change to authority value --> + <xsl:attribute name="onChange"> + <xsl:text>javascript: return DSpaceAuthorityOnChange(this, '</xsl:text> + <xsl:value-of select="$confFieldID"/> + <xsl:text>','</xsl:text> + <xsl:value-of select="$confIndicatorID"/> + <xsl:text>');</xsl:text> + </xsl:attribute> + </input> + <!-- optional "unlock" button on (visible) authority value field --> + <xsl:if test="$unlockButton"> + <input type="image" class="ds-authority-lock is-locked " value=""> + <xsl:attribute name="onClick"> + <xsl:text>javascript: return DSpaceToggleAuthorityLock(this, '</xsl:text> + <xsl:value-of select="$authFieldID"/> + <xsl:text>');</xsl:text> + </xsl:attribute> + <xsl:attribute name="src"> + <xsl:value-of select="concat($theme-path,'/images/authority_control/invisible.gif')"/> + </xsl:attribute> + <xsl:attribute name="i18n:attr">title</xsl:attribute> + <xsl:attribute name="title"> + <xsl:value-of select="$unlockHelp"/> + </xsl:attribute> + </input> + </xsl:if> + <input class="ds-authority-confidence-input" type="hidden"> + <xsl:attribute name="name"> + <xsl:value-of select="concat($name,'_confidence')"/> + <xsl:if test="$position"> + <xsl:value-of select="concat('_', $position)"/> + </xsl:if> + </xsl:attribute> + <xsl:if test="$id"> + <xsl:attribute name="id"> + <xsl:value-of select="$confFieldID"/> + </xsl:attribute> + </xsl:if> + <xsl:attribute name="value"> + <xsl:value-of select="$confValue"/> + </xsl:attribute> + </input> + </xsl:template> + + <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + <!-- Special Transformations for Choice Authority lookup popup page --> + + <!-- indicator spinner --> + <xsl:template match="dri:item[@id='aspect.general.ChoiceLookupTransformer.item.select']/dri:figure"> + <img id="lookup_indicator_id" alt="Loading..." style="display:none;"> + <xsl:attribute name="src"> + <xsl:value-of select="concat($theme-path,'/images/authority_control/lookup-indicator.gif')"/> + </xsl:attribute> + </img> + </xsl:template> + + <!-- This inline JS must be added to the popup page for choice lookups --> + <xsl:template name="choiceLookupPopUpSetup"> + <script type="text/javascript"> + var form = document.getElementById('aspect_general_ChoiceLookupTransformer_div_lookup'); + DSpaceChoicesSetup(form); + </script> + </xsl:template> + + <!-- Special select widget for lookup popup --> + <xsl:template match="dri:field[@id='aspect.general.ChoiceLookupTransformer.field.chooser']"> + <div> + <select onChange="javascript:DSpaceChoicesSelectOnChange();"> + <xsl:call-template name="fieldAttributes"/> + <xsl:apply-templates/> + <xsl:comment>space filler because "unclosed" select annoys browsers</xsl:comment> + </select> + <img class="choices-lookup" id="lookup_indicator_id" alt="Loading..." style="display:none;"> + <xsl:attribute name="src"> + <xsl:value-of select="concat($theme-path,'/images/authority_control/lookup-indicator.gif')"/> + </xsl:attribute> + </img> + </div> + </xsl:template> + + <!-- Generate buttons with onClick attribute, since it is the easiest + - way to set a single event handler in a browser-independent manner. + --> + + <!-- choice popup "accept" button --> + <xsl:template match="dri:field[@id='aspect.general.ChoiceLookupTransformer.field.accept']"> + <xsl:call-template name="choiceLookupButton"> + <xsl:with-param name="onClick" select="'javascript:DSpaceChoicesAcceptOnClick();'"/> + </xsl:call-template> + </xsl:template> + + <!-- choice popup "more" button --> + <xsl:template match="dri:field[@id='aspect.general.ChoiceLookupTransformer.field.more']"> + <xsl:call-template name="choiceLookupButton"> + <xsl:with-param name="onClick" select="'javascript:DSpaceChoicesMoreOnClick();'"/> + </xsl:call-template> + </xsl:template> + + <!-- choice popup "cancel" button --> + <xsl:template match="dri:field[@id='aspect.general.ChoiceLookupTransformer.field.cancel']"> + <xsl:call-template name="choiceLookupButton"> + <xsl:with-param name="onClick" select="'javascript:DSpaceChoicesCancelOnClick();'"/> + </xsl:call-template> + </xsl:template> + + <!-- button markup: special handling needed because these must not be <input type=submit> --> + <xsl:template name="choiceLookupButton"> + <xsl:param name="onClick"/> + <input type="button" onClick="{$onClick}"> + <xsl:call-template name="fieldAttributes"/> + <xsl:attribute name="value"> + <xsl:choose> + <xsl:when test="./dri:value[@type='raw']"> + <xsl:value-of select="./dri:value[@type='raw']"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="./dri:value[@type='default']"/> + </xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <xsl:if test="dri:value/i18n:text"> + <xsl:attribute name="i18n:attr">value</xsl:attribute> + </xsl:if> + <xsl:apply-templates /> + </input> + </xsl:template> + +</xsl:stylesheet> diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/attribute-handlers.xsl b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/attribute-handlers.xsl new file mode 100644 index 0000000..678ecfb --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/attribute-handlers.xsl @@ -0,0 +1,208 @@ +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<!-- + Templates to cover the attribute calls. + + Author: art.lowel at atmire.com + Author: lieven.droogmans at atmire.com + Author: ben at atmire.com + Author: Alexey Maslov + +--> + +<xsl:stylesheet xmlns:i18n="http://apache.org/cocoon/i18n/2.1" + xmlns:dri="http://di.tamu.edu/DRI/1.0/" + xmlns:mets="http://www.loc.gov/METS/" + xmlns:xlink="http://www.w3.org/TR/xlink/" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:dim="http://www.dspace.org/xmlns/dspace/dim" + xmlns:xhtml="http://www.w3.org/1999/xhtml" + xmlns:mods="http://www.loc.gov/mods/v3" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns="http://www.w3.org/1999/xhtml" + exclude-result-prefixes="i18n dri mets xlink xsl dim xhtml mods dc"> + + <xsl:output indent="yes"/> + + <xsl:template match="@pagination"> + <xsl:param name="position"/> + <xsl:choose> + <xsl:when test=". = 'simple'"> + <div class="pagination clearfix {$position}"> + <p class="pagination-info"> + <i18n:translate> + <xsl:choose> + <xsl:when test="parent::node()/@itemsTotal = -1"> + <i18n:text>xmlui.dri2xhtml.structural.pagination-info.nototal</i18n:text> + </xsl:when> + <xsl:otherwise> + <i18n:text>xmlui.dri2xhtml.structural.pagination-info</i18n:text> + </xsl:otherwise> + </xsl:choose> + <i18n:param><xsl:value-of select="parent::node()/@firstItemIndex"/></i18n:param> + <i18n:param><xsl:value-of select="parent::node()/@lastItemIndex"/></i18n:param> + <i18n:param><xsl:value-of select="parent::node()/@itemsTotal"/></i18n:param> + </i18n:translate> + <!-- + <xsl:text>Now showing items </xsl:text> + <xsl:value-of select="parent::node()/@firstItemIndex"/> + <xsl:text>-</xsl:text> + <xsl:value-of select="parent::node()/@lastItemIndex"/> + <xsl:text> of </xsl:text> + <xsl:value-of select="parent::node()/@itemsTotal"/> + --> + </p> + <ul class="pagination-links"> + <li> + <xsl:if test="parent::node()/@previousPage"> + <a class="previous-page-link"> + <xsl:attribute name="href"> + <xsl:value-of select="parent::node()/@previousPage"/> + </xsl:attribute> + <i18n:text>xmlui.dri2xhtml.structural.pagination-previous</i18n:text> + </a> + </xsl:if> + </li> + <li> + <xsl:if test="parent::node()/@nextPage"> + <a class="next-page-link"> + <xsl:attribute name="href"> + <xsl:value-of select="parent::node()/@nextPage"/> + </xsl:attribute> + <i18n:text>xmlui.dri2xhtml.structural.pagination-next</i18n:text> + </a> + </xsl:if> + </li> + </ul> + </div> + </xsl:when> + <xsl:when test=". = 'masked'"> + <div class="pagination-masked clearfix {$position}"> + <p class="pagination-info"> + <i18n:translate> + <xsl:choose> + <xsl:when test="parent::node()/@itemsTotal = -1"> + <i18n:text>xmlui.dri2xhtml.structural.pagination-info.nototal</i18n:text> + </xsl:when> + <xsl:otherwise> + <i18n:text>xmlui.dri2xhtml.structural.pagination-info</i18n:text> + </xsl:otherwise> + </xsl:choose> + <i18n:param><xsl:value-of select="parent::node()/@firstItemIndex"/></i18n:param> + <i18n:param><xsl:value-of select="parent::node()/@lastItemIndex"/></i18n:param> + <i18n:param><xsl:value-of select="parent::node()/@itemsTotal"/></i18n:param> + </i18n:translate> + </p> + <ul class="pagination-links"> + <xsl:if test="not(parent::node()/@firstItemIndex = 0 or parent::node()/@firstItemIndex = 1)"> + <li> + <a class="previous-page-link"> + <xsl:attribute name="href"> + <xsl:value-of + select="substring-before(parent::node()/@pageURLMask,'{pageNum}')"/> + <xsl:value-of select="parent::node()/@currentPage - 1"/> + <xsl:value-of + select="substring-after(parent::node()/@pageURLMask,'{pageNum}')"/> + </xsl:attribute> + <i18n:text>xmlui.dri2xhtml.structural.pagination-previous</i18n:text> + </a> + </li> + </xsl:if> + <xsl:if test="(parent::node()/@currentPage - 4) > 0"> + <li class="first-page-link"> + <a> + <xsl:attribute name="href"> + <xsl:value-of select="substring-before(parent::node()/@pageURLMask,'{pageNum}')"/> + <xsl:text>1</xsl:text> + <xsl:value-of select="substring-after(parent::node()/@pageURLMask,'{pageNum}')"/> + </xsl:attribute> + <xsl:text>1</xsl:text> + </a> + <xsl:text> . . . </xsl:text> + </li> + </xsl:if> + <xsl:call-template name="offset-link"> + <xsl:with-param name="pageOffset">-3</xsl:with-param> + </xsl:call-template> + <xsl:call-template name="offset-link"> + <xsl:with-param name="pageOffset">-2</xsl:with-param> + </xsl:call-template> + <xsl:call-template name="offset-link"> + <xsl:with-param name="pageOffset">-1</xsl:with-param> + </xsl:call-template> + <xsl:call-template name="offset-link"> + <xsl:with-param name="pageOffset">0</xsl:with-param> + </xsl:call-template> + <xsl:call-template name="offset-link"> + <xsl:with-param name="pageOffset">1</xsl:with-param> + </xsl:call-template> + <xsl:call-template name="offset-link"> + <xsl:with-param name="pageOffset">2</xsl:with-param> + </xsl:call-template> + <xsl:call-template name="offset-link"> + <xsl:with-param name="pageOffset">3</xsl:with-param> + </xsl:call-template> + <xsl:if test="(parent::node()/@currentPage + 4) <= (parent::node()/@pagesTotal)"> + <li> + <xsl:text>. . .</xsl:text> + </li> + <li class="last-page-link"> + <a> + <xsl:attribute name="href"> + <xsl:value-of select="substring-before(parent::node()/@pageURLMask,'{pageNum}')"/> + <xsl:value-of select="parent::node()/@pagesTotal"/> + <xsl:value-of select="substring-after(parent::node()/@pageURLMask,'{pageNum}')"/> + </xsl:attribute> + <xsl:value-of select="parent::node()/@pagesTotal"/> + </a> + </li> + </xsl:if> + <xsl:if test="not(parent::node()/@lastItemIndex = parent::node()/@itemsTotal)"> + <li> + <a class="next-page-link"> + <xsl:attribute name="href"> + <xsl:value-of + select="substring-before(parent::node()/@pageURLMask,'{pageNum}')"/> + <xsl:value-of select="parent::node()/@currentPage + 1"/> + <xsl:value-of + select="substring-after(parent::node()/@pageURLMask,'{pageNum}')"/> + </xsl:attribute> + <i18n:text>xmlui.dri2xhtml.structural.pagination-next</i18n:text> + </a> + </li> + </xsl:if> + + </ul> + <xsl:if test="parent::node()/dri:div[@n = 'masked-page-control']"> + <xsl:apply-templates select="parent::node()/dri:div[@n='masked-page-control']/dri:div"> + <xsl:with-param name="position" select="$position"/> + </xsl:apply-templates> + </xsl:if> + </div> + </xsl:when> + </xsl:choose> + </xsl:template> + + <xsl:template match="dri:div[@n = 'masked-page-control']"> + <!--Do not render this division, this is handled by the xsl--> + </xsl:template> + + <xsl:template match="dri:div[@n ='search-controls-gear']"> + <xsl:param name="position"/> + <div> + <xsl:call-template name="standardAttributes"> + <xsl:with-param name="class"><xsl:value-of select="$position"/></xsl:with-param> + </xsl:call-template> + + <xsl:apply-templates/> + </div> + </xsl:template> + +</xsl:stylesheet> diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/elements.xsl b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/elements.xsl new file mode 100644 index 0000000..971932a --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/elements.xsl @@ -0,0 +1,95 @@ +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<!-- + Templates to cover the common dri elements. + + Author: art.lowel at atmire.com + Author: lieven.droogmans at atmire.com + Author: ben at atmire.com + Author: Alexey Maslov + +--> + +<xsl:stylesheet xmlns:i18n="http://apache.org/cocoon/i18n/2.1" + xmlns:dri="http://di.tamu.edu/DRI/1.0/" + xmlns:mets="http://www.loc.gov/METS/" + xmlns:xlink="http://www.w3.org/TR/xlink/" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:dim="http://www.dspace.org/xmlns/dspace/dim" + xmlns:xhtml="http://www.w3.org/1999/xhtml" + xmlns:mods="http://www.loc.gov/mods/v3" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns="http://www.w3.org/1999/xhtml" + exclude-result-prefixes="i18n dri mets xlink xsl dim xhtml mods dc"> + + <xsl:output indent="yes"/> + + <!--Removed the automatic font sizing for headers, because while I liked the idea, + in practice it's too unpredictable. + Also made all head's follow the same rule: count the number of ancestors that have + a head, that's the number after the 'h' in the tagname--> + <xsl:template name="renderHead"> + <xsl:param name="class"/> + <xsl:variable name="head_count" select="count(ancestor::dri:*[dri:head])"/> + <xsl:element name="h{$head_count}"> + <xsl:call-template name="standardAttributes"> + <xsl:with-param name="class" select="$class"/> + </xsl:call-template> + <xsl:apply-templates /> + </xsl:element> + </xsl:template> + + + <xsl:template match="dri:div/dri:head" priority="3"> + <xsl:call-template name="renderHead"> + <xsl:with-param name="class">ds-div-head</xsl:with-param> + </xsl:call-template> + </xsl:template> + + <!-- The second case is the header on tables, which always creates an HTML h3 element --> + <xsl:template match="dri:table/dri:head" priority="2"> + <xsl:call-template name="renderHead"> + <xsl:with-param name="class">ds-table-head</xsl:with-param> + </xsl:call-template> + </xsl:template> + + <!-- The third case is the header on lists, which creates an HTML h3 element for top level lists and + and h4 elements for all sublists. --> + <xsl:template match="dri:list/dri:head" priority="2" mode="nested"> + <xsl:call-template name="renderHead"> + <xsl:with-param name="class">ds-list-head</xsl:with-param> + </xsl:call-template> + </xsl:template> + + <xsl:template match="dri:list/dri:list/dri:head" priority="3" mode="nested"> + <xsl:call-template name="renderHead"> + <xsl:with-param name="class">ds-sublist-head</xsl:with-param> + </xsl:call-template> + </xsl:template> + + <xsl:template match="dri:referenceSet/dri:head" priority="2"> + <xsl:call-template name="renderHead"> + <xsl:with-param name="class">ds-list-head</xsl:with-param> + </xsl:call-template> + </xsl:template> + + <xsl:template match="dri:options/dri:list/dri:head" priority="3"> + <xsl:call-template name="renderHead"> + <xsl:with-param name="class">ds-option-set-head</xsl:with-param> + </xsl:call-template> + </xsl:template> + + <xsl:template match="dri:head" priority="1"> + <xsl:call-template name="renderHead"> + <xsl:with-param name="class">ds-head</xsl:with-param> + </xsl:call-template> + </xsl:template> + +</xsl:stylesheet> diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/forms.xsl b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/forms.xsl new file mode 100644 index 0000000..d8cd214 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/forms.xsl @@ -0,0 +1,318 @@ +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<!-- + Templates to cover the forms and forms fields. + + Author: art.lowel at atmire.com + Author: lieven.droogmans at atmire.com + Author: ben at atmire.com + Author: Alexey Maslov + +--> + +<xsl:stylesheet xmlns:i18n="http://apache.org/cocoon/i18n/2.1" + xmlns:dri="http://di.tamu.edu/DRI/1.0/" + xmlns:mets="http://www.loc.gov/METS/" + xmlns:xlink="http://www.w3.org/TR/xlink/" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:dim="http://www.dspace.org/xmlns/dspace/dim" + xmlns:xhtml="http://www.w3.org/1999/xhtml" + xmlns:mods="http://www.loc.gov/mods/v3" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns="http://www.w3.org/1999/xhtml" + exclude-result-prefixes="i18n dri mets xlink xsl dim xhtml mods dc"> + + <xsl:output indent="yes"/> + + <!--always give the last item the class 'last'--> + <xsl:template match="dri:list[@type='form']/dri:item" priority="3"> + <li> + <xsl:call-template name="standardAttributes"> + <xsl:with-param name="class"> + <xsl:text>ds-form-item </xsl:text> + <xsl:choose> + <!-- Makes sure that the dark always falls on the last item --> + <xsl:when test="count(../dri:item) mod 2 = 0"> + <xsl:if test="count(../dri:item) > 3"> + <xsl:if test="(count(preceding-sibling::dri:item) mod 2 = 0)">even </xsl:if> + <xsl:if test="(count(preceding-sibling::dri:item) mod 2 = 1)">odd </xsl:if> + </xsl:if> + </xsl:when> + <xsl:when test="count(../dri:item) mod 2 = 1"> + <xsl:if test="count(../dri:item) > 3"> + <xsl:if test="(count(preceding-sibling::dri:item) mod 2 = 1)">even </xsl:if> + <xsl:if test="(count(preceding-sibling::dri:item) mod 2 = 0)">odd </xsl:if> + </xsl:if> + </xsl:when> + </xsl:choose> + <!-- The last row is special--> + <xsl:if test="position()=last()">last </xsl:if> + <!-- The row is also tagged specially if it contains another "form" list --> + <xsl:if test="dri:list[@type='form']">sublist </xsl:if> + </xsl:with-param> + </xsl:call-template> + + <xsl:choose> + <xsl:when test="dri:field[@type='composite']"> + <xsl:call-template name="pick-label"/> + <xsl:apply-templates mode="formComposite"/> + </xsl:when> + <xsl:when test="dri:list[@type='form']"> + <xsl:apply-templates /> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="pick-label"/> + <div class="ds-form-content"> + <xsl:apply-templates /> + <!-- special name used in submission UI review page --> + <xsl:if test="@n = 'submit-review-field-with-authority'"> + <xsl:call-template name="authorityConfidenceIcon"> + <xsl:with-param name="confidence" select="substring-after(./@rend, 'cf-')"/> + </xsl:call-template> + </xsl:if> + </div> + </xsl:otherwise> + </xsl:choose> + </li> + </xsl:template> + + <!-- NON-instance composite fields (i.e. not repeatable) --> + <xsl:template match="dri:field[@type='composite']" mode="formComposite"> + <div class="ds-form-content"> + <xsl:apply-templates select="dri:help" mode="compositeComponent"/> + <xsl:variable name="confidenceIndicatorID" select="concat(translate(@id,'.','_'),'_confidence_indicator')"/> + <xsl:apply-templates select="dri:field" mode="compositeComponent"/> + <xsl:choose> + <xsl:when test="dri:params/@choicesPresentation = 'suggest'"> + <xsl:message terminate="yes"> + <xsl:text>ERROR: Input field with "suggest" (autocomplete) choice behavior is not implemented for Composite (e.g. "name") fields.</xsl:text> + </xsl:message> + </xsl:when> + <!-- lookup popup includes its own Add button if necessary. --> + <xsl:when test="dri:params/@choicesPresentation = 'lookup'"> + <xsl:call-template name="addLookupButton"> + <xsl:with-param name="isName" select="'true'"/> + <xsl:with-param name="confIndicator" select="$confidenceIndicatorID"/> + </xsl:call-template> + </xsl:when> + </xsl:choose> + <xsl:if test="dri:params/@authorityControlled"> + <xsl:variable name="confValue" select="dri:field/dri:value[@type='authority'][1]/@confidence"/> + <xsl:call-template name="authorityConfidenceIcon"> + <xsl:with-param name="confidence" select="$confValue"/> + <xsl:with-param name="id" select="$confidenceIndicatorID"/> + </xsl:call-template> + <xsl:call-template name="authorityInputFields"> + <xsl:with-param name="name" select="@n"/> + <xsl:with-param name="authValue" select="dri:field/dri:value[@type='authority'][1]/text()"/> + <xsl:with-param name="confValue" select="$confValue"/> + </xsl:call-template> + </xsl:if> + <div class="spacer"> </div> + <xsl:apply-templates select="dri:field/dri:error" mode="compositeComponent"/> + <xsl:apply-templates select="dri:error" mode="compositeComponent"/> + </div> + </xsl:template> + + <!-- The handling of the special case of instanced composite fields under "form" lists --> + <xsl:template match="dri:field[@type='composite'][dri:field/dri:instance | dri:params/@operations]" mode="formComposite" priority="2"> + <xsl:variable name="confidenceIndicatorID" select="concat(translate(@id,'.','_'),'_confidence_indicator')"/> + <div class="ds-form-content"> + <xsl:apply-templates select="dri:help" mode="compositeComponent"/> + <xsl:apply-templates select="dri:field" mode="compositeComponent"/> + <xsl:if test="contains(dri:params/@operations,'add')"> + <!-- Add buttons should be named "submit_[field]_add" so that we can ignore errors from required fields when simply adding new values--> + <input type="submit" value="xmlui.Submission.submit.button.add" i18n:attr="value" + name="{concat('submit_',@n,'_add')}" class="ds-button-field ds-add-button"> + <!-- Make invisible if we have choice-lookup operation that provides its own Add. --> + <xsl:if test="dri:params/@choicesPresentation = 'lookup'"> + <xsl:attribute name="style"> + <xsl:text>display:none;</xsl:text> + </xsl:attribute> + </xsl:if> + </input> + </xsl:if> + <!-- insert choice mechansim and/or Add button here --> + <xsl:choose> + <xsl:when test="dri:params/@choicesPresentation = 'suggest'"> + <xsl:message terminate="yes"> + <xsl:text>ERROR: Input field with "suggest" (autocomplete) choice behavior is not implemented for Composite (e.g. "name") fields.</xsl:text> + </xsl:message> + </xsl:when> + <!-- lookup popup includes its own Add button if necessary. --> + <xsl:when test="dri:params/@choicesPresentation = 'lookup'"> + <xsl:call-template name="addLookupButton"> + <xsl:with-param name="isName" select="'true'"/> + <xsl:with-param name="confIndicator" select="$confidenceIndicatorID"/> + </xsl:call-template> + </xsl:when> + </xsl:choose> + <!-- place to store authority value --> + <xsl:if test="dri:params/@authorityControlled"> + <xsl:call-template name="authorityConfidenceIcon"> + <xsl:with-param name="confidence" select="dri:value[@type='authority']/@confidence"/> + <xsl:with-param name="id" select="$confidenceIndicatorID"/> + </xsl:call-template> + <xsl:call-template name="authorityInputFields"> + <xsl:with-param name="name" select="@n"/> + <xsl:with-param name="authValue" select="dri:value[@type='authority']/text()"/> + <xsl:with-param name="confValue" select="dri:value[@type='authority']/@confidence"/> + </xsl:call-template> + </xsl:if> + <div class="spacer"> </div> + <xsl:apply-templates select="dri:field/dri:error" mode="compositeComponent"/> + <xsl:apply-templates select="dri:error" mode="compositeComponent"/> + <xsl:if test="dri:instance or dri:field/dri:instance"> + <div class="ds-previous-values"> + <xsl:call-template name="fieldIterator"> + <xsl:with-param name="position">1</xsl:with-param> + </xsl:call-template> + <xsl:if test="contains(dri:params/@operations,'delete') and (dri:instance or dri:field/dri:instance)"> + <!-- Delete buttons should be named "submit_[field]_delete" so that we can ignore errors from required fields when simply removing values--> + <input type="submit" value="xmlui.Submission.submit.button.remove_selected" i18n:attr="value" + name="{concat('submit_',@n,'_delete')}" class="ds-button-field ds-delete-button" /> + </xsl:if> + <xsl:for-each select="dri:field"> + <xsl:apply-templates select="dri:instance" mode="hiddenInterpreter"/> + </xsl:for-each> + </div> + </xsl:if> + </div> + </xsl:template> + + + + <!-- The handling of the field element is more complex. At the moment, the handling of input fields in the + DRI schema is very similar to HTML, utilizing the same controlled vocabulary in most cases. This makes + converting DRI fields to HTML inputs a straightforward, if a bit verbose, task. We are currently + looking at other ways of encoding forms, so this may change in the future. --> + <!-- The simple field case... not part of a complex field and does not contain instance values --> + <xsl:template match="dri:field"> + <xsl:variable name="test" select="not(@type='composite') and ancestor::dri:list[@type='form']"/> + <xsl:if test="$test"> + <xsl:apply-templates select="dri:help" mode="help"/> + </xsl:if> + <xsl:apply-templates select="." mode="normalField"/> + <xsl:if test="contains(dri:params/@operations,'add')"> + <!-- Add buttons should be named "submit_[field]_add" so that we can ignore errors from required fields when simply adding new values--> + <input type="submit" value="xmlui.Submission.submit.button.add" i18n:attr="value" + name="{concat('submit_',@n,'_add')}" class="ds-button-field ds-add-button"> + <!-- Make invisible if we have choice-lookup popup that provides its own Add. --> + <xsl:if test="dri:params/@choicesPresentation = 'lookup'"> + <xsl:attribute name="style"> + <xsl:text>display:none;</xsl:text> + </xsl:attribute> + </xsl:if> + </input> + </xsl:if> + <xsl:if test="$test"> + <xsl:apply-templates select="dri:error" mode="error"/> + </xsl:if> + <xsl:if test="dri:instance"> + <div class="ds-previous-values"> + <!-- Iterate over the dri:instance elements contained in this field. The instances contain + stored values as either "interpreted", "raw", or "default" values. --> + <xsl:call-template name="simpleFieldIterator"> + <xsl:with-param name="position">1</xsl:with-param> + </xsl:call-template> + <!-- Conclude with a DELETE button if the delete operation is specified. This allows + removing one or more values stored for this field. --> + <xsl:if test="contains(dri:params/@operations,'delete') and dri:instance"> + <!-- Delete buttons should be named "submit_[field]_delete" so that we can ignore errors from required fields when simply removing values--> + <input type="submit" value="xmlui.Submission.submit.button.remove_selected" i18n:attr="value" + name="{concat('submit_',@n,'_delete')}" class="ds-button-field ds-delete-button" /> + </xsl:if> + <!-- Behind the scenes, add hidden fields for every instance set. This is to make sure that + the form still submits the information in those instances, even though they are no + longer encoded as HTML fields. The DRI Reference should contain the exact attributes + the hidden fields should have in order for this to work properly. --> + <xsl:apply-templates select="dri:instance" mode="hiddenInterpreter"/> + </div> + </xsl:if> + </xsl:template> + + <!--modified to differentiate beween selects with and without attribute 'multiple'--> + <xsl:template name="fieldAttributes"> + <xsl:call-template name="standardAttributes"> + <xsl:with-param name="class"> + <xsl:text>ds-</xsl:text><xsl:value-of select="@type"/> + <xsl:text>-field </xsl:text> + <xsl:if test="@disabled='yes'"> + <xsl:text>disabled </xsl:text> + </xsl:if> + <xsl:if test="dri:error or parent::node()[@type='composite']/dri:error"> + <xsl:text>error </xsl:text> + </xsl:if> + <xsl:if test="dri:params/@multiple='yes'"> + <xsl:text>multiple </xsl:text> + </xsl:if> + </xsl:with-param> + </xsl:call-template> + <xsl:if test="@disabled='yes'"> + <xsl:attribute name="disabled">disabled</xsl:attribute> + </xsl:if> + <xsl:if test="@type != 'checkbox' and @type != 'radio' "> + <xsl:attribute name="name"><xsl:value-of select="@n"/></xsl:attribute> + </xsl:if> + <xsl:if test="@type != 'select' and @type != 'textarea' and @type != 'checkbox' and @type != 'radio' "> + <xsl:attribute name="type"><xsl:value-of select="@type"/></xsl:attribute> + </xsl:if> + <xsl:if test="@type= 'textarea'"> + <xsl:attribute name="onfocus">javascript:tFocus(this);</xsl:attribute> + </xsl:if> + </xsl:template> + + + <!-- Fieldset (instanced) field stuff, in the case of non-composites --> + <xsl:template match="dri:field[dri:field/dri:instance | dri:params/@operations]" priority="2"> + <xsl:apply-templates select="dri:help" mode="help"/> + <!-- Create the first field normally --> + <xsl:apply-templates select="." mode="normalField"/> + <!-- Follow it up with an ADD button if the add operation is specified. This allows + entering more than one value for this field. --> + <xsl:if test="contains(dri:params/@operations,'add')"> + <!-- Add buttons should be named "submit_[field]_add" so that we can ignore errors from required fields when simply adding new values--> + <input type="submit" value="xmlui.Submission.submit.button.add" i18n:attr="value" + name="{concat('submit_',@n,'_add')}" class="ds-button-field ds-add-button"> + <!-- Make invisible if we have choice-lookup popup that provides its own Add. --> + <xsl:if test="dri:params/@choicesPresentation = 'lookup'"> + <xsl:attribute name="style"> + <xsl:text>display:none;</xsl:text> + </xsl:attribute> + </xsl:if> + </input> + </xsl:if> + <br/> + <xsl:apply-templates select="dri:error" mode="error"/> + <xsl:if test="dri:instance"> + <div class="ds-previous-values"> + <!-- Iterate over the dri:instance elements contained in this field. The instances contain + stored values as either "interpreted", "raw", or "default" values. --> + <xsl:call-template name="simpleFieldIterator"> + <xsl:with-param name="position">1</xsl:with-param> + </xsl:call-template> + <!-- Conclude with a DELETE button if the delete operation is specified. This allows + removing one or more values stored for this field. --> + <xsl:if test="contains(dri:params/@operations,'delete') and dri:instance"> + <!-- Delete buttons should be named "submit_[field]_delete" so that we can ignore errors from required fields when simply removing values--> + <input type="submit" value="xmlui.Submission.submit.button.remove_selected" i18n:attr="value" + name="{concat('submit_',@n,'_delete')}" class="ds-button-field ds-delete-button" /> + </xsl:if> + <!-- Behind the scenes, add hidden fields for every instance set. This is to make sure that + the form still submits the information in those instances, even though they are no + longer encoded as HTML fields. The DRI Reference should contain the exact attributes + the hidden fields should have in order for this to work properly. --> + <xsl:apply-templates select="dri:instance" mode="hiddenInterpreter"/> + </div> + </xsl:if> + </xsl:template> + + +</xsl:stylesheet> diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/global-variables.xsl b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/global-variables.xsl new file mode 100644 index 0000000..211f593 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/global-variables.xsl @@ -0,0 +1,42 @@ +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<!-- + Global variables accessible from other templates + + Author: art.lowel at atmire.com + Author: lieven.droogmans at atmire.com + Author: ben at atmire.com + Author: Alexey Maslov + +--> + +<xsl:stylesheet xmlns:i18n="http://apache.org/cocoon/i18n/2.1" + xmlns:dri="http://di.tamu.edu/DRI/1.0/" + xmlns:mets="http://www.loc.gov/METS/" + xmlns:xlink="http://www.w3.org/TR/xlink/" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:dim="http://www.dspace.org/xmlns/dspace/dim" + xmlns:xhtml="http://www.w3.org/1999/xhtml" + xmlns:mods="http://www.loc.gov/mods/v3" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns="http://www.w3.org/1999/xhtml" + xmlns:confman="org.dspace.core.ConfigurationManager" + exclude-result-prefixes="i18n dri mets xlink xsl dim xhtml mods dc confman"> + + <xsl:output indent="yes"/> + + <!--the max thumbnail height & width from dspace.cfg, needed for item view and item list pages--> + <xsl:variable name="thumbnail.maxheight" select="confman:getIntProperty('thumbnail.maxheight', 80)"/> + <xsl:variable name="thumbnail.maxwidth" select="confman:getIntProperty('thumbnail.maxwidth', 80)"/> + <!-- item details url --> + <xsl:variable name="ds_item_view_toggle_url" select="//dri:p[contains(@rend , 'item-view-toggle') and + (preceding-sibling::dri:referenceSet[@type = 'summaryView'] or following-sibling::dri:referenceSet[@type = 'summaryView'])]/dri:xref/@target"/> + +</xsl:stylesheet> diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/navigation.xsl b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/navigation.xsl new file mode 100644 index 0000000..6f58714 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/navigation.xsl @@ -0,0 +1,200 @@ +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<!-- + Rendering specific to the navigation (options) + + Author: art.lowel at atmire.com + Author: lieven.droogmans at atmire.com + Author: ben at atmire.com + Author: Alexey Maslov + +--> + +<xsl:stylesheet xmlns:i18n="http://apache.org/cocoon/i18n/2.1" + xmlns:dri="http://di.tamu.edu/DRI/1.0/" + xmlns:mets="http://www.loc.gov/METS/" + xmlns:xlink="http://www.w3.org/TR/xlink/" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:dim="http://www.dspace.org/xmlns/dspace/dim" + xmlns:xhtml="http://www.w3.org/1999/xhtml" + xmlns:mods="http://www.loc.gov/mods/v3" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns="http://www.w3.org/1999/xhtml" + exclude-result-prefixes="i18n dri mets xlink xsl dim xhtml mods dc"> + + <xsl:output indent="yes"/> + + <!-- + The template to handle dri:options. Since it contains only dri:list tags (which carry the actual + information), the only things than need to be done is creating the ds-options div and applying + the templates inside it. + + In fact, the only bit of real work this template does is add the search box, which has to be + handled specially in that it is not actually included in the options div, and is instead built + from metadata available under pageMeta. + --> + <!-- TODO: figure out why i18n tags break the go button --> + <xsl:template match="dri:options"> + <div id="ds-options-wrapper"> + <div id="ds-options"> + <xsl:if test="not(contains(/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='request'][@qualifier='URI'], 'discover'))"> + <h1 id="ds-search-option-head" class="ds-option-set-head"> + <i18n:text>xmlui.dri2xhtml.structural.search</i18n:text> + </h1> + <div id="ds-search-option" class="ds-option-set"> + <!-- The form, complete with a text box and a button, all built from attributes referenced + from under pageMeta. --> + <form id="ds-search-form" method="post"> + <xsl:attribute name="action"> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='contextPath']"/> + <xsl:value-of + select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='search'][@qualifier='simpleURL']"/> + </xsl:attribute> + <fieldset> + <input class="ds-text-field " type="text"> + <xsl:attribute name="name"> + <xsl:value-of + select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='search'][@qualifier='queryField']"/> + </xsl:attribute> + </input> + <input class="ds-button-field " name="submit" type="submit" i18n:attr="value" + value="xmlui.general.go"> + <xsl:attribute name="onclick"> + <xsl:text> + var radio = document.getElementById("ds-search-form-scope-container"); + if (radio != undefined && radio.checked) + { + var form = document.getElementById("ds-search-form"); + form.action= + </xsl:text> + <xsl:text>"</xsl:text> + <xsl:value-of + select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='contextPath']"/> + <xsl:text>/handle/" + radio.value + "</xsl:text> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='search'][@qualifier='simpleURL']"/> + <xsl:text>" ; </xsl:text> + <xsl:text> + } + </xsl:text> + </xsl:attribute> + </input> + <xsl:if test="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='focus'][@qualifier='container']"> + <label> + <input id="ds-search-form-scope-all" type="radio" name="scope" value="" + checked="checked"/> + <i18n:text>xmlui.dri2xhtml.structural.search</i18n:text> + </label> + <br/> + <label> + <input id="ds-search-form-scope-container" type="radio" name="scope"> + <xsl:attribute name="value"> + <xsl:value-of + select="substring-after(/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='focus'][@qualifier='container'],':')"/> + </xsl:attribute> + </input> + <xsl:choose> + <xsl:when + test="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='focus'][@qualifier='containerType']/text() = 'type:community'"> + <i18n:text>xmlui.dri2xhtml.structural.search-in-community</i18n:text> + </xsl:when> + <xsl:otherwise> + <i18n:text>xmlui.dri2xhtml.structural.search-in-collection</i18n:text> + </xsl:otherwise> + + </xsl:choose> + </label> + </xsl:if> + </fieldset> + </form> + <!--Only add if the advanced search url is different from the simple search--> + <xsl:if test="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='search'][@qualifier='advancedURL'] != /dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='search'][@qualifier='simpleURL']"> + <!-- The "Advanced search" link, to be perched underneath the search box --> + <a> + <xsl:attribute name="href"> + <xsl:value-of + select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='search'][@qualifier='advancedURL']"/> + </xsl:attribute> + <i18n:text>xmlui.dri2xhtml.structural.search-advanced</i18n:text> + </a> + </xsl:if> + </div> + + </xsl:if> + <!-- Once the search box is built, the other parts of the options are added --> + <xsl:apply-templates/> + + <!-- DS-984 Add RSS Links to Options Box --> + <xsl:if test="count(/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='feed']) != 0"> + <h1 id="ds-feed-option-head" class="ds-option-set-head"> + <i18n:text>xmlui.feed.header</i18n:text> + </h1> + <div id="ds-feed-option" class="ds-option-set"> + <ul> + <xsl:call-template name="addRSSLinks"/> + </ul> + </div> + </xsl:if> + + + </div> + </div> + </xsl:template> + + <!-- Add each RSS feed from meta to a list --> + <xsl:template name="addRSSLinks"> + <xsl:for-each select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='feed']"> + <li> + <a> + <xsl:attribute name="href"> + <xsl:value-of select="."/> + </xsl:attribute> + + <xsl:attribute name="style"> + <xsl:text>background: url(</xsl:text> + <xsl:value-of select="$context-path"/> + <xsl:text>/static/icons/feed.png) no-repeat</xsl:text> + </xsl:attribute> + + <xsl:choose> + <xsl:when test="contains(., 'rss_1.0')"> + <xsl:text>RSS 1.0</xsl:text> + </xsl:when> + <xsl:when test="contains(., 'rss_2.0')"> + <xsl:text>RSS 2.0</xsl:text> + </xsl:when> + <xsl:when test="contains(., 'atom_1.0')"> + <xsl:text>Atom</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="@qualifier"/> + </xsl:otherwise> + </xsl:choose> + </a> + </li> + </xsl:for-each> + </xsl:template> + + <!--give nested navigation list the class sublist--> + <xsl:template match="dri:options/dri:list/dri:list" priority="3" mode="nested"> + <li> + <xsl:apply-templates select="dri:head" mode="nested"/> + <ul class="ds-simple-list sublist"> + <xsl:apply-templates select="dri:item" mode="nested"/> + </ul> + </li> + </xsl:template> + + <!-- Quick patch to remove empty lists from options --> + <xsl:template match="dri:options//dri:list[count(child::*)=0]" priority="5" mode="nested"> + </xsl:template> + <xsl:template match="dri:options//dri:list[count(child::*)=0]" priority="5"> + </xsl:template> + +</xsl:stylesheet> diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/page-structure.xsl b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/page-structure.xsl new file mode 100644 index 0000000..d96844e --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/page-structure.xsl @@ -0,0 +1,784 @@ +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<!-- + Main structure of the page, determines where + header, footer, body, navigation are structurally rendered. + Rendering of the header, footer, trail and alerts + + Author: art.lowel at atmire.com + Author: lieven.droogmans at atmire.com + Author: ben at atmire.com + Author: Alexey Maslov + +--> + +<xsl:stylesheet xmlns:i18n="http://apache.org/cocoon/i18n/2.1" + xmlns:dri="http://di.tamu.edu/DRI/1.0/" + xmlns:mets="http://www.loc.gov/METS/" + xmlns:xlink="http://www.w3.org/TR/xlink/" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:dim="http://www.dspace.org/xmlns/dspace/dim" + xmlns:xhtml="http://www.w3.org/1999/xhtml" + xmlns:mods="http://www.loc.gov/mods/v3" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:confman="org.dspace.core.ConfigurationManager" + xmlns="http://www.w3.org/1999/xhtml" + exclude-result-prefixes="i18n dri mets xlink xsl dim xhtml mods dc confman"> + + <xsl:output indent="yes"/> + + <!-- + Requested Page URI. Some functions may alter behavior of processing depending if URI matches a pattern. + Specifically, adding a static page will need to override the DRI, to directly add content. + --> + <xsl:variable name="request-uri" select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='request'][@qualifier='URI']"/> + + <!-- + The starting point of any XSL processing is matching the root element. In DRI the root element is document, + which contains a version attribute and three top level elements: body, options, meta (in that order). + + This template creates the html document, giving it a head and body. A title and the CSS style reference + are placed in the html head, while the body is further split into several divs. The top-level div + directly under html body is called "ds-main". It is further subdivided into: + "ds-header" - the header div containing title, subtitle, trail and other front matter + "ds-body" - the div containing all the content of the page; built from the contents of dri:body + "ds-options" - the div with all the navigation and actions; built from the contents of dri:options + "ds-footer" - optional footer div, containing misc information + + The order in which the top level divisions appear may have some impact on the design of CSS and the + final appearance of the DSpace page. While the layout of the DRI schema does favor the above div + arrangement, nothing is preventing the designer from changing them around or adding new ones by + overriding the dri:document template. + --> + <xsl:template match="dri:document"> + <html class="no-js"> + <!-- First of all, build the HTML head element --> + <xsl:call-template name="buildHead"/> + <!-- Then proceed to the body --> + + <!--paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/--> + <xsl:text disable-output-escaping="yes"><!--[if lt IE 7 ]> <body class="ie6"> <![endif]--> + <!--[if IE 7 ]> <body class="ie7"> <![endif]--> + <!--[if IE 8 ]> <body class="ie8"> <![endif]--> + <!--[if IE 9 ]> <body class="ie9"> <![endif]--> + <!--[if (gt IE 9)|!(IE)]><!--><body><!--<![endif]--></xsl:text> + + <xsl:choose> + <xsl:when test="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='framing'][@qualifier='popup']"> + <xsl:apply-templates select="dri:body/*"/> + </xsl:when> + <xsl:otherwise> + <div id="ds-main"> + <!--The header div, complete with title, subtitle and other junk--> + <xsl:call-template name="buildHeader"/> + + <!--The trail is built by applying a template over pageMeta's trail children. --> + <xsl:call-template name="buildTrail"/> + + <!--javascript-disabled warning, will be invisible if javascript is enabled--> + <div id="no-js-warning-wrapper" class="hidden"> + <div id="no-js-warning"> + <div class="notice failure"> + <xsl:text>JavaScript is disabled for your browser. Some features of this site may not work without it.</xsl:text> + </div> + </div> + </div> + + + <!--ds-content is a groups ds-body and the navigation together and used to put the clearfix on, center, etc. + ds-content-wrapper is necessary for IE6 to allow it to center the page content--> + <div id="ds-content-wrapper"> + <div id="ds-content" class="clearfix"> + <!-- + Goes over the document tag's children elements: body, options, meta. The body template + generates the ds-body div that contains all the content. The options template generates + the ds-options div that contains the navigation and action options available to the + user. The meta element is ignored since its contents are not processed directly, but + instead referenced from the different points in the document. --> + <xsl:apply-templates/> + </div> + </div> + + + <!-- + The footer div, dropping whatever extra information is needed on the page. It will + most likely be something similar in structure to the currently given example. --> + <xsl:call-template name="buildFooter"/> + + </div> + + </xsl:otherwise> + </xsl:choose> + <!-- Javascript at the bottom for fast page loading --> + <xsl:call-template name="addJavascript"/> + + <xsl:text disable-output-escaping="yes"></body></xsl:text> + </html> + </xsl:template> + + <!-- The HTML head element contains references to CSS as well as embedded JavaScript code. Most of this + information is either user-provided bits of post-processing (as in the case of the JavaScript), or + references to stylesheets pulled directly from the pageMeta element. --> + <xsl:template name="buildHead"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> + + <!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame --> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/> + + <!-- Mobile Viewport Fix + j.mp/mobileviewport & davidbcalhoun.com/2010/viewport-metatag + device-width : Occupy full width of the screen in its current orientation + initial-scale = 1.0 retains dimensions instead of zooming out if page height > device height + maximum-scale = 1.0 retains dimensions instead of zooming in if page width < device width + --> + <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0;"/> + + <link rel="shortcut icon"> + <xsl:attribute name="href"> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='contextPath'][not(@qualifier)]"/> + <xsl:text>/themes/</xsl:text> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='theme'][@qualifier='path']"/> + <xsl:text>/images/favicon.ico</xsl:text> + </xsl:attribute> + </link> + <link rel="apple-touch-icon"> + <xsl:attribute name="href"> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='contextPath'][not(@qualifier)]"/> + <xsl:text>/themes/</xsl:text> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='theme'][@qualifier='path']"/> + <xsl:text>/images/apple-touch-icon.png</xsl:text> + </xsl:attribute> + </link> + + <meta name="Generator"> + <xsl:attribute name="content"> + <xsl:text>DSpace</xsl:text> + <xsl:if test="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='dspace'][@qualifier='version']"> + <xsl:text> </xsl:text> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='dspace'][@qualifier='version']"/> + </xsl:if> + </xsl:attribute> + </meta> + <!-- Add stylesheets --> + <xsl:for-each select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='stylesheet']"> + <link rel="stylesheet" type="text/css"> + <xsl:attribute name="media"> + <xsl:value-of select="@qualifier"/> + </xsl:attribute> + <xsl:attribute name="href"> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='contextPath'][not(@qualifier)]"/> + <xsl:text>/themes/</xsl:text> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='theme'][@qualifier='path']"/> + <xsl:text>/</xsl:text> + <xsl:value-of select="."/> + </xsl:attribute> + </link> + </xsl:for-each> + + <!-- Add syndication feeds --> + <xsl:for-each select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='feed']"> + <link rel="alternate" type="application"> + <xsl:attribute name="type"> + <xsl:text>application/</xsl:text> + <xsl:value-of select="@qualifier"/> + </xsl:attribute> + <xsl:attribute name="href"> + <xsl:value-of select="."/> + </xsl:attribute> + </link> + </xsl:for-each> + + <!-- Add OpenSearch auto-discovery link --> + <xsl:if test="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='opensearch'][@qualifier='shortName']"> + <link rel="search" type="application/opensearchdescription+xml"> + <xsl:attribute name="href"> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='request'][@qualifier='scheme']"/> + <xsl:text>://</xsl:text> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='request'][@qualifier='serverName']"/> + <xsl:text>:</xsl:text> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='request'][@qualifier='serverPort']"/> + <xsl:value-of select="$context-path"/> + <xsl:text>/</xsl:text> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='opensearch'][@qualifier='autolink']"/> + </xsl:attribute> + <xsl:attribute name="title" > + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='opensearch'][@qualifier='shortName']"/> + </xsl:attribute> + </link> + </xsl:if> + + <!-- The following javascript removes the default text of empty text areas when they are focused on or submitted --> + <!-- There is also javascript to disable submitting a form when the 'enter' key is pressed. --> + <script type="text/javascript"> + //Clear default text of empty text areas on focus + function tFocus(element) + { + if (element.value == '<i18n:text>xmlui.dri2xhtml.default.textarea.value</i18n:text>'){element.value='';} + } + //Clear default text of empty text areas on submit + function tSubmit(form) + { + var defaultedElements = document.getElementsByTagName("textarea"); + for (var i=0; i != defaultedElements.length; i++){ + if (defaultedElements[i].value == '<i18n:text>xmlui.dri2xhtml.default.textarea.value</i18n:text>'){ + defaultedElements[i].value='';}} + } + //Disable pressing 'enter' key to submit a form (otherwise pressing 'enter' causes a submission to start over) + function disableEnterKey(e) + { + var key; + + if(window.event) + key = window.event.keyCode; //Internet Explorer + else + key = e.which; //Firefox and Netscape + + if(key == 13) //if "Enter" pressed, then disable! + return false; + else + return true; + } + + function FnArray() + { + this.funcs = new Array; + } + + FnArray.prototype.add = function(f) + { + if( typeof f!= "function" ) + { + f = new Function(f); + } + this.funcs[this.funcs.length] = f; + }; + + FnArray.prototype.execute = function() + { + for( var i=0; i <xsl:text disable-output-escaping="yes"><</xsl:text> this.funcs.length; i++ ) + { + this.funcs[i](); + } + }; + + var runAfterJSImports = new FnArray(); + </script> + + <!-- Modernizr enables HTML5 elements & feature detects --> + <script type="text/javascript"> + <xsl:attribute name="src"> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='contextPath'][not(@qualifier)]"/> + <xsl:text>/themes/</xsl:text> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='theme'][@qualifier='path']"/> + <xsl:text>/lib/js/modernizr-1.7.min.js</xsl:text> + </xsl:attribute> </script> + + <!-- Add the title in --> + <xsl:variable name="page_title" select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='title']" /> + <title> + <xsl:choose> + <xsl:when test="starts-with($request-uri, 'page/about')"> + <xsl:text>About This Repository</xsl:text> + </xsl:when> + <xsl:when test="not($page_title)"> + <i18n:text>xmlui.dri2xhtml.METS-1.0.no-title</i18n:text> + </xsl:when> + <xsl:when test="$page_title = ''"> + <i18n:text>xmlui.dri2xhtml.METS-1.0.no-title</i18n:text> + </xsl:when> + <xsl:otherwise> + <xsl:copy-of select="$page_title/node()" /> + </xsl:otherwise> + </xsl:choose> + </title> + + <!-- Head metadata in item pages --> + <xsl:if test="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='xhtml_head_item']"> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='xhtml_head_item']" + disable-output-escaping="yes"/> + </xsl:if> + + <!-- Add all Google Scholar Metadata values --> + <xsl:for-each select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[substring(@element, 1, 9) = 'citation_']"> + <meta name="{@element}" content="{.}"></meta> + </xsl:for-each> + + </head> + </xsl:template> + + + <!-- The header (distinct from the HTML head element) contains the title, subtitle, login box and various + placeholders for header images --> + <xsl:template name="buildHeader"> + <div id="ds-header-wrapper"> + <div id="ds-header" class="clearfix"> + <a id="ds-header-logo-link"> + <xsl:attribute name="href"> + <xsl:value-of + select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='contextPath'][not(@qualifier)]"/> + <xsl:text>/</xsl:text> + </xsl:attribute> + <span id="ds-header-logo"> </span> + <span id="ds-header-logo-text"> + <i18n:text>xmlui.dri2xhtml.structural.head-subtitle</i18n:text> + </span> + </a> + <h1 class="pagetitle visuallyhidden"> + <xsl:choose> + <!-- protection against an empty page title --> + <xsl:when test="not(/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='title'])"> + <xsl:text> </xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:copy-of + select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='title']/node()"/> + </xsl:otherwise> + </xsl:choose> + + </h1> + + <xsl:choose> + <xsl:when test="/dri:document/dri:meta/dri:userMeta/@authenticated = 'yes'"> + <div id="ds-user-box"> + <p> + <a> + <xsl:attribute name="href"> + <xsl:value-of select="/dri:document/dri:meta/dri:userMeta/ + dri:metadata[@element='identifier' and @qualifier='url']"/> + </xsl:attribute> + <i18n:text>xmlui.dri2xhtml.structural.profile</i18n:text> + <xsl:value-of select="/dri:document/dri:meta/dri:userMeta/ + dri:metadata[@element='identifier' and @qualifier='firstName']"/> + <xsl:text> </xsl:text> + <xsl:value-of select="/dri:document/dri:meta/dri:userMeta/ + dri:metadata[@element='identifier' and @qualifier='lastName']"/> + </a> + <xsl:text> | </xsl:text> + <a> + <xsl:attribute name="href"> + <xsl:value-of select="/dri:document/dri:meta/dri:userMeta/ + dri:metadata[@element='identifier' and @qualifier='logoutURL']"/> + </xsl:attribute> + <i18n:text>xmlui.dri2xhtml.structural.logout</i18n:text> + </a> + </p> + </div> + </xsl:when> + <xsl:otherwise> + <div id="ds-user-box"> + <p> + <a> + <xsl:attribute name="href"> + <xsl:value-of select="/dri:document/dri:meta/dri:userMeta/ + dri:metadata[@element='identifier' and @qualifier='loginURL']"/> + </xsl:attribute> + <i18n:text>xmlui.dri2xhtml.structural.login</i18n:text> + </a> + </p> + </div> + </xsl:otherwise> + </xsl:choose> + + <xsl:call-template name="languageSelection" /> + + </div> + </div> + </xsl:template> + + <!-- The header (distinct from the HTML head element) contains the title, subtitle, login box and various + placeholders for header images --> + <xsl:template name="buildTrail"> + <div id="ds-trail-wrapper"> + <ul id="ds-trail"> + <xsl:choose> + <xsl:when test="starts-with($request-uri, 'page/about')"> + <xsl:text>About This Repository</xsl:text> + </xsl:when> + <xsl:when test="count(/dri:document/dri:meta/dri:pageMeta/dri:trail) = 0"> + <li class="ds-trail-link first-link">-</li> + </xsl:when> + <xsl:otherwise> + <xsl:apply-templates select="/dri:document/dri:meta/dri:pageMeta/dri:trail"/> + </xsl:otherwise> + </xsl:choose> + </ul> + </div> + </xsl:template> + + <xsl:template match="dri:trail"> + <!--put an arrow between the parts of the trail--> + <xsl:if test="position()>1"> + <li class="ds-trail-arrow"> + <xsl:text>→</xsl:text> + </li> + </xsl:if> + <li> + <xsl:attribute name="class"> + <xsl:text>ds-trail-link </xsl:text> + <xsl:if test="position()=1"> + <xsl:text>first-link </xsl:text> + </xsl:if> + <xsl:if test="position()=last()"> + <xsl:text>last-link</xsl:text> + </xsl:if> + </xsl:attribute> + <!-- Determine whether we are dealing with a link or plain text trail link --> + <xsl:choose> + <xsl:when test="./@target"> + <a> + <xsl:attribute name="href"> + <xsl:value-of select="./@target"/> + </xsl:attribute> + <xsl:apply-templates /> + </a> + </xsl:when> + <xsl:otherwise> + <xsl:apply-templates /> + </xsl:otherwise> + </xsl:choose> + </li> + </xsl:template> + + <xsl:template name="cc-license"> + <xsl:param name="metadataURL"/> + <xsl:variable name="externalMetadataURL"> + <xsl:text>cocoon:/</xsl:text> + <xsl:value-of select="$metadataURL"/> + <xsl:text>?sections=dmdSec,fileSec&fileGrpTypes=THUMBNAIL</xsl:text> + </xsl:variable> + + <xsl:variable name="ccLicenseName" + select="document($externalMetadataURL)//dim:field[@element='rights']" + /> + <xsl:variable name="ccLicenseUri" + select="document($externalMetadataURL)//dim:field[@element='rights'][@qualifier='uri']" + /> + <xsl:variable name="handleUri"> + <xsl:for-each select="document($externalMetadataURL)//dim:field[@element='identifier' and @qualifier='uri']"> + <a> + <xsl:attribute name="href"> + <xsl:copy-of select="./node()"/> + </xsl:attribute> + <xsl:copy-of select="./node()"/> + </a> + <xsl:if test="count(following-sibling::dim:field[@element='identifier' and @qualifier='uri']) != 0"> + <xsl:text>, </xsl:text> + </xsl:if> + </xsl:for-each> + </xsl:variable> + + <xsl:if test="$ccLicenseName and $ccLicenseUri and contains($ccLicenseUri, 'creativecommons')"> + <div about="{$handleUri}" class="clearfix"> + <xsl:attribute name="style"> + <xsl:text>margin:0em 2em 0em 2em; padding-bottom:0em;</xsl:text> + </xsl:attribute> + <a rel="license" + href="{$ccLicenseUri}" + alt="{$ccLicenseName}" + title="{$ccLicenseName}" + > + <xsl:call-template name="cc-logo"> + <xsl:with-param name="ccLicenseName" select="$ccLicenseName"/> + <xsl:with-param name="ccLicenseUri" select="$ccLicenseUri"/> + </xsl:call-template> + </a> + <span> + <xsl:attribute name="style"> + <xsl:text>vertical-align:middle; text-indent:0 !important;</xsl:text> + </xsl:attribute> + <i18n:text>xmlui.dri2xhtml.METS-1.0.cc-license-text</i18n:text> + <xsl:value-of select="$ccLicenseName"/> + </span> + </div> + </xsl:if> + </xsl:template> + + <xsl:template name="cc-logo"> + <xsl:param name="ccLicenseName"/> + <xsl:param name="ccLicenseUri"/> + <xsl:variable name="ccLogo"> + <xsl:choose> + <xsl:when test="starts-with($ccLicenseUri, + 'http://creativecommons.org/licenses/by/')"> + <xsl:value-of select="'cc-by.png'" /> + </xsl:when> + <xsl:when test="starts-with($ccLicenseUri, + 'http://creativecommons.org/licenses/by-sa/')"> + <xsl:value-of select="'cc-by-sa.png'" /> + </xsl:when> + <xsl:when test="starts-with($ccLicenseUri, + 'http://creativecommons.org/licenses/by-nd/')"> + <xsl:value-of select="'cc-by-nd.png'" /> + </xsl:when> + <xsl:when test="starts-with($ccLicenseUri, + 'http://creativecommons.org/licenses/by-nc/')"> + <xsl:value-of select="'cc-by-nc.png'" /> + </xsl:when> + <xsl:when test="starts-with($ccLicenseUri, + 'http://creativecommons.org/licenses/by-nc-sa/')"> + <xsl:value-of select="'cc-by-nc-sa.png'" /> + </xsl:when> + <xsl:when test="starts-with($ccLicenseUri, + 'http://creativecommons.org/licenses/by-nc-nd/')"> + <xsl:value-of select="'cc-by-nc-nd.png'" /> + </xsl:when> + <xsl:when test="starts-with($ccLicenseUri, + 'http://creativecommons.org/publicdomain/zero/')"> + <xsl:value-of select="'cc-zero.png'" /> + </xsl:when> + <xsl:when test="starts-with($ccLicenseUri, + 'http://creativecommons.org/publicdomain/mark/')"> + <xsl:value-of select="'cc-mark.png'" /> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="'cc-generic.png'" /> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="ccLogoImgSrc"> + <xsl:value-of select="$theme-path"/> + <xsl:text>/images/creativecommons/</xsl:text> + <xsl:value-of select="$ccLogo"/> + </xsl:variable> + <img> + <xsl:attribute name="src"> + <xsl:value-of select="$ccLogoImgSrc"/> + </xsl:attribute> + <xsl:attribute name="alt"> + <xsl:value-of select="$ccLicenseName"/> + </xsl:attribute> + <xsl:attribute name="style"> + <xsl:text>float:left; margin:0em 1em 0em 0em; border:none;</xsl:text> + </xsl:attribute> + </img> + </xsl:template> + + <!-- Like the header, the footer contains various miscellaneous text, links, and image placeholders --> + <xsl:template name="buildFooter"> + <div id="ds-footer-wrapper"> + <div id="ds-footer"> + <div id="ds-footer-left"> + <a href="http://www.dspace.org/" target="_blank">DSpace software</a> copyright © 2002-2012  <a href="http://www.duraspace.org/" target="_blank">Duraspace</a> + </div> + <div id="ds-footer-right"> + <span class="theme-by">Theme by </span> + <a title="@mire NV" target="_blank" href="http://atmire.com" id="ds-footer-logo-link"> + <span id="ds-footer-logo"> </span> + </a> + </div> + <div id="ds-footer-links"> + <a> + <xsl:attribute name="href"> + <xsl:value-of + select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='contextPath'][not(@qualifier)]"/> + <xsl:text>/contact</xsl:text> + </xsl:attribute> + <i18n:text>xmlui.dri2xhtml.structural.contact-link</i18n:text> + </a> + <xsl:text> | </xsl:text> + <a> + <xsl:attribute name="href"> + <xsl:value-of + select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='contextPath'][not(@qualifier)]"/> + <xsl:text>/feedback</xsl:text> + </xsl:attribute> + <i18n:text>xmlui.dri2xhtml.structural.feedback-link</i18n:text> + </a> + </div> + <!--Invisible link to HTML sitemap (for search engines) --> + <a class="hidden"> + <xsl:attribute name="href"> + <xsl:value-of + select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='contextPath'][not(@qualifier)]"/> + <xsl:text>/htmlmap</xsl:text> + </xsl:attribute> + <xsl:text> </xsl:text> + </a> + </div> + </div> + </xsl:template> + + +<!-- + The meta, body, options elements; the three top-level elements in the schema +--> + + + + + <!-- + The template to handle the dri:body element. It simply creates the ds-body div and applies + templates of the body's child elements (which consists entirely of dri:div tags). + --> + <xsl:template match="dri:body"> + <div id="ds-body"> + <xsl:if test="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='alert'][@qualifier='message']"> + <div id="ds-system-wide-alert"> + <p> + <xsl:copy-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='alert'][@qualifier='message']/node()"/> + </p> + </div> + </xsl:if> + + <!-- Check for the custom pages --> + <xsl:choose> + <xsl:when test="starts-with($request-uri, 'page/about')"> + <div> + <h1>About This Repository</h1> + <p>To add your own content to this page, edit webapps/xmlui/themes/Mirage/lib/xsl/core/page-structure.xsl and + add your own content to the title, trail, and body. If you wish to add additional pages, you + will need to create an additional xsl:when block and match the request-uri to whatever page + you are adding. Currently, static pages created through altering XSL are only available + under the URI prefix of page/.</p> + </div> + </xsl:when> + <!-- Otherwise use default handling of body --> + <xsl:otherwise> + <xsl:apply-templates /> + </xsl:otherwise> + </xsl:choose> + + </div> + </xsl:template> + + + <!-- Currently the dri:meta element is not parsed directly. Instead, parts of it are referenced from inside + other elements (like reference). The blank template below ends the execution of the meta branch --> + <xsl:template match="dri:meta"> + </xsl:template> + + <!-- Meta's children: userMeta, pageMeta, objectMeta and repositoryMeta may or may not have templates of + their own. This depends on the meta template implementation, which currently does not go this deep. + <xsl:template match="dri:userMeta" /> + <xsl:template match="dri:pageMeta" /> + <xsl:template match="dri:objectMeta" /> + <xsl:template match="dri:repositoryMeta" /> + --> + + <xsl:template name="addJavascript"> + <xsl:variable name="jqueryVersion"> + <xsl:text>1.6.2</xsl:text> + </xsl:variable> + + <xsl:variable name="protocol"> + <xsl:choose> + <xsl:when test="starts-with(confman:getProperty('dspace.baseUrl'), 'https://')"> + <xsl:text>https://</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>http://</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <script type="text/javascript" src="{concat($protocol, 'ajax.googleapis.com/ajax/libs/jquery/', $jqueryVersion ,'/jquery.min.js')}"> </script> + + <xsl:variable name="localJQuerySrc"> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='contextPath'][not(@qualifier)]"/> + <xsl:text>/static/js/jquery-</xsl:text> + <xsl:value-of select="$jqueryVersion"/> + <xsl:text>.min.js</xsl:text> + </xsl:variable> + + <script type="text/javascript"> + <xsl:text disable-output-escaping="yes">!window.jQuery && document.write('<script type="text/javascript" src="</xsl:text><xsl:value-of + select="$localJQuerySrc"/><xsl:text disable-output-escaping="yes">"> <\/script>')</xsl:text> + </script> + + + + <!-- Add theme javascipt --> + <xsl:for-each select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='javascript'][@qualifier='url']"> + <script type="text/javascript"> + <xsl:attribute name="src"> + <xsl:value-of select="."/> + </xsl:attribute> </script> + </xsl:for-each> + + <xsl:for-each select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='javascript'][not(@qualifier)]"> + <script type="text/javascript"> + <xsl:attribute name="src"> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='contextPath'][not(@qualifier)]"/> + <xsl:text>/themes/</xsl:text> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='theme'][@qualifier='path']"/> + <xsl:text>/</xsl:text> + <xsl:value-of select="."/> + </xsl:attribute> </script> + </xsl:for-each> + + <!-- add "shared" javascript from static, path is relative to webapp root --> + <xsl:for-each select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='javascript'][@qualifier='static']"> + <!--This is a dirty way of keeping the scriptaculous stuff from choice-support + out of our theme without modifying the administrative and submission sitemaps. + This is obviously not ideal, but adding those scripts in those sitemaps is far + from ideal as well--> + <xsl:choose> + <xsl:when test="text() = 'static/js/choice-support.js'"> + <script type="text/javascript"> + <xsl:attribute name="src"> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='contextPath'][not(@qualifier)]"/> + <xsl:text>/themes/</xsl:text> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='theme'][@qualifier='path']"/> + <xsl:text>/lib/js/choice-support.js</xsl:text> + </xsl:attribute> </script> + </xsl:when> + <xsl:when test="not(starts-with(text(), 'static/js/scriptaculous'))"> + <script type="text/javascript"> + <xsl:attribute name="src"> + <xsl:value-of + select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='contextPath'][not(@qualifier)]"/> + <xsl:text>/</xsl:text> + <xsl:value-of select="."/> + </xsl:attribute> </script> + </xsl:when> + </xsl:choose> + </xsl:for-each> + + <!-- add setup JS code if this is a choices lookup page --> + <xsl:if test="dri:body/dri:div[@n='lookup']"> + <xsl:call-template name="choiceLookupPopUpSetup"/> + </xsl:if> + + <!--PNG Fix for IE6--> + <xsl:text disable-output-escaping="yes"><!--[if lt IE 7 ]></xsl:text> + <script type="text/javascript"> + <xsl:attribute name="src"> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='contextPath'][not(@qualifier)]"/> + <xsl:text>/themes/</xsl:text> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='theme'][@qualifier='path']"/> + <xsl:text>/lib/js/DD_belatedPNG_0.0.8a.js?v=1</xsl:text> + </xsl:attribute> </script> + <script type="text/javascript"> + <xsl:text>DD_belatedPNG.fix('#ds-header-logo');DD_belatedPNG.fix('#ds-footer-logo');$.each($('img[src$=png]'), function() {DD_belatedPNG.fixPng(this);});</xsl:text> + </script> + <xsl:text disable-output-escaping="yes" ><![endif]--></xsl:text> + + + <script type="text/javascript"> + runAfterJSImports.execute(); + </script> + + <!-- Add a google analytics script if the key is present --> + <xsl:if test="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='google'][@qualifier='analytics']"> + <script type="text/javascript"><xsl:text> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', '</xsl:text><xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='google'][@qualifier='analytics']"/><xsl:text>']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); + </xsl:text></script> + </xsl:if> + </xsl:template> + +</xsl:stylesheet> diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/utils.xsl b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/utils.xsl new file mode 100644 index 0000000..97d5420 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/lib/xsl/core/utils.xsl @@ -0,0 +1,69 @@ +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<!-- + This stylesheet contains helper templates for things like i18n and standard attributes. + + Author: art.lowel at atmire.com + Author: lieven.droogmans at atmire.com + Author: ben at atmire.com + Author: Alexey Maslov + +--> + +<xsl:stylesheet xmlns:i18n="http://apache.org/cocoon/i18n/2.1" + xmlns:dri="http://di.tamu.edu/DRI/1.0/" + xmlns:mets="http://www.loc.gov/METS/" + xmlns:xlink="http://www.w3.org/TR/xlink/" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:dim="http://www.dspace.org/xmlns/dspace/dim" + xmlns:xhtml="http://www.w3.org/1999/xhtml" + xmlns:mods="http://www.loc.gov/mods/v3" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns="http://www.w3.org/1999/xhtml" + exclude-result-prefixes="i18n dri mets xlink xsl dim xhtml mods dc"> + + <xsl:output indent="yes"/> + + <!--added classes to differentiate between collections, communities and items--> + <xsl:template match="dri:reference" mode="summaryList"> + <xsl:variable name="externalMetadataURL"> + <xsl:text>cocoon:/</xsl:text> + <xsl:value-of select="@url"/> + <!-- Since this is a summary only grab the descriptive metadata, and the thumbnails --> + <xsl:text>?sections=dmdSec,fileSec&fileGrpTypes=THUMBNAIL</xsl:text> + <!-- An example of requesting a specific metadata standard (MODS and QDC crosswalks only work for items)-> + <xsl:if test="@type='DSpace Item'"> + <xsl:text>&dmdTypes=DC</xsl:text> + </xsl:if>--> + </xsl:variable> + <xsl:comment> External Metadata URL: <xsl:value-of select="$externalMetadataURL"/> </xsl:comment> + <li> + <xsl:attribute name="class"> + <xsl:text>ds-artifact-item </xsl:text> + <xsl:choose> + <xsl:when test="contains(@type, 'Community')"> + <xsl:text>community </xsl:text> + </xsl:when> + <xsl:when test="contains(@type, 'Collection')"> + <xsl:text>collection </xsl:text> + </xsl:when> + </xsl:choose> + <xsl:choose> + <xsl:when test="position() mod 2 = 0">even</xsl:when> + <xsl:otherwise>odd</xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <xsl:apply-templates select="document($externalMetadataURL)" mode="summaryList"/> + <xsl:apply-templates /> + </li> + </xsl:template> + + +</xsl:stylesheet> diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/sitemap.xmap b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/sitemap.xmap new file mode 100644 index 0000000..5e56762 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-desktop/sitemap.xmap @@ -0,0 +1,169 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> + + <map:components> + <map:readers> + <map:reader name="ConcatenationReader" src="org.dspace.app.xmlui.cocoon.ConcatenationReader"/> + </map:readers> + </map:components> + + <map:pipelines> + + <!-- + Define global theme variables that are used later in this + sitemap. Two variables are typically defined here, the theme's + path and name. The path is the directory name where this theme + is located, such as "Reference" for the reference theme. The + theme's name is used only for descriptive purposes to describe + the theme. + --> + <map:component-configurations> + <global-variables> + <theme-path>Participatorio-desktop</theme-path> + <theme-name>Participatorio's Desktop theme for DSpace</theme-name> + </global-variables> + </map:component-configurations> + + + <map:pipeline> + <!-- Allow the browser to cache static content for an hour --> + <map:parameter name="expires" value="access plus 1 hours"/> + + + <!-- handle static js and css --> + <map:match pattern="themes/*/**.js"> + <map:read type="ConcatenationReader" src="{2}.js"> + <map:parameter name="requestQueryString" value="{request:queryString}"/> + </map:read> + </map:match> + <map:match pattern="themes/*/**.css"> + <map:read type="ConcatenationReader" src="{2}.css"> + <map:parameter name="requestQueryString" value="{request:queryString}"/> + </map:read> + </map:match> + <map:match pattern="themes/*/**.json"> + <map:read type="ConcatenationReader" src="{2}.json"> + <map:parameter name="requestQueryString" value="{request:queryString}"/> + </map:read> + </map:match> + + <!-- Static content --> + <map:match pattern="themes/*/**"> + <map:read src="{2}"/> + </map:match> + </map:pipeline> + + <!-- + The theme's pipeline is used to process all requests handled + by the theme. It is broken up into two parts, the first part + handles all static theme content while the second part handle + all dynamic aspect generated content. The static content is + such things as stylesheets, images, or static pages. Typically + these are just stored on disk and passed directly to the + browser without any processing. + --> + <map:pipeline> + <!-- Never allow the browser to cache dynamic content --> + <map:parameter name="expires" value="now"/> + + <!-- Aspect content + + There are five steps to processing aspect content: + + 1: Generate the DRI page + + The first step is to generate a DRI page for the request; + this is handled by the aspect chain. Once it is generated + it is the beginning of a theme's pipeline, the DRI page is + ultimately transformed in the resulting XHTML that is + given to the user's browser. + + 2: Add page metadata + + The next step is to add theme specific metadata to the + DRI page. This is metadata about where the theme is + located and its name. Typically this metadata is different + depending on the users browser, this allows us to give + different stylesheets to Internet Explorer than for other + browsers. + + 3: Transform to XHTML + + The third step is the main component of a theme the XSL + transformations will turn the DRI page from the aspects + into an XHTML page useable by browsers. + + 4: Localize the page + + The second to last step is to localize the content for the + particular user, if they user is requesting a page in a + particular language then those language strings are inserted + into the resulting XHTML. + + 5: Serialize to the browser + + The last step sends the page to the user's browser. + + --> + <map:match pattern="**"> + + <!-- Step 1: Generate the DRI page --> + <map:generate type="file" src="cocoon://DRI/{1}"/> + + <!-- Step 2 Add page metadata --> + + <!--3 different IncludePageMeta transformers to ensure that the + stylesheets end up in the correct order--> + <map:transform type="IncludePageMeta"> + <map:parameter name="stylesheet.screen#1" value="lib/css/reset.css"/> + <map:parameter name="stylesheet.screen#2" value="lib/css/base.css"/> + <map:parameter name="stylesheet.screen#3" value="lib/css/helper.css"/> + <map:parameter name="stylesheet.screen#4" value="lib/css/jquery-ui-1.8.15.custom.css"/> + <map:parameter name="stylesheet.screen#5" value="lib/css/style.css"/> + <map:parameter name="stylesheet.screen#6" value="lib/css/authority-control.css"/> + </map:transform> + + <map:transform type="IncludePageMeta"> + <map:parameter name="stylesheet.handheld" value="lib/css/handheld.css"/> + <map:parameter name="stylesheet.print" value="lib/css/print.css"/> + </map:transform> + + <map:transform type="IncludePageMeta"> + <map:parameter name="stylesheet.all" value="lib/css/media.css"/> + <map:parameter name="javascript" value="lib/js/jquery-ui-1.8.15.custom.min.js"/> + <map:parameter name="theme.path" value="{global:theme-path}"/> + <map:parameter name="theme.name" value="{global:theme-name}"/> + </map:transform> + + <!-- Debuging output --> + <map:match type="request" pattern="XML"> + <map:serialize type="xml"/> + </map:match> + + <!-- Step 3: Transform to XHTML --> + <map:transform src="{global:theme-path}.xsl"/> + <!-- <map:transform src="Mirage.xsl"/> --> + + <!-- Step 4: Localize the page --> + <map:act type="locale"> + <map:transform type="i18n"> + <map:parameter name="locale" value="{locale}"/> + </map:transform> + </map:act> + + <!-- Step 5: Serialize to the browser --> + <map:serialize type="xhtml"/> + + </map:match> + </map:pipeline> + </map:pipelines> +</map:sitemap> diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/Participatorio-mobile.xsl b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/Participatorio-mobile.xsl new file mode 100644 index 0000000..c923d9f --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/Participatorio-mobile.xsl @@ -0,0 +1,1059 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<!-- + + mobile.xsl + Mobile theme 1.1 for DSpace 3.0 + Last update by Elias Tzoc <tzoce@muohio.edu> + September 30, 2013 +--> + + +<xsl:stylesheet + xmlns:i18n="http://apache.org/cocoon/i18n/2.1" + xmlns:dri="http://di.tamu.edu/DRI/1.0/" + xmlns:mets="http://www.loc.gov/METS/" + xmlns:xlink="http://www.w3.org/TR/xlink/" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:dim="http://www.dspace.org/xmlns/dspace/dim" + xmlns:xhtml="http://www.w3.org/1999/xhtml" + xmlns:mods="http://www.loc.gov/mods/v3" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns="http://www.w3.org/1999/xhtml" + xmlns:confman="org.dspace.core.ConfigurationManager" + exclude-result-prefixes="i18n dri mets xlink xsl dim xhtml mods dc confman"> + <xsl:import href="../dri2xhtml.xsl"/> + <xsl:output indent="yes"/> + + <!-- mobile variable --> + <xsl:variable name="mobile-url" select="confman:getProperty('dspace.mobileUrl')"/> + <xsl:variable name="dspace-url" select="confman:getProperty('dspace.url')"/> + <xsl:variable name="page-url" select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='request'][@qualifier='URI']"/> + + <!-- + The starting point of any XSL processing is matching the root element. In DRI the root element is document, + which contains a version attribute and three top level elements: body, options, meta (in that order). + + This template creates the html document, giving it a head and body. A title and the CSS style reference + are placed in the html head, while the body is further split into several divs. The top-level div + directly under html body is called "ds-main". It is further subdivided into: + "ds-header" - the header div containing title, subtitle, trail and other front matter + "ds-body" - the div containing all the content of the page; built from the contents of dri:body + "ds-options" - the div with all the navigation and actions; built from the contents of dri:options + "ds-footer" - optional footer div, containing misc information + + The order in which the top level divisions appear may have some impact on the design of CSS and the + final appearance of the DSpace page. While the layout of the DRI schema does favor the above div + arrangement, nothing is preventing the designer from changing them around or adding new ones by + overriding the dri:document template. + --> + <xsl:template match="dri:document"> + <html> + + <!-- Adds support for IFrame integration --> + <script> + function postUpdateMessage(){ + var requestedUrl = document.location.href.split('#')[1]; + var targetServer = 'http://participatorio.juventude.gov.br/'; + top.postMessage(requestedUrl,targetServer); + } + window.addEventListener("popstate", function(){ postUpdateMessage(); }, false); + </script> + + <!-- First of all, build the HTML head element --> + <xsl:call-template name="buildHead"/> + <!-- Then proceed to the body --> + <body> + <!-- first HTML5 line --> + <div data-role="page" data-fetch="always"> + <!-- + <div id="ds-main" style="background:white"> + The header div, complete with title, subtitle, trail and other junk. The trail is + built by applying a template over pageMeta's trail children. --> + <xsl:call-template name="buildHeader"/> + <!-- + <xsl:call-template name="buildHeader"/> + --> + + <!--The trail is built by applying a template over pageMeta's trail children. --> + <xsl:call-template name="buildTrail"/> + + <!-- + Goes over the document tag's children elements: body, options, meta. The body template + generates the ds-body div that contains all the content. The options template generates + the ds-options div that contains the navigation and action options available to the + user. The meta element is ignored since its contents are not processed directly, but + instead referenced from the different points in the document. --> + <xsl:apply-templates /> + + <!-- + The footer div, dropping whatever extra information is needed on the page. It will + most likely be something similar in structure to the currently given example. --> + <xsl:call-template name="buildFooter"/> + + </div><!-- data-role--> + </body> + </html> + </xsl:template> + + <!-- The HTML head element contains references to CSS as well as embedded JavaScript code. Most of this + information is either user-provided bits of post-processing (as in the case of the JavaScript), or + references to stylesheets pulled directly from the pageMeta element. --> + <xsl:template name="buildHead"><head> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <!-- CSS generated at http://jquerymobile.com/themeroller/ --> + <!-- If you get ocassional non-styled pages, try using absolute paths for the CSS --> + <link rel="stylesheet"> + <xsl:attribute name="href"> + <xsl:value-of select="$mobile-url"/> + <xsl:text>/themes/Participatorio-mobile/lib/sc-mobile.min.css</xsl:text> + </xsl:attribute> + </link> + + <link rel="stylesheet"> + <xsl:attribute name="href"> + <xsl:text>http://code.jquery.com/mobile/1.1.2/jquery.mobile.structure-1.1.2.min.css</xsl:text> + </xsl:attribute> + </link> + + <!-- CSS tweaks --> + <!-- If you get ocassional non-styled pages, try using absolute paths for the CSS --> + <link rel="stylesheet"> + <xsl:attribute name="href"> + <xsl:value-of select="$mobile-url"/> + <xsl:text>/themes/Participatorio-mobile/lib/m-tweaks.css</xsl:text> + </xsl:attribute> + </link> + + <script> + <xsl:attribute name="src"> + <xsl:text>http://code.jquery.com/jquery-1.7.1.min.js</xsl:text> + </xsl:attribute> </script> + + <script> + <xsl:attribute name="src"> + <xsl:text>http://code.jquery.com/mobile/1.1.2/jquery.mobile-1.1.2.min.js</xsl:text> + </xsl:attribute> </script> + + <script> + <xsl:attribute name="src"> + <xsl:value-of select="$mobile-url"/> + <xsl:text>/themes/Participatorio-mobile/lib/cookies.js</xsl:text> + </xsl:attribute> </script> + + <script> + <xsl:attribute name="src"> + <xsl:value-of select="$mobile-url"/> + <xsl:text>/themes/Participatorio-mobile/lib/m-tweaks.js</xsl:text> + </xsl:attribute> </script> + + <!-- Add the title in --> + <xsl:variable name="page_title" select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='title']" /> + <title> + <xsl:choose> + <xsl:when test="not($page_title)"> + <xsl:text> </xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:copy-of select="$page_title/node()" /> + </xsl:otherwise> + </xsl:choose> + </title> + </head> + </xsl:template> + + + <!-- The header (distinct from the HTML head element) contains the title, subtitle, login box and various + placeholders for header images --> + <xsl:template name="buildHeader"> + <!-- new header with a data-icon linking to the homepage --> + <!-- <div data-role="header"> + <h2> + FIXME: Colocar breadcumbs aqui + <i18n:text>xmlui.mobile.home_mobile</i18n:text> + </h2> + <a> + <xsl:attribute name="href"> + <xsl:value-of select="$mobile-url"/> + </xsl:attribute> + <xsl:attribute name="data-icon"> + <xsl:text>home</xsl:text> + </xsl:attribute> + <xsl:attribute name="data-iconpos"> + <xsl:text>notext</xsl:text> + </xsl:attribute> + <xsl:attribute name="data-direction"> + <xsl:text>reverse</xsl:text> + </xsl:attribute> + <xsl:text>Home</xsl:text> + </a> --> + + <!-- link to full website page --> +<!-- + <a> + <xsl:attribute name="href"> + <xsl:value-of select="$dspace-url"/> + <xsl:text>/</xsl:text> + <xsl:value-of select="$page-url"/> + </xsl:attribute> + <xsl:attribute name="data-icon"> + <xsl:text>forward</xsl:text> + </xsl:attribute> + <xsl:attribute name="data-iconpos"> + <xsl:text>notext</xsl:text> + </xsl:attribute> + <xsl:attribute name="data-direction"> + <xsl:text>reverse</xsl:text> + </xsl:attribute> + <xsl:text>non-mobile view</xsl:text> + </a> + </div>--> <!-- header --> + + </xsl:template> + +<!-- BEGIN front page customization --> + <xsl:template match="dri:body"> +<div data-role="content"> + <div id="ds-body"> + <xsl:choose> + <xsl:when test="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='title']='xmlui.general.dspace_home'"> + <div id="search-box"> + <h3> + <i18n:text>xmlui.mobile.search_all</i18n:text> + </h3> + <form id="search" class="ds-interactive-div primary" action="discover" method="get"> + <fieldset> + <input id="search-basic" name="query" type="search" value="" /> + <input id="search" name="submit" type="submit" value="xmlui.general.go" i18n:attr="value" /> + </fieldset> + </form> + </div><!-- #search-box --> + </xsl:when> + </xsl:choose> + + <xsl:apply-templates /> + + <xsl:choose> + <xsl:when test="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='title']='xmlui.general.dspace_home'"> + + <!-- browse ALL code 'borrowed' from ds-options --> + <h3> + <i18n:text>xmlui.mobile.browse_all</i18n:text> + </h3> + + <div id="browse-front-page" data-role="controlgroup"> + <a> + <xsl:attribute name="href"> + <xsl:value-of select="$mobile-url"/> + <xsl:text>/browse?type=dateissued</xsl:text> + </xsl:attribute> + <xsl:attribute name="data-role"> + <xsl:text>button</xsl:text> + </xsl:attribute> + <xsl:attribute name="data-icon"> + <xsl:text>arrow-r</xsl:text> + </xsl:attribute> + <xsl:attribute name="data-iconpos"> + <xsl:text>right</xsl:text> + </xsl:attribute> + <i18n:text>xmlui.mobile.browse_date</i18n:text> + </a> + + <a> + <xsl:attribute name="href"> + <xsl:value-of select="$mobile-url"/> + <xsl:text>/browse?type=author</xsl:text> + </xsl:attribute> + <xsl:attribute name="data-role"> + <xsl:text>button</xsl:text> + </xsl:attribute> + <xsl:attribute name="data-icon"> + <xsl:text>arrow-r</xsl:text> + </xsl:attribute> + <xsl:attribute name="data-iconpos"> + <xsl:text>right</xsl:text> + </xsl:attribute> + <i18n:text>xmlui.mobile.browse_author</i18n:text> + </a> + + <a> + <xsl:attribute name="href"> + <xsl:value-of select="$mobile-url"/> + <xsl:text>/browse?type=title</xsl:text> + </xsl:attribute> + <xsl:attribute name="data-role"> + <xsl:text>button</xsl:text> + </xsl:attribute> + <xsl:attribute name="data-icon"> + <xsl:text>arrow-r</xsl:text> + </xsl:attribute> + <xsl:attribute name="data-iconpos"> + <xsl:text>right</xsl:text> + </xsl:attribute> + <i18n:text>xmlui.mobile.browse_title</i18n:text> + </a> + + <a> + <xsl:attribute name="href"> + <xsl:value-of select="$mobile-url"/> + <xsl:text>/browse?type=subject</xsl:text> + </xsl:attribute> + <xsl:attribute name="data-role"> + <xsl:text>button</xsl:text> + </xsl:attribute> + <xsl:attribute name="data-icon"> + <xsl:text>arrow-r</xsl:text> + </xsl:attribute> + <xsl:attribute name="data-iconpos"> + <xsl:text>right</xsl:text> + </xsl:attribute> + <i18n:text>xmlui.mobile.browse_subject</i18n:text> + </a> + </div><!-- browse-front-page --> + + <!-- link to full website + <a href="#" data-role="button" data-icon="forward" data-iconpos="left"> + <xsl:attribute name="onclick">createCookie('viewfull','true','','$dspace.hostname');window.location='<xsl:value-of select="$dspace-url"/>';</xsl:attribute> + <xsl:text>View full website</xsl:text> + </a> --> + + </xsl:when> + +</xsl:choose> + + <br/> + <br/> + <br/> + <br/> + + <xsl:choose> + <xsl:when test="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='title']='xmlui.general.dspace_home'"> + + <div id="file.news.div.news" n="news" rend="primary"> + <h3> + <i18n:text>participatorio.repo.title</i18n:text> + </h3> + <p> + <i18n:text>participatorio.repo.text</i18n:text> + </p> + </div> + + </xsl:when> + </xsl:choose> + + </div> +</div><!-- data-role: content --> + + </xsl:template> +<!-- END front page customization --> + + <!-- new footer --> + <xsl:template name="buildFooter"> + <div data-role="footer"><!-- FOOTER + <h4>Mobile theme for DSpace</h4> + --></div> + </xsl:template> + + + <!-- From here on out come the templates for supporting elements that are contained within structural + ones. These include head (in all its myriad forms), rich text container elements (like hi and figure), + as well as the field tag and its related elements. The head elements are done first. --> + + <!-- The first (and most complex) case of the header tag is the one used for divisions. Since divisions can + nest freely, their headers should reflect that. Thus, the type of HTML h tag produced depends on how + many divisions the header tag is nested inside of. --> + + <!-- Tweaking the font-size properties for H elements --> + <xsl:template match="dri:div/dri:head" priority="3"> + <xsl:variable name="head_count" select="count(ancestor::dri:div)"/> + <xsl:variable name="font-sizing" select="265 - $head_count * 80 - string-length(current())"></xsl:variable> + <xsl:element name="h3"> + <xsl:apply-templates /> + </xsl:element> + </xsl:template> + + <xsl:template match="dri:referenceSet[@type = 'summaryList']" priority="2"> + <xsl:apply-templates select="dri:head"/> + <!-- Here we decide whether we have a hierarchical list or a flat one --> + <xsl:choose> + <xsl:when test="descendant-or-self::dri:referenceSet/@rend='hierarchy' or ancestor::dri:referenceSet/@rend='hierarchy'"> + <ul data-role="listview"> + <xsl:apply-templates select="*[not(name()='head')]" mode="summaryList"/> + </ul> + </xsl:when> + <xsl:otherwise> + <ul class="ds-artifact-list"> + <xsl:apply-templates select="*[not(name()='head')]" mode="summaryList"/> + </ul> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <!-- First, the detail list case --> + <xsl:template match="dri:referenceSet[@type = 'detailList']" priority="2"> + <xsl:apply-templates select="dri:head"/> + <ul class="ds-referenceSet-list"> + <xsl:apply-templates select="*[not(name()='head')]" mode="detailList"/> + </ul> + </xsl:template> + + <!-- summaryList --> + <xsl:template match="dri:reference" mode="summaryList"> + <xsl:variable name="externalMetadataURL"> + <xsl:text>cocoon:/</xsl:text> + <xsl:value-of select="@url"/> + <!-- Since this is a summary only grab the descriptive metadata, and the thumbnails --> + <xsl:text>?sections=dmdSec,fileSec&fileGrpTypes=THUMBNAIL</xsl:text> + <!-- An example of requesting a specific metadata standard (MODS and QDC crosswalks only work for items)-> + <xsl:if test="@type='DSpace Item'"> + <xsl:text>&dmdTypes=DC</xsl:text> + </xsl:if>--> + </xsl:variable> + <li> + <xsl:apply-templates select="document($externalMetadataURL)" mode="summaryList"/> + <xsl:apply-templates /> + </li> + </xsl:template> + + <!-- A collection rendered in the summaryList pattern. Encountered on the community-list page --> + <xsl:template name="collectionSummaryList-DIM"> + <xsl:variable name="data" select="./mets:dmdSec/mets:mdWrap/mets:xmlData/dim:dim"/> + <a href="{@OBJID}"> + + <!-- + <img> + <xsl:attribute name="src"> + <xsl:value-of select="mets:fileSec/mets:fileGrp[@USE='LOGO']/mets:file/mets:FLocat[@LOCTYPE='URL']/@xlink:href"/> + </xsl:attribute> + <xsl:attribute name="alt">xmlui.dri2xhtml.METS-1.0.collection-logo-alt</xsl:attribute> + <xsl:attribute name="attr" namespace="http://apache.org/cocoon/i18n/2.1">alt</xsl:attribute> + </img> + --> + + <xsl:choose> + <xsl:when test="string-length($data/dim:field[@element='title'][1]) > 0"> + <xsl:value-of select="$data/dim:field[@element='title'][1]"/> + </xsl:when> + <xsl:otherwise> + <i18n:text>xmlui.dri2xhtml.METS-1.0.no-title</i18n:text> + </xsl:otherwise> + </xsl:choose> + + </a> + </xsl:template> + + <!-- Generate the thunbnail, if present, from the file section --> + <xsl:template match="mets:fileSec" mode="artifact-preview"> + <div class="artifact-preview"> + <a href="{ancestor::mets:METS/@OBJID}"> + <img alt="Thumbnail"> + <xsl:choose> + <xsl:when test="mets:fileGrp[@USE='THUMBNAIL']"> + <xsl:attribute name="src"> + <xsl:value-of select="mets:fileGrp[@USE='THUMBNAIL']/mets:file/mets:FLocat[@LOCTYPE='URL']/@xlink:href" /> + </xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="src"> + <xsl:text>/xmlui/themes/Participatorio-mobile/lib/images/default-thumbnail.png</xsl:text> + </xsl:attribute> + </xsl:otherwise> + </xsl:choose> + </img> + </a> + </div> + </xsl:template> + + <!-- A community rendered in the summaryList pattern ... on the front page. --> + <xsl:template name="communitySummaryList-DIM"> + <xsl:variable name="data" select="./mets:dmdSec/mets:mdWrap/mets:xmlData/dim:dim"/> + <a href="{@OBJID}"> + + <img> + <xsl:attribute name="src"> + <xsl:value-of select="mets:fileSec/mets:fileGrp[@USE='LOGO']/mets:file/mets:FLocat[@LOCTYPE='URL']/@xlink:href"/> + </xsl:attribute> + <xsl:attribute name="alt">xmlui.dri2xhtml.METS-1.0.collection-logo-alt</xsl:attribute> + <xsl:attribute name="attr" namespace="http://apache.org/cocoon/i18n/2.1">alt</xsl:attribute> + </img> + + <!-- + <xsl:choose> + <xsl:when test="string-length($data/dim:field[@element='title'][1]) > 0"> + <xsl:value-of select="$data/dim:field[@element='title'][1]"/> + </xsl:when> + <xsl:otherwise> + <i18n:text>xmlui.dri2xhtml.METS-1.0.no-title</i18n:text> + </xsl:otherwise> + </xsl:choose> + --> + </a> + </xsl:template> + + + <xsl:template name="itemSummaryList-DIM"> + <!-- Generate the thumbnail, if present, from the file section --> + <xsl:apply-templates select="./mets:fileSec" mode="artifact-preview"/> + <!-- Generate the info about the item from the metadata section --> + <xsl:apply-templates select="./mets:dmdSec/mets:mdWrap[@OTHERMDTYPE='DIM']/mets:xmlData/dim:dim" + mode="itemSummaryList-DIM"/> + </xsl:template> + + <!-- A community rendered in the detailView pattern; default way of viewing a community. --> + <xsl:template name="communityDetailView-DIM"> + <div class="detail-view">  + <!-- Generate the logo, if present, from the file section --> + <!-- + <xsl:apply-templates select="./mets:fileSec/mets:fileGrp[@USE='LOGO']"/> + --> + <!-- Generate the info about the collections from the metadata section --> + <xsl:apply-templates select="./mets:dmdSec/mets:mdWrap[@OTHERMDTYPE='DIM']/mets:xmlData/dim:dim" + mode="communityDetailView-DIM"/> + </div> + </xsl:template> + +<!-- BEGIN short item record metadata --> + <!-- Generate the info about the item from the metadata section --> + <xsl:template match="dim:dim" mode="itemSummaryView-DIM"> + +<!-- AddThis Button BEGIN --> +<div class="addthis_toolbox addthis_default_style" id="addthis-box"> + <i18n:text>xmlui.general.share</i18n:text> + <a> + <xsl:attribute name="class"> + <xsl:text>aaddthis_button_compact</xsl:text> + </xsl:attribute> + <xsl:text> </xsl:text> + </a> + <a> + <xsl:attribute name="class"> + <xsl:text>addthis_button_preferred_3</xsl:text> + </xsl:attribute> + <xsl:text> </xsl:text> + </a> + <a> + <xsl:attribute name="class"> + <xsl:text>addthis_button_preferred_2</xsl:text> + </xsl:attribute> + <xsl:text> </xsl:text> + </a> + <a> + <xsl:attribute name="class"> + <xsl:text>addthis_button_preferred_1</xsl:text> + </xsl:attribute> + <xsl:text> </xsl:text> + </a> +</div> +<script type="text/javascript"> + <xsl:attribute name="src"> + <xsl:text>http://s7.addthis.com/js/300/addthis_widget.js#pubid=</xsl:text> + </xsl:attribute> + <xsl:text>ra-52ab4aec11085348</xsl:text> +</script> +<!-- AddThis Button END --> + +<div id="metadata-wrapper"> +<div class="metadata-view"> + <span class="bold"><i18n:text>xmlui.dri2xhtml.METS-1.0.item-title</i18n:text>: </span> + <xsl:choose> + <xsl:when test="count(dim:field[@element='title'][not(@qualifier)]) > 1"> + <xsl:for-each select="dim:field[@element='title'][not(@qualifier)]"> + <xsl:value-of select="./node()"/> + <xsl:if test="count(following-sibling::dim:field[@element='title'][not(@qualifier)]) != 0"> + <xsl:text>; </xsl:text><br/> + </xsl:if> + </xsl:for-each> + </xsl:when> + <xsl:when test="count(dim:field[@element='title'][not(@qualifier)]) = 1"> + <xsl:value-of select="dim:field[@element='title'][not(@qualifier)][1]/node()"/> + </xsl:when> + <xsl:otherwise> + <i18n:text>xmlui.dri2xhtml.METS-1.0.no-title</i18n:text> + </xsl:otherwise> + </xsl:choose> +</div> + + <xsl:if test="dim:field[@element='contributor'][@qualifier='author'] or dim:field[@element='creator'] or dim:field[@element='contributor']"> +<div class="metadata-view"> + <span class="bold"><i18n:text>xmlui.dri2xhtml.METS-1.0.item-author</i18n:text>: </span> + <xsl:choose> + <xsl:when test="dim:field[@element='contributor'][@qualifier='author']"> + <xsl:for-each select="dim:field[@element='contributor'][@qualifier='author']"> + <xsl:copy-of select="node()"/> + <xsl:if test="count(following-sibling::dim:field[@element='contributor'][@qualifier='author']) != 0"> + <xsl:text>; </xsl:text> + </xsl:if> + </xsl:for-each> + </xsl:when> + <xsl:when test="dim:field[@element='creator']"> + <xsl:for-each select="dim:field[@element='creator']"> + <xsl:copy-of select="node()"/> + <xsl:if test="count(following-sibling::dim:field[@element='creator']) != 0"> + <xsl:text>; </xsl:text> + </xsl:if> + </xsl:for-each> + </xsl:when> + <xsl:when test="dim:field[@element='contributor']"> + <xsl:for-each select="dim:field[@element='contributor']"> + <xsl:copy-of select="node()"/> + <xsl:if test="count(following-sibling::dim:field[@element='contributor']) != 0"> + <xsl:text>; </xsl:text> + </xsl:if> + </xsl:for-each> + </xsl:when> + <xsl:otherwise> + <i18n:text>xmlui.dri2xhtml.METS-1.0.no-author</i18n:text> + </xsl:otherwise> + </xsl:choose> +</div> + </xsl:if> + <xsl:if test="dim:field[@element='description' and @qualifier='abstract']"> +<div class="metadata-view"> + <span class="bold"><i18n:text>xmlui.dri2xhtml.METS-1.0.item-abstract</i18n:text>: </span> + <xsl:if test="count(dim:field[@element='description' and @qualifier='abstract']) > 1"> + <hr class="metadata-seperator"/> + </xsl:if> + <xsl:for-each select="dim:field[@element='description' and @qualifier='abstract']"> + <xsl:copy-of select="./node()"/> + <xsl:if test="count(following-sibling::dim:field[@element='description' and @qualifier='abstract']) != 0"> + <hr class="metadata-seperator"/> + </xsl:if> + </xsl:for-each> + <xsl:if test="count(dim:field[@element='description' and @qualifier='abstract']) > 1"> + <hr class="metadata-seperator"/> + </xsl:if> +</div> + </xsl:if> + + <xsl:if test="dim:field[@element='description' and not(@qualifier)]"> +<div class="metadata-view"> + <span class="bold"><i18n:text>xmlui.dri2xhtml.METS-1.0.item-description</i18n:text>: </span> + <xsl:if test="count(dim:field[@element='description' and not(@qualifier)]) > 1 and not(count(dim:field[@element='description' and @qualifier='abstract']) > 1)"> + <hr class="metadata-seperator"/> + </xsl:if> + <xsl:for-each select="dim:field[@element='description' and not(@qualifier)]"> + <xsl:copy-of select="./node()"/> + <xsl:if test="count(following-sibling::dim:field[@element='description' and not(@qualifier)]) != 0"> + <hr class="metadata-seperator"/> + </xsl:if> + </xsl:for-each> + <xsl:if test="count(dim:field[@element='description' and not(@qualifier)]) > 1"> + <hr class="metadata-seperator"/> + </xsl:if> +</div> + </xsl:if> + + <xsl:if test="dim:field[@element='identifier' and @qualifier='uri']"> +<div class="metadata-view"> + <span class="bold"><i18n:text>xmlui.dri2xhtml.METS-1.0.item-uri</i18n:text>: </span> + <xsl:for-each select="dim:field[@element='identifier' and @qualifier='uri']"> + <a> + <xsl:attribute name="href"> + <xsl:copy-of select="./node()"/> + </xsl:attribute> + <xsl:copy-of select="./node()"/> + </a> + <xsl:if test="count(following-sibling::dim:field[@element='identifier' and @qualifier='uri']) != 0"> + <br/> + </xsl:if> + </xsl:for-each> +</div> + </xsl:if> + <xsl:if test="dim:field[@element='date' and @qualifier='issued'] or dim:field[@element='published']"> +<div class="metadata-view"> + <span class="bold"><i18n:text>xmlui.dri2xhtml.METS-1.0.item-date</i18n:text>: </span> + <xsl:choose> + <xsl:when test="count(dim:field[@element='date' and @qualifier='published']) != 0"> + <xsl:for-each select="dim:field[@element='date' and @qualifier='published']"> + <xsl:copy-of select="substring(./node(),1,10)"/> + <xsl:if test="count(following-sibling::dim:field[@element='date' and @qualifier='published']) != 0"> + <br /> + </xsl:if> + </xsl:for-each> + </xsl:when> + <xsl:otherwise> + <xsl:for-each select="dim:field[@element='date' and @qualifier='issued']"> + <xsl:copy-of select="substring(./node(),1,10)"/> + <xsl:if test="count(following-sibling::dim:field[@element='date' and @qualifier='issued']) != 0"> + <br /> + </xsl:if> + </xsl:for-each> + </xsl:otherwise> + </xsl:choose> +</div> + </xsl:if> + + <xsl:if test="dim:field[@element='title'][not(@qualifier)]"> +<div class="metadata-view"> + <span class="bold"><i18n:text>xmlui.mobile.related_google_scholar</i18n:text></span> + <xsl:for-each select="dim:field[@element='title'][not(@qualifier)]"> + <xsl:variable name="v1" select="./node()"/> + <xsl:variable name="v1" select="translate($v1,'-', ' ')"/> + <xsl:variable name="v1" select="translate($v1,'/', ' ')"/> + <xsl:variable name="v1" select="translate($v1,' ', '+')"/> + <a> + <xsl:attribute name="href"> + <xsl:text>http://scholar.google.com/scholar?q=</xsl:text> + <xsl:value-of select="$v1"/> + </xsl:attribute> + <xsl:attribute name="target"> + <xsl:text>_blank</xsl:text> + </xsl:attribute> + <i18n:text>xmlui.mobile.items_in_google_scholar</i18n:text> + </a> + </xsl:for-each> +</div> + </xsl:if> + +<!-- Add buttom to see page statistics --> +<div class="metadata-view"> + <xsl:variable name="statsPage" + select="concat($mobile-url,'/',$page-url,'/','statistics')" /> + <a> + <xsl:attribute name="href"> + <xsl:value-of select="$statsPage" /> + </xsl:attribute> + <i18n:text>xmlui.general.statistics</i18n:text> + </a> +</div> + +</div><!-- metadata wrapper --> + + </xsl:template> +<!-- END short item record metadata --> + + +<!-- modifying search box properties in community and collection pages --> +<xsl:template match="dri:field[@id='aspect.artifactbrowser.CommunityViewer.field.query']"> +<input id="aspect_artifactbrowser_CommunityViewer_field_query" class="ds-text-field" name="query" type="search" value="" /> +</xsl:template> + +<xsl:template match="dri:field[@id='aspect.artifactbrowser.CollectionViewer.field.query']"> +<input id="aspect_artifactbrowser_CollectionViewer_field_query" class="ds-text-field" name="query" type="search" value="" /> +</xsl:template> + +<!-- Forcing UL elements to display with listview properties --> + <xsl:template match="dri:div[@id='aspect.artifactbrowser.CollectionViewer.div.collection-browse']"> + <ul data-role="listview"> + <xsl:call-template name="standardAttributes"> + <xsl:with-param name="class">ds-simple-list</xsl:with-param> + </xsl:call-template> + <xsl:apply-templates select="*[not(name()='head')]" mode="nested"/> + </ul> + </xsl:template> + + <xsl:template match="dri:div[@id='aspect.artifactbrowser.CommunityViewer.div.community-browse']"> + <ul data-role="listview"> + <xsl:call-template name="standardAttributes"> + <xsl:with-param name="class">ds-simple-list</xsl:with-param> + </xsl:call-template> + <xsl:apply-templates select="*[not(name()='head')]" mode="nested"/> + </ul> + </xsl:template> + + <!-- Generate the bitstream information from the file section --> + <xsl:template match="mets:fileGrp[@USE='CONTENT']"> + <xsl:param name="context"/> + <xsl:param name="primaryBitstream" select="-1"/> + + <h2><i18n:text>xmlui.dri2xhtml.METS-1.0.item-files-head</i18n:text></h2> + <xsl:choose> + <!-- If one exists and it's of text/html MIME type, only display the primary bitstream --> + <xsl:when test="mets:file[@ID=$primaryBitstream]/@MIMETYPE='text/html'"> + <xsl:apply-templates select="mets:file[@ID=$primaryBitstream]"> + <xsl:with-param name="context" select="$context"/> + </xsl:apply-templates> + </xsl:when> + <!-- Otherwise, iterate over and display all of them --> + <xsl:otherwise> + <xsl:apply-templates select="mets:file"> + <!--Do not sort any more bitstream order can be changed--> + <!--<xsl:sort data-type="number" select="boolean(./@ID=$primaryBitstream)" order="descending" />--> + <!--<xsl:sort select="mets:FLocat[@LOCTYPE='URL']/@xlink:title"/>--> + <xsl:with-param name="context" select="$context"/> + </xsl:apply-templates> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + + <!-- Build a single row in the bitstreams table of the item view page --> + <xsl:template match="mets:file"> + <xsl:param name="context" select="."/> + <div class="file-wrapper"> + <div class="thumbnail-wrapper"> + <xsl:choose> + <xsl:when test="$context/mets:fileSec/mets:fileGrp[@USE='THUMBNAIL']/ + mets:file[@GROUPID=current()/@GROUPID]"> + <a class="image-link"> + <xsl:attribute name="href"> + <!-- redirect to root folder --> + <xsl:variable name="url-1" select="mets:FLocat[@LOCTYPE='URL']/@xlink:href"/> + <xsl:variable name="url-1" select="substring-after($url-1,'')"/> + <xsl:value-of select="$url-1"/> + </xsl:attribute> + <xsl:attribute name="target"> + <xsl:text>_blank</xsl:text> + </xsl:attribute> + <img alt="Thumbnail"> + <xsl:attribute name="src"> + <xsl:value-of select="$context/mets:fileSec/mets:fileGrp[@USE='THUMBNAIL']/ + mets:file[@GROUPID=current()/@GROUPID]/mets:FLocat[@LOCTYPE='URL']/@xlink:href"/> + </xsl:attribute> + </img> + </a> + </xsl:when> + <xsl:otherwise> + <a class="image-link"> + <xsl:attribute name="href"> + <!-- redirect to root folder --> + <xsl:variable name="url-1" select="mets:FLocat[@LOCTYPE='URL']/@xlink:href"/> + <xsl:variable name="url-1" select="substring-after($url-1,'')"/> + <xsl:value-of select="$url-1"/> + </xsl:attribute> + <xsl:attribute name="target"> + <xsl:text>_blank</xsl:text> + </xsl:attribute> + <img alt="Thumbnail"> + <xsl:attribute name="src"> + <xsl:text>/xmlui/themes/Participatorio-mobile/lib/images/default-thumbnail.png</xsl:text> + </xsl:attribute> + </img> + </a> + </xsl:otherwise> + </xsl:choose> + </div> + + +<div class="file-metadata"> + <div> + <a> + <xsl:attribute name="href"> + <!-- redirect to root folder --> + <xsl:variable name="url-1" select="mets:FLocat[@LOCTYPE='URL']/@xlink:href"/> + <xsl:variable name="url-1" select="substring-after($url-1,'')"/> + <xsl:value-of select="$url-1"/> + </xsl:attribute> + <xsl:attribute name="target"> + <xsl:text>_blank</xsl:text> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:value-of select="mets:FLocat[@LOCTYPE='URL']/@xlink:title"/> + </xsl:attribute> + <i18n:text>xmlui.mobile.download</i18n:text> + + <xsl:text> (</xsl:text> + <xsl:choose> + <xsl:when test="@SIZE < 1024"> + <xsl:value-of select="@SIZE"/> + <i18n:text>xmlui.dri2xhtml.METS-1.0.size-bytes</i18n:text> + </xsl:when> + <xsl:when test="@SIZE < 1024 * 1024"> + <xsl:value-of select="substring(string(@SIZE div 1024),1,5)"/> + <i18n:text>xmlui.dri2xhtml.METS-1.0.size-kilobytes</i18n:text> + </xsl:when> + <xsl:when test="@SIZE < 1024 * 1024 * 1024"> + <xsl:value-of select="substring(string(@SIZE div (1024 * 1024)),1,5)"/> + <i18n:text>xmlui.dri2xhtml.METS-1.0.size-megabytes</i18n:text> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="substring(string(@SIZE div (1024 * 1024 * 1024)),1,5)"/> + <i18n:text>xmlui.dri2xhtml.METS-1.0.size-gigabytes</i18n:text> + </xsl:otherwise> + </xsl:choose> + <xsl:text>)</xsl:text> + + </a> + </div> + + <div> + <xsl:choose> + <xsl:when test="string-length(mets:FLocat[@LOCTYPE='URL']/@xlink:title) > 25"> + <xsl:variable name="title_length" select="string-length(mets:FLocat[@LOCTYPE='URL']/@xlink:title)"/> + <xsl:value-of select="substring(mets:FLocat[@LOCTYPE='URL']/@xlink:title,1,15)"/> + <xsl:text>...</xsl:text> + <xsl:value-of select="substring(mets:FLocat[@LOCTYPE='URL']/@xlink:title,$title_length - 7,$title_length)"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="mets:FLocat[@LOCTYPE='URL']/@xlink:title"/> + </xsl:otherwise> + </xsl:choose> + + </div> + + <!-- Lookup File Type description in local messages.xml based on MIME Type. + In the original DSpace, this would get resolved to an application via + the Bitstream Registry, but we are constrained by the capabilities of METS + and can't really pass that info through. --> + <div> + <xsl:call-template name="getFileTypeDesc"> + <xsl:with-param name="mimetype"> + <xsl:value-of select="substring-before(@MIMETYPE,'/')"/> + <xsl:text>/</xsl:text> + <xsl:value-of select="substring-after(@MIMETYPE,'/')"/> + </xsl:with-param> + </xsl:call-template> + </div> + + </div> + + +</div> + </xsl:template> + +<!-- removing elements for a clean/basic mobile page --> +<!-- search box on front page --> +<xsl:template match="dri:div[@n='front-page-search']">  +</xsl:template> + +<!-- community recent submission --> +<xsl:template match="dri:div[@n='community-recent-submission']">  +</xsl:template> + +<!-- ds-options --> +<!-- the browse section is being implemented in the front page custoization --> +<xsl:template match="dri:options">  +</xsl:template> + + +<!-- ******************************************************************** --> + <xsl:template name="buildTrail"> + <div id="ds-trail-wrapper"> + <ul id="ds-trail"> + <!-- Display a language selection if more than 1 language is supported --> + <xsl:if + test="count(/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='page'][@qualifier='supportedLocale']) > 1"> + <div id="ds-language-selection"> + <xsl:for-each + select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='page'][@qualifier='supportedLocale']"> + <xsl:variable name="locale" select="." /> + <a> + <xsl:attribute name="href"> + <xsl:value-of select="concat($context-path, '/', $page-url, '?locale-attribute=')" /> + <xsl:value-of select="$locale" /> + </xsl:attribute> + <xsl:value-of + select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='supportedLocale'][@qualifier=$locale]" /> + </a> + </xsl:for-each> + </div> + </xsl:if> + + <xsl:choose> + <xsl:when test="starts-with($request-uri, 'page/about')"> + <li class="ds-trail-link first-link"> + <i18n:text>xmlui.structure.AboutRepositoryTrail</i18n:text> + </li> + </xsl:when> + <xsl:when test="count(/dri:document/dri:meta/dri:pageMeta/dri:trail) = 0"> + <li class="ds-trail-link first-link">-</li> + </xsl:when> + <xsl:otherwise> + <xsl:apply-templates select="/dri:document/dri:meta/dri:pageMeta/dri:trail"/> + </xsl:otherwise> + </xsl:choose> + </ul> + </div> + </xsl:template> + + <xsl:template match="dri:trail"> + <!--put an arrow between the parts of the trail--> + <xsl:if test="position()>1"> + <li class="ds-trail-arrow"> + <xsl:text>→</xsl:text> + </li> + </xsl:if> + <li> + <xsl:attribute name="class"> + <xsl:text>ds-trail-link </xsl:text> + <xsl:if test="position()=1"> + <xsl:text>first-link </xsl:text> + </xsl:if> + <xsl:if test="position()=last()"> + <xsl:text>last-link</xsl:text> + </xsl:if> + </xsl:attribute> + <!-- Determine whether we are dealing with a link or plain text trail link --> + <xsl:choose> + <xsl:when test="./@target"> + <a> + <xsl:attribute name="href"> + <xsl:value-of select="./@target"/> + </xsl:attribute> + <xsl:apply-templates /> + </a> + </xsl:when> + <xsl:otherwise> + <xsl:apply-templates /> + </xsl:otherwise> + </xsl:choose> + </li> + </xsl:template> + + <xsl:template match="dri:xref"> + <xsl:variable name="auxString"> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='request'][@qualifier='scheme']"/> + <xsl:text>://</xsl:text> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='request'][@qualifier='serverName']"/> + <xsl:text>:</xsl:text> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='request'][@qualifier='serverPort']"/> + <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='search'][@qualifier='advancedURL']"/> + <xsl:text>?</xsl:text> + + <!-- QUERY --> + <xsl:text>query=</xsl:text> + <xsl:value-of select="/dri:document/dri:body/dri:div[@n='search']/dri:div[@n='main-form']/dri:p[@n='hidden-fields']/dri:field[@id='aspect.discovery.SimpleSearch.field.query']"/> + + <xsl:text>&</xsl:text> + + <!-- PAGE --> + <xsl:text>page=</xsl:text> + <xsl:value-of select="/dri:document/dri:body/dri:div[@n='search']/dri:div[@n='main-form']/dri:p[@n='hidden-fields']/dri:field[@id='aspect.discovery.SimpleSearch.field.page']"/> + + <xsl:text>&</xsl:text> + <xsl:value-of select="@target" /> + <xsl:choose> + <xsl:when test="substring(@target, 1, 4) = 'rpp='"> + <xsl:text>&sort_by=</xsl:text> + <xsl:value-of select="/dri:document/dri:body/dri:div[@n='search']/dri:div[@n='main-form']/dri:p[@n='hidden-fields']/dri:field[@id='aspect.discovery.SimpleSearch.field.sort_by']"/> + <xsl:text>&order=</xsl:text> + <xsl:value-of select="/dri:document/dri:body/dri:div[@n='search']/dri:div[@n='main-form']/dri:p[@n='hidden-fields']/dri:field[@id='aspect.discovery.SimpleSearch.field.order']"/> + </xsl:when> + <xsl:when test="substring(@target, 1, 4) = 'sort'"> + <xsl:text>&rpp=</xsl:text> + <xsl:value-of select="/dri:document/dri:body/dri:div[@n='search']/dri:div[@n='main-form']/dri:p[@n='hidden-fields']/dri:field[@id='aspect.discovery.SimpleSearch.field.rpp']"/> + </xsl:when> + </xsl:choose> + </xsl:variable> + <a> + <xsl:if test="@target"> + <xsl:attribute name="href"><xsl:value-of select="@target"/></xsl:attribute> + <xsl:if test="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='title'] != 'xmlui.general.dspace_home'"> + <xsl:attribute name="href"> + <xsl:value-of select="$auxString"/> + </xsl:attribute> + </xsl:if> + </xsl:if> + + <xsl:if test="@rend"> + <xsl:attribute name="class"><xsl:value-of select="@rend"/></xsl:attribute> + </xsl:if> + + <xsl:if test="@n"> + <xsl:attribute name="name"><xsl:value-of select="@n"/></xsl:attribute> + </xsl:if> + + <xsl:apply-templates /> + </a> + </xsl:template> +<!-- ******************************************************************** --> + +</xsl:stylesheet> diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/cookies.js b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/cookies.js new file mode 100644 index 0000000..ebbadf1 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/cookies.js @@ -0,0 +1,47 @@ +/* + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +/* + + File created by James Russell + + cookies.js + Mobile theme for DSpace 1.6 + Last update by James Russell <james@ohiolink.edu> + September 12, 2012 +*/ + +function createCookie(name,value,days,domain) { + if (days) { + var date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + var expires = "; expires="+date.toGMTString(); + } + else var expires = ""; + if (domain) { + domain = "; domain="+domain; + } + else { + domain = ""; + } + document.cookie = name+"="+value+domain+expires+"; path=/"; +} + +function readCookie(name) { + var nameEQ = name + "="; + var ca = document.cookie.split(';'); + for(var i=0;i < ca.length;i++) { + var c = ca[i]; + while (c.charAt(0)==' ') c = c.substring(1,c.length); + if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); + } + return null; +} + +function eraseCookie(name) { + createCookie(name,"",-1); +} diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/detectmobile.LICENSE b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/detectmobile.LICENSE new file mode 100644 index 0000000..68a49da --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/detectmobile.LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +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 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. + +For more information, please refer to <http://unlicense.org/> diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/detectmobile.js b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/detectmobile.js new file mode 100644 index 0000000..cae2ea7 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/detectmobile.js @@ -0,0 +1,15 @@ +/* + Original file was downloaded from http://detectmobilebrowsers.com/ + + License + This is free and unencumbered software released into the public domain. + For more information, please refer to the UNLICENSE. + http://unlicense.org/ + + detectmobile.js + Mobile theme for DSpace 1.6 + Last update by James Russell <james@ohiolink.edu> + September 12, 2012 +*/ + +(function(a,b){if(readCookie('viewfull')!='true'&&/android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|meego.+mobile|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))window.location=b})(navigator.userAgent||navigator.vendor||window.opera,'http://mobile.dspace.lib.muohio.edu:8080/xmlui/'); diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/images/ajax-loader.gif b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/images/ajax-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..fd1a189c21fed1c7ba00c4bb4fad407bd6d1e5f9 GIT binary patch literal 7825 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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/images/default-thumbnail.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/images/default-thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..4712ed3642a755f06f0b8fb7bbe9c1c8357b22b9 GIT binary patch literal 5632 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 GXaWFE!oVs3 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/images/icons-18-black.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/images/icons-18-black.png new file mode 100644 index 0000000000000000000000000000000000000000..ce1b758ad580663f92c36fb0902afb677ded0b11 GIT binary patch literal 1767 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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/images/icons-18-white.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/images/icons-18-white.png new file mode 100644 index 0000000000000000000000000000000000000000..1ab01272379b93e554f8dbd0246ceb2012774899 GIT binary patch literal 1806 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 UXg$Zqz`(%Z>FVdQ&MBb@0KDH*{{R30 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/images/icons-36-black.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/images/icons-36-black.png new file mode 100644 index 0000000000000000000000000000000000000000..1a59d7c375d6611262a9ac86db23eb94570d7319 GIT binary patch literal 3611 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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/images/icons-36-white.png b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/images/icons-36-white.png new file mode 100644 index 0000000000000000000000000000000000000000..5647bdc945d547080a673d35a42e8cfe5f2bfe3e GIT binary patch literal 3648 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 literal 0 HcmV?d00001 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/m-tweaks.css b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/m-tweaks.css new file mode 100644 index 0000000..fe9941b --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/m-tweaks.css @@ -0,0 +1,603 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +/* + + This file was created to add mobile-friendly properties for DSpace elements + that sc-mobile.min.css cannot control. + + Last update by Elias Tzoc <tzoce@miamioh.edu> + September 30, 2013 + +*/ + + +/* setting up general margin properties */ +div#ds-body { +margin-top: -20px; +font-size: 90%; +} + +/* elements for new metadata display */ +div#metadata-wrapper { +background: #FFF; +border: none; +padding: 2px; +} + +div.metadata-view { +clear: both; +background: #FFF; +border: none; +padding: 5px; +line-height: 1.4em; +font-size: 1.2em; +} + +div.file-wrapper { +height: 57px; +padding: 5px; +background: #fafafa; +border: 1px solid #BDBDBD; +-moz-border-radius: 5px; +border-radius: 5px; +margin-bottom: 1px; +} + +div.file-metadata { +float:left; +margin-left: 5px; +line-height: 17px; +} + +div.thumbnail-wrapper { +float: left; +} + +div.thumbnail-wrapper img { +height: 55px; +border: 1px solid #ccc; +} + +div.artifact-description { +margin-top: -20px; +} + +div#featured-items { +display:none; +} + +div#aspect_artifactbrowser_ItemViewer_div_item-view h2 { +font-size: 20px; +margin-bottom: -1px; +} + +span.bold { +font-weight: bolder; +} + +form#aspect_artifactbrowser_SimpleSearch_div_general-query { +display:none; +} + +/* removing search for browsing collection/community pages */ +form#aspect_artifactbrowser_ConfigurableBrowse_div_browse-navigation p { +display: none; +} + +/* removing custom options for browsing in browse by author, title, and subject */ +form#aspect_artifactbrowser_ConfigurableBrowse_div_browse-controls { +display: none; +} + +/* formatting pagination elements */ +div.pagination-masked { +position: relative; +margin-left: 0px; +margin-top: 55px; +margin-bottom: 55px; +border-bottom: 1px solid #F2F2F2; +text-align: center; +} + +ul.pagination-links { +display:none; +} + + +div.pagination { +position: relative; +margin-left: 0px; +margin-top: 75px; +margin-bottom: 55px; +border-bottom: 1px solid #F2F2F2; +} + +a.previous-page-link { +position: absolute; +left: 0px; +bottom: 3px; +width: 50px; +margin-top: 75px; +text-align: center; +padding: 10px; +color: #000; +background: #E6E6E6; +border: 1px solid #ccc; +-moz-border-radius: 5px; +border-radius: 5px; +text-decoration: none; +} + +a.next-page-link { +position: absolute; +right: -1px; +bottom: 3px; +width: 50px; +text-align: center; +padding: 10px; +background: #E6E6E6; +border: 1px solid #ccc; +-moz-border-radius: 5px; +border-radius: 5px; +text-decoration: none; +} + +p.pagination-info { +position: absolute; +text-align: center; +width: 100%; +margin: 0 auto; +float:right; +text-align: center; +padding: 10px 0px; +background: #E6E6E6; +color: #000; +border: 1px solid #ccc; +-moz-border-radius: 5px; +border-radius: 5px; +} + +/* table properties for results page */ +table { +clear: both; +width: 100%; +padding: 5px; +} + +th.ds-table-header-cell, td.datacell { +text-align: right; +} + +td.labelcell { +text-align: left; +} + +tr.ds-table-header-row { +display: none; +} + +div#aspect_artifactbrowser_CommunityViewer_div_community-view h3 { +margin-bottom: 15px; +} + +/* resizing default ul.listview */ +ul.ui-listview { +padding: 0px 15px; +} + +/* modifying ul.listview borders */ +ul.ui-listview li { +margin-bottom: 1px; +border: 1px solid #ccc; +-moz-border-radius: 10px; +border-radius: 10px; +} + +ul.ds-artifact-list { +background: #fafafa; +list-style-type: none; +margin-top: 0px; +border: 1px solid #ccc; +-moz-border-radius: 5px; +border-radius: 5px; +} + +ul.ds-artifact-list li { +margin-left: 0px; +margin-top: 30px; +margin-right: 15px; +margin-bottom: 15px; +border-bottom: 0px solid #ccc; +} + +ul.ds-referenceSet-list { +background: #fafafa; +list-style-type: none; +margin-top: 0px; +border: 1px solid #ccc; +-moz-border-radius: 5px; +border-radius: 5px; +} + +ul.ds-referenceSet-list li { +margin-left: -30px; +margin-top: 5px; +margin-bottom: 5px; +border-bottom: 0px solid #ccc; +} + +div.artifact-info { +margin-top: 0px; +margin-bottom: 10px; +} + +div#aspect_artifactbrowser_CollectionViewer_div_collection-recent-submission { +margin-top: -15px; +} + +div#aspect_artifactbrowser_SimpleSearch_div_search-results h3 { +display:inline; +} + +p#aspect_artifactbrowser_SimpleSearch_p_result-query { +margin-top: -15px; +} + +/* removing complex or advanced elements */ +form#aspect_artifactbrowser_CommunityViewer_div_community-search a { +display:none; +} +form#aspect_artifactbrowser_CollectionViewer_div_collection-search a { +display:none; +} +div#aspect_artifactbrowser_SimpleSearch_div_search h3 { +display:none; +} +div#aspect_artifactbrowser_ItemViewer_div_item-view p { +display: none; +} + +form#aspect_artifactbrowser_CommunityViewer_div_community-search { +margin-top: -15px; +margin-bottom: 40px; +} + +form#aspect_artifactbrowser_CollectionViewer_div_collection-search { +margin-top: -15px; +margin-bottom: 40px; +} + +/* new mobile-optimized advanced search */ +#aspect_artifactbrowser_AdvancedSearch_list_search-query { +margin-left: -25px; +} + +#aspect_artifactbrowser_AdvancedSearch_table_search-query .ui-select .ui-btn { +width: 110px; +} + +table#aspect_artifactbrowser_AdvancedSearch_table_search-query, +table#aspect_artifactbrowser_AdvancedSearch_table_search-controls { +margin-left: 0px; +} + +/* A-Z browse on author, title and subject pages */ +ul#aspect_artifactbrowser_ConfigurableBrowse_list_jump-list { +margin-top: -15px; +padding-left: 0px; +padding-top: 0px; +list-style-type:none; +height: 75px; +min-width: 200px; +} + +ul#aspect_artifactbrowser_ConfigurableBrowse_list_jump-list a { +text-decoration: none; +padding: 5px 0px; +} + +ul#aspect_artifactbrowser_ConfigurableBrowse_list_jump-list li { +float:left; +min-width:9.9%; +height: 22px; +text-align:center; +background: #E6E6E6; +margin-bottom: 2px; +margin-right: 1px; +margin-left: 1px; +border: 1px solid #ccc; +-moz-border-radius: 5px; +border-radius: 5px; +font-size: 110%; +} + +/* removes extra line and margin control for community browser page */ +div#aspect_artifactbrowser_CommunityBrowser_div_comunity-browser p { +display:none; +} + +div#aspect_artifactbrowser_CommunityBrowser_div_comunity-browser { +margin-bottom: 40px; +} + +/* aligning elements on front-page */ +div#browse-front-page { +margin-bottom: 10px; +} + +#aspect_artifactbrowser_CollectionViewer_div_collection-browse li, +#aspect_artifactbrowser_CommunityViewer_div_community-browse li, +div#browse-front-page a { +float: left; +margin-right: 1%; +} + +div#file_news_div_news { +margin-top: -5px; +margin-bottom: -5px; +} + +form#search { +margin-bottom: 25px; +} + +h3.ds-list-head { +font-size: 18px; +margin-bottom: 1px; +} + +#aspect_artifactbrowser_CollectionSearch_p_search-query, +#aspect_artifactbrowser_CommunitySearch_p_search-query, +h3 { +background: #EEEFF1; +border-top: 4px solid #2E3435; +color: #2E3435; +font-size: 1.125em; +line-height: 1.5625em; +margin: 20px 0px 20px 0px; +font-weight: bold; +padding: 0.2em 0.2em 1em 0.5em; +clear: both; +} + +#aspect_artifactbrowser_CollectionSearch_field_query, +#aspect_artifactbrowser_CommunitySearch_field_query, +#search-box .ui-input-search { +width: 80%; +float: left; +margin-right: 1%; +height: 43px; +} +#aspect_artifactbrowser_CollectionSearch_p_search-query .ui-submit, +#aspect_artifactbrowser_CollectionSearch_field_query .ui-submit, +#aspect_artifactbrowser_CommunitySearch_p_search-query .ui-submit, +#search-box .ui-submit { float: left; } +#search-box h3 { margin-top: 10px; } + +#aspect_artifactbrowser_CollectionSearch_p_search-query input, +#aspect_artifactbrowser_CommunitySearch_p_search-query input, +#aspect_artifactbrowser_CommunitySearch_p_search-query .ui-submit { +margin-top: 40px; +} + +* { border-radius: 0px !important; } + +.ui-body-c .ui-link, +.ui-body-c .ui-link:visited, +a { text-decoration: none; color: #F57900 } + +.ui-body-c .ui-link:hover, +a:hover { color: #A04700; } + +#ds-language-selection a { font-size: 0.6em; float: left; padding: 5px; } +#ds-language-selection { float: right; } + +#ds-trail li { display: inline; padding: 5px; } + +.ui-content { clear: both; } + +#addthis-box a { + float: right; + display: inline; +} +#addthis-box { + font-weight: bold; + width: 190px; + position: absolute; + right: 20px; +} + +/* ------------------------------------------------------------------- */ +/* Adjust community's logo style on Homepage */ +div#aspect_artifactbrowser_CommunityBrowser_div_comunity-browser li { +float: left; +position: relative; +min-width: auto; +min-height: auto; +} + +div#aspect_artifactbrowser_CommunityBrowser_div_comunity-browser img { +float: left; +position: relative; +max-height: 110px; +max-width: 240px; +} + +div#aspect_artifactbrowser_CommunityBrowser_div_comunity-browser a { +padding-left: 40px; +} +/* ------------------------------------------------------------------- */ + +div#aspect_artifactbrowser_CommunityBrowser_div_comunity-browser li { +background: none; +border: 0px; +} + +div#aspect_artifactbrowser_CommunityBrowser_div_comunity-browser a { +padding: 10px; +} + +ul#aspect_discovery_SimpleSearch_list_rpp-selections li { +float: left; +padding: 10px; +list-style: none; +} + +/* Seach page */ + +#aspect_discovery_SimpleSearch_list_primary-search ol { +list-style: none; +} + +#aspect_discovery_SimpleSearch_list_primary-search > ol > li:nth-child(1) > label { +display: none; +} + +#aspect_discovery_SimpleSearch_list_primary-search div.ui-btn.ui-shadow.ui-btn-corner-all.ui-submit.ui-focus.ui-btn-hover-c.ui-btn-down-c { +width: 60px; +float: left; +} + +input#aspect_discovery_SimpleSearch_field_query { +width: 90%; +float: left; +} + +#aspect_discovery_SimpleSearch_list_primary-search > ol > li:nth-child(3) > div > a, +form#aspect_discovery_SimpleSearch_div_search-filters { +display: none; #FIXME Display filters don't working +} + +div#aspect_discovery_SimpleSearch_div_search-controls-gear ul { +list-style: none; +display: inline; +text-align: left; +} + +ul#aspect_discovery_SimpleSearch_list_rpp-selections li { +float: left; +padding: 5px; +} + +ul#aspect_discovery_SimpleSearch_list_sort-selections li { +float: left; +padding: 10px; +border: 1px solid #CCC; +margin: 3px; +} + +li#aspect_discovery_SimpleSearch_item_rpp-head { +clear: both; +padding: 4px; +font-weight: bold; +float: left; +} + +div.pagination-masked { +margin: 20px; +clear: both; +} + +li#aspect_discovery_SimpleSearch_item_sort-head { +margin-top: 33px; +font-weight: bold; +} + +ul.ds-artifact-list li { list-style: none; } + +div.artifact-description { +margin: 0px; +float: left; +width: 93%; +} + +ul.ds-artifact-list { border: 0px; padding-left: 0px;} + +div.pagination { clear: both; } + +p#aspect_discovery_SiteRecentSubmissions_p_recent-submission-view-more { +clear: both; +width: 100% +} + +div#aspect_artifactbrowser_CommunityBrowser_div_comunity-browser a { + padding: 0px !important; +} + +div#aspect_artifactbrowser_CommunityBrowser_div_comunity-browser img { + width: 213px !important; + padding-bottom: 10px !important; +} + +p#aspect_discovery_SiteRecentSubmissions_p_recent-submission-view-more { +clear: both !important; +} + +p#aspect_discovery_CollectionRecentSubmissions_p_recent-submission-view-more { +clear: both !important; +} + +#aspect_discovery_SimpleSearch_list_primary-search > ol > +li:nth-child(2) > div > div { + width: 8% !important; + float: left !important; + margin-left: 10px; + margin-top: 5px; +} + +div#aspect_discovery_SimpleSearch_div_search-controls-gear { +margin-left: 90px !important; +} + +ul.ds-artifact-list li { + list-style: none; + clear: both; +} + +div#aspect_discovery_SimpleSearch_div_search-results ul { +padding-left: 0px; +} + +div#aspect_discovery_SimpleSearch_div_search-results ul div.artifact-preview { +float: left; +position: absolute; +} + +div#aspect_discovery_SimpleSearch_div_search-results ul div.artifact-preview img { +max-width: 60px; +} + +div#aspect_discovery_SimpleSearch_div_search-results ul div.artifact-description { +padding-left: 70px; +height: 120px; +} + +#aspect_discovery_recentSubmissions_RecentSubmissionTransformer_div_recent-submissions ul div.artifact-preview, +#aspect_discovery_SiteRecentSubmissions_div_site-recent-submission ul div.artifact-preview, +#aspect_discovery_CollectionRecentSubmissions_div_collection-recent-submission ul div.artifact-preview { +float: left; +padding-bottom: 10px; +} +#aspect_discovery_recentSubmissions_RecentSubmissionTransformer_div_recent-submissions ul div.artifact-preview img, +#aspect_discovery_SiteRecentSubmissions_div_site-recent-submission ul div.artifact-preview img, +#aspect_discovery_CollectionRecentSubmissions_div_collection-recent-submission ul div.artifact-preview img { +max-height: 50px; +} + +#aspect_discovery_recentSubmissions_RecentSubmissionTransformer_div_recent-submissions ul div.artifact-description, +#aspect_discovery_SiteRecentSubmissions_div_site-recent-submission ul div.artifact-description, +#aspect_discovery_CollectionRecentSubmissions_div_collection-recent-submission ul div.artifact-description { +width: 90%; +margin-left: 10px; +} + +#aspect_artifactbrowser_CollectionSearch_p_search-query, +#aspect_artifactbrowser_CommunitySearch_p_search-query, h3 { +border-top: 4px solid #F57900 !important; +color: #F57900 !important; +} diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/m-tweaks.js b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/m-tweaks.js new file mode 100644 index 0000000..e69de29 diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/m-tweaks.ori b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/m-tweaks.ori new file mode 100755 index 0000000..bc33d41 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/m-tweaks.ori @@ -0,0 +1,348 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +/* + + This file was created to add mobile-friendly properties for DSpace elements + that sc-mobile.min.css cannot control. + + Last update by Elias Tzoc <tzoce@miamioh.edu> + September 30, 2013 + +*/ + + +/* setting up general margin properties */ +div#ds-body { +margin-top: -20px; +font-size: 90%; +} + +/* elements for new metadata display */ +div#metadata-wrapper { +background: #F2F2F2; +border: 1px solid #BDBDBD; +-moz-border-radius: 5px; +border-radius: 5px; +padding: 1px; +} + +div.metadata-view { +clear: both; +background: #F2F2F2; +border: 1px solid #d8d8d8; +-moz-border-radius: 5px; +border-radius: 5px; +padding: 2px 5px; +} + +div.file-wrapper { +height: 57px; +padding: 5px; +background: #fafafa; +border: 1px solid #BDBDBD; +-moz-border-radius: 5px; +border-radius: 5px; +margin-bottom: 1px; +} + +div.file-metadata { +float:left; +margin-left: 5px; +line-height: 17px; +} + +div.thumbnail-wrapper { +float: left; +} + +div.thumbnail-wrapper img { +height: 55px; +border: 1px solid #ccc; +} + +div.artifact-description { +margin-top: -20px; +} + +div#featured-items { +display:none; +} + +div#aspect_artifactbrowser_ItemViewer_div_item-view h2 { +font-size: 20px; +margin-bottom: -1px; +} + +span.bold { +font-weight: bolder; +} + +form#aspect_artifactbrowser_SimpleSearch_div_general-query { +display:none; +} + +/* removing search for browsing collection/community pages */ +form#aspect_artifactbrowser_ConfigurableBrowse_div_browse-navigation p { +display: none; +} + +/* removing custom options for browsing in browse by author, title, and subject */ +form#aspect_artifactbrowser_ConfigurableBrowse_div_browse-controls { +display: none; +} + +/* formatting pagination elements */ +div.pagination-masked { +position: relative; +margin-left: 0px; +margin-top: 55px; +margin-bottom: 55px; +border-bottom: 1px solid #F2F2F2; +text-align: center; +} + +ul.pagination-links { +display:none; +} + +div#addthis { +margin-top: -10px; +} + +div.pagination { +position: relative; +margin-left: 0px; +margin-top: 75px; +margin-bottom: 55px; +border-bottom: 1px solid #F2F2F2; +} + +a.previous-page-link { +position: absolute; +left: 0px; +bottom: 3px; +width: 50px; +margin-top: 75px; +text-align: center; +padding: 10px; +color: #000; +background: #E6E6E6; +border: 1px solid #ccc; +-moz-border-radius: 5px; +border-radius: 5px; +text-decoration: none; +} + +a.next-page-link { +position: absolute; +right: -1px; +bottom: 3px; +width: 50px; +text-align: center; +padding: 10px; +background: #E6E6E6; +border: 1px solid #ccc; +-moz-border-radius: 5px; +border-radius: 5px; +text-decoration: none; +} + +p.pagination-info { +position: absolute; +text-align: center; +width: 100%; +margin: 0 auto; +float:right; +text-align: center; +padding: 10px 0px; +background: #E6E6E6; +color: #000; +border: 1px solid #ccc; +-moz-border-radius: 5px; +border-radius: 5px; +} + +/* table properties for results page */ +table { +clear: both; +width: 100%; +text-align: left; +margin-left: -35px; +padding: 5px; +} + +tr.ds-table-header-row { +display: none; +} + +div#aspect_artifactbrowser_CommunityViewer_div_community-view h3 { +margin-bottom: 15px; +} + +/* resizing default ul.listview */ +ul.ui-listview { +padding: 0px 15px; +} + +/* modifying ul.listview borders */ +ul.ui-listview li { +margin-bottom: 1px; +border: 1px solid #ccc; +-moz-border-radius: 10px; +border-radius: 10px; +} + +ul.ds-artifact-list { +background: #fafafa; +list-style-type: none; +margin-top: 0px; +border: 1px solid #ccc; +-moz-border-radius: 5px; +border-radius: 5px; +} + +ul.ds-artifact-list li { +margin-left: -25px; +margin-top: 30px; +margin-right: 15px; +margin-bottom: 15px; +border-bottom: 0px solid #ccc; +} + +ul.ds-referenceSet-list { +background: #fafafa; +list-style-type: none; +margin-top: 0px; +border: 1px solid #ccc; +-moz-border-radius: 5px; +border-radius: 5px; +} + +ul.ds-referenceSet-list li { +margin-left: -30px; +margin-top: 5px; +margin-bottom: 5px; +border-bottom: 0px solid #ccc; +} + +div.artifact-info { +margin-top: 0px; +margin-bottom: 10px; +} + +div#aspect_artifactbrowser_CollectionViewer_div_collection-recent-submission { +margin-top: -15px; +} + +div#aspect_artifactbrowser_SimpleSearch_div_search-results h3 { +display:inline; +} + +p#aspect_artifactbrowser_SimpleSearch_p_result-query { +margin-top: -15px; +} + +/* removing complex or advanced elements */ +form#aspect_artifactbrowser_CommunityViewer_div_community-search a { +display:none; +} +form#aspect_artifactbrowser_CollectionViewer_div_collection-search a { +display:none; +} +div#aspect_artifactbrowser_SimpleSearch_div_search h3 { +display:none; +} +div#aspect_artifactbrowser_ItemViewer_div_item-view p { +display: none; +} + +form#aspect_artifactbrowser_CommunityViewer_div_community-search { +margin-top: -15px; +margin-bottom: 40px; +} + +form#aspect_artifactbrowser_CollectionViewer_div_collection-search { +margin-top: -15px; +margin-bottom: 40px; +} + +/* new mobile-optimized advanced search */ +#aspect_artifactbrowser_AdvancedSearch_list_search-query { +margin-left: -25px; +} + +#aspect_artifactbrowser_AdvancedSearch_table_search-query .ui-select .ui-btn { +width: 110px; +} + +table#aspect_artifactbrowser_AdvancedSearch_table_search-query, +table#aspect_artifactbrowser_AdvancedSearch_table_search-controls { +margin-left: 0px; +} + +/* A-Z browse on author, title and subject pages */ +ul#aspect_artifactbrowser_ConfigurableBrowse_list_jump-list { +margin-top: -15px; +padding-left: 0px; +padding-top: 0px; +list-style-type:none; +height: 75px; +min-width: 200px; +} + +ul#aspect_artifactbrowser_ConfigurableBrowse_list_jump-list a { +text-decoration: none; +padding: 5px 0px; +} + +ul#aspect_artifactbrowser_ConfigurableBrowse_list_jump-list li { +float:left; +min-width:9.9%; +height: 22px; +text-align:center; +background: #E6E6E6; +margin-bottom: 2px; +margin-right: 1px; +margin-left: 1px; +border: 1px solid #ccc; +-moz-border-radius: 5px; +border-radius: 5px; +font-size: 110%; +} + +/* removes extra line and margin control for community browser page */ +div#aspect_artifactbrowser_CommunityBrowser_div_comunity-browser p { +display:none; +} + +div#aspect_artifactbrowser_CommunityBrowser_div_comunity-browser { +margin-top: -18px; +margin-bottom: 40px; +} + +/* aligning elements on front-page */ +div#browse-front-page { +margin-top: -15px; +margin-bottom: 10px; +} + +div#file_news_div_news { +margin-top: -5px; +margin-bottom: -5px; +} + +form#search { +margin-top: -15px; +margin-bottom: 25px; +} + +h3.ds-list-head { +font-size: 18px; +margin-bottom: 1px; +} + diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/sc-mobile.LICENSE b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/sc-mobile.LICENSE new file mode 100644 index 0000000..6855306 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/sc-mobile.LICENSE @@ -0,0 +1,27 @@ +SC-mobile was created using http://jquerymobile.com/themeroller/ +jQuery Mobile is used under the terms of the MIT License +http://jquery.org/license/ + +-- + +Copyright 2012 jQuery Foundation and other contributors +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. diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/sc-mobile.css b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/sc-mobile.css new file mode 100644 index 0000000..6b9293f --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/sc-mobile.css @@ -0,0 +1,906 @@ +/* +* jQuery Mobile Framework 1.1.2 9a15f1aaf99faa7913103f5ea19ef6959b73d763 +* http://jquerymobile.com +* +* Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors +* Released under the MIT license. +* http://jquery.org/license +* +*/ +/* Swatches */ + +/* A +-----------------------------------------------------------------------------------------------------------*/ + +.ui-bar-a { + border: 1px solid #ffffff /*{a-bar-border}*/; + background: #ffffff /*{a-bar-background-color}*/; + color: #000000 /*{a-bar-color}*/; + font-weight: bold; + text-shadow: 0 /*{a-bar-shadow-x}*/ 1px /*{a-bar-shadow-y}*/ 1px /*{a-bar-shadow-radius}*/ #eeeeee /*{a-bar-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #FFFFFF /*{a-bar-background-start}*/), to( #e5e5e5 /*{a-bar-background-end}*/)); /* Saf4 , Chrome */ + background-image: -webkit-linear-gradient( #FFFFFF /*{a-bar-background-start}*/, #e5e5e5 /*{a-bar-background-end}*/); /* Chrome 10 , Saf5.1 */ + background-image: -moz-linear-gradient( #FFFFFF /*{a-bar-background-start}*/, #e5e5e5 /*{a-bar-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #FFFFFF /*{a-bar-background-start}*/, #e5e5e5 /*{a-bar-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #FFFFFF /*{a-bar-background-start}*/, #e5e5e5 /*{a-bar-background-end}*/); /* Opera 11.10 */ + background-image: linear-gradient( #FFFFFF /*{a-bar-background-start}*/, #e5e5e5 /*{a-bar-background-end}*/); +} +.ui-bar-a .ui-link-inherit { + color: #000000 /*{a-bar-color}*/; +} + +.ui-bar-a a.ui-link { + color: #7cc4e7 /*{a-bar-link-color}*/; + font-weight: bold; +} + +.ui-bar-a a.ui-link:visited { + color: #2489CE /*{a-bar-link-visited}*/; +} + +.ui-bar-a a.ui-link:hover { + color: #2489CE /*{a-bar-link-hover}*/; +} + +.ui-bar-a a.ui-link:active { + color: #2489CE /*{a-bar-link-active}*/; +} + +.ui-bar-a, +.ui-bar-a input, +.ui-bar-a select, +.ui-bar-a textarea, +.ui-bar-a button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-body-a, +.ui-overlay-a { + border: 1px solid #d6d6d6 /*{a-body-border}*/; + color: #333333 /*{a-body-color}*/; + text-shadow: 0 /*{a-body-shadow-x}*/ 1px /*{a-body-shadow-y}*/ 0 /*{a-body-shadow-radius}*/ #ffffff /*{a-body-shadow-color}*/; + background: #ffffff /*{a-body-background-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #FFFFFF /*{a-body-background-start}*/), to( #f9f9f9 /*{a-body-background-end}*/)); /* Saf4 , Chrome */ + background-image: -webkit-linear-gradient( #FFFFFF /*{a-body-background-start}*/, #f9f9f9 /*{a-body-background-end}*/); /* Chrome 10 , Saf5.1 */ + background-image: -moz-linear-gradient( #FFFFFF /*{a-body-background-start}*/, #f9f9f9 /*{a-body-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #FFFFFF /*{a-body-background-start}*/, #f9f9f9 /*{a-body-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #FFFFFF /*{a-body-background-start}*/, #f9f9f9 /*{a-body-background-end}*/); /* Opera 11.10 */ + background-image: linear-gradient( #FFFFFF /*{a-body-background-start}*/, #f9f9f9 /*{a-body-background-end}*/); +} +.ui-overlay-a { + background-image: none; + border-width: 0; +} +.ui-body-a, +.ui-body-a input, +.ui-body-a select, +.ui-body-a textarea, +.ui-body-a button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-body-a .ui-link-inherit { + color: #333333 /*{a-body-color}*/; +} + +.ui-body-a .ui-link { + color: #bc4b20 /*{a-body-link-color}*/; + font-weight: bold; +} + +.ui-body-a .ui-link:visited { + color: #2489CE /*{a-body-link-visited}*/; +} + +.ui-body-a .ui-link:hover { + color: #2489CE /*{a-body-link-hover}*/; +} + +.ui-body-a .ui-link:active { + color: #2489CE /*{a-body-link-active}*/; +} + +.ui-btn-up-a { + border: 1px solid #d6d6d6 /*{a-bup-border}*/; + background: #d6d6d6 /*{a-bup-background-color}*/; + font-weight: bold; + color: #333333 /*{a-bup-color}*/; + text-shadow: 0 /*{a-bup-shadow-x}*/ 1px /*{a-bup-shadow-y}*/ 0 /*{a-bup-shadow-radius}*/ #ffffff /*{a-bup-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #dadada /*{a-bup-background-start}*/), to( #d1d1d1 /*{a-bup-background-end}*/)); /* Saf4 , Chrome */ + background-image: -webkit-linear-gradient( #dadada /*{a-bup-background-start}*/, #d1d1d1 /*{a-bup-background-end}*/); /* Chrome 10 , Saf5.1 */ + background-image: -moz-linear-gradient( #dadada /*{a-bup-background-start}*/, #d1d1d1 /*{a-bup-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #dadada /*{a-bup-background-start}*/, #d1d1d1 /*{a-bup-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #dadada /*{a-bup-background-start}*/, #d1d1d1 /*{a-bup-background-end}*/); /* Opera 11.10 */ + background-image: linear-gradient( #dadada /*{a-bup-background-start}*/, #d1d1d1 /*{a-bup-background-end}*/); +} +.ui-btn-up-a:visited, +.ui-btn-up-a a.ui-link-inherit { + color: #333333 /*{a-bup-color}*/; +} +.ui-btn-hover-a { + border: 1px solid #d6d6d6 /*{a-bhover-border}*/; + background: #d6d6d6 /*{a-bhover-background-color}*/; + font-weight: bold; + color: #000000 /*{a-bhover-color}*/; + text-shadow: 0 /*{a-bhover-shadow-x}*/ 1px /*{a-bhover-shadow-y}*/ 0 /*{a-bhover-shadow-radius}*/ #ffffff /*{a-bhover-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #e9e9e9 /*{a-bhover-background-start}*/), to( #c2c2c2 /*{a-bhover-background-end}*/)); /* Saf4 , Chrome */ + background-image: -webkit-linear-gradient( #e9e9e9 /*{a-bhover-background-start}*/, #c2c2c2 /*{a-bhover-background-end}*/); /* Chrome 10 , Saf5.1 */ + background-image: -moz-linear-gradient( #e9e9e9 /*{a-bhover-background-start}*/, #c2c2c2 /*{a-bhover-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #e9e9e9 /*{a-bhover-background-start}*/, #c2c2c2 /*{a-bhover-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #e9e9e9 /*{a-bhover-background-start}*/, #c2c2c2 /*{a-bhover-background-end}*/); /* Opera 11.10 */ + background-image: linear-gradient( #e9e9e9 /*{a-bhover-background-start}*/, #c2c2c2 /*{a-bhover-background-end}*/); +} +.ui-btn-hover-a:visited, +.ui-btn-hover-a:hover, +.ui-btn-hover-a a.ui-link-inherit { + color: #000000 /*{a-bhover-color}*/; +} +.ui-btn-down-a { + border: 1px solid #bbbbbb /*{a-bdown-border}*/; + background: #d6d6d6 /*{a-bdown-background-color}*/; + font-weight: bold; + color: #333333 /*{a-bdown-color}*/; + text-shadow: 0 /*{a-bdown-shadow-x}*/ 1px /*{a-bdown-shadow-y}*/ 0 /*{a-bdown-shadow-radius}*/ #ffffff /*{a-bdown-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #bebebe /*{a-bdown-background-start}*/), to( #ededed /*{a-bdown-background-end}*/)); /* Saf4 , Chrome */ + background-image: -webkit-linear-gradient( #bebebe /*{a-bdown-background-start}*/, #ededed /*{a-bdown-background-end}*/); /* Chrome 10 , Saf5.1 */ + background-image: -moz-linear-gradient( #bebebe /*{a-bdown-background-start}*/, #ededed /*{a-bdown-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #bebebe /*{a-bdown-background-start}*/, #ededed /*{a-bdown-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #bebebe /*{a-bdown-background-start}*/, #ededed /*{a-bdown-background-end}*/); /* Opera 11.10 */ + background-image: linear-gradient( #bebebe /*{a-bdown-background-start}*/, #ededed /*{a-bdown-background-end}*/); +} +.ui-btn-down-a:visited, +.ui-btn-down-a:hover, +.ui-btn-down-a a.ui-link-inherit { + color: #333333 /*{a-bdown-color}*/; +} +.ui-btn-up-a, +.ui-btn-hover-a, +.ui-btn-down-a { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; + text-decoration: none; +} + + +/* B +-----------------------------------------------------------------------------------------------------------*/ + +.ui-bar-b { + border: 1px solid #ffffff /*{b-bar-border}*/; + background: #ffffff /*{b-bar-background-color}*/; + color: #000000 /*{b-bar-color}*/; + font-weight: bold; + text-shadow: 0 /*{b-bar-shadow-x}*/ 1px /*{b-bar-shadow-y}*/ 1px /*{b-bar-shadow-radius}*/ #eeeeee /*{b-bar-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #FFFFFF /*{b-bar-background-start}*/), to( #e5e5e5 /*{b-bar-background-end}*/)); /* Saf4 , Chrome */ + background-image: -webkit-linear-gradient( #FFFFFF /*{b-bar-background-start}*/, #e5e5e5 /*{b-bar-background-end}*/); /* Chrome 10 , Saf5.1 */ + background-image: -moz-linear-gradient( #FFFFFF /*{b-bar-background-start}*/, #e5e5e5 /*{b-bar-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #FFFFFF /*{b-bar-background-start}*/, #e5e5e5 /*{b-bar-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #FFFFFF /*{b-bar-background-start}*/, #e5e5e5 /*{b-bar-background-end}*/); /* Opera 11.10 */ + background-image: linear-gradient( #FFFFFF /*{b-bar-background-start}*/, #e5e5e5 /*{b-bar-background-end}*/); +} +.ui-bar-b .ui-link-inherit { + color: #000000 /*{b-bar-color}*/; +} + +.ui-bar-b a.ui-link { + color: #7cc4e7 /*{b-bar-link-color}*/; + font-weight: bold; +} + +.ui-bar-b a.ui-link:visited { + color: #2489CE /*{b-bar-link-visited}*/; +} + +.ui-bar-b a.ui-link:hover { + color: #2489CE /*{b-bar-link-hover}*/; +} + +.ui-bar-b a.ui-link:active { + color: #2489CE /*{b-bar-link-active}*/; +} + +.ui-bar-b, +.ui-bar-b input, +.ui-bar-b select, +.ui-bar-b textarea, +.ui-bar-b button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-body-b, +.ui-overlay-b { + border: 1px solid #d6d6d6 /*{b-body-border}*/; + color: #333333 /*{b-body-color}*/; + text-shadow: 0 /*{b-body-shadow-x}*/ 1px /*{b-body-shadow-y}*/ 0 /*{b-body-shadow-radius}*/ #ffffff /*{b-body-shadow-color}*/; + background: #ffffff /*{b-body-background-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #FFFFFF /*{b-body-background-start}*/), to( #f9f9f9 /*{b-body-background-end}*/)); /* Saf4 , Chrome */ + background-image: -webkit-linear-gradient( #FFFFFF /*{b-body-background-start}*/, #f9f9f9 /*{b-body-background-end}*/); /* Chrome 10 , Saf5.1 */ + background-image: -moz-linear-gradient( #FFFFFF /*{b-body-background-start}*/, #f9f9f9 /*{b-body-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #FFFFFF /*{b-body-background-start}*/, #f9f9f9 /*{b-body-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #FFFFFF /*{b-body-background-start}*/, #f9f9f9 /*{b-body-background-end}*/); /* Opera 11.10 */ + background-image: linear-gradient( #FFFFFF /*{b-body-background-start}*/, #f9f9f9 /*{b-body-background-end}*/); +} +.ui-overlay-b { + background-image: none; + border-width: 0; +} +.ui-body-b, +.ui-body-b input, +.ui-body-b select, +.ui-body-b textarea, +.ui-body-b button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-body-b .ui-link-inherit { + color: #333333 /*{b-body-color}*/; +} + +.ui-body-b .ui-link { + color: #bc4b20 /*{b-body-link-color}*/; + font-weight: bold; +} + +.ui-body-b .ui-link:visited { + color: #2489CE /*{b-body-link-visited}*/; +} + +.ui-body-b .ui-link:hover { + color: #2489CE /*{b-body-link-hover}*/; +} + +.ui-body-b .ui-link:active { + color: #2489CE /*{b-body-link-active}*/; +} + +.ui-btn-up-b { + border: 1px solid #d6d6d6 /*{b-bup-border}*/; + background: #d6d6d6 /*{b-bup-background-color}*/; + font-weight: bold; + color: #333333 /*{b-bup-color}*/; + text-shadow: 0 /*{b-bup-shadow-x}*/ 1px /*{b-bup-shadow-y}*/ 0 /*{b-bup-shadow-radius}*/ #ffffff /*{b-bup-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #dadada /*{b-bup-background-start}*/), to( #d1d1d1 /*{b-bup-background-end}*/)); /* Saf4 , Chrome */ + background-image: -webkit-linear-gradient( #dadada /*{b-bup-background-start}*/, #d1d1d1 /*{b-bup-background-end}*/); /* Chrome 10 , Saf5.1 */ + background-image: -moz-linear-gradient( #dadada /*{b-bup-background-start}*/, #d1d1d1 /*{b-bup-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #dadada /*{b-bup-background-start}*/, #d1d1d1 /*{b-bup-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #dadada /*{b-bup-background-start}*/, #d1d1d1 /*{b-bup-background-end}*/); /* Opera 11.10 */ + background-image: linear-gradient( #dadada /*{b-bup-background-start}*/, #d1d1d1 /*{b-bup-background-end}*/); +} +.ui-btn-up-b:visited, +.ui-btn-up-b a.ui-link-inherit { + color: #333333 /*{b-bup-color}*/; +} +.ui-btn-hover-b { + border: 1px solid #d6d6d6 /*{b-bhover-border}*/; + background: #d6d6d6 /*{b-bhover-background-color}*/; + font-weight: bold; + color: #000000 /*{b-bhover-color}*/; + text-shadow: 0 /*{b-bhover-shadow-x}*/ 1px /*{b-bhover-shadow-y}*/ 0 /*{b-bhover-shadow-radius}*/ #ffffff /*{b-bhover-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #e9e9e9 /*{b-bhover-background-start}*/), to( #c2c2c2 /*{b-bhover-background-end}*/)); /* Saf4 , Chrome */ + background-image: -webkit-linear-gradient( #e9e9e9 /*{b-bhover-background-start}*/, #c2c2c2 /*{b-bhover-background-end}*/); /* Chrome 10 , Saf5.1 */ + background-image: -moz-linear-gradient( #e9e9e9 /*{b-bhover-background-start}*/, #c2c2c2 /*{b-bhover-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #e9e9e9 /*{b-bhover-background-start}*/, #c2c2c2 /*{b-bhover-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #e9e9e9 /*{b-bhover-background-start}*/, #c2c2c2 /*{b-bhover-background-end}*/); /* Opera 11.10 */ + background-image: linear-gradient( #e9e9e9 /*{b-bhover-background-start}*/, #c2c2c2 /*{b-bhover-background-end}*/); +} +.ui-btn-hover-b:visited, +.ui-btn-hover-b:hover, +.ui-btn-hover-b a.ui-link-inherit { + color: #000000 /*{b-bhover-color}*/; +} +.ui-btn-down-b { + border: 1px solid #bbbbbb /*{b-bdown-border}*/; + background: #d6d6d6 /*{b-bdown-background-color}*/; + font-weight: bold; + color: #333333 /*{b-bdown-color}*/; + text-shadow: 0 /*{b-bdown-shadow-x}*/ 1px /*{b-bdown-shadow-y}*/ 0 /*{b-bdown-shadow-radius}*/ #ffffff /*{b-bdown-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #bebebe /*{b-bdown-background-start}*/), to( #ededed /*{b-bdown-background-end}*/)); /* Saf4 , Chrome */ + background-image: -webkit-linear-gradient( #bebebe /*{b-bdown-background-start}*/, #ededed /*{b-bdown-background-end}*/); /* Chrome 10 , Saf5.1 */ + background-image: -moz-linear-gradient( #bebebe /*{b-bdown-background-start}*/, #ededed /*{b-bdown-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #bebebe /*{b-bdown-background-start}*/, #ededed /*{b-bdown-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #bebebe /*{b-bdown-background-start}*/, #ededed /*{b-bdown-background-end}*/); /* Opera 11.10 */ + background-image: linear-gradient( #bebebe /*{b-bdown-background-start}*/, #ededed /*{b-bdown-background-end}*/); +} +.ui-btn-down-b:visited, +.ui-btn-down-b:hover, +.ui-btn-down-b a.ui-link-inherit { + color: #333333 /*{b-bdown-color}*/; +} +.ui-btn-up-b, +.ui-btn-hover-b, +.ui-btn-down-b { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; + text-decoration: none; +} + + + + +/* C +-----------------------------------------------------------------------------------------------------------*/ + +.ui-bar-c { + border: 1px solid #ffffff /*{c-bar-border}*/; + background: #ffffff /*{c-bar-background-color}*/; + color: #000000 /*{c-bar-color}*/; + font-weight: bold; + text-shadow: 0 /*{c-bar-shadow-x}*/ 1px /*{c-bar-shadow-y}*/ 1px /*{c-bar-shadow-radius}*/ #eeeeee /*{c-bar-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #FFFFFF /*{c-bar-background-start}*/), to( #e5e5e5 /*{c-bar-background-end}*/)); /* Saf4 , Chrome */ + background-image: -webkit-linear-gradient( #FFFFFF /*{c-bar-background-start}*/, #e5e5e5 /*{c-bar-background-end}*/); /* Chrome 10 , Saf5.1 */ + background-image: -moz-linear-gradient( #FFFFFF /*{c-bar-background-start}*/, #e5e5e5 /*{c-bar-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #FFFFFF /*{c-bar-background-start}*/, #e5e5e5 /*{c-bar-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #FFFFFF /*{c-bar-background-start}*/, #e5e5e5 /*{c-bar-background-end}*/); /* Opera 11.10 */ + background-image: linear-gradient( #FFFFFF /*{c-bar-background-start}*/, #e5e5e5 /*{c-bar-background-end}*/); +} +.ui-bar-c .ui-link-inherit { + color: #000000 /*{c-bar-color}*/; +} + +.ui-bar-c a.ui-link { + color: #7cc4e7 /*{c-bar-link-color}*/; + font-weight: bold; +} + +.ui-bar-c a.ui-link:visited { + color: #2489CE /*{c-bar-link-visited}*/; +} + +.ui-bar-c a.ui-link:hover { + color: #2489CE /*{c-bar-link-hover}*/; +} + +.ui-bar-c a.ui-link:active { + color: #2489CE /*{c-bar-link-active}*/; +} + +.ui-bar-c, +.ui-bar-c input, +.ui-bar-c select, +.ui-bar-c textarea, +.ui-bar-c button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-body-c, +.ui-overlay-c { + border: 1px solid #d6d6d6 /*{c-body-border}*/; + color: #333333 /*{c-body-color}*/; + text-shadow: 0 /*{c-body-shadow-x}*/ 1px /*{c-body-shadow-y}*/ 0 /*{c-body-shadow-radius}*/ #ffffff /*{c-body-shadow-color}*/; + background: #ffffff /*{c-body-background-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #FFFFFF /*{c-body-background-start}*/), to( #f9f9f9 /*{c-body-background-end}*/)); /* Saf4 , Chrome */ + background-image: -webkit-linear-gradient( #FFFFFF /*{c-body-background-start}*/, #f9f9f9 /*{c-body-background-end}*/); /* Chrome 10 , Saf5.1 */ + background-image: -moz-linear-gradient( #FFFFFF /*{c-body-background-start}*/, #f9f9f9 /*{c-body-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #FFFFFF /*{c-body-background-start}*/, #f9f9f9 /*{c-body-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #FFFFFF /*{c-body-background-start}*/, #f9f9f9 /*{c-body-background-end}*/); /* Opera 11.10 */ + background-image: linear-gradient( #FFFFFF /*{c-body-background-start}*/, #f9f9f9 /*{c-body-background-end}*/); +} +.ui-overlay-c { + background-image: none; + border-width: 0; +} +.ui-body-c, +.ui-body-c input, +.ui-body-c select, +.ui-body-c textarea, +.ui-body-c button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-body-c .ui-link-inherit { + color: #333333 /*{c-body-color}*/; +} + +.ui-body-c .ui-link { + color: #bc4b20 /*{c-body-link-color}*/; + font-weight: bold; +} + +.ui-body-c .ui-link:visited { + color: #2489CE /*{c-body-link-visited}*/; +} + +.ui-body-c .ui-link:hover { + color: #2489CE /*{c-body-link-hover}*/; +} + +.ui-body-c .ui-link:active { + color: #2489CE /*{c-body-link-active}*/; +} + +.ui-btn-up-c { + border: 1px solid #d6d6d6 /*{c-bup-border}*/; + background: #d6d6d6 /*{c-bup-background-color}*/; + font-weight: bold; + color: #333333 /*{c-bup-color}*/; + text-shadow: 0 /*{c-bup-shadow-x}*/ 1px /*{c-bup-shadow-y}*/ 0 /*{c-bup-shadow-radius}*/ #ffffff /*{c-bup-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #dadada /*{c-bup-background-start}*/), to( #d1d1d1 /*{c-bup-background-end}*/)); /* Saf4 , Chrome */ + background-image: -webkit-linear-gradient( #dadada /*{c-bup-background-start}*/, #d1d1d1 /*{c-bup-background-end}*/); /* Chrome 10 , Saf5.1 */ + background-image: -moz-linear-gradient( #dadada /*{c-bup-background-start}*/, #d1d1d1 /*{c-bup-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #dadada /*{c-bup-background-start}*/, #d1d1d1 /*{c-bup-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #dadada /*{c-bup-background-start}*/, #d1d1d1 /*{c-bup-background-end}*/); /* Opera 11.10 */ + background-image: linear-gradient( #dadada /*{c-bup-background-start}*/, #d1d1d1 /*{c-bup-background-end}*/); +} +.ui-btn-up-c:visited, +.ui-btn-up-c a.ui-link-inherit { + color: #333333 /*{c-bup-color}*/; +} +.ui-btn-hover-c { + border: 1px solid #d6d6d6 /*{c-bhover-border}*/; + background: #d6d6d6 /*{c-bhover-background-color}*/; + font-weight: bold; + color: #000000 /*{c-bhover-color}*/; + text-shadow: 0 /*{c-bhover-shadow-x}*/ 1px /*{c-bhover-shadow-y}*/ 0 /*{c-bhover-shadow-radius}*/ #ffffff /*{c-bhover-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #e9e9e9 /*{c-bhover-background-start}*/), to( #c2c2c2 /*{c-bhover-background-end}*/)); /* Saf4 , Chrome */ + background-image: -webkit-linear-gradient( #e9e9e9 /*{c-bhover-background-start}*/, #c2c2c2 /*{c-bhover-background-end}*/); /* Chrome 10 , Saf5.1 */ + background-image: -moz-linear-gradient( #e9e9e9 /*{c-bhover-background-start}*/, #c2c2c2 /*{c-bhover-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #e9e9e9 /*{c-bhover-background-start}*/, #c2c2c2 /*{c-bhover-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #e9e9e9 /*{c-bhover-background-start}*/, #c2c2c2 /*{c-bhover-background-end}*/); /* Opera 11.10 */ + background-image: linear-gradient( #e9e9e9 /*{c-bhover-background-start}*/, #c2c2c2 /*{c-bhover-background-end}*/); +} +.ui-btn-hover-c:visited, +.ui-btn-hover-c:hover, +.ui-btn-hover-c a.ui-link-inherit { + color: #000000 /*{c-bhover-color}*/; +} +.ui-btn-down-c { + border: 1px solid #bbbbbb /*{c-bdown-border}*/; + background: #d6d6d6 /*{c-bdown-background-color}*/; + font-weight: bold; + color: #333333 /*{c-bdown-color}*/; + text-shadow: 0 /*{c-bdown-shadow-x}*/ 1px /*{c-bdown-shadow-y}*/ 0 /*{c-bdown-shadow-radius}*/ #ffffff /*{c-bdown-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #bebebe /*{c-bdown-background-start}*/), to( #ededed /*{c-bdown-background-end}*/)); /* Saf4 , Chrome */ + background-image: -webkit-linear-gradient( #bebebe /*{c-bdown-background-start}*/, #ededed /*{c-bdown-background-end}*/); /* Chrome 10 , Saf5.1 */ + background-image: -moz-linear-gradient( #bebebe /*{c-bdown-background-start}*/, #ededed /*{c-bdown-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #bebebe /*{c-bdown-background-start}*/, #ededed /*{c-bdown-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #bebebe /*{c-bdown-background-start}*/, #ededed /*{c-bdown-background-end}*/); /* Opera 11.10 */ + background-image: linear-gradient( #bebebe /*{c-bdown-background-start}*/, #ededed /*{c-bdown-background-end}*/); +} +.ui-btn-down-c:visited, +.ui-btn-down-c:hover, +.ui-btn-down-c a.ui-link-inherit { + color: #333333 /*{c-bdown-color}*/; +} +.ui-btn-up-c, +.ui-btn-hover-c, +.ui-btn-down-c { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; + text-decoration: none; +} + + + + +/* Structure */ + +/* links within "buttons" +-----------------------------------------------------------------------------------------------------------*/ + +a.ui-link-inherit { + text-decoration: none !important; +} + + +/* Active class used as the "on" state across all themes +-----------------------------------------------------------------------------------------------------------*/ +.ui-btn-active { + border: 1px solid #bc4b20 /*{global-active-border}*/; + background: #de4517 /*{global-active-background-color}*/; + font-weight: bold; + color: #ffffff /*{global-active-color}*/; + cursor: pointer; + text-shadow: 0 /*{global-active-shadow-x}*/ 1px /*{global-active-shadow-y}*/ 1px /*{global-active-shadow-radius}*/ #bc4b20 /*{global-active-shadow-color}*/; + text-decoration: none; + background-image: -webkit-gradient(linear, left top, left bottom, from( #de4517 /*{global-active-background-start}*/), to( #de4517 /*{global-active-background-end}*/)); /* Saf4 , Chrome */ + background-image: -webkit-linear-gradient( #de4517 /*{global-active-background-start}*/, #de4517 /*{global-active-background-end}*/); /* Chrome 10 , Saf5.1 */ + background-image: -moz-linear-gradient( #de4517 /*{global-active-background-start}*/, #de4517 /*{global-active-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #de4517 /*{global-active-background-start}*/, #de4517 /*{global-active-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #de4517 /*{global-active-background-start}*/, #de4517 /*{global-active-background-end}*/); /* Opera 11.10 */ + background-image: linear-gradient( #de4517 /*{global-active-background-start}*/, #de4517 /*{global-active-background-end}*/); + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-btn-active:visited, +.ui-btn-active:hover, +.ui-btn-active a.ui-link-inherit { + color: #ffffff /*{global-active-color}*/; +} + + +/* button inner top highlight +-----------------------------------------------------------------------------------------------------------*/ + +.ui-btn-inner { + border-top: 1px solid #fff; + border-color: rgba(255,255,255,.3); +} + + +/* corner rounding classes +-----------------------------------------------------------------------------------------------------------*/ + +.ui-corner-tl { + -moz-border-radius-topleft: 0 /*{global-radii-blocks}*/; + -webkit-border-top-left-radius: 0 /*{global-radii-blocks}*/; + border-top-left-radius: 0 /*{global-radii-blocks}*/; +} +.ui-corner-tr { + -moz-border-radius-topright: 0 /*{global-radii-blocks}*/; + -webkit-border-top-right-radius: 0 /*{global-radii-blocks}*/; + border-top-right-radius: 0 /*{global-radii-blocks}*/; +} +.ui-corner-bl { + -moz-border-radius-bottomleft: 0 /*{global-radii-blocks}*/; + -webkit-border-bottom-left-radius: 0 /*{global-radii-blocks}*/; + border-bottom-left-radius: 0 /*{global-radii-blocks}*/; +} +.ui-corner-br { + -moz-border-radius-bottomright: 0 /*{global-radii-blocks}*/; + -webkit-border-bottom-right-radius: 0 /*{global-radii-blocks}*/; + border-bottom-right-radius: 0 /*{global-radii-blocks}*/; +} +.ui-corner-top { + -moz-border-radius-topleft: 0 /*{global-radii-blocks}*/; + -webkit-border-top-left-radius: 0 /*{global-radii-blocks}*/; + border-top-left-radius: 0 /*{global-radii-blocks}*/; + -moz-border-radius-topright: 0 /*{global-radii-blocks}*/; + -webkit-border-top-right-radius: 0 /*{global-radii-blocks}*/; + border-top-right-radius: 0 /*{global-radii-blocks}*/; +} +.ui-corner-bottom { + -moz-border-radius-bottomleft: 0 /*{global-radii-blocks}*/; + -webkit-border-bottom-left-radius: 0 /*{global-radii-blocks}*/; + border-bottom-left-radius: 0 /*{global-radii-blocks}*/; + -moz-border-radius-bottomright: 0 /*{global-radii-blocks}*/; + -webkit-border-bottom-right-radius: 0 /*{global-radii-blocks}*/; + border-bottom-right-radius: 0 /*{global-radii-blocks}*/; + } +.ui-corner-right { + -moz-border-radius-topright: 0 /*{global-radii-blocks}*/; + -webkit-border-top-right-radius: 0 /*{global-radii-blocks}*/; + border-top-right-radius: 0 /*{global-radii-blocks}*/; + -moz-border-radius-bottomright: 0 /*{global-radii-blocks}*/; + -webkit-border-bottom-right-radius: 0 /*{global-radii-blocks}*/; + border-bottom-right-radius: 0 /*{global-radii-blocks}*/; +} +.ui-corner-left { + -moz-border-radius-topleft: 0 /*{global-radii-blocks}*/; + -webkit-border-top-left-radius: 0 /*{global-radii-blocks}*/; + border-top-left-radius: 0 /*{global-radii-blocks}*/; + -moz-border-radius-bottomleft: 0 /*{global-radii-blocks}*/; + -webkit-border-bottom-left-radius: 0 /*{global-radii-blocks}*/; + border-bottom-left-radius: 0 /*{global-radii-blocks}*/; +} +.ui-corner-all { + -moz-border-radius: 0 /*{global-radii-blocks}*/; + -webkit-border-radius: 0 /*{global-radii-blocks}*/; + border-radius: 0 /*{global-radii-blocks}*/; +} +.ui-corner-none { + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; +} + +/* Form field separator +-----------------------------------------------------------------------------------------------------------*/ +.ui-br { + border-bottom: rgb(130,130,130); + border-bottom: rgba(130,130,130,.3); + border-bottom-width: 1px; + border-bottom-style: solid; +} + +/* Interaction cues +-----------------------------------------------------------------------------------------------------------*/ +.ui-disabled { + filter: Alpha(Opacity=30); + opacity: .3; + zoom: 1; +} +.ui-disabled, +.ui-disabled a { + cursor: default !important; + pointer-events: none; +} + +/* Icons +-----------------------------------------------------------------------------------------------------------*/ + +.ui-icon, +.ui-icon-searchfield:after { + background: #000000 /*{global-icon-color}*/; + background: transparent /*{global-icon-disc}*/; + background-image: url(images/icons-18-black.png) /*{global-icon-set}*/; + background-repeat: no-repeat; + -moz-border-radius: 9px; + -webkit-border-radius: 9px; + border-radius: 9px; +} + + +/* Alt icon color +-----------------------------------------------------------------------------------------------------------*/ + +.ui-icon-alt { + background: #fff; + background: rgba(255,255,255,.3); + background-image: url(images/icons-18-black.png); + background-repeat: no-repeat; +} + +/* HD/"retina" sprite +-----------------------------------------------------------------------------------------------------------*/ + +@media only screen and (-webkit-min-device-pixel-ratio: 1.5), + only screen and (min--moz-device-pixel-ratio: 1.5), + only screen and (min-resolution: 240dpi) { + + .ui-icon-plus, .ui-icon-minus, .ui-icon-delete, .ui-icon-arrow-r, + .ui-icon-arrow-l, .ui-icon-arrow-u, .ui-icon-arrow-d, .ui-icon-check, + .ui-icon-gear, .ui-icon-refresh, .ui-icon-forward, .ui-icon-back, + .ui-icon-grid, .ui-icon-star, .ui-icon-alert, .ui-icon-info, .ui-icon-home, .ui-icon-search, .ui-icon-searchfield:after, + .ui-icon-checkbox-off, .ui-icon-checkbox-on, .ui-icon-radio-off, .ui-icon-radio-on { + background-image: url(images/icons-36-white.png); + -moz-background-size: 776px 18px; + -o-background-size: 776px 18px; + -webkit-background-size: 776px 18px; + background-size: 776px 18px; + } + .ui-icon-alt { + background-image: url(images/icons-36-black.png); + } +} + +/* plus minus */ +.ui-icon-plus { + background-position: -0 50%; +} +.ui-icon-minus { + background-position: -36px 50%; +} + +/* delete/close */ +.ui-icon-delete { + background-position: -72px 50%; +} + +/* arrows */ +.ui-icon-arrow-r { + background-position: -108px 50%; +} +.ui-icon-arrow-l { + background-position: -144px 50%; +} +.ui-icon-arrow-u { + background-position: -180px 50%; +} +.ui-icon-arrow-d { + background-position: -216px 50%; +} + +/* misc */ +.ui-icon-check { + background-position: -252px 50%; +} +.ui-icon-gear { + background-position: -288px 50%; +} +.ui-icon-refresh { + background-position: -324px 50%; +} +.ui-icon-forward { + background-position: -360px 50%; +} +.ui-icon-back { + background-position: -396px 50%; +} +.ui-icon-grid { + background-position: -432px 50%; +} +.ui-icon-star { + background-position: -468px 50%; +} +.ui-icon-alert { + background-position: -504px 50%; +} +.ui-icon-info { + background-position: -540px 50%; +} +.ui-icon-home { + background-position: -576px 50%; +} +.ui-icon-search, +.ui-icon-searchfield:after { + background-position: -612px 50%; +} +.ui-icon-checkbox-off { + background-position: -684px 50%; +} +.ui-icon-checkbox-on { + background-position: -648px 50%; +} +.ui-icon-radio-off { + background-position: -756px 50%; +} +.ui-icon-radio-on { + background-position: -720px 50%; +} + + +/* checks,radios */ +.ui-checkbox .ui-icon { + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} +.ui-icon-checkbox-off, +.ui-icon-radio-off { + background-color: transparent; +} +.ui-checkbox-on .ui-icon, +.ui-radio-on .ui-icon { + background-color: #de4517 /*{global-active-background-color}*/; /* NOTE: this hex should match the active state color. It's repeated here for cascade */ +} + +/* loading icon */ +.ui-icon-loading { + background: url(images/ajax-loader.gif); + background-size: 46px 46px; +} + + +/* Button corner classes +-----------------------------------------------------------------------------------------------------------*/ + +.ui-btn-corner-tl { + -moz-border-radius-topleft: 0 /*{global-radii-buttons}*/; + -webkit-border-top-left-radius: 0 /*{global-radii-buttons}*/; + border-top-left-radius: 0 /*{global-radii-buttons}*/; +} +.ui-btn-corner-tr { + -moz-border-radius-topright: 0 /*{global-radii-buttons}*/; + -webkit-border-top-right-radius: 0 /*{global-radii-buttons}*/; + border-top-right-radius: 0 /*{global-radii-buttons}*/; +} +.ui-btn-corner-bl { + -moz-border-radius-bottomleft: 0 /*{global-radii-buttons}*/; + -webkit-border-bottom-left-radius: 0 /*{global-radii-buttons}*/; + border-bottom-left-radius: 0 /*{global-radii-buttons}*/; +} +.ui-btn-corner-br { + -moz-border-radius-bottomright: 0 /*{global-radii-buttons}*/; + -webkit-border-bottom-right-radius: 0 /*{global-radii-buttons}*/; + border-bottom-right-radius: 0 /*{global-radii-buttons}*/; +} +.ui-btn-corner-top { + -moz-border-radius-topleft: 0 /*{global-radii-buttons}*/; + -webkit-border-top-left-radius: 0 /*{global-radii-buttons}*/; + border-top-left-radius: 0 /*{global-radii-buttons}*/; + -moz-border-radius-topright: 0 /*{global-radii-buttons}*/; + -webkit-border-top-right-radius: 0 /*{global-radii-buttons}*/; + border-top-right-radius: 0 /*{global-radii-buttons}*/; +} +.ui-btn-corner-bottom { + -moz-border-radius-bottomleft: 0 /*{global-radii-buttons}*/; + -webkit-border-bottom-left-radius: 0 /*{global-radii-buttons}*/; + border-bottom-left-radius: 0 /*{global-radii-buttons}*/; + -moz-border-radius-bottomright: 0 /*{global-radii-buttons}*/; + -webkit-border-bottom-right-radius: 0 /*{global-radii-buttons}*/; + border-bottom-right-radius: 0 /*{global-radii-buttons}*/; +} +.ui-btn-corner-right { + -moz-border-radius-topright: 0 /*{global-radii-buttons}*/; + -webkit-border-top-right-radius: 0 /*{global-radii-buttons}*/; + border-top-right-radius: 0 /*{global-radii-buttons}*/; + -moz-border-radius-bottomright: 0 /*{global-radii-buttons}*/; + -webkit-border-bottom-right-radius: 0 /*{global-radii-buttons}*/; + border-bottom-right-radius: 0 /*{global-radii-buttons}*/; +} +.ui-btn-corner-left { + -moz-border-radius-topleft: 0 /*{global-radii-buttons}*/; + -webkit-border-top-left-radius: 0 /*{global-radii-buttons}*/; + border-top-left-radius: 0 /*{global-radii-buttons}*/; + -moz-border-radius-bottomleft: 0 /*{global-radii-buttons}*/; + -webkit-border-bottom-left-radius: 0 /*{global-radii-buttons}*/; + border-bottom-left-radius: 0 /*{global-radii-buttons}*/; +} +.ui-btn-corner-all { + -moz-border-radius: 0 /*{global-radii-buttons}*/; + -webkit-border-radius: 0 /*{global-radii-buttons}*/; + border-radius: 0 /*{global-radii-buttons}*/; +} + +/* radius clip workaround for cleaning up corner trapping */ +.ui-corner-tl, +.ui-corner-tr, +.ui-corner-bl, +.ui-corner-br, +.ui-corner-top, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-left, +.ui-corner-all, +.ui-btn-corner-tl, +.ui-btn-corner-tr, +.ui-btn-corner-bl, +.ui-btn-corner-br, +.ui-btn-corner-top, +.ui-btn-corner-bottom, +.ui-btn-corner-right, +.ui-btn-corner-left, +.ui-btn-corner-all { + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +/* Overlay / modal +-----------------------------------------------------------------------------------------------------------*/ + +.ui-overlay { + background: #666; + filter: Alpha(Opacity=50); + opacity: .5; + position: absolute; + width: 100%; + height: 100%; +} +.ui-overlay-shadow { + -moz-box-shadow: 0px 0px 12px rgba(0,0,0,.6); + -webkit-box-shadow: 0px 0px 12px rgba(0,0,0,.6); + box-shadow: 0px 0px 12px rgba(0,0,0,.6); +} +.ui-shadow { + -moz-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; + -webkit-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; + box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; +} +.ui-bar-a .ui-shadow, +.ui-bar-b .ui-shadow , +.ui-bar-c .ui-shadow { + -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.3); + -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.3); + box-shadow: 0px 1px 0 rgba(255,255,255,.3); +} +.ui-shadow-inset { + -moz-box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); + -webkit-box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); + box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); +} +.ui-icon-shadow { + -moz-box-shadow: 0px 1px 0 transparent /*{global-icon-shadow}*/; + -webkit-box-shadow: 0px 1px 0 transparent /*{global-icon-shadow}*/; + box-shadow: 0px 1px 0 transparent /*{global-icon-shadow}*/; +} + +/* Focus state - set here for specificity (note: these classes are added by JavaScript) +-----------------------------------------------------------------------------------------------------------*/ + +.ui-btn:focus, .ui-link-inherit:focus { + outline: 0; +} +.ui-btn.ui-focus { + z-index: 1; +} +.ui-focus, +.ui-btn:focus { + -moz-box-shadow: inset 0px 0px 3px #de4517 /*{global-active-background-color}*/, 0px 0px 9px #de4517 /*{global-active-background-color}*/; + -webkit-box-shadow: inset 0px 0px 3px #de4517 /*{global-active-background-color}*/, 0px 0px 9px #de4517 /*{global-active-background-color}*/; + box-shadow: inset 0px 0px 3px #de4517 /*{global-active-background-color}*/, 0px 0px 9px #de4517 /*{global-active-background-color}*/; +} +.ui-input-text.ui-focus, +.ui-input-search.ui-focus { + -moz-box-shadow: 0px 0px 12px #de4517 /*{global-active-background-color}*/; + -webkit-box-shadow: 0px 0px 12px #de4517 /*{global-active-background-color}*/; + box-shadow: 0px 0px 12px #de4517 /*{global-active-background-color}*/; +} + +/* unset box shadow in browsers that don't do it right +-----------------------------------------------------------------------------------------------------------*/ + +.ui-mobile-nosupport-boxshadow * { + -moz-box-shadow: none !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; +} + +/* ...and bring back focus */ +.ui-mobile-nosupport-boxshadow .ui-focus, +.ui-mobile-nosupport-boxshadow .ui-btn:focus, +.ui-mobile-nosupport-boxshadow .ui-link-inherit:focus { + outline-width: 1px; + outline-style: auto; +} + \ No newline at end of file diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/sc-mobile.min.css b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/sc-mobile.min.css new file mode 100644 index 0000000..e128c37 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/lib/sc-mobile.min.css @@ -0,0 +1,9 @@ +/* +* jQuery Mobile Framework 1.1.2 9a15f1aaf99faa7913103f5ea19ef6959b73d763 +* http://jquerymobile.com +* +* Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors +* Released under the MIT license. +* http://jquery.org/license +* +*/.ui-bar-a{border:1px solid #ffffff ;background:#ffffff ;color:#000000 ;font-weight:bold;text-shadow:0 1px 1px #eeeeee ;background-image:-webkit-gradient(linear,left top,left bottom,from( #FFFFFF ),to( #e5e5e5 )); background-image:-webkit-linear-gradient( #FFFFFF,#e5e5e5 ); background-image: -moz-linear-gradient( #FFFFFF,#e5e5e5 ); background-image: -ms-linear-gradient( #FFFFFF,#e5e5e5 ); background-image: -o-linear-gradient( #FFFFFF,#e5e5e5 ); background-image: linear-gradient( #FFFFFF,#e5e5e5 );}.ui-bar-a .ui-link-inherit{color:#000000 ;}.ui-bar-a a.ui-link{color:#7cc4e7 ;font-weight:bold;}.ui-bar-a a.ui-link:visited{ color:#2489CE ;}.ui-bar-a a.ui-link:hover{color:#2489CE ;}.ui-bar-a a.ui-link:active{color:#2489CE ;}.ui-bar-a,.ui-bar-a input,.ui-bar-a select,.ui-bar-a textarea,.ui-bar-a button{ font-family:Helvetica,Arial,sans-serif ;}.ui-body-a,.ui-overlay-a{border:1px solid #d6d6d6 ;color:#333333 ;text-shadow:0 1px 0 #ffffff ;background:#ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #FFFFFF ),to( #f9f9f9 )); background-image:-webkit-linear-gradient( #FFFFFF,#f9f9f9 ); background-image: -moz-linear-gradient( #FFFFFF,#f9f9f9 ); background-image: -ms-linear-gradient( #FFFFFF,#f9f9f9 ); background-image: -o-linear-gradient( #FFFFFF,#f9f9f9 ); background-image: linear-gradient( #FFFFFF,#f9f9f9 );}.ui-overlay-a{background-image:none;border-width:0;}.ui-body-a,.ui-body-a input,.ui-body-a select,.ui-body-a textarea,.ui-body-a button{ font-family:Helvetica,Arial,sans-serif ;}.ui-body-a .ui-link-inherit{color:#333333 ;}.ui-body-a .ui-link{color:#bc4b20 ;font-weight:bold;}.ui-body-a .ui-link:visited{ color:#2489CE ;}.ui-body-a .ui-link:hover{color:#2489CE ;}.ui-body-a .ui-link:active{color:#2489CE ;}.ui-btn-up-a{border:1px solid #d6d6d6 ;background:#d6d6d6 ;font-weight:bold;color:#333333 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #dadada ),to( #d1d1d1 )); background-image:-webkit-linear-gradient( #dadada,#d1d1d1 ); background-image: -moz-linear-gradient( #dadada,#d1d1d1 ); background-image: -ms-linear-gradient( #dadada,#d1d1d1 ); background-image: -o-linear-gradient( #dadada,#d1d1d1 ); background-image: linear-gradient( #dadada,#d1d1d1 );}.ui-btn-up-a:visited,.ui-btn-up-a a.ui-link-inherit{color:#333333 ;}.ui-btn-hover-a{border:1px solid #d6d6d6 ;background:#d6d6d6 ;font-weight:bold;color:#000000 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #e9e9e9 ),to( #c2c2c2 )); background-image:-webkit-linear-gradient( #e9e9e9,#c2c2c2 ); background-image: -moz-linear-gradient( #e9e9e9,#c2c2c2 ); background-image: -ms-linear-gradient( #e9e9e9,#c2c2c2 ); background-image: -o-linear-gradient( #e9e9e9,#c2c2c2 ); background-image: linear-gradient( #e9e9e9,#c2c2c2 );}.ui-btn-hover-a:visited,.ui-btn-hover-a:hover,.ui-btn-hover-a a.ui-link-inherit{color:#000000 ;}.ui-btn-down-a{border:1px solid #bbbbbb ;background:#d6d6d6 ;font-weight:bold;color:#333333 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #bebebe ),to( #ededed )); background-image:-webkit-linear-gradient( #bebebe,#ededed ); background-image: -moz-linear-gradient( #bebebe,#ededed ); background-image: -ms-linear-gradient( #bebebe,#ededed ); background-image: -o-linear-gradient( #bebebe,#ededed ); background-image: linear-gradient( #bebebe,#ededed );}.ui-btn-down-a:visited,.ui-btn-down-a:hover,.ui-btn-down-a a.ui-link-inherit{color:#333333 ;}.ui-btn-up-a,.ui-btn-hover-a,.ui-btn-down-a{ font-family:Helvetica,Arial,sans-serif ;text-decoration:none;}.ui-bar-b{border:1px solid #ffffff ;background:#ffffff ;color:#000000 ;font-weight:bold;text-shadow:0 1px 1px #eeeeee ;background-image:-webkit-gradient(linear,left top,left bottom,from( #FFFFFF ),to( #e5e5e5 )); background-image:-webkit-linear-gradient( #FFFFFF,#e5e5e5 ); background-image: -moz-linear-gradient( #FFFFFF,#e5e5e5 ); background-image: -ms-linear-gradient( #FFFFFF,#e5e5e5 ); background-image: -o-linear-gradient( #FFFFFF,#e5e5e5 ); background-image: linear-gradient( #FFFFFF,#e5e5e5 );}.ui-bar-b .ui-link-inherit{color:#000000 ;}.ui-bar-b a.ui-link{color:#7cc4e7 ;font-weight:bold;}.ui-bar-b a.ui-link:visited{ color:#2489CE ;}.ui-bar-b a.ui-link:hover{color:#2489CE ;}.ui-bar-b a.ui-link:active{color:#2489CE ;}.ui-bar-b,.ui-bar-b input,.ui-bar-b select,.ui-bar-b textarea,.ui-bar-b button{ font-family:Helvetica,Arial,sans-serif ;}.ui-body-b,.ui-overlay-b{border:1px solid #d6d6d6 ;color:#333333 ;text-shadow:0 1px 0 #ffffff ;background:#ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #FFFFFF ),to( #f9f9f9 )); background-image:-webkit-linear-gradient( #FFFFFF,#f9f9f9 ); background-image: -moz-linear-gradient( #FFFFFF,#f9f9f9 ); background-image: -ms-linear-gradient( #FFFFFF,#f9f9f9 ); background-image: -o-linear-gradient( #FFFFFF,#f9f9f9 ); background-image: linear-gradient( #FFFFFF,#f9f9f9 );}.ui-overlay-b{background-image:none;border-width:0;}.ui-body-b,.ui-body-b input,.ui-body-b select,.ui-body-b textarea,.ui-body-b button{ font-family:Helvetica,Arial,sans-serif ;}.ui-body-b .ui-link-inherit{color:#333333 ;}.ui-body-b .ui-link{color:#bc4b20 ;font-weight:bold;}.ui-body-b .ui-link:visited{ color:#2489CE ;}.ui-body-b .ui-link:hover{color:#2489CE ;}.ui-body-b .ui-link:active{color:#2489CE ;}.ui-btn-up-b{border:1px solid #d6d6d6 ;background:#d6d6d6 ;font-weight:bold;color:#333333 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #dadada ),to( #d1d1d1 )); background-image:-webkit-linear-gradient( #dadada,#d1d1d1 ); background-image: -moz-linear-gradient( #dadada,#d1d1d1 ); background-image: -ms-linear-gradient( #dadada,#d1d1d1 ); background-image: -o-linear-gradient( #dadada,#d1d1d1 ); background-image: linear-gradient( #dadada,#d1d1d1 );}.ui-btn-up-b:visited,.ui-btn-up-b a.ui-link-inherit{color:#333333 ;}.ui-btn-hover-b{border:1px solid #d6d6d6 ;background:#d6d6d6 ;font-weight:bold;color:#000000 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #e9e9e9 ),to( #c2c2c2 )); background-image:-webkit-linear-gradient( #e9e9e9,#c2c2c2 ); background-image: -moz-linear-gradient( #e9e9e9,#c2c2c2 ); background-image: -ms-linear-gradient( #e9e9e9,#c2c2c2 ); background-image: -o-linear-gradient( #e9e9e9,#c2c2c2 ); background-image: linear-gradient( #e9e9e9,#c2c2c2 );}.ui-btn-hover-b:visited,.ui-btn-hover-b:hover,.ui-btn-hover-b a.ui-link-inherit{color:#000000 ;}.ui-btn-down-b{border:1px solid #bbbbbb ;background:#d6d6d6 ;font-weight:bold;color:#333333 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #bebebe ),to( #ededed )); background-image:-webkit-linear-gradient( #bebebe,#ededed ); background-image: -moz-linear-gradient( #bebebe,#ededed ); background-image: -ms-linear-gradient( #bebebe,#ededed ); background-image: -o-linear-gradient( #bebebe,#ededed ); background-image: linear-gradient( #bebebe,#ededed );}.ui-btn-down-b:visited,.ui-btn-down-b:hover,.ui-btn-down-b a.ui-link-inherit{color:#333333 ;}.ui-btn-up-b,.ui-btn-hover-b,.ui-btn-down-b{ font-family:Helvetica,Arial,sans-serif ;text-decoration:none;}.ui-bar-c{border:1px solid #ffffff ;background:#ffffff ;color:#000000 ;font-weight:bold;text-shadow:0 1px 1px #eeeeee ;background-image:-webkit-gradient(linear,left top,left bottom,from( #FFFFFF ),to( #e5e5e5 )); background-image:-webkit-linear-gradient( #FFFFFF,#e5e5e5 ); background-image: -moz-linear-gradient( #FFFFFF,#e5e5e5 ); background-image: -ms-linear-gradient( #FFFFFF,#e5e5e5 ); background-image: -o-linear-gradient( #FFFFFF,#e5e5e5 ); background-image: linear-gradient( #FFFFFF,#e5e5e5 );}.ui-bar-c .ui-link-inherit{color:#000000 ;}.ui-bar-c a.ui-link{color:#7cc4e7 ;font-weight:bold;}.ui-bar-c a.ui-link:visited{ color:#2489CE ;}.ui-bar-c a.ui-link:hover{color:#2489CE ;}.ui-bar-c a.ui-link:active{color:#2489CE ;}.ui-bar-c,.ui-bar-c input,.ui-bar-c select,.ui-bar-c textarea,.ui-bar-c button{ font-family:Helvetica,Arial,sans-serif ;}.ui-body-c,.ui-overlay-c{border:1px solid #d6d6d6 ;color:#333333 ;text-shadow:0 1px 0 #ffffff ;background:#ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #FFFFFF ),to( #f9f9f9 )); background-image:-webkit-linear-gradient( #FFFFFF,#f9f9f9 ); background-image: -moz-linear-gradient( #FFFFFF,#f9f9f9 ); background-image: -ms-linear-gradient( #FFFFFF,#f9f9f9 ); background-image: -o-linear-gradient( #FFFFFF,#f9f9f9 ); background-image: linear-gradient( #FFFFFF,#f9f9f9 );}.ui-overlay-c{background-image:none;border-width:0;}.ui-body-c,.ui-body-c input,.ui-body-c select,.ui-body-c textarea,.ui-body-c button{ font-family:Helvetica,Arial,sans-serif ;}.ui-body-c .ui-link-inherit{color:#333333 ;}.ui-body-c .ui-link{color:#bc4b20 ;font-weight:bold;}.ui-body-c .ui-link:visited{ color:#2489CE ;}.ui-body-c .ui-link:hover{color:#2489CE ;}.ui-body-c .ui-link:active{color:#2489CE ;}.ui-btn-up-c{border:1px solid #d6d6d6 ;background:#d6d6d6 ;font-weight:bold;color:#333333 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #dadada ),to( #d1d1d1 )); background-image:-webkit-linear-gradient( #dadada,#d1d1d1 ); background-image: -moz-linear-gradient( #dadada,#d1d1d1 ); background-image: -ms-linear-gradient( #dadada,#d1d1d1 ); background-image: -o-linear-gradient( #dadada,#d1d1d1 ); background-image: linear-gradient( #dadada,#d1d1d1 );}.ui-btn-up-c:visited,.ui-btn-up-c a.ui-link-inherit{color:#333333 ;}.ui-btn-hover-c{border:1px solid #d6d6d6 ;background:#d6d6d6 ;font-weight:bold;color:#000000 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #e9e9e9 ),to( #c2c2c2 )); background-image:-webkit-linear-gradient( #e9e9e9,#c2c2c2 ); background-image: -moz-linear-gradient( #e9e9e9,#c2c2c2 ); background-image: -ms-linear-gradient( #e9e9e9,#c2c2c2 ); background-image: -o-linear-gradient( #e9e9e9,#c2c2c2 ); background-image: linear-gradient( #e9e9e9,#c2c2c2 );}.ui-btn-hover-c:visited,.ui-btn-hover-c:hover,.ui-btn-hover-c a.ui-link-inherit{color:#000000 ;}.ui-btn-down-c{border:1px solid #bbbbbb ;background:#d6d6d6 ;font-weight:bold;color:#333333 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #bebebe ),to( #ededed )); background-image:-webkit-linear-gradient( #bebebe,#ededed ); background-image: -moz-linear-gradient( #bebebe,#ededed ); background-image: -ms-linear-gradient( #bebebe,#ededed ); background-image: -o-linear-gradient( #bebebe,#ededed ); background-image: linear-gradient( #bebebe,#ededed );}.ui-btn-down-c:visited,.ui-btn-down-c:hover,.ui-btn-down-c a.ui-link-inherit{color:#333333 ;}.ui-btn-up-c,.ui-btn-hover-c,.ui-btn-down-c{ font-family:Helvetica,Arial,sans-serif ;text-decoration:none;}a.ui-link-inherit{text-decoration:none !important;}.ui-btn-active{border:1px solid #bc4b20 ;background:#de4517 ;font-weight:bold;color:#ffffff ;cursor:pointer;text-shadow:0 1px 1px #bc4b20 ;text-decoration:none;background-image:-webkit-gradient(linear,left top,left bottom,from( #de4517 ),to( #de4517 )); background-image:-webkit-linear-gradient( #de4517,#de4517 ); background-image: -moz-linear-gradient( #de4517,#de4517 ); background-image: -ms-linear-gradient( #de4517,#de4517 ); background-image: -o-linear-gradient( #de4517,#de4517 ); background-image: linear-gradient( #de4517,#de4517 ); font-family:Helvetica,Arial,sans-serif ;}.ui-btn-active:visited,.ui-btn-active:hover,.ui-btn-active a.ui-link-inherit{color:#ffffff ;}.ui-btn-inner{border-top:1px solid #fff;border-color:rgba(255,255,255,.3);}.ui-corner-tl{-moz-border-radius-topleft:0 ;-webkit-border-top-left-radius:0 ;border-top-left-radius:0 ;}.ui-corner-tr{-moz-border-radius-topright:0 ;-webkit-border-top-right-radius:0 ;border-top-right-radius:0 ;}.ui-corner-bl{-moz-border-radius-bottomleft:0 ;-webkit-border-bottom-left-radius:0 ;border-bottom-left-radius:0 ;}.ui-corner-br{-moz-border-radius-bottomright:0 ;-webkit-border-bottom-right-radius:0 ;border-bottom-right-radius:0 ;}.ui-corner-top{-moz-border-radius-topleft:0 ;-webkit-border-top-left-radius:0 ;border-top-left-radius:0 ;-moz-border-radius-topright:0 ;-webkit-border-top-right-radius:0 ;border-top-right-radius:0 ;}.ui-corner-bottom{-moz-border-radius-bottomleft:0 ;-webkit-border-bottom-left-radius:0 ;border-bottom-left-radius:0 ;-moz-border-radius-bottomright:0 ;-webkit-border-bottom-right-radius:0 ;border-bottom-right-radius:0 ;}.ui-corner-right{-moz-border-radius-topright:0 ;-webkit-border-top-right-radius:0 ;border-top-right-radius:0 ;-moz-border-radius-bottomright:0 ;-webkit-border-bottom-right-radius:0 ;border-bottom-right-radius:0 ;}.ui-corner-left{-moz-border-radius-topleft:0 ;-webkit-border-top-left-radius:0 ;border-top-left-radius:0 ;-moz-border-radius-bottomleft:0 ;-webkit-border-bottom-left-radius:0 ;border-bottom-left-radius:0 ;}.ui-corner-all{-moz-border-radius:0 ;-webkit-border-radius:0 ;border-radius:0 ;}.ui-corner-none{-moz-border-radius: 0;-webkit-border-radius: 0;border-radius: 0;}.ui-br{border-bottom:rgb(130,130,130);border-bottom:rgba(130,130,130,.3);border-bottom-width:1px;border-bottom-style:solid;}.ui-disabled{filter:Alpha(Opacity=30);opacity:.3;zoom:1;}.ui-disabled,.ui-disabled a{cursor:default !important;pointer-events:none;}.ui-icon,.ui-icon-searchfield:after{background:#000000 ;background:transparent ;background-image:url(images/icons-18-black.png) ;background-repeat:no-repeat;-moz-border-radius:9px;-webkit-border-radius:9px;border-radius:9px;}.ui-icon-alt{background:#fff;background:rgba(255,255,255,.3);background-image:url(images/icons-18-black.png);background-repeat:no-repeat;}@media only screen and (-webkit-min-device-pixel-ratio:1.5), only screen and (min--moz-device-pixel-ratio:1.5), only screen and (min-resolution:240dpi){.ui-icon-plus,.ui-icon-minus,.ui-icon-delete,.ui-icon-arrow-r,.ui-icon-arrow-l,.ui-icon-arrow-u,.ui-icon-arrow-d,.ui-icon-check,.ui-icon-gear,.ui-icon-refresh,.ui-icon-forward,.ui-icon-back,.ui-icon-grid,.ui-icon-star,.ui-icon-alert,.ui-icon-info,.ui-icon-home,.ui-icon-search,.ui-icon-searchfield:after,.ui-icon-checkbox-off,.ui-icon-checkbox-on,.ui-icon-radio-off,.ui-icon-radio-on{background-image:url(images/icons-36-white.png);-moz-background-size:776px 18px;-o-background-size:776px 18px;-webkit-background-size:776px 18px;background-size:776px 18px;}.ui-icon-alt{background-image:url(images/icons-36-black.png);}}.ui-icon-plus{background-position:-0 50%;}.ui-icon-minus{background-position:-36px 50%;}.ui-icon-delete{background-position:-72px 50%;}.ui-icon-arrow-r{background-position:-108px 50%;}.ui-icon-arrow-l{background-position:-144px 50%;}.ui-icon-arrow-u{background-position:-180px 50%;}.ui-icon-arrow-d{background-position:-216px 50%;}.ui-icon-check{background-position:-252px 50%;}.ui-icon-gear{background-position:-288px 50%;}.ui-icon-refresh{background-position:-324px 50%;}.ui-icon-forward{background-position:-360px 50%;}.ui-icon-back{background-position:-396px 50%;}.ui-icon-grid{background-position:-432px 50%;}.ui-icon-star{background-position:-468px 50%;}.ui-icon-alert{background-position:-504px 50%;}.ui-icon-info{background-position:-540px 50%;}.ui-icon-home{background-position:-576px 50%;}.ui-icon-search,.ui-icon-searchfield:after{background-position:-612px 50%;}.ui-icon-checkbox-off{background-position:-684px 50%;}.ui-icon-checkbox-on{background-position:-648px 50%;}.ui-icon-radio-off{background-position:-756px 50%;}.ui-icon-radio-on{background-position:-720px 50%;}.ui-checkbox .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;}.ui-icon-checkbox-off,.ui-icon-radio-off{background-color:transparent;}.ui-checkbox-on .ui-icon,.ui-radio-on .ui-icon{background-color:#de4517 ; }.ui-icon-loading{background:url(images/ajax-loader.gif);background-size:46px 46px;}.ui-btn-corner-tl{-moz-border-radius-topleft:0 ;-webkit-border-top-left-radius:0 ;border-top-left-radius:0 ;}.ui-btn-corner-tr{-moz-border-radius-topright:0 ;-webkit-border-top-right-radius:0 ;border-top-right-radius:0 ;}.ui-btn-corner-bl{-moz-border-radius-bottomleft:0 ;-webkit-border-bottom-left-radius:0 ;border-bottom-left-radius:0 ;}.ui-btn-corner-br{-moz-border-radius-bottomright:0 ;-webkit-border-bottom-right-radius:0 ;border-bottom-right-radius:0 ;}.ui-btn-corner-top{-moz-border-radius-topleft:0 ;-webkit-border-top-left-radius:0 ;border-top-left-radius:0 ;-moz-border-radius-topright:0 ;-webkit-border-top-right-radius:0 ;border-top-right-radius:0 ;}.ui-btn-corner-bottom{-moz-border-radius-bottomleft:0 ;-webkit-border-bottom-left-radius:0 ;border-bottom-left-radius:0 ;-moz-border-radius-bottomright:0 ;-webkit-border-bottom-right-radius:0 ;border-bottom-right-radius:0 ;}.ui-btn-corner-right{-moz-border-radius-topright:0 ;-webkit-border-top-right-radius:0 ;border-top-right-radius:0 ;-moz-border-radius-bottomright:0 ;-webkit-border-bottom-right-radius:0 ;border-bottom-right-radius:0 ;}.ui-btn-corner-left{-moz-border-radius-topleft:0 ;-webkit-border-top-left-radius:0 ;border-top-left-radius:0 ;-moz-border-radius-bottomleft:0 ;-webkit-border-bottom-left-radius:0 ;border-bottom-left-radius:0 ;}.ui-btn-corner-all{-moz-border-radius:0 ;-webkit-border-radius:0 ;border-radius:0 ;}.ui-corner-tl,.ui-corner-tr,.ui-corner-bl,.ui-corner-br,.ui-corner-top,.ui-corner-bottom,.ui-corner-right,.ui-corner-left,.ui-corner-all,.ui-btn-corner-tl,.ui-btn-corner-tr,.ui-btn-corner-bl,.ui-btn-corner-br,.ui-btn-corner-top,.ui-btn-corner-bottom,.ui-btn-corner-right,.ui-btn-corner-left,.ui-btn-corner-all{ -webkit-background-clip:padding-box; -moz-background-clip:padding; background-clip:padding-box;}.ui-overlay{background:#666;filter:Alpha(Opacity=50);opacity:.5;position:absolute;width:100%;height:100%;}.ui-overlay-shadow{-moz-box-shadow:0px 0px 12px rgba(0,0,0,.6);-webkit-box-shadow:0px 0px 12px rgba(0,0,0,.6);box-shadow:0px 0px 12px rgba(0,0,0,.6);}.ui-shadow{-moz-box-shadow:0px 1px 4px rgba(0,0,0,.3) ;-webkit-box-shadow:0px 1px 4px rgba(0,0,0,.3) ;box-shadow:0px 1px 4px rgba(0,0,0,.3) ;}.ui-bar-a .ui-shadow,.ui-bar-b .ui-shadow,.ui-bar-c .ui-shadow {-moz-box-shadow:0px 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0px 1px 0 rgba(255,255,255,.3);box-shadow:0px 1px 0 rgba(255,255,255,.3);}.ui-shadow-inset{-moz-box-shadow:inset 0px 1px 4px rgba(0,0,0,.2);-webkit-box-shadow:inset 0px 1px 4px rgba(0,0,0,.2);box-shadow:inset 0px 1px 4px rgba(0,0,0,.2);}.ui-icon-shadow{-moz-box-shadow:0px 1px 0 transparent ;-webkit-box-shadow:0px 1px 0 transparent ;box-shadow:0px 1px 0 transparent ;}.ui-btn:focus,.ui-link-inherit:focus{outline:0;}.ui-btn.ui-focus{z-index:1;}.ui-focus,.ui-btn:focus{-moz-box-shadow:inset 0px 0px 3px #de4517,0px 0px 9px #de4517 ;-webkit-box-shadow:inset 0px 0px 3px #de4517,0px 0px 9px #de4517 ;box-shadow:inset 0px 0px 3px #de4517,0px 0px 9px #de4517 ;}.ui-input-text.ui-focus,.ui-input-search.ui-focus{-moz-box-shadow:0px 0px 12px #de4517 ;-webkit-box-shadow:0px 0px 12px #de4517 ;box-shadow:0px 0px 12px #de4517 ;}.ui-mobile-nosupport-boxshadow *{-moz-box-shadow:none !important;-webkit-box-shadow:none !important;box-shadow:none !important;}.ui-mobile-nosupport-boxshadow .ui-focus,.ui-mobile-nosupport-boxshadow .ui-btn:focus,.ui-mobile-nosupport-boxshadow .ui-link-inherit:focus{outline-width:1px;outline-style:auto;} \ No newline at end of file diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/readme.txt b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/readme.txt new file mode 100644 index 0000000..af30d28 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/readme.txt @@ -0,0 +1,88 @@ + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +Mobile theme for DSpace 1.6 +Created by Elias Tzoc <tzoce@miamioh.edu> and + James Russell <james@ohiolink.edu> + September 14, 2012 + +Mobile theme 1.1 +Updated by Elias Tzoc <tzoce@miamioh.edu> + September 30, 2013 +Fixes: switch to non-mobile pages; CSS and reloading problems; and mobile-optimized page for advanced search + +=================================================================================== +The mobile theme file structure + ++-- mobile +| +-- lib +| | +-- cookies.js +| | +-- detectmobile.js +| | +-- images +| | | +-- ajax-loader.gif +| | | +-- default-thumbnail.png +| | | +-- icons-18-black.png +| | | +-- icons-18-white.png +| | | +-- icons-36-black.png +| | | +-- icons-36-white.png +| | +-- m-tweaks.css +| | +-- sc-mobile.css +| | +-- sc-mobile.min.css +| | +-- mobile.xsl +| | +-- sitemap.xmap +| | +-- themes.xmap +| +-- readme.txt + + +Installation: + +0. Get a new domain name that is an alias of the existing domain name + for your DSpace installation. + e.g. if your current domain is yoursite.edu your new domain name + might be mobile.yoursite.edu + These instructions assume that the new domain name starts with 'mobile.' + If it is something else, you will need to make a change in Step 5. + +1. Copy the mobile theme folder into your XMLUI theme folder + e.g. ../dspace/webapps/xmlui/themes/ + +2. Add a call for the detectmobile.js and cookies.js file in the header + of your current main theme.xsl file. + It should look like: + <script type="text/javascript" src="/themes/mobile/lib/detectmobile.js"> </script> + <script type="text/javascript" src="/themes/mobile/lib/cookies.js"> </script> + * In this file, we also add a "View mobile site" link in the footer + section, which allows users to view the full site on their + mobile devices. The cookies.js file saves this preference + but it's erased when the session is closed. + If you want such a link, the code for this should look like the following + (with the appropriate URL for your mobile site): + <a href="#" onclick="eraseCookie('viewfull');window.location='http://mobile.yoursite.edu';"> + View mobile site</a> + +3. Open the detectmobile.js file and enter your new mobile domain + at the end of the function call e.g. mobile.yoursite.edu + * if you choose a different domain name or theme name other than + "mobile" make sure to update the settings in the sitemap.xmap + +4. In mobile.xsl, find the link "View full website" and replace the + references to yoursite.edu with the domain name for your main site. + * lines 255-257 + +5. Replace or edit the themes.xmap file located in your default theme + folder e.g. ../dspace/webapps/xmlui/themes/ + * The code for setting up the properties for the domain is in + lines 32-37. This will need to be changed if the domain name + for your mobile site starts with something other than 'mobile.' + +6. Restart tomcat and now you should be able to see the mobile theme + in action; to change the look-and-feel, you can go to + http://jquerymobile.com/themeroller/ and either create your own + files or import/upgrade the uncompressed sc-mobile.css file. + +NOTE: Pages with more complex structure such as "Advanced Search" were + excluded in this first mobile theme. + diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/sitemap.xmap b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/sitemap.xmap new file mode 100644 index 0000000..9bbdfa0 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/sitemap.xmap @@ -0,0 +1,96 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<!-- + + sitemap.xmap + Mobile theme for DSpace 1.6 + Last update by James Russell <james@ohiolink.edu> + September 12, 2012 + +--> + +<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> + <map:pipelines> + + <map:component-configurations> + <global-variables> + <theme-path>Participatorio-mobile</theme-path> + <theme-name>Participatorio's Mobile theme for DSpace</theme-name> + </global-variables> + </map:component-configurations> + + + <map:pipeline> + <!-- Allow the browser to cache static content for an hour --> + <map:parameter name="expires" value="access plus 1 hours"/> + + <!-- Static content --> + <map:match pattern="themes/*/**"> + <map:read src="{2}"/> + </map:match> + </map:pipeline> + + <map:pipeline> + <!-- Never allow the browser to cache dynamic content --> + <map:parameter name="expires" value="now"/> + + <!-- Aspect content --> + <map:match pattern="**"> + + <!-- Step 1: Generate the DRI page --> + <map:generate type="file" src="cocoon://DRI/{1}"/> + + <!-- Step 2 Add page metadata --> + <map:select type="browser"> + <!-- Internet explorer 6 --> + <map:when test="explorer6"> + <map:transform type="IncludePageMeta"> + <map:parameter name="stylesheet.screen#1" value="lib/style.css"/> + <map:parameter name="stylesheet.screen#2" value="lib/style-ie6.css"/> + + <map:parameter name="theme.path" value="{global:theme-path}"/> + <map:parameter name="theme.name" value="{global:theme-name}"/> + </map:transform> + </map:when> + <!-- The theme has been tested with firefox 2.0 & i.e. 7.0 --> + <map:otherwise> + <map:transform type="IncludePageMeta"> + <map:parameter name="stylesheet.screen" value="lib/style.css"/> + + <map:parameter name="theme.path" value="{global:theme-path}"/> + <map:parameter name="theme.name" value="{global:theme-name}"/> + </map:transform> + </map:otherwise> + </map:select> + + <!-- Debuging output --> + <map:match type="request" pattern="XML"> + <map:serialize type="xml"/> + </map:match> + + <!-- Step 3: Transform to XHTML --> + <map:transform src="Participatorio-mobile.xsl"/> + + <!-- Step 4: Localize the page --> + <!-- Mobile theme should only use the messages_mobile.xml to display short and mobile-friendly labels --> + <map:act type="locale"> + <map:transform type="i18n"> + <map:parameter name="locale" value="{locale}"/> + </map:transform> + </map:act> + + <!-- Step 5: Serialize to the browser --> + <map:serialize type="xhtml"/> + + </map:match> + </map:pipeline> + </map:pipelines> +</map:sitemap> diff --git a/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/themes.xmap b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/themes.xmap new file mode 100644 index 0000000..5d9dd08 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/Participatorio-mobile/themes.xmap @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<!-- + + themes.xmap + Mobile theme for DSpace 1.6 + Last update by James Russell <james@ohiolink.edu> + September 12, 2012 + +--> + +<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> + <map:components> + + <map:matchers default="wildcard"> + <!-- + The ThemeMatcher matches the sitemap URI against the configured set of + Theme rules. The selected theme is identified by the sitemap parameters + {theme} and {themeName}. + --> + <map:matcher name="ThemeMatcher" src="org.dspace.app.xmlui.cocoon.ThemeMatcher"/> + <map:matcher name="WildcardHostMatcher" src="org.apache.cocoon.matching.WildcardHostMatcher"/> + </map:matchers> + + </map:components> + + + <map:pipelines> + + <!-- match the new domain and limit it to use the mobile theme --> + <map:pipeline> + <map:match type="WildcardHostMatcher" pattern="m.*"> + <map:mount uri-prefix="" src="Participatorio-mobile/"/> + </map:match> + + <!-- + Theme Rules + --> + <map:match type="ThemeMatcher"> + <map:mount uri-prefix="" src="{theme}"/> + </map:match> + + <!-- + Default Theme, if the above matcher failed then no theme rule applied to this + url. In this case, we'll just use the Reference theme. + --> + <map:match pattern="**"> + <map:mount uri-prefix="" src="Reference/"/> + </map:match> + + </map:pipeline> + </map:pipelines> +</map:sitemap> diff --git a/dspace/modules/xmlui/src/main/webapp/themes/themes.xmap b/dspace/modules/xmlui/src/main/webapp/themes/themes.xmap new file mode 100644 index 0000000..7e6e456 --- /dev/null +++ b/dspace/modules/xmlui/src/main/webapp/themes/themes.xmap @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + The contents of this file are subject to the license and copyright + detailed in the LICENSE and NOTICE files at the root of the source + tree and available online at + + http://www.dspace.org/license/ + +--> +<!-- + + themes.xmap + Mobile theme for DSpace 1.6 + Last update by James Russell <james@ohiolink.edu> + September 12, 2012 + +--> + +<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> + <map:components> + + <map:matchers default="wildcard"> + <!-- + The ThemeMatcher matches the sitemap URI against the configured set of + Theme rules. The selected theme is identified by the sitemap parameters + {theme} and {themeName}. + --> + <map:matcher name="ThemeMatcher" src="org.dspace.app.xmlui.cocoon.ThemeMatcher"/> + <map:matcher name="WildcardHostMatcher" src="org.apache.cocoon.matching.WildcardHostMatcher"/> + </map:matchers> + + </map:components> + + + <map:pipelines> + + <map:pipeline> + + <!-- match the new domain and limit it to use the mobile theme --> + <map:match type="WildcardHostMatcher" pattern="m.*"> + <map:mount uri-prefix="" src="Participatorio-mobile/"/> + </map:match> + + <!-- + Theme Rules + --> + <map:match type="ThemeMatcher"> + <map:mount uri-prefix="" src="{theme}"/> + </map:match> + + <!-- + Default Theme, if the above matcher failed then no theme rule applied to this + url. In this case, we'll just use the Reference theme. + --> + <map:match pattern="**"> + <map:mount uri-prefix="" src="Reference/"/> + </map:match> + + </map:pipeline> + </map:pipelines> +</map:sitemap> -- GitLab